@ai-table/grid 0.0.43 → 0.0.45

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 (119) hide show
  1. package/angular-konva/interfaces/event-object.d.ts +4 -0
  2. package/angular-konva/interfaces/event-object.d.ts.map +1 -1
  3. package/components/cell-editors/date/date-editor.component.d.ts +1 -0
  4. package/components/cell-editors/date/date-editor.component.d.ts.map +1 -1
  5. package/components/cell-editors/link/edit-link/edit-link.component.d.ts +13 -3
  6. package/components/cell-editors/link/edit-link/edit-link.component.d.ts.map +1 -1
  7. package/components/cell-editors/link/link-editor.component.d.ts +1 -0
  8. package/components/cell-editors/link/link-editor.component.d.ts.map +1 -1
  9. package/components/drag/drag.component.d.ts +10 -1
  10. package/components/drag/drag.component.d.ts.map +1 -1
  11. package/components/drag/drag.component.scss +1 -1
  12. package/components/field-menu/field-menu.component.d.ts +3 -2
  13. package/components/field-menu/field-menu.component.d.ts.map +1 -1
  14. package/components/field-setting/field-setting.component.d.ts +17 -3
  15. package/components/field-setting/field-setting.component.d.ts.map +1 -1
  16. package/constants/grid.d.ts.map +1 -1
  17. package/constants/table.d.ts +5 -1
  18. package/constants/table.d.ts.map +1 -1
  19. package/core/constants/field.d.ts +2 -2
  20. package/core/constants/field.d.ts.map +1 -1
  21. package/core/types/ai-table.d.ts +2 -0
  22. package/core/types/ai-table.d.ts.map +1 -1
  23. package/core/types/core.d.ts +4 -4
  24. package/core/types/core.d.ts.map +1 -1
  25. package/core/utils/common.d.ts +1 -0
  26. package/core/utils/common.d.ts.map +1 -1
  27. package/core/utils/field.d.ts +1 -1
  28. package/core/utils/field.d.ts.map +1 -1
  29. package/core/utils/{shoft-id.d.ts → short-id.d.ts} +1 -1
  30. package/core/utils/{shoft-id.d.ts.map → short-id.d.ts.map} +1 -1
  31. package/esm2022/angular-konva/interfaces/event-object.mjs +1 -1
  32. package/esm2022/components/cell-editors/date/date-editor.component.mjs +9 -3
  33. package/esm2022/components/cell-editors/link/edit-link/edit-link.component.mjs +27 -12
  34. package/esm2022/components/cell-editors/link/link-editor.component.mjs +12 -8
  35. package/esm2022/components/drag/drag.component.mjs +107 -79
  36. package/esm2022/components/field-menu/field-menu.component.mjs +9 -3
  37. package/esm2022/components/field-setting/field-setting.component.mjs +28 -14
  38. package/esm2022/constants/grid.mjs +1 -2
  39. package/esm2022/constants/table.mjs +6 -2
  40. package/esm2022/core/constants/field.mjs +95 -95
  41. package/esm2022/core/types/ai-table.mjs +1 -1
  42. package/esm2022/core/types/core.mjs +1 -2
  43. package/esm2022/core/utils/common.mjs +13 -1
  44. package/esm2022/core/utils/field.mjs +13 -8
  45. package/esm2022/core/utils/id-creator.mjs +2 -2
  46. package/esm2022/core/utils/{shoft-id.mjs → short-id.mjs} +1 -1
  47. package/esm2022/grid-base.component.mjs +14 -4
  48. package/esm2022/grid.component.mjs +54 -29
  49. package/esm2022/renderer/components/action-icon.component.mjs +117 -0
  50. package/esm2022/renderer/components/cells/attachment.component.mjs +117 -0
  51. package/esm2022/renderer/components/cells/index.mjs +3 -1
  52. package/esm2022/renderer/components/cells/link.component.mjs +2 -2
  53. package/esm2022/renderer/components/hover-cell.component.mjs +7 -7
  54. package/esm2022/renderer/creations/create-active-cell-border.mjs +1 -2
  55. package/esm2022/renderer/creations/create-heads.mjs +3 -2
  56. package/esm2022/renderer/drawers/cell-drawer.mjs +4 -7
  57. package/esm2022/types/cell.mjs +1 -1
  58. package/esm2022/types/component-config.mjs +1 -1
  59. package/esm2022/types/field.mjs +1 -1
  60. package/esm2022/types/grid.mjs +1 -1
  61. package/esm2022/utils/build.mjs +5 -4
  62. package/esm2022/utils/cell.mjs +3 -3
  63. package/esm2022/utils/clipboard/paste.mjs +6 -4
  64. package/esm2022/utils/common.mjs +6 -5
  65. package/esm2022/utils/field/model/date.mjs +6 -12
  66. package/esm2022/utils/field/model/progress.mjs +11 -4
  67. package/esm2022/utils/file.mjs +1 -93
  68. package/esm2022/utils/hover-cell.mjs +1 -8
  69. package/esm2022/utils/i18n.mjs +85 -0
  70. package/esm2022/utils/index.mjs +2 -1
  71. package/esm2022/utils/position.mjs +3 -3
  72. package/esm2022/utils/visible-range.mjs +3 -3
  73. package/fesm2022/ai-table-grid.mjs +1762 -1510
  74. package/fesm2022/ai-table-grid.mjs.map +1 -1
  75. package/grid-base.component.d.ts +7 -2
  76. package/grid-base.component.d.ts.map +1 -1
  77. package/grid.component.d.ts.map +1 -1
  78. package/package.json +1 -1
  79. package/renderer/components/action-icon.component.d.ts +47 -0
  80. package/renderer/components/action-icon.component.d.ts.map +1 -0
  81. package/renderer/components/cells/attachment.component.d.ts +16 -0
  82. package/renderer/components/cells/attachment.component.d.ts.map +1 -0
  83. package/renderer/components/cells/index.d.ts +1 -0
  84. package/renderer/components/cells/index.d.ts.map +1 -1
  85. package/renderer/creations/create-active-cell-border.d.ts.map +1 -1
  86. package/renderer/creations/create-heads.d.ts.map +1 -1
  87. package/renderer/drawers/cell-drawer.d.ts.map +1 -1
  88. package/types/cell.d.ts +1 -0
  89. package/types/cell.d.ts.map +1 -1
  90. package/types/component-config.d.ts +13 -1
  91. package/types/component-config.d.ts.map +1 -1
  92. package/types/field.d.ts +1 -1
  93. package/types/field.d.ts.map +1 -1
  94. package/types/grid.d.ts +1 -1
  95. package/types/grid.d.ts.map +1 -1
  96. package/utils/build.d.ts +2 -2
  97. package/utils/build.d.ts.map +1 -1
  98. package/utils/cell.d.ts +1 -1
  99. package/utils/cell.d.ts.map +1 -1
  100. package/utils/clipboard/paste.d.ts +2 -2
  101. package/utils/clipboard/paste.d.ts.map +1 -1
  102. package/utils/common.d.ts +1 -1
  103. package/utils/common.d.ts.map +1 -1
  104. package/utils/field/model/date.d.ts.map +1 -1
  105. package/utils/field/model/progress.d.ts.map +1 -1
  106. package/utils/file.d.ts +0 -9
  107. package/utils/file.d.ts.map +1 -1
  108. package/utils/hover-cell.d.ts.map +1 -1
  109. package/utils/i18n.d.ts +39 -0
  110. package/utils/i18n.d.ts.map +1 -0
  111. package/utils/index.d.ts +1 -0
  112. package/utils/index.d.ts.map +1 -1
  113. package/utils/position.d.ts +2 -2
  114. package/utils/position.d.ts.map +1 -1
  115. package/utils/visible-range.d.ts +2 -2
  116. package/utils/visible-range.d.ts.map +1 -1
  117. package/esm2022/utils/icon.mjs +0 -48
  118. package/utils/icon.d.ts +0 -19
  119. package/utils/icon.d.ts.map +0 -1
@@ -1,5 +1,6 @@
1
- import { Component, EventEmitter, Input, Output } from '@angular/core';
1
+ import { Component, computed, EventEmitter, input, Input, Output } from '@angular/core';
2
2
  import { FormsModule } from '@angular/forms';
3
+ import { AITableGridI18nKey, getI18nTextByKey } from '../../../../utils/i18n';
3
4
  import { ThyButton } from 'ngx-tethys/button';
4
5
  import { ThyFormModule, ThyFormSubmitDirective } from 'ngx-tethys/form';
5
6
  import { ThyInputDirective } from 'ngx-tethys/input';
@@ -17,23 +18,37 @@ export class LinkEditComponent {
17
18
  this.thyPopoverRef = thyPopoverRef;
18
19
  this.url = '';
19
20
  this.text = '';
21
+ this.aiTable = input();
20
22
  this.confirm = new EventEmitter();
21
23
  this.URLRegex = LINK_URL_REGEX;
22
- this.validatorConfig = {
23
- validationMessages: {
24
- url: {
25
- pattern: '链接格式不正确'
24
+ this.i18nTexts = computed(() => {
25
+ return {
26
+ linkText: getI18nTextByKey(this.aiTable(), AITableGridI18nKey.linkText),
27
+ textPlaceholder: getI18nTextByKey(this.aiTable(), AITableGridI18nKey.inputText),
28
+ urlLabel: getI18nTextByKey(this.aiTable(), AITableGridI18nKey.linkUrl),
29
+ urlPlaceholder: getI18nTextByKey(this.aiTable(), AITableGridI18nKey.inputUrl),
30
+ cancel: getI18nTextByKey(this.aiTable(), AITableGridI18nKey.cancel),
31
+ apply: getI18nTextByKey(this.aiTable(), AITableGridI18nKey.apply)
32
+ };
33
+ });
34
+ this.validatorConfig = computed(() => {
35
+ return {
36
+ validationMessages: {
37
+ url: {
38
+ pattern: getI18nTextByKey(this.aiTable(), AITableGridI18nKey.invalidLinkFormat)
39
+ }
26
40
  }
27
- }
28
- };
41
+ };
42
+ });
43
+ }
44
+ ngOnInit() {
29
45
  }
30
- ngOnInit() { }
31
46
  close() {
32
47
  this.thyPopoverRef.close();
33
48
  }
34
49
  apply(form) {
35
50
  if (this.text && !this.url) {
36
- form.validator.setElementErrorMessage('url', '链接不能为空');
51
+ form.validator.setElementErrorMessage('url', getI18nTextByKey(this.aiTable(), AITableGridI18nKey.linkRequired));
37
52
  return;
38
53
  }
39
54
  this.close();
@@ -43,7 +58,7 @@ export class LinkEditComponent {
43
58
  this.confirm.emit(link);
44
59
  }
45
60
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LinkEditComponent, deps: [{ token: i1.ThyPopoverRef }], target: i0.ɵɵFactoryTarget.Component }); }
46
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: LinkEditComponent, isStandalone: true, selector: "link-edit", inputs: { url: "url", text: "text" }, outputs: { confirm: "confirm" }, ngImport: i0, template: "<form\n thyLayout=\"vertical\"\n thyStopPropagation\n thyForm\n #linkForm=\"thyForm\"\n [thyFormValidatorConfig]=\"validatorConfig\"\n name=\"linkForm\"\n class=\"p-5\"\n>\n <thy-form-group thyLabelText=\"\u6587\u672C\">\n <input thyInput placeholder=\"\u8F93\u5165\u6587\u672C\" name=\"text\" [(ngModel)]=\"text\" thyAutofocus type=\"text\" />\n </thy-form-group>\n <thy-form-group thyLabelText=\"\u94FE\u63A5\">\n <input name=\"url\" thyInput placeholder=\"\u8F93\u5165\u94FE\u63A5\" [pattern]=\"URLRegex\" type=\"text\" [(ngModel)]=\"url\" />\n </thy-form-group>\n <thy-form-group-footer thyAlign=\"right\">\n <div class=\"btn-pair\">\n <button thyStopPropagation thyButton=\"link-secondary\" thySize=\"sm\" (click)=\"close()\">\u53D6\u6D88</button>\n <button thyStopPropagation thyButton=\"primary\" thySize=\"sm\" (thyFormSubmit)=\"apply(linkForm)\">\u5E94\u7528</button>\n </div>\n </thy-form-group-footer>\n</form>\n", dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: ThyStopPropagationDirective, selector: "[thyStopPropagation]", inputs: ["thyStopPropagation"] }, { kind: "directive", type: ThyInputDirective, selector: "input[thyInput], select[thyInput], textarea[thyInput]", inputs: ["thySize"], exportAs: ["thyInput"] }, { kind: "directive", type: ThyAutofocusDirective, selector: "input[thyAutofocus],textarea[thyAutofocus]", inputs: ["thyAutofocus", "thyAutoSelect"] }, { kind: "component", type: ThyButton, selector: "thy-button,[thy-button],[thyButton]", inputs: ["thyButton", "thyType", "thyLoading", "thyLoadingText", "thySize", "thyIcon", "thyBlock"] }, { kind: "directive", type: ThyFormSubmitDirective, selector: "[thyFormSubmit],[thy-form-submit]", outputs: ["thyFormSubmit"] }, { kind: "ngmodule", type: ThyFormModule }, { kind: "directive", type: i3.ThyFormDirective, selector: "[thyForm],[thy-form]", inputs: ["thyLayout", "thyEnterKeyMode", "thyFormValidatorConfig"], exportAs: ["thyForm"] }, { kind: "component", type: i3.ThyFormGroup, selector: "thy-form-group", inputs: ["thyLabelText", "thyLabelTextTranslateKey", "thyLabelRequired", "thyLabelPaddingTopClear", "thyFeedbackIcon", "thyTipsMode", "thyTips", "thyTipsTranslateKey", "thyRowFill"] }, { kind: "component", type: i3.ThyFormGroupFooter, selector: "thy-form-group-footer", inputs: ["thyAlign"] }] }); }
61
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.13", type: LinkEditComponent, isStandalone: true, selector: "link-edit", inputs: { url: { classPropertyName: "url", publicName: "url", isSignal: false, isRequired: false, transformFunction: null }, text: { classPropertyName: "text", publicName: "text", isSignal: false, isRequired: false, transformFunction: null }, aiTable: { classPropertyName: "aiTable", publicName: "aiTable", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { confirm: "confirm" }, ngImport: i0, template: "<form\n thyLayout=\"vertical\"\n thyStopPropagation\n thyForm\n #linkForm=\"thyForm\"\n [thyFormValidatorConfig]=\"validatorConfig()\"\n name=\"linkForm\"\n class=\"p-5\"\n>\n <thy-form-group [thyLabelText]=\"i18nTexts().linkText\">\n <input thyInput [placeholder]=\"i18nTexts().textPlaceholder\" />\n </thy-form-group>\n <thy-form-group [thyLabelText]=\"i18nTexts().urlLabel\">\n <input name=\"url\" thyInput [placeholder]=\"i18nTexts().urlPlaceholder\" [pattern]=\"URLRegex\" type=\"text\" [(ngModel)]=\"url\" />\n </thy-form-group>\n <thy-form-group-footer thyAlign=\"right\">\n <div class=\"btn-pair\">\n <button thyStopPropagation thyButton=\"link-secondary\" thySize=\"sm\" (click)=\"close()\">{{i18nTexts().cancel}}</button>\n <button thyStopPropagation thyButton=\"primary\" thySize=\"sm\" (thyFormSubmit)=\"apply(linkForm)\">{{i18nTexts().apply}}</button>\n </div>\n </thy-form-group-footer>\n</form>\n", dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: ThyStopPropagationDirective, selector: "[thyStopPropagation]", inputs: ["thyStopPropagation"] }, { kind: "directive", type: ThyInputDirective, selector: "input[thyInput], select[thyInput], textarea[thyInput]", inputs: ["thySize"], exportAs: ["thyInput"] }, { kind: "component", type: ThyButton, selector: "thy-button,[thy-button],[thyButton]", inputs: ["thyButton", "thyType", "thyLoading", "thyLoadingText", "thySize", "thyIcon", "thyBlock"] }, { kind: "directive", type: ThyFormSubmitDirective, selector: "[thyFormSubmit],[thy-form-submit]", outputs: ["thyFormSubmit"] }, { kind: "ngmodule", type: ThyFormModule }, { kind: "directive", type: i3.ThyFormDirective, selector: "[thyForm],[thy-form]", inputs: ["thyLayout", "thyEnterKeyMode", "thyFormValidatorConfig"], exportAs: ["thyForm"] }, { kind: "component", type: i3.ThyFormGroup, selector: "thy-form-group", inputs: ["thyLabelText", "thyLabelTextTranslateKey", "thyLabelRequired", "thyLabelPaddingTopClear", "thyFeedbackIcon", "thyTipsMode", "thyTips", "thyTipsTranslateKey", "thyRowFill"] }, { kind: "component", type: i3.ThyFormGroupFooter, selector: "thy-form-group-footer", inputs: ["thyAlign"] }] }); }
47
62
  }
