fixa-admin 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/README.md +24 -0
  2. package/esm2022/lib/class/index.api.mjs +2 -0
  3. package/esm2022/lib/class/popover.mjs +28 -0
  4. package/esm2022/lib/components/captcha/captcha.component.mjs +56 -0
  5. package/esm2022/lib/components/grid/filter/date-filter.component.mjs +122 -0
  6. package/esm2022/lib/components/grid/filter/index.api.mjs +2 -0
  7. package/esm2022/lib/components/grid/grid.component.mjs +491 -0
  8. package/esm2022/lib/components/grid/render/action-button.component.mjs +26 -0
  9. package/esm2022/lib/components/index.api.mjs +6 -0
  10. package/esm2022/lib/components/map/map.component.mjs +134 -0
  11. package/esm2022/lib/components/spinner/spinner.component.mjs +14 -0
  12. package/esm2022/lib/directive/char-input.directive.mjs +37 -0
  13. package/esm2022/lib/directive/index.api.mjs +4 -0
  14. package/esm2022/lib/directive/mask.directive.mjs +58 -0
  15. package/esm2022/lib/directive/mask.mjs +78 -0
  16. package/esm2022/lib/directive/numeric-input.directive.mjs +44 -0
  17. package/esm2022/lib/guard/auth.guard.mjs +25 -0
  18. package/esm2022/lib/guard/index.api.mjs +2 -0
  19. package/esm2022/lib/layouts/blank/blank.layout.mjs +14 -0
  20. package/esm2022/lib/layouts/index.api.mjs +3 -0
  21. package/esm2022/lib/layouts/master/master.layout.mjs +53 -0
  22. package/esm2022/lib/models/index.api.mjs +2 -0
  23. package/esm2022/lib/models/shared.model.mjs +28 -0
  24. package/esm2022/lib/pipes/date.pipe.mjs +25 -0
  25. package/esm2022/lib/pipes/index.api.mjs +3 -0
  26. package/esm2022/lib/pipes/timer.pipe.mjs +30 -0
  27. package/esm2022/lib/services/confirm.service.mjs +39 -0
  28. package/esm2022/lib/services/dialog.service.mjs +65 -0
  29. package/esm2022/lib/services/form.service.mjs +22 -0
  30. package/esm2022/lib/services/index.api.mjs +6 -0
  31. package/esm2022/lib/services/shared.service.mjs +15 -0
  32. package/esm2022/lib/services/toast.service.mjs +21 -0
  33. package/esm2022/lib/shared.module.mjs +196 -0
  34. package/esm2022/public-api.mjs +14 -0
  35. package/esm2022/shared.mjs +5 -0
  36. package/fesm2022/shared.mjs +1558 -0
  37. package/fesm2022/shared.mjs.map +1 -0
  38. package/index.d.ts +5 -0
  39. package/lib/class/index.api.d.ts +1 -0
  40. package/lib/class/popover.d.ts +14 -0
  41. package/lib/components/captcha/captcha.component.d.ts +13 -0
  42. package/lib/components/grid/filter/date-filter.component.d.ts +24 -0
  43. package/lib/components/grid/filter/index.api.d.ts +1 -0
  44. package/lib/components/grid/grid.component.d.ts +64 -0
  45. package/lib/components/grid/render/action-button.component.d.ts +13 -0
  46. package/lib/components/index.api.d.ts +5 -0
  47. package/lib/components/map/map.component.d.ts +26 -0
  48. package/lib/components/spinner/spinner.component.d.ts +8 -0
  49. package/lib/directive/char-input.directive.d.ts +12 -0
  50. package/lib/directive/index.api.d.ts +3 -0
  51. package/lib/directive/mask.d.ts +19 -0
  52. package/lib/directive/mask.directive.d.ts +15 -0
  53. package/lib/directive/numeric-input.directive.d.ts +12 -0
  54. package/lib/guard/auth.guard.d.ts +10 -0
  55. package/lib/guard/index.api.d.ts +1 -0
  56. package/lib/layouts/blank/blank.layout.d.ts +8 -0
  57. package/lib/layouts/index.api.d.ts +2 -0
  58. package/lib/layouts/master/master.layout.d.ts +20 -0
  59. package/lib/models/index.api.d.ts +1 -0
  60. package/lib/models/shared.model.d.ts +120 -0
  61. package/lib/pipes/date.pipe.d.ts +7 -0
  62. package/lib/pipes/index.api.d.ts +2 -0
  63. package/lib/pipes/timer.pipe.d.ts +7 -0
  64. package/lib/services/confirm.service.d.ts +9 -0
  65. package/lib/services/dialog.service.d.ts +11 -0
  66. package/lib/services/form.service.d.ts +8 -0
  67. package/lib/services/index.api.d.ts +5 -0
  68. package/lib/services/shared.service.d.ts +8 -0
  69. package/lib/services/toast.service.d.ts +9 -0
  70. package/lib/shared.module.d.ts +41 -0
  71. package/package.json +43 -0
  72. package/public-api.d.ts +10 -0
  73. package/src/style.scss +9 -0
