@rosoftlab/core 1.0.0-alpha-19 → 1.0.1-alpha-3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. package/fesm2022/rosoftlab-core.mjs +49 -46
  2. package/fesm2022/rosoftlab-core.mjs.map +1 -1
  3. package/package.json +8 -10
  4. package/esm2022/lib/base-components/base-form-edit.component.mjs +0 -241
  5. package/esm2022/lib/base-components/field-error-display/field-error-display.component.mjs +0 -15
  6. package/esm2022/lib/base-components/index.mjs +0 -4
  7. package/esm2022/lib/base-components/page-not-found/page-not-found.component.mjs +0 -15
  8. package/esm2022/lib/base-components/under-construction/under-construction.component.mjs +0 -12
  9. package/esm2022/lib/configurations.mjs +0 -8
  10. package/esm2022/lib/constants/symbols.mjs +0 -3
  11. package/esm2022/lib/converters/date/date.converter.mjs +0 -20
  12. package/esm2022/lib/core.mjs +0 -9
  13. package/esm2022/lib/decorators/attribute.decorator.mjs +0 -87
  14. package/esm2022/lib/decorators/base-datastore-config.decorator.mjs +0 -7
  15. package/esm2022/lib/decorators/base-model-config.decorator.mjs +0 -10
  16. package/esm2022/lib/decorators/custom.type.decorator.mjs +0 -11
  17. package/esm2022/lib/grid-layout-format.enum.mjs +0 -15
  18. package/esm2022/lib/index.mjs +0 -24
  19. package/esm2022/lib/interceptors/cache.interceptor.mjs +0 -52
  20. package/esm2022/lib/interceptors/index.mjs +0 -2
  21. package/esm2022/lib/interfaces/attribute-decorator-options.interface.mjs +0 -2
  22. package/esm2022/lib/interfaces/datastore-config.interface.mjs +0 -2
  23. package/esm2022/lib/interfaces/model-config.interface.mjs +0 -2
  24. package/esm2022/lib/interfaces/overrides.interface.mjs +0 -2
  25. package/esm2022/lib/interfaces/property-converter.interface.mjs +0 -2
  26. package/esm2022/lib/models/base-meta.model.mjs +0 -7
  27. package/esm2022/lib/models/base-query-data.mjs +0 -13
  28. package/esm2022/lib/models/base.model.mjs +0 -158
  29. package/esm2022/lib/models/error-response.model.mjs +0 -9
  30. package/esm2022/lib/models/rule.mjs +0 -6
  31. package/esm2022/lib/pipes/Nl2brPipe.pipe.mjs +0 -21
  32. package/esm2022/lib/pipes/input-error.pipe.mjs +0 -38
  33. package/esm2022/lib/providers.mjs +0 -12
  34. package/esm2022/lib/resolvers/dynamically-class-resolver.mjs +0 -22
  35. package/esm2022/lib/resolvers/dynamically-service-resolver.mjs +0 -22
  36. package/esm2022/lib/resolvers/index.mjs +0 -3
  37. package/esm2022/lib/rsl-base-module.mjs +0 -64
  38. package/esm2022/lib/services/base-datastore.service.mjs +0 -342
  39. package/esm2022/lib/services/base.service.mjs +0 -99
  40. package/esm2022/lib/services/cache.service.mjs +0 -35
  41. package/esm2022/lib/services/datastore.service.mjs +0 -33
  42. package/esm2022/lib/services/dialog.service.mjs +0 -2
  43. package/esm2022/lib/services/index.mjs +0 -7
  44. package/esm2022/lib/services/translate-loader.service.mjs +0 -33
  45. package/esm2022/lib/utils.mjs +0 -27
  46. package/esm2022/lib/validators/pattern-validator.mjs +0 -15
  47. package/esm2022/public-api.mjs +0 -5
  48. package/esm2022/rosoftlab-core.mjs +0 -5
