@fundamental-ngx/platform 0.47.0-rc.21 → 0.47.0-rc.23

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 (73) hide show
  1. package/action-button-group/action-button-group.component.d.ts +6 -0
  2. package/button/button.component.d.ts +4 -0
  3. package/esm2022/action-button-group/action-button-group.component.mjs +11 -2
  4. package/esm2022/button/button.component.mjs +6 -1
  5. package/esm2022/feed-input/feed-input.component.mjs +10 -2
  6. package/esm2022/form/datetime-picker/datetime-picker.component.mjs +3 -3
  7. package/esm2022/form/input/input.component.mjs +2 -2
  8. package/esm2022/form/multi-combobox/multi-combobox/multi-combobox.component.mjs +2 -2
  9. package/esm2022/form/multi-input/multi-input.component.mjs +2 -2
  10. package/esm2022/form/text-area/text-area.component.mjs +2 -2
  11. package/esm2022/info-label/info-label.component.mjs +8 -2
  12. package/esm2022/link/link.component.mjs +7 -1
  13. package/esm2022/list/object-list-item/object-list-item-row.component.mjs +7 -7
  14. package/esm2022/menu/menu-item.component.mjs +4 -1
  15. package/esm2022/menu/menu.component.mjs +7 -2
  16. package/esm2022/menu-button/menu-button.component.mjs +7 -1
  17. package/esm2022/object-attribute/index.mjs +4 -3
  18. package/esm2022/object-marker/object-marker.component.mjs +11 -2
  19. package/esm2022/object-status/object-status.component.mjs +9 -3
  20. package/esm2022/table/components/table-cell-header-popover/table-cell-header-popover.component.mjs +2 -2
  21. package/esm2022/table/components/table-p13-dialog/filtering/filter-rule.component.mjs +2 -2
  22. package/esm2022/upload-collection/dialogs/new-folder/new-folder.component.mjs +2 -2
  23. package/esm2022/upload-collection/upload-collection/upload-collection.component.mjs +2 -2
  24. package/esm2022/value-help-dialog/components/define-tab/define-tab.component.mjs +2 -2
  25. package/esm2022/value-help-dialog/value-help-dialog/value-help-dialog.component.mjs +2 -2
  26. package/feed-input/feed-input.component.d.ts +5 -0
  27. package/fesm2022/fundamental-ngx-platform-action-button-group.mjs +10 -1
  28. package/fesm2022/fundamental-ngx-platform-action-button-group.mjs.map +1 -1
  29. package/fesm2022/fundamental-ngx-platform-button.mjs +5 -0
  30. package/fesm2022/fundamental-ngx-platform-button.mjs.map +1 -1
  31. package/fesm2022/fundamental-ngx-platform-feed-input.mjs +9 -1
  32. package/fesm2022/fundamental-ngx-platform-feed-input.mjs.map +1 -1
  33. package/fesm2022/fundamental-ngx-platform-form.mjs +6 -6
  34. package/fesm2022/fundamental-ngx-platform-form.mjs.map +1 -1
  35. package/fesm2022/fundamental-ngx-platform-info-label.mjs +7 -1
  36. package/fesm2022/fundamental-ngx-platform-info-label.mjs.map +1 -1
  37. package/fesm2022/fundamental-ngx-platform-link.mjs +6 -0
  38. package/fesm2022/fundamental-ngx-platform-link.mjs.map +1 -1
  39. package/fesm2022/fundamental-ngx-platform-list.mjs +6 -6
  40. package/fesm2022/fundamental-ngx-platform-list.mjs.map +1 -1
  41. package/fesm2022/fundamental-ngx-platform-menu-button.mjs +6 -0
  42. package/fesm2022/fundamental-ngx-platform-menu-button.mjs.map +1 -1
  43. package/fesm2022/fundamental-ngx-platform-menu.mjs +9 -1
  44. package/fesm2022/fundamental-ngx-platform-menu.mjs.map +1 -1
  45. package/fesm2022/fundamental-ngx-platform-object-attribute.mjs +1 -60
  46. package/fesm2022/fundamental-ngx-platform-object-attribute.mjs.map +1 -1
  47. package/fesm2022/fundamental-ngx-platform-object-marker.mjs +10 -1
  48. package/fesm2022/fundamental-ngx-platform-object-marker.mjs.map +1 -1
  49. package/fesm2022/fundamental-ngx-platform-object-status.mjs +8 -2
  50. package/fesm2022/fundamental-ngx-platform-object-status.mjs.map +1 -1
  51. package/fesm2022/fundamental-ngx-platform-table.mjs +2 -2
  52. package/fesm2022/fundamental-ngx-platform-table.mjs.map +1 -1
  53. package/fesm2022/fundamental-ngx-platform-upload-collection.mjs +2 -2
  54. package/fesm2022/fundamental-ngx-platform-upload-collection.mjs.map +1 -1
  55. package/fesm2022/fundamental-ngx-platform-value-help-dialog.mjs +2 -2
  56. package/fesm2022/fundamental-ngx-platform-value-help-dialog.mjs.map +1 -1
  57. package/fundamental-ngx-platform-v0.47.0-rc.23.tgz +0 -0
  58. package/info-label/info-label.component.d.ts +5 -0
  59. package/link/link.component.d.ts +4 -0
  60. package/menu/menu-item.component.d.ts +3 -0
  61. package/menu/menu.component.d.ts +4 -0
  62. package/menu-button/menu-button.component.d.ts +4 -0
  63. package/object-attribute/index.d.ts +3 -2
  64. package/object-marker/object-marker.component.d.ts +6 -0
  65. package/object-status/object-status.component.d.ts +6 -0
  66. package/package.json +4 -4
  67. package/schematics/ng-add/index.js +1 -1
  68. package/esm2022/object-attribute/object-attribute.component.mjs +0 -45
  69. package/esm2022/object-attribute/object-attribute.module.mjs +0 -16
  70. package/fundamental-ngx-platform-v0.47.0-rc.21.tgz +0 -0
  71. package/object-attribute/README.md +0 -25
  72. package/object-attribute/object-attribute.component.d.ts +0 -26
  73. package/object-attribute/object-attribute.module.d.ts +0 -7
@@ -129,7 +129,7 @@ export class DefineTabComponent extends VhdBaseTab {
129
129
  }
130
130
  }