48
63
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LinkEditComponent, decorators: [{
49
64
  type: Component,
@@ -55,7 +70,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
55
70
  ThyButton,
56
71
  ThyFormSubmitDirective,
57
72
  ThyFormModule
58
- ], template: "<form\n thyLayout=\"vertical\"\n thyStopPropagation\n thyForm\n #linkForm=\"thyForm\"\n [thyFormValidatorConfig]=\"validatorConfig\"\n name=\"linkForm\"\n class=\"p-5\"\n>\n <thy-form-group thyLabelText=\"\u6587\u672C\">\n <input thyInput placeholder=\"\u8F93\u5165\u6587\u672C\" name=\"text\" [(ngModel)]=\"text\" thyAutofocus type=\"text\" />\n </thy-form-group>\n <thy-form-group thyLabelText=\"\u94FE\u63A5\">\n <input name=\"url\" thyInput placeholder=\"\u8F93\u5165\u94FE\u63A5\" [pattern]=\"URLRegex\" type=\"text\" [(ngModel)]=\"url\" />\n </thy-form-group>\n <thy-form-group-footer thyAlign=\"right\">\n <div class=\"btn-pair\">\n <button thyStopPropagation thyButton=\"link-secondary\" thySize=\"sm\" (click)=\"close()\">\u53D6\u6D88</button>\n <button thyStopPropagation thyButton=\"primary\" thySize=\"sm\" (thyFormSubmit)=\"apply(linkForm)\">\u5E94\u7528</button>\n </div>\n </thy-form-group-footer>\n</form>\n" }]
73
+ ], template: "<form\n thyLayout=\"vertical\"\n thyStopPropagation\n thyForm\n #linkForm=\"thyForm\"\n [thyFormValidatorConfig]=\"validatorConfig()\"\n name=\"linkForm\"\n class=\"p-5\"\n>\n <thy-form-group [thyLabelText]=\"i18nTexts().linkText\">\n <input thyInput [placeholder]=\"i18nTexts().textPlaceholder\" />\n </thy-form-group>\n <thy-form-group [thyLabelText]=\"i18nTexts().urlLabel\">\n <input name=\"url\" thyInput [placeholder]=\"i18nTexts().urlPlaceholder\" [pattern]=\"URLRegex\" type=\"text\" [(ngModel)]=\"url\" />\n </thy-form-group>\n <thy-form-group-footer thyAlign=\"right\">\n <div class=\"btn-pair\">\n <button thyStopPropagation thyButton=\"link-secondary\" thySize=\"sm\" (click)=\"close()\">{{i18nTexts().cancel}}</button>\n <button thyStopPropagation thyButton=\"primary\" thySize=\"sm\" (thyFormSubmit)=\"apply(linkForm)\">{{i18nTexts().apply}}</button>\n </div>\n </thy-form-group-footer>\n</form>\n" }]
59
74
  }], ctorParameters: () => [{ type: i1.ThyPopoverRef }], propDecorators: { url: [{
60
75
  type: Input
61
76
  }], text: [{
@@ -63,4 +78,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
63
78
  }], confirm: [{
64
79
  type: Output
65
80
  }] } });
66
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdC1saW5rLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dyaWQvc3JjL2NvbXBvbmVudHMvY2VsbC1lZGl0b3JzL2xpbmsvZWRpdC1saW5rL2VkaXQtbGluay5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9ncmlkL3NyYy9jb21wb25lbnRzL2NlbGwtZWRpdG9ycy9saW5rL2VkaXQtbGluay9lZGl0LWxpbmsuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzlDLE9BQU8sRUFJSCxhQUFhLEVBQ2Isc0JBQXNCLEVBRXpCLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFckQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLDJCQUEyQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7Ozs7O0FBR3ZGLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxvREFBb0QsQ0FBQztBQUVuRjs7R0FFRztBQWVILE1BQU0sT0FBTyxpQkFBaUI7SUFpQjFCLFlBQW1CLGFBQXFDO1FBQXJDLGtCQUFhLEdBQWIsYUFBYSxDQUF3QjtRQWhCL0MsUUFBRyxHQUFHLEVBQUUsQ0FBQztRQUVULFNBQUksR0FBRyxFQUFFLENBQUM7UUFFVCxZQUFPLEdBQUcsSUFBSSxZQUFZLEVBQWlDLENBQUM7UUFFL0QsYUFBUSxHQUFHLGNBQWMsQ0FBQztRQUVqQyxvQkFBZSxHQUFHO1lBQ2Qsa0JBQWtCLEVBQUU7Z0JBQ2hCLEdBQUcsRUFBRTtvQkFDRCxPQUFPLEVBQUUsU0FBUztpQkFDckI7YUFDSjtTQUNKLENBQUM7SUFFeUQsQ0FBQztJQUU1RCxRQUFRLEtBQUksQ0FBQztJQUViLEtBQUs7UUFDRCxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBc0I7UUFDeEIsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxTQUFTLENBQUMsc0JBQXNCLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ3ZELE9BQU87UUFDWCxDQUFDO1FBRUQsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2IsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM5QixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzVCLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUMvRCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM1QixDQUFDOytHQXBDUSxpQkFBaUI7bUdBQWpCLGlCQUFpQiw0SUNuQzlCLHMvQkFzQkEsMkNESVEsV0FBVyxpc0NBQ1gsMkJBQTJCLGlHQUMzQixpQkFBaUIsK0lBQ2pCLHFCQUFxQixrSUFDckIsU0FBUyxvTEFDVCxzQkFBc0IseUdBQ3RCLGFBQWE7OzRGQUdSLGlCQUFpQjtrQkFkN0IsU0FBUzsrQkFDSSxXQUFXLGNBRVQsSUFBSSxXQUNQO3dCQUNMLFdBQVc7d0JBQ1gsMkJBQTJCO3dCQUMzQixpQkFBaUI7d0JBQ2pCLHFCQUFxQjt3QkFDckIsU0FBUzt3QkFDVCxzQkFBc0I7d0JBQ3RCLGFBQWE7cUJBQ2hCO2tGQUdRLEdBQUc7c0JBQVgsS0FBSztnQkFFRyxJQUFJO3NCQUFaLEtBQUs7Z0JBRUksT0FBTztzQkFBaEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgVGh5QnV0dG9uIH0gZnJvbSAnbmd4LXRldGh5cy9idXR0b24nO1xuaW1wb3J0IHtcbiAgICBUaHlGb3JtRGlyZWN0aXZlLFxuICAgIFRoeUZvcm1Hcm91cCxcbiAgICBUaHlGb3JtR3JvdXBGb290ZXIsXG4gICAgVGh5Rm9ybU1vZHVsZSxcbiAgICBUaHlGb3JtU3VibWl0RGlyZWN0aXZlLFxuICAgIFRoeUZvcm1WYWxpZGF0b3JMb2FkZXJcbn0gZnJvbSAnbmd4LXRldGh5cy9mb3JtJztcbmltcG9ydCB7IFRoeUlucHV0RGlyZWN0aXZlIH0gZnJvbSAnbmd4LXRldGh5cy9pbnB1dCc7XG5pbXBvcnQgeyBUaHlQb3BvdmVyUmVmIH0gZnJvbSAnbmd4LXRldGh5cy9wb3BvdmVyJztcbmltcG9ydCB7IFRoeUF1dG9mb2N1c0RpcmVjdGl2ZSwgVGh5U3RvcFByb3BhZ2F0aW9uRGlyZWN0aXZlIH0gZnJvbSAnbmd4LXRldGh5cy9zaGFyZWQnO1xuaW1wb3J0IHsgU2FmZUFueSB9IGZyb20gJ25neC10ZXRoeXMvdHlwZXMnO1xuXG5leHBvcnQgY29uc3QgTElOS19VUkxfUkVHRVggPSAvXmh0dHAocyk/OlxcL1xcLyhbXFx3LV0rXFwuKStbXFx3LV0rKFxcL1tcXHctIC5cXC8/JSY9XSopPy87XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdsaW5rLWVkaXQnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9lZGl0LWxpbmsuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBGb3Jtc01vZHVsZSxcbiAgICAgICAgVGh5U3RvcFByb3BhZ2F0aW9uRGlyZWN0aXZlLFxuICAgICAgICBUaHlJbnB1dERpcmVjdGl2ZSxcbiAgICAgICAgVGh5QXV0b2ZvY3VzRGlyZWN0aXZlLFxuICAgICAgICBUaHlCdXR0b24sXG4gICAgICAgIFRoeUZvcm1TdWJtaXREaXJlY3RpdmUsXG4gICAgICAgIFRoeUZvcm1Nb2R1bGVcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIExpbmtFZGl0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBASW5wdXQoKSB1cmwgPSAnJztcblxuICAgIEBJbnB1dCgpIHRleHQgPSAnJztcblxuICAgIEBPdXRwdXQoKSBjb25maXJtID0gbmV3IEV2ZW50RW1pdHRlcjx7IHVybDogc3RyaW5nOyB0ZXh0OiBzdHJpbmcgfT4oKTtcblxuICAgIHB1YmxpYyBVUkxSZWdleCA9IExJTktfVVJMX1JFR0VYO1xuXG4gICAgdmFsaWRhdG9yQ29uZmlnID0ge1xuICAgICAgICB2YWxpZGF0aW9uTWVzc2FnZXM6IHtcbiAgICAgICAgICAgIHVybDoge1xuICAgICAgICAgICAgICAgIHBhdHRlcm46ICfpk77mjqXmoLzlvI/kuI3mraPnoa4nXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3RydWN0b3IocHVibGljIHRoeVBvcG92ZXJSZWY6IFRoeVBvcG92ZXJSZWY8U2FmZUFueT4pIHt9XG5cbiAgICBuZ09uSW5pdCgpIHt9XG5cbiAgICBjbG9zZSgpIHtcbiAgICAgICAgdGhpcy50aHlQb3BvdmVyUmVmLmNsb3NlKCk7XG4gICAgfVxuXG4gICAgYXBwbHkoZm9ybTogVGh5Rm9ybURpcmVjdGl2ZSkge1xuICAgICAgICBpZiAodGhpcy50ZXh0ICYmICF0aGlzLnVybCkge1xuICAgICAgICAgICAgZm9ybS52YWxpZGF0b3Iuc2V0RWxlbWVudEVycm9yTWVzc2FnZSgndXJsJywgJ+mTvuaOpeS4jeiDveS4uuepuicpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICBjb25zdCB0ZXh0ID0gdGhpcy50ZXh0LnRyaW0oKTtcbiAgICAgICAgY29uc3QgdXJsID0gdGhpcy51cmwudHJpbSgpO1xuICAgICAgICBjb25zdCBsaW5rID0gdXJsID8geyB0ZXh0OiB0ZXh0IHx8IHVybCwgdXJsOiB1cmwgfSA6IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5jb25maXJtLmVtaXQobGluayk7XG4gICAgfVxufVxuIiwiPGZvcm1cbiAgICB0aHlMYXlvdXQ9XCJ2ZXJ0aWNhbFwiXG4gICAgdGh5U3RvcFByb3BhZ2F0aW9uXG4gICAgdGh5Rm9ybVxuICAgICNsaW5rRm9ybT1cInRoeUZvcm1cIlxuICAgIFt0aHlGb3JtVmFsaWRhdG9yQ29uZmlnXT1cInZhbGlkYXRvckNvbmZpZ1wiXG4gICAgbmFtZT1cImxpbmtGb3JtXCJcbiAgICBjbGFzcz1cInAtNVwiXG4+XG4gICAgPHRoeS1mb3JtLWdyb3VwIHRoeUxhYmVsVGV4dD1cIuaWh+acrFwiPlxuICAgICAgICA8aW5wdXQgdGh5SW5wdXQgcGxhY2Vob2xkZXI9XCLovpPlhaXmlofmnKxcIiBuYW1lPVwidGV4dFwiIFsobmdNb2RlbCldPVwidGV4dFwiIHRoeUF1dG9mb2N1cyB0eXBlPVwidGV4dFwiIC8+XG4gICAgPC90aHktZm9ybS1ncm91cD5cbiAgICA8dGh5LWZvcm0tZ3JvdXAgdGh5TGFiZWxUZXh0PVwi6ZO+5o6lXCI+XG4gICAgICAgIDxpbnB1dCBuYW1lPVwidXJsXCIgdGh5SW5wdXQgcGxhY2Vob2xkZXI9XCLovpPlhaXpk77mjqVcIiBbcGF0dGVybl09XCJVUkxSZWdleFwiIHR5cGU9XCJ0ZXh0XCIgWyhuZ01vZGVsKV09XCJ1cmxcIiAvPlxuICAgIDwvdGh5LWZvcm0tZ3JvdXA+XG4gICAgPHRoeS1mb3JtLWdyb3VwLWZvb3RlciB0aHlBbGlnbj1cInJpZ2h0XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJidG4tcGFpclwiPlxuICAgICAgICAgICAgPGJ1dHRvbiB0aHlTdG9wUHJvcGFnYXRpb24gdGh5QnV0dG9uPVwibGluay1zZWNvbmRhcnlcIiB0aHlTaXplPVwic21cIiAoY2xpY2spPVwiY2xvc2UoKVwiPuWPlua2iDwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvbiB0aHlTdG9wUHJvcGFnYXRpb24gdGh5QnV0dG9uPVwicHJpbWFyeVwiIHRoeVNpemU9XCJzbVwiICh0aHlGb3JtU3VibWl0KT1cImFwcGx5KGxpbmtGb3JtKVwiPuW6lOeUqDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L3RoeS1mb3JtLWdyb3VwLWZvb3Rlcj5cbjwvZm9ybT5cbiJdfQ==
81
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdC1saW5rLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dyaWQvc3JjL2NvbXBvbmVudHMvY2VsbC1lZGl0b3JzL2xpbmsvZWRpdC1saW5rL2VkaXQtbGluay5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9ncmlkL3NyYy9jb21wb25lbnRzL2NlbGwtZWRpdG9ycy9saW5rL2VkaXQtbGluay9lZGl0LWxpbmsuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ3hHLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM5RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxFQUFvQixhQUFhLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVyRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7Ozs7QUFHdkYsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLG9EQUFvRCxDQUFDO0FBRW5GOztHQUVHO0FBZUgsTUFBTSxPQUFPLGlCQUFpQjtJQWdDMUIsWUFBbUIsYUFBcUM7UUFBckMsa0JBQWEsR0FBYixhQUFhLENBQXdCO1FBL0IvQyxRQUFHLEdBQUcsRUFBRSxDQUFDO1FBRVQsU0FBSSxHQUFHLEVBQUUsQ0FBQztRQUVuQixZQUFPLEdBQUcsS0FBSyxFQUFX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cnQgeyBDb21wb25lbnQsIGNvbXB1dGVkLCBFdmVudEVtaXR0ZXIsIGlucHV0LCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBBSVRhYmxlIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS90eXBlcy9haS10YWJsZSc7XG5pbXBvcnQgeyBBSVRhYmxlR3JpZEkxOG5LZXksIGdldEkxOG5UZXh0QnlLZXkgfSBmcm9tICcuLi8uLi8uLi8uLi91dGlscy9pMThuJztcbmltcG9ydCB7IFRoeUJ1dHRvbiB9IGZyb20gJ25neC10ZXRoeXMvYnV0dG9uJztcbmltcG9ydCB7IFRoeUZvcm1EaXJlY3RpdmUsIFRoeUZvcm1Nb2R1bGUsIFRoeUZvcm1TdWJtaXREaXJlY3RpdmUgfSBmcm9tICduZ3gtdGV0aHlzL2Zvcm0nO1xuaW1wb3J0IHsgVGh5SW5wdXREaXJlY3RpdmUgfSBmcm9tICduZ3gtdGV0aHlzL2lucHV0JztcbmltcG9ydCB7IFRoeVBvcG92ZXJSZWYgfSBmcm9tICduZ3gtdGV0aHlzL3BvcG92ZXInO1xuaW1wb3J0IHsgVGh5QXV0b2ZvY3VzRGlyZWN0aXZlLCBUaHlTdG9wUHJvcGFnYXRpb25EaXJlY3RpdmUgfSBmcm9tICduZ3gtdGV0aHlzL3NoYXJlZCc7XG5pbXBvcnQgeyBTYWZlQW55IH0gZnJvbSAnbmd4LXRldGh5cy90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBMSU5LX1VSTF9SRUdFWCA9IC9eaHR0cChzKT86XFwvXFwvKFtcXHctXStcXC4pK1tcXHctXSsoXFwvW1xcdy0gLlxcLz8lJj1dKik/LztcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2xpbmstZWRpdCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2VkaXQtbGluay5jb21wb25lbnQuaHRtbCcsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIEZvcm1zTW9kdWxlLFxuICAgICAgICBUaHlTdG9wUHJvcGFnYXRpb25EaXJlY3RpdmUsXG4gICAgICAgIFRoeUlucHV0RGlyZWN0aXZlLFxuICAgICAgICBUaHlBdXRvZm9jdXNEaXJlY3RpdmUsXG4gICAgICAgIFRoeUJ1dHRvbixcbiAgICAgICAgVGh5Rm9ybVN1Ym1pdERpcmVjdGl2ZSxcbiAgICAgICAgVGh5Rm9ybU1vZHVsZVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgTGlua0VkaXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIEBJbnB1dCgpIHVybCA9ICcnO1xuXG4gICAgQElucHV0KCkgdGV4dCA9ICcnO1xuXG4gICAgYWlUYWJsZSA9IGlucHV0PEFJVGFibGU+KCk7XG5cbiAgICBAT3V0cHV0KCkgY29uZmlybSA9IG5ldyBFdmVudEVtaXR0ZXI8eyB1cmw6IHN0cmluZzsgdGV4dDogc3RyaW5nIH0+KCk7XG5cbiAgICBwdWJsaWMgVVJMUmVnZXggPSBMSU5LX1VSTF9SRUdFWDtcblxuICAgIGkxOG5UZXh0cyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxpbmtUZXh0OiBnZXRJMThuVGV4dEJ5S2V5KHRoaXMuYWlUYWJsZSgpISwgQUlUYWJsZUdyaWRJMThuS2V5LmxpbmtUZXh0KSxcbiAgICAgICAgICAgIHRleHRQbGFjZWhvbGRlcjogZ2V0STE4blRleHRCeUtleSh0aGlzLmFpVGFibGUoKSEsIEFJVGFibGVHcmlkSTE4bktleS5pbnB1dFRleHQpLFxuICAgICAgICAgICAgdXJsTGFiZWw6IGdldEkxOG5UZXh0QnlLZXkodGhpcy5haVRhYmxlKCkhLCBBSVRhYmxlR3JpZEkxOG5LZXkubGlua1VybCksXG4gICAgICAgICAgICB1cmxQbGFjZWhvbGRlcjogZ2V0STE4blRleHRCeUtleSh0aGlzLmFpVGFibGUoKSEsIEFJVGFibGVHcmlkSTE4bktleS5pbnB1dFVybCksXG4gICAgICAgICAgICBjYW5jZWw6IGdldEkxOG5UZXh0QnlLZXkodGhpcy5haVRhYmxlKCkhLCBBSVRhYmxlR3JpZEkxOG5LZXkuY2FuY2VsKSxcbiAgICAgICAgICAgIGFwcGx5OiBnZXRJMThuVGV4dEJ5S2V5KHRoaXMuYWlUYWJsZSgpISwgQUlUYWJsZUdyaWRJMThuS2V5LmFwcGx5KVxuICAgICAgICB9O1xuICAgIH0pO1xuXG4gICAgdmFsaWRhdG9yQ29uZmlnID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsaWRhdGlvbk1lc3NhZ2VzOiB7XG4gICAgICAgICAgICAgICAgdXJsOiB7XG4gICAgICAgICAgICAgICAgICAgIHBhdHRlcm46IGdldEkxOG5UZXh0QnlLZXkodGhpcy5haVRhYmxlKCkhLCBBSVRhYmxlR3JpZEkxOG5LZXkuaW52YWxpZExpbmtGb3JtYXQpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH0pO1xuXG4gICAgY29uc3RydWN0b3IocHVibGljIHRoeVBvcG92ZXJSZWY6IFRoeVBvcG92ZXJSZWY8U2FmZUFueT4pIHt9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICB9XG5cbiAgICBjbG9zZSgpIHtcbiAgICAgICAgdGhpcy50aHlQb3BvdmVyUmVmLmNsb3NlKCk7XG4gICAgfVxuXG4gICAgYXBwbHkoZm9ybTogVGh5Rm9ybURpcmVjdGl2ZSkge1xuICAgICAgICBpZiAodGhpcy50ZXh0ICYmICF0aGlzLnVybCkge1xuICAgICAgICAgICAgZm9ybS52YWxpZGF0b3Iuc2V0RWxlbWVudEVycm9yTWVzc2FnZSgndXJsJywgZ2V0STE4blRleHRCeUtleSh0aGlzLmFpVGFibGUoKSEsIEFJVGFibGVHcmlkSTE4bktleS5saW5rUmVxdWlyZWQpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgY29uc3QgdGV4dCA9IHRoaXMudGV4dC50cmltKCk7XG4gICAgICAgIGNvbnN0IHVybCA9IHRoaXMudXJsLnRyaW0oKTtcbiAgICAgICAgY29uc3QgbGluayA9IHVybCA/IHsgdGV4dDogdGV4dCB8fCB1cmwsIHVybDogdXJsIH0gOiB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuY29uZmlybS5lbWl0KGxpbmspO1xuICAgIH1cbn1cbiIsIjxmb3JtXG4gICAgdGh5TGF5b3V0PVwidmVydGljYWxcIlxuICAgIHRoeVN0b3BQcm9wYWdhdGlvblxuICAgIHRoeUZvcm1cbiAgICAjbGlua0Zvcm09XCJ0aHlGb3JtXCJcbiAgICBbdGh5Rm9ybVZhbGlkYXRvckNvbmZpZ109XCJ2YWxpZGF0b3JDb25maWcoKVwiXG4gICAgbmFtZT1cImxpbmtGb3JtXCJcbiAgICBjbGFzcz1cInAtNVwiXG4+XG4gICAgPHRoeS1mb3JtLWdyb3VwIFt0aHlMYWJlbFRleHRdPVwiaTE4blRleHRzKCkubGlua1RleHRcIj5cbiAgICAgICAgPGlucHV0IHRoeUlucHV0IFtwbGFjZWhvbGRlcl09XCJpMThuVGV4dHMoKS50ZXh0UGxhY2Vob2xkZXJcIiAvPlxuICAgIDwvdGh5LWZvcm0tZ3JvdXA+XG4gICAgPHRoeS1mb3JtLWdyb3VwIFt0aHlMYWJlbFRleHRdPVwiaTE4blRleHRzKCkudXJsTGFiZWxcIj5cbiAgICAgICAgPGlucHV0IG5hbWU9XCJ1cmxcIiB0aHlJbnB1dCBbcGxhY2Vob2xkZXJdPVwiaTE4blRleHRzKCkudXJsUGxhY2Vob2xkZXJcIiBbcGF0dGVybl09XCJVUkxSZWdleFwiIHR5cGU9XCJ0ZXh0XCIgWyhuZ01vZGVsKV09XCJ1cmxcIiAvPlxuICAgIDwvdGh5LWZvcm0tZ3JvdXA+XG4gICAgPHRoeS1mb3JtLWdyb3VwLWZvb3RlciB0aHlBbGlnbj1cInJpZ2h0XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJidG4tcGFpclwiPlxuICAgICAgICAgICAgPGJ1dHRvbiB0aHlTdG9wUHJvcGFnYXRpb24gdGh5QnV0dG9uPVwibGluay1zZWNvbmRhcnlcIiB0aHlTaXplPVwic21cIiAoY2xpY2spPVwiY2xvc2UoKVwiPnt7aTE4blRleHRzKCkuY2FuY2VsfX08L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gdGh5U3RvcFByb3BhZ2F0aW9uIHRoeUJ1dHRvbj1cInByaW1hcnlcIiB0aHlTaXplPVwic21cIiAodGh5Rm9ybVN1Ym1pdCk9XCJhcHBseShsaW5rRm9ybSlcIj57e2kxOG5UZXh0cygpLmFwcGx5fX08L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC90aHktZm9ybS1ncm91cC1mb290ZXI+XG48L2Zvcm0+XG4iXX0=
@@ -1,4 +1,4 @@
1
- import { ChangeDetectionStrategy, ChangeDetectorRef, Component, inject, ViewChild } from '@angular/core';
1
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, computed, inject, ViewChild } from '@angular/core';
2
2
  import { FormsModule } from '@angular/forms';
