ng-configcat-publicapi-ui 4.0.2 → 4.0.3

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.
@@ -57,11 +57,11 @@ export class PercentageOptionsComponent {
57
57
  return !this.percentageEvaluationAttribute ? 'Identifier' : this.percentageEvaluationAttribute;
58
58
  }
59
59
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.1", ngImport: i0, type: PercentageOptionsComponent, deps: [{ token: i1.FormGenerator }], target: i0.ɵɵFactoryTarget.Component }); }
60
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.1", type: PercentageOptionsComponent, selector: "app-percentage-options", inputs: { formArray: "formArray", flagState: "flagState", featureFlagLimitations: "featureFlagLimitations", showPercentageEvaluationAttribute: "showPercentageEvaluationAttribute", percentageEvaluationAttribute: "percentageEvaluationAttribute", isPercentageOnlyTargetingRule: "isPercentageOnlyTargetingRule" }, outputs: { lastPercentageOptionLeft: "lastPercentageOptionLeft", subscriptionLimitReached: "subscriptionLimitReached", changePercentageEvaluationAttributeRequested: "changePercentageEvaluationAttributeRequested" }, ngImport: i0, template: "<div *ngFor=\"let percentageOption of formArray.controls; let i = index\" class=\"targeting-rule-line smallest-form-field\">\n <div class=\"wrapper-group\">\n <div class=\"targeting-rule-component flex\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\" class=\"perc-input\">\n <input matInput type=\"number\" [formControl]=\"percentageOption.controls.percentage\" min=\"0\" max=\"100\"\n (input)=\"percentageChanged(i)\" matTooltip=\"Percentage\"\n digitOnly inputDisplayNormalizer>\n <span matTextSuffix>%</span>\n <mat-error *ngIf=\"percentageOption.controls.percentage.invalid\">\n {{FormHelper.getErrorMessage(percentageOption.controls.percentage)}}\n </mat-error>\n </mat-form-field>\n </div>\n <div *ngIf=\"!showPercentageEvaluationAttribute\" class=\"attribute-wrapper flex\"> of&nbsp;<a\n href=\"https://configcat.com/docs/V2/targeting/percentage-options/\" target=\"_blank\"\n rel=\"noopener noreferrer\">users</a>\n </div>\n <div *ngIf=\"showPercentageEvaluationAttribute\" class=\"attribute-wrapper wrapper-group flex\">\n <div class=\"small-pad-right\">of all</div>\n <div class=\"small-pad-right\">\n <button mat-flat-button type=\"button\" [disabled]=\"flagState.readOnly\" class=\"attribute\"\n matTooltip=\"Change percentage evaluation attribute\"\n (click)=\"changePercentageEvaluationAttribute()\">{{getPercentageEvaluationAttribute()}}</button>\n </div>\n <div>attributes</div>\n </div>\n <div class=\"delete-button\" *ngIf=\"!flagState.readOnly\">\n <button type=\"button\" mat-icon-button matTooltip=\"Remove option\" (click)=\"remove(i)\">\n <mat-icon>cancel</mat-icon>\n </button>\n </div>\n </div>\n\n <app-feature-flag-value class=\"value\" [flagState]=\"flagState\" tooltip=\"Served value\"\n [formGroup]=\"percentageOption.controls.value\"\n [featureFlagLimitations]=\"featureFlagLimitations\"></app-feature-flag-value>\n</div>\n<mat-error *ngIf=\"formArray.invalid && !!FormHelper.getErrorMessage(formArray)\" class=\"sumerror\">\n {{FormHelper.getErrorMessage(formArray)}}\n</mat-error>\n<div class=\"small small-pad-bottom\" style=\"opacity: .6;\"\n *ngIf=\"showPercentageEvaluationAttribute && isPercentageOnlyTargetingRule\">\n If the {{getPercentageEvaluationAttribute()}} attribute is not set in the\n <a href=\"https://configcat.com/docs/V2/targeting/user-object/\" target=\"_blank\" rel=\"noopener noreferrer\">User\n Object</a>, the percentage options are skipped and the evaluation continues with the next rule.\n</div>\n<div class=\"small small-pad-bottom\" style=\"opacity: .6;\"\n *ngIf=\"showPercentageEvaluationAttribute && !isPercentageOnlyTargetingRule\">\n If the {{getPercentageEvaluationAttribute()}} attribute is not set in the\n <a href=\"https://configcat.com/docs/V2/targeting/user-object/\" target=\"_blank\" rel=\"noopener noreferrer\">User\n Object</a>, the current targeting rule is skipped and the evaluation continues with the next one.\n</div>\n\n<div class=\"add-perc\" *ngIf=\"flagState.settingValue.setting.settingType !== SettingType.Boolean && !flagState.readOnly\">\n <div class=\"enter-sign\"><mat-icon>subdirectory_arrow_right</mat-icon></div>\n <div (click)=\"addOption()\" class=\"add-btn add-perc-btn\">+ % OPTION</div>\n</div>", styles: [".targeting-rule-line{display:flex;flex-wrap:wrap;margin:2px 0}.targeting-rule-line .wrapper-group{display:flex;flex-wrap:wrap}.targeting-rule-line .wrapper-group.grow{flex-grow:1}.targeting-rule-component{margin:2px 0;width:212px}.targeting-rule-component[hidden]{display:none}.targeting-rule-component.small{width:102px}.targeting-rule-component.grow{flex-grow:1}.targeting-rule-component.pad-right{margin-right:8px}.targeting-rule-component mat-form-field{width:100%;font-size:12px}.delete-button{margin-top:4px;color:#b1b1b1}.delete-button mat-icon{font-size:18px;height:18px;width:18px}.explanation-wrapper{display:flex;margin-top:2px}.explanation-wrapper .explanation{min-width:44px;margin-top:6px;margin-right:8px}@media (max-width: 500px){.targeting-rule-component{max-width:calc(100% - 4px);width:160px}.targeting-rule-component.small{width:78px}.targeting-rule-component.pad-right{margin-right:4px}}\n", ".targeting-rule-line{--mdc-text-button-container-height: 24px;--mdc-filled-button-container-height: 24px;--mdc-outlined-button-container-height: 24px;--mdc-protected-button-container-height: 24px;--mat-text-button-touch-target-display: none;--mat-filled-button-touch-target-display: none;--mat-protected-button-touch-target-display: none;--mat-outlined-button-touch-target-display: none;--mat-icon-button-touch-target-display: none;align-items:center}.targeting-rule-line .mat-mdc-icon-button.mat-mdc-button-base{--mdc-icon-button-state-layer-size: 32px;width:var(--mdc-icon-button-state-layer-size);height:var(--mdc-icon-button-state-layer-size);padding:4px}.targeting-rule-line .flex{display:flex;align-items:center;margin-right:4px}.targeting-rule-line .targeting-rule-component{max-width:84px}.targeting-rule-line .value{flex-grow:1}.targeting-rule-line .perc-input{margin-right:5px}.add-perc{display:flex;width:100%;padding-top:5px}.add-perc .enter-sign{color:#ccc;margin:2px 3px 0 8px}.add-perc .enter-sign mat-icon{font-size:16px;width:16px;height:16px}.add-perc .add-perc-btn{min-width:63px;padding:3px 4px 2px 8px}.sumerror{margin-bottom:8px;font-size:12px}.small{font-size:.7rem}.attribute-wrapper{color:#585858}.attribute{border:1px solid #c9c9c9;background-color:#fcfcfc;text-transform:none;color:#585858;font-size:12px;padding:0 5px}.small-pad-right{margin-right:5px}.small-pad-bottom{margin-bottom:5px}.delete-button{margin-top:3px}\n", ".chip-container{display:flex;margin-top:2px;align-self:start}.chip-container.fixed-width{width:110px}.chip-container.fixed-width-wide{width:130px}.chip-container mat-chip-set{margin-top:2px;width:100%}.chip-container mat-chip-set mat-chip{width:100%;margin-top:0;margin-bottom:0;height:24px;font-size:12px;background-color:#d1e3fa;opacity:1}.chip-container .add-btn mat-chip{background-color:transparent;border:1px dashed #afaeae;color:#afaeae;cursor:pointer}.chip-container .enter-sign{color:#ccc;margin:6px 3px 0 8px}.chip-container .enter-sign mat-icon{font-size:16px;width:16px;height:16px}\n", ".add-btn{cursor:pointer;background-color:transparent;display:flex;font-size:10px;align-items:center;border:1px dashed rgb(168,168,168);color:#979797;border-radius:15px}.add-btn:hover{background-color:#ebebeb}\n"], dependencies: [{ 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: i3.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: i3.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i3.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i4.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i8.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: i9.InputDisplayNormalizerDirective, selector: "input[inputDisplayNormalizer]" }, { kind: "component", type: i10.FeatureFlagValueComponent, selector: "app-feature-flag-value", inputs: ["formGroup", "flagState", "featureFlagLimitations", "isPrerequisite", "tooltip"] }] }); }
60
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.1", type: PercentageOptionsComponent, selector: "app-percentage-options", inputs: { formArray: "formArray", flagState: "flagState", featureFlagLimitations: "featureFlagLimitations", showPercentageEvaluationAttribute: "showPercentageEvaluationAttribute", percentageEvaluationAttribute: "percentageEvaluationAttribute", isPercentageOnlyTargetingRule: "isPercentageOnlyTargetingRule" }, outputs: { lastPercentageOptionLeft: "lastPercentageOptionLeft", subscriptionLimitReached: "subscriptionLimitReached", changePercentageEvaluationAttributeRequested: "changePercentageEvaluationAttributeRequested" }, ngImport: i0, template: "<div *ngFor=\"let percentageOption of formArray.controls; let i = index\" class=\"targeting-rule-line smallest-form-field\">\n <div class=\"wrapper-group\">\n <div class=\"targeting-rule-component flex\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\" class=\"perc-input\">\n <input matInput type=\"number\" [formControl]=\"percentageOption.controls.percentage\" min=\"0\" max=\"100\"\n (input)=\"percentageChanged(i)\" matTooltip=\"Percentage\"\n digitOnly inputDisplayNormalizer>\n <span matTextSuffix>%</span>\n <mat-error *ngIf=\"percentageOption.controls.percentage.invalid\">\n {{FormHelper.getErrorMessage(percentageOption.controls.percentage)}}\n </mat-error>\n </mat-form-field>\n </div>\n <div *ngIf=\"!showPercentageEvaluationAttribute\" class=\"attribute-wrapper flex\"> of&nbsp;<a\n href=\"https://configcat.com/docs/targeting/percentage-options/\" target=\"_blank\"\n rel=\"noopener noreferrer\">users</a>\n </div>\n <div *ngIf=\"showPercentageEvaluationAttribute\" class=\"attribute-wrapper wrapper-group flex\">\n <div class=\"small-pad-right\">of all</div>\n <div class=\"small-pad-right\">\n <button mat-flat-button type=\"button\" [disabled]=\"flagState.readOnly\" class=\"attribute\"\n matTooltip=\"Change percentage evaluation attribute\"\n (click)=\"changePercentageEvaluationAttribute()\">{{getPercentageEvaluationAttribute()}}</button>\n </div>\n <div>attributes</div>\n </div>\n <div class=\"delete-button\" *ngIf=\"!flagState.readOnly\">\n <button type=\"button\" mat-icon-button matTooltip=\"Remove option\" (click)=\"remove(i)\">\n <mat-icon>cancel</mat-icon>\n </button>\n </div>\n </div>\n\n <app-feature-flag-value class=\"value\" [flagState]=\"flagState\" tooltip=\"Served value\"\n [formGroup]=\"percentageOption.controls.value\"\n [featureFlagLimitations]=\"featureFlagLimitations\"></app-feature-flag-value>\n</div>\n<mat-error *ngIf=\"formArray.invalid && !!FormHelper.getErrorMessage(formArray)\" class=\"sumerror\">\n {{FormHelper.getErrorMessage(formArray)}}\n</mat-error>\n<div class=\"small small-pad-bottom\" style=\"opacity: .6;\"\n *ngIf=\"showPercentageEvaluationAttribute && isPercentageOnlyTargetingRule\">\n If the {{getPercentageEvaluationAttribute()}} attribute is not set in the\n <a href=\"https://configcat.com/docs/targeting/user-object/\" target=\"_blank\" rel=\"noopener noreferrer\">User\n Object</a>, the percentage options are skipped and the evaluation continues with the next rule.\n</div>\n<div class=\"small small-pad-bottom\" style=\"opacity: .6;\"\n *ngIf=\"showPercentageEvaluationAttribute && !isPercentageOnlyTargetingRule\">\n If the {{getPercentageEvaluationAttribute()}} attribute is not set in the\n <a href=\"https://configcat.com/docs/targeting/user-object/\" target=\"_blank\" rel=\"noopener noreferrer\">User\n Object</a>, the current targeting rule is skipped and the evaluation continues with the next one.\n</div>\n\n<div class=\"add-perc\" *ngIf=\"flagState.settingValue.setting.settingType !== SettingType.Boolean && !flagState.readOnly\">\n <div class=\"enter-sign\"><mat-icon>subdirectory_arrow_right</mat-icon></div>\n <div (click)=\"addOption()\" class=\"add-btn add-perc-btn\">+ % OPTION</div>\n</div>", styles: [".targeting-rule-line{display:flex;flex-wrap:wrap;margin:2px 0}.targeting-rule-line .wrapper-group{display:flex;flex-wrap:wrap}.targeting-rule-line .wrapper-group.grow{flex-grow:1}.targeting-rule-component{margin:2px 0;width:212px}.targeting-rule-component[hidden]{display:none}.targeting-rule-component.small{width:102px}.targeting-rule-component.grow{flex-grow:1}.targeting-rule-component.pad-right{margin-right:8px}.targeting-rule-component mat-form-field{width:100%;font-size:12px}.delete-button{margin-top:4px;color:#b1b1b1}.delete-button mat-icon{font-size:18px;height:18px;width:18px}.explanation-wrapper{display:flex;margin-top:2px}.explanation-wrapper .explanation{min-width:44px;margin-top:6px;margin-right:8px}@media (max-width: 500px){.targeting-rule-component{max-width:calc(100% - 4px);width:160px}.targeting-rule-component.small{width:78px}.targeting-rule-component.pad-right{margin-right:4px}}\n", ".targeting-rule-line{--mdc-text-button-container-height: 24px;--mdc-filled-button-container-height: 24px;--mdc-outlined-button-container-height: 24px;--mdc-protected-button-container-height: 24px;--mat-text-button-touch-target-display: none;--mat-filled-button-touch-target-display: none;--mat-protected-button-touch-target-display: none;--mat-outlined-button-touch-target-display: none;--mat-icon-button-touch-target-display: none;align-items:center}.targeting-rule-line .mat-mdc-icon-button.mat-mdc-button-base{--mdc-icon-button-state-layer-size: 32px;width:var(--mdc-icon-button-state-layer-size);height:var(--mdc-icon-button-state-layer-size);padding:4px}.targeting-rule-line .flex{display:flex;align-items:center;margin-right:4px}.targeting-rule-line .targeting-rule-component{max-width:84px}.targeting-rule-line .value{flex-grow:1}.targeting-rule-line .perc-input{margin-right:5px}.add-perc{display:flex;width:100%;padding-top:5px}.add-perc .enter-sign{color:#ccc;margin:2px 3px 0 8px}.add-perc .enter-sign mat-icon{font-size:16px;width:16px;height:16px}.add-perc .add-perc-btn{min-width:63px;padding:3px 4px 2px 8px}.sumerror{margin-bottom:8px;font-size:12px}.small{font-size:.7rem}.attribute-wrapper{color:#585858}.attribute{border:1px solid #c9c9c9;background-color:#fcfcfc;text-transform:none;color:#585858;font-size:12px;padding:0 5px}.small-pad-right{margin-right:5px}.small-pad-bottom{margin-bottom:5px}.delete-button{margin-top:3px}\n", ".chip-container{display:flex;margin-top:2px;align-self:start}.chip-container.fixed-width{width:110px}.chip-container.fixed-width-wide{width:130px}.chip-container mat-chip-set{margin-top:2px;width:100%}.chip-container mat-chip-set mat-chip{width:100%;margin-top:0;margin-bottom:0;height:24px;font-size:12px;background-color:#d1e3fa;opacity:1}.chip-container .add-btn mat-chip{background-color:transparent;border:1px dashed #afaeae;color:#afaeae;cursor:pointer}.chip-container .enter-sign{color:#ccc;margin:6px 3px 0 8px}.chip-container .enter-sign mat-icon{font-size:16px;width:16px;height:16px}\n", ".add-btn{cursor:pointer;background-color:transparent;display:flex;font-size:10px;align-items:center;border:1px dashed rgb(168,168,168);color:#979797;border-radius:15px}.add-btn:hover{background-color:#ebebeb}\n"], dependencies: [{ 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: i3.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: i3.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i3.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i4.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i8.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: i9.InputDisplayNormalizerDirective, selector: "input[inputDisplayNormalizer]" }, { kind: "component", type: i10.FeatureFlagValueComponent, selector: "app-feature-flag-value", inputs: ["formGroup", "flagState", "featureFlagLimitations", "isPrerequisite", "tooltip"] }] }); }
61
61
  }