@@ -0,0 +1,26 @@
1
+ import { Component } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@angular/common";
4
+ import * as i2 from "ng-zorro-antd/tooltip";
5
+ export class ActionsCellRenderer {
6
+ params;
7
+ items = [];
8
+ agInit(params) {
9
+ this.params = params;
10
+ this.items = params.context.actionItems;
11
+ }
12
+ refresh(params) {
13
+ this.params = params;
14
+ return true;
15
+ }
16
+ handleClick(item) {
17
+ this.params.onClick({ data: this.params.data, event: item.code, id: this.params.node.id });
18
+ }
19
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ActionsCellRenderer, deps: [], target: i0.ɵɵFactoryTarget.Component });
20
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ActionsCellRenderer, selector: "app-button-renderer", ngImport: i0, template: "<div class=\"h-full flex gap-2 items-center\">\n <button mat-button class=\"min-w-[30px] min-h-[30px] h-[30px]\" *ngFor=\"let item of items\" nz-tooltip [nzTooltipTitle]=\"item.alt\" nzTooltipPlacement=\"bottom\" (click)=\"handleClick(item)\">\n <div class=\"flex justify-center items-center\">\n <i [class]=\"item.icon\"></i>\n </div>\n </button>\n \n</div>", dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NzTooltipDirective, selector: "[nz-tooltip]", inputs: ["nzTooltipTitle", "nzTooltipTitleContext", "nz-tooltip", "nzTooltipTrigger", "nzTooltipPlacement", "nzTooltipOrigin", "nzTooltipVisible", "nzTooltipMouseEnterDelay", "nzTooltipMouseLeaveDelay", "nzTooltipOverlayClassName", "nzTooltipOverlayStyle", "nzTooltipArrowPointAtCenter", "cdkConnectedOverlayPush", "nzTooltipColor"], outputs: ["nzTooltipVisibleChange"], exportAs: ["nzTooltip"] }] });
21
+ }
22
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ActionsCellRenderer, decorators: [{
23
+ type: Component,
24
+ args: [{ selector: 'app-button-renderer', template: "<div class=\"h-full flex gap-2 items-center\">\n <button mat-button class=\"min-w-[30px] min-h-[30px] h-[30px]\" *ngFor=\"let item of items\" nz-tooltip [nzTooltipTitle]=\"item.alt\" nzTooltipPlacement=\"bottom\" (click)=\"handleClick(item)\">\n <div class=\"flex justify-center items-center\">\n <i [class]=\"item.icon\"></i>\n </div>\n </button>\n \n</div>" }]
25
+ }] });
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLWJ1dHRvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaGFyZWQvc3JjL2xpYi9jb21wb25lbnRzL2dyaWQvcmVuZGVyL2FjdGlvbi1idXR0b24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2hhcmVkL3NyYy9saWIvY29tcG9uZW50cy9ncmlkL3JlbmRlci9hY3Rpb24tYnV0dG9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7QUFPMUMsTUFBTSxPQUFPLG1CQUFtQjtJQUNwQixNQUFNLENBQU87SUFDZCxLQUFLLEdBQWtCLEVBQUUsQ0FBQztJQUVqQyxNQUFNLENBQUMsTUFBMkI7UUFDOUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQztJQUM1QyxDQUFDO0lBRUQsT0FBTyxDQUFDLE1BQTJCO1FBQy9CLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxXQUFXLENBQUMsSUFBaUI7UUFDekIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDL0YsQ0FBQzt3R0FoQlEsbUJBQW1COzRGQUFuQixtQkFBbUIsMkRDVGhDLDBZQU9NOzs0RkRFTyxtQkFBbUI7a0JBSi9CLFNBQVM7K0JBQ0kscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSUNlbGxSZW5kZXJlckFuZ3VsYXJDb21wIH0gZnJvbSAnQGFnLWdyaWQtY29tbXVuaXR5L2FuZ3VsYXInO1xuaW1wb3J0IHsgSUNlbGxSZW5kZXJlclBhcmFtcyB9IGZyb20gJ0BhZy1ncmlkLWNvbW11bml0eS9jb3JlJztcbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aW9uSXRlbXMgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvc2hhcmVkLm1vZGVsJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdhcHAtYnV0dG9uLXJlbmRlcmVyJyxcbiAgICB0ZW1wbGF0ZVVybDogYC4vYWN0aW9uLWJ1dHRvbi5jb21wb25lbnQuaHRtbGBcbn0pXG5leHBvcnQgY2xhc3MgQWN0aW9uc0NlbGxSZW5kZXJlciBpbXBsZW1lbnRzIElDZWxsUmVuZGVyZXJBbmd1bGFyQ29tcCB7XG4gICAgcHJpdmF0ZSBwYXJhbXMhOiBhbnk7XG4gICAgcHVibGljIGl0ZW1zOiBBY3Rpb25JdGVtc1tdID0gW107XG5cbiAgICBhZ0luaXQocGFyYW1zOiBJQ2VsbFJlbmRlcmVyUGFyYW1zKTogdm9pZCB7XG4gICAgICAgIHRoaXMucGFyYW1zID0gcGFyYW1zO1xuICAgICAgICB0aGlzLml0ZW1zID0gcGFyYW1zLmNvbnRleHQuYWN0aW9uSXRlbXM7XG4gICAgfVxuXG4gICAgcmVmcmVzaChwYXJhbXM6IElDZWxsUmVuZGVyZXJQYXJhbXMpOiBib29sZWFuIHtcbiAgICAgICAgdGhpcy5wYXJhbXMgPSBwYXJhbXM7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGhhbmRsZUNsaWNrKGl0ZW06IEFjdGlvbkl0ZW1zKSB7XG4gICAgICAgIHRoaXMucGFyYW1zLm9uQ2xpY2soeyBkYXRhOiB0aGlzLnBhcmFtcy5kYXRhLCBldmVudDogaXRlbS5jb2RlLCBpZDogdGhpcy5wYXJhbXMubm9kZS5pZCB9KTtcbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiaC1mdWxsIGZsZXggZ2FwLTIgaXRlbXMtY2VudGVyXCI+XG4gICAgPGJ1dHRvbiBtYXQtYnV0dG9uIGNsYXNzPVwibWluLXctWzMwcHhdIG1pbi1oLVszMHB4XSBoLVszMHB4XVwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIGl0ZW1zXCIgbnotdG9vbHRpcCBbbnpUb29sdGlwVGl0bGVdPVwiaXRlbS5hbHRcIiBuelRvb2x0aXBQbGFjZW1lbnQ9XCJib3R0b21cIiAoY2xpY2spPVwiaGFuZGxlQ2xpY2soaXRlbSlcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICA8aSBbY2xhc3NdPVwiaXRlbS5pY29uXCI+PC9pPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2J1dHRvbj5cbiAgICBcbjwvZGl2PiJdfQ==
@@ -0,0 +1,6 @@
1
+ export * from './grid/grid.component';
2
+ export * from './grid/render/action-button.component';
3
+ export * from './captcha/captcha.component';
4
+ export * from './map/map.component';
5
+ export * from './spinner/spinner.component';
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2hhcmVkL3NyYy9saWIvY29tcG9uZW50cy9pbmRleC5hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLHVDQUF1QyxDQUFDO0FBQ3RELGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLDZCQUE2QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9ncmlkL2dyaWQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vZ3JpZC9yZW5kZXIvYWN0aW9uLWJ1dHRvbi5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9jYXB0Y2hhL2NhcHRjaGEuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbWFwL21hcC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9zcGlubmVyL3NwaW5uZXIuY29tcG9uZW50JzsiXX0=
@@ -0,0 +1,134 @@
1
+ import { Component, Input, Output, EventEmitter } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class MapComponent {
4
+ constructor() { }
5
+ map;
6
+ drawnItems = new L.FeatureGroup();
7
+ editable = false;
8
+ polygons = [];
9
+ drawPolygon = false;
10
+ drawCircle = false;
11
+ drawPolyline = false;
12
+ drawRectangle = false;
13
+ drawMarker = false;
14
+ zoom = 13;
15
+ center = [35.6961, 51.4231];
16
+ onCreatePolygon = new EventEmitter();
17
+ onEditPolygon = new EventEmitter();
18
+ initMap() {
19
+ if (L && L.map && L.Control && L.Control.Draw) {
20
+ if (this.center.length == 0) {
21
+ this.center = [35.6961, 51.4231];
22
+ }
23
+ this.map = L.map('map').setView(this.center, this.zoom);
24
+ L.tileLayer('https://raster.snappmaps.ir/styles/snapp-style/{z}/{x}/{y}@2x.webp', {
25
+ maxZoom: 18,
26
+ }).addTo(this.map);
27
+ this.map.addLayer(this.drawnItems);
28
+ const drawControl = new L.Control.Draw({
29
+ edit: this.editable ? {
30
+ featureGroup: this.drawnItems
31
+ } : null,
32
+ draw: {
33
+ polygon: this.drawPolygon,
34
+ polyline: this.drawPolyline,
35
+ circle: this.drawCircle,
36
+ rectangle: this.drawRectangle,
37
+ marker: this.drawMarker,
38
+ circlemarker: false,
39
+ }
40
+ });
41
+ this.map.addControl(drawControl);
42
+ if (L.Draw && L.Draw.Event && L.Draw.Event.CREATED) {
43
+ this.map.on(L.Draw.Event.CREATED, (event) => {
44
+ this.onCreatePolygon.emit(event.layer._latlngs[0]);
45
+ const layer = event.layer;
46
+ this.drawnItems.addLayer(layer);
47
+ });
48
+ this.map.on(L.Draw.Event.EDITED, (event) => {
49
+ const polygon = [];
50
+ event.layers.eachLayer((layer) => {
51
+ layer._latlngs[0].forEach(element => {
52
+ polygon.push({
53
+ lat: element.lat,
54
+ lng: element.lng
55
+ });
56
+ });
57
+ });
58
+ this.onEditPolygon.emit(polygon);
59
+ });
60
+ }
61
+ else {
62
+ console.error('Leaflet Draw Event is not available.');
63
+ }
64
+ }
65
+ else {
66
+ console.error('Leaflet or Leaflet Draw is not correctly loaded.');
67
+ }
68
+ }
69
+ addPolygonsToMap() {
70
+ this.polygons.forEach(polygon => {
71
+ // polygon.coordinates.forEach((el) => {
72
+ // el.reverse();
73
+ // });
74
+ const layer = L.polygon(polygon.coordinates, { color: polygon.color }).addTo(this.map);
75
+ // اضافه کردن لیبل به پالیگان
76
+ layer.bindTooltip(polygon.name, { permanent: true, direction: 'center', className: 'font-[yekanBakh]' }).openTooltip();
77
+ if (polygon.editable) {
78
+ // اضافه کردن پالیگان به drawnItems برای ویرایش
79
+ this.drawnItems.addLayer(layer);
80
+ }
81
+ });
82
+ }
83
+ clearMap() {
84
+ this.map.eachLayer((layer) => {
85
+ if (!(layer instanceof L.TileLayer)) {
86
+ this.map.removeLayer(layer);
87
+ }
88
+ });
89
+ }
90
+ ngOnChanges(changes) {
91
+ if (changes['polygons']) {
92
+ this.clearMap();
93
+ this.addPolygonsToMap();
94
+ }
95
+ if (changes['center'] || changes['zoom']) {
96
+ if (this.map) {
97
+ this.map.setView(this.center, this.zoom);
98
+ }
99
+ }
100
+ }
101
+ ngAfterViewInit() {
102
+ this.initMap();
103
+ this.addPolygonsToMap();
104
+ }
105
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MapComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
106
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: MapComponent, selector: "app-map", inputs: { editable: "editable", polygons: "polygons", drawPolygon: "drawPolygon", drawCircle: "drawCircle", drawPolyline: "drawPolyline", drawRectangle: "drawRectangle", drawMarker: "drawMarker", zoom: "zoom", center: "center" }, outputs: { onCreatePolygon: "onCreatePolygon", onEditPolygon: "onEditPolygon" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"map-container\">\n <div class=\"map-frame\">\n <div id=\"map\" #mapElement></div>\n <!-- <button mat-flat-button (click)=\"currentLocation()\" *ngIf=\"allowCurrentLocation\">\n <i class=\"fa-solid fa-location-crosshairs\"></i>\n </button> -->\n </div>\n</div>", styles: [".map-container{height:100%!important}.map-frame{height:100%!important;position:relative}.map-frame button{position:absolute;bottom:8px;right:8px;z-index:1000;min-width:40px;height:40px;border-radius:50px;padding:0;box-shadow:var(--box-shadow);border:2px solid rgba(0,0,0,.2)}#map{height:100%!important}\n"] });
107
+ }
108
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MapComponent, decorators: [{
109
+ type: Component,
110
+ args: [{ selector: 'app-map', template: "<div class=\"map-container\">\n <div class=\"map-frame\">\n <div id=\"map\" #mapElement></div>\n <!-- <button mat-flat-button (click)=\"currentLocation()\" *ngIf=\"allowCurrentLocation\">\n <i class=\"fa-solid fa-location-crosshairs\"></i>\n </button> -->\n </div>\n</div>", styles: [".map-container{height:100%!important}.map-frame{height:100%!important;position:relative}.map-frame button{position:absolute;bottom:8px;right:8px;z-index:1000;min-width:40px;height:40px;border-radius:50px;padding:0;box-shadow:var(--box-shadow);border:2px solid rgba(0,0,0,.2)}#map{height:100%!important}\n"] }]
111
+ }], ctorParameters: () => [], propDecorators: { editable: [{
112
+ type: Input
113
+ }], polygons: [{
114
+ type: Input
115
+ }], drawPolygon: [{
116
+ type: Input
117
+ }], drawCircle: [{
118
+ type: Input
119
+ }], drawPolyline: [{
120
+ type: Input
121
+ }], drawRectangle: [{
122
+ type: Input
123
+ }], drawMarker: [{
124
+ type: Input
125
+ }], zoom: [{
126
+ type: Input
127
+ }], center: [{
128
+ type: Input
129
+ }], onCreatePolygon: [{
130
+ type: Output
131
+ }], onEditPolygon: [{
132
+ type: Output
133
+ }] } });
134
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NoYXJlZC9zcmMvbGliL2NvbXBvbmVudHMvbWFwL21hcC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaGFyZWQvc3JjL2xpYi9jb21wb25lbnRzL21hcC9tYXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBaUIsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQWlCLE1BQU0sZUFBZSxDQUFDOztBQVVyRyxNQUFNLE9BQU8sWUFBWTtJQUN2QixnQkFBZ0IsQ0FBQztJQUNWLEdBQUcsQ0FBTTtJQUNSLFVBQVUsR0FBRyxJQUFJLENBQUMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUcxQyxRQUFRLEdBQVksS0FBSyxDQUFDO0lBRzFCLFFBQVEsR0FBa0IsRUFBRSxDQUFDO0lBRzdCLFdBQVcsR0FBWSxLQUFLLENBQUM7SUFHN0IsVUFBVSxHQUFZLEtBQUssQ0FBQztJQUc1QixZQUFZLEdBQVksS0FBSyxDQUFDO0lBRzlCLGFBQWEsR0FBWSxLQUFLLENBQUM7SUFHL0IsVUFBVSxHQUFZLEtBQUssQ0FBQztJQUc1QixJQUFJLEdBQVcsRUFBRSxDQUFDO0lBR2xCLE1BQU0sR0FBYSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUd0QyxlQUFlLEdBQXVDLElBQUksWUFBWSxFQUFFLENBQUM7SUFHekUsYUFBYSxHQUF1QyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBRS9ELE9BQU87UUFDYixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUM5QyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUM1QixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ25DLENBQUM7WUFDRCxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRXhELENBQUMsQ0FBQyxTQUFTLENBQUMsb0VBQW9FLEVBQUU7Z0JBQ2hGLE9BQU8sRUFBRSxFQUFFO2FBQ1osQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFFbkIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ25DLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7Z0JBQ3JDLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztvQkFDcEIsWUFBWSxFQUFFLElBQUksQ0FBQyxVQUFVO2lCQUM5QixDQUFDLENBQUMsQ0FBQyxJQUFJO2dCQUNSLElBQUksRUFBRTtvQkFDSixPQUFPLEVBQUUsSUFBSSxDQUFDLFdBQVc7b0JBQ3pCLFFBQVEsRUFBRSxJQUFJLENBQUMsWUFBWTtvQkFDM0IsTUFBTSxFQUFFLElBQUksQ0FBQyxVQUFVO29CQUN2QixTQUFTLEVBQUUsSUFBSSxDQUFDLGFBQWE7b0JBQzdCLE1BQU0sRUFBRSxJQUFJLENBQUMsVUFBVTtvQkFDdkIsWUFBWSxFQUFFLEtBQUs7aUJBQ3BCO2FBQ0YsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDakMsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNuRCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxLQUFVLEVBQUUsRUFBRTtvQkFDL0MsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDbkQsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztvQkFDMUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2xDLENBQUMsQ0FBQyxDQUFDO2dCQUNILElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEtBQVUsRUFBRSxFQUFFO29CQUM5QyxNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUM7b0JBQ25CLEtBQUssQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBVSxFQUFFLEVBQUU7d0JBQ3BDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFOzRCQUNsQyxPQUFPLENBQUMsSUFBSSxDQUFDO2dDQUNYLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRztnQ0FDaEIsR0FBRyxFQUFFLE9BQU8sQ0FBQyxHQUFHOzZCQUNqQixDQUFDLENBQUM7d0JBQ0wsQ0FBQyxDQUFDLENBQUM7b0JBQ0wsQ0FBQyxDQUFDLENBQUM7b0JBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ25DLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE9BQU8sQ0FBQyxLQUFLLENBQUMsc0NBQXNDLENBQUMsQ0FBQztZQUN4RCxDQUFDO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLENBQUMsS0FBSyxDQUFDLGtEQUFrRCxDQUFDLENBQUM7UUFDcEUsQ0FBQztJQUNILENBQUM7SUFFTyxnQkFBZ0I7UUFDdEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDOUIsd0NBQXdDO1lBQ3hDLGtCQUFrQjtZQUNsQixNQUFNO1lBQ04sTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFFdkYsNkJBQTZCO1lBQzdCLEtBQUssQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3ZILElBQUksT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNyQiwrQ0FBK0M7Z0JBQy9DLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2xDLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUMzQixJQUFJLENBQUMsQ0FBQyxLQUFLLFlBQVksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3BDLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzlCLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDMUIsQ0FBQztRQUNELElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ3pDLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUNiLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzNDLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDZixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUMxQixDQUFDO3dHQWpJVSxZQUFZOzRGQUFaLFlBQVksMlhDVnpCLHdUQU9NOzs0RkRHTyxZQUFZO2tCQUx4QixTQUFTOytCQUNFLFNBQVM7d0RBVW5CLFFBQVE7c0JBRFAsS0FBSztnQkFJTixRQUFRO3NCQURQLEtBQUs7Z0JBSU4sV0FBVztzQkFEVixLQUFLO2dCQUlOLFVBQVU7c0JBRFQsS0FBSztnQkFJTixZQUFZO3NCQURYLEtBQUs7Z0JBSU4sYUFBYTtzQkFEWixLQUFLO2dCQUlOLFVBQVU7c0JBRFQsS0FBSztnQkFJTixJQUFJO3NCQURILEtBQUs7Z0JBSU4sTUFBTTtzQkFETCxLQUFLO2dCQUlOLGVBQWU7c0JBRGQsTUFBTTtnQkFJUCxhQUFhO3NCQURaLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEFmdGVyVmlld0luaXQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuLy8gaW1wb3J0ICogYXMgTCBmcm9tICdsZWFmbGV0Jztcbi8vIGltcG9ydCAnbGVhZmxldC1kcmF3JztcbmltcG9ydCB7IFBvbHlnb25EYXRhLCBQb2x5Z29uRXZlbnRFbWl0ZXIgfSBmcm9tICcuLi8uLi9tb2RlbHMvc2hhcmVkLm1vZGVsJztcbmRlY2xhcmUgbGV0IEw6IGFueTtcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1tYXAnLFxuICB0ZW1wbGF0ZVVybDogJy4vbWFwLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbWFwLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgTWFwQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG4gIGNvbnN0cnVjdG9yKCkgeyB9XG4gIHB1YmxpYyBtYXA6IGFueTtcbiAgcHJpdmF0ZSBkcmF3bkl0ZW1zID0gbmV3IEwuRmVhdHVyZUdyb3VwKCk7XG5cbiAgQElucHV0KClcbiAgZWRpdGFibGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBwb2x5Z29uczogUG9seWdvbkRhdGFbXSA9IFtdO1xuXG4gIEBJbnB1dCgpXG4gIGRyYXdQb2x5Z29uOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgZHJhd0NpcmNsZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIGRyYXdQb2x5bGluZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIGRyYXdSZWN0YW5nbGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBkcmF3TWFya2VyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgem9vbTogbnVtYmVyID0gMTM7XG5cbiAgQElucHV0KClcbiAgY2VudGVyOiBudW1iZXJbXSA9IFszNS42OTYxLCA1MS40MjMxXTtcblxuICBAT3V0cHV0KClcbiAgb25DcmVhdGVQb2x5Z29uOiBFdmVudEVtaXR0ZXI8UG9seWdvbkV2ZW50RW1pdGVyW10+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBPdXRwdXQoKVxuICBvbkVkaXRQb2x5Z29uOiBFdmVudEVtaXR0ZXI8UG9seWdvbkV2ZW50RW1pdGVyW10+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIHByaXZhdGUgaW5pdE1hcCgpOiB2b2lkIHtcbiAgICBpZiAoTCAmJiBMLm1hcCAmJiBMLkNvbnRyb2wgJiYgTC5Db250cm9sLkRyYXcpIHtcbiAgICAgIGlmICh0aGlzLmNlbnRlci5sZW5ndGggPT0gMCkge1xuICAgICAgICB0aGlzLmNlbnRlciA9IFszNS42OTYxLCA1MS40MjMxXTtcbiAgICAgIH1cbiAgICAgIHRoaXMubWFwID0gTC5tYXAoJ21hcCcpLnNldFZpZXcodGhpcy5jZW50ZXIsIHRoaXMuem9vbSk7XG5cbiAgICAgIEwudGlsZUxheWVyKCdodHRwczovL3Jhc3Rlci5zbmFwcG1hcHMuaXIvc3R5bGVzL3NuYXBwLXN0eWxlL3t6fS97eH0ve3l9QDJ4LndlYnAnLCB7XG4gICAgICAgIG1heFpvb206IDE4LFxuICAgICAgfSkuYWRkVG8odGhpcy5tYXApO1xuXG4gICAgICB0aGlzLm1hcC5hZGRMYXllcih0aGlzLmRyYXduSXRlbXMpO1xuICAgICAgY29uc3QgZHJhd0NvbnRyb2wgPSBuZXcgTC5Db250cm9sLkRyYXcoe1xuICAgICAgICBlZGl0OiB0aGlzLmVkaXRhYmxlID8ge1xuICAgICAgICAgIGZlYXR1cmVHcm91cDogdGhpcy5kcmF3bkl0ZW1zXG4gICAgICAgIH0gOiBudWxsLFxuICAgICAgICBkcmF3OiB7XG4gICAgICAgICAgcG9seWdvbjogdGhpcy5kcmF3UG9seWdvbixcbiAgICAgICAgICBwb2x5bGluZTogdGhpcy5kcmF3UG9seWxpbmUsXG4gICAgICAgICAgY2lyY2xlOiB0aGlzLmRyYXdDaXJjbGUsXG4gICAgICAgICAgcmVjdGFuZ2xlOiB0aGlzLmRyYXdSZWN0YW5nbGUsXG4gICAgICAgICAgbWFya2VyOiB0aGlzLmRyYXdNYXJrZXIsXG4gICAgICAgICAgY2lyY2xlbWFya2VyOiBmYWxzZSxcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB0aGlzLm1hcC5hZGRDb250cm9sKGRyYXdDb250cm9sKTtcbiAgICAgIGlmIChMLkRyYXcgJiYgTC5EcmF3LkV2ZW50ICYmIEwuRHJhdy5FdmVudC5DUkVBVEVEKSB7XG4gICAgICAgIHRoaXMubWFwLm9uKEwuRHJhdy5FdmVudC5DUkVBVEVELCAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMub25DcmVhdGVQb2x5Z29uLmVtaXQoZXZlbnQubGF5ZXIuX2xhdGxuZ3NbMF0pO1xuICAgICAgICAgIGNvbnN0IGxheWVyID0gZXZlbnQubGF5ZXI7XG4gICAgICAgICAgdGhpcy5kcmF3bkl0ZW1zLmFkZExheWVyKGxheWVyKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubWFwLm9uKEwuRHJhdy5FdmVudC5FRElURUQsIChldmVudDogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgcG9seWdvbiA9IFtdO1xuICAgICAgICAgIGV2ZW50LmxheWVycy5lYWNoTGF5ZXIoKGxheWVyOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGxheWVyLl9sYXRsbmdzWzBdLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgICAgIHBvbHlnb24ucHVzaCh7XG4gICAgICAgICAgICAgICAgbGF0OiBlbGVtZW50LmxhdCxcbiAgICAgICAgICAgICAgICBsbmc6IGVsZW1lbnQubG5nXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5vbkVkaXRQb2x5Z29uLmVtaXQocG9seWdvbik7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignTGVhZmxldCBEcmF3IEV2ZW50IGlzIG5vdCBhdmFpbGFibGUuJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0xlYWZsZXQgb3IgTGVhZmxldCBEcmF3IGlzIG5vdCBjb3JyZWN0bHkgbG9hZGVkLicpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYWRkUG9seWdvbnNUb01hcCgpOiB2b2lkIHtcbiAgICB0aGlzLnBvbHlnb25zLmZvckVhY2gocG9seWdvbiA9PiB7XG4gICAgICAvLyBwb2x5Z29uLmNvb3JkaW5hdGVzLmZvckVhY2goKGVsKSA9PiB7XG4gICAgICAvLyAgIGVsLnJldmVyc2UoKTtcbiAgICAgIC8vIH0pO1xuICAgICAgY29uc3QgbGF5ZXIgPSBMLnBvbHlnb24ocG9seWdvbi5jb29yZGluYXRlcywgeyBjb2xvcjogcG9seWdvbi5jb2xvciB9KS5hZGRUbyh0aGlzLm1hcCk7XG5cbiAgICAgIC8vINin2LbYp9mB2Ycg2qnYsdiv2YYg2YTbjNio2YQg2KjZhyDZvtin2YTbjNqv2KfZhlxuICAgICAgbGF5ZXIuYmluZFRvb2x0aXAocG9seWdvbi5uYW1lLCB7IHBlcm1hbmVudDogdHJ1ZSwgZGlyZWN0aW9uOiAnY2VudGVyJywgY2xhc3NOYW1lOiAnZm9udC1beWVrYW5CYWtoXScgfSkub3BlblRvb2x0aXAoKTtcbiAgICAgIGlmIChwb2x5Z29uLmVkaXRhYmxlKSB7XG4gICAgICAgIC8vINin2LbYp9mB2Ycg2qnYsdiv2YYg2b7Yp9mE24zar9in2YYg2KjZhyBkcmF3bkl0ZW1zINio2LHYp9uMINmI24zYsdin24zYtFxuICAgICAgICB0aGlzLmRyYXduSXRlbXMuYWRkTGF5ZXIobGF5ZXIpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgY2xlYXJNYXAoKSB7XG4gICAgdGhpcy5tYXAuZWFjaExheWVyKChsYXllcikgPT4ge1xuICAgICAgaWYgKCEobGF5ZXIgaW5zdGFuY2VvZiBMLlRpbGVMYXllcikpIHtcbiAgICAgICAgdGhpcy5tYXAucmVtb3ZlTGF5ZXIobGF5ZXIpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydwb2x5Z29ucyddKSB7XG4gICAgICB0aGlzLmNsZWFyTWFwKCk7XG4gICAgICB0aGlzLmFkZFBvbHlnb25zVG9NYXAoKTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbJ2NlbnRlciddIHx8IGNoYW5nZXNbJ3pvb20nXSkge1xuICAgICAgaWYgKHRoaXMubWFwKSB7XG4gICAgICAgIHRoaXMubWFwLnNldFZpZXcodGhpcy5jZW50ZXIsIHRoaXMuem9vbSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaW5pdE1hcCgpO1xuICAgIHRoaXMuYWRkUG9seWdvbnNUb01hcCgpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwibWFwLWNvbnRhaW5lclwiPlxuICAgIDxkaXYgY2xhc3M9XCJtYXAtZnJhbWVcIj5cbiAgICAgICAgPGRpdiBpZD1cIm1hcFwiICNtYXBFbGVtZW50PjwvZGl2PlxuICAgICAgICA8IS0tIDxidXR0b24gbWF0LWZsYXQtYnV0dG9uIChjbGljayk9XCJjdXJyZW50TG9jYXRpb24oKVwiICpuZ0lmPVwiYWxsb3dDdXJyZW50TG9jYXRpb25cIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtc29saWQgZmEtbG9jYXRpb24tY3Jvc3NoYWlyc1wiPjwvaT5cbiAgICAgICAgPC9idXR0b24+IC0tPlxuICAgIDwvZGl2PlxuPC9kaXY+Il19
@@ -0,0 +1,14 @@
1
+ import { Component } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "ng-zorro-antd/spin";
4
+ export class SpinnerComponent {
5
+ constructor() { }
6
+ ngOnInit() { }
7
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SpinnerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
8
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: SpinnerComponent, selector: "app-spinner", ngImport: i0, template: "<div class=\"w-full h-full absolute top-0 left-0 flex justify-center items-center bg-white\">\n <nz-spin nzSimple nzSize=\"large\" nzSimple></nz-spin>\n</div>", dependencies: [{ kind: "component", type: i1.NzSpinComponent, selector: "nz-spin", inputs: ["nzIndicator", "nzSize", "nzTip", "nzDelay", "nzSimple", "nzSpinning"], exportAs: ["nzSpin"] }] });
9
+ }
10
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SpinnerComponent, decorators: [{
11
+ type: Component,
12
+ args: [{ selector: 'app-spinner', template: "<div class=\"w-full h-full absolute top-0 left-0 flex justify-center items-center bg-white\">\n <nz-spin nzSimple nzSize=\"large\" nzSimple></nz-spin>\n</div>" }]
13
+ }], ctorParameters: () => [] });
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Bpbm5lci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaGFyZWQvc3JjL2xpYi9jb21wb25lbnRzL3NwaW5uZXIvc3Bpbm5lci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaGFyZWQvc3JjL2xpYi9jb21wb25lbnRzL3NwaW5uZXIvc3Bpbm5lci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDOzs7QUFNbEQsTUFBTSxPQUFPLGdCQUFnQjtJQUN6QixnQkFBZ0IsQ0FBQztJQUVqQixRQUFRLEtBQVcsQ0FBQzt3R0FIWCxnQkFBZ0I7NEZBQWhCLGdCQUFnQixtRENON0IsbUtBRU07OzRGRElPLGdCQUFnQjtrQkFKNUIsU0FBUzsrQkFDSSxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdhcHAtc3Bpbm5lcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3NwaW5uZXIuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFNwaW5uZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIGNvbnN0cnVjdG9yKCkgeyB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHsgfVxufVxuIiwiPGRpdiBjbGFzcz1cInctZnVsbCBoLWZ1bGwgYWJzb2x1dGUgdG9wLTAgbGVmdC0wIGZsZXgganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyIGJnLXdoaXRlXCI+XG4gICAgPG56LXNwaW4gbnpTaW1wbGUgbnpTaXplPVwibGFyZ2VcIiBuelNpbXBsZT48L256LXNwaW4+XG48L2Rpdj4iXX0=
@@ -0,0 +1,37 @@
1
+ import { Directive, HostListener } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@angular/forms";
4
+ export class CharInputDirective {
5
+ el;
6
+ control;
7
+ renderer;
8
+ constructor(el, control, renderer) {
9
+ this.el = el;
10
+ this.control = control;
11
+ this.renderer = renderer;
12
+ }
13
+ onEvent($event) {
14
+ const englishPattern = /^[A-Za-z ]+$/;
15
+ const persianPattern = /^[\u0600-\u06FF ]+$/;
16
+ let value = this.el.nativeElement.value;
17
+ if (!englishPattern.test(value) && !persianPattern.test(value)) {
18
+ value = value.replaceAll($event.data, '');
19
+ }
20
+ this.el.nativeElement.value = value;
21
+ this.control.control.setValue(value);
22
+ this.renderer.setProperty(this.el.nativeElement, 'value', value);
23
+ return value;
24
+ }
25
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CharInputDirective, deps: [{ token: i0.ElementRef }, { token: i1.NgControl }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });
26
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: CharInputDirective, selector: "[charInput]", host: { listeners: { "input": "onEvent($event)" } }, ngImport: i0 });
27
+ }
28
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CharInputDirective, decorators: [{
29
+ type: Directive,
30
+ args: [{
31
+ selector: '[charInput]',
32
+ }]
33
+ }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1.NgControl }, { type: i0.Renderer2 }], propDecorators: { onEvent: [{
34
+ type: HostListener,
35
+ args: ['input', ['$event']]
36
+ }] } });
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhci1pbnB1dC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaGFyZWQvc3JjL2xpYi9kaXJlY3RpdmUvY2hhci1pbnB1dC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQW9CLE1BQU0sZUFBZSxDQUFDOzs7QUFNdEYsTUFBTSxPQUFPLGtCQUFrQjtJQUNQO0lBQXdCO0lBQTJCO0lBQXZFLFlBQW9CLEVBQWMsRUFBVSxPQUFrQixFQUFTLFFBQW1CO1FBQXRFLE9BQUUsR0FBRixFQUFFLENBQVk7UUFBVSxZQUFPLEdBQVAsT0FBTyxDQUFXO1FBQVMsYUFBUSxHQUFSLFFBQVEsQ0FBVztJQUFJLENBQUM7SUFFNUQsT0FBTyxDQUFDLE1BQWtCO1FBQ3pELE1BQU0sY0FBYyxHQUFHLGNBQWMsQ0FBQztRQUN0QyxNQUFNLGNBQWMsR0FBRyxxQkFBcUIsQ0FBQztRQUM3QyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUM7UUFDeEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDN0QsS0FBSyxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztRQUM5QyxDQUFDO1FBQ0QsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNwQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2pFLE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7d0dBZFEsa0JBQWtCOzRGQUFsQixrQkFBa0I7OzRGQUFsQixrQkFBa0I7a0JBSDlCLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLGFBQWE7aUJBQzFCOytIQUlzQyxPQUFPO3NCQUF6QyxZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgSG9zdExpc3RlbmVyLCBJbnB1dCwgUmVuZGVyZXIyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ0NvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW2NoYXJJbnB1dF0nLFxufSlcbmV4cG9ydCBjbGFzcyBDaGFySW5wdXREaXJlY3RpdmUge1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgZWw6IEVsZW1lbnRSZWYsIHByaXZhdGUgY29udHJvbDogTmdDb250cm9sLCBwdWJsaWMgcmVuZGVyZXI6IFJlbmRlcmVyMikgeyB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdpbnB1dCcsIFsnJGV2ZW50J10pIG9uRXZlbnQoJGV2ZW50OiBJbnB1dEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGVuZ2xpc2hQYXR0ZXJuID0gL15bQS1aYS16IF0rJC87XG4gICAgICAgIGNvbnN0IHBlcnNpYW5QYXR0ZXJuID0gL15bXFx1MDYwMC1cXHUwNkZGIF0rJC87XG4gICAgICAgIGxldCB2YWx1ZSA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC52YWx1ZTtcbiAgICAgICAgaWYgKCFlbmdsaXNoUGF0dGVybi50ZXN0KHZhbHVlKSAmJiAhcGVyc2lhblBhdHRlcm4udGVzdCh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZUFsbCgkZXZlbnQuZGF0YSwgJycpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLmNvbnRyb2wuY29udHJvbC5zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5lbC5uYXRpdmVFbGVtZW50LCAndmFsdWUnLCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG59Il19
@@ -0,0 +1,4 @@
1
+ export * from './char-input.directive';
2
+ export * from './numeric-input.directive';
3
+ export * from './mask.directive';
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2hhcmVkL3NyYy9saWIvZGlyZWN0aXZlL2luZGV4LmFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyxrQkFBa0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vY2hhci1pbnB1dC5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi9udW1lcmljLWlucHV0LmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL21hc2suZGlyZWN0aXZlJzsiXX0=
@@ -0,0 +1,58 @@
1
+ import { Directive, Input } from '@angular/core';
2
+ import { NgControl } from '@angular/forms';
3
+ import { valueToFormat, unmaskValue } from './mask';
4
+ import * as i0 from "@angular/core";
5
+ export class MaskDirective {
6
+ injector;
7
+ appMask;
8
+ control;
9
+ _lastMaskedValue = '';
10
+ constructor(injector) {
11
+ this.injector = injector;
12
+ }
13
+ ngOnInit() {
14
+ this.control = this.injector.get(NgControl);
15
+ if (!this.control || !this.control.valueAccessor) {
16
+ return;
17
+ }
18
+ const originalWriteVal = this.control.valueAccessor.writeValue.bind(this.control.valueAccessor);
19
+ this.control.valueAccessor.writeValue = (val) => originalWriteVal(this._maskValue(val));
20
+ const originalChange = this.control.valueAccessor['onChange'].bind(this.control.valueAccessor);
21
+ this.control.valueAccessor.registerOnChange((val) => originalChange(this._unmaskValue(val)));
22
+ this._setVal(this._maskValue(this.control.value));
23
+ }
24
+ _maskValue(val) {
25
+ if (!this.appMask || val === this._lastMaskedValue) {
26
+ return val;
27
+ }
28
+ if (val == null)
29
+ val = "";
30
+ const maskedVal = this._lastMaskedValue =
31
+ valueToFormat(val, this.appMask, this._lastMaskedValue.length > val.length, this._lastMaskedValue);
32
+ return maskedVal;
33
+ }
34
+ _unmaskValue(val) {
35
+ const maskedVal = this._maskValue(val);
36
+ const unmaskedVal = unmaskValue(maskedVal);
37
+ if (maskedVal !== val) {
38
+ this._setVal(maskedVal);
39
+ }
40
+ return maskedVal ? unmaskedVal : '';
41
+ }
42
+ _setVal(val) {
43
+ if (this.control.control) {
44
+ this.control.control.setValue(val, { emitEvent: false });
45
+ }
46
+ }
47
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MaskDirective, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Directive });
48
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: MaskDirective, selector: "[appMask]", inputs: { appMask: "appMask" }, ngImport: i0 });
49
+ }
50
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MaskDirective, decorators: [{
51
+ type: Directive,
52
+ args: [{
53
+ selector: '[appMask]',
54
+ }]
55
+ }], ctorParameters: () => [{ type: i0.Injector }], propDecorators: { appMask: [{
56
+ type: Input
57
+ }] } });
58
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFzay5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaGFyZWQvc3JjL2xpYi9kaXJlY3RpdmUvbWFzay5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBWSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDbkUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE9BQU8sRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLE1BQU0sUUFBUSxDQUFDOztBQUtwRCxNQUFNLE9BQU8sYUFBYTtJQVFWO0lBTkgsT0FBTyxDQUFTO0lBRWpCLE9BQU8sQ0FBWTtJQUNuQixnQkFBZ0IsR0FBRyxFQUFFLENBQUM7SUFFOUIsWUFDWSxRQUFrQjtRQUFsQixhQUFRLEdBQVIsUUFBUSxDQUFVO0lBQzFCLENBQUM7SUFFTCxRQUFRO1FBQ0osSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUU1QyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDL0MsT0FBTztRQUNYLENBQUM7UUFFRCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNoRyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUU3RixNQUFNLGNBQWMsR0FBUyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN0RyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRWxHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVPLFVBQVUsQ0FBQyxHQUFXO1FBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLEdBQUcsS0FBSyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUNqRCxPQUFPLEdBQUcsQ0FBQztRQUNmLENBQUM7UUFDRCxJQUFJLEdBQUcsSUFBSSxJQUFJO1lBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUUxQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCO1lBQ25DLGFBQWEsQ0FDVCxHQUFHLEVBQ0gsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQ3ZELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBRS9CLE9BQU8sU0FBUyxDQUFDO0lBQ3JCLENBQUM7SUFFTyxZQUFZLENBQUMsR0FBVztRQUM1QixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sV0FBVyxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUUzQyxJQUFJLFNBQVMsS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzVCLENBQUM7UUFFRCxPQUFPLFNBQVMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDeEMsQ0FBQztJQUVPLE9BQU8sQ0FBQyxHQUFXO1FBQ3ZCLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDN0QsQ0FBQztJQUNMLENBQUM7d0dBekRRLGFBQWE7NEZBQWIsYUFBYTs7NEZBQWIsYUFBYTtrQkFIekIsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsV0FBVztpQkFDeEI7NkVBR1ksT0FBTztzQkFBZixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBJbmplY3RvciwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmdDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyB2YWx1ZVRvRm9ybWF0LCB1bm1hc2tWYWx1ZSB9IGZyb20gJy4vbWFzayc7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW2FwcE1hc2tdJyxcbn0pXG5leHBvcnQgY2xhc3MgTWFza0RpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgICBASW5wdXQoKSBhcHBNYXNrOiBzdHJpbmc7XG5cbiAgICBwcml2YXRlIGNvbnRyb2w6IE5nQ29udHJvbDtcbiAgICBwcml2YXRlIF9sYXN0TWFza2VkVmFsdWUgPSAnJztcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvcixcbiAgICApIHsgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuY29udHJvbCA9IHRoaXMuaW5qZWN0b3IuZ2V0KE5nQ29udHJvbCk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmNvbnRyb2wgfHwgIXRoaXMuY29udHJvbC52YWx1ZUFjY2Vzc29yKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBvcmlnaW5hbFdyaXRlVmFsID0gdGhpcy5jb250cm9sLnZhbHVlQWNjZXNzb3Iud3JpdGVWYWx1ZS5iaW5kKHRoaXMuY29udHJvbC52YWx1ZUFjY2Vzc29yKTtcbiAgICAgICAgdGhpcy5jb250cm9sLnZhbHVlQWNjZXNzb3Iud3JpdGVWYWx1ZSA9ICh2YWw6IGFueSkgPT4gb3JpZ2luYWxXcml0ZVZhbCh0aGlzLl9tYXNrVmFsdWUodmFsKSk7XG5cbiAgICAgICAgY29uc3Qgb3JpZ2luYWxDaGFuZ2UgPSAoPGFueT50aGlzLmNvbnRyb2wudmFsdWVBY2Nlc3NvcilbJ29uQ2hhbmdlJ10uYmluZCh0aGlzLmNvbnRyb2wudmFsdWVBY2Nlc3Nvcik7XG4gICAgICAgIHRoaXMuY29udHJvbC52YWx1ZUFjY2Vzc29yLnJlZ2lzdGVyT25DaGFuZ2UoKHZhbDogYW55KSA9PiBvcmlnaW5hbENoYW5nZSh0aGlzLl91bm1hc2tWYWx1ZSh2YWwpKSk7XG5cbiAgICAgICAgdGhpcy5fc2V0VmFsKHRoaXMuX21hc2tWYWx1ZSh0aGlzLmNvbnRyb2wudmFsdWUpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9tYXNrVmFsdWUodmFsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBpZiAoIXRoaXMuYXBwTWFzayB8fCB2YWwgPT09IHRoaXMuX2xhc3RNYXNrZWRWYWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsID09IG51bGwpIHZhbCA9IFwiXCI7XG5cbiAgICAgICAgY29uc3QgbWFza2VkVmFsID0gdGhpcy5fbGFzdE1hc2tlZFZhbHVlID1cbiAgICAgICAgICAgIHZhbHVlVG9Gb3JtYXQoXG4gICAgICAgICAgICAgICAgdmFsLFxuICAgICAgICAgICAgICAgIHRoaXMuYXBwTWFzaywgdGhpcy5fbGFzdE1hc2tlZFZhbHVlLmxlbmd0aCA+IHZhbC5sZW5ndGgsXG4gICAgICAgICAgICAgICAgdGhpcy5fbGFzdE1hc2tlZFZhbHVlKTtcblxuICAgICAgICByZXR1cm4gbWFza2VkVmFsO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3VubWFza1ZhbHVlKHZhbDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgbWFza2VkVmFsID0gdGhpcy5fbWFza1ZhbHVlKHZhbCk7XG4gICAgICAgIGNvbnN0IHVubWFza2VkVmFsID0gdW5tYXNrVmFsdWUobWFza2VkVmFsKTtcblxuICAgICAgICBpZiAobWFza2VkVmFsICE9PSB2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuX3NldFZhbChtYXNrZWRWYWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG1hc2tlZFZhbCA/IHVubWFza2VkVmFsIDogJyc7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc2V0VmFsKHZhbDogc3RyaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wuY29udHJvbCkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sLmNvbnRyb2wuc2V0VmFsdWUodmFsLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbn0iXX0=
@@ -0,0 +1,78 @@
1
+ const _formatToRegExp = {
2
+ '0': /[0-9]/, 'a': /[a-z]/, 'A': /[A-Z]/, 'B': /[a-zA-Z]/,
3
+ };
4
+ const _allFormatsStr = '(' +
5
+ Object.keys(_formatToRegExp)
6
+ .map(key => _formatToRegExp[key].toString())
7
+ .map(regexStr => regexStr.substr(1, regexStr.length - 2))
8
+ .join('|')
9
+ + ')';
10
+ const _allFormatsGlobal = getAllFormatRegexp('g');
11
+ /**
12
+ * Apply format to a value string
13
+ *
14
+ * Format can be constructed from next symbols:
15
+ * - '0': /[0-9]/,
16
+ * - 'a': /[a-z]/,
17
+ * - 'A': /[A-Z]/,
18
+ * - 'B': /[a-zA-Z]/
19
+ *
20
+ * Example: 'AAA-00BB-aaaa'
21
+ * will accept 'COD-12Rt-efww'
22
+ *
23
+ * @param value Current value
24
+ * @param format Format
25
+ * @param goingBack Indicates if change was done by BackSpace
26
+ * @param prevValue Pass to precisely detect formatter chars
27
+ */
28
+ export function valueToFormat(value, format, goingBack = false, prevValue) {
29
+ let maskedValue = '';
30
+ const unmaskedValue = unmaskValue(value);
31
+ const isLastCharFormatter = !getAllFormatRegexp().test(value[value.length - 1]);
32
+ const isPrevLastCharFormatter = prevValue && !getAllFormatRegexp().test(prevValue[prevValue.length - 1]);
33
+ let formatOffset = 0;
34
+ for (let i = 0, maxI = Math.min(unmaskedValue.length, format.length); i < maxI; ++i) {
35
+ const valueChar = unmaskedValue[i];
36
+ let formatChar = format[formatOffset + i];
37
+ let formatRegex = getFormatRegexp(formatChar);
38
+ if (formatChar && !formatRegex) {
39
+ maskedValue += formatChar;
40
+ formatChar = format[++formatOffset + i];
41
+ formatRegex = getFormatRegexp(formatChar);
42
+ }
43
+ if (valueChar && formatRegex) {
44
+ if (formatRegex.test(valueChar)) {
45
+ maskedValue += valueChar;
46
+ }
47
+ else {
48
+ break;
49
+ }
50
+ }
51
+ const nextFormatChar = format[formatOffset + i + 1];
52
+ const nextFormatRegex = getFormatRegexp(nextFormatChar);
53
+ const isLastIteration = i === maxI - 1;
54
+ if (isLastIteration && nextFormatChar && !nextFormatRegex) {
55
+ if (!isLastCharFormatter && goingBack) {
56
+ if (prevValue && !isPrevLastCharFormatter) {
57
+ continue;
58
+ }
59
+ maskedValue = maskedValue.substr(0, formatOffset + i);
60
+ }
61
+ else {
62
+ maskedValue += nextFormatChar;
63
+ }
64
+ }
65
+ }
66
+ return maskedValue;
67
+ }
68
+ export function unmaskValue(value) {
69
+ const unmaskedMathes = value.match(_allFormatsGlobal);
70
+ return unmaskedMathes ? unmaskedMathes.join('') : '';
71
+ }
72
+ function getAllFormatRegexp(flags) {
73
+ return new RegExp(_allFormatsStr, flags);
74
+ }
75
+ function getFormatRegexp(formatChar) {
76
+ return formatChar && _formatToRegExp[formatChar] ? _formatToRegExp[formatChar] : null;
77
+ }
78
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFzay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NoYXJlZC9zcmMvbGliL2RpcmVjdGl2ZS9tYXNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE1BQU0sZUFBZSxHQUFHO0lBQ3BCLEdBQUcsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxVQUFVO0NBQzVELENBQUM7QUFFRixNQUFNLGNBQWMsR0FBRyxHQUFHO0lBQ3RCLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDO1NBQ3ZCLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztTQUMzQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ3hELElBQUksQ0FBQyxHQUFHLENBQUM7TUFDWixHQUFHLENBQUM7QUFFVixNQUFNLGlCQUFpQixHQUFHLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBRWxEOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FBQyxLQUFhLEVBQUUsTUFBYyxFQUFFLFNBQVMsR0FBRyxLQUFLLEVBQUUsU0FBa0I7SUFDOUYsSUFBSSxXQUFXLEdBQUcsRUFBRSxDQUFDO0lBQ3JCLE1BQU0sYUFBYSxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN6QyxNQUFNLG1CQUFtQixHQUFHLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoRixNQUFNLHVCQUF1QixHQUFHLFNBQVMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFekcsSUFBSSxZQUFZLEdBQUcsQ0FBQyxDQUFDO0lBQ3JCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUNsRixNQUFNLFNBQVMsR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkMsSUFBSSxVQUFVLEdBQUcsTUFBTSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMxQyxJQUFJLFdBQVcsR0FBRyxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFOUMsSUFBSSxVQUFVLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUM3QixXQUFXLElBQUksVUFBVSxDQUFDO1lBQzFCLFVBQVUsR0FBRyxNQUFNLENBQUMsRUFBRSxZQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDeEMsV0FBVyxHQUFHLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM5QyxDQUFDO1FBRUQsSUFBSSxTQUFTLElBQUksV0FBVyxFQUFFLENBQUM7WUFDM0IsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7Z0JBQzlCLFdBQVcsSUFBSSxTQUFTLENBQUM7WUFDN0IsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLE1BQU07WUFDVixDQUFDO1FBQ0wsQ0FBQztRQUVELE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxZQUFZLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3BELE1BQU0sZUFBZSxHQUFHLGVBQWUsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN4RCxNQUFNLGVBQWUsR0FBRyxDQUFDLEtBQUssSUFBSSxHQUFHLENBQUMsQ0FBQztRQUV2QyxJQUFJLGVBQWUsSUFBSSxjQUFjLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN4RCxJQUFJLENBQUMsbUJBQW1CLElBQUksU0FBUyxFQUFFLENBQUM7Z0JBQ3BDLElBQUksU0FBUyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztvQkFDeEMsU0FBUztnQkFDYixDQUFDO2dCQUNELFdBQVcsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxZQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDMUQsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLFdBQVcsSUFBSSxjQUFjLENBQUM7WUFDbEMsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDO0lBRUQsT0FBTyxXQUFXLENBQUM7QUFDdkIsQ0FBQztBQUVELE1BQU0sVUFBVSxXQUFXLENBQUMsS0FBYTtJQUNyQyxNQUFNLGNBQWMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDdEQsT0FBTyxjQUFjLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUN6RCxDQUFDO0FBRUQsU0FBUyxrQkFBa0IsQ0FBQyxLQUFjO0lBQ3RDLE9BQU8sSUFBSSxNQUFNLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzdDLENBQUM7QUFFRCxTQUFTLGVBQWUsQ0FBQyxVQUFrQjtJQUN2QyxPQUFPLFVBQVUsSUFBSSxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQzFGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJcbmNvbnN0IF9mb3JtYXRUb1JlZ0V4cCA9IHtcbiAgICAnMCc6IC9bMC05XS8sICdhJzogL1thLXpdLywgJ0EnOiAvW0EtWl0vLCAnQic6IC9bYS16QS1aXS8sXG59O1xuXG5jb25zdCBfYWxsRm9ybWF0c1N0ciA9ICcoJyArXG4gICAgT2JqZWN0LmtleXMoX2Zvcm1hdFRvUmVnRXhwKVxuICAgICAgICAubWFwKGtleSA9PiBfZm9ybWF0VG9SZWdFeHBba2V5XS50b1N0cmluZygpKVxuICAgICAgICAubWFwKHJlZ2V4U3RyID0+IHJlZ2V4U3RyLnN1YnN0cigxLCByZWdleFN0ci5sZW5ndGggLSAyKSlcbiAgICAgICAgLmpvaW4oJ3wnKVxuICAgICsgJyknO1xuXG5jb25zdCBfYWxsRm9ybWF0c0dsb2JhbCA9IGdldEFsbEZvcm1hdFJlZ2V4cCgnZycpO1xuXG4vKipcbiAqIEFwcGx5IGZvcm1hdCB0byBhIHZhbHVlIHN0cmluZ1xuICpcbiAqIEZvcm1hdCBjYW4gYmUgY29uc3RydWN0ZWQgZnJvbSBuZXh0IHN5bWJvbHM6XG4gKiAgLSAnMCc6IC9bMC05XS8sXG4gKiAgLSAnYSc6IC9bYS16XS8sXG4gKiAgLSAnQSc6IC9bQS1aXS8sXG4gKiAgLSAnQic6IC9bYS16QS1aXS9cbiAqXG4gKiBFeGFtcGxlOiAnQUFBLTAwQkItYWFhYSdcbiAqIHdpbGwgYWNjZXB0ICdDT0QtMTJSdC1lZnd3J1xuICpcbiAqIEBwYXJhbSB2YWx1ZSBDdXJyZW50IHZhbHVlXG4gKiBAcGFyYW0gZm9ybWF0IEZvcm1hdFxuICogQHBhcmFtIGdvaW5nQmFjayBJbmRpY2F0ZXMgaWYgY2hhbmdlIHdhcyBkb25lIGJ5IEJhY2tTcGFjZVxuICogQHBhcmFtIHByZXZWYWx1ZSBQYXNzIHRvIHByZWNpc2VseSBkZXRlY3QgZm9ybWF0dGVyIGNoYXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWx1ZVRvRm9ybWF0KHZhbHVlOiBzdHJpbmcsIGZvcm1hdDogc3RyaW5nLCBnb2luZ0JhY2sgPSBmYWxzZSwgcHJldlZhbHVlPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBsZXQgbWFza2VkVmFsdWUgPSAnJztcbiAgICBjb25zdCB1bm1hc2tlZFZhbHVlID0gdW5tYXNrVmFsdWUodmFsdWUpO1xuICAgIGNvbnN0IGlzTGFzdENoYXJGb3JtYXR0ZXIgPSAhZ2V0QWxsRm9ybWF0UmVnZXhwKCkudGVzdCh2YWx1ZVt2YWx1ZS5sZW5ndGggLSAxXSk7XG4gICAgY29uc3QgaXNQcmV2TGFzdENoYXJGb3JtYXR0ZXIgPSBwcmV2VmFsdWUgJiYgIWdldEFsbEZvcm1hdFJlZ2V4cCgpLnRlc3QocHJldlZhbHVlW3ByZXZWYWx1ZS5sZW5ndGggLSAxXSk7XG5cbiAgICBsZXQgZm9ybWF0T2Zmc2V0ID0gMDtcbiAgICBmb3IgKGxldCBpID0gMCwgbWF4SSA9IE1hdGgubWluKHVubWFza2VkVmFsdWUubGVuZ3RoLCBmb3JtYXQubGVuZ3RoKTsgaSA8IG1heEk7ICsraSkge1xuICAgICAgICBjb25zdCB2YWx1ZUNoYXIgPSB1bm1hc2tlZFZhbHVlW2ldO1xuICAgICAgICBsZXQgZm9ybWF0Q2hhciA9IGZvcm1hdFtmb3JtYXRPZmZzZXQgKyBpXTtcbiAgICAgICAgbGV0IGZvcm1hdFJlZ2V4ID0gZ2V0Rm9ybWF0UmVnZXhwKGZvcm1hdENoYXIpO1xuXG4gICAgICAgIGlmIChmb3JtYXRDaGFyICYmICFmb3JtYXRSZWdleCkge1xuICAgICAgICAgICAgbWFza2VkVmFsdWUgKz0gZm9ybWF0Q2hhcjtcbiAgICAgICAgICAgIGZvcm1hdENoYXIgPSBmb3JtYXRbKytmb3JtYXRPZmZzZXQgKyBpXTtcbiAgICAgICAgICAgIGZvcm1hdFJlZ2V4ID0gZ2V0Rm9ybWF0UmVnZXhwKGZvcm1hdENoYXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlQ2hhciAmJiBmb3JtYXRSZWdleCkge1xuICAgICAgICAgICAgaWYgKGZvcm1hdFJlZ2V4LnRlc3QodmFsdWVDaGFyKSkge1xuICAgICAgICAgICAgICAgIG1hc2tlZFZhbHVlICs9IHZhbHVlQ2hhcjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuZXh0Rm9ybWF0Q2hhciA9IGZvcm1hdFtmb3JtYXRPZmZzZXQgKyBpICsgMV07XG4gICAgICAgIGNvbnN0IG5leHRGb3JtYXRSZWdleCA9IGdldEZvcm1hdFJlZ2V4cChuZXh0Rm9ybWF0Q2hhcik7XG4gICAgICAgIGNvbnN0IGlzTGFzdEl0ZXJhdGlvbiA9IGkgPT09IG1heEkgLSAxO1xuXG4gICAgICAgIGlmIChpc0xhc3RJdGVyYXRpb24gJiYgbmV4dEZvcm1hdENoYXIgJiYgIW5leHRGb3JtYXRSZWdleCkge1xuICAgICAgICAgICAgaWYgKCFpc0xhc3RDaGFyRm9ybWF0dGVyICYmIGdvaW5nQmFjaykge1xuICAgICAgICAgICAgICAgIGlmIChwcmV2VmFsdWUgJiYgIWlzUHJldkxhc3RDaGFyRm9ybWF0dGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBtYXNrZWRWYWx1ZSA9IG1hc2tlZFZhbHVlLnN1YnN0cigwLCBmb3JtYXRPZmZzZXQgKyBpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbWFza2VkVmFsdWUgKz0gbmV4dEZvcm1hdENoYXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWFza2VkVmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bm1hc2tWYWx1ZSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCB1bm1hc2tlZE1hdGhlcyA9IHZhbHVlLm1hdGNoKF9hbGxGb3JtYXRzR2xvYmFsKTtcbiAgICByZXR1cm4gdW5tYXNrZWRNYXRoZXMgPyB1bm1hc2tlZE1hdGhlcy5qb2luKCcnKSA6ICcnO1xufVxuXG5mdW5jdGlvbiBnZXRBbGxGb3JtYXRSZWdleHAoZmxhZ3M/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IFJlZ0V4cChfYWxsRm9ybWF0c1N0ciwgZmxhZ3MpO1xufVxuXG5mdW5jdGlvbiBnZXRGb3JtYXRSZWdleHAoZm9ybWF0Q2hhcjogc3RyaW5nKTogUmVnRXhwIHwgbnVsbCB7XG4gICAgcmV0dXJuIGZvcm1hdENoYXIgJiYgX2Zvcm1hdFRvUmVnRXhwW2Zvcm1hdENoYXJdID8gX2Zvcm1hdFRvUmVnRXhwW2Zvcm1hdENoYXJdIDogbnVsbDtcbn0iXX0=
@@ -0,0 +1,44 @@
1
+ import { Directive, HostListener } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@angular/forms";
4
+ export class EnglishNumberInputDirective {
5
+ el;
6
+ control;
7
+ renderer;
8
+ constructor(el, control, renderer) {
9
+ this.el = el;
10
+ this.control = control;
11
+ this.renderer = renderer;
12
+ }
13
+ onEvent($event) {
14
+ var persianNumbers = [/۰/g, /۱/g, /۲/g, /۳/g, /۴/g, /۵/g, /۶/g, /۷/g, /۸/g, /۹/g], arabicNumbers = [/٠/g, /١/g, /٢/g, /٣/g, /٤/g, /٥/g, /٦/g, /٧/g, /٨/g, /٩/g], fixNumbers = function (str) {
15
+ if (typeof str === 'string') {
16
+ for (var i = 0; i < 10; i++) {
17
+ str = str.replace(persianNumbers[i], i).replace(arabicNumbers[i], i);
18
+ }
19
+ }
20
+ return str;
21
+ };
22
+ const numberPattern = /^\d+$/;
23
+ let value = fixNumbers(this.el.nativeElement.value);
24
+ if (!numberPattern.test(value)) {
25
+ value = value.replaceAll($event.data, '');
26
+ }
27
+ this.el.nativeElement.value = value;
28
+ this.control.control.setValue(value);
29
+ this.renderer.setProperty(this.el.nativeElement, 'value', value);
30
+ return value;
31
+ }
32
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: EnglishNumberInputDirective, deps: [{ token: i0.ElementRef }, { token: i1.NgControl }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });
33
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: EnglishNumberInputDirective, selector: "[englishNumberInput]", host: { listeners: { "input": "onEvent($event)" } }, ngImport: i0 });
34
+ }
35
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: EnglishNumberInputDirective, decorators: [{
36
+ type: Directive,
37
+ args: [{
38
+ selector: '[englishNumberInput]',
39
+ }]
40
+ }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1.NgControl }, { type: i0.Renderer2 }], propDecorators: { onEvent: [{
41
+ type: HostListener,
42
+ args: ['input', ['$event']]
43
+ }] } });
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVtZXJpYy1pbnB1dC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaGFyZWQvc3JjL2xpYi9kaXJlY3RpdmUvbnVtZXJpYy1pbnB1dC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQW9CLE1BQU0sZUFBZSxDQUFDOzs7QUFNdEYsTUFBTSxPQUFPLDJCQUEyQjtJQUNoQjtJQUF3QjtJQUEyQjtJQUF2RSxZQUFvQixFQUFjLEVBQVUsT0FBa0IsRUFBUyxRQUFtQjtRQUF0RSxPQUFFLEdBQUYsRUFBRSxDQUFZO1FBQVUsWUFBTyxHQUFQLE9BQU8sQ0FBVztRQUFTLGFBQVEsR0FBUixRQUFRLENBQVc7SUFBSSxDQUFDO0lBRTVELE9BQU8sQ0FBQyxNQUFrQjtRQUN6RCxJQUFJLGNBQWMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUM3RSxhQUFhLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsRUFDNUUsVUFBVSxHQUFHLFVBQVUsR0FBRztZQUN0QixJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUMxQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7b0JBQzFCLEdBQUcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUN6RSxDQUFDO1lBQ0wsQ0FBQztZQUNELE9BQU8sR0FBRyxDQUFDO1FBQ2YsQ0FBQyxDQUFDO1FBQ04sTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDO1FBQzlCLElBQUksS0FBSyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVwRCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzdCLEtBQUssR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDOUMsQ0FBQztRQUNELElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDcEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNqRSxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO3dHQXhCUSwyQkFBMkI7NEZBQTNCLDJCQUEyQjs7NEZBQTNCLDJCQUEyQjtrQkFIdkMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsc0JBQXNCO2lCQUNuQzsrSEFJc0MsT0FBTztzQkFBekMsWUFBWTt1QkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIFJlbmRlcmVyMiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmdDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1tlbmdsaXNoTnVtYmVySW5wdXRdJyxcbn0pXG5leHBvcnQgY2xhc3MgRW5nbGlzaE51bWJlcklucHV0RGlyZWN0aXZlIHtcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsOiBFbGVtZW50UmVmLCBwcml2YXRlIGNvbnRyb2w6IE5nQ29udHJvbCwgcHVibGljIHJlbmRlcmVyOiBSZW5kZXJlcjIpIHsgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignaW5wdXQnLCBbJyRldmVudCddKSBvbkV2ZW50KCRldmVudDogSW5wdXRFdmVudCkge1xuICAgICAgICB2YXIgcGVyc2lhbk51bWJlcnMgPSBbL9uwL2csIC/bsS9nLCAv27IvZywgL9uzL2csIC/btC9nLCAv27UvZywgL9u2L2csIC/bty9nLCAv27gvZywgL9u5L2ddLFxuICAgICAgICAgICAgYXJhYmljTnVtYmVycyA9IFsv2aAvZywgL9mhL2csIC/Zoi9nLCAv2aMvZywgL9mkL2csIC/ZpS9nLCAv2aYvZywgL9mnL2csIC/ZqC9nLCAv2akvZ10sXG4gICAgICAgICAgICBmaXhOdW1iZXJzID0gZnVuY3Rpb24gKHN0cikge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc3RyID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKHBlcnNpYW5OdW1iZXJzW2ldLCBpKS5yZXBsYWNlKGFyYWJpY051bWJlcnNbaV0sIGkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBzdHI7XG4gICAgICAgICAgICB9O1xuICAgICAgICBjb25zdCBudW1iZXJQYXR0ZXJuID0gL15cXGQrJC87XG4gICAgICAgIGxldCB2YWx1ZSA9IGZpeE51bWJlcnModGhpcy5lbC5uYXRpdmVFbGVtZW50LnZhbHVlKTtcblxuICAgICAgICBpZiAoIW51bWJlclBhdHRlcm4udGVzdCh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZUFsbCgkZXZlbnQuZGF0YSwgJycpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLmNvbnRyb2wuY29udHJvbC5zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5lbC5uYXRpdmVFbGVtZW50LCAndmFsdWUnLCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG59Il19
@@ -0,0 +1,25 @@
1
+ import { Injectable } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@angular/router";
4
+ export class AuthGuard {
5
+ _router;
6
+ constructor(_router) {
7
+ this._router = _router;
8
+ }
9
+ canActivate(route, state) {
10
+ if (sessionStorage.getItem('userInfo')) {
11
+ return true;
12
+ }
13
+ this._router.navigate(['/auth']);
14
+ return false;
15
+ }
16
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AuthGuard, deps: [{ token: i1.Router }], target: i0.ɵɵFactoryTarget.Injectable });
17
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AuthGuard, providedIn: 'root' });
18
+ }
19
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AuthGuard, decorators: [{
20
+ type: Injectable,
21
+ args: [{
22
+ providedIn: 'root'
23
+ }]
24
+ }], ctorParameters: () => [{ type: i1.Router }] });
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5ndWFyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NoYXJlZC9zcmMvbGliL2d1YXJkL2F1dGguZ3VhcmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7O0FBTzNDLE1BQU0sT0FBTyxTQUFTO0lBQ0U7SUFBcEIsWUFBb0IsT0FBZTtRQUFmLFlBQU8sR0FBUCxPQUFPLENBQVE7SUFBSSxDQUFDO0lBQ3hDLFdBQVcsQ0FDUCxLQUE2QixFQUM3QixLQUEwQjtRQUUxQixJQUFJLGNBQWMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUNyQyxPQUFPLElBQUksQ0FBQTtRQUNmLENBQUM7UUFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDakMsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQzt3R0FYUSxTQUFTOzRHQUFULFNBQVMsY0FGTixNQUFNOzs0RkFFVCxTQUFTO2tCQUhyQixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENhbkFjdGl2YXRlLCBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBSb3V0ZXJTdGF0ZVNuYXBzaG90LCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEF1dGhHdWFyZCBpbXBsZW1lbnRzIENhbkFjdGl2YXRlIHtcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9yb3V0ZXI6IFJvdXRlcikgeyB9XG4gICAgY2FuQWN0aXZhdGUoXG4gICAgICAgIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LFxuICAgICAgICBzdGF0ZTogUm91dGVyU3RhdGVTbmFwc2hvdFxuICAgICk6IE9ic2VydmFibGU8Ym9vbGVhbj4gfCBQcm9taXNlPGJvb2xlYW4+IHwgYm9vbGVhbiB7XG4gICAgICAgIGlmIChzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCd1c2VySW5mbycpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZShbJy9hdXRoJ10pO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuIl19
@@ -0,0 +1,2 @@
1
+ export * from './auth.guard';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2hhcmVkL3NyYy9saWIvZ3VhcmQvaW5kZXguYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9hdXRoLmd1YXJkJzsiXX0=
@@ -0,0 +1,14 @@
1
+ import { Component } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@angular/router";
4
+ export class BlankLayout {
5
+ constructor() { }
6
+ ngOnInit() { }
7
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BlankLayout, deps: [], target: i0.ɵɵFactoryTarget.Component });
8
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: BlankLayout, selector: "ng-component", ngImport: i0, template: "<div class=\"w-full h-full\">\n <router-outlet></router-outlet>\n</div>", dependencies: [{ kind: "directive", type: i1.RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }] });
9
+ }
10
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BlankLayout, decorators: [{
11
+ type: Component,
12
+ args: [{ template: "<div class=\"w-full h-full\">\n <router-outlet></router-outlet>\n</div>" }]
13
+ }], ctorParameters: () => [] });
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxhbmsubGF5b3V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2hhcmVkL3NyYy9saWIvbGF5b3V0cy9ibGFuay9ibGFuay5sYXlvdXQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaGFyZWQvc3JjL2xpYi9sYXlvdXRzL2JsYW5rL2JsYW5rLmxheW91dC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7OztBQUtsRCxNQUFNLE9BQU8sV0FBVztJQUNwQixnQkFBZ0IsQ0FBQztJQUVqQixRQUFRLEtBQVcsQ0FBQzt3R0FIWCxXQUFXOzRGQUFYLFdBQVcsb0RDTHhCLDRFQUVNOzs0RkRHTyxXQUFXO2tCQUh2QixTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gICAgdGVtcGxhdGVVcmw6ICcuL2JsYW5rLmxheW91dC5odG1sJyxcbn0pXG5leHBvcnQgY2xhc3MgQmxhbmtMYXlvdXQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIGNvbnN0cnVjdG9yKCkgeyB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHsgfVxufVxuIiwiPGRpdiBjbGFzcz1cInctZnVsbCBoLWZ1bGxcIj5cbiAgICA8cm91dGVyLW91dGxldD48L3JvdXRlci1vdXRsZXQ+XG48L2Rpdj4iXX0=
@@ -0,0 +1,3 @@
1
+ export * from './master/master.layout';
2
+ export * from './blank/blank.layout';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2hhcmVkL3NyYy9saWIvbGF5b3V0cy9pbmRleC5hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLHNCQUFzQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9tYXN0ZXIvbWFzdGVyLmxheW91dCc7XG5leHBvcnQgKiBmcm9tICcuL2JsYW5rL2JsYW5rLmxheW91dCc7Il19