3
3
  import { ThyAutofocusDirective, ThyEnterDirective } from 'ngx-tethys/shared';
4
4
  import { AbstractEditCellEditor } from '../abstract-cell-editor.component';
@@ -10,6 +10,7 @@ import { ThyPopover } from 'ngx-tethys/popover';
10
10
  import { LINK_URL_REGEX, LinkEditComponent } from './edit-link/edit-link.component';
11
11
  import * as _ from 'lodash';
12
12
  import { ThyNotifyService } from 'ngx-tethys/notify';
13
+ import { AITableGridI18nKey, getI18nTextByKey } from '../../../utils/i18n';
13
14
  import * as i0 from "@angular/core";
14
15
  import * as i1 from "@angular/forms";
15
16
  import * as i2 from "ngx-tethys/tooltip";
@@ -24,6 +25,9 @@ export class LinkCellEditorComponent extends AbstractEditCellEditor {
24
25
  this.cdr = inject(ChangeDetectorRef);
25
26
  this.notifyService = inject(ThyNotifyService);
26
27
  this.isOpened = false;
28
+ this.linkTooltip = computed(() => {
29
+ return getI18nTextByKey(this.aiTable, AITableGridI18nKey.linkTooltip);
30
+ });
27
31
  }
28
32
  isValidLink(link) {
29
33
  if (!link?.text?.trim()) {
@@ -58,7 +62,7 @@ export class LinkCellEditorComponent extends AbstractEditCellEditor {
58
62
  }
59
63
  updateValue() {
60
64
  if (!this.isValidLink({ text: this.text, url: this.url ?? '' })) {
61
- this.notifyService.error('链接格式不正确');
65
+ this.notifyService.error(getI18nTextByKey(this.aiTable, AITableGridI18nKey.invalidLinkFormat));
62
66
  return;
63
67
  }
64
68
  this.modelValue = this.createLinkValue({ text: this.text, url: this.url ?? '' });
@@ -77,7 +81,8 @@ export class LinkCellEditorComponent extends AbstractEditCellEditor {
77
81
  width: this.elementRef.nativeElement.clientWidth + 'px',
78
82
  initialState: {
79
83
  url: this.url ?? '',
80
- text: this.text ?? ''
84
+ text: this.text ?? '',
85
+ aiTable: this.aiTable
81
86
  }
82
87
  });
83
88
  if (popoverRef) {
@@ -93,7 +98,7 @@ export class LinkCellEditorComponent extends AbstractEditCellEditor {
93
98
  }
94
99
  }
95
100
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LinkCellEditorComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
96
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: LinkCellEditorComponent, isStandalone: true, selector: "link-cell-editor", host: { classAttribute: "ai-table-link-editor" }, viewQueries: [{ propertyName: "inputElement", first: true, predicate: ["inputElement"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<thy-input-group class=\"link-input-group h-100\" thySize=\"lg\">\n <input\n #inputElement\n class=\"h-100\"\n class=\"link-input\"\n thyInput\n thySize=\"md\"\n [thyAutofocus]=\"true\"\n [(ngModel)]=\"text\"\n (blur)=\"blur($event)\"\n (thyEnter)=\"updateValue()\"\n />\n <ng-template #suffix>\n <a\n thyAction\n thyIcon=\"link-insert\"\n thyTooltip=\"\u94FE\u63A5\"\n class=\"font-size-base edit-icon\"\n [class.active]=\"isOpened\"\n href=\"javascript:;\"\n (click)=\"openEdit()\"\n ></a>\n </ng-template>\n</thy-input-group>\n", dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: ThyAutofocusDirective, selector: "input[thyAutofocus],textarea[thyAutofocus]", inputs: ["thyAutofocus", "thyAutoSelect"] }, { kind: "directive", type: ThyEnterDirective, selector: "[thyEnter]", outputs: ["thyEnter"] }, { kind: "component", type: ThyInputGroup, selector: "thy-input-group", inputs: ["thyAppendText", "thyAppendTextTranslateKey", "thyPrependText", "thyPrependTextTranslateKey", "thySize"] }, { kind: "ngmodule", type: ThyTooltipModule }, { kind: "directive", type: i2.ThyTooltipDirective, selector: "[thyTooltip],[thy-tooltip]", inputs: ["thyTooltip", "thyTooltipPlacement", "thyTooltipClass", "thyTooltipShowDelay", "thyTooltipHideDelay", "thyTooltipTrigger", "thyTooltipDisabled", "thyTooltipTemplateContext", "thyTooltipOffset", "thyTooltipPin"], exportAs: ["thyTooltip"] }, { kind: "component", type: ThyAction, selector: "thy-action, [thyAction]", inputs: ["thyType", "thyIcon", "thyActionIcon", "thyActive", "thyActionActive", "thyTheme", "thyHoverIcon", "thyDisabled"] }, { kind: "ngmodule", type: ThyInputModule }, { kind: "directive", type: i3.ThyInputDirective, selector: "input[thyInput], select[thyInput], textarea[thyInput]", inputs: ["thySize"], exportAs: ["thyInput"] }, { kind: "ngmodule", type: ThyFlexibleTextModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
101
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: LinkCellEditorComponent, isStandalone: true, selector: "link-cell-editor", host: { classAttribute: "ai-table-link-editor" }, viewQueries: [{ propertyName: "inputElement", first: true, predicate: ["inputElement"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<thy-input-group class=\"link-input-group h-100\" thySize=\"lg\">\n <input\n #inputElement\n class=\"h-100\"\n class=\"link-input\"\n thyInput\n thySize=\"md\"\n [thyAutofocus]=\"true\"\n [(ngModel)]=\"text\"\n (blur)=\"blur($event)\"\n (thyEnter)=\"updateValue()\"\n />\n <ng-template #suffix>\n <a\n thyAction\n thyIcon=\"link-insert\"\n [thyTooltip]=\"linkTooltip()\"\n class=\"font-size-base edit-icon\"\n [class.active]=\"isOpened\"\n href=\"javascript:;\"\n (click)=\"openEdit()\"\n ></a>\n </ng-template>\n</thy-input-group>\n", dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: ThyAutofocusDirective, selector: "input[thyAutofocus],textarea[thyAutofocus]", inputs: ["thyAutofocus", "thyAutoSelect"] }, { kind: "directive", type: ThyEnterDirective, selector: "[thyEnter]", outputs: ["thyEnter"] }, { kind: "component", type: ThyInputGroup, selector: "thy-input-group", inputs: ["thyAppendText", "thyAppendTextTranslateKey", "thyPrependText", "thyPrependTextTranslateKey", "thySize"] }, { kind: "ngmodule", type: ThyTooltipModule }, { kind: "directive", type: i2.ThyTooltipDirective, selector: "[thyTooltip],[thy-tooltip]", inputs: ["thyTooltip", "thyTooltipPlacement", "thyTooltipClass", "thyTooltipShowDelay", "thyTooltipHideDelay", "thyTooltipTrigger", "thyTooltipDisabled", "thyTooltipTemplateContext", "thyTooltipOffset", "thyTooltipPin"], exportAs: ["thyTooltip"] }, { kind: "component", type: ThyAction, selector: "thy-action, [thyAction]", inputs: ["thyType", "thyIcon", "thyActionIcon", "thyActive", "thyActionActive", "thyTheme", "thyHoverIcon", "thyDisabled"] }, { kind: "ngmodule", type: ThyInputModule }, { kind: "directive", type: i3.ThyInputDirective, selector: "input[thyInput], select[thyInput], textarea[thyInput]", inputs: ["thySize"], exportAs: ["thyInput"] }, { kind: "ngmodule", type: ThyFlexibleTextModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
97
102
  }
98
103
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LinkCellEditorComponent, decorators: [{
99
104
  type: Component,
@@ -105,13 +110,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
105
110
  ThyTooltipModule,
106
111
  ThyAction,
107
112
  ThyInputModule,
108
- ThyFlexibleTextModule,
109
- LinkEditComponent
113
+ ThyFlexibleTextModule
110
114
  ], host: {
111
115
  class: 'ai-table-link-editor'
112
- }, template: "<thy-input-group class=\"link-input-group h-100\" thySize=\"lg\">\n <input\n #inputElement\n class=\"h-100\"\n class=\"link-input\"\n thyInput\n thySize=\"md\"\n [thyAutofocus]=\"true\"\n [(ngModel)]=\"text\"\n (blur)=\"blur($event)\"\n (thyEnter)=\"updateValue()\"\n />\n <ng-template #suffix>\n <a\n thyAction\n thyIcon=\"link-insert\"\n thyTooltip=\"\u94FE\u63A5\"\n class=\"font-size-base edit-icon\"\n [class.active]=\"isOpened\"\n href=\"javascript:;\"\n (click)=\"openEdit()\"\n ></a>\n </ng-template>\n</thy-input-group>\n" }]
116
+ }, template: "<thy-input-group class=\"link-input-group h-100\" thySize=\"lg\">\n <input\n #inputElement\n class=\"h-100\"\n class=\"link-input\"\n thyInput\n thySize=\"md\"\n [thyAutofocus]=\"true\"\n [(ngModel)]=\"text\"\n (blur)=\"blur($event)\"\n (thyEnter)=\"updateValue()\"\n />\n <ng-template #suffix>\n <a\n thyAction\n thyIcon=\"link-insert\"\n [thyTooltip]=\"linkTooltip()\"\n class=\"font-size-base edit-icon\"\n [class.active]=\"isOpened\"\n href=\"javascript:;\"\n (click)=\"openEdit()\"\n ></a>\n </ng-template>\n</thy-input-group>\n" }]
113
117
  }], propDecorators: { inputElement: [{
114
118
  type: ViewChild,
115
119
  args: ['inputElement', { static: false }]
116
120
  }] } });