62
62
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.1", ngImport: i0, type: PercentageOptionsComponent, decorators: [{
63
63
  type: Component,
64
- args: [{ selector: 'app-percentage-options', template: "<div *ngFor=\"let percentageOption of formArray.controls; let i = index\" class=\"targeting-rule-line smallest-form-field\">\n <div class=\"wrapper-group\">\n <div class=\"targeting-rule-component flex\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\" class=\"perc-input\">\n <input matInput type=\"number\" [formControl]=\"percentageOption.controls.percentage\" min=\"0\" max=\"100\"\n (input)=\"percentageChanged(i)\" matTooltip=\"Percentage\"\n digitOnly inputDisplayNormalizer>\n <span matTextSuffix>%</span>\n <mat-error *ngIf=\"percentageOption.controls.percentage.invalid\">\n {{FormHelper.getErrorMessage(percentageOption.controls.percentage)}}\n </mat-error>\n </mat-form-field>\n </div>\n <div *ngIf=\"!showPercentageEvaluationAttribute\" class=\"attribute-wrapper flex\"> of&nbsp;<a\n href=\"https://configcat.com/docs/V2/targeting/percentage-options/\" target=\"_blank\"\n rel=\"noopener noreferrer\">users</a>\n </div>\n <div *ngIf=\"showPercentageEvaluationAttribute\" class=\"attribute-wrapper wrapper-group flex\">\n <div class=\"small-pad-right\">of all</div>\n <div class=\"small-pad-right\">\n <button mat-flat-button type=\"button\" [disabled]=\"flagState.readOnly\" class=\"attribute\"\n matTooltip=\"Change percentage evaluation attribute\"\n (click)=\"changePercentageEvaluationAttribute()\">{{getPercentageEvaluationAttribute()}}</button>\n </div>\n <div>attributes</div>\n </div>\n <div class=\"delete-button\" *ngIf=\"!flagState.readOnly\">\n <button type=\"button\" mat-icon-button matTooltip=\"Remove option\" (click)=\"remove(i)\">\n <mat-icon>cancel</mat-icon>\n </button>\n </div>\n </div>\n\n <app-feature-flag-value class=\"value\" [flagState]=\"flagState\" tooltip=\"Served value\"\n [formGroup]=\"percentageOption.controls.value\"\n [featureFlagLimitations]=\"featureFlagLimitations\"></app-feature-flag-value>\n</div>\n<mat-error *ngIf=\"formArray.invalid && !!FormHelper.getErrorMessage(formArray)\" class=\"sumerror\">\n {{FormHelper.getErrorMessage(formArray)}}\n</mat-error>\n<div class=\"small small-pad-bottom\" style=\"opacity: .6;\"\n *ngIf=\"showPercentageEvaluationAttribute && isPercentageOnlyTargetingRule\">\n If the {{getPercentageEvaluationAttribute()}} attribute is not set in the\n <a href=\"https://configcat.com/docs/V2/targeting/user-object/\" target=\"_blank\" rel=\"noopener noreferrer\">User\n Object</a>, the percentage options are skipped and the evaluation continues with the next rule.\n</div>\n<div class=\"small small-pad-bottom\" style=\"opacity: .6;\"\n *ngIf=\"showPercentageEvaluationAttribute && !isPercentageOnlyTargetingRule\">\n If the {{getPercentageEvaluationAttribute()}} attribute is not set in the\n <a href=\"https://configcat.com/docs/V2/targeting/user-object/\" target=\"_blank\" rel=\"noopener noreferrer\">User\n Object</a>, the current targeting rule is skipped and the evaluation continues with the next one.\n</div>\n\n<div class=\"add-perc\" *ngIf=\"flagState.settingValue.setting.settingType !== SettingType.Boolean && !flagState.readOnly\">\n <div class=\"enter-sign\"><mat-icon>subdirectory_arrow_right</mat-icon></div>\n <div (click)=\"addOption()\" class=\"add-btn add-perc-btn\">+ % OPTION</div>\n</div>", styles: [".targeting-rule-line{display:flex;flex-wrap:wrap;margin:2px 0}.targeting-rule-line .wrapper-group{display:flex;flex-wrap:wrap}.targeting-rule-line .wrapper-group.grow{flex-grow:1}.targeting-rule-component{margin:2px 0;width:212px}.targeting-rule-component[hidden]{display:none}.targeting-rule-component.small{width:102px}.targeting-rule-component.grow{flex-grow:1}.targeting-rule-component.pad-right{margin-right:8px}.targeting-rule-component mat-form-field{width:100%;font-size:12px}.delete-button{margin-top:4px;color:#b1b1b1}.delete-button mat-icon{font-size:18px;height:18px;width:18px}.explanation-wrapper{display:flex;margin-top:2px}.explanation-wrapper .explanation{min-width:44px;margin-top:6px;margin-right:8px}@media (max-width: 500px){.targeting-rule-component{max-width:calc(100% - 4px);width:160px}.targeting-rule-component.small{width:78px}.targeting-rule-component.pad-right{margin-right:4px}}\n", ".targeting-rule-line{--mdc-text-button-container-height: 24px;--mdc-filled-button-container-height: 24px;--mdc-outlined-button-container-height: 24px;--mdc-protected-button-container-height: 24px;--mat-text-button-touch-target-display: none;--mat-filled-button-touch-target-display: none;--mat-protected-button-touch-target-display: none;--mat-outlined-button-touch-target-display: none;--mat-icon-button-touch-target-display: none;align-items:center}.targeting-rule-line .mat-mdc-icon-button.mat-mdc-button-base{--mdc-icon-button-state-layer-size: 32px;width:var(--mdc-icon-button-state-layer-size);height:var(--mdc-icon-button-state-layer-size);padding:4px}.targeting-rule-line .flex{display:flex;align-items:center;margin-right:4px}.targeting-rule-line .targeting-rule-component{max-width:84px}.targeting-rule-line .value{flex-grow:1}.targeting-rule-line .perc-input{margin-right:5px}.add-perc{display:flex;width:100%;padding-top:5px}.add-perc .enter-sign{color:#ccc;margin:2px 3px 0 8px}.add-perc .enter-sign mat-icon{font-size:16px;width:16px;height:16px}.add-perc .add-perc-btn{min-width:63px;padding:3px 4px 2px 8px}.sumerror{margin-bottom:8px;font-size:12px}.small{font-size:.7rem}.attribute-wrapper{color:#585858}.attribute{border:1px solid #c9c9c9;background-color:#fcfcfc;text-transform:none;color:#585858;font-size:12px;padding:0 5px}.small-pad-right{margin-right:5px}.small-pad-bottom{margin-bottom:5px}.delete-button{margin-top:3px}\n", ".chip-container{display:flex;margin-top:2px;align-self:start}.chip-container.fixed-width{width:110px}.chip-container.fixed-width-wide{width:130px}.chip-container mat-chip-set{margin-top:2px;width:100%}.chip-container mat-chip-set mat-chip{width:100%;margin-top:0;margin-bottom:0;height:24px;font-size:12px;background-color:#d1e3fa;opacity:1}.chip-container .add-btn mat-chip{background-color:transparent;border:1px dashed #afaeae;color:#afaeae;cursor:pointer}.chip-container .enter-sign{color:#ccc;margin:6px 3px 0 8px}.chip-container .enter-sign mat-icon{font-size:16px;width:16px;height:16px}\n", ".add-btn{cursor:pointer;background-color:transparent;display:flex;font-size:10px;align-items:center;border:1px dashed rgb(168,168,168);color:#979797;border-radius:15px}.add-btn:hover{background-color:#ebebeb}\n"] }]
64
+ args: [{ selector: 'app-percentage-options', template: "<div *ngFor=\"let percentageOption of formArray.controls; let i = index\" class=\"targeting-rule-line smallest-form-field\">\n <div class=\"wrapper-group\">\n <div class=\"targeting-rule-component flex\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\" class=\"perc-input\">\n <input matInput type=\"number\" [formControl]=\"percentageOption.controls.percentage\" min=\"0\" max=\"100\"\n (input)=\"percentageChanged(i)\" matTooltip=\"Percentage\"\n digitOnly inputDisplayNormalizer>\n <span matTextSuffix>%</span>\n <mat-error *ngIf=\"percentageOption.controls.percentage.invalid\">\n {{FormHelper.getErrorMessage(percentageOption.controls.percentage)}}\n </mat-error>\n </mat-form-field>\n </div>\n <div *ngIf=\"!showPercentageEvaluationAttribute\" class=\"attribute-wrapper flex\"> of&nbsp;<a\n href=\"https://configcat.com/docs/targeting/percentage-options/\" target=\"_blank\"\n rel=\"noopener noreferrer\">users</a>\n </div>\n <div *ngIf=\"showPercentageEvaluationAttribute\" class=\"attribute-wrapper wrapper-group flex\">\n <div class=\"small-pad-right\">of all</div>\n <div class=\"small-pad-right\">\n <button mat-flat-button type=\"button\" [disabled]=\"flagState.readOnly\" class=\"attribute\"\n matTooltip=\"Change percentage evaluation attribute\"\n (click)=\"changePercentageEvaluationAttribute()\">{{getPercentageEvaluationAttribute()}}</button>\n </div>\n <div>attributes</div>\n </div>\n <div class=\"delete-button\" *ngIf=\"!flagState.readOnly\">\n <button type=\"button\" mat-icon-button matTooltip=\"Remove option\" (click)=\"remove(i)\">\n <mat-icon>cancel</mat-icon>\n </button>\n </div>\n </div>\n\n <app-feature-flag-value class=\"value\" [flagState]=\"flagState\" tooltip=\"Served value\"\n [formGroup]=\"percentageOption.controls.value\"\n [featureFlagLimitations]=\"featureFlagLimitations\"></app-feature-flag-value>\n</div>\n<mat-error *ngIf=\"formArray.invalid && !!FormHelper.getErrorMessage(formArray)\" class=\"sumerror\">\n {{FormHelper.getErrorMessage(formArray)}}\n</mat-error>\n<div class=\"small small-pad-bottom\" style=\"opacity: .6;\"\n *ngIf=\"showPercentageEvaluationAttribute && isPercentageOnlyTargetingRule\">\n If the {{getPercentageEvaluationAttribute()}} attribute is not set in the\n <a href=\"https://configcat.com/docs/targeting/user-object/\" target=\"_blank\" rel=\"noopener noreferrer\">User\n Object</a>, the percentage options are skipped and the evaluation continues with the next rule.\n</div>\n<div class=\"small small-pad-bottom\" style=\"opacity: .6;\"\n *ngIf=\"showPercentageEvaluationAttribute && !isPercentageOnlyTargetingRule\">\n If the {{getPercentageEvaluationAttribute()}} attribute is not set in the\n <a href=\"https://configcat.com/docs/targeting/user-object/\" target=\"_blank\" rel=\"noopener noreferrer\">User\n Object</a>, the current targeting rule is skipped and the evaluation continues with the next one.\n</div>\n\n<div class=\"add-perc\" *ngIf=\"flagState.settingValue.setting.settingType !== SettingType.Boolean && !flagState.readOnly\">\n <div class=\"enter-sign\"><mat-icon>subdirectory_arrow_right</mat-icon></div>\n <div (click)=\"addOption()\" class=\"add-btn add-perc-btn\">+ % OPTION</div>\n</div>", styles: [".targeting-rule-line{display:flex;flex-wrap:wrap;margin:2px 0}.targeting-rule-line .wrapper-group{display:flex;flex-wrap:wrap}.targeting-rule-line .wrapper-group.grow{flex-grow:1}.targeting-rule-component{margin:2px 0;width:212px}.targeting-rule-component[hidden]{display:none}.targeting-rule-component.small{width:102px}.targeting-rule-component.grow{flex-grow:1}.targeting-rule-component.pad-right{margin-right:8px}.targeting-rule-component mat-form-field{width:100%;font-size:12px}.delete-button{margin-top:4px;color:#b1b1b1}.delete-button mat-icon{font-size:18px;height:18px;width:18px}.explanation-wrapper{display:flex;margin-top:2px}.explanation-wrapper .explanation{min-width:44px;margin-top:6px;margin-right:8px}@media (max-width: 500px){.targeting-rule-component{max-width:calc(100% - 4px);width:160px}.targeting-rule-component.small{width:78px}.targeting-rule-component.pad-right{margin-right:4px}}\n", ".targeting-rule-line{--mdc-text-button-container-height: 24px;--mdc-filled-button-container-height: 24px;--mdc-outlined-button-container-height: 24px;--mdc-protected-button-container-height: 24px;--mat-text-button-touch-target-display: none;--mat-filled-button-touch-target-display: none;--mat-protected-button-touch-target-display: none;--mat-outlined-button-touch-target-display: none;--mat-icon-button-touch-target-display: none;align-items:center}.targeting-rule-line .mat-mdc-icon-button.mat-mdc-button-base{--mdc-icon-button-state-layer-size: 32px;width:var(--mdc-icon-button-state-layer-size);height:var(--mdc-icon-button-state-layer-size);padding:4px}.targeting-rule-line .flex{display:flex;align-items:center;margin-right:4px}.targeting-rule-line .targeting-rule-component{max-width:84px}.targeting-rule-line .value{flex-grow:1}.targeting-rule-line .perc-input{margin-right:5px}.add-perc{display:flex;width:100%;padding-top:5px}.add-perc .enter-sign{color:#ccc;margin:2px 3px 0 8px}.add-perc .enter-sign mat-icon{font-size:16px;width:16px;height:16px}.add-perc .add-perc-btn{min-width:63px;padding:3px 4px 2px 8px}.sumerror{margin-bottom:8px;font-size:12px}.small{font-size:.7rem}.attribute-wrapper{color:#585858}.attribute{border:1px solid #c9c9c9;background-color:#fcfcfc;text-transform:none;color:#585858;font-size:12px;padding:0 5px}.small-pad-right{margin-right:5px}.small-pad-bottom{margin-bottom:5px}.delete-button{margin-top:3px}\n", ".chip-container{display:flex;margin-top:2px;align-self:start}.chip-container.fixed-width{width:110px}.chip-container.fixed-width-wide{width:130px}.chip-container mat-chip-set{margin-top:2px;width:100%}.chip-container mat-chip-set mat-chip{width:100%;margin-top:0;margin-bottom:0;height:24px;font-size:12px;background-color:#d1e3fa;opacity:1}.chip-container .add-btn mat-chip{background-color:transparent;border:1px dashed #afaeae;color:#afaeae;cursor:pointer}.chip-container .enter-sign{color:#ccc;margin:6px 3px 0 8px}.chip-container .enter-sign mat-icon{font-size:16px;width:16px;height:16px}\n", ".add-btn{cursor:pointer;background-color:transparent;display:flex;font-size:10px;align-items:center;border:1px dashed rgb(168,168,168);color:#979797;border-radius:15px}.add-btn:hover{background-color:#ebebeb}\n"] }]
65
65
  }], ctorParameters: () => [{ type: i1.FormGenerator }], propDecorators: { formArray: [{
66
66
  type: Input
67
67
  }], flagState: [{
@@ -81,4 +81,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.1", ngImpor
81
81
  }], changePercentageEvaluationAttributeRequested: [{
82
82
  type: Output
83
83
  }] } });
