ca-components 1.0.78 → 1.0.80

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 (66) hide show
  1. package/esm2022/lib/ca-components.module.mjs +16 -4
  2. package/esm2022/lib/components/ca-activity-log-list/ca-activity-log-list.component.mjs +1 -1
  3. package/esm2022/lib/components/ca-app-tooltip-v2/ca-app-tooltip-v2.component.mjs +1 -1
  4. package/esm2022/lib/components/ca-filters/components/ca-dispatcher-filter/ca-dispatcher-filter.component.mjs +2 -2
  5. package/esm2022/lib/components/ca-filters/components/ca-money-filter/ca-money-filter.component.mjs +2 -2
  6. package/esm2022/lib/components/ca-filters/components/ca-state-filter/ca-state-filter.component.mjs +2 -2
  7. package/esm2022/lib/components/ca-filters/components/ca-trailer-type-filter/ca-trailer-type-filter.component.mjs +1 -1
  8. package/esm2022/lib/components/ca-filters/components/ca-truck-type-filter/ca-truck-type-filter.component.mjs +1 -1
  9. package/esm2022/lib/components/ca-filters/components/ca-user-filter/ca-user-filter.component.mjs +2 -2
  10. package/esm2022/lib/components/ca-input/base-classes/ca-input-base-helpres.mjs +237 -0
  11. package/esm2022/lib/components/ca-input/base-classes/ca-input-base.mjs +1020 -0
  12. package/esm2022/lib/components/ca-input/base-classes/ca-input-event-manager.mjs +24 -0
  13. package/esm2022/lib/components/ca-input/ca-input.component.mjs +53 -163
  14. package/esm2022/lib/components/ca-input/components/ca-input-clear/ca-input-clear.component.mjs +4 -4
  15. package/esm2022/lib/components/ca-input/components/ca-input-placeholder-icon/ca-input-placeholder-icon.component.mjs +11 -17
  16. package/esm2022/lib/components/ca-input/config/ca-input.config.mjs +1 -1
  17. package/esm2022/lib/components/ca-input/directives/caps-lock.directive.mjs +50 -0
  18. package/esm2022/lib/components/ca-input/directives/index.mjs +5 -1
  19. package/esm2022/lib/components/ca-input/directives/input-max-value.directive.mjs +53 -0
  20. package/esm2022/lib/components/ca-input/directives/min-max-value.directive.mjs +1 -1
  21. package/esm2022/lib/components/ca-input/directives/price_format.directive.mjs +41 -0
  22. package/esm2022/lib/components/ca-input/directives/restrict-input.directive.mjs +98 -0
  23. package/esm2022/lib/components/ca-input/enums/input-text-transform.enum.mjs +9 -0
  24. package/esm2022/lib/components/ca-input/input-test/input-test.component.mjs +175 -0
  25. package/esm2022/lib/components/ca-input/pipes/input-container-class.pipe.mjs +16 -16
  26. package/esm2022/lib/components/ca-input/pipes/input-datetime-picker-class.pipe.mjs +1 -1
  27. package/esm2022/lib/components/ca-input/pipes/input-error.pipe.mjs +18 -15
  28. package/esm2022/lib/components/ca-input/pipes/input-pattern.pipe.mjs +322 -0
  29. package/esm2022/lib/components/ca-input/services/index.mjs +1 -2
  30. package/esm2022/lib/components/ca-input/utils/constants/input-constants.mjs +102 -1
  31. package/esm2022/lib/components/ca-input-address-dropdown/ca-input-address-dropdown.component.mjs +2 -2
  32. package/esm2022/lib/components/ca-input-datetime-picker/ca-input-datetime-picker.component.mjs +809 -0
  33. package/esm2022/lib/components/ca-input-dropdown/ca-input-dropdown.component.mjs +18 -18
  34. package/esm2022/lib/components/ca-rating-review/ca-rating-review.component.mjs +2 -2
  35. package/esm2022/lib/components/ca-rating-review/components/ca-ratings-reviews-popup/ca-ratings-reviews-popup.component.mjs +1 -1
  36. package/esm2022/lib/components/ca-upload-files/components/ca-upload-file/ca-upload-file.component.mjs +1 -1
  37. package/esm2022/public-api.mjs +3 -1
  38. package/fesm2022/ca-components.mjs +7690 -7171
  39. package/fesm2022/ca-components.mjs.map +1 -1
  40. package/lib/ca-components.module.d.ts +32 -30
  41. package/lib/components/ca-filters/ca-filter.component.d.ts +2 -2
  42. package/lib/components/ca-input/base-classes/ca-input-base-helpres.d.ts +29 -0
  43. package/lib/components/ca-input/base-classes/ca-input-base.d.ts +82 -0
  44. package/lib/components/ca-input/base-classes/ca-input-event-manager.d.ts +16 -0
  45. package/lib/components/ca-input/ca-input.component.d.ts +30 -48
  46. package/lib/components/ca-input/components/ca-input-placeholder-icon/ca-input-placeholder-icon.component.d.ts +3 -7
  47. package/lib/components/ca-input/config/ca-input.config.d.ts +10 -1
  48. package/lib/components/ca-input/directives/caps-lock.directive.d.ts +14 -0
  49. package/lib/components/ca-input/directives/index.d.ts +4 -0
  50. package/lib/components/ca-input/directives/input-max-value.directive.d.ts +12 -0
  51. package/lib/components/ca-input/directives/price_format.directive.d.ts +11 -0
  52. package/lib/components/ca-input/directives/restrict-input.directive.d.ts +15 -0
  53. package/lib/components/ca-input/enums/input-text-transform.enum.d.ts +6 -0
  54. package/lib/components/ca-input/input-test/input-test.component.d.ts +47 -0
  55. package/lib/components/ca-input/pipes/input-container-class.pipe.d.ts +3 -3
  56. package/lib/components/ca-input/pipes/input-datetime-picker-class.pipe.d.ts +1 -1
  57. package/lib/components/ca-input/pipes/input-pattern.pipe.d.ts +25 -0
  58. package/lib/components/ca-input/services/index.d.ts +0 -1
  59. package/lib/components/ca-input/utils/constants/input-constants.d.ts +11 -0
  60. package/lib/components/ca-input-datetime-picker/ca-input-datetime-picker.component.d.ts +99 -0
  61. package/package.json +1 -1
  62. package/public-api.d.ts +2 -0
  63. package/esm2022/lib/components/ca-input/components/ca-input-datetime-picker/ca-input-datetime-picker.component.mjs +0 -100
  64. package/esm2022/lib/components/ca-input/services/ca-input-state.service.mjs +0 -2173
  65. package/lib/components/ca-input/components/ca-input-datetime-picker/ca-input-datetime-picker.component.d.ts +0 -48
  66. package/lib/components/ca-input/services/ca-input-state.service.d.ts +0 -196
@@ -203,7 +203,7 @@ export class CaUserFilterComponent {
203
203
  // modules
204
204
  CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: HttpClientModule }, { kind: "ngmodule", type: AngularSvgIconModule }, { kind: "component", type: i3.SvgIconComponent, selector: "svg-icon", inputs: ["src", "name", "stretch", "applyClass", "applyCss", "svgClass", "class", "viewBox", "svgAriaLabel", "svgStyle"] }, { kind: "ngmodule", type: NgbTooltipModule }, { kind: "directive", type: i4.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "component", type:
205
205
  // components
206
- CaInputComponent, selector: "app-ca-input", inputs: ["inputConfig", "incorrectValue", "selectedDropdownLabelColor", "template"], outputs: ["incorrectEvent", "blurInput", "focusInput", "change", "commandEvent", "clear", "showHideDropdown", "dropDownKeyNavigation"] }, { kind: "component", type: CaProfileImageComponent, selector: "app-ca-profile-image", inputs: ["indx", "avatarImg", "avatarColor", "textShortName", "name", "isRound", "size", "height", "fontSize", "isHoverEffect"] }, { kind: "component", type: CaAppTooltipV2Component, selector: "mainCaTooltip, [mainCaTooltip]", inputs: ["mainCaTooltip", "position", "openTooltipDelay", "tooltipBackground", "tooltipColor", "tooltipTextAlign", "tooltipMarginTop", "disableTooltip"] }, { kind: "pipe", type:
206
+ CaInputComponent, selector: "app-ca-input", inputs: ["inputConfig", "dateTimePopover", "incorrectValue", "selectedDropdownLabelColor", "template"], outputs: ["handleToggleDropdownOptions", "incorrectEvent", "blurInput", "focusInput", "change", "commandEvent", "clear", "showHideDropdown", "dropDownKeyNavigation"] }, { kind: "component", type: CaProfileImageComponent, selector: "app-ca-profile-image", inputs: ["indx", "avatarImg", "avatarColor", "textShortName", "name", "isRound", "size", "height", "fontSize", "isHoverEffect"] }, { kind: "component", type: CaAppTooltipV2Component, selector: "mainCaTooltip, [mainCaTooltip]", inputs: ["mainCaTooltip", "position", "openTooltipDelay", "tooltipBackground", "tooltipColor", "tooltipTextAlign", "tooltipMarginTop", "disableTooltip"] }, { kind: "pipe", type:
207
207
  // pipes
208
208
  FilterSelectedItemsPipe, name: "filterSelectedItems" }, { kind: "pipe", type: GroupSelectionStatePipe, name: "groupSelectionState" }, { kind: "pipe", type: SelectedUsersPipe, name: "selectedUser" }], animations: [
209
209
  inOutAnimation('inOutAnimation'),
@@ -248,4 +248,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
248
248
  }], isSearchExpanded: [{
249
249
  type: Input
250
250
  }] } });