117
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluay1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ3JpZC9zcmMvY29tcG9uZW50cy9jZWxsLWVkaXRvcnMvbGluay9saW5rLWVkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9ncmlkL3NyYy9jb21wb25lbnRzL2NlbGwtZWRpdG9ycy9saW5rL2xpbmstZWRpdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQXdCLE1BQU0sRUFBVSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkksT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzdFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDakUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDdEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDcEYsT0FBTyxLQUFLLENBQUMsTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7Ozs7O0FBc0JyRCxNQUFNLE9BQU8s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Q3JCLGlCQUFpQiw4RUFDakIsYUFBYSw4S0FDYixnQkFBZ0IsbVhBQ2hCLFNBQVMsK0xBQ1QsY0FBYyxpTUFDZCxxQkFBcUI7OzRGQU9oQix1QkFBdUI7a0JBcEJuQyxTQUFTOytCQUNJLGtCQUFrQixjQUVoQixJQUFJLG1CQUNDLHVCQUF1QixDQUFDLE1BQU0sV0FDdEM7d0JBQ0wsV0FBVzt3QkFDWCxxQkFBcUI7d0JBQ3JCLGlCQUFpQjt3QkFDakIsYUFBYTt3QkFDYixnQkFBZ0I7d0JBQ2hCLFNBQVM7d0JBQ1QsY0FBYzt3QkFDZCxxQkFBcUI7d0JBQ3JCLGlCQUFpQjtxQkFDcEIsUUFDSzt3QkFDRixLQUFLLEVBQUUsc0JBQXNCO3FCQUNoQzs4QkFJRCxZQUFZO3NCQURYLFNBQVM7dUJBQUMsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBjb21wdXRlZCwgRWxlbWVudFJlZiwgaW5qZWN0LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBUaHlBdXRvZm9jdXNEaXJlY3RpdmUsIFRoeUVudGVyRGlyZWN0aXZlIH0gZnJvbSAnbmd4LXRldGh5cy9zaGFyZWQnO1xuaW1wb3J0IHsgQWJzdHJhY3RFZGl0Q2VsbEVkaXRvciB9IGZyb20gJy4uL2Fic3RyYWN0LWNlbGwtZWRpdG9yLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUaHlJbnB1dEdyb3VwLCBUaHlJbnB1dE1vZHVsZSB9IGZyb20gJ25neC10ZXRoeXMvaW5wdXQnO1xuaW1wb3J0IHsgVGh5VG9vbHRpcE1vZHVsZSB9IGZyb20gJ25neC10ZXRoeXMvdG9vbHRpcCc7XG5pbXBvcnQgeyBUaHlBY3Rpb24gfSBmcm9tICduZ3gtdGV0aHlzL2FjdGlvbic7XG5pbXBvcnQgeyBUaHlGbGV4aWJsZVRleHRNb2R1bGUgfSBmcm9tICduZ3gtdGV0aHlzL2ZsZXhpYmxlLXRleHQnO1xuaW1wb3J0IHsgVGh5UG9wb3ZlciB9IGZyb20gJ25neC10ZXRoeXMvcG9wb3Zlcic7XG5pbXBvcnQgeyBMSU5LX1VSTF9SRUdFWCwgTGlua0VkaXRDb21wb25lbnQgfSBmcm9tICcuL2VkaXQtbGluay9lZGl0LWxpbmsuY29tcG9uZW50JztcbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IFRoeU5vdGlmeVNlcnZpY2UgfSBmcm9tICduZ3gtdGV0aHlzL25vdGlmeSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbGluay1jZWxsLWVkaXRvcicsXG4gICAgdGVtcGxhdGVVcmw6IGAuL2xpbmstZWRpdG9yLmNvbXBvbmVudC5odG1sYCxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgRm9ybXNNb2R1bGUsXG4gICAgICAgIFRoeUF1dG9mb2N1c0RpcmVjdGl2ZSxcbiAgICAgICAgVGh5RW50ZXJEaXJlY3RpdmUsXG4gICAgICAgIFRoeUlucHV0R3JvdXAsXG4gICAgICAgIFRoeVRvb2x0aXBNb2R1bGUsXG4gICAgICAgIFRoeUFjdGlvbixcbiAgICAgICAgVGh5SW5wdXRNb2R1bGUsXG4gICAgICAgIFRoeUZsZXhpYmxlVGV4dE1vZHVsZSxcbiAgICAgICAgTGlua0VkaXRDb21wb25lbnRcbiAgICBdLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgY2xhc3M6ICdhaS10YWJsZS1saW5rLWVkaXRvcidcbiAgICB9XG59KVxuZXhwb3J0IGNsYXNzIExpbmtDZWxsRWRpdG9yQ29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RFZGl0Q2VsbEVkaXRvcjx7IHRleHQ6IHN0cmluZzsgdXJsOiBzdHJpbmcgfT4gaW1wbGVtZW50cyBPbkluaXQge1xuICAgIEBWaWV3Q2hpbGQoJ2lucHV0RWxlbWVudCcsIHsgc3RhdGljOiBmYWxzZSB9KVxuICAgIGlucHV0RWxlbWVudCE6IEVsZW1lbnRSZWY7XG5cbiAgICB0ZXh0ID0gJyc7XG5cbiAgICB1cmwgPSAnJztcblxuICAgIG9yaWdpblZhbHVlID0ge307XG5cbiAgICB0aHlQb3BvdmVyID0gaW5qZWN0KFRoeVBvcG92ZXIpO1xuXG4gICAgY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcblxuICAgIG5vdGlmeVNlcnZpY2UgPSBpbmplY3QoVGh5Tm90aWZ5U2VydmljZSk7XG5cbiAgICBpc09wZW5lZCA9IGZhbHNlO1xuXG4gICAgaXNWYWxpZExpbmsobGluazogeyB0ZXh0OiBzdHJpbmc7IHVybDogc3RyaW5nIH0pIHtcbiAgICAgICAgaWYgKCFsaW5rPy50ZXh0Py50cmltKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghbGluay51cmwpIHtcbiAgICAgICAgICAgIHJldHVybiBMSU5LX1VSTF9SRUdFWC50ZXN0KGxpbmsudGV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgY3JlYXRlTGlua1ZhbHVlKGxpbms6IHsgdGV4dDogc3RyaW5nOyB1cmw6IHN0cmluZyB9KSB7XG4gICAgICAgIGNvbnN0IHRleHQgPSBsaW5rPy50ZXh0Py50cmltKCk7XG4gICAgICAgIGlmICghdGV4dCkge1xuICAgICAgICAgICAgcmV0dXJuIHsgdXJsOiAnJywgdGV4dDogJycgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHVybCA9IGxpbmsudXJsPy50cmltKCk7XG4gICAgICAgICAgICByZXR1cm4geyB1cmw6IHVybCB8fCB0ZXh0LCB0ZXh0OiB0ZXh0IHx8IHVybCB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGJsdXIoZXZlbnQ6IEZvY3VzRXZlbnQpIHtcbiAgICAgICAgY29uc3QgYWN0aW9uID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLmVkaXQtaWNvbicpO1xuICAgICAgICBpZiAoIShldmVudC5yZWxhdGVkVGFyZ2V0IGFzIEhUTUxFbGVtZW50KT8uY29udGFpbnMoYWN0aW9uKSkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVWYWx1ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgICAgIHRoaXMub3JpZ2luVmFsdWUgPSB0aGlzLm1vZGVsVmFsdWU7XG4gICAgICAgIHRoaXMudGV4dCA9IHRoaXMubW9kZWxWYWx1ZT8udGV4dCA/PyAnJztcbiAgICAgICAgdGhpcy51cmwgPSB0aGlzLm1vZGVsVmFsdWU/LnVybCA/PyAnJztcbiAgICB9XG5cbiAgICB1cGRhdGVWYWx1ZSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWRMaW5rKHsgdGV4dDogdGhpcy50ZXh0LCB1cmw6IHRoaXMudXJsID8/ICcnIH0pKSB7XG4gICAgICAgICAgICB0aGlzLm5vdGlmeVNlcnZpY2UuZXJyb3IoJ+mTvuaOpeagvOW8j+S4jeato+ehricpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubW9kZWxWYWx1ZSA9IHRoaXMuY3JlYXRlTGlua1ZhbHVlKHsgdGV4dDogdGhpcy50ZXh0LCB1cmw6IHRoaXMudXJsID8/ICcnIH0pO1xuICAgICAgICBpZiAoIV8uaXNFcXVhbCh0aGlzLm9yaWdpblZhbHVlLCB0aGlzLm1vZGVsVmFsdWUpKSB7XG4gICAgICAgICAgICBzdXBlci51cGRhdGUoKTtcbiAgICAgICAgICAgIHRoaXMub3JpZ2luVmFsdWUgPSB0aGlzLm1vZGVsVmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvcGVuRWRpdCgpIHtcbiAgICAgICAgdGhpcy5pc09wZW5lZCA9IHRydWU7XG4gICAgICAgIGNvbnN0IHBvcG92ZXJSZWYgPSB0aGlzLnRoeVBvcG92ZXIub3BlbihMaW5rRWRpdENvbXBvbmVudCwge1xuICAgICAgICAgICAgb3JpZ2luOiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgIG9yaWdpbkFjdGl2ZUNsYXNzOiAnZWRpdGluZycsXG4gICAgICAgICAgICBwbGFjZW1lbnQ6ICdib3R0b21MZWZ0JyxcbiAgICAgICAgICAgIG1pbldpZHRoOiAnMzIwcHgnLFxuICAgICAgICAgICAgd2lkdGg6IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoICsgJ3B4JyxcbiAgICAgICAgICAgIGluaXRpYWxTdGF0ZToge1xuICAgICAgICAgICAgICAgIHVybDogdGhpcy51cmwgPz8gJycsXG4gICAgICAgICAgICAgICAgdGV4dDogdGhpcy50ZXh0ID8/ICcnXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChwb3BvdmVyUmVmKSB7XG4gICAgICAgICAgICBwb3BvdmVyUmVmLmNvbXBvbmVudEluc3RhbmNlLmNvbmZpcm0uc3Vic2NyaWJlKCh2YWx1ZTogeyB1cmw6IHN0cmluZzsgdGV4dDogc3RyaW5nIH0pID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnRleHQgPSB2YWx1ZS50ZXh0O1xuICAgICAgICAgICAgICAgIHRoaXMudXJsID0gdmFsdWUudXJsO1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVmFsdWUoKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBwb3BvdmVyUmVmLmJlZm9yZUNsb3NlZCgpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc09wZW5lZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8dGh5LWlucHV0LWdyb3VwIGNsYXNzPVwibGluay1pbnB1dC1ncm91cCBoLTEwMFwiIHRoeVNpemU9XCJsZ1wiPlxuICAgIDxpbnB1dFxuICAgICAgICAjaW5wdXRFbGVtZW50XG4gICAgICAgIGNsYXNzPVwiaC0xMDBcIlxuICAgICAgICBjbGFzcz1cImxpbmstaW5wdXRcIlxuICAgICAgICB0aHlJbnB1dFxuICAgICAgICB0aHlTaXplPVwibWRcIlxuICAgICAgICBbdGh5QXV0b2ZvY3VzXT1cInRydWVcIlxuICAgICAgICBbKG5nTW9kZWwpXT1cInRleHRcIlxuICAgICAgICAoYmx1cik9XCJibHVyKCRldmVudClcIlxuICAgICAgICAodGh5RW50ZXIpPVwidXBkYXRlVmFsdWUoKVwiXG4gICAgLz5cbiAgICA8bmctdGVtcGxhdGUgI3N1ZmZpeD5cbiAgICAgICAgPGFcbiAgICAgICAgICAgIHRoeUFjdGlvblxuICAgICAgICAgICAgdGh5SWNvbj1cImxpbmstaW5zZXJ0XCJcbiAgICAgICAgICAgIHRoeVRvb2x0aXA9XCLpk77mjqVcIlxuICAgICAgICAgICAgY2xhc3M9XCJmb250LXNpemUtYmFzZSBlZGl0LWljb25cIlxuICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJpc09wZW5lZFwiXG4gICAgICAgICAgICBocmVmPVwiamF2YXNjcmlwdDo7XCJcbiAgICAgICAgICAgIChjbGljayk9XCJvcGVuRWRpdCgpXCJcbiAgICAgICAgPjwvYT5cbiAgICA8L25nLXRlbXBsYXRlPlxuPC90aHktaW5wdXQtZ3JvdXA+XG4iXX0=
121
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluay1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ3JpZC9zcmMvY29tcG9uZW50cy9jZWxsLWVkaXRvcnMvbGluay9saW5rLWVkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9ncmlkL3NyYy9jb21wb25lbnRzL2NlbGwtZWRpdG9ycy9saW5rL2xpbmstZWRpdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxRQUFRLEVBRVIsTUFBTSxFQUdOLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLHFCQUFxQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDN0UsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDM0UsT0FBTyxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDakUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNwRixPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNyRCxPQUFP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LFdBQVcsRUFBRSxDQUFDO1lBQ3ZCLENBQUMsQ0FBQyxDQUFDO1lBRUgsVUFBVSxDQUFDLFlBQVksRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ3JDLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO2dCQUN0QixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQzVCLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQztJQUNMLENBQUM7K0dBL0ZRLHVCQUF1QjttR0FBdkIsdUJBQXVCLG1RQzNDcEMsNnJCQXdCQSwyQ0RNUSxXQUFXLCttQkFDWCxxQkFBcUIsa0lBQ3JCLGlCQUFpQiw4RUFDakIsYUFBYSw4S0FDYixnQkFBZ0IsbVhBQ2hCLFNBQVMsK0xBQ1QsY0FBYyxpTUFDZCxxQkFBcUI7OzRGQU1oQix1QkFBdUI7a0JBbkJuQyxTQUFTOytCQUNJLGtCQUFrQixjQUVoQixJQUFJLG1CQUNDLHVCQUF1QixDQUFDLE1BQU0sV0FDdEM7d0JBQ0wsV0FBVzt3QkFDWCxxQkFBcUI7d0JBQ3JCLGlCQUFpQjt3QkFDakIsYUFBYTt3QkFDYixnQkFBZ0I7d0JBQ2hCLFNBQVM7d0JBQ1QsY0FBYzt3QkFDZCxxQkFBcUI7cUJBQ3hCLFFBQ0s7d0JBQ0YsS0FBSyxFQUFFLHNCQUFzQjtxQkFDaEM7OEJBSUQsWUFBWTtzQkFEWCxTQUFTO3VCQUFDLGNBQWMsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBjb21wdXRlZCxcbiAgICBFbGVtZW50UmVmLFxuICAgIGluamVjdCxcbiAgICBPbkluaXQsXG4gICAgc2lnbmFsLFxuICAgIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgVGh5QXV0b2ZvY3VzRGlyZWN0aXZlLCBUaHlFbnRlckRpcmVjdGl2ZSB9IGZyb20gJ25neC10ZXRoeXMvc2hhcmVkJztcbmltcG9ydCB7IEFic3RyYWN0RWRpdENlbGxFZGl0b3IgfSBmcm9tICcuLi9hYnN0cmFjdC1jZWxsLWVkaXRvci5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGh5SW5wdXRHcm91cCwgVGh5SW5wdXRNb2R1bGUgfSBmcm9tICduZ3gtdGV0aHlzL2lucHV0JztcbmltcG9ydCB7IFRoeVRvb2x0aXBNb2R1bGUgfSBmcm9tICduZ3gtdGV0aHlzL3Rvb2x0aXAnO1xuaW1wb3J0IHsgVGh5QWN0aW9uIH0gZnJvbSAnbmd4LXRldGh5cy9hY3Rpb24nO1xuaW1wb3J0IHsgVGh5RmxleGlibGVUZXh0TW9kdWxlIH0gZnJvbSAnbmd4LXRldGh5cy9mbGV4aWJsZS10ZXh0JztcbmltcG9ydCB7IFRoeVBvcG92ZXIgfSBmcm9tICduZ3gtdGV0aHlzL3BvcG92ZXInO1xuaW1wb3J0IHsgTElOS19VUkxfUkVHRVgsIExpbmtFZGl0Q29tcG9uZW50IH0gZnJvbSAnLi9lZGl0LWxpbmsvZWRpdC1saW5rLmNvbXBvbmVudCc7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBUaHlOb3RpZnlTZXJ2aWNlIH0gZnJvbSAnbmd4LXRldGh5cy9ub3RpZnknO1xuaW1wb3J0IHsgQUlUYWJsZUdyaWRJMThuS2V5LCBnZXRJMThuVGV4dEJ5S2V5IH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvaTE4bic7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbGluay1jZWxsLWVkaXRvcicsXG4gICAgdGVtcGxhdGVVcmw6IGAuL2xpbmstZWRpdG9yLmNvbXBvbmVudC5odG1sYCxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgRm9ybXNNb2R1bGUsXG4gICAgICAgIFRoeUF1dG9mb2N1c0RpcmVjdGl2ZSxcbiAgICAgICAgVGh5RW50ZXJEaXJlY3RpdmUsXG4gICAgICAgIFRoeUlucHV0R3JvdXAsXG4gICAgICAgIFRoeVRvb2x0aXBNb2R1bGUsXG4gICAgICAgIFRoeUFjdGlvbixcbiAgICAgICAgVGh5SW5wdXRNb2R1bGUsXG4gICAgICAgIFRoeUZsZXhpYmxlVGV4dE1vZHVsZVxuICAgIF0sXG4gICAgaG9zdDoge1xuICAgICAgICBjbGFzczogJ2FpLXRhYmxlLWxpbmstZWRpdG9yJ1xuICAgIH1cbn0pXG5leHBvcnQgY2xhc3MgTGlua0NlbGxFZGl0b3JDb21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdEVkaXRDZWxsRWRpdG9yPHsgdGV4dDogc3RyaW5nOyB1cmw6IHN0cmluZyB9PiBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgQFZpZXdDaGlsZCgnaW5wdXRFbGVtZW50JywgeyBzdGF0aWM6IGZhbHNlIH0pXG4gICAgaW5wdXRFbGVtZW50ITogRWxlbWVudFJlZjtcblxuICAgIHRleHQgPSAnJztcblxuICAgIHVybCA9ICcnO1xuXG4gICAgb3JpZ2luVmFsdWUgPSB7fTtcblxuICAgIHRoeVBvcG92ZXIgPSBpbmplY3QoVGh5UG9wb3Zlcik7XG5cbiAgICBjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuXG4gICAgbm90aWZ5U2VydmljZSA9IGluamVjdChUaHlOb3RpZnlTZXJ2aWNlKTtcblxuICAgIGlzT3BlbmVkID0gZmFsc2U7XG5cbiAgICBpc1ZhbGlkTGluayhsaW5rOiB7IHRleHQ6IHN0cmluZzsgdXJsOiBzdHJpbmcgfSkge1xuICAgICAgICBpZiAoIWxpbms/LnRleHQ/LnRyaW0oKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFsaW5rLnVybCkge1xuICAgICAgICAgICAgcmV0dXJuIExJTktfVVJMX1JFR0VYLnRlc3QobGluay50ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjcmVhdGVMaW5rVmFsdWUobGluazogeyB0ZXh0OiBzdHJpbmc7IHVybDogc3RyaW5nIH0pIHtcbiAgICAgICAgY29uc3QgdGV4dCA9IGxpbms/LnRleHQ/LnRyaW0oKTtcbiAgICAgICAgaWYgKCF0ZXh0KSB7XG4gICAgICAgICAgICByZXR1cm4geyB1cmw6ICcnLCB0ZXh0OiAnJyB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgdXJsID0gbGluay51cmw/LnRyaW0oKTtcbiAgICAgICAgICAgIHJldHVybiB7IHVybDogdXJsIHx8IHRleHQsIHRleHQ6IHRleHQgfHwgdXJsIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYmx1cihldmVudDogRm9jdXNFdmVudCkge1xuICAgICAgICBjb25zdCBhY3Rpb24gPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuZWRpdC1pY29uJyk7XG4gICAgICAgIGlmICghKGV2ZW50LnJlbGF0ZWRUYXJnZXQgYXMgSFRNTEVsZW1lbnQpPy5jb250YWlucyhhY3Rpb24pKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBsaW5rVG9vbHRpcCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIGdldEkxOG5UZXh0QnlLZXkodGhpcy5haVRhYmxlLCBBSVRhYmxlR3JpZEkxOG5LZXkubGlua1Rvb2x0aXApO1xuICAgIH0pO1xuXG4gICAgb3ZlcnJpZGUgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgICAgIHRoaXMub3JpZ2luVmFsdWUgPSB0aGlzLm1vZGVsVmFsdWU7XG4gICAgICAgIHRoaXMudGV4dCA9IHRoaXMubW9kZWxWYWx1ZT8udGV4dCA/PyAnJztcbiAgICAgICAgdGhpcy51cmwgPSB0aGlzLm1vZGVsVmFsdWU/LnVybCA/PyAnJztcbiAgICB9XG5cbiAgICB1cGRhdGVWYWx1ZSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWRMaW5rKHsgdGV4dDogdGhpcy50ZXh0LCB1cmw6IHRoaXMudXJsID8/ICcnIH0pKSB7XG4gICAgICAgICAgICB0aGlzLm5vdGlmeVNlcnZpY2UuZXJyb3IoZ2V0STE4blRleHRCeUtleSh0aGlzLmFpVGFibGUsIEFJVGFibGVHcmlkSTE4bktleS5pbnZhbGlkTGlua0Zvcm1hdCkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubW9kZWxWYWx1ZSA9IHRoaXMuY3JlYXRlTGlua1ZhbHVlKHsgdGV4dDogdGhpcy50ZXh0LCB1cmw6IHRoaXMudXJsID8/ICcnIH0pO1xuICAgICAgICBpZiAoIV8uaXNFcXVhbCh0aGlzLm9yaWdpblZhbHVlLCB0aGlzLm1vZGVsVmFsdWUpKSB7XG4gICAgICAgICAgICBzdXBlci51cGRhdGUoKTtcbiAgICAgICAgICAgIHRoaXMub3JpZ2luVmFsdWUgPSB0aGlzLm1vZGVsVmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvcGVuRWRpdCgpIHtcbiAgICAgICAgdGhpcy5pc09wZW5lZCA9IHRydWU7XG4gICAgICAgIGNvbnN0IHBvcG92ZXJSZWYgPSB0aGlzLnRoeVBvcG92ZXIub3BlbihMaW5rRWRpdENvbXBvbmVudCwge1xuICAgICAgICAgICAgb3JpZ2luOiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgIG9yaWdpbkFjdGl2ZUNsYXNzOiAnZWRpdGluZycsXG4gICAgICAgICAgICBwbGFjZW1lbnQ6ICdib3R0b21MZWZ0JyxcbiAgICAgICAgICAgIG1pbldpZHRoOiAnMzIwcHgnLFxuICAgICAgICAgICAgd2lkdGg6IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoICsgJ3B4JyxcbiAgICAgICAgICAgIGluaXRpYWxTdGF0ZToge1xuICAgICAgICAgICAgICAgIHVybDogdGhpcy51cmwgPz8gJycsXG4gICAgICAgICAgICAgICAgdGV4dDogdGhpcy50ZXh0ID8/ICcnLFxuICAgICAgICAgICAgICAgIGFpVGFibGU6IHRoaXMuYWlUYWJsZVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAocG9wb3ZlclJlZikge1xuICAgICAgICAgICAgcG9wb3ZlclJlZi5jb21wb25lbnRJbnN0YW5jZS5jb25maXJtLnN1YnNjcmliZSgodmFsdWU6IHsgdXJsOiBzdHJpbmc7IHRleHQ6IHN0cmluZyB9KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy50ZXh0ID0gdmFsdWUudGV4dDtcbiAgICAgICAgICAgICAgICB0aGlzLnVybCA9IHZhbHVlLnVybDtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlKCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcG9wb3ZlclJlZi5iZWZvcmVDbG9zZWQoKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNPcGVuZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiPHRoeS1pbnB1dC1ncm91cCBjbGFzcz1cImxpbmstaW5wdXQtZ3JvdXAgaC0xMDBcIiB0aHlTaXplPVwibGdcIj5cbiAgICA8aW5wdXRcbiAgICAgICAgI2lucHV0RWxlbWVudFxuICAgICAgICBjbGFzcz1cImgtMTAwXCJcbiAgICAgICAgY2xhc3M9XCJsaW5rLWlucHV0XCJcbiAgICAgICAgdGh5SW5wdXRcbiAgICAgICAgdGh5U2l6ZT1cIm1kXCJcbiAgICAgICAgW3RoeUF1dG9mb2N1c109XCJ0cnVlXCJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJ0ZXh0XCJcbiAgICAgICAgKGJsdXIpPVwiYmx1cigkZXZlbnQpXCJcbiAgICAgICAgKHRoeUVudGVyKT1cInVwZGF0ZVZhbHVlKClcIlxuICAgIC8+XG4gICAgPG5nLXRlbXBsYXRlICNzdWZmaXg+XG4gICAgICAgIDxhXG4gICAgICAgICAgICB0aHlBY3Rpb25cbiAgICAgICAgICAgIHRoeUljb249XCJsaW5rLWluc2VydFwiXG4gICAgICAgICAgICBbdGh5VG9vbHRpcF09XCJsaW5rVG9vbHRpcCgpXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZm9udC1zaXplLWJhc2UgZWRpdC1pY29uXCJcbiAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiaXNPcGVuZWRcIlxuICAgICAgICAgICAgaHJlZj1cImphdmFzY3JpcHQ6O1wiXG4gICAgICAgICAgICAoY2xpY2spPVwib3BlbkVkaXQoKVwiXG4gICAgICAgID48L2E+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbjwvdGh5LWlucHV0LWdyb3VwPlxuIl19
@@ -11,22 +11,17 @@ export class AITableDragComponent {
11
11
  this.draggedData = null;
12
12
  this.mouseStartPosition = null;
13
13
  this.aiTableDrag = null;
14
- effect(() => {
15
- const drag = this.aiTableGridSelectionService.aiTable.dragState?.();
16
- if (drag && drag.sourceIds.size > 0) {
17
- if (!this.rect || !this.line) {
18
- return;
19
- }
20
- this.aiTableDrag = drag;
21
- }
22
- else {
23
- this.aiTableDrag = null;
24
- }
25
- });
14
+ effect(() => this.handleDragStateChange());
26
15
  }