84
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVyY2VudGFnZS1vcHRpb25zLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWNvbmZpZ2NhdC1wdWJsaWNhcGktdWkvc3JjL2xpYi92Mi9mZWF0dXJlLWZsYWcvZXZhbHVhdGlvbi1mb3JtdWxhL3RhcmdldGluZy1ydWxlL3BlcmNlbnRhZ2Utb3B0aW9ucy9wZXJjZW50YWdlLW9wdGlvbnMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctY29uZmlnY2F0LXB1YmxpY2FwaS11aS9zcmMvbGliL3YyL2ZlYXR1cmUtZmxhZy9ldmFsdWF0aW9uLWZvcm11bGEvdGFyZ2V0aW5nLXJ1bGUvcGVyY2VudGFnZS1vcHRpb25zL3BlcmNlbnRhZ2Utb3B0aW9ucy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXZFLE9BQU8sRUFDTCxVQUFVLEVBQzJCLFdBQVcsRUFDakQsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7Ozs7Ozs7O0FBWWxDLE1BQU0sT0FBTywwQkFBMEI7SUFlckMsWUFBb0IsYUFBNEI7UUFBNUIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFQdEMsNkJBQXdCLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUM5Qyw2QkFBd0IsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzlDLGlEQUE0QyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFFNUUsZ0JBQVcsR0FBRyxXQUFXLENBQUM7UUFDMUIsZUFBVSxHQUFHLFVBQVUsQ0FBQztJQUU0QixDQUFDO0lBRXJELFNBQVM7UUFDUCxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxzQkFB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QUNHLDRDQUE0QztzQkFBckQsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQXJyYXksIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gIEZvcm1IZWxwZXIsIElGbGFnU3RhdGUsIElGZWF0dXJlRmxhZ0xpbWl0YXRpb25zLFxuICBQZXJjZW50YWdlT3B0aW9uRm9ybSwgRm9ybUdlbmVyYXRvciwgU2V0dGluZ1R5cGVcbn0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vYm9vdHN0cmFwJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXBlcmNlbnRhZ2Utb3B0aW9ucycsXG4gIHRlbXBsYXRlVXJsOiAnLi9wZXJjZW50YWdlLW9wdGlvbnMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFtcbiAgICAnLi4vLi4vY29tcG9uZW50cy5zY3NzJyxcbiAgICAnLi9wZXJjZW50YWdlLW9wdGlvbnMuY29tcG9uZW50LnNjc3MnLFxuICAgICcuLi8uLi9jaGlwcy5zY3NzJyxcbiAgICAnLi4vLi4vYWRkLWJ0bi5zY3NzJ1xuICBdXG59KVxuZXhwb3J0IGNsYXNzIFBlcmNlbnRhZ2VPcHRpb25zQ29tcG9uZW50IHtcbiAgQElucHV0KCkgZm9ybUFycmF5OiBGb3JtQXJyYXk8Rm9ybUdyb3VwPFBlcmNlbnRhZ2VPcHRpb25Gb3JtPj47XG4gIEBJbnB1dCgpIGZsYWdTdGF0ZTogSUZsYWdTdGF0ZTtcbiAgQElucHV0KCkgZmVhdHVyZUZsYWdMaW1pdGF0aW9uczogSUZlYXR1cmVGbGFnTGltaXRhdGlvbnM7XG4gIEBJbnB1dCgpIHNob3dQZXJjZW50YWdlRXZhbHVhdGlvbkF0dHJpYnV0ZTogYm9vbGVhbjtcbiAgQElucHV0KCkgcGVyY2VudGFnZUV2YWx1YXRpb25BdHRyaWJ1dGU6IHN0cmluZztcbiAgQElucHV0KCkgaXNQZXJjZW50YWdlT25seVRhcmdldGluZ1J1bGU6IGJvb2xlYW47XG5cbiAgQE91dHB1dCgpIGxhc3RQZXJjZW50YWdlT3B0aW9uTGVmdCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHN1YnNjcmlwdGlvbkxpbWl0UmVhY2hlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGNoYW5nZVBlcmNlbnRhZ2VFdmFsdWF0aW9uQXR0cmlidXRlUmVxdWVzdGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIFNldHRpbmdUeXBlID0gU2V0dGluZ1R5cGU7XG4gIEZvcm1IZWxwZXIgPSBGb3JtSGVscGVyO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZm9ybUdlbmVyYXRvcjogRm9ybUdlbmVyYXRvcikgeyB9XG5cbiAgYWRkT3B0aW9uKCkge1xuICAgIGlmICh0aGlzLmZvcm1BcnJheS5sZW5ndGggPj0gdGhpcy5mZWF0dXJlRmxhZ0xpbWl0YXRpb25zLm1heFBlcmNlbnRhZ2VPcHRpb25Db3VudCkge1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb25MaW1pdFJlYWNoZWQuZW1pdCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmZvcm1BcnJheS5wdXNoKHRoaXMuZm9ybUdlbmVyYXRvci5nZW5lcmF0ZVBlcmNlbnRhZ2VPcHRpb25Gb3JtR3JvdXAoe1xuICAgICAgcGVyY2VudGFnZTogMCxcbiAgICAgIHZhbHVlOiB0aGlzLmZvcm1HZW5lcmF0b3IuZ2VuZXJhdGVEZWZhdWx0VmFsdWUodGhpcy5mbGFnU3RhdGUuc2V0dGluZ1ZhbHVlLnNldHRpbmcuc2V0dGluZ1R5cGUpXG4gICAgfSwgdGhpcy5mbGFnU3RhdGUuc2V0dGluZ1ZhbHVlLnNldHRpbmcuc2V0dGluZ1R5cGUsIGZhbHNlLCB0aGlzLmZlYXR1cmVGbGFnTGltaXRhdGlvbnMpKVxuICAgIHRoaXMuZm9ybUFycmF5Lm1hcmtBc0RpcnR5KCk7XG4gIH1cblxuICByZW1vdmUoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuZm9ybUFycmF5LnJlbW92ZUF0KGluZGV4KTtcbiAgICB0aGlzLmZvcm1BcnJheS5tYXJrQXNEaXJ0eSgpO1xuICAgIGlmICh0aGlzLmZvcm1BcnJheS5sZW5ndGggPCAyKSB7XG4gICAgICB0aGlzLmxhc3RQZXJjZW50YWdlT3B0aW9uTGVmdC5lbWl0KCk7XG4gICAgfVxuICB9XG5cbiAgcGVyY2VudGFnZUNoYW5nZWQoaW5kZXg6IG51bWJlcikge1xuICAgIGlmICh0aGlzLmZvcm1BcnJheS5jb250cm9sc1tpbmRleF0udmFsdWUucGVyY2VudGFnZSA8IDApIHtcbiAgICAgIHRoaXMuZm9ybUFycmF5LmNvbnRyb2xzW2luZGV4XS5jb250cm9scy5wZXJjZW50YWdlLnNldFZhbHVlKDApO1xuICAgIH1cbiAgICBpZiAodGhpcy5mb3JtQXJyYXkuY29udHJvbHNbaW5kZXhdLnZhbHVlLnBlcmNlbnRhZ2UgPiAxMDApIHtcbiAgICAgIHRoaXMuZm9ybUFycmF5LmNvbnRyb2xzW2luZGV4XS5jb250cm9scy5wZXJjZW50YWdlLnNldFZhbHVlKDEwMCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZm9ybUFycmF5LmNvbnRyb2xzLmxlbmd0aCA9PT0gMikge1xuICAgICAgdGhpcy5mb3JtQXJyYXkuY29udHJvbHNbMSAtIGluZGV4XS5jb250cm9scy5wZXJjZW50YWdlXG4gICAgICAgIC5zZXRWYWx1ZSgxMDAgLSB0aGlzLmZvcm1BcnJheS5jb250cm9sc1tpbmRleF0udmFsdWUucGVyY2VudGFnZSk7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlUGVyY2VudGFnZUV2YWx1YXRpb25BdHRyaWJ1dGUoKSB7XG4gICAgdGhpcy5jaGFuZ2VQZXJjZW50YWdlRXZhbHVhdGlvbkF0dHJpYnV0ZVJlcXVlc3RlZC5lbWl0KCk7XG4gIH1cblxuICBnZXRQZXJjZW50YWdlRXZhbHVhdGlvbkF0dHJpYnV0ZSgpIHtcbiAgICByZXR1cm4gIXRoaXMucGVyY2VudGFnZUV2YWx1YXRpb25BdHRyaWJ1dGUgPyAnSWRlbnRpZmllcicgOiB0aGlzLnBlcmNlbnRhZ2VFdmFsdWF0aW9uQXR0cmlidXRlO1xuICB9XG59XG4iLCI8ZGl2ICpuZ0Zvcj1cImxldCBwZXJjZW50YWdlT3B0aW9uIG9mIGZvcm1BcnJheS5jb250cm9sczsgbGV0IGkgPSBpbmRleFwiIGNsYXNzPVwidGFyZ2V0aW5nLXJ1bGUtbGluZSBzbWFsbGVzdC1mb3JtLWZpZWxkXCI+XG4gICAgPGRpdiBjbGFzcz1cIndyYXBwZXItZ3JvdXBcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRhcmdldGluZy1ydWxlLWNvbXBvbmVudCBmbGV4XCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBzdWJzY3JpcHRTaXppbmc9XCJkeW5hbWljXCIgY2xhc3M9XCJwZXJjLWlucHV0XCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9XCJudW1iZXJcIiBbZm9ybUNvbnRyb2xdPVwicGVyY2VudGFnZU9wdGlvbi5jb250cm9scy5wZXJjZW50YWdlXCIgbWluPVwiMFwiIG1heD1cIjEwMFwiXG4gICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJwZXJjZW50YWdlQ2hhbmdlZChpKVwiIG1hdFRvb2x0aXA9XCJQZXJjZW50YWdlXCJcbiAgICAgICAgICAgICAgICAgICAgZGlnaXRPbmx5IGlucHV0RGlzcGxheU5vcm1hbGl6ZXI+XG4gICAgICAgICAgICAgICAgPHNwYW4gbWF0VGV4dFN1ZmZpeD4lPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJwZXJjZW50YWdlT3B0aW9uLmNvbnRyb2xzLnBlcmNlbnRhZ2UuaW52YWxpZFwiPlxuICAgICAgICAgICAgICAgICAgICB7e0Zvcm1IZWxwZXIuZ2V0RXJyb3JNZXNzYWdlKHBlcmNlbnRhZ2VPcHRpb24uY29udHJvbHMucGVyY2VudGFnZSl9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCIhc2hvd1BlcmNlbnRhZ2VFdmFsdWF0aW9uQXR0cmlidXRlXCIgY2xhc3M9XCJhdHRyaWJ1dGUtd3JhcHBlciBmbGV4XCI+IG9mJm5ic3A7PGFcbiAgICAgICAgICAgICAgICBocmVmPVwiaHR0cHM6Ly9jb25maWdjYXQuY29tL2RvY3MvVjIvdGFyZ2V0aW5nL3BlcmNlbnRhZ2Utb3B0aW9ucy9cIiB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgICAgIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIj51c2VyczwvYT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJzaG93UGVyY2VudGFnZUV2YWx1YXRpb25BdHRyaWJ1dGVcIiBjbGFzcz1cImF0dHJpYnV0ZS13cmFwcGVyIHdyYXBwZXItZ3JvdXAgZmxleFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNtYWxsLXBhZC1yaWdodFwiPm9mIGFsbDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNtYWxsLXBhZC1yaWdodFwiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWZsYXQtYnV0dG9uIHR5cGU9XCJidXR0b25cIiBbZGlzYWJsZWRdPVwiZmxhZ1N0YXRlLnJlYWRPbmx5XCIgY2xhc3M9XCJhdHRyaWJ1dGVcIlxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiQ2hhbmdlIHBlcmNlbnRhZ2UgZXZhbHVhdGlvbiBhdHRyaWJ1dGVcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2hhbmdlUGVyY2VudGFnZUV2YWx1YXRpb25BdHRyaWJ1dGUoKVwiPnt7Z2V0UGVyY2VudGFnZUV2YWx1YXRpb25BdHRyaWJ1dGUoKX19PC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXY+YXR0cmlidXRlczwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRlbGV0ZS1idXR0b25cIiAqbmdJZj1cIiFmbGFnU3RhdGUucmVhZE9ubHlcIj5cbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiBtYXRUb29sdGlwPVwiUmVtb3ZlIG9wdGlvblwiIChjbGljayk9XCJyZW1vdmUoaSlcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2FuY2VsPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxhcHAtZmVhdHVyZS1mbGFnLXZhbHVlIGNsYXNzPVwidmFsdWVcIiBbZmxhZ1N0YXRlXT1cImZsYWdTdGF0ZVwiIHRvb2x0aXA9XCJTZXJ2ZWQgdmFsdWVcIlxuICAgICAgICBbZm9ybUdyb3VwXT1cInBlcmNlbnRhZ2VPcHRpb24uY29udHJvbHMudmFsdWVcIlxuICAgICAgICBbZmVhdHVyZUZsYWdMaW1pdGF0aW9uc109XCJmZWF0dXJlRmxhZ0xpbWl0YXRpb25zXCI+PC9hcHAtZmVhdHVyZS1mbGFnLXZhbHVlPlxuPC9kaXY+XG48bWF0LWVycm9yICpuZ0lmPVwiZm9ybUFycmF5LmludmFsaWQgJiYgISFGb3JtSGVscGVyLmdldEVycm9yTWVzc2FnZShmb3JtQXJyYXkpXCIgY2xhc3M9XCJzdW1lcnJvclwiPlxuICAgIHt7Rm9ybUhlbHBlci5nZXRFcnJvck1lc3NhZ2UoZm9ybUFycmF5KX19XG48L21hdC1lcnJvcj5cbjxkaXYgY2xhc3M9XCJzbWFsbCBzbWFsbC1wYWQtYm90dG9tXCIgc3R5bGU9XCJvcGFjaXR5OiAuNjtcIlxuICAgICpuZ0lmPVwic2hvd1BlcmNlbnRhZ2VFdmFsdWF0aW9uQXR0cmlidXRlICYmIGlzUGVyY2VudGFnZU9ubHlUYXJnZXRpbmdSdWxlXCI+XG4gICAgSWYgdGhlIHt7Z2V0UGVyY2VudGFnZUV2YWx1YXRpb25BdHRyaWJ1dGUoKX19IGF0dHJpYnV0ZSBpcyBub3Qgc2V0IGluIHRoZVxuICAgIDxhIGhyZWY9XCJodHRwczovL2NvbmZpZ2NhdC5jb20vZG9jcy9WMi90YXJnZXRpbmcvdXNlci1vYmplY3QvXCIgdGFyZ2V0PVwiX2JsYW5rXCIgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiPlVzZXJcbiAgICAgICAgT2JqZWN0PC9hPiwgdGhlIHBlcmNlbnRhZ2Ugb3B0aW9ucyBhcmUgc2tpcHBlZCBhbmQgdGhlIGV2YWx1YXRpb24gY29udGludWVzIHdpdGggdGhlIG5leHQgcnVsZS5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cInNtYWxsIHNtYWxsLXBhZC1ib3R0b21cIiBzdHlsZT1cIm9wYWNpdHk6IC42O1wiXG4gICAgKm5nSWY9XCJzaG93UGVyY2VudGFnZUV2YWx1YXRpb25BdHRyaWJ1dGUgJiYgIWlzUGVyY2VudGFnZU9ubHlUYXJnZXRpbmdSdWxlXCI+XG4gICAgSWYgdGhlIHt7Z2V0UGVyY2VudGFnZUV2YWx1YXRpb25BdHRyaWJ1dGUoKX19IGF0dHJpYnV0ZSBpcyBub3Qgc2V0IGluIHRoZVxuICAgIDxhIGhyZWY9XCJodHRwczovL2NvbmZpZ2NhdC5jb20vZG9jcy9WMi90YXJnZXRpbmcvdXNlci1vYmplY3QvXCIgdGFyZ2V0PVwiX2JsYW5rXCIgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiPlVzZXJcbiAgICAgICAgT2JqZWN0PC9hPiwgdGhlIGN1cnJlbnQgdGFyZ2V0aW5nIHJ1bGUgaXMgc2tpcHBlZCBhbmQgdGhlIGV2YWx1YXRpb24gY29udGludWVzIHdpdGggdGhlIG5leHQgb25lLlxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJhZGQtcGVyY1wiICpuZ0lmPVwiZmxhZ1N0YXRlLnNldHRpbmdWYWx1ZS5zZXR0aW5nLnNldHRpbmdUeXBlICE9PSBTZXR0aW5nVHlwZS5Cb29sZWFuICYmICFmbGFnU3RhdGUucmVhZE9ubHlcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZW50ZXItc2lnblwiPjxtYXQtaWNvbj5zdWJkaXJlY3RvcnlfYXJyb3dfcmlnaHQ8L21hdC1pY29uPjwvZGl2PlxuICAgIDxkaXYgKGNsaWNrKT1cImFkZE9wdGlvbigpXCIgY2xhc3M9XCJhZGQtYnRuIGFkZC1wZXJjLWJ0blwiPisgJSBPUFRJT048L2Rpdj5cbjwvZGl2PiJdfQ==
84
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVyY2VudGFnZS1vcHRpb25zLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWNvbmZpZ2NhdC1wdWJsaWNhcGktdWkvc3JjL2xpYi92Mi9mZWF0dXJlLWZsYWcvZXZhbHVhdGlvbi1mb3JtdWxhL3RhcmdldGluZy1ydWxlL3BlcmNlbnRhZ2Utb3B0aW9ucy9wZXJjZW50YWdlLW9wdGlvbnMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctY29uZmlnY2F0LXB1YmxpY2FwaS11aS9zcmMvbGliL3YyL2ZlYXR1cmUtZmxhZy9ldmFsdWF0aW9uLWZvcm11bGEvdGFyZ2V0aW5nLXJ1bGUvcGVyY2VudGFnZS1vcHRpb25zL3BlcmNlbnRhZ2Utb3B0aW9ucy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXZFLE9BQU8sRUFDTCxVQUFVLEVBQzJCLFdBQVcsRUFDakQsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7Ozs7Ozs7O0FBWWxDLE1BQU0sT0FBTywwQkFBMEI7SUFlckMsWUFBb0IsYUFBNEI7UUFBNUIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFQdEMsNkJBQXdCLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUM5Qyw2QkFBd0IsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzlDLGlEQUE0QyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFFNUUsZ0JBQVcsR0FBRyxXQUFXLENBQUM7UUFDMUIsZUFBVSxHQUFHLFVBQVUsQ0FBQztJQUU0QixDQUFDO0lBRXJELFNBQVM7UUFDUCxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxzQkFB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QUNHLDRDQUE0QztzQkFBckQsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQXJyYXksIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gIEZvcm1IZWxwZXIsIElGbGFnU3RhdGUsIElGZWF0dXJlRmxhZ0xpbWl0YXRpb25zLFxuICBQZXJjZW50YWdlT3B0aW9uRm9ybSwgRm9ybUdlbmVyYXRvciwgU2V0dGluZ1R5cGVcbn0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vYm9vdHN0cmFwJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXBlcmNlbnRhZ2Utb3B0aW9ucycsXG4gIHRlbXBsYXRlVXJsOiAnLi9wZXJjZW50YWdlLW9wdGlvbnMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFtcbiAgICAnLi4vLi4vY29tcG9uZW50cy5zY3NzJyxcbiAgICAnLi9wZXJjZW50YWdlLW9wdGlvbnMuY29tcG9uZW50LnNjc3MnLFxuICAgICcuLi8uLi9jaGlwcy5zY3NzJyxcbiAgICAnLi4vLi4vYWRkLWJ0bi5zY3NzJ1xuICBdXG59KVxuZXhwb3J0IGNsYXNzIFBlcmNlbnRhZ2VPcHRpb25zQ29tcG9uZW50IHtcbiAgQElucHV0KCkgZm9ybUFycmF5OiBGb3JtQXJyYXk8Rm9ybUdyb3VwPFBlcmNlbnRhZ2VPcHRpb25Gb3JtPj47XG4gIEBJbnB1dCgpIGZsYWdTdGF0ZTogSUZsYWdTdGF0ZTtcbiAgQElucHV0KCkgZmVhdHVyZUZsYWdMaW1pdGF0aW9uczogSUZlYXR1cmVGbGFnTGltaXRhdGlvbnM7XG4gIEBJbnB1dCgpIHNob3dQZXJjZW50YWdlRXZhbHVhdGlvbkF0dHJpYnV0ZTogYm9vbGVhbjtcbiAgQElucHV0KCkgcGVyY2VudGFnZUV2YWx1YXRpb25BdHRyaWJ1dGU6IHN0cmluZztcbiAgQElucHV0KCkgaXNQZXJjZW50YWdlT25seVRhcmdldGluZ1J1bGU6IGJvb2xlYW47XG5cbiAgQE91dHB1dCgpIGxhc3RQZXJjZW50YWdlT3B0aW9uTGVmdCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHN1YnNjcmlwdGlvbkxpbWl0UmVhY2hlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGNoYW5nZVBlcmNlbnRhZ2VFdmFsdWF0aW9uQXR0cmlidXRlUmVxdWVzdGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIFNldHRpbmdUeXBlID0gU2V0dGluZ1R5cGU7XG4gIEZvcm1IZWxwZXIgPSBGb3JtSGVscGVyO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZm9ybUdlbmVyYXRvcjogRm9ybUdlbmVyYXRvcikgeyB9XG5cbiAgYWRkT3B0aW9uKCkge1xuICAgIGlmICh0aGlzLmZvcm1BcnJheS5sZW5ndGggPj0gdGhpcy5mZWF0dXJlRmxhZ0xpbWl0YXRpb25zLm1heFBlcmNlbnRhZ2VPcHRpb25Db3VudCkge1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb25MaW1pdFJlYWNoZWQuZW1pdCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmZvcm1BcnJheS5wdXNoKHRoaXMuZm9ybUdlbmVyYXRvci5nZW5lcmF0ZVBlcmNlbnRhZ2VPcHRpb25Gb3JtR3JvdXAoe1xuICAgICAgcGVyY2VudGFnZTogMCxcbiAgICAgIHZhbHVlOiB0aGlzLmZvcm1HZW5lcmF0b3IuZ2VuZXJhdGVEZWZhdWx0VmFsdWUodGhpcy5mbGFnU3RhdGUuc2V0dGluZ1ZhbHVlLnNldHRpbmcuc2V0dGluZ1R5cGUpXG4gICAgfSwgdGhpcy5mbGFnU3RhdGUuc2V0dGluZ1ZhbHVlLnNldHRpbmcuc2V0dGluZ1R5cGUsIGZhbHNlLCB0aGlzLmZlYXR1cmVGbGFnTGltaXRhdGlvbnMpKVxuICAgIHRoaXMuZm9ybUFycmF5Lm1hcmtBc0RpcnR5KCk7XG4gIH1cblxuICByZW1vdmUoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuZm9ybUFycmF5LnJlbW92ZUF0KGluZGV4KTtcbiAgICB0aGlzLmZvcm1BcnJheS5tYXJrQXNEaXJ0eSgpO1xuICAgIGlmICh0aGlzLmZvcm1BcnJheS5sZW5ndGggPCAyKSB7XG4gICAgICB0aGlzLmxhc3RQZXJjZW50YWdlT3B0aW9uTGVmdC5lbWl0KCk7XG4gICAgfVxuICB9XG5cbiAgcGVyY2VudGFnZUNoYW5nZWQoaW5kZXg6IG51bWJlcikge1xuICAgIGlmICh0aGlzLmZvcm1BcnJheS5jb250cm9sc1tpbmRleF0udmFsdWUucGVyY2VudGFnZSA8IDApIHtcbiAgICAgIHRoaXMuZm9ybUFycmF5LmNvbnRyb2xzW2luZGV4XS5jb250cm9scy5wZXJjZW50YWdlLnNldFZhbHVlKDApO1xuICAgIH1cbiAgICBpZiAodGhpcy5mb3JtQXJyYXkuY29udHJvbHNbaW5kZXhdLnZhbHVlLnBlcmNlbnRhZ2UgPiAxMDApIHtcbiAgICAgIHRoaXMuZm9ybUFycmF5LmNvbnRyb2xzW2luZGV4XS5jb250cm9scy5wZXJjZW50YWdlLnNldFZhbHVlKDEwMCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZm9ybUFycmF5LmNvbnRyb2xzLmxlbmd0aCA9PT0gMikge1xuICAgICAgdGhpcy5mb3JtQXJyYXkuY29udHJvbHNbMSAtIGluZGV4XS5jb250cm9scy5wZXJjZW50YWdlXG4gICAgICAgIC5zZXRWYWx1ZSgxMDAgLSB0aGlzLmZvcm1BcnJheS5jb250cm9sc1tpbmRleF0udmFsdWUucGVyY2VudGFnZSk7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlUGVyY2VudGFnZUV2YWx1YXRpb25BdHRyaWJ1dGUoKSB7XG4gICAgdGhpcy5jaGFuZ2VQZXJjZW50YWdlRXZhbHVhdGlvbkF0dHJpYnV0ZVJlcXVlc3RlZC5lbWl0KCk7XG4gIH1cblxuICBnZXRQZXJjZW50YWdlRXZhbHVhdGlvbkF0dHJpYnV0ZSgpIHtcbiAgICByZXR1cm4gIXRoaXMucGVyY2VudGFnZUV2YWx1YXRpb25BdHRyaWJ1dGUgPyAnSWRlbnRpZmllcicgOiB0aGlzLnBlcmNlbnRhZ2VFdmFsdWF0aW9uQXR0cmlidXRlO1xuICB9XG59XG4iLCI8ZGl2ICpuZ0Zvcj1cImxldCBwZXJjZW50YWdlT3B0aW9uIG9mIGZvcm1BcnJheS5jb250cm9sczsgbGV0IGkgPSBpbmRleFwiIGNsYXNzPVwidGFyZ2V0aW5nLXJ1bGUtbGluZSBzbWFsbGVzdC1mb3JtLWZpZWxkXCI+XG4gICAgPGRpdiBjbGFzcz1cIndyYXBwZXItZ3JvdXBcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRhcmdldGluZy1ydWxlLWNvbXBvbmVudCBmbGV4XCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBzdWJzY3JpcHRTaXppbmc9XCJkeW5hbWljXCIgY2xhc3M9XCJwZXJjLWlucHV0XCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9XCJudW1iZXJcIiBbZm9ybUNvbnRyb2xdPVwicGVyY2VudGFnZU9wdGlvbi5jb250cm9scy5wZXJjZW50YWdlXCIgbWluPVwiMFwiIG1heD1cIjEwMFwiXG4gICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJwZXJjZW50YWdlQ2hhbmdlZChpKVwiIG1hdFRvb2x0aXA9XCJQZXJjZW50YWdlXCJcbiAgICAgICAgICAgICAgICAgICAgZGlnaXRPbmx5IGlucHV0RGlzcGxheU5vcm1hbGl6ZXI+XG4gICAgICAgICAgICAgICAgPHNwYW4gbWF0VGV4dFN1ZmZpeD4lPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJwZXJjZW50YWdlT3B0aW9uLmNvbnRyb2xzLnBlcmNlbnRhZ2UuaW52YWxpZFwiPlxuICAgICAgICAgICAgICAgICAgICB7e0Zvcm1IZWxwZXIuZ2V0RXJyb3JNZXNzYWdlKHBlcmNlbnRhZ2VPcHRpb24uY29udHJvbHMucGVyY2VudGFnZSl9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCIhc2hvd1BlcmNlbnRhZ2VFdmFsdWF0aW9uQXR0cmlidXRlXCIgY2xhc3M9XCJhdHRyaWJ1dGUtd3JhcHBlciBmbGV4XCI+IG9mJm5ic3A7PGFcbiAgICAgICAgICAgICAgICBocmVmPVwiaHR0cHM6Ly9jb25maWdjYXQuY29tL2RvY3MvdGFyZ2V0aW5nL3BlcmNlbnRhZ2Utb3B0aW9ucy9cIiB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgICAgIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIj51c2VyczwvYT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJzaG93UGVyY2VudGFnZUV2YWx1YXRpb25BdHRyaWJ1dGVcIiBjbGFzcz1cImF0dHJpYnV0ZS13cmFwcGVyIHdyYXBwZXItZ3JvdXAgZmxleFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNtYWxsLXBhZC1yaWdodFwiPm9mIGFsbDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNtYWxsLXBhZC1yaWdodFwiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWZsYXQtYnV0dG9uIHR5cGU9XCJidXR0b25cIiBbZGlzYWJsZWRdPVwiZmxhZ1N0YXRlLnJlYWRPbmx5XCIgY2xhc3M9XCJhdHRyaWJ1dGVcIlxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiQ2hhbmdlIHBlcmNlbnRhZ2UgZXZhbHVhdGlvbiBhdHRyaWJ1dGVcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2hhbmdlUGVyY2VudGFnZUV2YWx1YXRpb25BdHRyaWJ1dGUoKVwiPnt7Z2V0UGVyY2VudGFnZUV2YWx1YXRpb25BdHRyaWJ1dGUoKX19PC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXY+YXR0cmlidXRlczwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRlbGV0ZS1idXR0b25cIiAqbmdJZj1cIiFmbGFnU3RhdGUucmVhZE9ubHlcIj5cbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiBtYXRUb29sdGlwPVwiUmVtb3ZlIG9wdGlvblwiIChjbGljayk9XCJyZW1vdmUoaSlcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2FuY2VsPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxhcHAtZmVhdHVyZS1mbGFnLXZhbHVlIGNsYXNzPVwidmFsdWVcIiBbZmxhZ1N0YXRlXT1cImZsYWdTdGF0ZVwiIHRvb2x0aXA9XCJTZXJ2ZWQgdmFsdWVcIlxuICAgICAgICBbZm9ybUdyb3VwXT1cInBlcmNlbnRhZ2VPcHRpb24uY29udHJvbHMudmFsdWVcIlxuICAgICAgICBbZmVhdHVyZUZsYWdMaW1pdGF0aW9uc109XCJmZWF0dXJlRmxhZ0xpbWl0YXRpb25zXCI+PC9hcHAtZmVhdHVyZS1mbGFnLXZhbHVlPlxuPC9kaXY+XG48bWF0LWVycm9yICpuZ0lmPVwiZm9ybUFycmF5LmludmFsaWQgJiYgISFGb3JtSGVscGVyLmdldEVycm9yTWVzc2FnZShmb3JtQXJyYXkpXCIgY2xhc3M9XCJzdW1lcnJvclwiPlxuICAgIHt7Rm9ybUhlbHBlci5nZXRFcnJvck1lc3NhZ2UoZm9ybUFycmF5KX19XG48L21hdC1lcnJvcj5cbjxkaXYgY2xhc3M9XCJzbWFsbCBzbWFsbC1wYWQtYm90dG9tXCIgc3R5bGU9XCJvcGFjaXR5OiAuNjtcIlxuICAgICpuZ0lmPVwic2hvd1BlcmNlbnRhZ2VFdmFsdWF0aW9uQXR0cmlidXRlICYmIGlzUGVyY2VudGFnZU9ubHlUYXJnZXRpbmdSdWxlXCI+XG4gICAgSWYgdGhlIHt7Z2V0UGVyY2VudGFnZUV2YWx1YXRpb25BdHRyaWJ1dGUoKX19IGF0dHJpYnV0ZSBpcyBub3Qgc2V0IGluIHRoZVxuICAgIDxhIGhyZWY9XCJodHRwczovL2NvbmZpZ2NhdC5jb20vZG9jcy90YXJnZXRpbmcvdXNlci1vYmplY3QvXCIgdGFyZ2V0PVwiX2JsYW5rXCIgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiPlVzZXJcbiAgICAgICAgT2JqZWN0PC9hPiwgdGhlIHBlcmNlbnRhZ2Ugb3B0aW9ucyBhcmUgc2tpcHBlZCBhbmQgdGhlIGV2YWx1YXRpb24gY29udGludWVzIHdpdGggdGhlIG5leHQgcnVsZS5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cInNtYWxsIHNtYWxsLXBhZC1ib3R0b21cIiBzdHlsZT1cIm9wYWNpdHk6IC42O1wiXG4gICAgKm5nSWY9XCJzaG93UGVyY2VudGFnZUV2YWx1YXRpb25BdHRyaWJ1dGUgJiYgIWlzUGVyY2VudGFnZU9ubHlUYXJnZXRpbmdSdWxlXCI+XG4gICAgSWYgdGhlIHt7Z2V0UGVyY2VudGFnZUV2YWx1YXRpb25BdHRyaWJ1dGUoKX19IGF0dHJpYnV0ZSBpcyBub3Qgc2V0IGluIHRoZVxuICAgIDxhIGhyZWY9XCJodHRwczovL2NvbmZpZ2NhdC5jb20vZG9jcy90YXJnZXRpbmcvdXNlci1vYmplY3QvXCIgdGFyZ2V0PVwiX2JsYW5rXCIgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiPlVzZXJcbiAgICAgICAgT2JqZWN0PC9hPiwgdGhlIGN1cnJlbnQgdGFyZ2V0aW5nIHJ1bGUgaXMgc2tpcHBlZCBhbmQgdGhlIGV2YWx1YXRpb24gY29udGludWVzIHdpdGggdGhlIG5leHQgb25lLlxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJhZGQtcGVyY1wiICpuZ0lmPVwiZmxhZ1N0YXRlLnNldHRpbmdWYWx1ZS5zZXR0aW5nLnNldHRpbmdUeXBlICE9PSBTZXR0aW5nVHlwZS5Cb29sZWFuICYmICFmbGFnU3RhdGUucmVhZE9ubHlcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZW50ZXItc2lnblwiPjxtYXQtaWNvbj5zdWJkaXJlY3RvcnlfYXJyb3dfcmlnaHQ8L21hdC1pY29uPjwvZGl2PlxuICAgIDxkaXYgKGNsaWNrKT1cImFkZE9wdGlvbigpXCIgY2xhc3M9XCJhZGQtYnRuIGFkZC1wZXJjLWJ0blwiPisgJSBPUFRJT048L2Rpdj5cbjwvZGl2PiJdfQ==
@@ -53,13 +53,13 @@ export class PercentageEvaluationAttributeDialogComponent {
53
53
  this.dialogRef.close({ percentageEvaluationAttribute: this.formControl.value });
54
54
  }
