UNPKG

ngx-ntk-query-builder

Version:

Angular query builder

116 lines 16.3 kB
import { Injectable } from '@angular/core'; import * as i0 from "@angular/core"; import * as i1 from "@ngx-translate/core"; export class OperatorsService { constructor(translate) { this.translate = translate; this.INPUT_TYPE_STRING = 'string'; this.INPUT_TYPE_INTEGER = 'integer'; this.INPUT_TYPE_DOUBLE = 'double'; this.INPUT_TYPE_TIME = 'time'; this.INPUT_TYPE_DATE = 'date'; this.INPUT_TYPE_SELECT = 'select'; this.INPUT_TYPE_BOOLEAN = 'boolean'; this.INPUT_TYPE_MULTI_SELECT = 'multi_select'; this.NULLABLE_OPERATORS = ['is_null', 'is_not_null']; this.EMPTY_OPERATORS = ['is_empty', 'is_not_empty']; this.MULTI_SELECT_OPERATORS = ['in', 'not_in']; this.defaultOperator = 'equal'; this.operatorsMap = { string: ['equal', 'not_equal', 'contains', 'not_contains', 'begins_with', 'not_begins_with', 'ends_with', 'not_ends_with'], integer: ['equal', 'not_equal', 'greater', 'greater_or_equal', 'less', 'less_or_equal'], double: ['equal', 'not_equal', 'greater', 'greater_or_equal', 'less', 'less_or_equal'], time: ['equal', 'not_equal', 'greater', 'greater_or_equal', 'less', 'less_or_equal'], date: ['equal', 'not_equal', 'greater', 'greater_or_equal', 'less', 'less_or_equal'], select: ['equal', 'not_equal', ...this.MULTI_SELECT_OPERATORS], boolean: ['equal'], }; this.operatorsDisplayNames = { equal: 'querybuilder.equal', not_equal: 'querybuilder.not_equal', contains: 'querybuilder.contains', not_contains: 'querybuilder.not_contains', begins_with: 'querybuilder.begins_with', not_begins_with: 'querybuilder.not_begins_with', ends_with: 'querybuilder.ends_with', not_ends_with: 'querybuilder.not_ends_with', greater: 'querybuilder.greater', greater_or_equal: 'querybuilder.greater_or_equal', less: 'querybuilder.less', less_or_equal: 'querybuilder.less_or_equal', is_null: 'querybuilder.is_null', is_not_null: 'querybuilder.is_not_null', is_empty: 'querybuilder.is_empty', is_not_empty: 'querybuilder.is_not_empty', in: 'querybuilder.in', not_in: 'querybuilder.not_in' }; this.operatorsDisplayNames___old = { equal: 'Equals', not_equal: 'Does not equal', contains: 'Contains', not_contains: 'Does not contain', begins_with: 'Begins with', not_begins_with: 'Does not begins with', ends_with: 'Ends with', not_ends_with: 'Does not end with', greater: 'Greater than', greater_or_equal: 'Greater than or equal', less: 'Less than', less_or_equal: 'Less than or equal', is_null: 'Is null', is_not_null: 'Is not null', is_empty: 'Is empty', is_not_empty: 'Is not empty', in: 'In', not_in: 'Not in' }; } getOperators(rule, fieldMap) { if (!this.getAvailableTypes().includes(rule.type)) { console.error('Type of rule is not valid. Please use one of the following types: ' + this.getAvailableTypes().join(', ')); } let operators = this.operatorsMap[rule.type]; // allow nullable if (fieldMap[rule.field].settings && fieldMap[rule.field].settings.nullableOperators) { operators = [...operators, ...this.NULLABLE_OPERATORS]; } // allow empty if (fieldMap[rule.field].settings && fieldMap[rule.field].settings.emptyOperators) { operators = [...operators, ...this.EMPTY_OPERATORS]; } return operators; } getDefaultOperator() { return this.defaultOperator; } getOperatorsWithoutInput() { return [...this.NULLABLE_OPERATORS, ...this.EMPTY_OPERATORS]; } getOperatorDisplayName(operator) { if (this.operatorsDisplayNames[operator]) { return this.operatorsDisplayNames[operator]; } return operator; } getAvailableTypes() { return [ this.INPUT_TYPE_STRING, this.INPUT_TYPE_INTEGER, this.INPUT_TYPE_DOUBLE, this.INPUT_TYPE_TIME, this.INPUT_TYPE_DATE, this.INPUT_TYPE_SELECT, this.INPUT_TYPE_BOOLEAN ]; } } OperatorsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OperatorsService, deps: [{ token: i1.TranslateService }], target: i0.ɵɵFactoryTarget.Injectable }); OperatorsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OperatorsService, providedIn: 'root' }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OperatorsService, decorators: [{ type: Injectable, args: [{ providedIn: 'root' }] }], ctorParameters: function () { return [{ type: i1.TranslateService }]; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlcmF0b3JzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbnRrLXF1ZXJ5LWJ1aWxkZXIvc3JjL2xpYi9zZXJ2aWNlcy9vcGVyYXRvcnMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7QUFPM0MsTUFBTSxPQUFPLGdCQUFnQjtJQW9FM0IsWUFBb0IsU0FBMkI7UUFBM0IsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFsRXRDLHNCQUFpQixHQUFHLFFBQVEsQ0FBQztRQUM3Qix1QkFBa0IsR0FBRyxTQUFTLENBQUM7UUFDL0Isc0JBQWlCLEdBQUcsUUFBUSxDQUFDO1FBQzdCLG9CQUFlLEdBQUcsTUFBTSxDQUFDO1FBQ3pCLG9CQUFlLEdBQUcsTUFBTSxDQUFDO1FBQ3pCLHNCQUFpQixHQUFHLFFBQVEsQ0FBQztRQUM3Qix1QkFBa0IsR0FBRyxTQUFTLENBQUM7UUFFL0IsNEJBQXVCLEdBQUcsY0FBYyxDQUFDO1FBRXpDLHVCQUFrQixHQUFHLENBQUMsU0FBUyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQ2hELG9CQUFlLEdBQUcsQ0FBQyxVQUFVLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDL0MsMkJBQXNCLEdBQUcsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFFbEMsb0JBQWUsR0FBRyxPQUFPLENBQUM7UUFFMUIsaUJBQVksR0FBZ0M7WUFDM0QsTUFBTSxFQUFFLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsZUFBZSxDQUFDO1lBQzFILE9BQU8sRUFBRSxDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sRUFBRSxlQUFlLENBQUM7WUFDdkYsTUFBTSxF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LENBQUMsY0FBYyxFQUFFO1lBQ2pGLFNBQVMsR0FBRyxDQUFDLEdBQUcsU0FBUyxFQUFFLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1NBQ3JEO1FBRUQsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDOUIsQ0FBQztJQUVELHdCQUF3QjtRQUN0QixPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVELHNCQUFzQixDQUFDLFFBQWdCO1FBQ3JDLElBQUksSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ3hDLE9BQU8sSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQzdDO1FBQ0QsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVPLGlCQUFpQjtRQUN2QixPQUFPO1lBQ0wsSUFBSSxDQUFDLGlCQUFpQjtZQUN0QixJQUFJLENBQUMsa0JBQWtCO1lBQ3ZCLElBQUksQ0FBQyxpQkFBaUI7WUFDdEIsSUFBSSxDQUFDLGVBQWU7WUFDcEIsSUFBSSxDQUFDLGVBQWU7WUFDcEIsSUFBSSxDQUFDLGlCQUFpQjtZQUN0QixJQUFJLENBQUMsa0JBQWtCO1NBQ3hCLENBQUM7SUFDSixDQUFDOzs4R0FySFUsZ0JBQWdCO2tIQUFoQixnQkFBZ0IsY0FGZixNQUFNOzRGQUVQLGdCQUFnQjtrQkFINUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHsgUXVlcnlCdWlsZGVyRmllbGRNYXAsIFF1ZXJ5UnVsZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvbmd4LW50ay1xdWVyeS1idWlsZGVyLmludGVyZmFjZXMnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgT3BlcmF0b3JzU2VydmljZSB7XHJcblxyXG4gIHJlYWRvbmx5IElOUFVUX1RZUEVfU1RSSU5HID0gJ3N0cmluZyc7XHJcbiAgcmVhZG9ubHkgSU5QVVRfVFlQRV9JTlRFR0VSID0gJ2ludGVnZXInO1xyXG4gIHJlYWRvbmx5IElOUFVUX1RZUEVfRE9VQkxFID0gJ2RvdWJsZSc7XHJcbiAgcmVhZG9ubHkgSU5QVVRfVFlQRV9USU1FID0gJ3RpbWUnO1xyXG4gIHJlYWRvbmx5IElOUFVUX1RZUEVfREFURSA9ICdkYXRlJztcclxuICByZWFkb25seSBJTlBVVF9UWVBFX1NFTEVDVCA9ICdzZWxlY3QnO1xyXG4gIHJlYWRvbmx5IElOUFVUX1RZUEVfQk9PTEVBTiA9ICdib29sZWFuJztcclxuXHJcbiAgcmVhZG9ubHkgSU5QVVRfVFlQRV9NVUxUSV9TRUxFQ1QgPSAnbXVsdGlfc2VsZWN0JztcclxuXHJcbiAgcmVhZG9ubHkgTlVMTEFCTEVfT1BFUkFUT1JTID0gWydpc19udWxsJywgJ2lzX25vdF9udWxsJ107XHJcbiAgcmVhZG9ubHkgRU1QVFlfT1BFUkFUT1JTID0gWydpc19lbXB0eScsICdpc19ub3RfZW1wdHknXTtcclxuICByZWFkb25seSBNVUxUSV9TRUxFQ1RfT1BFUkFUT1JTID0gWydpbicsICdub3RfaW4nXTtcclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBkZWZhdWx0T3BlcmF0b3IgPSAnZXF1YWwnO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IG9wZXJhdG9yc01hcDogeyBba2V5OiBzdHJpbmddOiBzdHJpbmdbXSB9ID0ge1xyXG4gICAgc3RyaW5nOiBbJ2VxdWFsJywgJ25vdF9lcXVhbCcsICdjb250YWlucycsICdub3RfY29udGFpbnMnLCAnYmVnaW5zX3dpdGgnLCAnbm90X2JlZ2luc193aXRoJywgJ2VuZHNfd2l0aCcsICdub3RfZW5kc193aXRoJ10sXHJcbiAgICBpbnRlZ2VyOiBbJ2VxdWFsJywgJ25vdF9lcXVhbCcsICdncmVhdGVyJywgJ2dyZWF0ZXJfb3JfZXF1YWwnLCAnbGVzcycsICdsZXNzX29yX2VxdWFsJ10sXHJcbiAgICBkb3VibGU6IFsnZXF1YWwnLCAnbm90X2VxdWFsJywgJ2dyZWF0ZXInLCAnZ3JlYXRlcl9vcl9lcXVhbCcsICdsZXNzJywgJ2xlc3Nfb3JfZXF1YWwnXSxcclxuICAgIHRpbWU6IFsnZXF1YWwnLCAnbm90X2VxdWFsJywgJ2dyZWF0ZXInLCAnZ3JlYXRlcl9vcl9lcXVhbCcsICdsZXNzJywgJ2xlc3Nfb3JfZXF1YWwnXSxcclxuICAgIGRhdGU6IFsnZXF1YWwnLCAnbm90X2VxdWFsJywgJ2dyZWF0ZXInLCAnZ3JlYXRlcl9vcl9lcXVhbCcsICdsZXNzJywgJ2xlc3Nfb3JfZXF1YWwnXSxcclxuICAgIHNlbGVjdDogWydlcXVhbCcsICdub3RfZXF1YWwnLCAuLi50aGlzLk1VTFRJX1NFTEVDVF9PUEVSQVRPUlNdLFxyXG4gICAgYm9vbGVhbjogWydlcXVhbCddLFxyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgb3BlcmF0b3JzRGlzcGxheU5hbWVzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xyXG4gICAgZXF1YWw6ICdxdWVyeWJ1aWxkZXIuZXF1YWwnLFxyXG4gICAgbm90X2VxdWFsOiAncXVlcnlidWlsZGVyLm5vdF9lcXVhbCcsXHJcbiAgICBjb250YWluczogJ3F1ZXJ5YnVpbGRlci5jb250YWlucycsXHJcbiAgICBub3RfY29udGFpbnM6ICdxdWVyeWJ1aWxkZXIubm90X2NvbnRhaW5zJyxcclxuICAgIGJlZ2luc193aXRoOiAncXVlcnlidWlsZGVyLmJlZ2luc193aXRoJyxcclxuICAgIG5vdF9iZWdpbnNfd2l0aDogJ3F1ZXJ5YnVpbGRlci5ub3RfYmVnaW5zX3dpdGgnLFxyXG4gICAgZW5kc193aXRoOiAncXVlcnlidWlsZGVyLmVuZHNfd2l0aCcsXHJcbiAgICBub3RfZW5kc193aXRoOiAncXVlcnlidWlsZGVyLm5vdF9lbmRzX3dpdGgnLFxyXG4gICAgZ3JlYXRlcjogJ3F1ZXJ5YnVpbGRlci5ncmVhdGVyJyxcclxuICAgIGdyZWF0ZXJfb3JfZXF1YWw6ICdxdWVyeWJ1aWxkZXIuZ3JlYXRlcl9vcl9lcXVhbCcsXHJcbiAgICBsZXNzOiAncXVlcnlidWlsZGVyLmxlc3MnLFxyXG4gICAgbGVzc19vcl9lcXVhbDogJ3F1ZXJ5YnVpbGRlci5sZXNzX29yX2VxdWFsJyxcclxuICAgIGlzX251bGw6ICdxdWVyeWJ1aWxkZXIuaXNfbnVsbCcsXHJcbiAgICBpc19ub3RfbnVsbDogJ3F1ZXJ5YnVpbGRlci5pc19ub3RfbnVsbCcsXHJcbiAgICBpc19lbXB0eTogJ3F1ZXJ5YnVpbGRlci5pc19lbXB0eScsXHJcbiAgICBpc19ub3RfZW1wdHk6ICdxdWVyeWJ1aWxkZXIuaXNfbm90X2VtcHR5JyxcclxuICAgIGluOiAncXVlcnlidWlsZGVyLmluJyxcclxuICAgIG5vdF9pbjogJ3F1ZXJ5YnVpbGRlci5ub3RfaW4nXHJcbiAgfTtcclxuICBwcml2YXRlIHJlYWRvbmx5IG9wZXJhdG9yc0Rpc3BsYXlOYW1lc19fX29sZDogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcclxuICAgIGVxdWFsOiAnRXF1YWxzJyxcclxuICAgIG5vdF9lcXVhbDogJ0RvZXMgbm90IGVxdWFsJyxcclxuICAgIGNvbnRhaW5zOiAnQ29udGFpbnMnLFxyXG4gICAgbm90X2NvbnRhaW5zOiAnRG9lcyBub3QgY29udGFpbicsXHJcbiAgICBiZWdpbnNfd2l0aDogJ0JlZ2lucyB3aXRoJyxcclxuICAgIG5vdF9iZWdpbnNfd2l0aDogJ0RvZXMgbm90IGJlZ2lucyB3aXRoJyxcclxuICAgIGVuZHNfd2l0aDogJ0VuZHMgd2l0aCcsXHJcbiAgICBub3RfZW5kc193aXRoOiAnRG9lcyBub3QgZW5kIHdpdGgnLFxyXG4gICAgZ3JlYXRlcjogJ0dyZWF0ZXIgdGhhbicsXHJcbiAgICBncmVhdGVyX29yX2VxdWFsOiAnR3JlYXRlciB0aGFuIG9yIGVxdWFsJyxcclxuICAgIGxlc3M6ICdMZXNzIHRoYW4nLFxyXG4gICAgbGVzc19vcl9lcXVhbDogJ0xlc3MgdGhhbiBvciBlcXVhbCcsXHJcbiAgICBpc19udWxsOiAnSXMgbnVsbCcsXHJcbiAgICBpc19ub3RfbnVsbDogJ0lzIG5vdCBudWxsJyxcclxuICAgIGlzX2VtcHR5OiAnSXMgZW1wdHknLFxyXG4gICAgaXNfbm90X2VtcHR5OiAnSXMgbm90IGVtcHR5JyxcclxuICAgIGluOiAnSW4nLFxyXG4gICAgbm90X2luOiAnTm90IGluJ1xyXG4gIH07XHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgKSB7IH1cclxuXHJcbiAgZ2V0T3BlcmF0b3JzKHJ1bGU6IFF1ZXJ5UnVsZSwgZmllbGRNYXA6IFF1ZXJ5QnVpbGRlckZpZWxkTWFwKTogc3RyaW5nW10ge1xyXG5cclxuICAgIGlmICghdGhpcy5nZXRBdmFpbGFibGVUeXBlcygpLmluY2x1ZGVzKHJ1bGUudHlwZSkpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVHlwZSBvZiBydWxlIGlzIG5vdCB2YWxpZC4gUGxlYXNlIHVzZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB0eXBlczogJyArIHRoaXMuZ2V0QXZhaWxhYmxlVHlwZXMoKS5qb2luKCcsICcpKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgb3BlcmF0b3JzID0gdGhpcy5vcGVyYXRvcnNNYXBbcnVsZS50eXBlXTtcclxuXHJcbiAgICAvLyBhbGxvdyBudWxsYWJsZVxyXG4gICAgaWYgKGZpZWxkTWFwW3J1bGUuZmllbGRdLnNldHRpbmdzICYmIGZpZWxkTWFwW3J1bGUuZmllbGRdLnNldHRpbmdzLm51bGxhYmxlT3BlcmF0b3JzKSB7XHJcbiAgICAgIG9wZXJhdG9ycyA9IFsuLi5vcGVyYXRvcnMsIC4uLnRoaXMuTlVMTEFCTEVfT1BFUkFUT1JTXTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBhbGxvdyBlbXB0eVxyXG4gICAgaWYgKGZpZWxkTWFwW3J1bGUuZmllbGRdLnNldHRpbmdzICYmIGZpZWxkTWFwW3J1bGUuZmllbGRdLnNldHRpbmdzLmVtcHR5T3BlcmF0b3JzKSB7XHJcbiAgICAgIG9wZXJhdG9ycyA9IFsuLi5vcGVyYXRvcnMsIC4uLnRoaXMuRU1QVFlfT1BFUkFUT1JTXTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gb3BlcmF0b3JzO1xyXG4gIH1cclxuXHJcbiAgZ2V0RGVmYXVsdE9wZXJhdG9yKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5kZWZhdWx0T3BlcmF0b3I7XHJcbiAgfVxyXG5cclxuICBnZXRPcGVyYXRvcnNXaXRob3V0SW5wdXQoKTogc3RyaW5nW10ge1xyXG4gICAgcmV0dXJuIFsuLi50aGlzLk5VTExBQkxFX09QRVJBVE9SUywgLi4udGhpcy5FTVBUWV9PUEVSQVRPUlNdO1xyXG4gIH1cclxuXHJcbiAgZ2V0T3BlcmF0b3JEaXNwbGF5TmFtZShvcGVyYXRvcjogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGlmICh0aGlzLm9wZXJhdG9yc0Rpc3BsYXlOYW1lc1tvcGVyYXRvcl0pIHtcclxuICAgICAgcmV0dXJuIHRoaXMub3BlcmF0b3JzRGlzcGxheU5hbWVzW29wZXJhdG9yXTtcclxuICAgIH1cclxuICAgIHJldHVybiBvcGVyYXRvcjtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0QXZhaWxhYmxlVHlwZXMoKTogc3RyaW5nW10ge1xyXG4gICAgcmV0dXJuIFtcclxuICAgICAgdGhpcy5JTlBVVF9UWVBFX1NUUklORyxcclxuICAgICAgdGhpcy5JTlBVVF9UWVBFX0lOVEVHRVIsXHJcbiAgICAgIHRoaXMuSU5QVVRfVFlQRV9ET1VCTEUsXHJcbiAgICAgIHRoaXMuSU5QVVRfVFlQRV9USU1FLFxyXG4gICAgICB0aGlzLklOUFVUX1RZUEVfREFURSxcclxuICAgICAgdGhpcy5JTlBVVF9UWVBFX1NFTEVDVCxcclxuICAgICAgdGhpcy5JTlBVVF9UWVBFX0JPT0xFQU5cclxuICAgIF07XHJcbiAgfVxyXG59XHJcbiJdfQ==