131
131
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: DefineTabComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
132
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.7", type: DefineTabComponent, isStandalone: true, selector: "fdp-define-tab", inputs: { titleId: "titleId", selectedId: "selectedId", conditions: "conditions", strategyLabels: "strategyLabels" }, outputs: { includeChange: "includeChange", excludeChange: "excludeChange", conditionChange: "conditionChange" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<h5 [id]=\"titleId\" role=\"heading\" aria-level=\"5\" fd-title class=\"define-condition-title\">\n {{ 'platformVHD.defineConditionTitle' | fdTranslate }}\n</h5>\n<ng-container *ngFor=\"let item of _conditions; trackBy: _trackByKeyAndType; index as i\">\n <fd-layout-grid class=\"condition-row\" [noGap]=\"true\">\n <div fdLayoutGridRow>\n <div [fdLayoutGridCol]=\"5\">\n <label id=\"CONDITIONPANEL_OPERATOR_LABEL\" fd-form-label class=\"fdp-value-help-dialog__hidden_label\">\n CONDITIONPANEL_OPERATOR_LABEL\n </label>\n <label [id]=\"selectedId\" fd-form-label class=\"fdp-value-help-dialog__hidden_label\">\n {{\n 'platformVHD.defineConditionSelectedValueHiddenA11yLabel'\n | fdTranslate : { value: item.strategy }\n }}</label\n >\n <fd-select\n class=\"vhd-condition-filters\"\n fdLayoutGridCol\n colGrow\n [class.fd-select-custom-class]=\"false\"\n #sttr\n [controlTemplate]=\"customSelectTemplate\"\n [name]=\"uid + '-' + type + '-strategy-' + item.id\"\n [(ngModel)]=\"item.strategy\"\n (valueChange)=\"_filterChanged()\"\n role=\"combobox\"\n aria-roledescription=\"select\"\n aria-haspopup=\"listbox\"\n [ariaLabelledBy]=\"titleId + ' ' + 'CONDITIONPANEL_OPERATOR_LABEL' + ' ' + selectedId\"\n >\n <ng-container *ngIf=\"_includeStrategy.length\">\n <li fd-list-group-header>\n {{ 'platformVHD.defineConditionConditionsGroupHeaderInclude' | fdTranslate }}\n </li>\n <li fd-option *ngFor=\"let strategy of _includeStrategy\" [value]=\"strategy.key\">\n <ng-container\n [ngTemplateOutlet]=\"conditionStrategyOption\"\n [ngTemplateOutletContext]=\"{ type: _defineTypes.include, strategy: strategy }\"\n ></ng-container>\n </li>\n </ng-container>\n <ng-container *ngIf=\"_excludeStrategy.length\">\n <li fd-list-group-header>\n {{ 'platformVHD.defineConditionConditionsGroupHeaderExclude' | fdTranslate }}\n </li>\n <li fd-option *ngFor=\"let strategy of _excludeStrategy\" [value]=\"strategy.key\">\n <ng-container\n [ngTemplateOutlet]=\"conditionStrategyOption\"\n [ngTemplateOutletContext]=\"{ type: _defineTypes.exclude, strategy: strategy }\"\n ></ng-container>\n </li>\n </ng-container>\n </fd-select>\n </div>\n <div\n fdLayoutGridCol\n colGrow\n *ngIf=\"\n item.strategy !== _strategyIncludeValues.empty && item.strategy !== _strategyExcludeValues.not_empty\n \"\n >\n <div fdLayoutGridRow>\n <ng-container *ngIf=\"item.strategy === _strategyIncludeValues.between; else valueIncludeTemplate\">\n <div fdLayoutGridCol colGrow>\n <fd-form-input-message-group [triggers]=\"['focusin', 'focusout']\">\n <input\n fd-form-control\n fdp-condition-count-message\n [maxCharacters]=\"_rules.maxCharactersHintCount\"\n type=\"text\"\n [placeholder]=\"'platformVHD.defineConditionFromPlaceholder' | fdTranslate\"\n placeholder=\"from\"\n required\n [state]=\"fromModel.invalid ? 'error' : null\"\n [name]=\"uid + '-' + type + '-from-' + item.id\"\n (blur)=\"_validateConditionValue(item, [!!fromModel.valid, !!toModel.valid])\"\n #fromModel=\"ngModel\"\n [(ngModel)]=\"item.value\"\n />\n <ng-container\n [ngTemplateOutlet]=\"countError\"\n [ngTemplateOutletContext]=\"{ $implicit: item.value && item.value.length }\"\n ></ng-container>\n </fd-form-input-message-group>\n </div>\n <div fdLayoutGridCol colGrow>\n <fd-form-input-message-group [triggers]=\"['focusin', 'focusout']\">\n <input\n fd-form-control\n fdp-condition-count-message\n [maxCharacters]=\"_rules.maxCharactersHintCount\"\n type=\"text\"\n [placeholder]=\"'platformVHD.defineConditionToPlaceholder' | fdTranslate\"\n required\n [state]=\"toModel.invalid ? 'error' : null\"\n [name]=\"uid + '-' + type + '-to-' + item.id\"\n (blur)=\"_validateConditionValue(item, [!!fromModel.valid, !!toModel.valid])\"\n #toModel=\"ngModel\"\n [(ngModel)]=\"item.valueTo\"\n />\n <ng-container\n [ngTemplateOutlet]=\"countError\"\n [ngTemplateOutletContext]=\"{ $implicit: item.value && item.value.length }\"\n ></ng-container>\n </fd-form-input-message-group>\n </div>\n </ng-container>\n <ng-template #valueIncludeTemplate>\n <div fdLayoutGridCol colGrow>\n <fd-form-input-message-group>\n <input\n fd-form-control\n fdp-condition-count-message\n [maxCharacters]=\"_rules.maxCharactersHintCount\"\n type=\"text\"\n [placeholder]=\"'platformVHD.defineConditionValuePlaceholder' | fdTranslate\"\n [state]=\"valueModel.invalid ? 'error' : null\"\n [name]=\"uid + '-' + type + '-value-' + item.id\"\n (blur)=\"_validateConditionValue(item, !!valueModel.valid)\"\n #valueModel=\"ngModel\"\n [(ngModel)]=\"item.value\"\n />\n <ng-container *ngIf=\"valueModel.invalid\">\n <ng-container\n [ngTemplateOutlet]=\"countError\"\n [ngTemplateOutletContext]=\"{ $implicit: item.value && item.value.length }\"\n ></ng-container>\n </ng-container>\n </fd-form-input-message-group>\n </div>\n </ng-template>\n </div>\n </div>\n <div class=\"action-col\" fdLayoutGridCol colGrow>\n <button\n fd-button\n [ariaLabel]=\"'platformVHD.defineConditionRemoveConditionButtonTitle' | fdTranslate\"\n fdType=\"transparent\"\n glyph=\"decline\"\n [title]=\"'platformVHD.defineConditionRemoveConditionButtonTitle' | fdTranslate\"\n (click)=\"removeCondition(i)\"\n ></button>\n </div>\n </div>\n </fd-layout-grid>\n</ng-container>\n\n<fd-layout-grid class=\"condition-row new-condition-row\" [noGap]=\"true\">\n <div fdLayoutGridRow>\n <div fdLayoutGridCol colGrow>&nbsp;</div>\n <div fdLayoutGridCol class=\"action-col\">\n <button\n fd-button\n [attr.aria-label]=\"'platformVHD.defineConditionAddConditionButtonTitle' | fdTranslate\"\n [label]=\"'platformVHD.defineConditionAddConditionButtonLabel' | fdTranslate\"\n [title]=\"'platformVHD.defineConditionAddConditionButtonTitle' | fdTranslate\"\n (click)=\"addEmptyCondition()\"\n ></button>\n </div>\n </div>\n</fd-layout-grid>\n\n<ng-template #conditionStrategyOption let-type=\"type\" let-strategy=\"strategy\">\n <ng-container [ngSwitch]=\"strategy.key\">\n <ng-container *ngSwitchCase=\"'contains'\">\n {{ 'platformVHD.defineConditionConditionStrategyLabelContains' | fdTranslate }}\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'equalTo'\">\n {{ 'platformVHD.defineConditionConditionStrategyLabelEqualTo' | fdTranslate }}\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'between'\">\n {{ 'platformVHD.defineConditionConditionStrategyLabelBetween' | fdTranslate }}\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'startsWith'\">\n {{ 'platformVHD.defineConditionConditionStrategyLabelStartsWith' | fdTranslate }}\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'endsWith'\">\n {{ 'platformVHD.defineConditionConditionStrategyLabelEndsWith' | fdTranslate }}\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'lessThan'\">\n {{ 'platformVHD.defineConditionConditionStrategyLabelLessThan' | fdTranslate }}\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'lessThanEqual'\">\n {{ 'platformVHD.defineConditionConditionStrategyLabelLessThanEqual' | fdTranslate }}\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'greaterThan'\">\n {{ 'platformVHD.defineConditionConditionStrategyLabelGreaterThan' | fdTranslate }}\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'greaterThanEqual'\">\n {{ 'platformVHD.defineConditionConditionStrategyLabelGreaterThanEqual' | fdTranslate }}\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'empty'\">\n {{ 'platformVHD.defineConditionConditionStrategyLabelEmpty' | fdTranslate }}\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'not_equalTo'\">\n {{ 'platformVHD.defineConditionConditionStrategyLabelNotEqualTo' | fdTranslate }}\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'not_empty'\">\n {{ 'platformVHD.defineConditionConditionStrategyLabelNotEmpty' | fdTranslate }}\n </ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template #countError let-count>\n <fd-form-message type=\"error\" *ngIf=\"count && count > 7\">\n {{ 'platformVHD.defineConditionMaxCountError' | fdTranslate : { count: 7 } }}\n </fd-form-message>\n</ng-template>\n\n<ng-template #customSelectTemplate let-textValue>\n {{ textValue }}\n</ng-template>\n", styles: [".fdp-value-help-dialog .fd-row{min-width:100%!important;margin:0!important}.fdp-value-help-dialog .condition-row>.fd-col{padding:0 .5rem .5rem 0}.fdp-value-help-dialog .condition-row>.fd-col:last-child{padding-right:0}.fdp-value-help-dialog .condition-row .fd-input{margin:0}.fdp-value-help-dialog fdp-define-tab{height:100%;overflow:auto}.fdp-value-help-dialog fdp-define-tab .define-condition-title{padding:.625rem 0 0}.fdp-value-help-dialog fdp-define-tab .fd-container--no-gap{margin:0!important}.fdp-value-help-dialog .vhd-condition-filters fd-popover{width:100%}.fdp-value-help-dialog .condition-row{align-items:center}.fdp-value-help-dialog .condition-row .main-col{min-width:auto;flex:1 1 auto}.fdp-value-help-dialog .condition-row .action-col{min-width:auto;flex:0 0 auto}.fdp-value-help-dialog .condition-row .fd-input{margin-top:0}.fdp-value-help-dialog .condition-row.new-condition-row{padding-top:.5rem}.fdp-value-help-dialog .condition-row.new-condition-row .fd-button{margin-right:2.5rem}\n"], dependencies: [{ kind: "component", type: TitleComponent, selector: "h1[fd-title], h2[fd-title], h3[fd-title], h4[fd-title], h5[fd-title], h6[fd-title]", inputs: ["headerSize", "wrap"], exportAs: ["fd-title"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: LayoutGridComponent, selector: "fd-layout-grid, [fdLayoutGrid]", inputs: ["class", "noGap", "noHorizontalGap", "noVerticalGap"] }, { kind: "directive", type: LayoutGridRowDirective, selector: "[fd-layout-grid-row], [fdLayoutGridRow]" }, { kind: "directive", type: LayoutGridColDirective, selector: "[fd-layout-grid-col], [fdLayoutGridCol]", inputs: ["fdLayoutGridCol", "colGrow", "colMd", "colLg", "colXl", "colOffset", "colOffsetMd", "colOffsetLg", "colOffsetXl", "class"] }, { kind: "component", type: FormLabelComponent, selector: "[fd-form-label]", inputs: ["required", "colon", "alignLabelEnd", "inlineHelpContent", "inlineHelpGlyph", "inlineHelpTriggers", "inlineHelpBodyPlacement", "inlineHelpPlacement", "inlineHelpLabel", "id"] }, { kind: "component", type: SelectComponent, selector: "fd-select", inputs: ["extendedBodyTemplate", "scrollStrategy", "controlId", "state", "mobile", "stateMessage", "disabled", "required", "readonly", "placeholder", "value", "maxHeight", "glyph", "closeOnOutsideClick", "fillControlMode", "controlTemplate", "appendTo", "unselectMissingOption", "typeaheadDebounceInterval", "ariaLabelledBy", "ariaLabel", "mobileConfig", "inline", "selectControlClass", "selectDropdownButtonClass", "advancedStateMessage", "compareWith"], outputs: ["isOpenChange", "valueChange"] }, { 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.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: ListGroupHeaderDirective, selector: "[fdListGroupHeader], [fd-list-group-header]", inputs: ["nativeElementId"], outputs: ["keyDown"] }, { kind: "component", type: OptionComponent, selector: "[fd-option], fd-option", inputs: ["id", "value", "disabled"], outputs: ["selectionChange"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: FormInputMessageGroupComponent, selector: "fd-form-input-message-group", inputs: ["triggers", "closeOnOutsideClick", "fillControlMode", "noArrow", "closeOnEscapeKey", "placement", "placementContainer", "isOpen"], outputs: ["isOpenChange"] }, { kind: "component", type: FormControlComponent, selector: "[fd-form-control]", inputs: ["state", "type", "class", "ariaLabel", "ariaLabelledBy"] }, { kind: "directive", type: ConditionCountMessageDirective, selector: "[fdp-condition-count-message]", inputs: ["maxCharacters"] }, { kind: "component", type: ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "directive", type: NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: FormMessageComponent, selector: "fd-form-message", inputs: ["type", "static", "embedded", "class"] }, { kind: "pipe", type: FdTranslatePipe, name: "fdTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
132
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.7", type: DefineTabComponent, isStandalone: true, selector: "fdp-define-tab", inputs: { titleId: "titleId", selectedId: "selectedId", conditions: "conditions", strategyLabels: "strategyLabels" }, outputs: { includeChange: "includeChange", excludeChange: "excludeChange", conditionChange: "conditionChange" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<h5 [id]=\"titleId\" role=\"heading\" aria-level=\"5\" fd-title class=\"define-condition-title\">\n {{ 'platformVHD.defineConditionTitle' | fdTranslate }}\n</h5>\n<ng-container *ngFor=\"let item of _conditions; trackBy: _trackByKeyAndType; index as i\">\n <fd-layout-grid class=\"condition-row\" [noGap]=\"true\">\n <div fdLayoutGridRow>\n <div [fdLayoutGridCol]=\"5\">\n <label id=\"CONDITIONPANEL_OPERATOR_LABEL\" fd-form-label class=\"fdp-value-help-dialog__hidden_label\">\n CONDITIONPANEL_OPERATOR_LABEL\n </label>\n <label [id]=\"selectedId\" fd-form-label class=\"fdp-value-help-dialog__hidden_label\">\n {{\n 'platformVHD.defineConditionSelectedValueHiddenA11yLabel'\n | fdTranslate : { value: item.strategy }\n }}</label\n >\n <fd-select\n class=\"vhd-condition-filters\"\n fdLayoutGridCol\n colGrow\n [class.fd-select-custom-class]=\"false\"\n #sttr\n [controlTemplate]=\"customSelectTemplate\"\n [name]=\"uid + '-' + type + '-strategy-' + item.id\"\n [(ngModel)]=\"item.strategy\"\n (valueChange)=\"_filterChanged()\"\n role=\"combobox\"\n aria-roledescription=\"select\"\n aria-haspopup=\"listbox\"\n [ariaLabelledBy]=\"titleId + ' ' + 'CONDITIONPANEL_OPERATOR_LABEL' + ' ' + selectedId\"\n >\n <ng-container *ngIf=\"_includeStrategy.length\">\n <li fd-list-group-header>\n {{ 'platformVHD.defineConditionConditionsGroupHeaderInclude' | fdTranslate }}\n </li>\n <li fd-option *ngFor=\"let strategy of _includeStrategy\" [value]=\"strategy.key\">\n <ng-container\n [ngTemplateOutlet]=\"conditionStrategyOption\"\n [ngTemplateOutletContext]=\"{ type: _defineTypes.include, strategy: strategy }\"\n ></ng-container>\n </li>\n </ng-container>\n <ng-container *ngIf=\"_excludeStrategy.length\">\n <li fd-list-group-header>\n {{ 'platformVHD.defineConditionConditionsGroupHeaderExclude' | fdTranslate }}\n </li>\n <li fd-option *ngFor=\"let strategy of _excludeStrategy\" [value]=\"strategy.key\">\n <ng-container\n [ngTemplateOutlet]=\"conditionStrategyOption\"\n [ngTemplateOutletContext]=\"{ type: _defineTypes.exclude, strategy: strategy }\"\n ></ng-container>\n </li>\n </ng-container>\n </fd-select>\n </div>\n <div\n fdLayoutGridCol\n colGrow\n *ngIf=\"\n item.strategy !== _strategyIncludeValues.empty && item.strategy !== _strategyExcludeValues.not_empty\n \"\n >\n <div fdLayoutGridRow>\n <ng-container *ngIf=\"item.strategy === _strategyIncludeValues.between; else valueIncludeTemplate\">\n <div fdLayoutGridCol colGrow>\n <fd-form-input-message-group [triggers]=\"['focusin', 'focusout']\">\n <input\n fd-form-control\n fdp-condition-count-message\n [maxCharacters]=\"_rules.maxCharactersHintCount\"\n type=\"text\"\n [placeholder]=\"'platformVHD.defineConditionFromPlaceholder' | fdTranslate\"\n placeholder=\"from\"\n required\n [state]=\"fromModel.invalid ? 'error' : null\"\n [name]=\"uid + '-' + type + '-from-' + item.id\"\n (blur)=\"_validateConditionValue(item, [!!fromModel.valid, !!toModel.valid])\"\n #fromModel=\"ngModel\"\n [(ngModel)]=\"item.value\"\n />\n <ng-container\n [ngTemplateOutlet]=\"countError\"\n [ngTemplateOutletContext]=\"{ $implicit: item.value && item.value.length }\"\n ></ng-container>\n </fd-form-input-message-group>\n </div>\n <div fdLayoutGridCol colGrow>\n <fd-form-input-message-group [triggers]=\"['focusin', 'focusout']\">\n <input\n fd-form-control\n fdp-condition-count-message\n [maxCharacters]=\"_rules.maxCharactersHintCount\"\n type=\"text\"\n [placeholder]=\"'platformVHD.defineConditionToPlaceholder' | fdTranslate\"\n required\n [state]=\"toModel.invalid ? 'error' : null\"\n [name]=\"uid + '-' + type + '-to-' + item.id\"\n (blur)=\"_validateConditionValue(item, [!!fromModel.valid, !!toModel.valid])\"\n #toModel=\"ngModel\"\n [(ngModel)]=\"item.valueTo\"\n />\n <ng-container\n [ngTemplateOutlet]=\"countError\"\n [ngTemplateOutletContext]=\"{ $implicit: item.value && item.value.length }\"\n ></ng-container>\n </fd-form-input-message-group>\n </div>\n </ng-container>\n <ng-template #valueIncludeTemplate>\n <div fdLayoutGridCol colGrow>\n <fd-form-input-message-group>\n <input\n fd-form-control\n fdp-condition-count-message\n [maxCharacters]=\"_rules.maxCharactersHintCount\"\n type=\"text\"\n [placeholder]=\"'platformVHD.defineConditionValuePlaceholder' | fdTranslate\"\n [state]=\"valueModel.invalid ? 'error' : null\"\n [name]=\"uid + '-' + type + '-value-' + item.id\"\n (blur)=\"_validateConditionValue(item, !!valueModel.valid)\"\n #valueModel=\"ngModel\"\n [(ngModel)]=\"item.value\"\n />\n <ng-container *ngIf=\"valueModel.invalid\">\n <ng-container\n [ngTemplateOutlet]=\"countError\"\n [ngTemplateOutletContext]=\"{ $implicit: item.value && item.value.length }\"\n ></ng-container>\n </ng-container>\n </fd-form-input-message-group>\n </div>\n </ng-template>\n </div>\n </div>\n <div class=\"action-col\" fdLayoutGridCol colGrow>\n <button\n fd-button\n [ariaLabel]=\"'platformVHD.defineConditionRemoveConditionButtonTitle' | fdTranslate\"\n fdType=\"transparent\"\n glyph=\"decline\"\n [title]=\"'platformVHD.defineConditionRemoveConditionButtonTitle' | fdTranslate\"\n (click)=\"removeCondition(i)\"\n ></button>\n </div>\n </div>\n </fd-layout-grid>\n</ng-container>\n\n<fd-layout-grid class=\"condition-row new-condition-row\" [noGap]=\"true\">\n <div fdLayoutGridRow>\n <div fdLayoutGridCol colGrow>&nbsp;</div>\n <div fdLayoutGridCol class=\"action-col\">\n <button\n fd-button\n [attr.aria-label]=\"'platformVHD.defineConditionAddConditionButtonTitle' | fdTranslate\"\n [label]=\"'platformVHD.defineConditionAddConditionButtonLabel' | fdTranslate\"\n [title]=\"'platformVHD.defineConditionAddConditionButtonTitle' | fdTranslate\"\n (click)=\"addEmptyCondition()\"\n ></button>\n </div>\n </div>\n</fd-layout-grid>\n\n<ng-template #conditionStrategyOption let-type=\"type\" let-strategy=\"strategy\">\n <ng-container [ngSwitch]=\"strategy.key\">\n <ng-container *ngSwitchCase=\"'contains'\">\n {{ 'platformVHD.defineConditionConditionStrategyLabelContains' | fdTranslate }}\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'equalTo'\">\n {{ 'platformVHD.defineConditionConditionStrategyLabelEqualTo' | fdTranslate }}\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'between'\">\n {{ 'platformVHD.defineConditionConditionStrategyLabelBetween' | fdTranslate }}\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'startsWith'\">\n {{ 'platformVHD.defineConditionConditionStrategyLabelStartsWith' | fdTranslate }}\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'endsWith'\">\n {{ 'platformVHD.defineConditionConditionStrategyLabelEndsWith' | fdTranslate }}\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'lessThan'\">\n {{ 'platformVHD.defineConditionConditionStrategyLabelLessThan' | fdTranslate }}\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'lessThanEqual'\">\n {{ 'platformVHD.defineConditionConditionStrategyLabelLessThanEqual' | fdTranslate }}\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'greaterThan'\">\n {{ 'platformVHD.defineConditionConditionStrategyLabelGreaterThan' | fdTranslate }}\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'greaterThanEqual'\">\n {{ 'platformVHD.defineConditionConditionStrategyLabelGreaterThanEqual' | fdTranslate }}\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'empty'\">\n {{ 'platformVHD.defineConditionConditionStrategyLabelEmpty' | fdTranslate }}\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'not_equalTo'\">\n {{ 'platformVHD.defineConditionConditionStrategyLabelNotEqualTo' | fdTranslate }}\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'not_empty'\">\n {{ 'platformVHD.defineConditionConditionStrategyLabelNotEmpty' | fdTranslate }}\n </ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template #countError let-count>\n <fd-form-message type=\"error\" *ngIf=\"count && count > 7\">\n {{ 'platformVHD.defineConditionMaxCountError' | fdTranslate : { count: 7 } }}\n </fd-form-message>\n</ng-template>\n\n<ng-template #customSelectTemplate let-textValue>\n {{ textValue }}\n</ng-template>\n", styles: [".fdp-value-help-dialog .fd-row{min-width:100%!important;margin:0!important}.fdp-value-help-dialog .condition-row>.fd-col{padding:0 .5rem .5rem 0}.fdp-value-help-dialog .condition-row>.fd-col:last-child{padding-right:0}.fdp-value-help-dialog .condition-row .fd-input{margin:0}.fdp-value-help-dialog fdp-define-tab{height:100%;overflow:auto}.fdp-value-help-dialog fdp-define-tab .define-condition-title{padding:.625rem 0 0}.fdp-value-help-dialog fdp-define-tab .fd-container--no-gap{margin:0!important}.fdp-value-help-dialog .vhd-condition-filters fd-popover{width:100%}.fdp-value-help-dialog .condition-row{align-items:center}.fdp-value-help-dialog .condition-row .main-col{min-width:auto;flex:1 1 auto}.fdp-value-help-dialog .condition-row .action-col{min-width:auto;flex:0 0 auto}.fdp-value-help-dialog .condition-row .fd-input{margin-top:0}.fdp-value-help-dialog .condition-row.new-condition-row{padding-top:.5rem}.fdp-value-help-dialog .condition-row.new-condition-row .fd-button{margin-right:2.5rem}\n"], dependencies: [{ kind: "component", type: TitleComponent, selector: "h1[fd-title], h2[fd-title], h3[fd-title], h4[fd-title], h5[fd-title], h6[fd-title]", inputs: ["headerSize", "wrap"], exportAs: ["fd-title"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: LayoutGridComponent, selector: "fd-layout-grid, [fdLayoutGrid]", inputs: ["class", "noGap", "noHorizontalGap", "noVerticalGap"] }, { kind: "directive", type: LayoutGridRowDirective, selector: "[fd-layout-grid-row], [fdLayoutGridRow]" }, { kind: "directive", type: LayoutGridColDirective, selector: "[fd-layout-grid-col], [fdLayoutGridCol]", inputs: ["fdLayoutGridCol", "colGrow", "colMd", "colLg", "colXl", "colOffset", "colOffsetMd", "colOffsetLg", "colOffsetXl", "class"] }, { kind: "component", type: FormLabelComponent, selector: "[fd-form-label]", inputs: ["required", "colon", "alignLabelEnd", "inlineHelpContent", "inlineHelpGlyph", "inlineHelpTriggers", "inlineHelpBodyPlacement", "inlineHelpPlacement", "inlineHelpLabel", "id"] }, { kind: "component", type: SelectComponent, selector: "fd-select", inputs: ["extendedBodyTemplate", "scrollStrategy", "controlId", "state", "mobile", "stateMessage", "disabled", "required", "readonly", "placeholder", "value", "maxHeight", "glyph", "closeOnOutsideClick", "fillControlMode", "controlTemplate", "appendTo", "unselectMissingOption", "typeaheadDebounceInterval", "ariaLabelledBy", "ariaLabel", "mobileConfig", "inline", "selectControlClass", "selectDropdownButtonClass", "advancedStateMessage", "compareWith"], outputs: ["isOpenChange", "valueChange"] }, { 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.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: ListGroupHeaderDirective, selector: "[fdListGroupHeader], [fd-list-group-header]", inputs: ["nativeElementId"], outputs: ["keyDown"] }, { kind: "component", type: OptionComponent, selector: "[fd-option], fd-option", inputs: ["id", "value", "disabled"], outputs: ["selectionChange"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: FormInputMessageGroupComponent, selector: "fd-form-input-message-group", inputs: ["triggers", "closeOnOutsideClick", "fillControlMode", "noArrow", "closeOnEscapeKey", "placement", "placementContainer", "isOpen"], outputs: ["isOpenChange"] }, { kind: "component", type: FormControlComponent, selector: "input[fd-form-control], textarea[fd-form-control]", inputs: ["state", "type", "class", "ariaLabel", "ariaLabelledBy"] }, { kind: "directive", type: ConditionCountMessageDirective, selector: "[fdp-condition-count-message]", inputs: ["maxCharacters"] }, { kind: "component", type: ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "directive", type: NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: FormMessageComponent, selector: "fd-form-message", inputs: ["type", "static", "embedded", "class"] }, { kind: "pipe", type: FdTranslatePipe, name: "fdTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
133
133
  }
134
134
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: DefineTabComponent, decorators: [{
135
135
  type: Component,
@@ -170,4 +170,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImpor
170
170
  }], conditionChange: [{
171
171
  type: Output
172
172
  }] } });
173
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmaW5lLXRhYi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL3NyYy9saWIvdmFsdWUtaGVscC1kaWFsb2cvY29tcG9uZW50cy9kZWZpbmUtdGFiL2RlZmluZS10YWIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9zcmMvbGliL3ZhbHVlLWhlbHAtZGlhbG9nL2NvbXBvbmVudHMvZGVmaW5lLXRhYi9kZWZpbmUtdGFiLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVEQUF1RDtBQUN2RCxPQUFPLEVBRUgsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFFTixpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDL0QsT0FBTyxFQUNILG9CQUFvQixFQUNwQiw4QkFBOEIsRUFDOUIsa0JBQWtCLEVBQ2xCLG9CQUFvQixFQUN2QixNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxtQkFBbUIsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3hILE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDaEYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzdELE9B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QW9CO3dCQUNwQixlQUFlO3FCQUNsQjs4QkFVRCxPQUFPO3NCQUROLEtBQUs7Z0JBS04sVUFBVTtzQkFEVCxLQUFLO2dCQUtOLFVBQVU7c0JBRFQsS0FBSztnQkFLTixjQUFjO3NCQURiLEtBQUs7Z0JBTU4sYUFBYTtzQkFEWixNQUFNO2dCQUtQLGFBQWE7c0JBRFosTUFBTTtnQkFLUCxlQUFlO3NCQURkLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbWVtYmVyLW9yZGVyaW5nICovXG5pbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ29tcG9uZW50LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbnB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT3V0cHV0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IE5nRm9yLCBOZ0lmLCBOZ1N3aXRjaCwgTmdTd2l0Y2hDYXNlLCBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2J1dHRvbic7XG5pbXBvcnQge1xuICAgIEZvcm1Db250cm9sQ29tcG9uZW50LFxuICAgIEZvcm1JbnB1dE1lc3NhZ2VHcm91cENvbXBvbmVudCxcbiAgICBGb3JtTGFiZWxDb21wb25lbnQsXG4gICAgRm9ybU1lc3NhZ2VDb21wb25lbnRcbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2Zvcm0nO1xuaW1wb3J0IHsgTGF5b3V0R3JpZENvbERpcmVjdGl2ZSwgTGF5b3V0R3JpZENvbXBvbmVudCwgTGF5b3V0R3JpZFJvd0RpcmVjdGl2ZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9sYXlvdXQtZ3JpZCc7XG5pbXBvcnQgeyBMaXN0R3JvdXBIZWFkZXJEaXJlY3RpdmUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvbGlzdCc7XG5pbXBvcnQgeyBPcHRpb25Db21wb25lbnQsIFNlbGVjdENvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9zZWxlY3QnO1xuaW1wb3J0IHsgVGl0bGVDb21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvdGl0bGUnO1xuaW1wb3J0IHsgRmRUcmFuc2xhdGVQaXBlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9pMThuJztcbmltcG9ydCB7IE1BWF9DSEFSQUNURVJfSElOVF9DT1VOVCB9IGZyb20gJy4uLy4uL2NvbnN0YW5zJztcbmltcG9ydCB7IENvbmRpdGlvbkNvdW50TWVzc2FnZURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvY29uZGl0aW9uLWNvdW50LW1lc3NhZ2UuZGlyZWN0aXZlJztcbmltcG9ydCB7XG4gICAgQmFzZUVudGl0eSxcbiAgICBWaGREZWZpbmVFeGNsdWRlU3RyYXRlZ3ksXG4gICAgVmhkRGVmaW5lSW5jbHVkZVN0cmF0ZWd5LFxuICAgIFZoZERlZmluZVR5cGUsXG4gICAgVmhkRXhjbHVkZWRFbnRpdHksXG4gICAgVmhkSW5jbHVkZWRFbnRpdHlcbn0gZnJvbSAnLi4vLi4vbW9kZWxzJztcbmltcG9ydCB7IFZoZEJhc2VUYWIgfSBmcm9tICcuLi9iYXNlLXRhYi92aGQtYmFzZS10YWIuY29tcG9uZW50JztcblxuY2xhc3MgRXh0ZW5kZWRCYXNlRW50aXR5IGV4dGVuZHMgQmFzZUVudGl0eSB7XG4gICAgaWQ/OiBudW1iZXI7XG59XG5cbmNsYXNzIEV4dGVuZGVkSW5jbHVkZWRFbnRpdHkgZXh0ZW5kcyBWaGRJbmNsdWRlZEVudGl0eSB7XG4gICAgaWQ/OiBudW1iZXI7XG59XG5cbmNsYXNzIEV4dGVuZGVkRXhjbHVkZWRFbnRpdHkgZXh0ZW5kcyBWaGRFeGNsdWRlZEVudGl0eSB7XG4gICAgaWQ/OiBudW1iZXI7XG59XG5cbmxldCB0aXRsZVVuaXF1ZUlkID0gMDtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZHAtZGVmaW5lLXRhYicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2RlZmluZS10YWIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2RlZmluZS10YWIuY29tcG9uZW50LnNjc3MnXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBUaXRsZUNvbXBvbmVudCxcbiAgICAgICAgTmdGb3IsXG4gICAgICAgIExheW91dEdyaWRDb21wb25lbnQsXG4gICAgICAgIExheW91dEdyaWRSb3dEaXJlY3RpdmUsXG4gICAgICAgIExheW91dEdyaWRDb2xEaXJlY3RpdmUsXG4gICAgICAgIEZvcm1MYWJlbENvbXBvbmVudCxcbiAgICAgICAgU2VsZWN0Q29tcG9uZW50LFxuICAgICAgICBGb3Jtc01vZHVsZSxcbiAgICAgICAgTmdJZixcbiAgICAgICAgTGlzdEdyb3VwSGVhZGVyRGlyZWN0aXZlLFxuICAgICAgICBPcHRpb25Db21wb25lbnQsXG4gICAgICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgICAgIEZvcm1JbnB1dE1lc3NhZ2VHcm91cENvbXBvbmVudCxcbiAgICAgICAgRm9ybUNvbnRyb2xDb21wb25lbnQsXG4gICAgICAgIENvbmRpdGlvbkNvdW50TWVzc2FnZURpcmVjdGl2ZSxcbiAgICAgICAgQnV0dG9uQ29tcG9uZW50LFxuICAgICAgICBOZ1N3aXRjaCxcbiAgICAgICAgTmdTd2l0Y2hDYXNlLFxuICAgICAgICBGb3JtTWVzc2FnZUNvbXBvbmVudCxcbiAgICAgICAgRmRUcmFuc2xhdGVQaXBlXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBEZWZpbmVUYWJDb21wb25lbnQgZXh0ZW5kcyBWaGRCYXNlVGFiIGltcGxlbWVudHMgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0IHtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByb3RlY3RlZCBkZWZhdWx0SWQgPSBgZmQtdGl0bGUtaWQtJHt0aXRsZVVuaXF1ZUlkKyt9YDtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByb3RlY3RlZCBkZWZhdWx0U2VsZWN0SWQgPSBgZmQtc2VsZWN0LXRpdGxlLWlkLSR7dGl0bGVVbmlxdWVJZCsrfWA7XG5cbiAgICAvKiogdGl0bGUgaWQgZm9yIHRoZSB0YWJsZSAgKi9cbiAgICBASW5wdXQoKVxuICAgIHRpdGxlSWQ6IHN0cmluZyA9IHRoaXMuZGVmYXVsdElkO1xuXG4gICAgLyoqIHNlZWxjdGVkIHZhbHVlIGlkIGZvciB0aGUgdGFibGUgICovXG4gICAgQElucHV0KClcbiAgICBzZWxlY3RlZElkOiBzdHJpbmcgPSB0aGlzLmRlZmF1bHRTZWxlY3RJZDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQElucHV0KClcbiAgICBjb25kaXRpb25zOiBFeHRlbmRlZEJhc2VFbnRpdHlbXSA9IFtdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASW5wdXQoKVxuICAgIHN0cmF0ZWd5TGFiZWxzOiB7IFtrZXkgaW4ga2V5b2YgKHR5cGVvZiBWaGREZWZpbmVJbmNsdWRlU3RyYXRlZ3kgfCB0eXBlb2YgVmhkRGVmaW5lRXhjbHVkZVN0cmF0ZWd5KV0/OiBzdHJpbmcgfSA9XG4gICAgICAgIHt9O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBpbmNsdWRlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8RXh0ZW5kZWRJbmNsdWRlZEVudGl0eVtdPiA9IG5ldyBFdmVudEVtaXR0ZXI8RXh0ZW5kZWRJbmNsdWRlZEVudGl0eVtdPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBleGNsdWRlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8RXh0ZW5kZWRFeGNsdWRlZEVudGl0eVtdPiA9IG5ldyBFdmVudEVtaXR0ZXI8RXh0ZW5kZWRFeGNsdWRlZEVudGl0eVtdPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBjb25kaXRpb25DaGFuZ2U6IEV2ZW50RW1pdHRlcjxCYXNlRW50aXR5W10+ID0gbmV3IEV2ZW50RW1pdHRlcjxCYXNlRW50aXR5W10+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9jb25kaXRpb25zOiBFeHRlbmRlZEJhc2VFbnRpdHlbXSA9IFtdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfZGVmaW5lUGFuZWxTdGF0ZSA9IHtcbiAgICAgICAgaW5jbHVkZWQ6IGZhbHNlLFxuICAgICAgICBleGNsdWRlZDogZmFsc2VcbiAgICB9O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfcnVsZXMgPSB7XG4gICAgICAgIG1heENoYXJhY3RlcnNIaW50Q291bnQ6IE1BWF9DSEFSQUNURVJfSElOVF9DT1VOVFxuICAgIH07XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfc3RyYXRlZ3lJbmNsdWRlVmFsdWVzID0gVmhkRGVmaW5lSW5jbHVkZVN0cmF0ZWd5O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfc3RyYXRlZ3lFeGNsdWRlVmFsdWVzID0gVmhkRGVmaW5lRXhjbHVkZVN0cmF0ZWd5O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfZGVmaW5lVHlwZXMgPSBWaGREZWZpbmVUeXBlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfaW5jbHVkZVN0cmF0ZWd5OiBTdGF0ZWd5SXRlbVtdID0gW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9leGNsdWRlU3RyYXRlZ3k6IFN0YXRlZ3lJdGVtW10gPSBbXTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAoJ2NvbmRpdGlvbnMnIGluIGNoYW5nZXMpIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbmRpdGlvbnMgPSAodGhpcy5jb25kaXRpb25zIGFzIEV4dGVuZGVkSW5jbHVkZWRFbnRpdHlbXSkgfHwgW107XG4gICAgICAgICAgICB0aGlzLl9pbml0aWFsaXplQ29uZGl0aW9ucygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3JlZnJlc2hTdHJhdGVnaWVzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gVHJhY2sgZnVuY3Rpb24gZm9yIG1haW4gZGF0YSAqL1xuICAgIF90cmFja0J5S2V5QW5kVHlwZShcbiAgICAgICAgX2luZGV4OiBudW1iZXIsXG4gICAgICAgIGl0ZW06IEV4dGVuZGVkSW5jbHVkZWRFbnRpdHkgfCBFeHRlbmRlZEV4Y2x1ZGVkRW50aXR5XG4gICAgKTogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtLmlkICsgaXRlbS5rZXkgKyBpdGVtLnR5cGU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX29uU2VsZWN0U3RyYXRlZ3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2ZpbHRlckNoYW5nZWQoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9maWx0ZXJDaGFuZ2VkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbmRpdGlvbkNoYW5nZS5lbWl0KHRoaXMuX2NvbmRpdGlvbnMpO1xuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGFkZEVtcHR5Q29uZGl0aW9uKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpdGVtID0gbmV3IEV4dGVuZGVkQmFzZUVudGl0eSgpO1xuICAgICAgICBpdGVtLnZhbHVlID0gJyc7XG4gICAgICAgIHRoaXMuX2NvbmRpdGlvbnMucHVzaChpdGVtKTtcbiAgICAgICAgdGhpcy5fZmlsdGVyQ2hhbmdlZCgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVtb3ZlQ29uZGl0aW9uKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY29uZGl0aW9ucy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB0aGlzLl9pbml0aWFsaXplQ29uZGl0aW9ucygpO1xuICAgICAgICB0aGlzLl9maWx0ZXJDaGFuZ2VkKCk7XG4gICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3ZhbGlkYXRlQ29uZGl0aW9uVmFsdWUoaXRlbTogRXh0ZW5kZWRJbmNsdWRlZEVudGl0eSB8IEV4dGVuZGVkRXhjbHVkZWRFbnRpdHksIHZhbGlkOiBib29sZWFuIHwgYm9vbGVhbltdKTogdm9pZCB7XG4gICAgICAgIGl0ZW0udmFsaWQgPSBBcnJheS5pc0FycmF5KHZhbGlkKSA/IHZhbGlkLmV2ZXJ5KEJvb2xlYW4pIDogISF2YWxpZDtcbiAgICAgICAgdGhpcy5fZmlsdGVyQ2hhbmdlZCgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcmVmcmVzaFN0cmF0ZWdpZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2luY2x1ZGVTdHJhdGVneSA9IE9iamVjdC5rZXlzKFZoZERlZmluZUluY2x1ZGVTdHJhdGVneSkubWFwKChrZXkpID0+ICh7XG4gICAgICAgICAgICBrZXksXG4gICAgICAgICAgICB0eXBlOiBWaGREZWZpbmVUeXBlLmluY2x1ZGVcbiAgICAgICAgfSkpO1xuICAgICAgICB0aGlzLl9leGNsdWRlU3RyYXRlZ3kgPSBPYmplY3Qua2V5cyhWaGREZWZpbmVFeGNsdWRlU3RyYXRlZ3kpLm1hcCgoa2V5KSA9PiAoe1xuICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgdHlwZTogVmhkRGVmaW5lVHlwZS5leGNsdWRlXG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2luaXRpYWxpemVDb25kaXRpb25zKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fY29uZGl0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuYWRkRW1wdHlDb25kaXRpb24oKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuaW50ZXJmYWNlIFN0YXRlZ3lJdGVtIHtcbiAgICBrZXk6IHN0cmluZztcbiAgICB0eXBlOiBWaGREZWZpbmVUeXBlO1xufVxuIiwiPGg1IFtpZF09XCJ0aXRsZUlkXCIgcm9sZT1cImhlYWRpbmdcIiBhcmlhLWxldmVsPVwiNVwiIGZkLXRpdGxlIGNsYXNzPVwiZGVmaW5lLWNvbmRpdGlvbi10aXRsZVwiPlxuICAgIHt7ICdwbGF0Zm9ybVZIRC5kZWZpbmVDb25kaXRpb25UaXRsZScgfCBmZFRyYW5zbGF0ZSB9fVxuPC9oNT5cbjxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgX2NvbmRpdGlvbnM7IHRyYWNrQnk6IF90cmFja0J5S2V5QW5kVHlwZTsgaW5kZXggYXMgaVwiPlxuICAgIDxmZC1sYXlvdXQtZ3JpZCBjbGFzcz1cImNvbmRpdGlvbi1yb3dcIiBbbm9HYXBdPVwidHJ1ZVwiPlxuICAgICAgICA8ZGl2IGZkTGF5b3V0R3JpZFJvdz5cbiAgICAgICAgICAgIDxkaXYgW2ZkTGF5b3V0R3JpZENvbF09XCI1XCI+XG4gICAgICAgICAgICAgICAgPGxhYmVsIGlkPVwiQ09ORElUSU9OUEFORUxfT1BFUkFUT1JfTEFCRUxcIiBmZC1mb3JtLWxhYmVsIGNsYXNzPVwiZmRwLXZhbHVlLWhlbHAtZGlhbG9nX19oaWRkZW5fbGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgICAgQ09ORElUSU9OUEFORUxfT1BFUkFUT1JfTEFCRUxcbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBbaWRdPVwic2VsZWN0ZWRJZFwiIGZkLWZvcm0tbGFiZWwgY2xhc3M9XCJmZHAtdmFsdWUtaGVscC1kaWFsb2dfX2hpZGRlbl9sYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgJ3BsYXRmb3JtVkhELmRlZmluZUNvbmRpdGlvblNlbGVjdGVkVmFsdWVIaWRkZW5BMTF5TGFiZWwnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBmZFRyYW5zbGF0ZSA6IHsgdmFsdWU6IGl0ZW0uc3RyYXRlZ3kgfVxuICAgICAgICAgICAgICAgICAgICB9fTwvbGFiZWxcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGZkLXNlbGVjdFxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInZoZC1jb25kaXRpb24tZmlsdGVyc1wiXG4gICAgICAgICAgICAgICAgICAgIGZkTGF5b3V0R3JpZENvbFxuICAgICAgICAgICAgICAgICAgICBjb2xHcm93XG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5mZC1zZWxlY3QtY3VzdG9tLWNsYXNzXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgI3N0dHJcbiAgICAgICAgICAgICAgICAgICAgW2NvbnRyb2xUZW1wbGF0ZV09XCJjdXN0b21TZWxlY3RUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cInVpZCArICctJyArIHR5cGUgKyAnLXN0cmF0ZWd5LScgKyBpdGVtLmlkXCJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJpdGVtLnN0cmF0ZWd5XCJcbiAgICAgICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cIl9maWx0ZXJDaGFuZ2VkKClcIlxuICAgICAgICAgICAgICAgICAgICByb2xlPVwiY29tYm9ib3hcIlxuICAgICAgICAgICAgICAgICAgICBhcmlhLXJvbGVkZXNjcmlwdGlvbj1cInNlbGVjdFwiXG4gICAgICAgICAgICAgICAgICAgIGFyaWEtaGFzcG9wdXA9XCJsaXN0Ym94XCJcbiAgICAgICAgICAgICAgICAgICAgW2FyaWFMYWJlbGxlZEJ5XT1cInRpdGxlSWQgKyAnICcgKyAnQ09ORElUSU9OUEFORUxfT1BFUkFUT1JfTEFCRUwnICsgJyAnICsgc2VsZWN0ZWRJZFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiX2luY2x1ZGVTdHJhdGVneS5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBmZC1saXN0LWdyb3VwLWhlYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAncGxhdGZvcm1WSEQuZGVmaW5lQ29uZGl0aW9uQ29uZGl0aW9uc0dyb3VwSGVhZGVySW5jbHVkZScgfCBmZFRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBmZC1vcHRpb24gKm5nRm9yPVwibGV0IHN0cmF0ZWd5IG9mIF9pbmNsdWRlU3RyYXRlZ3lcIiBbdmFsdWVdPVwic3RyYXRlZ3kua2V5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJjb25kaXRpb25TdHJhdGVneU9wdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IHR5cGU6IF9kZWZpbmVUeXBlcy5pbmNsdWRlLCBzdHJhdGVneTogc3RyYXRlZ3kgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJfZXhjbHVkZVN0cmF0ZWd5Lmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGZkLWxpc3QtZ3JvdXAtaGVhZGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdwbGF0Zm9ybVZIRC5kZWZpbmVDb25kaXRpb25Db25kaXRpb25zR3JvdXBIZWFkZXJFeGNsdWRlJyB8IGZkVHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGZkLW9wdGlvbiAqbmdGb3I9XCJsZXQgc3RyYXRlZ3kgb2YgX2V4Y2x1ZGVTdHJhdGVneVwiIFt2YWx1ZV09XCJzdHJhdGVneS5rZXlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbmRpdGlvblN0cmF0ZWd5T3B0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgdHlwZTogX2RlZmluZVR5cGVzLmV4Y2x1ZGUsIHN0cmF0ZWd5OiBzdHJhdGVneSB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2ZkLXNlbGVjdD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGZkTGF5b3V0R3JpZENvbFxuICAgICAgICAgICAgICAgIGNvbEdyb3dcbiAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgICBpdGVtLnN0cmF0ZWd5ICE9PSBfc3RyYXRlZ3lJbmNsdWRlVmFsdWVzLmVtcHR5ICYmIGl0ZW0uc3RyYXRlZ3kgIT09IF9zdHJhdGVneUV4Y2x1ZGVWYWx1ZXMubm90X2VtcHR5XG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8ZGl2IGZkTGF5b3V0R3JpZFJvdz5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW0uc3RyYXRlZ3kgPT09IF9zdHJhdGVneUluY2x1ZGVWYWx1ZXMuYmV0d2VlbjsgZWxzZSB2YWx1ZUluY2x1ZGVUZW1wbGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBmZExheW91dEdyaWRDb2wgY29sR3Jvdz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmQtZm9ybS1pbnB1dC1tZXNzYWdlLWdyb3VwIFt0cmlnZ2Vyc109XCJbJ2ZvY3VzaW4nLCAnZm9jdXNvdXQnXVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkLWZvcm0tY29udHJvbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmRwLWNvbmRpdGlvbi1jb3VudC1tZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF4Q2hhcmFjdGVyc109XCJfcnVsZXMubWF4Q2hhcmFjdGVyc0hpbnRDb3VudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ3BsYXRmb3JtVkhELmRlZmluZUNvbmRpdGlvbkZyb21QbGFjZWhvbGRlcicgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cImZyb21cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdGF0ZV09XCJmcm9tTW9kZWwuaW52YWxpZCA/ICdlcnJvcicgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cInVpZCArICctJyArIHR5cGUgKyAnLWZyb20tJyArIGl0ZW0uaWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwiX3ZhbGlkYXRlQ29uZGl0aW9uVmFsdWUoaXRlbSwgWyEhZnJvbU1vZGVsLnZhbGlkLCAhIXRvTW9kZWwudmFsaWRdKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjZnJvbU1vZGVsPVwibmdNb2RlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIml0ZW0udmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJjb3VudEVycm9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogaXRlbS52YWx1ZSAmJiBpdGVtLnZhbHVlLmxlbmd0aCB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZmQtZm9ybS1pbnB1dC1tZXNzYWdlLWdyb3VwPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGZkTGF5b3V0R3JpZENvbCBjb2xHcm93PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZC1mb3JtLWlucHV0LW1lc3NhZ2UtZ3JvdXAgW3RyaWdnZXJzXT1cIlsnZm9jdXNpbicsICdmb2N1c291dCddXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmQtZm9ybS1jb250cm9sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZHAtY29uZGl0aW9uLWNvdW50LW1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXhDaGFyYWN0ZXJzXT1cIl9ydWxlcy5tYXhDaGFyYWN0ZXJzSGludENvdW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCIncGxhdGZvcm1WSEQuZGVmaW5lQ29uZGl0aW9uVG9QbGFjZWhvbGRlcicgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0YXRlXT1cInRvTW9kZWwuaW52YWxpZCA/ICdlcnJvcicgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cInVpZCArICctJyArIHR5cGUgKyAnLXRvLScgKyBpdGVtLmlkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChibHVyKT1cIl92YWxpZGF0ZUNvbmRpdGlvblZhbHVlKGl0ZW0sIFshIWZyb21Nb2RlbC52YWxpZCwgISF0b01vZGVsLnZhbGlkXSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3RvTW9kZWw9XCJuZ01vZGVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiaXRlbS52YWx1ZVRvXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiY291bnRFcnJvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGl0ZW0udmFsdWUgJiYgaXRlbS52YWx1ZS5sZW5ndGggfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZkLWZvcm0taW5wdXQtbWVzc2FnZS1ncm91cD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICN2YWx1ZUluY2x1ZGVUZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZmRMYXlvdXRHcmlkQ29sIGNvbEdyb3c+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZkLWZvcm0taW5wdXQtbWVzc2FnZS1ncm91cD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZC1mb3JtLWNvbnRyb2xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkcC1jb25kaXRpb24tY291bnQtbWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21heENoYXJhY3RlcnNdPVwiX3J1bGVzLm1heENoYXJhY3RlcnNIaW50Q291bnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidwbGF0Zm9ybVZIRC5kZWZpbmVDb25kaXRpb25WYWx1ZVBsYWNlaG9sZGVyJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdGF0ZV09XCJ2YWx1ZU1vZGVsLmludmFsaWQgPyAnZXJyb3InIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJ1aWQgKyAnLScgKyB0eXBlICsgJy12YWx1ZS0nICsgaXRlbS5pZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJfdmFsaWRhdGVDb25kaXRpb25WYWx1ZShpdGVtLCAhIXZhbHVlTW9kZWwudmFsaWQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN2YWx1ZU1vZGVsPVwibmdNb2RlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIml0ZW0udmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidmFsdWVNb2RlbC5pbnZhbGlkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiY291bnRFcnJvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBpdGVtLnZhbHVlICYmIGl0ZW0udmFsdWUubGVuZ3RoIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZkLWZvcm0taW5wdXQtbWVzc2FnZS1ncm91cD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uLWNvbFwiIGZkTGF5b3V0R3JpZENvbCBjb2xHcm93PlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIFthcmlhTGFiZWxdPVwiJ3BsYXRmb3JtVkhELmRlZmluZUNvbmRpdGlvblJlbW92ZUNvbmRpdGlvbkJ1dHRvblRpdGxlJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgZmRUeXBlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgICAgICAgICBnbHlwaD1cImRlY2xpbmVcIlxuICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ3BsYXRmb3JtVkhELmRlZmluZUNvbmRpdGlvblJlbW92ZUNvbmRpdGlvbkJ1dHRvblRpdGxlJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZUNvbmRpdGlvbihpKVwiXG4gICAgICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZmQtbGF5b3V0LWdyaWQ+XG48L25nLWNvbnRhaW5lcj5cblxuPGZkLWxheW91dC1ncmlkIGNsYXNzPVwiY29uZGl0aW9uLXJvdyBuZXctY29uZGl0aW9uLXJvd1wiIFtub0dhcF09XCJ0cnVlXCI+XG4gICAgPGRpdiBmZExheW91dEdyaWRSb3c+XG4gICAgICAgIDxkaXYgZmRMYXlvdXRHcmlkQ29sIGNvbEdyb3c+Jm5ic3A7PC9kaXY+XG4gICAgICAgIDxkaXYgZmRMYXlvdXRHcmlkQ29sIGNsYXNzPVwiYWN0aW9uLWNvbFwiPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ3BsYXRmb3JtVkhELmRlZmluZUNvbmRpdGlvbkFkZENvbmRpdGlvbkJ1dHRvblRpdGxlJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ3BsYXRmb3JtVkhELmRlZmluZUNvbmRpdGlvbkFkZENvbmRpdGlvbkJ1dHRvbkxhYmVsJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ3BsYXRmb3JtVkhELmRlZmluZUNvbmRpdGlvbkFkZENvbmRpdGlvbkJ1dHRvblRpdGxlJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWRkRW1wdHlDb25kaXRpb24oKVwiXG4gICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9mZC1sYXlvdXQtZ3JpZD5cblxuPG5nLXRlbXBsYXRlICNjb25kaXRpb25TdHJhdGVneU9wdGlvbiBsZXQtdHlwZT1cInR5cGVcIiBsZXQtc3RyYXRlZ3k9XCJzdHJhdGVneVwiPlxuICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cInN0cmF0ZWd5LmtleVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInY29udGFpbnMnXCI+XG4gICAgICAgICAgICB7eyAncGxhdGZvcm1WSEQuZGVmaW5lQ29uZGl0aW9uQ29uZGl0aW9uU3RyYXRlZ3lMYWJlbENvbnRhaW5zJyB8IGZkVHJhbnNsYXRlIH19XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidlcXVhbFRvJ1wiPlxuICAgICAgICAgICAge3sgJ3BsYXRmb3JtVkhELmRlZmluZUNvbmRpdGlvbkNvbmRpdGlvblN0cmF0ZWd5TGFiZWxFcXVhbFRvJyB8IGZkVHJhbnNsYXRlIH19XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidiZXR3ZWVuJ1wiPlxuICAgICAgICAgICAge3sgJ3BsYXRmb3JtVkhELmRlZmluZUNvbmRpdGlvbkNvbmRpdGlvblN0cmF0ZWd5TGFiZWxCZXR3ZWVuJyB8IGZkVHJhbnNsYXRlIH19XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidzdGFydHNXaXRoJ1wiPlxuICAgICAgICAgICAge3sgJ3BsYXRmb3JtVkhELmRlZmluZUNvbmRpdGlvbkNvbmRpdGlvblN0cmF0ZWd5TGFiZWxTdGFydHNXaXRoJyB8IGZkVHJhbnNsYXRlIH19XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidlbmRzV2l0aCdcIj5cbiAgICAgICAgICAgIHt7ICdwbGF0Zm9ybVZIRC5kZWZpbmVDb25kaXRpb25Db25kaXRpb25TdHJhdGVneUxhYmVsRW5kc1dpdGgnIHwgZmRUcmFuc2xhdGUgfX1cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2xlc3NUaGFuJ1wiPlxuICAgICAgICAgICAge3sgJ3BsYXRmb3JtVkhELmRlZmluZUNvbmRpdGlvbkNvbmRpdGlvblN0cmF0ZWd5TGFiZWxMZXNzVGhhbicgfCBmZFRyYW5zbGF0ZSB9fVxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInbGVzc1RoYW5FcXVhbCdcIj5cbiAgICAgICAgICAgIHt7ICdwbGF0Zm9ybVZIRC5kZWZpbmVDb25kaXRpb25Db25kaXRpb25TdHJhdGVneUxhYmVsTGVzc1RoYW5FcXVhbCcgfCBmZFRyYW5zbGF0ZSB9fVxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInZ3JlYXRlclRoYW4nXCI+XG4gICAgICAgICAgICB7eyAncGxhdGZvcm1WSEQuZGVmaW5lQ29uZGl0aW9uQ29uZGl0aW9uU3RyYXRlZ3lMYWJlbEdyZWF0ZXJUaGFuJyB8IGZkVHJhbnNsYXRlIH19XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidncmVhdGVyVGhhbkVxdWFsJ1wiPlxuICAgICAgICAgICAge3sgJ3BsYXRmb3JtVkhELmRlZmluZUNvbmRpdGlvbkNvbmRpdGlvblN0cmF0ZWd5TGFiZWxHcmVhdGVyVGhhbkVxdWFsJyB8IGZkVHJhbnNsYXRlIH19XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidlbXB0eSdcIj5cbiAgICAgICAgICAgIHt7ICdwbGF0Zm9ybVZIRC5kZWZpbmVDb25kaXRpb25Db25kaXRpb25TdHJhdGVneUxhYmVsRW1wdHknIHwgZmRUcmFuc2xhdGUgfX1cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ25vdF9lcXVhbFRvJ1wiPlxuICAgICAgICAgICAge3sgJ3BsYXRmb3JtVkhELmRlZmluZUNvbmRpdGlvbkNvbmRpdGlvblN0cmF0ZWd5TGFiZWxOb3RFcXVhbFRvJyB8IGZkVHJhbnNsYXRlIH19XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidub3RfZW1wdHknXCI+XG4gICAgICAgICAgICB7eyAncGxhdGZvcm1WSEQuZGVmaW5lQ29uZGl0aW9uQ29uZGl0aW9uU3RyYXRlZ3lMYWJlbE5vdEVtcHR5JyB8IGZkVHJhbnNsYXRlIH19XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNjb3VudEVycm9yIGxldC1jb3VudD5cbiAgICA8ZmQtZm9ybS1tZXNzYWdlIHR5cGU9XCJlcnJvclwiICpuZ0lmPVwiY291bnQgJiYgY291bnQgPiA3XCI+XG4gICAgICAgIHt7ICdwbGF0Zm9ybVZIRC5kZWZpbmVDb25kaXRpb25NYXhDb3VudEVycm9yJyB8IGZkVHJhbnNsYXRlIDogeyBjb3VudDogNyB9IH19XG4gICAgPC9mZC1mb3JtLW1lc3NhZ2U+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2N1c3RvbVNlbGVjdFRlbXBsYXRlIGxldC10ZXh0VmFsdWU+XG4gICAge3sgdGV4dFZhbHVlIH19XG48L25nLXRlbXBsYXRlPlxuIl19
173
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmaW5lLXRhYi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL3NyYy9saWIvdmFsdWUtaGVscC1kaWFsb2cvY29tcG9uZW50cy9kZWZpbmUtdGFiL2RlZmluZS10YWIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9zcmMvbGliL3ZhbHVlLWhlbHAtZGlhbG9nL2NvbXBvbmVudHMvZGVmaW5lLXRhYi9kZWZpbmUtdGFiLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVEQUF1RDtBQUN2RCxPQUFPLEVBRUgsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFFTixpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDL0QsT0FBTyxFQUNILG9CQUFvQixFQUNwQiw4QkFBOEIsRUFDOUIsa0JBQWtCLEVBQ2xCLG9CQUFvQixFQUN2QixNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxtQkFBbUIsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3hILE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDaEYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzdELE9B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QW9CO3dCQUNwQixlQUFlO3FCQUNsQjs4QkFVRCxPQUFPO3NCQUROLEtBQUs7Z0JBS04sVUFBVTtzQkFEVCxLQUFLO2dCQUtOLFVBQVU7c0JBRFQsS0FBSztnQkFLTixjQUFjO3NCQURiLEtBQUs7Z0JBTU4sYUFBYTtzQkFEWixNQUFNO2dCQUtQLGFBQWE7c0JBRFosTUFBTTtnQkFLUCxlQUFlO3NCQURkLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbWVtYmVyLW9yZGVyaW5nICovXG5pbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ29tcG9uZW50LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbnB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT3V0cHV0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IE5nRm9yLCBOZ0lmLCBOZ1N3aXRjaCwgTmdTd2l0Y2hDYXNlLCBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2J1dHRvbic7XG5pbXBvcnQge1xuICAgIEZvcm1Db250cm9sQ29tcG9uZW50LFxuICAgIEZvcm1JbnB1dE1lc3NhZ2VHcm91cENvbXBvbmVudCxcbiAgICBGb3JtTGFiZWxDb21wb25lbnQsXG4gICAgRm9ybU1lc3NhZ2VDb21wb25lbnRcbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2Zvcm0nO1xuaW1wb3J0IHsgTGF5b3V0R3JpZENvbERpcmVjdGl2ZSwgTGF5b3V0R3JpZENvbXBvbmVudCwgTGF5b3V0R3JpZFJvd0RpcmVjdGl2ZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9sYXlvdXQtZ3JpZCc7XG5pbXBvcnQgeyBMaXN0R3JvdXBIZWFkZXJEaXJlY3RpdmUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvbGlzdCc7XG5pbXBvcnQgeyBPcHRpb25Db21wb25lbnQsIFNlbGVjdENvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9zZWxlY3QnO1xuaW1wb3J0IHsgVGl0bGVDb21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvdGl0bGUnO1xuaW1wb3J0IHsgRmRUcmFuc2xhdGVQaXBlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9pMThuJztcbmltcG9ydCB7IE1BWF9DSEFSQUNURVJfSElOVF9DT1VOVCB9IGZyb20gJy4uLy4uL2NvbnN0YW5zJztcbmltcG9ydCB7IENvbmRpdGlvbkNvdW50TWVzc2FnZURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvY29uZGl0aW9uLWNvdW50LW1lc3NhZ2UuZGlyZWN0aXZlJztcbmltcG9ydCB7XG4gICAgQmFzZUVudGl0eSxcbiAgICBWaGREZWZpbmVFeGNsdWRlU3RyYXRlZ3ksXG4gICAgVmhkRGVmaW5lSW5jbHVkZVN0cmF0ZWd5LFxuICAgIFZoZERlZmluZVR5cGUsXG4gICAgVmhkRXhjbHVkZWRFbnRpdHksXG4gICAgVmhkSW5jbHVkZWRFbnRpdHlcbn0gZnJvbSAnLi4vLi4vbW9kZWxzJztcbmltcG9ydCB7IFZoZEJhc2VUYWIgfSBmcm9tICcuLi9iYXNlLXRhYi92aGQtYmFzZS10YWIuY29tcG9uZW50JztcblxuY2xhc3MgRXh0ZW5kZWRCYXNlRW50aXR5IGV4dGVuZHMgQmFzZUVudGl0eSB7XG4gICAgaWQ/OiBudW1iZXI7XG59XG5cbmNsYXNzIEV4dGVuZGVkSW5jbHVkZWRFbnRpdHkgZXh0ZW5kcyBWaGRJbmNsdWRlZEVudGl0eSB7XG4gICAgaWQ/OiBudW1iZXI7XG59XG5cbmNsYXNzIEV4dGVuZGVkRXhjbHVkZWRFbnRpdHkgZXh0ZW5kcyBWaGRFeGNsdWRlZEVudGl0eSB7XG4gICAgaWQ/OiBudW1iZXI7XG59XG5cbmxldCB0aXRsZVVuaXF1ZUlkID0gMDtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZHAtZGVmaW5lLXRhYicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2RlZmluZS10YWIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2RlZmluZS10YWIuY29tcG9uZW50LnNjc3MnXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBUaXRsZUNvbXBvbmVudCxcbiAgICAgICAgTmdGb3IsXG4gICAgICAgIExheW91dEdyaWRDb21wb25lbnQsXG4gICAgICAgIExheW91dEdyaWRSb3dEaXJlY3RpdmUsXG4gICAgICAgIExheW91dEdyaWRDb2xEaXJlY3RpdmUsXG4gICAgICAgIEZvcm1MYWJlbENvbXBvbmVudCxcbiAgICAgICAgU2VsZWN0Q29tcG9uZW50LFxuICAgICAgICBGb3Jtc01vZHVsZSxcbiAgICAgICAgTmdJZixcbiAgICAgICAgTGlzdEdyb3VwSGVhZGVyRGlyZWN0aXZlLFxuICAgICAgICBPcHRpb25Db21wb25lbnQsXG4gICAgICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgICAgIEZvcm1JbnB1dE1lc3NhZ2VHcm91cENvbXBvbmVudCxcbiAgICAgICAgRm9ybUNvbnRyb2xDb21wb25lbnQsXG4gICAgICAgIENvbmRpdGlvbkNvdW50TWVzc2FnZURpcmVjdGl2ZSxcbiAgICAgICAgQnV0dG9uQ29tcG9uZW50LFxuICAgICAgICBOZ1N3aXRjaCxcbiAgICAgICAgTmdTd2l0Y2hDYXNlLFxuICAgICAgICBGb3JtTWVzc2FnZUNvbXBvbmVudCxcbiAgICAgICAgRmRUcmFuc2xhdGVQaXBlXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBEZWZpbmVUYWJDb21wb25lbnQgZXh0ZW5kcyBWaGRCYXNlVGFiIGltcGxlbWVudHMgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0IHtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByb3RlY3RlZCBkZWZhdWx0SWQgPSBgZmQtdGl0bGUtaWQtJHt0aXRsZVVuaXF1ZUlkKyt9YDtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByb3RlY3RlZCBkZWZhdWx0U2VsZWN0SWQgPSBgZmQtc2VsZWN0LXRpdGxlLWlkLSR7dGl0bGVVbmlxdWVJZCsrfWA7XG5cbiAgICAvKiogdGl0bGUgaWQgZm9yIHRoZSB0YWJsZSAgKi9cbiAgICBASW5wdXQoKVxuICAgIHRpdGxlSWQ6IHN0cmluZyA9IHRoaXMuZGVmYXVsdElkO1xuXG4gICAgLyoqIHNlZWxjdGVkIHZhbHVlIGlkIGZvciB0aGUgdGFibGUgICovXG4gICAgQElucHV0KClcbiAgICBzZWxlY3RlZElkOiBzdHJpbmcgPSB0aGlzLmRlZmF1bHRTZWxlY3RJZDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQElucHV0KClcbiAgICBjb25kaXRpb25zOiBFeHRlbmRlZEJhc2VFbnRpdHlbXSA9IFtdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASW5wdXQoKVxuICAgIHN0cmF0ZWd5TGFiZWxzOiB7IFtrZXkgaW4ga2V5b2YgKHR5cGVvZiBWaGREZWZpbmVJbmNsdWRlU3RyYXRlZ3kgfCB0eXBlb2YgVmhkRGVmaW5lRXhjbHVkZVN0cmF0ZWd5KV0/OiBzdHJpbmcgfSA9XG4gICAgICAgIHt9O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBpbmNsdWRlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8RXh0ZW5kZWRJbmNsdWRlZEVudGl0eVtdPiA9IG5ldyBFdmVudEVtaXR0ZXI8RXh0ZW5kZWRJbmNsdWRlZEVudGl0eVtdPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBleGNsdWRlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8RXh0ZW5kZWRFeGNsdWRlZEVudGl0eVtdPiA9IG5ldyBFdmVudEVtaXR0ZXI8RXh0ZW5kZWRFeGNsdWRlZEVudGl0eVtdPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBjb25kaXRpb25DaGFuZ2U6IEV2ZW50RW1pdHRlcjxCYXNlRW50aXR5W10+ID0gbmV3IEV2ZW50RW1pdHRlcjxCYXNlRW50aXR5W10+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9jb25kaXRpb25zOiBFeHRlbmRlZEJhc2VFbnRpdHlbXSA9IFtdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfZGVmaW5lUGFuZWxTdGF0ZSA9IHtcbiAgICAgICAgaW5jbHVkZWQ6IGZhbHNlLFxuICAgICAgICBleGNsdWRlZDogZmFsc2VcbiAgICB9O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfcnVsZXMgPSB7XG4gICAgICAgIG1heENoYXJhY3RlcnNIaW50Q291bnQ6IE1BWF9DSEFSQUNURVJfSElOVF9DT1VOVFxuICAgIH07XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfc3RyYXRlZ3lJbmNsdWRlVmFsdWVzID0gVmhkRGVmaW5lSW5jbHVkZVN0cmF0ZWd5O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfc3RyYXRlZ3lFeGNsdWRlVmFsdWVzID0gVmhkRGVmaW5lRXhjbHVkZVN0cmF0ZWd5O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfZGVmaW5lVHlwZXMgPSBWaGREZWZpbmVUeXBlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfaW5jbHVkZVN0cmF0ZWd5OiBTdGF0ZWd5SXRlbVtdID0gW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9leGNsdWRlU3RyYXRlZ3k6IFN0YXRlZ3lJdGVtW10gPSBbXTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAoJ2NvbmRpdGlvbnMnIGluIGNoYW5nZXMpIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbmRpdGlvbnMgPSAodGhpcy5jb25kaXRpb25zIGFzIEV4dGVuZGVkSW5jbHVkZWRFbnRpdHlbXSkgfHwgW107XG4gICAgICAgICAgICB0aGlzLl9pbml0aWFsaXplQ29uZGl0aW9ucygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3JlZnJlc2hTdHJhdGVnaWVzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gVHJhY2sgZnVuY3Rpb24gZm9yIG1haW4gZGF0YSAqL1xuICAgIF90cmFja0J5S2V5QW5kVHlwZShcbiAgICAgICAgX2luZGV4OiBudW1iZXIsXG4gICAgICAgIGl0ZW06IEV4dGVuZGVkSW5jbHVkZWRFbnRpdHkgfCBFeHRlbmRlZEV4Y2x1ZGVkRW50aXR5XG4gICAgKTogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtLmlkICsgaXRlbS5rZXkgKyBpdGVtLnR5cGU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX29uU2VsZWN0U3RyYXRlZ3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2ZpbHRlckNoYW5nZWQoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9maWx0ZXJDaGFuZ2VkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbmRpdGlvbkNoYW5nZS5lbWl0KHRoaXMuX2NvbmRpdGlvbnMpO1xuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGFkZEVtcHR5Q29uZGl0aW9uKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpdGVtID0gbmV3IEV4dGVuZGVkQmFzZUVudGl0eSgpO1xuICAgICAgICBpdGVtLnZhbHVlID0gJyc7XG4gICAgICAgIHRoaXMuX2NvbmRpdGlvbnMucHVzaChpdGVtKTtcbiAgICAgICAgdGhpcy5fZmlsdGVyQ2hhbmdlZCgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVtb3ZlQ29uZGl0aW9uKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY29uZGl0aW9ucy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB0aGlzLl9pbml0aWFsaXplQ29uZGl0aW9ucygpO1xuICAgICAgICB0aGlzLl9maWx0ZXJDaGFuZ2VkKCk7XG4gICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3ZhbGlkYXRlQ29uZGl0aW9uVmFsdWUoaXRlbTogRXh0ZW5kZWRJbmNsdWRlZEVudGl0eSB8IEV4dGVuZGVkRXhjbHVkZWRFbnRpdHksIHZhbGlkOiBib29sZWFuIHwgYm9vbGVhbltdKTogdm9pZCB7XG4gICAgICAgIGl0ZW0udmFsaWQgPSBBcnJheS5pc0FycmF5KHZhbGlkKSA/IHZhbGlkLmV2ZXJ5KEJvb2xlYW4pIDogISF2YWxpZDtcbiAgICAgICAgdGhpcy5fZmlsdGVyQ2hhbmdlZCgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcmVmcmVzaFN0cmF0ZWdpZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2luY2x1ZGVTdHJhdGVneSA9IE9iamVjdC5rZXlzKFZoZERlZmluZUluY2x1ZGVTdHJhdGVneSkubWFwKChrZXkpID0+ICh7XG4gICAgICAgICAgICBrZXksXG4gICAgICAgICAgICB0eXBlOiBWaGREZWZpbmVUeXBlLmluY2x1ZGVcbiAgICAgICAgfSkpO1xuICAgICAgICB0aGlzLl9leGNsdWRlU3RyYXRlZ3kgPSBPYmplY3Qua2V5cyhWaGREZWZpbmVFeGNsdWRlU3RyYXRlZ3kpLm1hcCgoa2V5KSA9PiAoe1xuICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgdHlwZTogVmhkRGVmaW5lVHlwZS5leGNsdWRlXG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2luaXRpYWxpemVDb25kaXRpb25zKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fY29uZGl0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuYWRkRW1wdHlDb25kaXRpb24oKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuaW50ZXJmYWNlIFN0YXRlZ3lJdGVtIHtcbiAgICBrZXk6IHN0cmluZztcbiAgICB0eXBlOiBWaGREZWZpbmVUeXBlO1xufVxuIiwiPGg1IFtpZF09XCJ0aXRsZUlkXCIgcm9sZT1cImhlYWRpbmdcIiBhcmlhLWxldmVsPVwiNVwiIGZkLXRpdGxlIGNsYXNzPVwiZGVmaW5lLWNvbmRpdGlvbi10aXRsZVwiPlxuICAgIHt7ICdwbGF0Zm9ybVZIRC5kZWZpbmVDb25kaXRpb25UaXRsZScgfCBmZFRyYW5zbGF0ZSB9fVxuPC9oNT5cbjxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgX2NvbmRpdGlvbnM7IHRyYWNrQnk6IF90cmFja0J5S2V5QW5kVHlwZTsgaW5kZXggYXMgaVwiPlxuICAgIDxmZC1sYXlvdXQtZ3JpZCBjbGFzcz1cImNvbmRpdGlvbi1yb3dcIiBbbm9HYXBdPVwidHJ1ZVwiPlxuICAgICAgICA8ZGl2IGZkTGF5b3V0R3JpZFJvdz5cbiAgICAgICAgICAgIDxkaXYgW2ZkTGF5b3V0R3JpZENvbF09XCI1XCI+XG4gICAgICAgICAgICAgICAgPGxhYmVsIGlkPVwiQ09ORElUSU9OUEFORUxfT1BFUkFUT1JfTEFCRUxcIiBmZC1mb3JtLWxhYmVsIGNsYXNzPVwiZmRwLXZhbHVlLWhlbHAtZGlhbG9nX19oaWRkZW5fbGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgICAgQ09ORElUSU9OUEFORUxfT1BFUkFUT1JfTEFCRUxcbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBbaWRdPVwic2VsZWN0ZWRJZFwiIGZkLWZvcm0tbGFiZWwgY2xhc3M9XCJmZHAtdmFsdWUtaGVscC1kaWFsb2dfX2hpZGRlbl9sYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgJ3BsYXRmb3JtVkhELmRlZmluZUNvbmRpdGlvblNlbGVjdGVkVmFsdWVIaWRkZW5BMTF5TGFiZWwnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBmZFRyYW5zbGF0ZSA6IHsgdmFsdWU6IGl0ZW0uc3RyYXRlZ3kgfVxuICAgICAgICAgICAgICAgICAgICB9fTwvbGFiZWxcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGZkLXNlbGVjdFxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInZoZC1jb25kaXRpb24tZmlsdGVyc1wiXG4gICAgICAgICAgICAgICAgICAgIGZkTGF5b3V0R3JpZENvbFxuICAgICAgICAgICAgICAgICAgICBjb2xHcm93XG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5mZC1zZWxlY3QtY3VzdG9tLWNsYXNzXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgI3N0dHJcbiAgICAgICAgICAgICAgICAgICAgW2NvbnRyb2xUZW1wbGF0ZV09XCJjdXN0b21TZWxlY3RUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cInVpZCArICctJyArIHR5cGUgKyAnLXN0cmF0ZWd5LScgKyBpdGVtLmlkXCJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJpdGVtLnN0cmF0ZWd5XCJcbiAgICAgICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cIl9maWx0ZXJDaGFuZ2VkKClcIlxuICAgICAgICAgICAgICAgICAgICByb2xlPVwiY29tYm9ib3hcIlxuICAgICAgICAgICAgICAgICAgICBhcmlhLXJvbGVkZXNjcmlwdGlvbj1cInNlbGVjdFwiXG4gICAgICAgICAgICAgICAgICAgIGFyaWEtaGFzcG9wdXA9XCJsaXN0Ym94XCJcbiAgICAgICAgICAgICAgICAgICAgW2FyaWFMYWJlbGxlZEJ5XT1cInRpdGxlSWQgKyAnICcgKyAnQ09ORElUSU9OUEFORUxfT1BFUkFUT1JfTEFCRUwnICsgJyAnICsgc2VsZWN0ZWRJZFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiX2luY2x1ZGVTdHJhdGVneS5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBmZC1saXN0LWdyb3VwLWhlYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAncGxhdGZvcm1WSEQuZGVmaW5lQ29uZGl0aW9uQ29uZGl0aW9uc0dyb3VwSGVhZGVySW5jbHVkZScgfCBmZFRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBmZC1vcHRpb24gKm5nRm9yPVwibGV0IHN0cmF0ZWd5IG9mIF9pbmNsdWRlU3RyYXRlZ3lcIiBbdmFsdWVdPVwic3RyYXRlZ3kua2V5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJjb25kaXRpb25TdHJhdGVneU9wdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IHR5cGU6IF9kZWZpbmVUeXBlcy5pbmNsdWRlLCBzdHJhdGVneTogc3RyYXRlZ3kgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJfZXhjbHVkZVN0cmF0ZWd5Lmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGZkLWxpc3QtZ3JvdXAtaGVhZGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdwbGF0Zm9ybVZIRC5kZWZpbmVDb25kaXRpb25Db25kaXRpb25zR3JvdXBIZWFkZXJFeGNsdWRlJyB8IGZkVHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGZkLW9wdGlvbiAqbmdGb3I9XCJsZXQgc3RyYXRlZ3kgb2YgX2V4Y2x1ZGVTdHJhdGVneVwiIFt2YWx1ZV09XCJzdHJhdGVneS5rZXlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbmRpdGlvblN0cmF0ZWd5T3B0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgdHlwZTogX2RlZmluZVR5cGVzLmV4Y2x1ZGUsIHN0cmF0ZWd5OiBzdHJhdGVneSB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2ZkLXNlbGVjdD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGZkTGF5b3V0R3JpZENvbFxuICAgICAgICAgICAgICAgIGNvbEdyb3dcbiAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgICBpdGVtLnN0cmF0ZWd5ICE9PSBfc3RyYXRlZ3lJbmNsdWRlVmFsdWVzLmVtcHR5ICYmIGl0ZW0uc3RyYXRlZ3kgIT09IF9zdHJhdGVneUV4Y2x1ZGVWYWx1ZXMubm90X2VtcHR5XG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8ZGl2IGZkTGF5b3V0R3JpZFJvdz5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW0uc3RyYXRlZ3kgPT09IF9zdHJhdGVneUluY2x1ZGVWYWx1ZXMuYmV0d2VlbjsgZWxzZSB2YWx1ZUluY2x1ZGVUZW1wbGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBmZExheW91dEdyaWRDb2wgY29sR3Jvdz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmQtZm9ybS1pbnB1dC1tZXNzYWdlLWdyb3VwIFt0cmlnZ2Vyc109XCJbJ2ZvY3VzaW4nLCAnZm9jdXNvdXQnXVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkLWZvcm0tY29udHJvbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmRwLWNvbmRpdGlvbi1jb3VudC1tZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF4Q2hhcmFjdGVyc109XCJfcnVsZXMubWF4Q2hhcmFjdGVyc0hpbnRDb3VudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ3BsYXRmb3JtVkhELmRlZmluZUNvbmRpdGlvbkZyb21QbGFjZWhvbGRlcicgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cImZyb21cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdGF0ZV09XCJmcm9tTW9kZWwuaW52YWxpZCA/ICdlcnJvcicgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cInVpZCArICctJyArIHR5cGUgKyAnLWZyb20tJyArIGl0ZW0uaWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwiX3ZhbGlkYXRlQ29uZGl0aW9uVmFsdWUoaXRlbSwgWyEhZnJvbU1vZGVsLnZhbGlkLCAhIXRvTW9kZWwudmFsaWRdKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjZnJvbU1vZGVsPVwibmdNb2RlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIml0ZW0udmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJjb3VudEVycm9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogaXRlbS52YWx1ZSAmJiBpdGVtLnZhbHVlLmxlbmd0aCB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZmQtZm9ybS1pbnB1dC1tZXNzYWdlLWdyb3VwPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGZkTGF5b3V0R3JpZENvbCBjb2xHcm93PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZC1mb3JtLWlucHV0LW1lc3NhZ2UtZ3JvdXAgW3RyaWdnZXJzXT1cIlsnZm9jdXNpbicsICdmb2N1c291dCddXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmQtZm9ybS1jb250cm9sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZHAtY29uZGl0aW9uLWNvdW50LW1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXhDaGFyYWN0ZXJzXT1cIl9ydWxlcy5tYXhDaGFyYWN0ZXJzSGludENvdW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCIncGxhdGZvcm1WSEQuZGVmaW5lQ29uZGl0aW9uVG9QbGFjZWhvbGRlcicgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0YXRlXT1cInRvTW9kZWwuaW52YWxpZCA/ICdlcnJvcicgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cInVpZCArICctJyArIHR5cGUgKyAnLXRvLScgKyBpdGVtLmlkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChibHVyKT1cIl92YWxpZGF0ZUNvbmRpdGlvblZhbHVlKGl0ZW0sIFshIWZyb21Nb2RlbC52YWxpZCwgISF0b01vZGVsLnZhbGlkXSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3RvTW9kZWw9XCJuZ01vZGVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiaXRlbS52YWx1ZVRvXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiY291bnRFcnJvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGl0ZW0udmFsdWUgJiYgaXRlbS52YWx1ZS5sZW5ndGggfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZkLWZvcm0taW5wdXQtbWVzc2FnZS1ncm91cD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICN2YWx1ZUluY2x1ZGVUZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZmRMYXlvdXRHcmlkQ29sIGNvbEdyb3c+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZkLWZvcm0taW5wdXQtbWVzc2FnZS1ncm91cD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZC1mb3JtLWNvbnRyb2xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkcC1jb25kaXRpb24tY291bnQtbWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21heENoYXJhY3RlcnNdPVwiX3J1bGVzLm1heENoYXJhY3RlcnNIaW50Q291bnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidwbGF0Zm9ybVZIRC5kZWZpbmVDb25kaXRpb25WYWx1ZVBsYWNlaG9sZGVyJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdGF0ZV09XCJ2YWx1ZU1vZGVsLmludmFsaWQgPyAnZXJyb3InIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJ1aWQgKyAnLScgKyB0eXBlICsgJy12YWx1ZS0nICsgaXRlbS5pZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJfdmFsaWRhdGVDb25kaXRpb25WYWx1ZShpdGVtLCAhIXZhbHVlTW9kZWwudmFsaWQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN2YWx1ZU1vZGVsPVwibmdNb2RlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIml0ZW0udmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidmFsdWVNb2RlbC5pbnZhbGlkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiY291bnRFcnJvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBpdGVtLnZhbHVlICYmIGl0ZW0udmFsdWUubGVuZ3RoIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZkLWZvcm0taW5wdXQtbWVzc2FnZS1ncm91cD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uLWNvbFwiIGZkTGF5b3V0R3JpZENvbCBjb2xHcm93PlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIFthcmlhTGFiZWxdPVwiJ3BsYXRmb3JtVkhELmRlZmluZUNvbmRpdGlvblJlbW92ZUNvbmRpdGlvbkJ1dHRvblRpdGxlJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgZmRUeXBlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgICAgICAgICBnbHlwaD1cImRlY2xpbmVcIlxuICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ3BsYXRmb3JtVkhELmRlZmluZUNvbmRpdGlvblJlbW92ZUNvbmRpdGlvbkJ1dHRvblRpdGxlJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZUNvbmRpdGlvbihpKVwiXG4gICAgICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZmQtbGF5b3V0LWdyaWQ+XG48L25nLWNvbnRhaW5lcj5cblxuPGZkLWxheW91dC1ncmlkIGNsYXNzPVwiY29uZGl0aW9uLXJvdyBuZXctY29uZGl0aW9uLXJvd1wiIFtub0dhcF09XCJ0cnVlXCI+XG4gICAgPGRpdiBmZExheW91dEdyaWRSb3c+XG4gICAgICAgIDxkaXYgZmRMYXlvdXRHcmlkQ29sIGNvbEdyb3c+Jm5ic3A7PC9kaXY+XG4gICAgICAgIDxkaXYgZmRMYXlvdXRHcmlkQ29sIGNsYXNzPVwiYWN0aW9uLWNvbFwiPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ3BsYXRmb3JtVkhELmRlZmluZUNvbmRpdGlvbkFkZENvbmRpdGlvbkJ1dHRvblRpdGxlJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ3BsYXRmb3JtVkhELmRlZmluZUNvbmRpdGlvbkFkZENvbmRpdGlvbkJ1dHRvbkxhYmVsJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ3BsYXRmb3JtVkhELmRlZmluZUNvbmRpdGlvbkFkZENvbmRpdGlvbkJ1dHRvblRpdGxlJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWRkRW1wdHlDb25kaXRpb24oKVwiXG4gICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9mZC1sYXlvdXQtZ3JpZD5cblxuPG5nLXRlbXBsYXRlICNjb25kaXRpb25TdHJhdGVneU9wdGlvbiBsZXQtdHlwZT1cInR5cGVcIiBsZXQtc3RyYXRlZ3k9XCJzdHJhdGVneVwiPlxuICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cInN0cmF0ZWd5LmtleVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInY29udGFpbnMnXCI+XG4gICAgICAgICAgICB7eyAncGxhdGZvcm1WSEQuZGVmaW5lQ29uZGl0aW9uQ29uZGl0aW9uU3RyYXRlZ3lMYWJlbENvbnRhaW5zJyB8IGZkVHJhbnNsYXRlIH19XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidlcXVhbFRvJ1wiPlxuICAgICAgICAgICAge3sgJ3BsYXRmb3JtVkhELmRlZmluZUNvbmRpdGlvbkNvbmRpdGlvblN0cmF0ZWd5TGFiZWxFcXVhbFRvJyB8IGZkVHJhbnNsYXRlIH19XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidiZXR3ZWVuJ1wiPlxuICAgICAgICAgICAge3sgJ3BsYXRmb3JtVkhELmRlZmluZUNvbmRpdGlvbkNvbmRpdGlvblN0cmF0ZWd5TGFiZWxCZXR3ZWVuJyB8IGZkVHJhbnNsYXRlIH19XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidzdGFydHNXaXRoJ1wiPlxuICAgICAgICAgICAge3sgJ3BsYXRmb3JtVkhELmRlZmluZUNvbmRpdGlvbkNvbmRpdGlvblN0cmF0ZWd5TGFiZWxTdGFydHNXaXRoJyB8IGZkVHJhbnNsYXRlIH19XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidlbmRzV2l0aCdcIj5cbiAgICAgICAgICAgIHt7ICdwbGF0Zm9ybVZIRC5kZWZpbmVDb25kaXRpb25Db25kaXRpb25TdHJhdGVneUxhYmVsRW5kc1dpdGgnIHwgZmRUcmFuc2xhdGUgfX1cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2xlc3NUaGFuJ1wiPlxuICAgICAgICAgICAge3sgJ3BsYXRmb3JtVkhELmRlZmluZUNvbmRpdGlvbkNvbmRpdGlvblN0cmF0ZWd5TGFiZWxMZXNzVGhhbicgfCBmZFRyYW5zbGF0ZSB9fVxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInbGVzc1RoYW5FcXVhbCdcIj5cbiAgICAgICAgICAgIHt7ICdwbGF0Zm9ybVZIRC5kZWZpbmVDb25kaXRpb25Db25kaXRpb25TdHJhdGVneUxhYmVsTGVzc1RoYW5FcXVhbCcgfCBmZFRyYW5zbGF0ZSB9fVxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInZ3JlYXRlclRoYW4nXCI+XG4gICAgICAgICAgICB7eyAncGxhdGZvcm1WSEQuZGVmaW5lQ29uZGl0aW9uQ29uZGl0aW9uU3RyYXRlZ3lMYWJlbEdyZWF0ZXJUaGFuJyB8IGZkVHJhbnNsYXRlIH19XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidncmVhdGVyVGhhbkVxdWFsJ1wiPlxuICAgICAgICAgICAge3sgJ3BsYXRmb3JtVkhELmRlZmluZUNvbmRpdGlvbkNvbmRpdGlvblN0cmF0ZWd5TGFiZWxHcmVhdGVyVGhhbkVxdWFsJyB8IGZkVHJhbnNsYXRlIH19XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidlbXB0eSdcIj5cbiAgICAgICAgICAgIHt7ICdwbGF0Zm9ybVZIRC5kZWZpbmVDb25kaXRpb25Db25kaXRpb25TdHJhdGVneUxhYmVsRW1wdHknIHwgZmRUcmFuc2xhdGUgfX1cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ25vdF9lcXVhbFRvJ1wiPlxuICAgICAgICAgICAge3sgJ3BsYXRmb3JtVkhELmRlZmluZUNvbmRpdGlvbkNvbmRpdGlvblN0cmF0ZWd5TGFiZWxOb3RFcXVhbFRvJyB8IGZkVHJhbnNsYXRlIH19XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidub3RfZW1wdHknXCI+XG4gICAgICAgICAgICB7eyAncGxhdGZvcm1WSEQuZGVmaW5lQ29uZGl0aW9uQ29uZGl0aW9uU3RyYXRlZ3lMYWJlbE5vdEVtcHR5JyB8IGZkVHJhbnNsYXRlIH19XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNjb3VudEVycm9yIGxldC1jb3VudD5cbiAgICA8ZmQtZm9ybS1tZXNzYWdlIHR5cGU9XCJlcnJvclwiICpuZ0lmPVwiY291bnQgJiYgY291bnQgPiA3XCI+XG4gICAgICAgIHt7ICdwbGF0Zm9ybVZIRC5kZWZpbmVDb25kaXRpb25NYXhDb3VudEVycm9yJyB8IGZkVHJhbnNsYXRlIDogeyBjb3VudDogNyB9IH19XG4gICAgPC9mZC1mb3JtLW1lc3NhZ2U+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2N1c3RvbVNlbGVjdFRlbXBsYXRlIGxldC10ZXh0VmFsdWU+XG4gICAge3sgdGV4dFZhbHVlIH19XG48L25nLXRlbXBsYXRlPlxuIl19