55
55
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.1", ngImport: i0, type: PercentageEvaluationAttributeDialogComponent, deps: [{ token: i1.MatDialogRef }, { token: i2.FormGenerator }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component }); }
56
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.1", type: PercentageEvaluationAttributeDialogComponent, selector: "app-percentage-evaluation-attribute-dialog", ngImport: i0, template: "<h1 mat-dialog-title>Change percentage evaluation attribute</h1>\n<div mat-dialog-content class=\"container\">\n <p class=\"description\">\n When evaluating percentage-based user targeting, ConfigCat should use a specific user attribute as the basis for\n determining whether a user falls within the targeted percentage group.</p>\n\n <div class=\"components\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <mat-label>Evaluation attribute</mat-label>\n <mat-hint>This attribute will be used in all percentage based targeting within this feature flag.</mat-hint>\n <select matNativeControl (change)=\"attributeChanged($event)\" [disabled]=\"formControl.disabled\">\n <option *ngFor=\"let comparisonAttribute of defaultComparisonAttributes; let i = index\"\n [selected]=\"comparisonAttribute === formControl.value || (formControl.value === null && i === 0)\">\n {{comparisonAttribute}}</option>\n <option [selected]=\"!isDefault(formControl.value)\">\n Custom\n </option>\n </select>\n </mat-form-field>\n <div class=\"custom\" [hidden]=\"isDefault(formControl.value)\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <mat-label>Custom attribute</mat-label>\n <input matInput type=\"text\" [formControl]=\"formControl\">\n <mat-error *ngIf=\"formControl.invalid\">\n {{FormHelper.getErrorMessage(formControl)}}\n </mat-error>\n </mat-form-field>\n </div>\n </div>\n <p class=\"read-more\"> <a\n href=\"https://configcat.com/docs/V2/targeting/percentage-options/#percentage-options-based-on-other-user-attributes\"\n target=\"_blank\" rel=\"noopener noreferrer\">\n Read more </a> about percentage-based targeting in the docs.</p>\n</div>\n<div mat-dialog-actions>\n <button type=\"button\" mat-flat-button color=\"primary\" (click)=\"set()\">Set</button>\n <button type=\"button\" mat-stroked-button (click)=\"close()\">Cancel</button>\n</div>", styles: [".container{width:100%;display:flex;flex-direction:column}.container .description{padding:5px 0 10px}.container .components{display:flex}.container .components .custom{margin-left:16px}.container .read-more{padding-top:5px}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.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: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "directive", type: i5.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i5.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "component", type: i6.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: i7.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }] }); }
56
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.1", type: PercentageEvaluationAttributeDialogComponent, selector: "app-percentage-evaluation-attribute-dialog", ngImport: i0, template: "<h1 mat-dialog-title>Change percentage evaluation attribute</h1>\n<div mat-dialog-content class=\"container\">\n <p class=\"description\">\n When evaluating percentage-based user targeting, ConfigCat should use a specific user attribute as the basis for\n determining whether a user falls within the targeted percentage group.</p>\n\n <div class=\"components\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <mat-label>Evaluation attribute</mat-label>\n <mat-hint>This attribute will be used in all percentage based targeting within this feature flag.</mat-hint>\n <select matNativeControl (change)=\"attributeChanged($event)\" [disabled]=\"formControl.disabled\">\n <option *ngFor=\"let comparisonAttribute of defaultComparisonAttributes; let i = index\"\n [selected]=\"comparisonAttribute === formControl.value || (formControl.value === null && i === 0)\">\n {{comparisonAttribute}}</option>\n <option [selected]=\"!isDefault(formControl.value)\">\n Custom\n </option>\n </select>\n </mat-form-field>\n <div class=\"custom\" [hidden]=\"isDefault(formControl.value)\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <mat-label>Custom attribute</mat-label>\n <input matInput type=\"text\" [formControl]=\"formControl\">\n <mat-error *ngIf=\"formControl.invalid\">\n {{FormHelper.getErrorMessage(formControl)}}\n </mat-error>\n </mat-form-field>\n </div>\n </div>\n <p class=\"read-more\"> <a\n href=\"https://configcat.com/docs/targeting/percentage-options/#percentage-options-based-on-other-user-attributes\"\n target=\"_blank\" rel=\"noopener noreferrer\">\n Read more </a> about percentage-based targeting in the docs.</p>\n</div>\n<div mat-dialog-actions>\n <button type=\"button\" mat-flat-button color=\"primary\" (click)=\"set()\">Set</button>\n <button type=\"button\" mat-stroked-button (click)=\"close()\">Cancel</button>\n</div>", styles: [".container{width:100%;display:flex;flex-direction:column}.container .description{padding:5px 0 10px}.container .components{display:flex}.container .components .custom{margin-left:16px}.container .read-more{padding-top:5px}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.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: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "directive", type: i5.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i5.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "component", type: i6.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: i7.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }] }); }
57
57
  }
58
58
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.1", ngImport: i0, type: PercentageEvaluationAttributeDialogComponent, decorators: [{
59
59
  type: Component,
60
- args: [{ selector: 'app-percentage-evaluation-attribute-dialog', template: "<h1 mat-dialog-title>Change percentage evaluation attribute</h1>\n<div mat-dialog-content class=\"container\">\n <p class=\"description\">\n When evaluating percentage-based user targeting, ConfigCat should use a specific user attribute as the basis for\n determining whether a user falls within the targeted percentage group.</p>\n\n <div class=\"components\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <mat-label>Evaluation attribute</mat-label>\n <mat-hint>This attribute will be used in all percentage based targeting within this feature flag.</mat-hint>\n <select matNativeControl (change)=\"attributeChanged($event)\" [disabled]=\"formControl.disabled\">\n <option *ngFor=\"let comparisonAttribute of defaultComparisonAttributes; let i = index\"\n [selected]=\"comparisonAttribute === formControl.value || (formControl.value === null && i === 0)\">\n {{comparisonAttribute}}</option>\n <option [selected]=\"!isDefault(formControl.value)\">\n Custom\n </option>\n </select>\n </mat-form-field>\n <div class=\"custom\" [hidden]=\"isDefault(formControl.value)\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <mat-label>Custom attribute</mat-label>\n <input matInput type=\"text\" [formControl]=\"formControl\">\n <mat-error *ngIf=\"formControl.invalid\">\n {{FormHelper.getErrorMessage(formControl)}}\n </mat-error>\n </mat-form-field>\n </div>\n </div>\n <p class=\"read-more\"> <a\n href=\"https://configcat.com/docs/V2/targeting/percentage-options/#percentage-options-based-on-other-user-attributes\"\n target=\"_blank\" rel=\"noopener noreferrer\">\n Read more </a> about percentage-based targeting in the docs.</p>\n</div>\n<div mat-dialog-actions>\n <button type=\"button\" mat-flat-button color=\"primary\" (click)=\"set()\">Set</button>\n <button type=\"button\" mat-stroked-button (click)=\"close()\">Cancel</button>\n</div>", styles: [".container{width:100%;display:flex;flex-direction:column}.container .description{padding:5px 0 10px}.container .components{display:flex}.container .components .custom{margin-left:16px}.container .read-more{padding-top:5px}\n"] }]
60
+ args: [{ selector: 'app-percentage-evaluation-attribute-dialog', template: "<h1 mat-dialog-title>Change percentage evaluation attribute</h1>\n<div mat-dialog-content class=\"container\">\n <p class=\"description\">\n When evaluating percentage-based user targeting, ConfigCat should use a specific user attribute as the basis for\n determining whether a user falls within the targeted percentage group.</p>\n\n <div class=\"components\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <mat-label>Evaluation attribute</mat-label>\n <mat-hint>This attribute will be used in all percentage based targeting within this feature flag.</mat-hint>\n <select matNativeControl (change)=\"attributeChanged($event)\" [disabled]=\"formControl.disabled\">\n <option *ngFor=\"let comparisonAttribute of defaultComparisonAttributes; let i = index\"\n [selected]=\"comparisonAttribute === formControl.value || (formControl.value === null && i === 0)\">\n {{comparisonAttribute}}</option>\n <option [selected]=\"!isDefault(formControl.value)\">\n Custom\n </option>\n </select>\n </mat-form-field>\n <div class=\"custom\" [hidden]=\"isDefault(formControl.value)\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <mat-label>Custom attribute</mat-label>\n <input matInput type=\"text\" [formControl]=\"formControl\">\n <mat-error *ngIf=\"formControl.invalid\">\n {{FormHelper.getErrorMessage(formControl)}}\n </mat-error>\n </mat-form-field>\n </div>\n </div>\n <p class=\"read-more\"> <a\n href=\"https://configcat.com/docs/targeting/percentage-options/#percentage-options-based-on-other-user-attributes\"\n target=\"_blank\" rel=\"noopener noreferrer\">\n Read more </a> about percentage-based targeting in the docs.</p>\n</div>\n<div mat-dialog-actions>\n <button type=\"button\" mat-flat-button color=\"primary\" (click)=\"set()\">Set</button>\n <button type=\"button\" mat-stroked-button (click)=\"close()\">Cancel</button>\n</div>", styles: [".container{width:100%;display:flex;flex-direction:column}.container .description{padding:5px 0 10px}.container .components{display:flex}.container .components .custom{margin-left:16px}.container .read-more{padding-top:5px}\n"] }]
61
61
  }], ctorParameters: () => [{ type: i1.MatDialogRef }, { type: i2.FormGenerator }, { type: undefined, decorators: [{
62
62
  type: Inject,
63
63
  args: [MAT_DIALOG_DATA]
64
64
  }] }] });