@@ -1,33 +0,0 @@
1
- import { HttpClient, HttpHeaders } from '@angular/common/http';
2
- import { Injectable } from '@angular/core';
3
- import { Configurations } from '../configurations';
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "@angular/common/http";
6
- import * as i2 from "../configurations";
7
- export class TranslateloaderService {
8
- constructor(httpClient, config) {
9
- this.httpClient = httpClient;
10
- this._apiUrl = '';
11
- this.headers = new HttpHeaders({
12
- Accept: 'application/json',
13
- 'Content-Type': 'application/json'
14
- });
15
- console.log(config);
16
- if (config) {
17
- this._apiUrl = config.baseUrl;
18
- }
19
- }
20
- getTranslation(lang) {
21
- const url = this._apiUrl + '/api/v1/language/' + lang + '/translationlist';
22
- return this.httpClient.get(url, { headers: this.headers });
23
- }
24
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: TranslateloaderService, deps: [{ token: i1.HttpClient }, { token: i2.Configurations }], target: i0.ɵɵFactoryTarget.Injectable }); }
25
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: TranslateloaderService, providedIn: 'root' }); }
26
- }
27
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: TranslateloaderService, decorators: [{
28
- type: Injectable,
29
- args: [{
30
- providedIn: 'root'
31
- }]
32
- }], ctorParameters: () => [{ type: i1.HttpClient }, { type: i2.Configurations }] });
33
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRlLWxvYWRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcm9zb2Z0bGFiL2NvcmUvc3JjL2xpYi9zZXJ2aWNlcy90cmFuc2xhdGUtbG9hZGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7OztBQUluRCxNQUFNLE9BQU8sc0JBQXNCO0lBTWpDLFlBQW9CLFVBQXNCLEVBQ3hDLE1BQXNCO1FBREosZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUxsQyxZQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2IsWUFBTyxHQUFRLElBQUksV0FBVyxDQUFDO1lBQ3JDLE1BQU0sRUFBRSxrQkFBa0I7WUFDMUIsY0FBYyxFQUFFLGtCQUFrQjtTQUNuQyxDQUFDLENBQUM7UUFHRCxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQ25CLElBQUksTUFBTSxFQUFFLENBQUM7WUFDWCxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUM7UUFDaEMsQ0FBQztJQUNILENBQUM7SUFDRCxjQUFjLENBQUMsSUFBWTtRQUN6QixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLG1CQUFtQixHQUFHLElBQUksR0FBRyxrQkFBa0IsQ0FBQztRQUMzRSxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUM3RCxDQUFDOzhHQWhCVSxzQkFBc0I7a0hBQXRCLHNCQUFzQixjQUZyQixNQUFNOzsyRkFFUCxzQkFBc0I7a0JBSGxDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEhlYWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlTG9hZGVyIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQ29uZmlndXJhdGlvbnMgfSBmcm9tICcuLi9jb25maWd1cmF0aW9ucyc7XHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFRyYW5zbGF0ZWxvYWRlclNlcnZpY2UgaW1wbGVtZW50cyBUcmFuc2xhdGVMb2FkZXIge1xyXG4gIHByaXZhdGUgX2FwaVVybCA9ICcnO1xyXG4gIHByaXZhdGUgaGVhZGVyczogYW55ID0gbmV3IEh0dHBIZWFkZXJzKHtcclxuICAgIEFjY2VwdDogJ2FwcGxpY2F0aW9uL2pzb24nLFxyXG4gICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ1xyXG4gIH0pO1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cENsaWVudDogSHR0cENsaWVudCxcclxuICAgIGNvbmZpZzogQ29uZmlndXJhdGlvbnMpIHtcclxuICAgIGNvbnNvbGUubG9nKGNvbmZpZylcclxuICAgIGlmIChjb25maWcpIHtcclxuICAgICAgdGhpcy5fYXBpVXJsID0gY29uZmlnLmJhc2VVcmw7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldFRyYW5zbGF0aW9uKGxhbmc6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICBjb25zdCB1cmwgPSB0aGlzLl9hcGlVcmwgKyAnL2FwaS92MS9sYW5ndWFnZS8nICsgbGFuZyArICcvdHJhbnNsYXRpb25saXN0JztcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0KHVybCwgeyBoZWFkZXJzOiB0aGlzLmhlYWRlcnMgfSk7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=
@@ -1,27 +0,0 @@
1
- export function readFileAsync(file) {
2
- return new Promise((resolve, reject) => {
3
- const reader = new FileReader();
4
- reader.onload = (event) => {
5
- resolve(event.target.result);
6
- };
7
- reader.onerror = (event) => {
8
- reject(event.target.error);
9
- };
10
- reader.readAsArrayBuffer(file);
11
- });
12
- }
13
- export function getValueFromJsonData(jsonData, key) {
14
- // Convert the key and all JSON keys to lowercase
15
- const lowercaseKey = key.toLowerCase();
16
- const lowercaseKeys = Object.keys(jsonData).map(k => k.toLowerCase());
17
- // Find the lowercase key in the lowercase keys array
18
- const index = lowercaseKeys.indexOf(lowercaseKey);
19
- // If found, use the original (proper case) key to access the value
20
- if (index !== -1) {
21
- const originalKey = Object.keys(jsonData)[index];
22
- return jsonData[originalKey];
23
- }
24
- // Key not found
25
- return undefined;
26
- }
27
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yb3NvZnRsYWIvY29yZS9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sVUFBVSxhQUFhLENBQUMsSUFBVTtJQUNwQyxPQUFPLElBQUksT0FBTyxDQUFNLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1FBQ3hDLE1BQU0sTUFBTSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7UUFFaEMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEtBQVUsRUFBRSxFQUFFO1lBQzNCLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2pDLENBQUMsQ0FBQztRQUVGLE1BQU0sQ0FBQyxPQUFPLEdBQUcsQ0FBQyxLQUFVLEVBQUUsRUFBRTtZQUM1QixNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQixDQUFDLENBQUM7UUFFRixNQUFNLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkMsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDO0FBRUQsTUFBTSxVQUFVLG9CQUFvQixDQUFDLFFBQWEsRUFBRSxHQUFXO0lBQzNELGlEQUFpRDtJQUNqRCxNQUFNLFlBQVksR0FBRyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDdkMsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUV0RSxxREFBcUQ7SUFDckQsTUFBTSxLQUFLLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUVsRCxtRUFBbUU7SUFDbkUsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNmLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakQsT0FBTyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVELGdCQUFnQjtJQUNoQixPQUFPLFNBQVMsQ0FBQztBQUNyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIHJlYWRGaWxlQXN5bmMoZmlsZTogRmlsZSk6IFByb21pc2U8YW55PiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2U8YW55PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuXHJcbiAgICAgICAgcmVhZGVyLm9ubG9hZCA9IChldmVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHJlc29sdmUoZXZlbnQudGFyZ2V0LnJlc3VsdCk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgcmVhZGVyLm9uZXJyb3IgPSAoZXZlbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICByZWplY3QoZXZlbnQudGFyZ2V0LmVycm9yKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoZmlsZSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFZhbHVlRnJvbUpzb25EYXRhKGpzb25EYXRhOiBhbnksIGtleTogc3RyaW5nKTogYW55IHtcclxuICAgIC8vIENvbnZlcnQgdGhlIGtleSBhbmQgYWxsIEpTT04ga2V5cyB0byBsb3dlcmNhc2VcclxuICAgIGNvbnN0IGxvd2VyY2FzZUtleSA9IGtleS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgY29uc3QgbG93ZXJjYXNlS2V5cyA9IE9iamVjdC5rZXlzKGpzb25EYXRhKS5tYXAoayA9PiBrLnRvTG93ZXJDYXNlKCkpO1xyXG5cclxuICAgIC8vIEZpbmQgdGhlIGxvd2VyY2FzZSBrZXkgaW4gdGhlIGxvd2VyY2FzZSBrZXlzIGFycmF5XHJcbiAgICBjb25zdCBpbmRleCA9IGxvd2VyY2FzZUtleXMuaW5kZXhPZihsb3dlcmNhc2VLZXkpO1xyXG5cclxuICAgIC8vIElmIGZvdW5kLCB1c2UgdGhlIG9yaWdpbmFsIChwcm9wZXIgY2FzZSkga2V5IHRvIGFjY2VzcyB0aGUgdmFsdWVcclxuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcclxuICAgICAgICBjb25zdCBvcmlnaW5hbEtleSA9IE9iamVjdC5rZXlzKGpzb25EYXRhKVtpbmRleF07XHJcbiAgICAgICAgcmV0dXJuIGpzb25EYXRhW29yaWdpbmFsS2V5XTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBLZXkgbm90IGZvdW5kXHJcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG59Il19
@@ -1,15 +0,0 @@
1
- export class CustomValidators {
2
- static patternValidator(regex, error) {
3
- return (control) => {
4
- if (!control.value) {
5
- // if control is empty return no error
6
- return null;
7
- }
8
- // test the value of the control against the regexp supplied
9
- const valid = regex.test(control.value);
10
- // if true, return no error (no error), else return error passed in the second parameter
11
- return valid ? null : error;
12
- };
13
- }
14
- }
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF0dGVybi12YWxpZGF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yb3NvZnRsYWIvY29yZS9zcmMvbGliL3ZhbGlkYXRvcnMvcGF0dGVybi12YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxPQUFPLGdCQUFnQjtJQUMzQixNQUFNLENBQUMsZ0JBQWdCLENBQUMsS0FBYSxFQUFFLEtBQXVCO1FBQzVELE9BQU8sQ0FBQyxPQUF3QixFQUEwQixFQUFFO1lBQzFELElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ25CLHNDQUFzQztnQkFDdEMsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1lBRUQsNERBQTREO1lBQzVELE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRXhDLHdGQUF3RjtZQUN4RixPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDOUIsQ0FBQyxDQUFDO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBWYWxpZGF0aW9uRXJyb3JzLCBWYWxpZGF0b3JGbiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuZXhwb3J0IGNsYXNzIEN1c3RvbVZhbGlkYXRvcnMge1xuICBzdGF0aWMgcGF0dGVyblZhbGlkYXRvcihyZWdleDogUmVnRXhwLCBlcnJvcjogVmFsaWRhdGlvbkVycm9ycyk6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPT4ge1xuICAgICAgaWYgKCFjb250cm9sLnZhbHVlKSB7XG4gICAgICAgIC8vIGlmIGNvbnRyb2wgaXMgZW1wdHkgcmV0dXJuIG5vIGVycm9yXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICAvLyB0ZXN0IHRoZSB2YWx1ZSBvZiB0aGUgY29udHJvbCBhZ2FpbnN0IHRoZSByZWdleHAgc3VwcGxpZWRcbiAgICAgIGNvbnN0IHZhbGlkID0gcmVnZXgudGVzdChjb250cm9sLnZhbHVlKTtcblxuICAgICAgLy8gaWYgdHJ1ZSwgcmV0dXJuIG5vIGVycm9yIChubyBlcnJvciksIGVsc2UgcmV0dXJuIGVycm9yIHBhc3NlZCBpbiB0aGUgc2Vjb25kIHBhcmFtZXRlclxuICAgICAgcmV0dXJuIHZhbGlkID8gbnVsbCA6IGVycm9yO1xuICAgIH07XG4gIH1cbn1cbiJdfQ==
@@ -1,5 +0,0 @@
1
- /*
2
- * Public API Surface of core
3
- */
4
- export * from './lib/core';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3Jvc29mdGxhYi9jb3JlL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxZQUFZLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2YgY29yZVxyXG4gKi9cclxuXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvcmUnO1xyXG4iXX0=
@@ -1,5 +0,0 @@
1
- /**
2
- * Generated bundle index. Do not edit.
3
- */
4
- export * from './public-api';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9zb2Z0bGFiLWNvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9yb3NvZnRsYWIvY29yZS9zcmMvcm9zb2Z0bGFiLWNvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==