251
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2EtdXNlci1maWx0ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2EtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvY2EtZmlsdGVycy9jb21wb25lbnRzL2NhLXVzZXItZmlsdGVyL2NhLXVzZXItZmlsdGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NhLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2NhLWZpbHRlcnMvY29tcG9uZW50cy9jYS11c2VyLWZpbHRlci9jYS11c2VyLWZpbHRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFHTCxpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCxtQkFBbUIsR0FHcEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUxQyxVQUFVO0FBQ1YsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDOUQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFeEQsYUFBYTtBQUNiLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFFdEUsUUFBUTtBQUNSLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxr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LFNBQVM7K0JBQ0Usb0JBQW9CLGNBQ2xCLElBQUksaUJBQ0QsaUJBQWlCLENBQUMsSUFBSSxXQUc1Qjt3QkFDUCxVQUFVO3dCQUNWLFlBQVk7d0JBQ1osbUJBQW1CO3dCQUNuQixnQkFBZ0I7d0JBQ2hCLG9CQUFvQjt3QkFDcEIsZ0JBQWdCO3dCQUNoQixhQUFhO3dCQUNiLGdCQUFnQjt3QkFDaEIsdUJBQXVCO3dCQUN2Qix1QkFBdUI7d0JBQ3ZCLFFBQVE7d0JBQ1IsdUJBQXVCO3dCQUN2Qix1QkFBdUI7d0JBQ3ZCLGlCQUFpQjtxQkFDcEIsY0FDYTt3QkFDVixjQUFjLENBQUMsZ0JBQWdCLENBQUM7d0JBQ2hDLGFBQWEsQ0FBQyxlQUFlLENBQUM7d0JBQzlCLFNBQVMsQ0FBQyxXQUFXLENBQUM7cUJBQ3ZCO3VGQUdRLElBQUk7c0JBQVosS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPbkRlc3Ryb3ksXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICBVbnR5cGVkRm9ybUJ1aWxkZXIsXG4gIFVudHlwZWRGb3JtR3JvdXAsXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuXG4vLyBtb2R1bGVzXG5pbXBvcnQgeyBIdHRwQ2xpZW50TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgTmdiVG9vbHRpcE1vZHVsZSB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcbmltcG9ydCB7IEFuZ3VsYXJTdmdJY29uTW9kdWxlIH0gZnJvbSAnYW5ndWxhci1zdmctaWNvbic7XG5cbi8vIGFuaW1hdGlvbnNcbmltcG9ydCB7IGluT3V0QW5pbWF0aW9uIH0gZnJvbSAnLi4vLi4vLi4vLi4vYW5pbWF0aW9ucy9pbi1vdXQuYW5pbWF0aW9uJztcbmltcG9ydCB7IHNob3dBbmltYXRpb24gfSBmcm9tICcuLi8uLi8uLi8uLi9hbmltYXRpb25zL3Nob3cuYW5pbWF0aW9uJztcblxuLy8gZW51bXNcbmltcG9ydCB7IExvYWRTdGF0dXNFbnVtIH0gZnJvbSAnLi4vLi4vLi4vLi4vZW51bXMvbG9hZC1zdGF0dXMuZW51bSc7XG5pbXBvcnQgeyBUb29sYmFyRmlsdGVyU3RyaW5nRW51bSB9IGZyb20gJy4uLy4uLy4uL2NhLW1hcC9lbnVtcy90b29sYmFyLWZpbHRlci1zdHJpbmcuZW51bSc7XG5cbi8vIG1vZGVsc1xuaW1wb3J0IHsgZmlsdGVyT3V0cHV0IH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2ZpbHRlci1vdXRwdXQubW9kZWwnO1xuaW1wb3J0IHsgZmlsdGVyT3V0cHV0V2l0aFBhcmFtcyB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9maWx0ZXItb3V0cHV0LXBhcmFtcy5tb2RlbCc7XG5pbXBvcnQgeyBVc2VyRGF0YSB9IGZyb20gJy4vbW9kZWxzL2NhLXVzZXItZGF0YS5tb2RlbCc7XG5pbXBvcnQgeyBVc2VyR3JvdXAgfSBmcm9tICcuL21vZGVscy9jYS11c2VyLWdyb3VwLm1vZGVsJztcblxuLy8gY29tcG9uZW50c1xuaW1wb3J0IHsgQ2FJbnB1dENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2NhLWlucHV0L2NhLWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYVByb2ZpbGVJbWFnZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2NhLXByb2ZpbGUtaW1hZ2UvY2EtcHJvZmlsZS1pbWFnZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FBcHBUb29sdGlwVjJDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9jYS1hcHAtdG9vbHRpcC12Mi9jYS1hcHAtdG9vbHRpcC12Mi5jb21wb25lbnQnO1xuXG4vLyBwaXBlc1xuaW1wb3J0IHsgRmlsdGVyU2VsZWN0ZWRJdGVtc1BpcGUgfSBmcm9tICcuL3BpcGVzL2ZpbHRlci1zZWxlY3RlZC1pdGVtcy5waXBlJztcbmltcG9ydCB7IEdyb3VwU2VsZWN0aW9uU3RhdGVQaXBlIH0gZnJvbSAnLi9waXBlcy9ncm91cC1zZWxlY3Rpb24tc3RhdGUucGlwZSc7XG5pbXBvcnQgeyBTZWxlY3RlZFVzZXJzUGlwZSB9IGZyb20gJy4vcGlwZXMvc2VsZWN0ZWQtdXNlcnMucGlwZSc7XG5cbi8vIGFuaW1hdGlvbnNcbmltcG9ydCB7IGNsb3NlRm9ybSB9IGZyb20gJy4uLy4uLy4uLy4uL2FuaW1hdGlvbnMvY2xvc2UtZm9ybS5hbmltYXRpb24nO1xuXG4vLyB1dGlsc1xuaW1wb3J0IHsgQ2FGaWx0ZXJzU3ZnUm91dGVzIH0gZnJvbSAnLi4vLi4vdXRpbHMvc3ZnLXJvdXRlcy9jYS1maWx0ZXJzLXN2Zy1yb3V0ZXMnO1xuXG4vLyBoZWxwZXJzXG5pbXBvcnQgeyBGaWx0ZXJIZWxwZXIgfSBmcm9tICcuLi8uLi91dGlscy9oZWxwZXJzL2ZpbHRlci5oZWxwZXInO1xuXG4vLyBjb25maWdzXG5pbXBvcnQgeyBJQ2FJbnB1dCB9IGZyb20gJy4uLy4uLy4uL2NhLWlucHV0L2NvbmZpZy9jYS1pbnB1dC5jb25maWcnO1xuaW1wb3J0IHsgQ2FVc2VyRmlsdGVyQ29uZmlnIH0gZnJvbSAnLi9jb25maWcvY2EtdXNlci1maWx0ZXIuY29uZmlnJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWNhLXVzZXItZmlsdGVyJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgdGVtcGxhdGVVcmw6ICcuL2NhLXVzZXItZmlsdGVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY2EtdXNlci1maWx0ZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgaW1wb3J0czogW1xuICAgIC8vIG1vZHVsZXNcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBIdHRwQ2xpZW50TW9kdWxlLFxuICAgIEFuZ3VsYXJTdmdJY29uTW9kdWxlLFxuICAgIE5nYlRvb2x0aXBNb2R1bGUsXG4gICAgLy8gY29tcG9uZW50c1xuICAgIENhSW5wdXRDb21wb25lbnQsXG4gICAgQ2FQcm9maWxlSW1hZ2VDb21wb25lbnQsXG4gICAgQ2FBcHBUb29sdGlwVjJDb21wb25lbnQsXG4gICAgLy8gcGlwZXNcbiAgICBGaWx0ZXJTZWxlY3RlZEl0ZW1zUGlwZSxcbiAgICBHcm91cFNlbGVjdGlvblN0YXRlUGlwZSxcbiAgICBTZWxlY3RlZFVzZXJzUGlwZVxuXSxcbiAgYW5pbWF0aW9uczogW1xuICAgIGluT3V0QW5pbWF0aW9uKCdpbk91dEFuaW1hdGlvbicpLFxuICAgIHNob3dBbmltYXRpb24oJ3Nob3dBbmltYXRpb24nKSxcbiAgICBjbG9zZUZvcm0oJ2Nsb3NlRm9ybScpLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBDYVVzZXJGaWx0ZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIHR5cGUhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGlzRmlsdGVyQWN0aXZlOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGZpbHRlclRpdGxlITogc3RyaW5nO1xuICBASW5wdXQoKSBoYXNMZWZ0U2lkZUljb246IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgdG9Eb1N1YlR5cGUhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHVzZXJHcm91cCE6IFVzZXJHcm91cFtdO1xuICBASW5wdXQoKSBpc1NlYXJjaEV4cGFuZGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgcHVibGljIGxvYWRTdGF0dXNFbnVtID0gTG9hZFN0YXR1c0VudW07XG4gIHB1YmxpYyBzZWFyY2hGb3JtITogVW50eXBlZEZvcm1Hcm91cDtcbiAgcHVibGljIHNlYXJjaElucHV0VmFsdWUhOiBzdHJpbmc7XG5cbiAgcHVibGljIHVuc2VsZWN0ZWRWaXNpYmxlQ291bnQ6IG51bWJlciA9IDA7XG4gIHB1YmxpYyBjYUZpbHRlcnNTdmdSb3V0ZXM6IENhRmlsdGVyc1N2Z1JvdXRlcyA9IENhRmlsdGVyc1N2Z1JvdXRlcztcblxuICBwdWJsaWMgc2VsZWN0ZWRVc2VyR3JvdXA6IFVzZXJHcm91cFtdID0gW107XG4gIHB1YmxpYyBmaWx0ZXJBY3RpdmVBcnJheTogVXNlckdyb3VwW10gPSBbXTtcbiAgcHVibGljIGlzQXNjZW5kaW5nU29ydE9yZGVyOiBib29sZWFuID0gdHJ1ZTtcbiAgcHVibGljIGlzQnV0dG9uQXZhaWxhYmxlOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBoYXNTZWxlY3RlZFVzZXJzOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyB0b3RhbEZpbHRlcnNOdW06IG51bWJlciA9IDA7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBmb3JtQnVpbGRlcjogVW50eXBlZEZvcm1CdWlsZGVyKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuY3JlYXRlRm9ybSgpO1xuXG4gICAgdGhpcy53YXRjaFNlYXJjaEZvcm1WYWx1ZUNoYW5nZXMoKTtcbiAgfVxuXG4gIGdldCB1c2VyU2VhcmNoKCk6IElDYUlucHV0IHtcbiAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xuICAgICAgY2FzZSBUb29sYmFyRmlsdGVyU3RyaW5nRW51bS5VU0VSX0ZJTFRFUjpcbiAgICAgIGNhc2UgVG9vbGJhckZpbHRlclN0cmluZ0VudW0uTU9EVUxFX0ZJTFRFUjpcbiAgICAgICAgcmV0dXJuIENhVXNlckZpbHRlckNvbmZpZy5nZXRVc2VyU2VhcmNoKCk7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBmaWx0ZXIgdHlwZScpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRJbml0aWFscyhuYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuICAgIHJldHVybiBGaWx0ZXJIZWxwZXIuZ2V0SW5pdGlhbHMobmFtZSk7XG4gIH1cblxuICBwdWJsaWMgb25Hcm91cFN3aXRjaFN0YXRlKGdyb3VwOiBVc2VyR3JvdXApOiB2b2lkIHtcbiAgICBncm91cC5pc09wZW4gPSAhZ3JvdXAuaXNPcGVuO1xuICB9XG5cbiAgcHVibGljIG9uQ2hlY2tib3hTZWxlY3QoZXZlbnQ6IEV2ZW50LCBncm91cDogVXNlckdyb3VwKTogdm9pZCB7XG4gICAgaWYgKGV2ZW50KSBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIGNvbnN0IHRvdGFsSXRlbXMgPSBncm91cC5pdGVtcy5sZW5ndGg7XG4gICAgY29uc3Qgc2VsZWN0ZWRJdGVtcyA9IGdyb3VwLml0ZW1zLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5pc1NlbGVjdGVkKS5sZW5ndGg7XG5cbiAgICBncm91cC5pdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICBpZiAoc2VsZWN0ZWRJdGVtcyA9PT0gdG90YWxJdGVtcykgaXRlbS5pc1NlbGVjdGVkID0gZmFsc2U7XG4gICAgICBlbHNlIGl0ZW0uaXNTZWxlY3RlZCA9IHRydWU7XG4gICAgfSk7XG5cbiAgICB0aGlzLmhhc1NlbGVjdGVkVXNlcnMgPSBzZWxlY3RlZEl0ZW1zICE9PSB0b3RhbEl0ZW1zO1xuICB9XG5cbiAgcHVibGljIG9uRmlsdGVyQ2xvc2UoKTogdm9pZCB7XG4gICAgRmlsdGVySGVscGVyLmhhbmRsZUdyb3VwRmlsdGVyQ2xvc2UoXG4gICAgICB0aGlzLnVzZXJHcm91cCxcbiAgICAgIHRoaXMuc2VsZWN0ZWRVc2VyR3JvdXAsXG4gICAgICB0aGlzLnJlbW92ZUZyb21TZWxlY3RlZFVzZXIuYmluZCh0aGlzKSxcbiAgICAgIHRoaXMuYWRkVG9TZWxlY3RlZFVzZXIuYmluZCh0aGlzKVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgc2V0RmlsdGVyVmFsdWUoXG4gICAgZXZlbnQ6IEV2ZW50XG4gICk6IGZpbHRlck91dHB1dCB8IGZpbHRlck91dHB1dFdpdGhQYXJhbXMgfCB1bmRlZmluZWQge1xuICAgIHRoaXMuZmlsdGVyQWN0aXZlQXJyYXkgPSBbLi4udGhpcy51c2VyR3JvdXBdO1xuICAgIGNvbnN0IHNlbGVjdGVkVXNlcnNJZEFycmF5OiBudW1iZXJbXSA9IFtdO1xuICAgIHRoaXMudG90YWxGaWx0ZXJzTnVtID0gdGhpcy5maWx0ZXJBY3RpdmVBcnJheS5sZW5ndGg7XG5cbiAgICBjb25zdCBtYWluQXJyYXkgPSB0aGlzLnVzZXJHcm91cDtcbiAgICBsZXQgcXVlcnlQYXJhbXMgPSB7fTtcbiAgICBsZXQgc3ViVHlwZTogc3RyaW5nID0gVG9vbGJhckZpbHRlclN0cmluZ0VudW0uRU1QVFlfU1RSSU5HX1BMQUNFSE9MREVSO1xuXG4gICAgbWFpbkFycmF5LmZvckVhY2goKGRhdGE6IFVzZXJHcm91cCkgPT4ge1xuICAgICAgZGF0YS5pdGVtcy5mb3JFYWNoKChpdGVtOiBVc2VyRGF0YSkgPT4ge1xuICAgICAgICBpZiAoaXRlbS5pc1NlbGVjdGVkKSBzZWxlY3RlZFVzZXJzSWRBcnJheS5wdXNoKGl0ZW0uaWQhKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaWYgKCFzZWxlY3RlZFVzZXJzSWRBcnJheS5sZW5ndGgpIHtcbiAgICAgIHRoaXMuY2xlYXJBbGwoZXZlbnQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHF1ZXJ5UGFyYW1zID0gc2VsZWN0ZWRVc2Vyc0lkQXJyYXk7XG4gICAgc3ViVHlwZSA9XG4gICAgICB0aGlzLnRvRG9TdWJUeXBlID8/IFRvb2xiYXJGaWx0ZXJTdHJpbmdFbnVtLkVNUFRZX1NUUklOR19QTEFDRUhPTERFUjtcblxuICAgIGNvbnN0IGFjdGlvbiA9ICdTZXQnO1xuICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICBmaWx0ZXJUeXBlOiB0aGlzLnR5cGUsXG4gICAgICBhY3Rpb24sXG4gICAgICBxdWVyeVBhcmFtcyxcbiAgICAgIHN1YlR5cGUsXG4gICAgfTtcblxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgcHVibGljIGNsZWFyQWxsKGV2ZW50PzogRXZlbnQpOiBmaWx0ZXJPdXRwdXQgfCBmaWx0ZXJPdXRwdXRXaXRoUGFyYW1zIHtcbiAgICBpZiAoZXZlbnQpIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgdGhpcy5zZWxlY3RlZFVzZXJHcm91cCA9IFtdO1xuICAgIHRoaXMuZmlsdGVyQWN0aXZlQXJyYXkgPSBbXTtcbiAgICB0aGlzLnRvdGFsRmlsdGVyc051bSA9IDA7XG4gICAgdGhpcy5oYXNTZWxlY3RlZFVzZXJzID0gZmFsc2U7XG5cbiAgICB0aGlzLnVzZXJHcm91cC5mb3JFYWNoKChncm91cCkgPT4ge1xuICAgICAgZ3JvdXAuaXRlbXMuZm9yRWFjaCgoaXRlbTogVXNlckRhdGEpID0+IHtcbiAgICAgICAgaXRlbS5pc1NlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgIGl0ZW0uY3VycmVudFNldCA9IGZhbHNlO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBhY3Rpb24gPSAnQ2xlYXInO1xuICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICBhY3Rpb24sXG4gICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICBmaWx0ZXJUeXBlOiB0aGlzLnR5cGUsXG4gICAgfTtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIHB1YmxpYyB0cmFja0J5SWRlbnRpdHkoaW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVGb3JtKCk6IHZvaWQge1xuICAgIHRoaXMuc2VhcmNoRm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgc2VhcmNoOiBudWxsLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGhhbmRsZVNlbGVjdGVkVXNlcnMoaXRlbTogVXNlckRhdGEsIGluZHg6IG51bWJlciwgaW5keDI6IG51bWJlcikge1xuICAgIGlmIChpdGVtLmlzU2VsZWN0ZWQpIHRoaXMucmVtb3ZlRnJvbVNlbGVjdGVkVXNlcihpdGVtLCBpbmR4LCBpbmR4Mik7XG4gICAgZWxzZSB0aGlzLmFkZFRvU2VsZWN0ZWRVc2VyKGl0ZW0sIGluZHgsIGluZHgyKTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRUb1NlbGVjdGVkVXNlcihpdGVtOiBVc2VyRGF0YSwgaW5keDogbnVtYmVyLCBpbmR4MjogbnVtYmVyKSB7XG4gICAgY29uc3QgeyBoYXNTZWxlY3RlZFVzZXJzLCB1bnNlbGVjdGVkVmlzaWJsZUNvdW50LCBncm91cEFycmF5IH0gPVxuICAgICAgRmlsdGVySGVscGVyLmFkZE9yUmVtb3ZlRnJvbUdyb3VwKFxuICAgICAgICAnYWRkJyxcbiAgICAgICAgdGhpcy51c2VyR3JvdXAsXG4gICAgICAgIGl0ZW0sXG4gICAgICAgIGluZHgsXG4gICAgICAgIGluZHgyXG4gICAgICApO1xuXG4gICAgdGhpcy5oYXNTZWxlY3RlZFVzZXJzID0gaGFzU2VsZWN0ZWRVc2VycztcbiAgICB0aGlzLnVuc2VsZWN0ZWRWaXNpYmxlQ291bnQgPSB1bnNlbGVjdGVkVmlzaWJsZUNvdW50O1xuICAgIHRoaXMudXNlckdyb3VwID0gWy4uLmdyb3VwQXJyYXldO1xuXG4gICAgdGhpcy5jaGVja0ZpbHRlckFjdGl2ZVZhbHVlKCk7XG4gIH1cblxuICBwdWJsaWMgcmVtb3ZlRnJvbVNlbGVjdGVkVXNlcihcbiAgICBpdGVtOiBVc2VyRGF0YSxcbiAgICBpbmR4OiBudW1iZXIsXG4gICAgaW5keDI6IG51bWJlclxuICApOiB2b2lkIHtcbiAgICBjb25zdCB7IGhhc1NlbGVjdGVkVXNlcnMsIHVuc2VsZWN0ZWRWaXNpYmxlQ291bnQsIGdyb3VwQXJyYXkgfSA9XG4gICAgICBGaWx0ZXJIZWxwZXIuYWRkT3JSZW1vdmVGcm9tR3JvdXAoXG4gICAgICAgICdyZW1vdmUnLFxuICAgICAgICB0aGlzLnVzZXJHcm91cCxcbiAgICAgICAgaXRlbSxcbiAgICAgICAgaW5keCxcbiAgICAgICAgaW5keDJcbiAgICAgICk7XG5cbiAgICB0aGlzLmhhc1NlbGVjdGVkVXNlcnMgPSBoYXNTZWxlY3RlZFVzZXJzO1xuICAgIHRoaXMudW5zZWxlY3RlZFZpc2libGVDb3VudCA9IHVuc2VsZWN0ZWRWaXNpYmxlQ291bnQ7XG4gICAgdGhpcy51c2VyR3JvdXAgPSBncm91cEFycmF5O1xuXG4gICAgdGhpcy5jaGVja0ZpbHRlckFjdGl2ZVZhbHVlKCk7XG4gIH1cblxuICBwdWJsaWMgY2hlY2tGaWx0ZXJBY3RpdmVWYWx1ZSgpOiB2b2lkIHtcbiAgICBjb25zdCBmaWx0ZXJDaGVjayA9IEZpbHRlckhlbHBlci5jaGVja0dyb3VwRmlsdGVyQWN0aXZlVmFsdWUoXG4gICAgICB0aGlzLmZpbHRlckFjdGl2ZUFycmF5LFxuICAgICAgdGhpcy5pc0J1dHRvbkF2YWlsYWJsZVxuICAgICk7XG5cbiAgICB0aGlzLmlzQnV0dG9uQXZhaWxhYmxlID0gZmlsdGVyQ2hlY2suaXNCdXR0b25BdmFpbGFibGU7XG4gIH1cblxuICBwcml2YXRlIHdhdGNoU2VhcmNoRm9ybVZhbHVlQ2hhbmdlcygpOiB2b2lkIHtcbiAgICB0aGlzLnNlYXJjaEZvcm0udmFsdWVDaGFuZ2VzXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAuc3Vic2NyaWJlKChjaGFuZ2VzKSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0VmFsdWUgPSBjaGFuZ2VzLnNlYXJjaD8udG9Mb3dlckNhc2UoKSB8fCAnJztcblxuICAgICAgICB0aGlzLnVzZXJHcm91cC5mb3JFYWNoKChncm91cCkgPT4gKHtcbiAgICAgICAgICAuLi5ncm91cCxcbiAgICAgICAgICBpdGVtczogZ3JvdXAuaXRlbXMubWFwKChpdGVtKSA9PiAoe1xuICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgIGhpZGRlbjpcbiAgICAgICAgICAgICAgKHRoaXMudHlwZSA9PT0gVG9vbGJhckZpbHRlclN0cmluZ0VudW0uVVNFUl9GSUxURVIgfHxcbiAgICAgICAgICAgICAgICB0aGlzLnR5cGUgPT09IFRvb2xiYXJGaWx0ZXJTdHJpbmdFbnVtLk1PRFVMRV9GSUxURVIpICYmXG4gICAgICAgICAgICAgIGlucHV0VmFsdWUgJiZcbiAgICAgICAgICAgICAgIWl0ZW0ubmFtZSEudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhpbnB1dFZhbHVlKSxcbiAgICAgICAgICB9KSksXG4gICAgICAgIH0pKTtcblxuICAgICAgICB0aGlzLnNlYXJjaElucHV0VmFsdWUgPVxuICAgICAgICAgIGlucHV0VmFsdWUgfHwgVG9vbGJhckZpbHRlclN0cmluZ0VudW0uRU1QVFlfU1RSSU5HX1BMQUNFSE9MREVSO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc29ydEl0ZW1zKCk6IHZvaWQge1xuICAgIGNvbnN0IHNvcnRSZXN1bHQgPSBGaWx0ZXJIZWxwZXIuc29ydEdyb3VwSXRlbXNDb3VudChcbiAgICAgIHRoaXMudXNlckdyb3VwLFxuICAgICAgdGhpcy5zZWxlY3RlZFVzZXJHcm91cCxcbiAgICAgIHRoaXMuaXNBc2NlbmRpbmdTb3J0T3JkZXJcbiAgICApO1xuXG4gICAgdGhpcy51c2VyR3JvdXAgPSBzb3J0UmVzdWx0LnNvcnRlZEZpbHRlckFycmF5O1xuICAgIHRoaXMuc2VsZWN0ZWRVc2VyR3JvdXAgPSBzb3J0UmVzdWx0LnNvcnRlZFNlbGVjdGVkRmlsdGVyQXJyYXk7XG4gICAgdGhpcy5pc0FzY2VuZGluZ1NvcnRPcmRlciA9IHNvcnRSZXN1bHQuaXNBc2NlbmRpbmdTb3J0T3JkZXI7XG4gIH1cblxuICBwdWJsaWMgZ2V0U3ZnUGF0aChwcm9wZXJ0eU5hbWU6IGtleW9mIHR5cGVvZiBDYUZpbHRlcnNTdmdSb3V0ZXMpOiBzdHJpbmcge1xuICAgIHJldHVybiBGaWx0ZXJIZWxwZXIuZ2V0U3ZnUGF0aChwcm9wZXJ0eU5hbWUpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwidHlwZSA9PT0gJ3VzZXJGaWx0ZXInIHx8IHR5cGUgPT09ICdtb2R1bGVGaWx0ZXInXCI+XG4gIDxkaXYgY2xhc3M9XCJib3JkZXItZmlsdGVyXCI+PC9kaXY+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0eXBlID09PSAndXNlckZpbHRlcidcIj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cInNlYXJjaC1pbnB1dC1oZWFkZXJcIlxuICAgICAgW2NsYXNzLmFjdGl2ZVNlYXJjaF09XCJpc1NlYXJjaEV4cGFuZGVkXCJcbiAgICAgIFtjbGFzcy5pbmFjdGl2ZVNlYXJjaF09XCIhaXNTZWFyY2hFeHBhbmRlZFwiXG4gICAgICBbZm9ybUdyb3VwXT1cInNlYXJjaEZvcm1cIlxuICAgID5cbiAgICAgIDxhcHAtY2EtaW5wdXRcbiAgICAgICAgY2xhc3M9XCJpbnB1dC1mb3JtLWhvbGRlclwiXG4gICAgICAgIGZvcm1Db250cm9sTmFtZT1cInNlYXJjaFwiXG4gICAgICAgIFtpbnB1dENvbmZpZ109XCJ1c2VyU2VhcmNoXCJcbiAgICAgID48L2FwcC1jYS1pbnB1dD5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxkaXZcbiAgICBjbGFzcz1cImZpbHRlci11c2VyLWhvbGRlciBkLWZsZXgganVzdGlmeS1jb250ZW50LXN0YXJ0IGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uXCJcbiAgPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ0Zvcj1cIlxuICAgICAgICBsZXQgZ3JvdXAgb2YgdXNlckdyb3VwO1xuICAgICAgICBsZXQgaW5keCA9IGluZGV4O1xuICAgICAgICB0cmFja0J5OiB0cmFja0J5SWRlbnRpdHlcbiAgICAgIFwiXG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cInVzZXItaXRlbXMtaG9sZGVyIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAoY2xpY2spPVwib25Hcm91cFN3aXRjaFN0YXRlKGdyb3VwKVwiXG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveC1ob2xkZXIgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBjbGFzcz1cImNoZWNrYm94LXRvb2x0aXBcIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBuZ2JUb29sdGlwXG4gICAgICAgICAgICBbbWFpbkNhVG9vbHRpcF09XCJcbiAgICAgICAgICAgICAgKGdyb3VwIHwgZ3JvdXBTZWxlY3Rpb25TdGF0ZSkuc29tZVNlbGVjdGVkXG4gICAgICAgICAgICAgICAgPyAnQ2xlYXIgc2VsZWN0ZWQnXG4gICAgICAgICAgICAgICAgOiAnQ2xlYXIgZ3JvdXAnXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgdG9vbHRpcEJhY2tncm91bmQ9XCIjQ0NDQ0NDXCJcbiAgICAgICAgICAgIHRvb2x0aXBDb2xvcj1cIiMyRjJGMkZcIlxuICAgICAgICAgICAgcG9zaXRpb249XCJib3R0b21cIlxuICAgICAgICAgICAgY3VzdG9tQ2xhc3M9XCJtdC0xXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgY2xhc3M9XCJ0YWJsZS1jaGVja2JveFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgIGlkPVwiY2hlY2tib3h7eyBpbmR4IH19XCJcbiAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiKGdyb3VwIHwgZ3JvdXBTZWxlY3Rpb25TdGF0ZSkuYWxsU2VsZWN0ZWRcIlxuICAgICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCIoZ3JvdXAgfCBncm91cFNlbGVjdGlvblN0YXRlKS5zb21lU2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwib25DaGVja2JveFNlbGVjdCgkZXZlbnQsIGdyb3VwKVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgIGNsYXNzPVwidGFibGUtY2hlY2tib3gtbGFiZWxcIlxuICAgICAgICAgICAgICBmb3I9XCJjaGVja2JveHt7IGluZHggfX1cIlxuICAgICAgICAgICAgPjwvbGFiZWw+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiaGlkZS11c2VyLWdyb3VwXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgc3ZnX3JvdGF0ZTogIWdyb3VwLmlzT3BlbixcbiAgICAgICAgICAgICAgcm90YXRlX2JhY2s6IGdyb3VwLmlzT3BlbixcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzdmctaWNvbiBbc3JjXT1cImdldFN2Z1BhdGgoJ2Fycm93RmlsdGVyJylcIj48L3N2Zy1pY29uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwidXNlci10aXRsZS10ZXh0IGNvdW50ZXItcGFkZC10aXRsZSBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGNhLWZvbnQtYm9sZFwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBncm91cC5sYWJlbC50b1VwcGVyQ2FzZSgpIH19XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJ1c2VyLWZpbHRlci1ib3ggZC1mbGV4IGZsZXgtY29sdW1uIGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIGNhLWZvbnQtYm9sZCBtcy0xXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IGdyb3VwLml0ZW1zIHwgZmlsdGVyU2VsZWN0ZWRJdGVtcyB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cInVzZXItZ3JvdXAtaG9sZGVyXCJcbiAgICAgICAgW2NsYXNzLnVzZXItZ3JvdXAtcmVkdWNlZC1ob2xkZXJdPVwidHlwZSA9PT0gJ3VzZXJGaWx0ZXInXCJcbiAgICAgICAgW0BjbG9zZUZvcm1dPVwiZ3JvdXAuaXNPcGVuXCJcbiAgICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgbGV0IGl0ZW0gb2YgZ3JvdXAuaXRlbXMgfCBzZWxlY3RlZFVzZXI7XG4gICAgICAgICAgICBsZXQgaW5keDIgPSBpbmRleDtcbiAgICAgICAgICAgIHRyYWNrQnk6IHRyYWNrQnlJZGVudGl0eVxuICAgICAgICAgIFwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IFtAaW5PdXRBbmltYXRpb25dPVwiJ2luJ1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgIHVzZXJUZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiB7IGl0ZW06IGl0ZW0sIGluZHg6IGluZHgsIGluZHgyOiBpbmR4MiB9XG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIoZ3JvdXAgfCBncm91cFNlbGVjdGlvblN0YXRlKS5zb21lU2VsZWN0ZWRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyLWZpbHRlciBib3JkZXItdGhyaXJkLW1hcmdpblwiPjwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICBsZXQgaXRlbSBvZiBncm91cC5pdGVtcyB8IHNlbGVjdGVkVXNlcjogdHJ1ZTtcbiAgICAgICAgICAgIGxldCBpbmR4MiA9IGluZGV4O1xuICAgICAgICAgICAgdHJhY2tCeTogdHJhY2tCeUlkZW50aXR5XG4gICAgICAgICAgXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgW0Bpbk91dEFuaW1hdGlvbl09XCInaW4nXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgdXNlclRlbXBsYXRlO1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IHsgaXRlbTogaXRlbSwgaW5keDogaW5keCwgaW5keDI6IGluZHgyIH1cbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJ1c2VyR3JvdXA/Lmxlbmd0aCAhPT0gc2VsZWN0ZWRVc2VyR3JvdXA/Lmxlbmd0aFwiPlxuICAgIDxkaXYgY2xhc3M9XCJib3JkZXItZmlsdGVyXCI+PC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZSAjdXNlclRlbXBsYXRlIGxldC1pdGVtPVwiaXRlbVwiIGxldC1pbmR4PVwiaW5keFwiIGxldC1pbmR4Mj1cImluZHgyXCI+XG4gIDxkaXZcbiAgICBjbGFzcz1cImQtZmxleFwiXG4gICAgW25nQ2xhc3NdPVwiXG4gICAgICBpdGVtLmlzU2VsZWN0ZWRcbiAgICAgICAgPyAnc2VsZWN0ZWQtdXNlci1ob2xkZXIganVzdGlmeS1jb250ZW50LXN0YXJ0IGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uJ1xuICAgICAgICA6ICd1c2VyLWZyYW1lLWhvbGRlciBhbGlnbi1pdGVtcy1jZW50ZXInXG4gICAgXCJcbiAgPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXRlbS5oaWRkZW5cIj5cbiAgICAgIDxkaXZcbiAgICAgICAgKGNsaWNrKT1cImhhbmRsZVNlbGVjdGVkVXNlcnMoaXRlbSwgaW5keCwgaW5keDIpXCJcbiAgICAgICAgY2xhc3M9XCJ1c2VyLW1haW4taG9sZGVyIHVzZXItZnJhbWUtaG9sZGVyIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlclwiXG4gICAgICAgIFtjbGFzcy51c2VyX3N2Z19pY29uX2hvbGRlcl09XCJ0eXBlICE9PSAndXNlckZpbHRlcidcIlxuICAgICAgPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidHlwZSA9PT0gJ3VzZXJGaWx0ZXInOyBlbHNlIHN2Z0ljb25UZW1wbGF0ZVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1c2VyLXByb2ZpbGUtaW1nIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXRlbS5hdmF0YXI7IGVsc2UgYXZhdGFyVGVtcGxhdGVcIj5cbiAgICAgICAgICAgICAgPGFwcC1jYS1wcm9maWxlLWltYWdlXG4gICAgICAgICAgICAgICAgW2luZHhdPVwiaW5keDJcIlxuICAgICAgICAgICAgICAgIFt0ZXh0U2hvcnROYW1lXT1cImdldEluaXRpYWxzKGl0ZW0ubmFtZSlcIlxuICAgICAgICAgICAgICAgIFtzaXplXT1cIidzbWFsbCdcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvYXBwLWNhLXByb2ZpbGUtaW1hZ2U+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNhdmF0YXJUZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwidXNlcl9hdmF0YXJcIlxuICAgICAgICAgICAgICAgIHN0eWxlLmJhY2tncm91bmQtaW1hZ2U9XCJ1cmwoJ3t7IGl0ZW0uYXZhdGFyIH19JylcIlxuICAgICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNzdmdJY29uVGVtcGxhdGU+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInR5cGUtaWNvbiBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICA8c3ZnLWljb24gc3JjPVwie3sgaXRlbS5pY29uIH19XCI+PC9zdmctaWNvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwiaXRlbS5pc1NlbGVjdGVkID8gJ3NlbGVjdGVkLXVzZXItZnJhbWUnIDogJ3VzZXItZnJhbWUnXCJcbiAgICAgICAgICBbY2xhc3MudXNlci1mcmFtZS1uby1pY29uXT1cInR5cGUgIT09ICd1c2VyRmlsdGVyJ1wiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0ZWQtbmFtZS10ZXh0IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgIDxzcGFuPiB7eyBpdGVtLm5hbWUgfX0gPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtPy5jb3VudDsgZWxzZSBub0NvdW50XCI+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICBjbGFzcz1cImNvdW50LWhvbGRlciBkLWlubGluZS1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIlxuICAgICAgICAgICAgICBbY2xhc3MuYWN0aXZlQ291bnRdPVwiaXRlbS5pc1NlbGVjdGVkXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgaXRlbS5jb3VudCB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNub0NvdW50PlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIm5vQ291bnRUZW1wbGF0ZTsgY29udGV4dDogeyBpdGVtOiBpdGVtIH1cIlxuICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbS5pc1NlbGVjdGVkXCI+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmVGcm9tU2VsZWN0ZWRVc2VyKGl0ZW0sIGluZHgsIGluZHgyKVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiaWNvbi1kZWxldGUgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmNvdW50ZXJNYXJnaW5dPVwiaXRlbS5jb3VudFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpY29uLWRlbGV0ZS1ob2xkXCI+PC9kaXY+XG4gICAgICAgICAgICAgIDxzdmctaWNvbiBbc3JjXT1cImdldFN2Z1BhdGgoJ3JlbW92ZVNlbGVjdGVkVmFsdWUnKVwiPjwvc3ZnLWljb24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuPCEtLSBpZiBubyBjb3VudCBmb3VuZCAtLT5cbjxuZy10ZW1wbGF0ZSAjbm9Db3VudFRlbXBsYXRlIGxldC1pdGVtPVwiaXRlbVwiPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWl0ZW0uY291bnQ7IGVsc2Ugbm9Db3VudGVyXCI+XG4gICAgPGRpdiBjbGFzcz1cInNlbGVjdGVkLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICA8c3ZnLWljb24gW3NyY109XCJnZXRTdmdQYXRoKCdpY29uQ29uZmlybScpXCI+PC9zdmctaWNvbj5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxuZy10ZW1wbGF0ZSAjbm9Db3VudGVyPlxuICAgIDxkaXYgY2xhc3M9XCJjb3VudGVyLWhvbGRlciBhY3RpdmVDb3VudGVyXCI+MDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
251
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2EtdXNlci1maWx0ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2EtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvY2EtZmlsdGVycy9jb21wb25lbnRzL2NhLXVzZXItZmlsdGVyL2NhLXVzZXItZmlsdGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NhLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2NhLWZpbHRlcnMvY29tcG9uZW50cy9jYS11c2VyLWZpbHRlci9jYS11c2VyLWZpbHRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFHTCxpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCxtQkFBbUIsR0FHcEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUxQyxVQUFVO0FBQ1YsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDOUQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFeEQsYUFBYTtBQUNiLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFFdEUsUUFBUTtBQUNSLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxr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LFNBQVM7K0JBQ0Usb0JBQW9CLGNBQ2xCLElBQUksaUJBQ0QsaUJBQWlCLENBQUMsSUFBSSxXQUc1Qjt3QkFDUCxVQUFVO3dCQUNWLFlBQVk7d0JBQ1osbUJBQW1CO3dCQUNuQixnQkFBZ0I7d0JBQ2hCLG9CQUFvQjt3QkFDcEIsZ0JBQWdCO3dCQUNoQixhQUFhO3dCQUNiLGdCQUFnQjt3QkFDaEIsdUJBQXVCO3dCQUN2Qix1QkFBdUI7d0JBQ3ZCLFFBQVE7d0JBQ1IsdUJBQXVCO3dCQUN2Qix1QkFBdUI7d0JBQ3ZCLGlCQUFpQjtxQkFDcEIsY0FDYTt3QkFDVixjQUFjLENBQUMsZ0JBQWdCLENBQUM7d0JBQ2hDLGFBQWEsQ0FBQyxlQUFlLENBQUM7d0JBQzlCLFNBQVMsQ0FBQyxXQUFXLENBQUM7cUJBQ3ZCO3VGQUdRLElBQUk7c0JBQVosS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPbkRlc3Ryb3ksXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICBVbnR5cGVkRm9ybUJ1aWxkZXIsXG4gIFVudHlwZWRGb3JtR3JvdXAsXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuXG4vLyBtb2R1bGVzXG5pbXBvcnQgeyBIdHRwQ2xpZW50TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgTmdiVG9vbHRpcE1vZHVsZSB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcbmltcG9ydCB7IEFuZ3VsYXJTdmdJY29uTW9kdWxlIH0gZnJvbSAnYW5ndWxhci1zdmctaWNvbic7XG5cbi8vIGFuaW1hdGlvbnNcbmltcG9ydCB7IGluT3V0QW5pbWF0aW9uIH0gZnJvbSAnLi4vLi4vLi4vLi4vYW5pbWF0aW9ucy9pbi1vdXQuYW5pbWF0aW9uJztcbmltcG9ydCB7IHNob3dBbmltYXRpb24gfSBmcm9tICcuLi8uLi8uLi8uLi9hbmltYXRpb25zL3Nob3cuYW5pbWF0aW9uJztcblxuLy8gZW51bXNcbmltcG9ydCB7IExvYWRTdGF0dXNFbnVtIH0gZnJvbSAnLi4vLi4vLi4vLi4vZW51bXMvbG9hZC1zdGF0dXMuZW51bSc7XG5pbXBvcnQgeyBUb29sYmFyRmlsdGVyU3RyaW5nRW51bSB9IGZyb20gJy4uLy4uLy4uL2NhLW1hcC9lbnVtcy90b29sYmFyLWZpbHRlci1zdHJpbmcuZW51bSc7XG5cbi8vIG1vZGVsc1xuaW1wb3J0IHsgZmlsdGVyT3V0cHV0IH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2ZpbHRlci1vdXRwdXQubW9kZWwnO1xuaW1wb3J0IHsgZmlsdGVyT3V0cHV0V2l0aFBhcmFtcyB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9maWx0ZXItb3V0cHV0LXBhcmFtcy5tb2RlbCc7XG5pbXBvcnQgeyBVc2VyRGF0YSB9IGZyb20gJy4vbW9kZWxzL2NhLXVzZXItZGF0YS5tb2RlbCc7XG5pbXBvcnQgeyBVc2VyR3JvdXAgfSBmcm9tICcuL21vZGVscy9jYS11c2VyLWdyb3VwLm1vZGVsJztcblxuLy8gY29tcG9uZW50c1xuaW1wb3J0IHsgQ2FJbnB1dENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2NhLWlucHV0L2NhLWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYVByb2ZpbGVJbWFnZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2NhLXByb2ZpbGUtaW1hZ2UvY2EtcHJvZmlsZS1pbWFnZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FBcHBUb29sdGlwVjJDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9jYS1hcHAtdG9vbHRpcC12Mi9jYS1hcHAtdG9vbHRpcC12Mi5jb21wb25lbnQnO1xuXG4vLyBwaXBlc1xuaW1wb3J0IHsgRmlsdGVyU2VsZWN0ZWRJdGVtc1BpcGUgfSBmcm9tICcuL3BpcGVzL2ZpbHRlci1zZWxlY3RlZC1pdGVtcy5waXBlJztcbmltcG9ydCB7IEdyb3VwU2VsZWN0aW9uU3RhdGVQaXBlIH0gZnJvbSAnLi9waXBlcy9ncm91cC1zZWxlY3Rpb24tc3RhdGUucGlwZSc7XG5pbXBvcnQgeyBTZWxlY3RlZFVzZXJzUGlwZSB9IGZyb20gJy4vcGlwZXMvc2VsZWN0ZWQtdXNlcnMucGlwZSc7XG5cbi8vIGFuaW1hdGlvbnNcbmltcG9ydCB7IGNsb3NlRm9ybSB9IGZyb20gJy4uLy4uLy4uLy4uL2FuaW1hdGlvbnMvY2xvc2UtZm9ybS5hbmltYXRpb24nO1xuXG4vLyB1dGlsc1xuaW1wb3J0IHsgQ2FGaWx0ZXJzU3ZnUm91dGVzIH0gZnJvbSAnLi4vLi4vdXRpbHMvc3ZnLXJvdXRlcy9jYS1maWx0ZXJzLXN2Zy1yb3V0ZXMnO1xuXG4vLyBoZWxwZXJzXG5pbXBvcnQgeyBGaWx0ZXJIZWxwZXIgfSBmcm9tICcuLi8uLi91dGlscy9oZWxwZXJzL2ZpbHRlci5oZWxwZXInO1xuXG4vLyBjb25maWdzXG5pbXBvcnQgeyBJQ2FJbnB1dCB9IGZyb20gJy4uLy4uLy4uL2NhLWlucHV0L2NvbmZpZy9jYS1pbnB1dC5jb25maWcnO1xuaW1wb3J0IHsgQ2FVc2VyRmlsdGVyQ29uZmlnIH0gZnJvbSAnLi9jb25maWcvY2EtdXNlci1maWx0ZXIuY29uZmlnJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWNhLXVzZXItZmlsdGVyJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgdGVtcGxhdGVVcmw6ICcuL2NhLXVzZXItZmlsdGVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY2EtdXNlci1maWx0ZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgaW1wb3J0czogW1xuICAgIC8vIG1vZHVsZXNcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBIdHRwQ2xpZW50TW9kdWxlLFxuICAgIEFuZ3VsYXJTdmdJY29uTW9kdWxlLFxuICAgIE5nYlRvb2x0aXBNb2R1bGUsXG4gICAgLy8gY29tcG9uZW50c1xuICAgIENhSW5wdXRDb21wb25lbnQsXG4gICAgQ2FQcm9maWxlSW1hZ2VDb21wb25lbnQsXG4gICAgQ2FBcHBUb29sdGlwVjJDb21wb25lbnQsXG4gICAgLy8gcGlwZXNcbiAgICBGaWx0ZXJTZWxlY3RlZEl0ZW1zUGlwZSxcbiAgICBHcm91cFNlbGVjdGlvblN0YXRlUGlwZSxcbiAgICBTZWxlY3RlZFVzZXJzUGlwZVxuXSxcbiAgYW5pbWF0aW9uczogW1xuICAgIGluT3V0QW5pbWF0aW9uKCdpbk91dEFuaW1hdGlvbicpLFxuICAgIHNob3dBbmltYXRpb24oJ3Nob3dBbmltYXRpb24nKSxcbiAgICBjbG9zZUZvcm0oJ2Nsb3NlRm9ybScpLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBDYVVzZXJGaWx0ZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIHR5cGUhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGlzRmlsdGVyQWN0aXZlOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGZpbHRlclRpdGxlITogc3RyaW5nO1xuICBASW5wdXQoKSBoYXNMZWZ0U2lkZUljb246IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgdG9Eb1N1YlR5cGUhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHVzZXJHcm91cCE6IFVzZXJHcm91cFtdO1xuICBASW5wdXQoKSBpc1NlYXJjaEV4cGFuZGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgcHVibGljIGxvYWRTdGF0dXNFbnVtID0gTG9hZFN0YXR1c0VudW07XG4gIHB1YmxpYyBzZWFyY2hGb3JtITogVW50eXBlZEZvcm1Hcm91cDtcbiAgcHVibGljIHNlYXJjaElucHV0VmFsdWUhOiBzdHJpbmc7XG5cbiAgcHVibGljIHVuc2VsZWN0ZWRWaXNpYmxlQ291bnQ6IG51bWJlciA9IDA7XG4gIHB1YmxpYyBjYUZpbHRlcnNTdmdSb3V0ZXM6IENhRmlsdGVyc1N2Z1JvdXRlcyA9IENhRmlsdGVyc1N2Z1JvdXRlcztcblxuICBwdWJsaWMgc2VsZWN0ZWRVc2VyR3JvdXA6IFVzZXJHcm91cFtdID0gW107XG4gIHB1YmxpYyBmaWx0ZXJBY3RpdmVBcnJheTogVXNlckdyb3VwW10gPSBbXTtcbiAgcHVibGljIGlzQXNjZW5kaW5nU29ydE9yZGVyOiBib29sZWFuID0gdHJ1ZTtcbiAgcHVibGljIGlzQnV0dG9uQXZhaWxhYmxlOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBoYXNTZWxlY3RlZFVzZXJzOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyB0b3RhbEZpbHRlcnNOdW06IG51bWJlciA9IDA7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBmb3JtQnVpbGRlcjogVW50eXBlZEZvcm1CdWlsZGVyKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuY3JlYXRlRm9ybSgpO1xuXG4gICAgdGhpcy53YXRjaFNlYXJjaEZvcm1WYWx1ZUNoYW5nZXMoKTtcbiAgfVxuXG4gIGdldCB1c2VyU2VhcmNoKCk6IElDYUlucHV0IHtcbiAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xuICAgICAgY2FzZSBUb29sYmFyRmlsdGVyU3RyaW5nRW51bS5VU0VSX0ZJTFRFUjpcbiAgICAgIGNhc2UgVG9vbGJhckZpbHRlclN0cmluZ0VudW0uTU9EVUxFX0ZJTFRFUjpcbiAgICAgICAgcmV0dXJuIENhVXNlckZpbHRlckNvbmZpZy5nZXRVc2VyU2VhcmNoKCk7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBmaWx0ZXIgdHlwZScpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRJbml0aWFscyhuYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuICAgIHJldHVybiBGaWx0ZXJIZWxwZXIuZ2V0SW5pdGlhbHMobmFtZSk7XG4gIH1cblxuICBwdWJsaWMgb25Hcm91cFN3aXRjaFN0YXRlKGdyb3VwOiBVc2VyR3JvdXApOiB2b2lkIHtcbiAgICBncm91cC5pc09wZW4gPSAhZ3JvdXAuaXNPcGVuO1xuICB9XG5cbiAgcHVibGljIG9uQ2hlY2tib3hTZWxlY3QoZXZlbnQ6IEV2ZW50LCBncm91cDogVXNlckdyb3VwKTogdm9pZCB7XG4gICAgaWYgKGV2ZW50KSBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIGNvbnN0IHRvdGFsSXRlbXMgPSBncm91cC5pdGVtcy5sZW5ndGg7XG4gICAgY29uc3Qgc2VsZWN0ZWRJdGVtcyA9IGdyb3VwLml0ZW1zLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5pc1NlbGVjdGVkKS5sZW5ndGg7XG5cbiAgICBncm91cC5pdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICBpZiAoc2VsZWN0ZWRJdGVtcyA9PT0gdG90YWxJdGVtcykgaXRlbS5pc1NlbGVjdGVkID0gZmFsc2U7XG4gICAgICBlbHNlIGl0ZW0uaXNTZWxlY3RlZCA9IHRydWU7XG4gICAgfSk7XG5cbiAgICB0aGlzLmhhc1NlbGVjdGVkVXNlcnMgPSBzZWxlY3RlZEl0ZW1zICE9PSB0b3RhbEl0ZW1zO1xuICB9XG5cbiAgcHVibGljIG9uRmlsdGVyQ2xvc2UoKTogdm9pZCB7XG4gICAgRmlsdGVySGVscGVyLmhhbmRsZUdyb3VwRmlsdGVyQ2xvc2UoXG4gICAgICB0aGlzLnVzZXJHcm91cCxcbiAgICAgIHRoaXMuc2VsZWN0ZWRVc2VyR3JvdXAsXG4gICAgICB0aGlzLnJlbW92ZUZyb21TZWxlY3RlZFVzZXIuYmluZCh0aGlzKSxcbiAgICAgIHRoaXMuYWRkVG9TZWxlY3RlZFVzZXIuYmluZCh0aGlzKVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgc2V0RmlsdGVyVmFsdWUoXG4gICAgZXZlbnQ6IEV2ZW50XG4gICk6IGZpbHRlck91dHB1dCB8IGZpbHRlck91dHB1dFdpdGhQYXJhbXMgfCB1bmRlZmluZWQge1xuICAgIHRoaXMuZmlsdGVyQWN0aXZlQXJyYXkgPSBbLi4udGhpcy51c2VyR3JvdXBdO1xuICAgIGNvbnN0IHNlbGVjdGVkVXNlcnNJZEFycmF5OiBudW1iZXJbXSA9IFtdO1xuICAgIHRoaXMudG90YWxGaWx0ZXJzTnVtID0gdGhpcy5maWx0ZXJBY3RpdmVBcnJheS5sZW5ndGg7XG5cbiAgICBjb25zdCBtYWluQXJyYXkgPSB0aGlzLnVzZXJHcm91cDtcbiAgICBsZXQgcXVlcnlQYXJhbXMgPSB7fTtcbiAgICBsZXQgc3ViVHlwZTogc3RyaW5nID0gVG9vbGJhckZpbHRlclN0cmluZ0VudW0uRU1QVFlfU1RSSU5HX1BMQUNFSE9MREVSO1xuXG4gICAgbWFpbkFycmF5LmZvckVhY2goKGRhdGE6IFVzZXJHcm91cCkgPT4ge1xuICAgICAgZGF0YS5pdGVtcy5mb3JFYWNoKChpdGVtOiBVc2VyRGF0YSkgPT4ge1xuICAgICAgICBpZiAoaXRlbS5pc1NlbGVjdGVkKSBzZWxlY3RlZFVzZXJzSWRBcnJheS5wdXNoKGl0ZW0uaWQhKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaWYgKCFzZWxlY3RlZFVzZXJzSWRBcnJheS5sZW5ndGgpIHtcbiAgICAgIHRoaXMuY2xlYXJBbGwoZXZlbnQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHF1ZXJ5UGFyYW1zID0gc2VsZWN0ZWRVc2Vyc0lkQXJyYXk7XG4gICAgc3ViVHlwZSA9XG4gICAgICB0aGlzLnRvRG9TdWJUeXBlID8/IFRvb2xiYXJGaWx0ZXJTdHJpbmdFbnVtLkVNUFRZX1NUUklOR19QTEFDRUhPTERFUjtcblxuICAgIGNvbnN0IGFjdGlvbiA9ICdTZXQnO1xuICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICBmaWx0ZXJUeXBlOiB0aGlzLnR5cGUsXG4gICAgICBhY3Rpb24sXG4gICAgICBxdWVyeVBhcmFtcyxcbiAgICAgIHN1YlR5cGUsXG4gICAgfTtcblxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgcHVibGljIGNsZWFyQWxsKGV2ZW50PzogRXZlbnQpOiBmaWx0ZXJPdXRwdXQgfCBmaWx0ZXJPdXRwdXRXaXRoUGFyYW1zIHtcbiAgICBpZiAoZXZlbnQpIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgdGhpcy5zZWxlY3RlZFVzZXJHcm91cCA9IFtdO1xuICAgIHRoaXMuZmlsdGVyQWN0aXZlQXJyYXkgPSBbXTtcbiAgICB0aGlzLnRvdGFsRmlsdGVyc051bSA9IDA7XG4gICAgdGhpcy5oYXNTZWxlY3RlZFVzZXJzID0gZmFsc2U7XG5cbiAgICB0aGlzLnVzZXJHcm91cC5mb3JFYWNoKChncm91cCkgPT4ge1xuICAgICAgZ3JvdXAuaXRlbXMuZm9yRWFjaCgoaXRlbTogVXNlckRhdGEpID0+IHtcbiAgICAgICAgaXRlbS5pc1NlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgIGl0ZW0uY3VycmVudFNldCA9IGZhbHNlO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBhY3Rpb24gPSAnQ2xlYXInO1xuICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICBhY3Rpb24sXG4gICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICBmaWx0ZXJUeXBlOiB0aGlzLnR5cGUsXG4gICAgfTtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIHB1YmxpYyB0cmFja0J5SWRlbnRpdHkoaW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVGb3JtKCk6IHZvaWQge1xuICAgIHRoaXMuc2VhcmNoRm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgc2VhcmNoOiBudWxsLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGhhbmRsZVNlbGVjdGVkVXNlcnMoaXRlbTogVXNlckRhdGEsIGluZHg6IG51bWJlciwgaW5keDI6IG51bWJlcikge1xuICAgIGlmIChpdGVtLmlzU2VsZWN0ZWQpIHRoaXMucmVtb3ZlRnJvbVNlbGVjdGVkVXNlcihpdGVtLCBpbmR4LCBpbmR4Mik7XG4gICAgZWxzZSB0aGlzLmFkZFRvU2VsZWN0ZWRVc2VyKGl0ZW0sIGluZHgsIGluZHgyKTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRUb1NlbGVjdGVkVXNlcihpdGVtOiBVc2VyRGF0YSwgaW5keDogbnVtYmVyLCBpbmR4MjogbnVtYmVyKSB7XG4gICAgY29uc3QgeyBoYXNTZWxlY3RlZFVzZXJzLCB1bnNlbGVjdGVkVmlzaWJsZUNvdW50LCBncm91cEFycmF5IH0gPVxuICAgICAgRmlsdGVySGVscGVyLmFkZE9yUmVtb3ZlRnJvbUdyb3VwKFxuICAgICAgICAnYWRkJyxcbiAgICAgICAgdGhpcy51c2VyR3JvdXAsXG4gICAgICAgIGl0ZW0sXG4gICAgICAgIGluZHgsXG4gICAgICAgIGluZHgyXG4gICAgICApO1xuXG4gICAgdGhpcy5oYXNTZWxlY3RlZFVzZXJzID0gaGFzU2VsZWN0ZWRVc2VycztcbiAgICB0aGlzLnVuc2VsZWN0ZWRWaXNpYmxlQ291bnQgPSB1bnNlbGVjdGVkVmlzaWJsZUNvdW50O1xuICAgIHRoaXMudXNlckdyb3VwID0gWy4uLmdyb3VwQXJyYXldO1xuXG4gICAgdGhpcy5jaGVja0ZpbHRlckFjdGl2ZVZhbHVlKCk7XG4gIH1cblxuICBwdWJsaWMgcmVtb3ZlRnJvbVNlbGVjdGVkVXNlcihcbiAgICBpdGVtOiBVc2VyRGF0YSxcbiAgICBpbmR4OiBudW1iZXIsXG4gICAgaW5keDI6IG51bWJlclxuICApOiB2b2lkIHtcbiAgICBjb25zdCB7IGhhc1NlbGVjdGVkVXNlcnMsIHVuc2VsZWN0ZWRWaXNpYmxlQ291bnQsIGdyb3VwQXJyYXkgfSA9XG4gICAgICBGaWx0ZXJIZWxwZXIuYWRkT3JSZW1vdmVGcm9tR3JvdXAoXG4gICAgICAgICdyZW1vdmUnLFxuICAgICAgICB0aGlzLnVzZXJHcm91cCxcbiAgICAgICAgaXRlbSxcbiAgICAgICAgaW5keCxcbiAgICAgICAgaW5keDJcbiAgICAgICk7XG5cbiAgICB0aGlzLmhhc1NlbGVjdGVkVXNlcnMgPSBoYXNTZWxlY3RlZFVzZXJzO1xuICAgIHRoaXMudW5zZWxlY3RlZFZpc2libGVDb3VudCA9IHVuc2VsZWN0ZWRWaXNpYmxlQ291bnQ7XG4gICAgdGhpcy51c2VyR3JvdXAgPSBncm91cEFycmF5O1xuXG4gICAgdGhpcy5jaGVja0ZpbHRlckFjdGl2ZVZhbHVlKCk7XG4gIH1cblxuICBwdWJsaWMgY2hlY2tGaWx0ZXJBY3RpdmVWYWx1ZSgpOiB2b2lkIHtcbiAgICBjb25zdCBmaWx0ZXJDaGVjayA9IEZpbHRlckhlbHBlci5jaGVja0dyb3VwRmlsdGVyQWN0aXZlVmFsdWUoXG4gICAgICB0aGlzLmZpbHRlckFjdGl2ZUFycmF5LFxuICAgICAgdGhpcy5pc0J1dHRvbkF2YWlsYWJsZVxuICAgICk7XG5cbiAgICB0aGlzLmlzQnV0dG9uQXZhaWxhYmxlID0gZmlsdGVyQ2hlY2suaXNCdXR0b25BdmFpbGFibGU7XG4gIH1cblxuICBwcml2YXRlIHdhdGNoU2VhcmNoRm9ybVZhbHVlQ2hhbmdlcygpOiB2b2lkIHtcbiAgICB0aGlzLnNlYXJjaEZvcm0udmFsdWVDaGFuZ2VzXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAuc3Vic2NyaWJlKChjaGFuZ2VzKSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0VmFsdWUgPSBjaGFuZ2VzLnNlYXJjaD8udG9Mb3dlckNhc2UoKSB8fCAnJztcblxuICAgICAgICB0aGlzLnVzZXJHcm91cC5mb3JFYWNoKChncm91cCkgPT4gKHtcbiAgICAgICAgICAuLi5ncm91cCxcbiAgICAgICAgICBpdGVtczogZ3JvdXAuaXRlbXMubWFwKChpdGVtKSA9PiAoe1xuICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgIGhpZGRlbjpcbiAgICAgICAgICAgICAgKHRoaXMudHlwZSA9PT0gVG9vbGJhckZpbHRlclN0cmluZ0VudW0uVVNFUl9GSUxURVIgfHxcbiAgICAgICAgICAgICAgICB0aGlzLnR5cGUgPT09IFRvb2xiYXJGaWx0ZXJTdHJpbmdFbnVtLk1PRFVMRV9GSUxURVIpICYmXG4gICAgICAgICAgICAgIGlucHV0VmFsdWUgJiZcbiAgICAgICAgICAgICAgIWl0ZW0ubmFtZSEudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhpbnB1dFZhbHVlKSxcbiAgICAgICAgICB9KSksXG4gICAgICAgIH0pKTtcblxuICAgICAgICB0aGlzLnNlYXJjaElucHV0VmFsdWUgPVxuICAgICAgICAgIGlucHV0VmFsdWUgfHwgVG9vbGJhckZpbHRlclN0cmluZ0VudW0uRU1QVFlfU1RSSU5HX1BMQUNFSE9MREVSO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc29ydEl0ZW1zKCk6IHZvaWQge1xuICAgIGNvbnN0IHNvcnRSZXN1bHQgPSBGaWx0ZXJIZWxwZXIuc29ydEdyb3VwSXRlbXNDb3VudChcbiAgICAgIHRoaXMudXNlckdyb3VwLFxuICAgICAgdGhpcy5zZWxlY3RlZFVzZXJHcm91cCxcbiAgICAgIHRoaXMuaXNBc2NlbmRpbmdTb3J0T3JkZXJcbiAgICApO1xuXG4gICAgdGhpcy51c2VyR3JvdXAgPSBzb3J0UmVzdWx0LnNvcnRlZEZpbHRlckFycmF5O1xuICAgIHRoaXMuc2VsZWN0ZWRVc2VyR3JvdXAgPSBzb3J0UmVzdWx0LnNvcnRlZFNlbGVjdGVkRmlsdGVyQXJyYXk7XG4gICAgdGhpcy5pc0FzY2VuZGluZ1NvcnRPcmRlciA9IHNvcnRSZXN1bHQuaXNBc2NlbmRpbmdTb3J0T3JkZXI7XG4gIH1cblxuICBwdWJsaWMgZ2V0U3ZnUGF0aChwcm9wZXJ0eU5hbWU6IGtleW9mIHR5cGVvZiBDYUZpbHRlcnNTdmdSb3V0ZXMpOiBzdHJpbmcge1xuICAgIHJldHVybiBGaWx0ZXJIZWxwZXIuZ2V0U3ZnUGF0aChwcm9wZXJ0eU5hbWUpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwidHlwZSA9PT0gJ3VzZXJGaWx0ZXInIHx8IHR5cGUgPT09ICdtb2R1bGVGaWx0ZXInXCI+XG4gIDxkaXYgY2xhc3M9XCJib3JkZXItZmlsdGVyXCI+PC9kaXY+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0eXBlID09PSAndXNlckZpbHRlcidcIj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cInNlYXJjaC1pbnB1dC1oZWFkZXJcIlxuICAgICAgW2NsYXNzLmFjdGl2ZVNlYXJjaF09XCJpc1NlYXJjaEV4cGFuZGVkXCJcbiAgICAgIFtjbGFzcy5pbmFjdGl2ZVNlYXJjaF09XCIhaXNTZWFyY2hFeHBhbmRlZFwiXG4gICAgICBbZm9ybUdyb3VwXT1cInNlYXJjaEZvcm1cIlxuICAgID5cbiAgICAgIDxhcHAtY2EtaW5wdXRcbiAgICAgICAgY2xhc3M9XCJpbnB1dC1mb3JtLWhvbGRlclwiXG4gICAgICAgIGZvcm1Db250cm9sTmFtZT1cInNlYXJjaFwiXG4gICAgICAgIFtpbnB1dENvbmZpZ109XCJ1c2VyU2VhcmNoXCJcbiAgICAgID48L2FwcC1jYS1pbnB1dD5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxkaXZcbiAgICBjbGFzcz1cImZpbHRlci11c2VyLWhvbGRlciBkLWZsZXgganVzdGlmeS1jb250ZW50LXN0YXJ0IGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uXCJcbiAgPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ0Zvcj1cIlxuICAgICAgICBsZXQgZ3JvdXAgb2YgdXNlckdyb3VwO1xuICAgICAgICBsZXQgaW5keCA9IGluZGV4O1xuICAgICAgICB0cmFja0J5OiB0cmFja0J5SWRlbnRpdHlcbiAgICAgIFwiXG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cInVzZXItaXRlbXMtaG9sZGVyIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAoY2xpY2spPVwib25Hcm91cFN3aXRjaFN0YXRlKGdyb3VwKVwiXG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveC1ob2xkZXIgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBjbGFzcz1cImNoZWNrYm94LXRvb2x0aXBcIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBuZ2JUb29sdGlwXG4gICAgICAgICAgICBbbWFpbkNhVG9vbHRpcF09XCJcbiAgICAgICAgICAgICAgKGdyb3VwIHwgZ3JvdXBTZWxlY3Rpb25TdGF0ZSkuc29tZVNlbGVjdGVkXG4gICAgICAgICAgICAgICAgPyAnQ2xlYXIgc2VsZWN0ZWQnXG4gICAgICAgICAgICAgICAgOiAnQ2xlYXIgZ3JvdXAnXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgdG9vbHRpcEJhY2tncm91bmQ9XCIjQ0NDQ0NDXCJcbiAgICAgICAgICAgIHRvb2x0aXBDb2xvcj1cIiMyRjJGMkZcIlxuICAgICAgICAgICAgcG9zaXRpb249XCJib3R0b21cIlxuICAgICAgICAgICAgY3VzdG9tQ2xhc3M9XCJtdC0xXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgY2xhc3M9XCJ0YWJsZS1jaGVja2JveFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgIGlkPVwiY2hlY2tib3h7eyBpbmR4IH19XCJcbiAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiKGdyb3VwIHwgZ3JvdXBTZWxlY3Rpb25TdGF0ZSkuYWxsU2VsZWN0ZWRcIlxuICAgICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCIoZ3JvdXAgfCBncm91cFNlbGVjdGlvblN0YXRlKS5zb21lU2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwib25DaGVja2JveFNlbGVjdCgkZXZlbnQsIGdyb3VwKVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgIGNsYXNzPVwidGFibGUtY2hlY2tib3gtbGFiZWxcIlxuICAgICAgICAgICAgICBmb3I9XCJjaGVja2JveHt7IGluZHggfX1cIlxuICAgICAgICAgICAgPjwvbGFiZWw+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiaGlkZS11c2VyLWdyb3VwXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgc3ZnX3JvdGF0ZTogIWdyb3VwLmlzT3BlbixcbiAgICAgICAgICAgICAgcm90YXRlX2JhY2s6IGdyb3VwLmlzT3BlbixcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzdmctaWNvbiBbc3JjXT1cImdldFN2Z1BhdGgoJ2Fycm93RmlsdGVyJylcIj48L3N2Zy1pY29uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwidXNlci10aXRsZS10ZXh0IGNvdW50ZXItcGFkZC10aXRsZSBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGNhLWZvbnQtYm9sZFwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBncm91cC5sYWJlbC50b1VwcGVyQ2FzZSgpIH19XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJ1c2VyLWZpbHRlci1ib3ggZC1mbGV4IGZsZXgtY29sdW1uIGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIGNhLWZvbnQtYm9sZCBtcy0xXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IGdyb3VwLml0ZW1zIHwgZmlsdGVyU2VsZWN0ZWRJdGVtcyB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cInVzZXItZ3JvdXAtaG9sZGVyXCJcbiAgICAgICAgW2NsYXNzLnVzZXItZ3JvdXAtcmVkdWNlZC1ob2xkZXJdPVwidHlwZSA9PT0gJ3VzZXJGaWx0ZXInXCJcbiAgICAgICAgW0BjbG9zZUZvcm1dPVwiZ3JvdXAuaXNPcGVuXCJcbiAgICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgbGV0IGl0ZW0gb2YgZ3JvdXAuaXRlbXMgfCBzZWxlY3RlZFVzZXI7XG4gICAgICAgICAgICBsZXQgaW5keDIgPSBpbmRleDtcbiAgICAgICAgICAgIHRyYWNrQnk6IHRyYWNrQnlJZGVudGl0eVxuICAgICAgICAgIFwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IFtAaW5PdXRBbmltYXRpb25dPVwiJ2luJ1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgIHVzZXJUZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiB7IGl0ZW06IGl0ZW0sIGluZHg6IGluZHgsIGluZHgyOiBpbmR4MiB9XG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIoZ3JvdXAgfCBncm91cFNlbGVjdGlvblN0YXRlKS5zb21lU2VsZWN0ZWRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyLWZpbHRlciBib3JkZXItdGhyaXJkLW1hcmdpblwiPjwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICBsZXQgaXRlbSBvZiBncm91cC5pdGVtcyB8IHNlbGVjdGVkVXNlcjogdHJ1ZTtcbiAgICAgICAgICAgIGxldCBpbmR4MiA9IGluZGV4O1xuICAgICAgICAgICAgdHJhY2tCeTogdHJhY2tCeUlkZW50aXR5XG4gICAgICAgICAgXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgW0Bpbk91dEFuaW1hdGlvbl09XCInaW4nXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgdXNlclRlbXBsYXRlO1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IHsgaXRlbTogaXRlbSwgaW5keDogaW5keCwgaW5keDI6IGluZHgyIH1cbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJ1c2VyR3JvdXA/Lmxlbmd0aCAhPT0gc2VsZWN0ZWRVc2VyR3JvdXA/Lmxlbmd0aFwiPlxuICAgIDxkaXYgY2xhc3M9XCJib3JkZXItZmlsdGVyXCI+PC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZSAjdXNlclRlbXBsYXRlIGxldC1pdGVtPVwiaXRlbVwiIGxldC1pbmR4PVwiaW5keFwiIGxldC1pbmR4Mj1cImluZHgyXCI+XG4gIDxkaXZcbiAgICBjbGFzcz1cImQtZmxleFwiXG4gICAgW25nQ2xhc3NdPVwiXG4gICAgICBpdGVtLmlzU2VsZWN0ZWRcbiAgICAgICAgPyAnc2VsZWN0ZWQtdXNlci1ob2xkZXIganVzdGlmeS1jb250ZW50LXN0YXJ0IGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uJ1xuICAgICAgICA6ICd1c2VyLWZyYW1lLWhvbGRlciBhbGlnbi1pdGVtcy1jZW50ZXInXG4gICAgXCJcbiAgPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXRlbS5oaWRkZW5cIj5cbiAgICAgIDxkaXZcbiAgICAgICAgKGNsaWNrKT1cImhhbmRsZVNlbGVjdGVkVXNlcnMoaXRlbSwgaW5keCwgaW5keDIpXCJcbiAgICAgICAgY2xhc3M9XCJ1c2VyLW1haW4taG9sZGVyIHVzZXItZnJhbWUtaG9sZGVyIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlclwiXG4gICAgICAgIFtjbGFzcy51c2VyX3N2Z19pY29uX2hvbGRlcl09XCJ0eXBlICE9PSAndXNlckZpbHRlcidcIlxuICAgICAgPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidHlwZSA9PT0gJ3VzZXJGaWx0ZXInOyBlbHNlIHN2Z0ljb25UZW1wbGF0ZVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1c2VyLXByb2ZpbGUtaW1nIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXRlbS5hdmF0YXI7IGVsc2UgYXZhdGFyVGVtcGxhdGVcIj5cbiAgICAgICAgICAgICAgPGFwcC1jYS1wcm9maWxlLWltYWdlXG4gICAgICAgICAgICAgICAgW2luZHhdPVwiaW5keDJcIlxuICAgICAgICAgICAgICAgIFt0ZXh0U2hvcnROYW1lXT1cImdldEluaXRpYWxzKGl0ZW0ubmFtZSlcIlxuICAgICAgICAgICAgICAgIFtzaXplXT1cIidzbWFsbCdcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvYXBwLWNhLXByb2ZpbGUtaW1hZ2U+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNhdmF0YXJUZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwidXNlcl9hdmF0YXJcIlxuICAgICAgICAgICAgICAgIHN0eWxlLmJhY2tncm91bmQtaW1hZ2U9XCJ1cmwoJ3t7IGl0ZW0uYXZhdGFyIH19JylcIlxuICAgICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNzdmdJY29uVGVtcGxhdGU+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInR5cGUtaWNvbiBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICA8c3ZnLWljb24gc3JjPVwie3sgaXRlbS5pY29uIH19XCI+PC9zdmctaWNvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwiaXRlbS5pc1NlbGVjdGVkID8gJ3NlbGVjdGVkLXVzZXItZnJhbWUnIDogJ3VzZXItZnJhbWUnXCJcbiAgICAgICAgICBbY2xhc3MudXNlci1mcmFtZS1uby1pY29uXT1cInR5cGUgIT09ICd1c2VyRmlsdGVyJ1wiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0ZWQtbmFtZS10ZXh0IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgIDxzcGFuPiB7eyBpdGVtLm5hbWUgfX0gPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtPy5jb3VudDsgZWxzZSBub0NvdW50XCI+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICBjbGFzcz1cImNvdW50LWhvbGRlciBkLWlubGluZS1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIlxuICAgICAgICAgICAgICBbY2xhc3MuYWN0aXZlQ291bnRdPVwiaXRlbS5pc1NlbGVjdGVkXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgaXRlbS5jb3VudCB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNub0NvdW50PlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIm5vQ291bnRUZW1wbGF0ZTsgY29udGV4dDogeyBpdGVtOiBpdGVtIH1cIlxuICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbS5pc1NlbGVjdGVkXCI+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmVGcm9tU2VsZWN0ZWRVc2VyKGl0ZW0sIGluZHgsIGluZHgyKVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiaWNvbi1kZWxldGUgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmNvdW50ZXJNYXJnaW5dPVwiaXRlbS5jb3VudFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpY29uLWRlbGV0ZS1ob2xkXCI+PC9kaXY+XG4gICAgICAgICAgICAgIDxzdmctaWNvbiBbc3JjXT1cImdldFN2Z1BhdGgoJ3JlbW92ZVNlbGVjdGVkVmFsdWUnKVwiPjwvc3ZnLWljb24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuPCEtLSBpZiBubyBjb3VudCBmb3VuZCAtLT5cbjxuZy10ZW1wbGF0ZSAjbm9Db3VudFRlbXBsYXRlIGxldC1pdGVtPVwiaXRlbVwiPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWl0ZW0uY291bnQ7IGVsc2Ugbm9Db3VudGVyXCI+XG4gICAgPGRpdiBjbGFzcz1cInNlbGVjdGVkLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICA8c3ZnLWljb24gW3NyY109XCJnZXRTdmdQYXRoKCdpY29uQ29uZmlybScpXCI+PC9zdmctaWNvbj5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxuZy10ZW1wbGF0ZSAjbm9Db3VudGVyPlxuICAgIDxkaXYgY2xhc3M9XCJjb3VudGVyLWhvbGRlciBhY3RpdmVDb3VudGVyXCI+MDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
@@ -0,0 +1,237 @@
1
+ import { InputCommandsAction } from '../enums';
2
+ import { MethodsCalculationsHelper } from '../../../utils/helpers/methods-calculations.helper';
3
+ export class CaInputBaseHelpersComponent {
4
+ constructor() {
5
+ // Number of points
6
+ this.numberOfConsecutivelyPoints = 0;
7
+ this.numberOfPoints = 0;
8
+ this.oneSpaceOnlyCounter = 0;
9
+ // #endregion
10
+ }
11
+ // #region DisableConsecutivelySpaces
12
+ disableConsecutivelySpaces(event) {
13
+ const inputElement = this.input.nativeElement;
14
+ // Get cursor position
15
+ const cursorPosition = inputElement.selectionStart;
16
+ // If the cursor is in the middle of a word, allow spaces
17
+ if (cursorPosition > 0 &&
18
+ !/\s/.test(inputElement.value[cursorPosition - 1]) &&
19
+ !/\s/.test(inputElement.value[cursorPosition])) {
20
+ return;
21
+ }
22
+ // If the user is typing a space and the previous character is a space, prevent the default behavior
23
+ if (event.key === ' ' &&
24
+ /\s/.test(inputElement.value[cursorPosition - 1])) {
25
+ event.preventDefault();
26
+ }
27
+ // Save the cursor position for the next input event
28
+ this.lastCursorSpacePosition = cursorPosition;
29
+ }
30
+ // #endregion
31
+ // #region DisableConsecutivelyPoints
32
+ disableConsecutivelyPoints(event) {
33
+ if (/^[.]*$/.test(String.fromCharCode(event.charCode))) {
34
+ this.numberOfConsecutivelyPoints++;
35
+ if (this.numberOfConsecutivelyPoints > 1) {
36
+ event.preventDefault();
37
+ return false;
38
+ }
39
+ }
40
+ else {
41
+ this.numberOfConsecutivelyPoints = 0;
42
+ }
43
+ }
44
+ // #endregion
45
+ // #region DisableMultiplePoints
46
+ disableMultiplePoints(event) {
47
+ if (/^[.]*$/.test(String.fromCharCode(event.charCode))) {
48
+ if (!this.superControl.control?.value) {
49
+ event.preventDefault();
50
+ return false;
51
+ }
52
+ if (this.superControl.control?.value?.toString().includes('.')) {
53
+ event.preventDefault();
54
+ return false;
55
+ }
56
+ this.numberOfPoints++;
57
+ if (this.numberOfPoints > 1) {
58
+ event.preventDefault();
59
+ return false;
60
+ }
61
+ }
62
+ else {
63
+ this.numberOfPoints = 0;
64
+ }
65
+ }
66
+ // endregion
67
+ // #region EnableOneSpaceOnly
68
+ enableOneSpaceOnly(event) {
69
+ if (/^\s*$/.test(String.fromCharCode(event.charCode)) ||
70
+ this.superControl.control?.value?.includes(' ')) {
71
+ this.oneSpaceOnlyCounter++;
72
+ }
73
+ if (this.oneSpaceOnlyCounter > 1 &&
74
+ /^\s*$/.test(String.fromCharCode(event.charCode))) {
75
+ event.preventDefault();
76
+ return false;
77
+ }
78
+ return true;
79
+ }
80
+ // #endregion
81
+ // #region HandlePmIncrementDecrement
82
+ handlePmIncrementDecrement(action) {
83
+ const value = MethodsCalculationsHelper.convertThousanSepInNumber(this.superControl.control?.value);
84
+ switch (action) {
85
+ case InputCommandsAction.DECREMENT:
86
+ this.decrementPmValue(value);
87
+ break;
88
+ case InputCommandsAction.INCREMENT:
89
+ this.incrementPmValue(value);
90
+ break;
91
+ case InputCommandsAction.RESET:
92
+ this.resetPmValue();
93
+ break;
94
+ default:
95
+ break;
96
+ }
97
+ this.setInputCursorAtTheEnd(this.input.nativeElement);
98
+ }
99
+ // #endregion
100
+ // #region DecrementPmValue
101
+ decrementPmValue(value) {
102
+ if (value >= 10000 && value < 20000) {
103
+ this.superControl.control?.patchValue(MethodsCalculationsHelper.convertNumberInThousandSep(value - 1000));
104
+ }
105
+ else if (value >= 20001 && value < 50000) {
106
+ this.superControl.control?.patchValue(MethodsCalculationsHelper.convertNumberInThousandSep(value - 3000));
107
+ }
108
+ else if (value >= 50001 && value < 100000) {
109
+ this.superControl.control?.patchValue(MethodsCalculationsHelper.convertNumberInThousandSep(value - 5000));
110
+ }
111
+ else if (value >= 10000) {
112
+ this.superControl.control?.patchValue(MethodsCalculationsHelper.convertNumberInThousandSep(value - 10000));
113
+ }
114
+ else if (value >= 1000) {
115
+ this.superControl.control?.patchValue(MethodsCalculationsHelper.convertNumberInThousandSep(value - 500));
116
+ }
117
+ }
118
+ // #endregion
119
+ // #region ResetPmValue
120
+ resetPmValue() {
121
+ if (this._inputConfig?.defaultValue) {
122
+ this.superControl.control?.patchValue(this._inputConfig?.defaultValue);
123
+ }
124
+ }
125
+ // #endregion
126
+ // #region ResetPmValue
127
+ incrementPmValue(value) {
128
+ if (value > 10000 && value < 20000) {
129
+ this.superControl.control?.patchValue(MethodsCalculationsHelper.convertNumberInThousandSep(value + 1000));
130
+ }
131
+ else if (value >= 20001 && value < 50000) {
132
+ this.superControl.control?.patchValue(MethodsCalculationsHelper.convertNumberInThousandSep(value + 3000));
133
+ }
134
+ else if (value >= 50001 && value < 100000) {
135
+ this.superControl.control?.patchValue(MethodsCalculationsHelper.convertNumberInThousandSep(value + 5000));
136
+ }
137
+ else if (value >= 10000) {
138
+ this.superControl.control?.patchValue(MethodsCalculationsHelper.convertNumberInThousandSep(value + 10000));
139
+ }
140
+ else {
141
+ this.superControl.control?.patchValue(MethodsCalculationsHelper.convertNumberInThousandSep(value + 500));
142
+ }
143
+ }
144
+ // #endregion
145
+ // #region SetInputCursorAtTheEnd
146
+ setInputCursorAtTheEnd(input, time = 120) {
147
+ const selectionEnd = input.selectionEnd;
148
+ if (input.setSelectionRange) {
149
+ input.setSelectionRange(selectionEnd, selectionEnd);
150
+ }
151
+ setTimeout(() => {
152
+ input.focus();
153
+ }, time);
154
+ }
155
+ // #endregion
156
+ // #region HandleIncrementDecrement
157
+ handleIncrementDecrement(action) {
158
+ clearTimeout(this.inputCommandsTimeout);
159
+ switch (action) {
160
+ case InputCommandsAction.DECREMENT:
161
+ this.superControl.control?.patchValue((this.superControl.control?.value
162
+ ? parseInt(this.superControl.control?.value)
163
+ : 0) - 1);
164
+ break;
165
+ case InputCommandsAction.INCREMENT:
166
+ this.superControl.control?.patchValue((this.superControl.control?.value
167
+ ? parseInt(this.superControl.control?.value)
168
+ : 0) + 1);
169
+ break;
170
+ default:
171
+ break;
172
+ }
173
+ this.setInputCursorAtTheEnd(this.input.nativeElement);
174
+ }
175
+ // #endregion
176
+ // #region
177
+ handleMonths(action) {
178
+ clearTimeout(this.inputCommandsTimeout);
179
+ switch (action) {
180
+ case InputCommandsAction.MINUS:
181
+ this.decrementMonth();
182
+ break;
183
+ case InputCommandsAction.PLUS:
184
+ this.incrementMonth();
185
+ break;
186
+ default:
187
+ break;
188
+ }
189
+ if (parseInt(this.superControl.control?.value) < 1 ||
190
+ parseInt(this.superControl.control?.value) > 12) {
191
+ this.superControl.control?.setErrors({ invalid: true });
192
+ }
193
+ else {
194
+ this.superControl.control?.setErrors(null);
195
+ }
196
+ this.setInputCursorAtTheEnd(this.input.nativeElement);
197
+ }
198
+ // #endregion
199
+ // #region DecrementMonth
200
+ decrementMonth() {
201
+ if (parseInt(this.superControl.control?.value) === 1 ||
202
+ !this.superControl.control?.value) {
203
+ this.blurOnCommands();
204
+ return;
205
+ }
206
+ this.superControl.control?.patchValue((this.superControl.control?.value
207
+ ? parseInt(this.superControl.control?.value)
208
+ : 0) - 1);
209
+ }
210
+ // #endregion
211
+ // #region IncrementMonth
212
+ incrementMonth() {
213
+ if (parseInt(this.superControl.control?.value) === 12) {
214
+ this.blurOnCommands();
215
+ return;
216
+ }
217
+ this.superControl.control?.patchValue((this.superControl.control?.value
218
+ ? parseInt(this.superControl.control?.value)
219
+ : 0) + 1);
220
+ }
221
+ // #endregion
222
+ // #region
223
+ blurOnCommands() {
224
+ this.inputCommandsTimeout = setTimeout(() => {
225
+ this._inputConfig.commands.active = false;
226
+ // this.setIsVisibleCommands(false);
227
+ this._inputConfig.blackInput = false;
228
+ this.cdRef.detectChanges();
229
+ }, 200);
230
+ }
231
+ // #endregion
232
+ // #region CheckNameArray
233
+ checkNameArray(array, name) {
234
+ return array.includes(name);
235
+ }
236
+ }
237
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2EtaW5wdXQtYmFzZS1oZWxwcmVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2EtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvY2EtaW5wdXQvYmFzZS1jbGFzc2VzL2NhLWlucHV0LWJhc2UtaGVscHJlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsbUJBQW1CLEVBQW1CLE1BQU0sVUFBVSxDQUFDO0FBRWhFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBRS9GLE1BQU0sT0FBZ0IsMkJBQTJCO0lBQWpEO1FBU0UsbUJBQW1CO1FBQ1osZ0NBQTJCLEdBQVcsQ0FBQyxDQUFDO1FBQ3hDLG1CQUFjLEdBQVcsQ0FBQyxDQUFDO1FBQzNCLHdCQUFtQixHQUFXLENBQUMsQ0FBQztRQTZTdkMsYUFBYTtJQUNmLENBQUM7SUExU0MscUNBQXFDO0lBQzlCLDBCQUEwQixDQUFDLEtBQVU7UUFDMUMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFpQyxDQUFDO1FBRWxFLHNCQUFzQjtRQUN0QixNQUFNLGNBQWMsR0FBRyxZQUFZLENBQUMsY0FBd0IsQ0FBQztRQUU3RCx5REFBeUQ7UUFDekQsSUFDRSxjQUFjLEdBQUcsQ0FBQztZQUNsQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDbEQsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUMsRUFDOUMsQ0FBQztZQUNELE9BQU87UUFDVCxDQUFDO1FBRUQsb0dBQW9HO1FBQ3BHLElBQ0UsS0FBSyxDQUFDLEdBQUcsS0FBSyxHQUFHO1lBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxjQUFjLEdB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LE9BQU8sRUFBRSxLQUFLLENBQUM7WUFDNUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FDWCxDQUFDO0lBQ0osQ0FBQztJQUVELGFBQWE7SUFFYixVQUFVO0lBQ0gsY0FBYztRQUNuQixJQUFJLENBQUMsb0JBQW9CLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUMxQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVMsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1lBQzNDLG9DQUFvQztZQUNwQyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7WUFDckMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUM3QixDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDVixDQUFDO0lBQ0QsYUFBYTtJQUViLHlCQUF5QjtJQUNsQixjQUFjLENBQUMsS0FBZSxFQUFFLElBQVk7UUFDakQsT0FBTyxLQUFLLENBQUMsUUFBUSxDQUFrQixJQUFJLENBQUMsQ0FBQztJQUMvQyxDQUFDO0NBRUYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgRWxlbWVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmdDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgSW5wdXRDb21tYW5kc0FjdGlvbiwgSW5wdXRTdHJpbmdFbnVtIH0gZnJvbSAnLi4vZW51bXMnO1xuaW1wb3J0IHsgSUNhSW5wdXQgfSBmcm9tICcuLi9jb25maWcnO1xuaW1wb3J0IHsgTWV0aG9kc0NhbGN1bGF0aW9uc0hlbHBlciB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2hlbHBlcnMvbWV0aG9kcy1jYWxjdWxhdGlvbnMuaGVscGVyJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENhSW5wdXRCYXNlSGVscGVyc0NvbXBvbmVudCB7XG4gIGFic3RyYWN0IGlucHV0OiBFbGVtZW50UmVmO1xuXG4gIGFic3RyYWN0IGxhc3RDdXJzb3JTcGFjZVBvc2l0aW9uOiBudW1iZXI7XG4gIGFic3RyYWN0IHN1cGVyQ29udHJvbDogTmdDb250cm9sO1xuICBhYnN0cmFjdCBfaW5wdXRDb25maWc6IElDYUlucHV0O1xuXG4gIGFic3RyYWN0IGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZjtcblxuICAvLyBOdW1iZXIgb2YgcG9pbnRzXG4gIHB1YmxpYyBudW1iZXJPZkNvbnNlY3V0aXZlbHlQb2ludHM6IG51bWJlciA9IDA7XG4gIHB1YmxpYyBudW1iZXJPZlBvaW50czogbnVtYmVyID0gMDtcbiAgcHVibGljIG9uZVNwYWNlT25seUNvdW50ZXI6IG51bWJlciA9IDA7XG5cbiAgcHVibGljIGlucHV0Q29tbWFuZHNUaW1lb3V0ITogTm9kZUpTLlRpbWVvdXQgfCBudW1iZXI7XG5cbiAgLy8gI3JlZ2lvbiBEaXNhYmxlQ29uc2VjdXRpdmVseVNwYWNlc1xuICBwdWJsaWMgZGlzYWJsZUNvbnNlY3V0aXZlbHlTcGFjZXMoZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IGlucHV0RWxlbWVudCA9IHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuXG4gICAgLy8gR2V0IGN1cnNvciBwb3NpdGlvblxuICAgIGNvbnN0IGN1cnNvclBvc2l0aW9uID0gaW5wdXRFbGVtZW50LnNlbGVjdGlvblN0YXJ0IGFzIG51bWJlcjtcblxuICAgIC8vIElmIHRoZSBjdXJzb3IgaXMgaW4gdGhlIG1pZGRsZSBvZiBhIHdvcmQsIGFsbG93IHNwYWNlc1xuICAgIGlmIChcbiAgICAgIGN1cnNvclBvc2l0aW9uID4gMCAmJlxuICAgICAgIS9cXHMvLnRlc3QoaW5wdXRFbGVtZW50LnZhbHVlW2N1cnNvclBvc2l0aW9uIC0gMV0pICYmXG4gICAgICAhL1xccy8udGVzdChpbnB1dEVsZW1lbnQudmFsdWVbY3Vyc29yUG9zaXRpb25dKVxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIElmIHRoZSB1c2VyIGlzIHR5cGluZyBhIHNwYWNlIGFuZCB0aGUgcHJldmlvdXMgY2hhcmFjdGVyIGlzIGEgc3BhY2UsIHByZXZlbnQgdGhlIGRlZmF1bHQgYmVoYXZpb3JcbiAgICBpZiAoXG4gICAgICBldmVudC5rZXkgPT09ICcgJyAmJlxuICAgICAgL1xccy8udGVzdChpbnB1dEVsZW1lbnQudmFsdWVbY3Vyc29yUG9zaXRpb24gLSAxXSlcbiAgICApIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgLy8gU2F2ZSB0aGUgY3Vyc29yIHBvc2l0aW9uIGZvciB0aGUgbmV4dCBpbnB1dCBldmVudFxuICAgIHRoaXMubGFzdEN1cnNvclNwYWNlUG9zaXRpb24gPSBjdXJzb3JQb3NpdGlvbjtcbiAgfVxuXG4gIC8vICNlbmRyZWdpb25cblxuICAvLyAjcmVnaW9uIERpc2FibGVDb25zZWN1dGl2ZWx5UG9pbnRzXG5cbiAgcHVibGljIGRpc2FibGVDb25zZWN1dGl2ZWx5UG9pbnRzKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB8IGJvb2xlYW4ge1xuICAgIGlmICgvXlsuXSokLy50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoZXZlbnQuY2hhckNvZGUpKSkge1xuICAgICAgdGhpcy5udW1iZXJPZkNvbnNlY3V0aXZlbHlQb2ludHMrKztcbiAgICAgIGlmICh0aGlzLm51bWJlck9mQ29uc2VjdXRpdmVseVBvaW50cyA+IDEpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm51bWJlck9mQ29uc2VjdXRpdmVseVBvaW50cyA9IDA7XG4gICAgfVxuICB9XG5cbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gRGlzYWJsZU11bHRpcGxlUG9pbnRzXG5cbiAgcHVibGljIGRpc2FibGVNdWx0aXBsZVBvaW50cyhldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQgfCBib29sZWFuIHtcbiAgICBpZiAoL15bLl0qJC8udGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGV2ZW50LmNoYXJDb2RlKSkpIHtcbiAgICAgIGlmICghdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8udmFsdWUpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8udmFsdWU/LnRvU3RyaW5nKCkuaW5jbHVkZXMoJy4nKSkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHRoaXMubnVtYmVyT2ZQb2ludHMrKztcbiAgICAgIGlmICh0aGlzLm51bWJlck9mUG9pbnRzID4gMSkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubnVtYmVyT2ZQb2ludHMgPSAwO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gRW5hYmxlT25lU3BhY2VPbmx5XG4gIHB1YmxpYyBlbmFibGVPbmVTcGFjZU9ubHkoZXZlbnQ6IGFueSkge1xuICAgIGlmIChcbiAgICAgIC9eXFxzKiQvLnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShldmVudC5jaGFyQ29kZSkpIHx8XG4gICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZT8uaW5jbHVkZXMoJyAnKVxuICAgICkge1xuICAgICAgdGhpcy5vbmVTcGFjZU9ubHlDb3VudGVyKys7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdGhpcy5vbmVTcGFjZU9ubHlDb3VudGVyID4gMSAmJlxuICAgICAgL15cXHMqJC8udGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGV2ZW50LmNoYXJDb2RlKSlcbiAgICApIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiBIYW5kbGVQbUluY3JlbWVudERlY3JlbWVudFxuICBwdWJsaWMgaGFuZGxlUG1JbmNyZW1lbnREZWNyZW1lbnQoYWN0aW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCB2YWx1ZSA9IE1ldGhvZHNDYWxjdWxhdGlvbnNIZWxwZXIuY29udmVydFRob3VzYW5TZXBJbk51bWJlcihcbiAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlXG4gICAgKTtcblxuICAgIHN3aXRjaCAoYWN0aW9uKSB7XG4gICAgICBjYXNlIElucHV0Q29tbWFuZHNBY3Rpb24uREVDUkVNRU5UOlxuICAgICAgICB0aGlzLmRlY3JlbWVudFBtVmFsdWUodmFsdWUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgSW5wdXRDb21tYW5kc0FjdGlvbi5JTkNSRU1FTlQ6XG4gICAgICAgIHRoaXMuaW5jcmVtZW50UG1WYWx1ZSh2YWx1ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBJbnB1dENvbW1hbmRzQWN0aW9uLlJFU0VUOlxuICAgICAgICB0aGlzLnJlc2V0UG1WYWx1ZSgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHRoaXMuc2V0SW5wdXRDdXJzb3JBdFRoZUVuZCh0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQpO1xuICB9XG5cbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gRGVjcmVtZW50UG1WYWx1ZVxuICBwcml2YXRlIGRlY3JlbWVudFBtVmFsdWUodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICh2YWx1ZSA+PSAxMDAwMCAmJiB2YWx1ZSA8IDIwMDAwKSB7XG4gICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5wYXRjaFZhbHVlKFxuICAgICAgICBNZXRob2RzQ2FsY3VsYXRpb25zSGVscGVyLmNvbnZlcnROdW1iZXJJblRob3VzYW5kU2VwKHZhbHVlIC0gMTAwMClcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSA+PSAyMDAwMSAmJiB2YWx1ZSA8IDUwMDAwKSB7XG4gICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5wYXRjaFZhbHVlKFxuICAgICAgICBNZXRob2RzQ2FsY3VsYXRpb25zSGVscGVyLmNvbnZlcnROdW1iZXJJblRob3VzYW5kU2VwKHZhbHVlIC0gMzAwMClcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSA+PSA1MDAwMSAmJiB2YWx1ZSA8IDEwMDAwMCkge1xuICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8ucGF0Y2hWYWx1ZShcbiAgICAgICAgTWV0aG9kc0NhbGN1bGF0aW9uc0hlbHBlci5jb252ZXJ0TnVtYmVySW5UaG91c2FuZFNlcCh2YWx1ZSAtIDUwMDApXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgPj0gMTAwMDApIHtcbiAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnBhdGNoVmFsdWUoXG4gICAgICAgIE1ldGhvZHNDYWxjdWxhdGlvbnNIZWxwZXIuY29udmVydE51bWJlckluVGhvdXNhbmRTZXAodmFsdWUgLSAxMDAwMClcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSA+PSAxMDAwKSB7XG4gICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5wYXRjaFZhbHVlKFxuICAgICAgICBNZXRob2RzQ2FsY3VsYXRpb25zSGVscGVyLmNvbnZlcnROdW1iZXJJblRob3VzYW5kU2VwKHZhbHVlIC0gNTAwKVxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gUmVzZXRQbVZhbHVlXG4gIHByaXZhdGUgcmVzZXRQbVZhbHVlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9pbnB1dENvbmZpZz8uZGVmYXVsdFZhbHVlKSB7XG4gICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5wYXRjaFZhbHVlKHRoaXMuX2lucHV0Q29uZmlnPy5kZWZhdWx0VmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIC8vICNlbmRyZWdpb25cblxuICAvLyAjcmVnaW9uIFJlc2V0UG1WYWx1ZVxuICBwcml2YXRlIGluY3JlbWVudFBtVmFsdWUodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICh2YWx1ZSA+IDEwMDAwICYmIHZhbHVlIDwgMjAwMDApIHtcbiAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnBhdGNoVmFsdWUoXG4gICAgICAgIE1ldGhvZHNDYWxjdWxhdGlvbnNIZWxwZXIuY29udmVydE51bWJlckluVGhvdXNhbmRTZXAodmFsdWUgKyAxMDAwKVxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlID49IDIwMDAxICYmIHZhbHVlIDwgNTAwMDApIHtcbiAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnBhdGNoVmFsdWUoXG4gICAgICAgIE1ldGhvZHNDYWxjdWxhdGlvbnNIZWxwZXIuY29udmVydE51bWJlckluVGhvdXNhbmRTZXAodmFsdWUgKyAzMDAwKVxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlID49IDUwMDAxICYmIHZhbHVlIDwgMTAwMDAwKSB7XG4gICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5wYXRjaFZhbHVlKFxuICAgICAgICBNZXRob2RzQ2FsY3VsYXRpb25zSGVscGVyLmNvbnZlcnROdW1iZXJJblRob3VzYW5kU2VwKHZhbHVlICsgNTAwMClcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSA+PSAxMDAwMCkge1xuICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8ucGF0Y2hWYWx1ZShcbiAgICAgICAgTWV0aG9kc0NhbGN1bGF0aW9uc0hlbHBlci5jb252ZXJ0TnVtYmVySW5UaG91c2FuZFNlcCh2YWx1ZSArIDEwMDAwKVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8ucGF0Y2hWYWx1ZShcbiAgICAgICAgTWV0aG9kc0NhbGN1bGF0aW9uc0hlbHBlci5jb252ZXJ0TnVtYmVySW5UaG91c2FuZFNlcCh2YWx1ZSArIDUwMClcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIC8vICNlbmRyZWdpb25cblxuICAvLyAjcmVnaW9uIFNldElucHV0Q3Vyc29yQXRUaGVFbmRcbiAgcHVibGljIHNldElucHV0Q3Vyc29yQXRUaGVFbmQoaW5wdXQ6IGFueSwgdGltZTogbnVtYmVyID0gMTIwKTogdm9pZCB7XG4gICAgY29uc3Qgc2VsZWN0aW9uRW5kID0gaW5wdXQuc2VsZWN0aW9uRW5kO1xuICAgIGlmIChpbnB1dC5zZXRTZWxlY3Rpb25SYW5nZSkge1xuICAgICAgaW5wdXQuc2V0U2VsZWN0aW9uUmFuZ2Uoc2VsZWN0aW9uRW5kLCBzZWxlY3Rpb25FbmQpO1xuICAgIH1cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlucHV0LmZvY3VzKCk7XG4gICAgfSwgdGltZSk7XG4gIH1cbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gSGFuZGxlSW5jcmVtZW50RGVjcmVtZW50XG4gIHB1YmxpYyBoYW5kbGVJbmNyZW1lbnREZWNyZW1lbnQoYWN0aW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5pbnB1dENvbW1hbmRzVGltZW91dCk7XG4gICAgc3dpdGNoIChhY3Rpb24pIHtcbiAgICAgIGNhc2UgSW5wdXRDb21tYW5kc0FjdGlvbi5ERUNSRU1FTlQ6XG4gICAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnBhdGNoVmFsdWUoXG4gICAgICAgICAgKHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlXG4gICAgICAgICAgICA/IHBhcnNlSW50KHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlKVxuICAgICAgICAgICAgOiAwKSAtIDFcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIElucHV0Q29tbWFuZHNBY3Rpb24uSU5DUkVNRU5UOlxuICAgICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5wYXRjaFZhbHVlKFxuICAgICAgICAgICh0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZVxuICAgICAgICAgICAgPyBwYXJzZUludCh0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZSlcbiAgICAgICAgICAgIDogMCkgKyAxXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRJbnB1dEN1cnNvckF0VGhlRW5kKHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudCk7XG4gIH1cbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb25cblxuICBwdWJsaWMgaGFuZGxlTW9udGhzKGFjdGlvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuaW5wdXRDb21tYW5kc1RpbWVvdXQpO1xuXG4gICAgc3dpdGNoIChhY3Rpb24pIHtcbiAgICAgIGNhc2UgSW5wdXRDb21tYW5kc0FjdGlvbi5NSU5VUzpcbiAgICAgICAgdGhpcy5kZWNyZW1lbnRNb250aCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgSW5wdXRDb21tYW5kc0FjdGlvbi5QTFVTOlxuICAgICAgICB0aGlzLmluY3JlbWVudE1vbnRoKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgcGFyc2VJbnQodGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8udmFsdWUpIDwgMSB8fFxuICAgICAgcGFyc2VJbnQodGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8udmFsdWUpID4gMTJcbiAgICApIHtcbiAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnNldEVycm9ycyh7IGludmFsaWQ6IHRydWUgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnNldEVycm9ycyhudWxsKTtcbiAgICB9XG5cbiAgICB0aGlzLnNldElucHV0Q3Vyc29yQXRUaGVFbmQodGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50KTtcbiAgfVxuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiBEZWNyZW1lbnRNb250aFxuICBwcml2YXRlIGRlY3JlbWVudE1vbnRoKCk6IHZvaWQge1xuICAgIGlmIChcbiAgICAgIHBhcnNlSW50KHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlKSA9PT0gMSB8fFxuICAgICAgIXRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlXG4gICAgKSB7XG4gICAgICB0aGlzLmJsdXJPbkNvbW1hbmRzKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8ucGF0Y2hWYWx1ZShcbiAgICAgICh0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZVxuICAgICAgICA/IHBhcnNlSW50KHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlKVxuICAgICAgICA6IDApIC0gMVxuICAgICk7XG4gIH1cblxuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiBJbmNyZW1lbnRNb250aFxuICBwcml2YXRlIGluY3JlbWVudE1vbnRoKCk6IHZvaWQge1xuICAgIGlmIChwYXJzZUludCh0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZSkgPT09IDEyKSB7XG4gICAgICB0aGlzLmJsdXJPbkNvbW1hbmRzKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8ucGF0Y2hWYWx1ZShcbiAgICAgICh0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZVxuICAgICAgICA/IHBhcnNlSW50KHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlKVxuICAgICAgICA6IDApICsgMVxuICAgICk7XG4gIH1cblxuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvblxuICBwdWJsaWMgYmx1ck9uQ29tbWFuZHMoKTogdm9pZCB7XG4gICAgdGhpcy5pbnB1dENvbW1hbmRzVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5faW5wdXRDb25maWcuY29tbWFuZHMhLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgLy8gdGhpcy5zZXRJc1Zpc2libGVDb21tYW5kcyhmYWxzZSk7XG4gICAgICB0aGlzLl9pbnB1dENvbmZpZy5ibGFja0lucHV0ID0gZmFsc2U7XG4gICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9LCAyMDApO1xuICB9XG4gIC8vICNlbmRyZWdpb25cblxuICAvLyAjcmVnaW9uIENoZWNrTmFtZUFycmF5XG4gIHB1YmxpYyBjaGVja05hbWVBcnJheShhcnJheTogc3RyaW5nW10sIG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBhcnJheS5pbmNsdWRlcyg8SW5wdXRTdHJpbmdFbnVtPm5hbWUpO1xuICB9XG4gIC8vICNlbmRyZWdpb25cbn1cbiJdfQ==