27
16
  ngOnInit() {
17
+ this.initElements();
18
+ this.setupEventListeners();
19
+ }
20
+ initElements() {
28
21
  this.rect = this.elementRef.nativeElement.querySelector('.rect');
29
- this.line = this.elementRef.nativeElement.querySelector('.line');
22
+ this.auxiliaryLine = this.elementRef.nativeElement.querySelector('.auxiliary-line');
23
+ }
24
+ setupEventListeners() {
30
25
  this.mousedownListener = this.render2.listen('window', 'mousedown', (e) => {
31
26
  this.mouseStartPosition = { x: e.x, y: e.y };
32
27
  });
@@ -35,7 +30,7 @@ export class AITableDragComponent {
35
30
  cancelAnimationFrame(this.timer);
36
31
  }
37
32
  this.timer = requestAnimationFrame(() => {
38
- if (this.mouseStartPosition && this.aiTableDrag) {
33
+ if (this.aiTableDrag && this.mouseStartPosition) {
39
34
  this.handleDrag(e, this.aiTableDrag);
40
35
  }
41
36
  });
@@ -46,72 +41,23 @@ export class AITableDragComponent {
46
41
  this.handleDragEnd();
47
42
  });
48
43
  }
49
- handleDrag(e, drag) {
50
- if (drag.type !== DragType.none) {
51
- this.render2.setStyle(this.elementRef.nativeElement, 'display', 'block');
44
+ handleDragStateChange() {
45
+ const drag = this.aiTableGridSelectionService.aiTable.dragState?.();
46
+ if (!drag || drag.type === DragType.none || !this.rect || !this.auxiliaryLine) {
47
+ this.aiTableDrag = null;
48
+ return;
52
49
  }
53
- else {
50
+ this.aiTableDrag = drag;
51
+ }
52
+ handleDrag(e, drag) {
53
+ if (drag.type === DragType.none) {
54
54
  return;
55
55
  }
56
- const moveX = e.x - this.mouseStartPosition.x;
57
- const aiTable = this.aiTableGridSelectionService.aiTable;
58
- const scroll = drag.scroll || { x: 0, y: 0 };
59
- const coordinate = drag.coordinate;
56
+ this.setDisplayStyle('block');
57
+ const moveX = e.x - (this.mouseStartPosition?.x || 0);
60
58
  switch (drag.type) {
61
59
  case DragType.field:
62
- const fields = aiTable.gridData().fields;
63
- let width = 0;
64
- fields.forEach((field, index) => {
65
- if (drag.sourceIds.has(field._id)) {
66
- width += coordinate.columnIndicesSizeMap[index] || 0;
67
- }
68
- });
69
- const visibleColumnIndexMap = aiTable.context.visibleColumnsIndexMap();
70
- const sourceColumnIndex = visibleColumnIndexMap.get(drag.sourceIds.values().next().value) || 0;
71
- const sourceColumnStartX = coordinate.getColumnOffset(sourceColumnIndex);
72
- const sourceColumnWidth = coordinate.getColumnWidth(sourceColumnIndex);
73
- // TODO: 目前默认第一列为冻结列,后期支持设置冻结列需要处理
74
- const isSourceColumnFrozen = sourceColumnIndex === 0;
75
- const pointerX = moveX + sourceColumnStartX;
76
- // 拖拽中心点
77
- const dragCenter = sourceColumnWidth / 2;
78
- let targetColumnIndex = coordinate.getColumnStartIndex(pointerX + (isSourceColumnFrozen ? scroll.x : 0) + dragCenter);
79
- let targetColumnStartX = coordinate.getColumnOffset(targetColumnIndex);
80
- this.render2.setStyle(this.rect, 'cursor', 'move');
81
- this.render2.setStyle(this.rect, 'width', `${width}px`);
82
- this.render2.setStyle(this.rect, 'height', `100%`);
83
- this.render2.setStyle(this.rect, 'top', 0);
84
- this.render2.setStyle(this.rect, 'left', `${pointerX - (isSourceColumnFrozen ? 0 : scroll.x)}px`);
85
- const lastColumnOffset = coordinate.getColumnOffset(coordinate.columnCount - 1);
86
- const lastColumnWidth = coordinate.getColumnWidth(coordinate.columnCount - 1);
87
- let isLastColumn = false;
88
- // 处理最后一列
89
- if (pointerX + dragCenter > lastColumnOffset + lastColumnWidth) {
90
- targetColumnIndex = coordinate.columnCount;
91
- targetColumnStartX = lastColumnOffset + lastColumnWidth;
92
- isLastColumn = true;
93
- }
94
- if ((targetColumnIndex >= 0 && (targetColumnIndex - sourceColumnIndex > 1 || targetColumnIndex - sourceColumnIndex < 0)) ||
95
- isLastColumn) {
96
- this.render2.setStyle(this.line, 'width', `2px`);
97
- this.render2.setStyle(this.line, 'height', `100%`);
98
- this.render2.setStyle(this.line, 'top', 0);
99
- this.render2.setStyle(this.line, 'left', `${targetColumnStartX - scroll.x}px`);
100
- const fieldsIndex = [];
101
- drag.sourceIds.forEach((id) => {
102
- const index = visibleColumnIndexMap.get(id) || 0;
103
- fieldsIndex.push(index);
104
- });
105
- // 向右移动目标在目标列的前一列
106
- if (targetColumnIndex > sourceColumnIndex) {
107
- targetColumnIndex -= 1;
108
- }
109
- this.draggedData = { type: DragType.field, targetIndex: targetColumnIndex, fieldIds: drag.sourceIds, fieldsIndex };
110
- }
111
- else {
112
- this.render2.setStyle(this.line, 'width', 0);
113
- this.draggedData = null;
114
- }
60
+ this.movingColumn(drag, moveX);
115
61
  break;
116
62
  case DragType.record:
117
63
  break;
@@ -119,13 +65,95 @@ export class AITableDragComponent {
119
65
  break;
120
66
  }
121
67
  }
68
+ movingColumn(drag, moveX) {
69
+ const aiTable = this.aiTableGridSelectionService.aiTable;
70
+ const scroll = drag.scroll || { x: 0, y: 0 };
71
+ const coordinate = drag.coordinate;
72
+ const fields = aiTable.gridData().fields;
73
+ const width = this.calculateDragWidth(fields, coordinate, drag);
74
+ const visibleColumnIndexMap = aiTable.context.visibleColumnsIndexMap();
75
+ const sourceColumnIndex = visibleColumnIndexMap.get(drag.sourceIds.values().next().value) || 0;
76
+ const sourceColumnStartX = coordinate.getColumnOffset(sourceColumnIndex);
77
+ const sourceColumnWidth = coordinate.getColumnWidth(sourceColumnIndex);
78
+ // TODO: 目前默认第一列为冻结列,后期支持设置冻结列需要处理
79
+ const isSourceColumnFrozen = sourceColumnIndex === 0;
80
+ const pointerX = moveX + sourceColumnStartX;
81
+ // 拖拽中心点
82
+ const dragCenter = sourceColumnWidth / 2;
83
+ this.setRectStyles({
84
+ cursor: 'move',
85
+ width: `${width}px`,
86
+ height: '100%',
87
+ top: '0',
88
+ left: `${pointerX - (isSourceColumnFrozen ? 0 : scroll.x)}px`
89
+ });
90
+ const lastColumnOffset = coordinate.getColumnOffset(coordinate.columnCount - 1);
91
+ const lastColumnWidth = coordinate.getColumnWidth(coordinate.columnCount - 1);
92
+ let targetColumnIndex = coordinate.getColumnStartIndex(pointerX + (isSourceColumnFrozen ? scroll.x : 0) + dragCenter);
93
+ let targetColumnStartX = coordinate.getColumnOffset(targetColumnIndex);
94
+ let isLastColumn = false;
95
+ // 处理最后一列
96
+ if (pointerX + dragCenter > lastColumnOffset + lastColumnWidth) {
97
+ targetColumnIndex = coordinate.columnCount;
98
+ targetColumnStartX = lastColumnOffset + lastColumnWidth;
99
+ isLastColumn = true;
100
+ }
101
+ if ((targetColumnIndex >= 0 && (targetColumnIndex - sourceColumnIndex > 1 || targetColumnIndex - sourceColumnIndex < 0)) ||
102
+ isLastColumn) {
103
+ this.setAuxiliaryLineStyles({
104
+ width: '2px',
105
+ height: '100%',
106
+ top: 0,
107
+ left: `${targetColumnStartX - scroll.x}px`
108
+ });
109
+ const fieldsIndex = [];
110
+ drag.sourceIds.forEach((id) => {
111
+ const index = visibleColumnIndexMap.get(id) || 0;
112
+ fieldsIndex.push(index);
113
+ });
114
+ // 向右移动目标在目标列的前一列
115
+ if (targetColumnIndex > sourceColumnIndex) {
116
+ targetColumnIndex -= 1;
117
+ }
118
+ this.draggedData = { type: DragType.field, targetIndex: targetColumnIndex, fieldIds: drag.sourceIds, fieldsIndex };
119
+ }
120
+ else {
121
+ this.resetAuxiliaryLine();
122
+ this.draggedData = null;
123
+ }
124
+ }
122
125
  handleDragEnd() {
123
- this.render2.setStyle(this.elementRef.nativeElement, 'display', 'none');
126
+ this.setDisplayStyle('none');
124
127
  if (this.draggedData) {
125
128
  this.dragEnd.emit({ ...this.draggedData });
126
129
  this.draggedData = null;
127
130
  }
128
131
  }
132
+ calculateDragWidth(fields, coordinate, drag) {
133
+ let width = 0;
134
+ fields.forEach((field, index) => {
135
+ if (drag.sourceIds.has(field._id)) {
136
+ width += coordinate.columnIndicesSizeMap[index] || 0;
137
+ }
138
+ });
139
+ return width;
140
+ }
141
+ setDisplayStyle(display) {
142
+ this.render2.setStyle(this.elementRef.nativeElement, 'display', display);
143
+ }
144
+ setRectStyles(styles) {
145
+ Object.entries(styles).forEach(([prop, value]) => {
146
+ this.render2.setStyle(this.rect, prop, value);
147
+ });
148
+ }
149
+ setAuxiliaryLineStyles(styles) {
150
+ Object.entries(styles).forEach(([prop, value]) => {
151
+ this.render2.setStyle(this.auxiliaryLine, prop, value);
152
+ });
153
+ }
154
+ resetAuxiliaryLine() {
155
+ this.setAuxiliaryLineStyles({ width: 0 });
156
+ }
129
157
  ngOnDestroy() {
130
158
  if (this.mousedownListener)
131
159
  this.mousedownListener();
@@ -139,12 +167,12 @@ export class AITableDragComponent {
139
167
  }
140
168
  }
141
169
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AITableDragComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
142
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AITableDragComponent, isStandalone: true, selector: "ai-table-drag", outputs: { dragEnd: "dragEnd" }, host: { classAttribute: "drag-container" }, ngImport: i0, template: "<div class=\"rect\"></div>\n<div class=\"line\"></div>", changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
170
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AITableDragComponent, isStandalone: true, selector: "ai-table-drag", outputs: { dragEnd: "dragEnd" }, host: { classAttribute: "drag-container" }, ngImport: i0, template: "<div class=\"rect\"></div>\n<div class=\"auxiliary-line\"></div>", changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
143
171
  }
144
172
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AITableDragComponent, decorators: [{
145
173
  type: Component,
146
174
  args: [{ selector: 'ai-table-drag', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, host: {
147
175
  class: 'drag-container'
148
- }, template: "<div class=\"rect\"></div>\n<div class=\"line\"></div>" }]
176
+ }, template: "<div class=\"rect\"></div>\n<div class=\"auxiliary-line\"></div>" }]
149
177
  }], ctorParameters: () => [] });