65
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVyY2VudGFnZS1ldmFsdWF0aW9uLWF0dHJpYnV0ZS1kaWFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctY29uZmlnY2F0LXB1YmxpY2FwaS11aS9zcmMvbGliL3YyL2ZlYXR1cmUtZmxhZy9wZXJjZW50YWdlLWV2YWx1YXRpb24tYXR0cmlidXRlLWRpYWxvZy9wZXJjZW50YWdlLWV2YWx1YXRpb24tYXR0cmlidXRlLWRpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1jb25maWdjYXQtcHVibGljYXBpLXVpL3NyYy9saWIvdjIvZmVhdHVyZS1mbGFnL3BlcmNlbnRhZ2UtZXZhbHVhdGlvbi1hdHRyaWJ1dGUtZGlhbG9nL3BlcmNlbnRhZ2UtZXZhbHVhdGlvbi1hdHRyaWJ1dGUtZGlhbG9nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBRTFELE9BQU8sRUFBZ0IsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekUsT0FBTyxFQUFFLFVBQVUsRUFBaUIsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7Ozs7O0FBTy9ELE1BQU0sT0FBTyw0Q0FBNEM7SUFPdkQsWUFDUyxTQUFxRSxFQUNwRSxhQUE0QixFQUNKLElBQWtFO1FBRjNGLGNBQVMsR0FBVCxTQUFTLENBQTREO1FBQ3BFLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQ0osU0FBSSxHQUFKLElBQUksQ0FBOEQ7UUFScEcsZUFBVSxHQUFHLFVBQVUsQ0FBQztRQUV4QixnQ0FBMkIsR0FBRyxDQUFDLFlBQVksRUFBRSxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFRakUsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsZ0RBQWdELENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyw2QkFBNkIsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQ3JKLENBQUM7SUFFRCxLQUFLO1FBQ0gsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsS0FBWTtRQUMzQixNQUFNLEtBQUssR0FBSSxLQUFLLENBQUMsTUFBNEIsQ0FBQyxLQUFLLENBQUM7UUFDeEQsSUFBSSxJQUFJLENBQUMsMkJBQTJCLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzFELElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEtBQUssSUFBSSxFQUFFLENBQUM7Z0JBQ3BDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNoQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2pDLENBQUM7UUFDSCxDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDakMsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssS0FBSyxLQUFLLEVBQUUsQ0FBQztnQkFDckMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2pDLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDakMsQ0FBQztRQUNILENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxLQUFLLEVBQUUsRUFBRSxDQUFDO1lBQ3pDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzlCLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDakMsQ0FBQztJQUNILENBQUM7SUFFRCxTQUFTLENBQUMsU0FBaUI7UUFDekIsT0FBTyxTQUFTLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDMUYsQ0FBQztJQUVELEdBQUc7UUFDRCxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNqQyxPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsNkJBQTZCLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ2xGLENBQUM7OEdBbkRVLDRDQUE0QywyRUFVN0MsZUFBZTtrR0FWZCw0Q0FBNEMsa0ZDVnpELDJyRUFxQ007OzJGRDNCTyw0Q0FBNEM7a0JBTHhELFNBQVM7K0JBQ0UsNENBQTRDOzswQkFjbkQsTUFBTTsyQkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3QsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXREaWFsb2dSZWYsIE1BVF9ESUFMT0dfREFUQSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBGb3JtSGVscGVyLCBGb3JtR2VuZXJhdG9yIH0gZnJvbSAnLi4vLi4vLi4vYm9vdHN0cmFwJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXBlcmNlbnRhZ2UtZXZhbHVhdGlvbi1hdHRyaWJ1dGUtZGlhbG9nJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3BlcmNlbnRhZ2UtZXZhbHVhdGlvbi1hdHRyaWJ1dGUtZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcGVyY2VudGFnZS1ldmFsdWF0aW9uLWF0dHJpYnV0ZS1kaWFsb2cuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBQZXJjZW50YWdlRXZhbHVhdGlvbkF0dHJpYnV0ZURpYWxvZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgRm9ybUhlbHBlciA9IEZvcm1IZWxwZXI7XG4gIHJlYWRPbmx5OiBib29sZWFuO1xuICBkZWZhdWx0Q29tcGFyaXNvbkF0dHJpYnV0ZXMgPSBbJ0lkZW50aWZpZXInLCAnRW1haWwnLCAnQ291bnRyeSddO1xuICBmb3JtQ29udHJvbDogRm9ybUNvbnRyb2w8c3RyaW5nPjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8UGVyY2VudGFnZUV2YWx1YXRpb25BdHRyaWJ1dGVEaWFsb2dDb21wb25lbnQ+LFxuICAgIHByaXZhdGUgZm9ybUdlbmVyYXRvcjogRm9ybUdlbmVyYXRvcixcbiAgICBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHVibGljIGRhdGE6IHsgcGVyY2VudGFnZUV2YWx1YXRpb25BdHRyaWJ1dGU6IHN0cmluZywgcmVhZE9ubHk6IGJvb2xlYW4gfVxuICApIHtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZm9ybUNvbnRyb2wgPSB0aGlzLmZvcm1HZW5lcmF0b3IuZ2VuZXJhdGVQZXJjZW50YWdlRXZhbHVhdGlvbkF0dHJpYnV0ZUZvcm1Db250cm9sKHRoaXMuZGF0YS5wZXJjZW50YWdlRXZhbHVhdGlvbkF0dHJpYnV0ZSwgdGhpcy5kYXRhLnJlYWRPbmx5KVxuICB9XG5cbiAgY2xvc2UoKSB7XG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoKTtcbiAgfVxuXG4gIGF0dHJpYnV0ZUNoYW5nZWQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgdmFsdWUgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxTZWxlY3RFbGVtZW50KS52YWx1ZTtcbiAgICBpZiAodGhpcy5kZWZhdWx0Q29tcGFyaXNvbkF0dHJpYnV0ZXMuaW5kZXhPZih2YWx1ZSkgPT09IDApIHtcbiAgICAgIGlmICh0aGlzLmZvcm1Db250cm9sLnZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUobnVsbCk7XG4gICAgICAgIHRoaXMuZm9ybUNvbnRyb2wubWFya0FzRGlydHkoKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNEZWZhdWx0KHZhbHVlKSkge1xuICAgICAgaWYgKHRoaXMuZm9ybUNvbnRyb2wudmFsdWUgIT09IHZhbHVlKSB7XG4gICAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUodmFsdWUpO1xuICAgICAgICB0aGlzLmZvcm1Db250cm9sLm1hcmtBc0RpcnR5KCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLmZvcm1Db250cm9sLnZhbHVlICE9PSAnJykge1xuICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZSgnJyk7XG4gICAgICB0aGlzLmZvcm1Db250cm9sLm1hcmtBc0RpcnR5KCk7XG4gICAgfVxuICB9XG5cbiAgaXNEZWZhdWx0KGF0dHJpYnV0ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGF0dHJpYnV0ZSA9PT0gbnVsbCB8fCB0aGlzLmRlZmF1bHRDb21wYXJpc29uQXR0cmlidXRlcy5pbmRleE9mKGF0dHJpYnV0ZSkgIT09IC0xO1xuICB9XG5cbiAgc2V0KCkge1xuICAgIGlmICh0aGlzLmZvcm1Db250cm9sLmludmFsaWQpIHtcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKHsgcGVyY2VudGFnZUV2YWx1YXRpb25BdHRyaWJ1dGU6IHRoaXMuZm9ybUNvbnRyb2wudmFsdWUgfSk7XG4gIH1cbn1cblxuIiwiPGgxIG1hdC1kaWFsb2ctdGl0bGU+Q2hhbmdlIHBlcmNlbnRhZ2UgZXZhbHVhdGlvbiBhdHRyaWJ1dGU8L2gxPlxuPGRpdiBtYXQtZGlhbG9nLWNvbnRlbnQgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICA8cCBjbGFzcz1cImRlc2NyaXB0aW9uXCI+XG4gICAgICAgIFdoZW4gZXZhbHVhdGluZyBwZXJjZW50YWdlLWJhc2VkIHVzZXIgdGFyZ2V0aW5nLCBDb25maWdDYXQgc2hvdWxkIHVzZSBhIHNwZWNpZmljIHVzZXIgYXR0cmlidXRlIGFzIHRoZSBiYXNpcyBmb3JcbiAgICAgICAgZGV0ZXJtaW5pbmcgd2hldGhlciBhIHVzZXIgZmFsbHMgd2l0aGluIHRoZSB0YXJnZXRlZCBwZXJjZW50YWdlIGdyb3VwLjwvcD5cblxuICAgIDxkaXYgY2xhc3M9XCJjb21wb25lbnRzXCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIHN1YnNjcmlwdFNpemluZz1cImR5bmFtaWNcIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+RXZhbHVhdGlvbiBhdHRyaWJ1dGU8L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxtYXQtaGludD5UaGlzIGF0dHJpYnV0ZSB3aWxsIGJlIHVzZWQgaW4gYWxsIHBlcmNlbnRhZ2UgYmFzZWQgdGFyZ2V0aW5nIHdpdGhpbiB0aGlzIGZlYXR1cmUgZmxhZy48L21hdC1oaW50PlxuICAgICAgICAgICAgPHNlbGVjdCBtYXROYXRpdmVDb250cm9sIChjaGFuZ2UpPVwiYXR0cmlidXRlQ2hhbmdlZCgkZXZlbnQpXCIgW2Rpc2FibGVkXT1cImZvcm1Db250cm9sLmRpc2FibGVkXCI+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgY29tcGFyaXNvbkF0dHJpYnV0ZSBvZiBkZWZhdWx0Q29tcGFyaXNvbkF0dHJpYnV0ZXM7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICBbc2VsZWN0ZWRdPVwiY29tcGFyaXNvbkF0dHJpYnV0ZSA9PT0gZm9ybUNvbnRyb2wudmFsdWUgfHwgKGZvcm1Db250cm9sLnZhbHVlID09PSBudWxsICYmIGkgPT09IDApXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7Y29tcGFyaXNvbkF0dHJpYnV0ZX19PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiBbc2VsZWN0ZWRdPVwiIWlzRGVmYXVsdChmb3JtQ29udHJvbC52YWx1ZSlcIj5cbiAgICAgICAgICAgICAgICAgICAgQ3VzdG9tXG4gICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPGRpdiBjbGFzcz1cImN1c3RvbVwiIFtoaWRkZW5dPVwiaXNEZWZhdWx0KGZvcm1Db250cm9sLnZhbHVlKVwiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgc3Vic2NyaXB0U2l6aW5nPVwiZHluYW1pY1wiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+Q3VzdG9tIGF0dHJpYnV0ZTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPVwidGV4dFwiIFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbFwiPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJmb3JtQ29udHJvbC5pbnZhbGlkXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7Rm9ybUhlbHBlci5nZXRFcnJvck1lc3NhZ2UoZm9ybUNvbnRyb2wpfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxwIGNsYXNzPVwicmVhZC1tb3JlXCI+IDxhXG4gICAgICAgICAgICBocmVmPVwiaHR0cHM6Ly9jb25maWdjYXQuY29tL2RvY3MvVjIvdGFyZ2V0aW5nL3BlcmNlbnRhZ2Utb3B0aW9ucy8jcGVyY2VudGFnZS1vcHRpb25zLWJhc2VkLW9uLW90aGVyLXVzZXItYXR0cmlidXRlc1wiXG4gICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIiByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCI+XG4gICAgICAgICAgICBSZWFkIG1vcmUgPC9hPiBhYm91dCBwZXJjZW50YWdlLWJhc2VkIHRhcmdldGluZyBpbiB0aGUgZG9jcy48L3A+XG48L2Rpdj5cbjxkaXYgbWF0LWRpYWxvZy1hY3Rpb25zPlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1mbGF0LWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwic2V0KClcIj5TZXQ8L2J1dHRvbj5cbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtc3Ryb2tlZC1idXR0b24gKGNsaWNrKT1cImNsb3NlKClcIj5DYW5jZWw8L2J1dHRvbj5cbjwvZGl2PiJdfQ==
65
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVyY2VudGFnZS1ldmFsdWF0aW9uLWF0dHJpYnV0ZS1kaWFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctY29uZmlnY2F0LXB1YmxpY2FwaS11aS9zcmMvbGliL3YyL2ZlYXR1cmUtZmxhZy9wZXJjZW50YWdlLWV2YWx1YXRpb24tYXR0cmlidXRlLWRpYWxvZy9wZXJjZW50YWdlLWV2YWx1YXRpb24tYXR0cmlidXRlLWRpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1jb25maWdjYXQtcHVibGljYXBpLXVpL3NyYy9saWIvdjIvZmVhdHVyZS1mbGFnL3BlcmNlbnRhZ2UtZXZhbHVhdGlvbi1hdHRyaWJ1dGUtZGlhbG9nL3BlcmNlbnRhZ2UtZXZhbHVhdGlvbi1hdHRyaWJ1dGUtZGlhbG9nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBRTFELE9BQU8sRUFBZ0IsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekUsT0FBTyxFQUFFLFVBQVUsRUFBaUIsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7Ozs7O0FBTy9ELE1BQU0sT0FBTyw0Q0FBNEM7SUFPdkQsWUFDUyxTQUFxRSxFQUNwRSxhQUE0QixFQUNKLElBQWtFO1FBRjNGLGNBQVMsR0FBVCxTQUFTLENBQTREO1FBQ3BFLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQ0osU0FBSSxHQUFKLElBQUksQ0FBOEQ7UUFScEcsZUFBVSxHQUFHLFVBQVUsQ0FBQztRQUV4QixnQ0FBMkIsR0FBRyxDQUFDLFlBQVksRUFBRSxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFRakUsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsZ0RBQWdELENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyw2QkFBNkIsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQ3JKLENBQUM7SUFFRCxLQUFLO1FBQ0gsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsS0FBWTtRQUMzQixNQUFNLEtBQUssR0FBSSxLQUFLLENBQUMsTUFBNEIsQ0FBQyxLQUFLLENBQUM7UUFDeEQsSUFBSSxJQUFJLENBQUMsMkJBQTJCLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzFELElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEtBQUssSUFBSSxFQUFFLENBQUM7Z0JBQ3BDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNoQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2pDLENBQUM7UUFDSCxDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDakMsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssS0FBSyxLQUFLLEVBQUUsQ0FBQztnQkFDckMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2pDLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDakMsQ0FBQztRQUNILENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxLQUFLLEVBQUUsRUFBRSxDQUFDO1lBQ3pDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzlCLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDakMsQ0FBQztJQUNILENBQUM7SUFFRCxTQUFTLENBQUMsU0FBaUI7UUFDekIsT0FBTyxTQUFTLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDMUYsQ0FBQztJQUVELEdBQUc7UUFDRCxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNqQyxPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsNkJBQTZCLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ2xGLENBQUM7OEdBbkRVLDRDQUE0QywyRUFVN0MsZUFBZTtrR0FWZCw0Q0FBNEMsa0ZDVnpELHdyRUFxQ007OzJGRDNCTyw0Q0FBNEM7a0JBTHhELFNBQVM7K0JBQ0UsNENBQTRDOzswQkFjbkQsTUFBTTsyQkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3QsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXREaWFsb2dSZWYsIE1BVF9ESUFMT0dfREFUQSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBGb3JtSGVscGVyLCBGb3JtR2VuZXJhdG9yIH0gZnJvbSAnLi4vLi4vLi4vYm9vdHN0cmFwJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXBlcmNlbnRhZ2UtZXZhbHVhdGlvbi1hdHRyaWJ1dGUtZGlhbG9nJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3BlcmNlbnRhZ2UtZXZhbHVhdGlvbi1hdHRyaWJ1dGUtZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcGVyY2VudGFnZS1ldmFsdWF0aW9uLWF0dHJpYnV0ZS1kaWFsb2cuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBQZXJjZW50YWdlRXZhbHVhdGlvbkF0dHJpYnV0ZURpYWxvZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgRm9ybUhlbHBlciA9IEZvcm1IZWxwZXI7XG4gIHJlYWRPbmx5OiBib29sZWFuO1xuICBkZWZhdWx0Q29tcGFyaXNvbkF0dHJpYnV0ZXMgPSBbJ0lkZW50aWZpZXInLCAnRW1haWwnLCAnQ291bnRyeSddO1xuICBmb3JtQ29udHJvbDogRm9ybUNvbnRyb2w8c3RyaW5nPjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8UGVyY2VudGFnZUV2YWx1YXRpb25BdHRyaWJ1dGVEaWFsb2dDb21wb25lbnQ+LFxuICAgIHByaXZhdGUgZm9ybUdlbmVyYXRvcjogRm9ybUdlbmVyYXRvcixcbiAgICBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHVibGljIGRhdGE6IHsgcGVyY2VudGFnZUV2YWx1YXRpb25BdHRyaWJ1dGU6IHN0cmluZywgcmVhZE9ubHk6IGJvb2xlYW4gfVxuICApIHtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZm9ybUNvbnRyb2wgPSB0aGlzLmZvcm1HZW5lcmF0b3IuZ2VuZXJhdGVQZXJjZW50YWdlRXZhbHVhdGlvbkF0dHJpYnV0ZUZvcm1Db250cm9sKHRoaXMuZGF0YS5wZXJjZW50YWdlRXZhbHVhdGlvbkF0dHJpYnV0ZSwgdGhpcy5kYXRhLnJlYWRPbmx5KVxuICB9XG5cbiAgY2xvc2UoKSB7XG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoKTtcbiAgfVxuXG4gIGF0dHJpYnV0ZUNoYW5nZWQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgdmFsdWUgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxTZWxlY3RFbGVtZW50KS52YWx1ZTtcbiAgICBpZiAodGhpcy5kZWZhdWx0Q29tcGFyaXNvbkF0dHJpYnV0ZXMuaW5kZXhPZih2YWx1ZSkgPT09IDApIHtcbiAgICAgIGlmICh0aGlzLmZvcm1Db250cm9sLnZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUobnVsbCk7XG4gICAgICAgIHRoaXMuZm9ybUNvbnRyb2wubWFya0FzRGlydHkoKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNEZWZhdWx0KHZhbHVlKSkge1xuICAgICAgaWYgKHRoaXMuZm9ybUNvbnRyb2wudmFsdWUgIT09IHZhbHVlKSB7XG4gICAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUodmFsdWUpO1xuICAgICAgICB0aGlzLmZvcm1Db250cm9sLm1hcmtBc0RpcnR5KCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLmZvcm1Db250cm9sLnZhbHVlICE9PSAnJykge1xuICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZSgnJyk7XG4gICAgICB0aGlzLmZvcm1Db250cm9sLm1hcmtBc0RpcnR5KCk7XG4gICAgfVxuICB9XG5cbiAgaXNEZWZhdWx0KGF0dHJpYnV0ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGF0dHJpYnV0ZSA9PT0gbnVsbCB8fCB0aGlzLmRlZmF1bHRDb21wYXJpc29uQXR0cmlidXRlcy5pbmRleE9mKGF0dHJpYnV0ZSkgIT09IC0xO1xuICB9XG5cbiAgc2V0KCkge1xuICAgIGlmICh0aGlzLmZvcm1Db250cm9sLmludmFsaWQpIHtcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKHsgcGVyY2VudGFnZUV2YWx1YXRpb25BdHRyaWJ1dGU6IHRoaXMuZm9ybUNvbnRyb2wudmFsdWUgfSk7XG4gIH1cbn1cblxuIiwiPGgxIG1hdC1kaWFsb2ctdGl0bGU+Q2hhbmdlIHBlcmNlbnRhZ2UgZXZhbHVhdGlvbiBhdHRyaWJ1dGU8L2gxPlxuPGRpdiBtYXQtZGlhbG9nLWNvbnRlbnQgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICA8cCBjbGFzcz1cImRlc2NyaXB0aW9uXCI+XG4gICAgICAgIFdoZW4gZXZhbHVhdGluZyBwZXJjZW50YWdlLWJhc2VkIHVzZXIgdGFyZ2V0aW5nLCBDb25maWdDYXQgc2hvdWxkIHVzZSBhIHNwZWNpZmljIHVzZXIgYXR0cmlidXRlIGFzIHRoZSBiYXNpcyBmb3JcbiAgICAgICAgZGV0ZXJtaW5pbmcgd2hldGhlciBhIHVzZXIgZmFsbHMgd2l0aGluIHRoZSB0YXJnZXRlZCBwZXJjZW50YWdlIGdyb3VwLjwvcD5cblxuICAgIDxkaXYgY2xhc3M9XCJjb21wb25lbnRzXCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIHN1YnNjcmlwdFNpemluZz1cImR5bmFtaWNcIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+RXZhbHVhdGlvbiBhdHRyaWJ1dGU8L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxtYXQtaGludD5UaGlzIGF0dHJpYnV0ZSB3aWxsIGJlIHVzZWQgaW4gYWxsIHBlcmNlbnRhZ2UgYmFzZWQgdGFyZ2V0aW5nIHdpdGhpbiB0aGlzIGZlYXR1cmUgZmxhZy48L21hdC1oaW50PlxuICAgICAgICAgICAgPHNlbGVjdCBtYXROYXRpdmVDb250cm9sIChjaGFuZ2UpPVwiYXR0cmlidXRlQ2hhbmdlZCgkZXZlbnQpXCIgW2Rpc2FibGVkXT1cImZvcm1Db250cm9sLmRpc2FibGVkXCI+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgY29tcGFyaXNvbkF0dHJpYnV0ZSBvZiBkZWZhdWx0Q29tcGFyaXNvbkF0dHJpYnV0ZXM7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICBbc2VsZWN0ZWRdPVwiY29tcGFyaXNvbkF0dHJpYnV0ZSA9PT0gZm9ybUNvbnRyb2wudmFsdWUgfHwgKGZvcm1Db250cm9sLnZhbHVlID09PSBudWxsICYmIGkgPT09IDApXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7Y29tcGFyaXNvbkF0dHJpYnV0ZX19PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiBbc2VsZWN0ZWRdPVwiIWlzRGVmYXVsdChmb3JtQ29udHJvbC52YWx1ZSlcIj5cbiAgICAgICAgICAgICAgICAgICAgQ3VzdG9tXG4gICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPGRpdiBjbGFzcz1cImN1c3RvbVwiIFtoaWRkZW5dPVwiaXNEZWZhdWx0KGZvcm1Db250cm9sLnZhbHVlKVwiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgc3Vic2NyaXB0U2l6aW5nPVwiZHluYW1pY1wiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+Q3VzdG9tIGF0dHJpYnV0ZTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPVwidGV4dFwiIFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbFwiPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJmb3JtQ29udHJvbC5pbnZhbGlkXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7Rm9ybUhlbHBlci5nZXRFcnJvck1lc3NhZ2UoZm9ybUNvbnRyb2wpfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxwIGNsYXNzPVwicmVhZC1tb3JlXCI+IDxhXG4gICAgICAgICAgICBocmVmPVwiaHR0cHM6Ly9jb25maWdjYXQuY29tL2RvY3MvdGFyZ2V0aW5nL3BlcmNlbnRhZ2Utb3B0aW9ucy8jcGVyY2VudGFnZS1vcHRpb25zLWJhc2VkLW9uLW90aGVyLXVzZXItYXR0cmlidXRlc1wiXG4gICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIiByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCI+XG4gICAgICAgICAgICBSZWFkIG1vcmUgPC9hPiBhYm91dCBwZXJjZW50YWdlLWJhc2VkIHRhcmdldGluZyBpbiB0aGUgZG9jcy48L3A+XG48L2Rpdj5cbjxkaXYgbWF0LWRpYWxvZy1hY3Rpb25zPlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1mbGF0LWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwic2V0KClcIj5TZXQ8L2J1dHRvbj5cbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtc3Ryb2tlZC1idXR0b24gKGNsaWNrKT1cImNsb3NlKClcIj5DYW5jZWw8L2J1dHRvbj5cbjwvZGl2PiJdfQ==