150
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9ncmlkL3NyYy9jb21wb25lbnRzL2RyYWcvZHJhZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9ncmlkL3NyYy9jb21wb25lbnRzL2RyYWcvZHJhZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFxQixNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JJLE9BQU8sRUFBaUMsUUFBUSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3JFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDOztBQVcvRSxNQUFNLE9BQU8sb0JBQW9CO0lBeUI3QjtRQXhCQSxZQUFPLEdBQUcsTUFBTSxFQUFlLENBQUM7UUFFeEIsZ0NBQTJCLEdBQUcsTUFBTSxDQUFDLDJCQUEyQixDQUFDLENBQUM7UUFFbEUsWUFBTyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUVwQyxlQUFVLEdBQTRCLE1BQU0sQ0FBQyxDQUFBLFVBQXVCLENBQUEsQ0FBQyxDQUFDO1FBTTlELGdCQUFXLEdBQXVCLElBQUksQ0FBQztRQUV2Qyx1QkFBa0IsR0FBb0MsSUFBSSxDQUFDO1FBRTNELGdCQUFXLEdBQTRCLElBQUksQ0FBQztRQVNoRCxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1IsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLDJCQUEyQixDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDO1lBQ3BFLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNsQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDM0IsT0FBTztnQkFDWCxDQUFDO2dCQUNELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1lBQzVCLENBQUM7aUJBQU0sQ0FBQztnQkFDSixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztZQUM1QixDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsUUFBUTtRQUNKLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBRSxDQUFDO1FBQ2xFLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBRSxDQUFDO1FBQ2xFLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDdEUsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNqRCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDdEUsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ2Isb0JBQW9CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3JDLENBQUM7WUFDRCxJQUFJLENBQUMsS0FBSyxHQUFHLHFCQUFxQixDQUFDLEdBQUcsRUFBRTtnQkFDcEMsSUFBSSxJQUFJLENBQUMsa0JBQWtCLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO29CQUM5QyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQ3pDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRTtZQUNqRSxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO1lBQy9CLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN6QixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyxVQUFVLENBQUMsQ0FBYSxFQUFFLElBQXNCO1FBQ3BELElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzdFLENBQUM7YUFBTSxDQUFDO1lBQ0osT0FBTztRQUNYLENBQUM7UUFDRCxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxrQkFBbUIsQ0FBQyxDQUFDLENBQUM7UUFDL0MsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLDJCQUEyQixDQUFDLE9BQU8sQ0FBQztRQUN6RCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDN0MsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVcsQ0FBQztRQUNwQyxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNoQixLQUFLLFFBQVEsQ0FBQyxLQUFLO2dCQUNmLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLENBQUM7Z0JBQ3pDLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztnQkFDZCxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFO29CQUM1QixJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO3dCQUNoQyxLQUFLLElBQUksVUFBVSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDekQsQ0FBQztnQkFDTCxDQUFDLENBQUMsQ0FBQztnQkFDSCxNQUFNLHFCQUFxQixHQUFHLE9BQU8sQ0FBQyxPQUFRLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztnQkFDeEUsTUFBTSxpQkFBaUIsR0FBRyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2hHLE1BQU0sa0JBQWtCLEdBQUcsVUFBVSxDQUFDLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO2dCQUN6RSxNQUFNLGlCQUFpQixHQUFHLFVBQVUsQ0FBQyxjQUFjLENBQUMsaUJBQWlCLENBQUMsQ0FBQztnQkFDdkUsa0NBQWtDO2dCQUNsQyxNQUFNLG9CQUFvQixHQUFHLGlCQUFpQixLQUFLLENBQUMsQ0FBQztnQkFDckQsTUFBTSxRQUFRLEdBQUcsS0FBSyxHQUFHLGtCQUFrQixDQUFDO2dCQUM1QyxRQUFRO2dCQUNSLE1BQU0sVUFBVSxHQUFHLGlCQUFpQixHQUFHLENBQUMsQ0FBQztnQkFDekMsSUFBSSxpQkFBaUIsR0FBRyxVQUFVLENBQUMsbUJBQW1CLENBQUMsUUFBUSxHQUFHLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDO2dCQUN0SCxJQUFJLGtCQUFrQixHQUFHLFVBQVUsQ0FBQyxlQUFlLENBQUMsaUJBQWlCLENBQUMsQ0FBQztnQkFDdkUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQ25ELElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEdBQUcsS0FBSyxJQUFJLENBQUMsQ0FBQztnQkFDeEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQ25ELElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUMzQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLFFBQVEsR0FBRyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBRWxHLE1BQU0sZ0JBQWdCLEdBQUcsVUFBVSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUNoRixNQUFNLGVBQWUsR0FBRyxVQUFVLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBRTlFLElBQUksWUFBWSxHQUFHLEtBQUssQ0FBQztnQkFDekIsU0FBUztnQkFDVCxJQUFJLFFBQVEsR0FBRyxVQUFVLEdBQUcsZ0JBQWdCLEdBQUcsZUFBZSxFQUFFLENBQUM7b0JBQzdELGlCQUFpQixHQUFHLFVBQVUsQ0FBQyxXQUFXLENBQUM7b0JBQzNDLGtCQUFrQixHQUFHLGdCQUFnQixHQUFHLGVBQWUsQ0FBQztvQkFDeEQsWUFBWSxHQUFHLElBQUksQ0FBQztnQkFDeEIsQ0FBQztnQkFDRCxJQUNJLENBQUMsaUJBQWlCLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsaUJBQWlCLEdBQUcsQ0FBQyxJQUFJLGlCQUFpQixHQUFHLGlCQUFpQixHQUFHLENBQUMsQ0FBQyxDQUFDO29CQUNwSCxZQUFZLEVBQ2QsQ0FBQztvQkFDQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztvQkFDakQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7b0JBQ25ELElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUMzQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUMvRSxNQUFNLFdBQVcsR0FBYSxFQUFFLENBQUM7b0JBQ2pDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUU7d0JBQzFCLE1BQU0sS0FBSyxHQUFHLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQ2pELFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQzVCLENBQUMsQ0FBQyxDQUFDO29CQUNILGlCQUFpQjtvQkFDakIsSUFBSSxpQkFBaUIsR0FBRyxpQkFBaUIsRUFBRSxDQUFDO3dCQUN4QyxpQkFBaUIsSUFBSSxDQUFDLENBQUM7b0JBQzNCLENBQUM7b0JBQ0QsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsQ0FBQztnQkFDdkgsQ0FBQztxQkFBTSxDQUFDO29CQUNKLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUM3QyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztnQkFDNUIsQ0FBQztnQkFDRCxNQUFNO1lBQ1YsS0FBSyxRQUFRLENBQUMsTUFBTTtnQkFDaEIsTUFBTTtZQUNWLEtBQUssUUFBUSxDQUFDLFdBQVc7Z0JBQ3JCLE1BQU07UUFDZCxDQUFDO0lBQ0wsQ0FBQztJQUVPLGFBQWE7UUFDakIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3hFLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztZQUMzQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUM1QixDQUFDO0lBQ0wsQ0FBQztJQUVELFdBQVc7UUFDUCxJQUFJLElBQUksQ0FBQyxpQkFBaUI7WUFBRSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUNyRCxJQUFJLElBQUksQ0FBQyxpQkFBaUI7WUFBRSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUNyRCxJQUFJLElBQUksQ0FBQyxlQUFlO1lBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBRWpELElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2Isb0JBQW9CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLENBQUM7SUFDTCxDQUFDOytHQTNKUSxvQkFBb0I7bUdBQXBCLG9CQUFvQixzSkNiakMsd0RBQ3dCOzs0RkRZWCxvQkFBb0I7a0JBVGhDLFNBQVM7K0JBQ0ksZUFBZSxjQUViLElBQUksbUJBQ0MsdUJBQXVCLENBQUMsTUFBTSxRQUN6Qzt3QkFDRixLQUFLLEVBQUUsZ0JBQWdCO3FCQUMxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGVmZmVjdCwgRWxlbWVudFJlZiwgaW5qZWN0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgb3V0cHV0LCBSZW5kZXJlcjIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFJVGFibGVEcmFnU3RhdGUsIERyYWdFbmREYXRhLCBEcmFnVHlwZSB9IGZyb20gJy4uLy4uL2NvcmUnO1xuaW1wb3J0IHsgQUlUYWJsZUdyaWRTZWxlY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2VsZWN0aW9uLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2FpLXRhYmxlLWRyYWcnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9kcmFnLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgY2xhc3M6ICdkcmFnLWNvbnRhaW5lcidcbiAgICB9XG59KVxuZXhwb3J0IGNsYXNzIEFJVGFibGVEcmFnQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIGRyYWdFbmQgPSBvdXRwdXQ8RHJhZ0VuZERhdGE+KCk7XG5cbiAgICBwcml2YXRlIGFpVGFibGVHcmlkU2VsZWN0aW9uU2VydmljZSA9IGluamVjdChBSVRhYmxlR3JpZFNlbGVjdGlvblNlcnZpY2UpO1xuXG4gICAgcHJpdmF0ZSByZW5kZXIyID0gaW5qZWN0KFJlbmRlcmVyMik7XG5cbiAgICBlbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PiA9IGluamVjdChFbGVtZW50UmVmPEhUTUxFbGVtZW50Pik7XG5cbiAgICBwcml2YXRlIHJlY3QhOiBIVE1MRWxlbWVudDtcblxuICAgIHByaXZhdGUgbGluZSE6IEhUTUxFbGVtZW50O1xuXG4gICAgcHJpdmF0ZSBkcmFnZ2VkRGF0YTogRHJhZ0VuZERhdGEgfCBudWxsID0gbnVsbDtcblxuICAgIHByaXZhdGUgbW91c2VTdGFydFBvc2l0aW9uOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0gfCBudWxsID0gbnVsbDtcblxuICAgIHByaXZhdGUgYWlUYWJsZURyYWc6IEFJVGFibGVEcmFnU3RhdGUgfCBudWxsID0gbnVsbDtcblxuICAgIHByaXZhdGUgdGltZXIhOiBudW1iZXIgfCBudWxsO1xuXG4gICAgcHJpdmF0ZSBtb3VzZWRvd25MaXN0ZW5lcj86ICgpID0+IHZvaWQ7XG4gICAgcHJpdmF0ZSBtb3VzZW1vdmVMaXN0ZW5lcj86ICgpID0+IHZvaWQ7XG4gICAgcHJpdmF0ZSBtb3VzZXVwTGlzdGVuZXI/OiAoKSA9PiB2b2lkO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkcmFnID0gdGhpcy5haVRhYmxlR3JpZFNlbGVjdGlvblNlcnZpY2UuYWlUYWJsZS5kcmFnU3RhdGU/LigpO1xuICAgICAgICAgICAgaWYgKGRyYWcgJiYgZHJhZy5zb3VyY2VJZHMuc2l6ZSA+IDApIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMucmVjdCB8fCAhdGhpcy5saW5lKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5haVRhYmxlRHJhZyA9IGRyYWc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuYWlUYWJsZURyYWcgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5yZWN0ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLnJlY3QnKSE7XG4gICAgICAgIHRoaXMubGluZSA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5saW5lJykhO1xuICAgICAgICB0aGlzLm1vdXNlZG93bkxpc3RlbmVyID0gdGhpcy5yZW5kZXIyLmxpc3Rlbignd2luZG93JywgJ21vdXNlZG93bicsIChlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm1vdXNlU3RhcnRQb3NpdGlvbiA9IHsgeDogZS54LCB5OiBlLnkgfTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubW91c2Vtb3ZlTGlzdGVuZXIgPSB0aGlzLnJlbmRlcjIubGlzdGVuKCd3aW5kb3cnLCAnbW91c2Vtb3ZlJywgKGUpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnRpbWVyKSB7XG4gICAgICAgICAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy50aW1lcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnRpbWVyID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5tb3VzZVN0YXJ0UG9zaXRpb24gJiYgdGhpcy5haVRhYmxlRHJhZykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZURyYWcoZSwgdGhpcy5haVRhYmxlRHJhZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm1vdXNldXBMaXN0ZW5lciA9IHRoaXMucmVuZGVyMi5saXN0ZW4oJ3dpbmRvdycsICdtb3VzZXVwJywgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5tb3VzZVN0YXJ0UG9zaXRpb24gPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5haVRhYmxlRHJhZyA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZURyYWdFbmQoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVEcmFnKGU6IE1vdXNlRXZlbnQsIGRyYWc6IEFJVGFibGVEcmFnU3RhdGUpIHtcbiAgICAgICAgaWYgKGRyYWcudHlwZSAhPT0gRHJhZ1R5cGUubm9uZSkge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXIyLnNldFN0eWxlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnZGlzcGxheScsICdibG9jaycpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1vdmVYID0gZS54IC0gdGhpcy5tb3VzZVN0YXJ0UG9zaXRpb24hLng7XG4gICAgICAgIGNvbnN0IGFpVGFibGUgPSB0aGlzLmFpVGFibGVHcmlkU2VsZWN0aW9uU2VydmljZS5haVRhYmxlO1xuICAgICAgICBjb25zdCBzY3JvbGwgPSBkcmFnLnNjcm9sbCB8fCB7IHg6IDAsIHk6IDAgfTtcbiAgICAgICAgY29uc3QgY29vcmRpbmF0ZSA9IGRyYWcuY29vcmRpbmF0ZSE7XG4gICAgICAgIHN3aXRjaCAoZHJhZy50eXBlKSB7XG4gICAgICAgICAgICBjYXNlIERyYWdUeXBlLmZpZWxkOlxuICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkcyA9IGFpVGFibGUuZ3JpZERhdGEoKS5maWVsZHM7XG4gICAgICAgICAgICAgICAgbGV0IHdpZHRoID0gMDtcbiAgICAgICAgICAgICAgICBmaWVsZHMuZm9yRWFjaCgoZmllbGQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkcmFnLnNvdXJjZUlkcy5oYXMoZmllbGQuX2lkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGggKz0gY29vcmRpbmF0ZS5jb2x1bW5JbmRpY2VzU2l6ZU1hcFtpbmRleF0gfHwgMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IHZpc2libGVDb2x1bW5JbmRleE1hcCA9IGFpVGFibGUuY29udGV4dCEudmlzaWJsZUNvbHVtbnNJbmRleE1hcCgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNvdXJjZUNvbHVtbkluZGV4ID0gdmlzaWJsZUNvbHVtbkluZGV4TWFwLmdldChkcmFnLnNvdXJjZUlkcy52YWx1ZXMoKS5uZXh0KCkudmFsdWUhKSB8fCAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNvdXJjZUNvbHVtblN0YXJ0WCA9IGNvb3JkaW5hdGUuZ2V0Q29sdW1uT2Zmc2V0KHNvdXJjZUNvbHVtbkluZGV4KTtcbiAgICAgICAgICAgICAgICBjb25zdCBzb3VyY2VDb2x1bW5XaWR0aCA9IGNvb3JkaW5hdGUuZ2V0Q29sdW1uV2lkdGgoc291cmNlQ29sdW1uSW5kZXgpO1xuICAgICAgICAgICAgICAgIC8vIFRPRE86IOebruWJjem7mOiupOesrOS4gOWIl+S4uuWGu+e7k+WIl++8jOWQjuacn+aUr+aMgeiuvue9ruWGu+e7k+WIl+mcgOimgeWkhOeQhlxuICAgICAgICAgICAgICAgIGNvbnN0IGlzU291cmNlQ29sdW1uRnJvemVuID0gc291cmNlQ29sdW1uSW5kZXggPT09IDA7XG4gICAgICAgICAgICAgICAgY29uc3QgcG9pbnRlclggPSBtb3ZlWCArIHNvdXJjZUNvbHVtblN0YXJ0WDtcbiAgICAgICAgICAgICAgICAvLyDmi5bmi73kuK3lv4PngrlcbiAgICAgICAgICAgICAgICBjb25zdCBkcmFnQ2VudGVyID0gc291cmNlQ29sdW1uV2lkdGggLyAyO1xuICAgICAgICAgICAgICAgIGxldCB0YXJnZXRDb2x1bW5JbmRleCA9IGNvb3JkaW5hdGUuZ2V0Q29sdW1uU3RhcnRJbmRleChwb2ludGVyWCArIChpc1NvdXJjZUNvbHVtbkZyb3plbiA/IHNjcm9sbC54IDogMCkgKyBkcmFnQ2VudGVyKTtcbiAgICAgICAgICAgICAgICBsZXQgdGFyZ2V0Q29sdW1uU3RhcnRYID0gY29vcmRpbmF0ZS5nZXRDb2x1bW5PZmZzZXQodGFyZ2V0Q29sdW1uSW5kZXgpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyMi5zZXRTdHlsZSh0aGlzLnJlY3QsICdjdXJzb3InLCAnbW92ZScpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyMi5zZXRTdHlsZSh0aGlzLnJlY3QsICd3aWR0aCcsIGAke3dpZHRofXB4YCk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXIyLnNldFN0eWxlKHRoaXMucmVjdCwgJ2hlaWdodCcsIGAxMDAlYCk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXIyLnNldFN0eWxlKHRoaXMucmVjdCwgJ3RvcCcsIDApO1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyMi5zZXRTdHlsZSh0aGlzLnJlY3QsICdsZWZ0JywgYCR7cG9pbnRlclggLSAoaXNTb3VyY2VDb2x1bW5Gcm96ZW4gPyAwIDogc2Nyb2xsLngpfXB4YCk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBsYXN0Q29sdW1uT2Zmc2V0ID0gY29vcmRpbmF0ZS5nZXRDb2x1bW5PZmZzZXQoY29vcmRpbmF0ZS5jb2x1bW5Db3VudCAtIDEpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGxhc3RDb2x1bW5XaWR0aCA9IGNvb3JkaW5hdGUuZ2V0Q29sdW1uV2lkdGgoY29vcmRpbmF0ZS5jb2x1bW5Db3VudCAtIDEpO1xuXG4gICAgICAgICAgICAgICAgbGV0IGlzTGFzdENvbHVtbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIC8vIOWkhOeQhuacgOWQjuS4gOWIl1xuICAgICAgICAgICAgICAgIGlmIChwb2ludGVyWCArIGRyYWdDZW50ZXIgPiBsYXN0Q29sdW1uT2Zmc2V0ICsgbGFzdENvbHVtbldpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldENvbHVtbkluZGV4ID0gY29vcmRpbmF0ZS5jb2x1bW5Db3VudDtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0Q29sdW1uU3RhcnRYID0gbGFzdENvbHVtbk9mZnNldCArIGxhc3RDb2x1bW5XaWR0aDtcbiAgICAgICAgICAgICAgICAgICAgaXNMYXN0Q29sdW1uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAodGFyZ2V0Q29sdW1uSW5kZXggPj0gMCAmJiAodGFyZ2V0Q29sdW1uSW5kZXggLSBzb3VyY2VDb2x1bW5JbmRleCA+IDEgfHwgdGFyZ2V0Q29sdW1uSW5kZXggLSBzb3VyY2VDb2x1bW5JbmRleCA8IDApKSB8fFxuICAgICAgICAgICAgICAgICAgICBpc0xhc3RDb2x1bW5cbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXIyLnNldFN0eWxlKHRoaXMubGluZSwgJ3dpZHRoJywgYDJweGApO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcjIuc2V0U3R5bGUodGhpcy5saW5lLCAnaGVpZ2h0JywgYDEwMCVgKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXIyLnNldFN0eWxlKHRoaXMubGluZSwgJ3RvcCcsIDApO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcjIuc2V0U3R5bGUodGhpcy5saW5lLCAnbGVmdCcsIGAke3RhcmdldENvbHVtblN0YXJ0WCAtIHNjcm9sbC54fXB4YCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkc0luZGV4OiBudW1iZXJbXSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBkcmFnLnNvdXJjZUlkcy5mb3JFYWNoKChpZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB2aXNpYmxlQ29sdW1uSW5kZXhNYXAuZ2V0KGlkKSB8fCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRzSW5kZXgucHVzaChpbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAvLyDlkJHlj7Pnp7vliqjnm67moIflnKjnm67moIfliJfnmoTliY3kuIDliJdcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldENvbHVtbkluZGV4ID4gc291cmNlQ29sdW1uSW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldENvbHVtbkluZGV4IC09IDE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcmFnZ2VkRGF0YSA9IHsgdHlwZTogRHJhZ1R5cGUuZmllbGQsIHRhcmdldEluZGV4OiB0YXJnZXRDb2x1bW5JbmRleCwgZmllbGRJZHM6IGRyYWcuc291cmNlSWRzLCBmaWVsZHNJbmRleCB9O1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyMi5zZXRTdHlsZSh0aGlzLmxpbmUsICd3aWR0aCcsIDApO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyYWdnZWREYXRhID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIERyYWdUeXBlLnJlY29yZDpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgRHJhZ1R5cGUuY29sdW1uV2lkdGg6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZURyYWdFbmQoKSB7XG4gICAgICAgIHRoaXMucmVuZGVyMi5zZXRTdHlsZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2Rpc3BsYXknLCAnbm9uZScpO1xuICAgICAgICBpZiAodGhpcy5kcmFnZ2VkRGF0YSkge1xuICAgICAgICAgICAgdGhpcy5kcmFnRW5kLmVtaXQoeyAuLi50aGlzLmRyYWdnZWREYXRhIH0pO1xuICAgICAgICAgICAgdGhpcy5kcmFnZ2VkRGF0YSA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMubW91c2Vkb3duTGlzdGVuZXIpIHRoaXMubW91c2Vkb3duTGlzdGVuZXIoKTtcbiAgICAgICAgaWYgKHRoaXMubW91c2Vtb3ZlTGlzdGVuZXIpIHRoaXMubW91c2Vtb3ZlTGlzdGVuZXIoKTtcbiAgICAgICAgaWYgKHRoaXMubW91c2V1cExpc3RlbmVyKSB0aGlzLm1vdXNldXBMaXN0ZW5lcigpO1xuXG4gICAgICAgIGlmICh0aGlzLnRpbWVyKSB7XG4gICAgICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLnRpbWVyKTtcbiAgICAgICAgICAgIHRoaXMudGltZXIgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInJlY3RcIj48L2Rpdj5cbjxkaXYgY2xhc3M9XCJsaW5lXCI+PC9kaXY+Il19
178
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9ncmlkL3NyYy9jb21wb25lbnRzL2RyYWcvZHJhZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9ncmlkL3NyYy9jb21wb25lbnRzL2RyYWcvZHJhZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFxQixNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JJLE9BQU8sRUFBaUMsUUFBUSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3JFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDOztBQVcvRSxNQUFNLE9BQU8sb0JBQW9CO0lBeUI3QjtRQXhCQSxZQUFPLEdBQUcsTUFBTSxFQUFlLENBQUM7UUFFeEIsZ0NBQTJCLEdBQUcsTUFBTSxDQUFDLDJCQUEyQixDQUFDLENBQUM7UUFFbEUsWUFBTyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUVwQyxlQUFVLEdBQTRCLE1BQU0sQ0FBQyxDQUFBLFVBQXVCLENBQUEsQ0FBQyxDQUFDO1FBTTlELGdCQUFXLEdBQXVCLElBQUksQ0FBQztRQUV2Qyx1QkFBa0IsR0FBb0MsSUFBSSxDQUFDO1FBRTNELGdCQUFXLEdBQTRCLElBQUksQ0FBQztRQVNoRCxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQsUUFBUTtRQUNKLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRU8sWUFBWTtRQUNoQixJQUFJLENBQUMsSUFBSSxHQUFH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Q0FBQyxFQUFFLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQsV0FBVztRQUNQLElBQUksSUFBSSxDQUFDLGlCQUFpQjtZQUFFLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3JELElBQUksSUFBSSxDQUFDLGlCQUFpQjtZQUFFLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3JELElBQUksSUFBSSxDQUFDLGVBQWU7WUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFFakQsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDYixvQkFBb0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDakMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDdEIsQ0FBQztJQUNMLENBQUM7K0dBdk1RLG9CQUFvQjttR0FBcEIsb0JBQW9CLHNKQ2JqQyxrRUFDa0M7OzRGRFlyQixvQkFBb0I7a0JBVGhDLFNBQVM7K0JBQ0ksZUFBZSxjQUViLElBQUksbUJBQ0MsdUJBQXVCLENBQUMsTUFBTSxRQUN6Qzt3QkFDRixLQUFLLEVBQUUsZ0JBQWdCO3FCQUMxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGVmZmVjdCwgRWxlbWVudFJlZiwgaW5qZWN0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgb3V0cHV0LCBSZW5kZXJlcjIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFJVGFibGVEcmFnU3RhdGUsIERyYWdFbmREYXRhLCBEcmFnVHlwZSB9IGZyb20gJy4uLy4uL2NvcmUnO1xuaW1wb3J0IHsgQUlUYWJsZUdyaWRTZWxlY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2VsZWN0aW9uLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2FpLXRhYmxlLWRyYWcnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9kcmFnLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgY2xhc3M6ICdkcmFnLWNvbnRhaW5lcidcbiAgICB9XG59KVxuZXhwb3J0IGNsYXNzIEFJVGFibGVEcmFnQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIGRyYWdFbmQgPSBvdXRwdXQ8RHJhZ0VuZERhdGE+KCk7XG5cbiAgICBwcml2YXRlIGFpVGFibGVHcmlkU2VsZWN0aW9uU2VydmljZSA9IGluamVjdChBSVRhYmxlR3JpZFNlbGVjdGlvblNlcnZpY2UpO1xuXG4gICAgcHJpdmF0ZSByZW5kZXIyID0gaW5qZWN0KFJlbmRlcmVyMik7XG5cbiAgICBlbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PiA9IGluamVjdChFbGVtZW50UmVmPEhUTUxFbGVtZW50Pik7XG5cbiAgICBwcml2YXRlIHJlY3QhOiBIVE1MRWxlbWVudDtcblxuICAgIHByaXZhdGUgYXV4aWxpYXJ5TGluZSE6IEhUTUxFbGVtZW50O1xuXG4gICAgcHJpdmF0ZSBkcmFnZ2VkRGF0YTogRHJhZ0VuZERhdGEgfCBudWxsID0gbnVsbDtcblxuICAgIHByaXZhdGUgbW91c2VTdGFydFBvc2l0aW9uOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0gfCBudWxsID0gbnVsbDtcblxuICAgIHByaXZhdGUgYWlUYWJsZURyYWc6IEFJVGFibGVEcmFnU3RhdGUgfCBudWxsID0gbnVsbDtcblxuICAgIHByaXZhdGUgdGltZXIhOiBudW1iZXIgfCBudWxsO1xuXG4gICAgcHJpdmF0ZSBtb3VzZWRvd25MaXN0ZW5lcj86ICgpID0+IHZvaWQ7XG4gICAgcHJpdmF0ZSBtb3VzZW1vdmVMaXN0ZW5lcj86ICgpID0+IHZvaWQ7XG4gICAgcHJpdmF0ZSBtb3VzZXVwTGlzdGVuZXI/OiAoKSA9PiB2b2lkO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIGVmZmVjdCgoKSA9PiB0aGlzLmhhbmRsZURyYWdTdGF0ZUNoYW5nZSgpKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5pbml0RWxlbWVudHMoKTtcbiAgICAgICAgdGhpcy5zZXR1cEV2ZW50TGlzdGVuZXJzKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0RWxlbWVudHMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVjdCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5yZWN0JykhO1xuICAgICAgICB0aGlzLmF1eGlsaWFyeUxpbmUgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuYXV4aWxpYXJ5LWxpbmUnKSE7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXR1cEV2ZW50TGlzdGVuZXJzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLm1vdXNlZG93bkxpc3RlbmVyID0gdGhpcy5yZW5kZXIyLmxpc3Rlbignd2luZG93JywgJ21vdXNlZG93bicsIChlOiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICB0aGlzLm1vdXNlU3RhcnRQb3NpdGlvbiA9IHsgeDogZS54LCB5OiBlLnkgfTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5tb3VzZW1vdmVMaXN0ZW5lciA9IHRoaXMucmVuZGVyMi5saXN0ZW4oJ3dpbmRvdycsICdtb3VzZW1vdmUnLCAoZTogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMudGltZXIpIHtcbiAgICAgICAgICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLnRpbWVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudGltZXIgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmFpVGFibGVEcmFnICYmIHRoaXMubW91c2VTdGFydFBvc2l0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlRHJhZyhlLCB0aGlzLmFpVGFibGVEcmFnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5tb3VzZXVwTGlzdGVuZXIgPSB0aGlzLnJlbmRlcjIubGlzdGVuKCd3aW5kb3cnLCAnbW91c2V1cCcsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubW91c2VTdGFydFBvc2l0aW9uID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuYWlUYWJsZURyYWcgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVEcmFnRW5kKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlRHJhZ1N0YXRlQ2hhbmdlKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBkcmFnID0gdGhpcy5haVRhYmxlR3JpZFNlbGVjdGlvblNlcnZpY2UuYWlUYWJsZS5kcmFnU3RhdGU/LigpO1xuXG4gICAgICAgIGlmICghZHJhZyB8fCBkcmFnLnR5cGUgPT09IERyYWdUeXBlLm5vbmUgfHwgIXRoaXMucmVjdCB8fCAhdGhpcy5hdXhpbGlhcnlMaW5lKSB7XG4gICAgICAgICAgICB0aGlzLmFpVGFibGVEcmFnID0gbnVsbDtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYWlUYWJsZURyYWcgPSBkcmFnO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlRHJhZyhlOiBNb3VzZUV2ZW50LCBkcmFnOiBBSVRhYmxlRHJhZ1N0YXRlKSB7XG4gICAgICAgIGlmIChkcmFnLnR5cGUgPT09IERyYWdUeXBlLm5vbmUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0RGlzcGxheVN0eWxlKCdibG9jaycpO1xuICAgICAgICBjb25zdCBtb3ZlWCA9IGUueCAtICh0aGlzLm1vdXNlU3RhcnRQb3NpdGlvbj8ueCB8fCAwKTtcbiAgICAgICAgc3dpdGNoIChkcmFnLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgRHJhZ1R5cGUuZmllbGQ6XG4gICAgICAgICAgICAgICAgdGhpcy5tb3ZpbmdDb2x1bW4oZHJhZywgbW92ZVgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBEcmFnVHlwZS5yZWNvcmQ6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIERyYWdUeXBlLmNvbHVtbldpZHRoOlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtb3ZpbmdDb2x1bW4oZHJhZzogQUlUYWJsZURyYWdTdGF0ZSwgbW92ZVg6IG51bWJlcikge1xuICAgICAgICBjb25zdCBhaVRhYmxlID0gdGhpcy5haVRhYmxlR3JpZFNlbGVjdGlvblNlcnZpY2UuYWlUYWJsZTtcbiAgICAgICAgY29uc3Qgc2Nyb2xsID0gZHJhZy5zY3JvbGwgfHwgeyB4OiAwLCB5OiAwIH07XG4gICAgICAgIGNvbnN0IGNvb3JkaW5hdGUgPSBkcmFnLmNvb3JkaW5hdGUhO1xuICAgICAgICBjb25zdCBmaWVsZHMgPSBhaVRhYmxlLmdyaWREYXRhKCkuZmllbGRzO1xuICAgICAgICBjb25zdCB3aWR0aCA9IHRoaXMuY2FsY3VsYXRlRHJhZ1dpZHRoKGZpZWxkcywgY29vcmRpbmF0ZSwgZHJhZyk7XG4gICAgICAgIGNvbnN0IHZpc2libGVDb2x1bW5JbmRleE1hcCA9IGFpVGFibGUuY29udGV4dCEudmlzaWJsZUNvbHVtbnNJbmRleE1hcCgpO1xuICAgICAgICBjb25zdCBzb3VyY2VDb2x1bW5JbmRleCA9IHZpc2libGVDb2x1bW5JbmRleE1hcC5nZXQoZHJhZy5zb3VyY2VJZHMudmFsdWVzKCkubmV4dCgpLnZhbHVlISkgfHwgMDtcbiAgICAgICAgY29uc3Qgc291cmNlQ29sdW1uU3RhcnRYID0gY29vcmRpbmF0ZS5nZXRDb2x1bW5PZmZzZXQoc291cmNlQ29sdW1uSW5kZXgpO1xuICAgICAgICBjb25zdCBzb3VyY2VDb2x1bW5XaWR0aCA9IGNvb3JkaW5hdGUuZ2V0Q29sdW1uV2lkdGgoc291cmNlQ29sdW1uSW5kZXgpO1xuICAgICAgICAvLyBUT0RPOiDnm67liY3pu5jorqTnrKzkuIDliJfkuLrlhrvnu5PliJfvvIzlkI7mnJ/mlK/mjIHorr7nva7lhrvnu5PliJfpnIDopoHlpITnkIZcbiAgICAgICAgY29uc3QgaXNTb3VyY2VDb2x1bW5Gcm96ZW4gPSBzb3VyY2VDb2x1bW5JbmRleCA9PT0gMDtcbiAgICAgICAgY29uc3QgcG9pbnRlclggPSBtb3ZlWCArIHNvdXJjZUNvbHVtblN0YXJ0WDtcbiAgICAgICAgLy8g5ouW5ou95Lit5b+D54K5XG4gICAgICAgIGNvbnN0IGRyYWdDZW50ZXIgPSBzb3VyY2VDb2x1bW5XaWR0aCAvIDI7XG4gICAgICAgIHRoaXMuc2V0UmVjdFN0eWxlcyh7XG4gICAgICAgICAgICBjdXJzb3I6ICdtb3ZlJyxcbiAgICAgICAgICAgIHdpZHRoOiBgJHt3aWR0aH1weGAsXG4gICAgICAgICAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICAgICAgICAgIHRvcDogJzAnLFxuICAgICAgICAgICAgbGVmdDogYCR7cG9pbnRlclggLSAoaXNTb3VyY2VDb2x1bW5Gcm96ZW4gPyAwIDogc2Nyb2xsLngpfXB4YFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBsYXN0Q29sdW1uT2Zmc2V0ID0gY29vcmRpbmF0ZS5nZXRDb2x1bW5PZmZzZXQoY29vcmRpbmF0ZS5jb2x1bW5Db3VudCAtIDEpO1xuICAgICAgICBjb25zdCBsYXN0Q29sdW1uV2lkdGggPSBjb29yZGluYXRlLmdldENvbHVtbldpZHRoKGNvb3JkaW5hdGUuY29sdW1uQ291bnQgLSAxKTtcblxuICAgICAgICBsZXQgdGFyZ2V0Q29sdW1uSW5kZXggPSBjb29yZGluYXRlLmdldENvbHVtblN0YXJ0SW5kZXgocG9pbnRlclggKyAoaXNTb3VyY2VDb2x1bW5Gcm96ZW4gPyBzY3JvbGwueCA6IDApICsgZHJhZ0NlbnRlcik7XG4gICAgICAgIGxldCB0YXJnZXRDb2x1bW5TdGFydFggPSBjb29yZGluYXRlLmdldENvbHVtbk9mZnNldCh0YXJnZXRDb2x1bW5JbmRleCk7XG4gICAgICAgIGxldCBpc0xhc3RDb2x1bW4gPSBmYWxzZTtcbiAgICAgICAgLy8g5aSE55CG5pyA5ZCO5LiA5YiXXG4gICAgICAgIGlmIChwb2ludGVyWCArIGRyYWdDZW50ZXIgPiBsYXN0Q29sdW1uT2Zmc2V0ICsgbGFzdENvbHVtbldpZHRoKSB7XG4gICAgICAgICAgICB0YXJnZXRDb2x1bW5JbmRleCA9IGNvb3JkaW5hdGUuY29sdW1uQ291bnQ7XG4gICAgICAgICAgICB0YXJnZXRDb2x1bW5TdGFydFggPSBsYXN0Q29sdW1uT2Zmc2V0ICsgbGFzdENvbHVtbldpZHRoO1xuICAgICAgICAgICAgaXNMYXN0Q29sdW1uID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgICAodGFyZ2V0Q29sdW1uSW5kZXggPj0gMCAmJiAodGFyZ2V0Q29sdW1uSW5kZXggLSBzb3VyY2VDb2x1bW5JbmRleCA+IDEgfHwgdGFyZ2V0Q29sdW1uSW5kZXggLSBzb3VyY2VDb2x1bW5JbmRleCA8IDApKSB8fFxuICAgICAgICAgICAgaXNMYXN0Q29sdW1uXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5zZXRBdXhpbGlhcnlMaW5lU3R5bGVzKHtcbiAgICAgICAgICAgICAgICB3aWR0aDogJzJweCcsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgICAgICAgICAgICAgdG9wOiAwLFxuICAgICAgICAgICAgICAgIGxlZnQ6IGAke3RhcmdldENvbHVtblN0YXJ0WCAtIHNjcm9sbC54fXB4YFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBmaWVsZHNJbmRleDogbnVtYmVyW10gPSBbXTtcbiAgICAgICAgICAgIGRyYWcuc291cmNlSWRzLmZvckVhY2goKGlkKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB2aXNpYmxlQ29sdW1uSW5kZXhNYXAuZ2V0KGlkKSB8fCAwO1xuICAgICAgICAgICAgICAgIGZpZWxkc0luZGV4LnB1c2goaW5kZXgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyDlkJHlj7Pnp7vliqjnm67moIflnKjnm67moIfliJfnmoTliY3kuIDliJdcbiAgICAgICAgICAgIGlmICh0YXJnZXRDb2x1bW5JbmRleCA+IHNvdXJjZUNvbHVtbkluZGV4KSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0Q29sdW1uSW5kZXggLT0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZHJhZ2dlZERhdGEgPSB7IHR5cGU6IERyYWdUeXBlLmZpZWxkLCB0YXJnZXRJbmRleDogdGFyZ2V0Q29sdW1uSW5kZXgsIGZpZWxkSWRzOiBkcmFnLnNvdXJjZUlkcywgZmllbGRzSW5kZXggfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVzZXRBdXhpbGlhcnlMaW5lKCk7XG4gICAgICAgICAgICB0aGlzLmRyYWdnZWREYXRhID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlRHJhZ0VuZCgpIHtcbiAgICAgICAgdGhpcy5zZXREaXNwbGF5U3R5bGUoJ25vbmUnKTtcbiAgICAgICAgaWYgKHRoaXMuZHJhZ2dlZERhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuZHJhZ0VuZC5lbWl0KHsgLi4udGhpcy5kcmFnZ2VkRGF0YSB9KTtcbiAgICAgICAgICAgIHRoaXMuZHJhZ2dlZERhdGEgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjYWxjdWxhdGVEcmFnV2lkdGgoZmllbGRzOiBhbnlbXSwgY29vcmRpbmF0ZTogYW55LCBkcmFnOiBBSVRhYmxlRHJhZ1N0YXRlKTogbnVtYmVyIHtcbiAgICAgICAgbGV0IHdpZHRoID0gMDtcbiAgICAgICAgZmllbGRzLmZvckVhY2goKGZpZWxkLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgaWYgKGRyYWcuc291cmNlSWRzLmhhcyhmaWVsZC5faWQpKSB7XG4gICAgICAgICAgICAgICAgd2lkdGggKz0gY29vcmRpbmF0ZS5jb2x1bW5JbmRpY2VzU2l6ZU1hcFtpbmRleF0gfHwgMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB3aWR0aDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldERpc3BsYXlTdHlsZShkaXNwbGF5OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5yZW5kZXIyLnNldFN0eWxlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnZGlzcGxheScsIGRpc3BsYXkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0UmVjdFN0eWxlcyhzdHlsZXM6IFJlY29yZDxzdHJpbmcsIGFueT4pIHtcbiAgICAgICAgT2JqZWN0LmVudHJpZXMoc3R5bGVzKS5mb3JFYWNoKChbcHJvcCwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcjIuc2V0U3R5bGUodGhpcy5yZWN0LCBwcm9wLCB2YWx1ZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0QXV4aWxpYXJ5TGluZVN0eWxlcyhzdHlsZXM6IFJlY29yZDxzdHJpbmcsIGFueT4pIHtcbiAgICAgICAgT2JqZWN0LmVudHJpZXMoc3R5bGVzKS5mb3JFYWNoKChbcHJvcCwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcjIuc2V0U3R5bGUodGhpcy5hdXhpbGlhcnlMaW5lLCBwcm9wLCB2YWx1ZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVzZXRBdXhpbGlhcnlMaW5lKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNldEF1eGlsaWFyeUxpbmVTdHlsZXMoeyB3aWR0aDogMCB9KTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMubW91c2Vkb3duTGlzdGVuZXIpIHRoaXMubW91c2Vkb3duTGlzdGVuZXIoKTtcbiAgICAgICAgaWYgKHRoaXMubW91c2Vtb3ZlTGlzdGVuZXIpIHRoaXMubW91c2Vtb3ZlTGlzdGVuZXIoKTtcbiAgICAgICAgaWYgKHRoaXMubW91c2V1cExpc3RlbmVyKSB0aGlzLm1vdXNldXBMaXN0ZW5lcigpO1xuXG4gICAgICAgIGlmICh0aGlzLnRpbWVyKSB7XG4gICAgICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLnRpbWVyKTtcbiAgICAgICAgICAgIHRoaXMudGltZXIgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInJlY3RcIj48L2Rpdj5cbjxkaXYgY2xhc3M9XCJhdXhpbGlhcnktbGluZVwiPjwvZGl2PiJdfQ==