tin-spa 2.1.0 → 2.1.2

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 (29) hide show
  1. package/esm2020/lib/classes/Classes.mjs +1 -1
  2. package/esm2020/lib/classes/TinCore.mjs +80 -1
  3. package/esm2020/lib/components/date/date.component.mjs +35 -17
  4. package/esm2020/lib/components/form/form.component.mjs +88 -44
  5. package/esm2020/lib/components/money/money.component.mjs +60 -16
  6. package/esm2020/lib/components/number/number.component.mjs +22 -6
  7. package/esm2020/lib/components/roles/roles.component.mjs +3 -3
  8. package/esm2020/lib/components/table/detailsDialog.component.mjs +20 -32
  9. package/esm2020/lib/components/table/table.component.mjs +21 -12
  10. package/esm2020/lib/components/text/text.component.mjs +7 -4
  11. package/esm2020/lib/modules/spa-admin.module.mjs +5 -7
  12. package/esm2020/lib/modules/spa-index.module.mjs +5 -7
  13. package/esm2020/lib/modules/spa-user.module.mjs +5 -7
  14. package/fesm2015/tin-spa.mjs +325 -134
  15. package/fesm2015/tin-spa.mjs.map +1 -1
  16. package/fesm2020/tin-spa.mjs +324 -134
  17. package/fesm2020/tin-spa.mjs.map +1 -1
  18. package/lib/classes/Classes.d.ts +14 -2
  19. package/lib/classes/TinCore.d.ts +6 -0
  20. package/lib/components/date/date.component.d.ts +9 -5
  21. package/lib/components/form/form.component.d.ts +16 -9
  22. package/lib/components/money/money.component.d.ts +15 -7
  23. package/lib/components/number/number.component.d.ts +3 -1
  24. package/lib/components/table/detailsDialog.component.d.ts +0 -2
  25. package/lib/components/text/text.component.d.ts +1 -1
  26. package/lib/modules/spa-admin.module.d.ts +1 -1
  27. package/lib/modules/spa-index.module.d.ts +1 -1
  28. package/lib/modules/spa-user.module.d.ts +1 -1
  29. package/package.json +1 -1
@@ -1,63 +1,107 @@
1
- import { Component, Input } from '@angular/core';
1
+ import { Component, EventEmitter, Input, Output } from '@angular/core';
2
+ import { Core } from '../../classes/TinCore';
2
3
  import * as i0 from "@angular/core";
3
- import * as i1 from "@angular/common";
4
- import * as i2 from "@angular/material/button";
5
- import * as i3 from "../text/text.component";
6
- import * as i4 from "../check/check.component";
7
- import * as i5 from "../date/date.component";
8
- import * as i6 from "../select/select.component";
9
- import * as i7 from "../money/money.component";
10
- import * as i8 from "../number/number.component";
11
- import * as i9 from "../../pipes/camelToWords.pipe";
4
+ import * as i1 from "../../services/message.service";
5
+ import * as i2 from "../../services/data.service";
6
+ import * as i3 from "@angular/common";
7
+ import * as i4 from "@angular/material/button";
8
+ import * as i5 from "../text/text.component";
9
+ import * as i6 from "../check/check.component";
10
+ import * as i7 from "../date/date.component";
11
+ import * as i8 from "../select/select.component";
12
+ import * as i9 from "../money/money.component";
13
+ import * as i10 from "../number/number.component";
14
+ import * as i11 from "../../pipes/camelToWords.pipe";
12
15
  export class FormComponent {
13
- constructor() { }
16
+ constructor(messageService, dataService) {
17
+ this.messageService = messageService;
18
+ this.dataService = dataService;
19
+ this.buttonDisplay = "Submit";
20
+ this.isProcessing = false;
21
+ this.multiColumn = false;
22
+ this.buttonClick = new EventEmitter();
23
+ }
14
24
  ngOnInit() {
15
- if (!this.fields) {
16
- this.fields = this.config.fields;
25
+ if (!this.config.fields) {
26
+ this.messageService.toast("Please Configure Form Fields");
27
+ return;
28
+ }
29
+ if (!this.data) {
30
+ this.messageService.toast("Please Configure Form Data");
31
+ return;
32
+ }
33
+ this.fields = this.config.fields;
34
+ if (this.config.multiColumn) {
35
+ this.multiColumn = this.config.multiColumn;
17
36
  }
18
- if (this.config.mode == "create" && !this.data) {
19
- this.generateObject();
37
+ else {
38
+ this.multiColumn = this.fields.length > 2;
39
+ }
40
+ if (this.config?.button?.display) {
41
+ this.buttonDisplay = this.config.button.display;
20
42
  }
21
43
  }
22
44
  ngOnChanges() {
23
45
  console.log("changed");
24
46
  }
25
- generateObject() {
26
- this.data = {};
27
- this.fields.forEach(field => {
28
- this.data[field.name] = this.getInitialValue(field.type);
29
- });
30
- }
31
- getInitialValue(type) {
32
- switch (type) {
33
- case 'text':
34
- return '';
35
- case 'money':
36
- return 0;
37
- case 'number':
38
- return 0;
39
- case 'date':
40
- return '';
41
- case 'checkbox':
42
- return false;
43
- case 'select':
44
- return null;
45
- default:
46
- return null;
47
+ buttonClicked() {
48
+ console.log("Button Clicked");
49
+ this.buttonClick.emit(this.data);
50
+ console.log(this.data);
51
+ let button = this.config.button;
52
+ if (!button) {
53
+ return;
54
+ }
55
+ //validation
56
+ let resp = Core.validateObject(this.fields, this.data);
57
+ if (resp != '') {
58
+ this.messageService.toast(resp);
59
+ return;
60
+ }
61
+ if (button.confirm) {
62
+ this.messageService.confirm(`${button.confirm.message}`).subscribe((result) => {
63
+ if (result == "yes") {
64
+ this.processCall(button);
65
+ }
66
+ });
67
+ }
68
+ else {
69
+ this.processCall(button);
47
70
  }
48
71
  }
49
- createClicked() {
50
- console.log(this.data);
72
+ processCall(button) {
73
+ if (!button.action)
74
+ return;
75
+ this.isProcessing = true;
76
+ this.dataService.CallApi(button.action, this.data).subscribe((apiResponse) => {
77
+ this.isProcessing = false;
78
+ if (apiResponse.success) {
79
+ if (button.action.successMessage) {
80
+ this.messageService.toast(button.action.successMessage);
81
+ }
82
+ else {
83
+ this.messageService.toast("Submitted");
84
+ }
85
+ if (this.config.reset) {
86
+ Core.resetObject(this.fields, this.data);
87
+ }
88
+ }
89
+ else {
90
+ this.messageService.toast("Error: " + apiResponse.message);
91
+ }
92
+ });
51
93
  }
52
94
  }
53
- FormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: FormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
54
- FormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: FormComponent, selector: "spa-form", inputs: { data: "data", config: "config" }, usesOnChanges: true, ngImport: i0, template: "\n<div class=\"tin-grid\">\n\n <div *ngFor=\"let field of fields\" >\n\n <ng-container [ngSwitch]=\"field.type\">\n\n <spa-text *ngSwitchCase=\"'text'\" [display]=\"field.name | camelToWords\" [(value)]=\"data[field.name]\" [readonly]=\"config.mode =='view'\"></spa-text>\n\n <spa-number *ngSwitchCase=\"'number'\" [display]=\"field.name | camelToWords\" [(value)]=\"data[field.name]\" [readonly]=\"config.mode =='view'\"></spa-number>\n\n <spa-money *ngSwitchCase=\"'money'\" [display]=\"field.name | camelToWords\" [(value)]=\"data[field.name]\" [readonly]=\"config.mode =='view'\"></spa-money>\n\n <spa-check *ngSwitchCase=\"'checkbox'\" [display]=\"field.name | camelToWords\" [(value)]=\"data[field.name]\" [readonly]=\"config.mode =='view'\"></spa-check>\n\n <spa-date *ngSwitchCase=\"'date'\" [display]=\"field.name | camelToWords\" [(value)]=\"data[field.name]\" [readonly]=\"config.mode =='view'\" ></spa-date>\n\n <spa-select *ngSwitchCase=\"'select'\"\n [display]=\"field.name | camelToWords\"\n [options]=\"field.options\" [optionDisplay]=\"field.optionDisplay\" [optionValue]=\"field.optionValue\" [(value)]=\"data[field.name]\" [readonly]=\"config.mode =='view'\" >\n </spa-select>\n\n <spa-text *ngSwitchDefault [display]=\"field.name | camelToWords\" [(value)]=\"data[field.name]\" [readonly]=\"config.mode =='view'\"></spa-text>\n\n </ng-container>\n\n </div>\n\n\n\n\n <div class=\"span-col-center\" *ngIf=\"config.button\">\n <button mat-raised-button color=\"primary\" (click)=\"createClicked()\" cdkFocusInitial>{{config.button.name}}</button>\n </div>\n\n\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i1.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "component", type: i2.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i3.TextComponent, selector: "spa-text", inputs: ["readonly", "hint", "display", "placeholder", "value", "format", "type", "rows", "width", "options", "optionValue", "required", "min", "max", "regex"], outputs: ["valueChange", "leave", "enterPress"] }, { kind: "component", type: i4.CheckComponent, selector: "spa-check", inputs: ["readonly", "display", "value"], outputs: ["valueChange", "click", "check", "uncheck"] }, { kind: "component", type: i5.DateComponent, selector: "spa-date", inputs: ["value", "display", "readonly", "width", "min", "max"], outputs: ["valueChange"] }, { kind: "component", type: i6.SelectComponent, selector: "spa-select", inputs: ["width", "readonly", "readonlyMode", "hint", "placeholder", "multiple", "display", "value", "options", "optionValue", "optionDisplay", "optionDisplayExtra"], outputs: ["valueChange"] }, { kind: "component", type: i7.MoneyComponent, selector: "spa-money", inputs: ["readonly", "display", "value", "placeholder", "width", "hint", "currency"], outputs: ["valueChange", "enterPress", "leave"] }, { kind: "component", type: i8.NumberComponent, selector: "spa-number", inputs: ["readonly", "hint", "display", "placeholder", "value", "width", "required", "min", "max", "step"], outputs: ["valueChange", "leave", "enterPress"] }, { kind: "pipe", type: i9.CamelToWordsPipe, name: "camelToWords" }] });
95
+ FormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: FormComponent, deps: [{ token: i1.MessageService }, { token: i2.DataServiceLib }], target: i0.ɵɵFactoryTarget.Component });
96
+ FormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: FormComponent, selector: "spa-form", inputs: { data: "data", config: "config" }, outputs: { buttonClick: "buttonClick" }, usesOnChanges: true, ngImport: i0, template: "\r\n<div [ngClass]=\"multiColumn ? 'tin-grid' : 'tin-col'\" >\r\n\r\n <div [ngClass]=\"field.span || field.type =='section' ? 'span-col' : ''\" *ngFor=\"let field of fields\">\r\n\r\n <ng-container [ngSwitch]=\"field.type\">\r\n\r\n <div *ngSwitchCase=\"'section'\" class=\"title\">\r\n <label style=\"font-size: larger;\">{{field.name | camelToWords}}</label>\r\n </div>\r\n\r\n <label *ngSwitchCase=\"'blank'\">.</label>\r\n\r\n <spa-text *ngSwitchCase=\"'text'\" [display]=\"field.name | camelToWords\" [options]=\"field.options\" [optionValue]=\"field.optionValue\" [rows]=\"field.rows\" [(value)]=\"data[field.name]\" [required]=\"field.required\" [min]=\"field.min\" [max]=\"field.max\" [readonly]=\"config.mode =='view'\"></spa-text>\r\n\r\n <spa-number *ngSwitchCase=\"'number'\" [display]=\"field.name | camelToWords\" [(value)]=\"data[field.name]\" [required]=\"field.required\" [min]=\"field.min\" [max]=\"field.max\" [readonly]=\"config.mode =='view'\"></spa-number>\r\n\r\n <spa-money *ngSwitchCase=\"'money'\" [display]=\"field.name | camelToWords\" [(value)]=\"data[field.name]\" [required]=\"field.required\" [min]=\"field.min\" [max]=\"field.max\" [readonly]=\"config.mode =='view'\"></spa-money>\r\n\r\n <spa-check *ngSwitchCase=\"'checkbox'\" [display]=\"field.name | camelToWords\" [(value)]=\"data[field.name]\" [readonly]=\"config.mode =='view'\"></spa-check>\r\n\r\n <spa-date *ngSwitchCase=\"'date'\" [display]=\"field.name | camelToWords\" [(value)]=\"data[field.name]\" [min]=\"field?.min\" [max]=\"field?.max\" [readonly]=\"config.mode =='view'\" ></spa-date>\r\n\r\n <spa-select *ngSwitchCase=\"'select'\"\r\n [display]=\"field.name | camelToWords\"\r\n [options]=\"field.options\" [optionDisplay]=\"field.optionDisplay\" [optionValue]=\"field.optionValue\" [(value)]=\"data[field.name]\" [readonly]=\"config.mode =='view'\" >\r\n </spa-select>\r\n\r\n <spa-select *ngSwitchCase=\"'multi-select'\"\r\n [display]=\"field.name | camelToWords\"\r\n [options]=\"field.options\" [optionDisplay]=\"field.optionDisplay\" [optionValue]=\"field.optionValue\" [(value)]=\"data[field.name]\" [readonly]=\"config.mode =='view'\" [multiple]=\"true\">\r\n </spa-select>\r\n\r\n <spa-text *ngSwitchDefault [display]=\"field.name | camelToWords\" [options]=\"field.options\" [optionValue]=\"field.optionValue\" [rows]=\"field.rows\" [(value)]=\"data[field.name]\" [required]=\"field.required\" [min]=\"field.min\" [max]=\"field.max\" [readonly]=\"config.mode =='view'\"></spa-text>\r\n\r\n </ng-container>\r\n\r\n </div>\r\n\r\n\r\n <div class=\"span-col-center\" *ngIf=\"config.button\">\r\n <button mat-raised-button color=\"primary\" [disabled]=\"isProcessing\" (click)=\"buttonClicked()\" cdkFocusInitial>{{buttonDisplay}}</button>\r\n </div>\r\n\r\n\r\n</div>\r\n", styles: [".title{margin-top:1em;font-size:larger;font-weight:300}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i3.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i3.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "component", type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i5.TextComponent, selector: "spa-text", inputs: ["readonly", "hint", "display", "placeholder", "value", "format", "type", "rows", "width", "options", "optionValue", "required", "min", "max", "regex"], outputs: ["valueChange", "leave", "enterPress"] }, { kind: "component", type: i6.CheckComponent, selector: "spa-check", inputs: ["readonly", "display", "value"], outputs: ["valueChange", "click", "check", "uncheck"] }, { kind: "component", type: i7.DateComponent, selector: "spa-date", inputs: ["required", "min", "max", "readonly", "hint", "value", "display", "placeholder", "width"], outputs: ["valueChange"] }, { kind: "component", type: i8.SelectComponent, selector: "spa-select", inputs: ["width", "readonly", "readonlyMode", "hint", "placeholder", "multiple", "display", "value", "options", "optionValue", "optionDisplay", "optionDisplayExtra"], outputs: ["valueChange"] }, { kind: "component", type: i9.MoneyComponent, selector: "spa-money", inputs: ["readonly", "hint", "display", "placeholder", "value", "width", "currency", "required", "min", "max"], outputs: ["valueChange", "leave", "enterPress"] }, { kind: "component", type: i10.NumberComponent, selector: "spa-number", inputs: ["readonly", "hint", "display", "placeholder", "value", "width", "required", "min", "max", "step"], outputs: ["valueChange", "leave", "enterPress"] }, { kind: "pipe", type: i11.CamelToWordsPipe, name: "camelToWords" }] });
55
97
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: FormComponent, decorators: [{
56
98
  type: Component,
57
- args: [{ selector: 'spa-form', template: "\n<div class=\"tin-grid\">\n\n <div *ngFor=\"let field of fields\" >\n\n <ng-container [ngSwitch]=\"field.type\">\n\n <spa-text *ngSwitchCase=\"'text'\" [display]=\"field.name | camelToWords\" [(value)]=\"data[field.name]\" [readonly]=\"config.mode =='view'\"></spa-text>\n\n <spa-number *ngSwitchCase=\"'number'\" [display]=\"field.name | camelToWords\" [(value)]=\"data[field.name]\" [readonly]=\"config.mode =='view'\"></spa-number>\n\n <spa-money *ngSwitchCase=\"'money'\" [display]=\"field.name | camelToWords\" [(value)]=\"data[field.name]\" [readonly]=\"config.mode =='view'\"></spa-money>\n\n <spa-check *ngSwitchCase=\"'checkbox'\" [display]=\"field.name | camelToWords\" [(value)]=\"data[field.name]\" [readonly]=\"config.mode =='view'\"></spa-check>\n\n <spa-date *ngSwitchCase=\"'date'\" [display]=\"field.name | camelToWords\" [(value)]=\"data[field.name]\" [readonly]=\"config.mode =='view'\" ></spa-date>\n\n <spa-select *ngSwitchCase=\"'select'\"\n [display]=\"field.name | camelToWords\"\n [options]=\"field.options\" [optionDisplay]=\"field.optionDisplay\" [optionValue]=\"field.optionValue\" [(value)]=\"data[field.name]\" [readonly]=\"config.mode =='view'\" >\n </spa-select>\n\n <spa-text *ngSwitchDefault [display]=\"field.name | camelToWords\" [(value)]=\"data[field.name]\" [readonly]=\"config.mode =='view'\"></spa-text>\n\n </ng-container>\n\n </div>\n\n\n\n\n <div class=\"span-col-center\" *ngIf=\"config.button\">\n <button mat-raised-button color=\"primary\" (click)=\"createClicked()\" cdkFocusInitial>{{config.button.name}}</button>\n </div>\n\n\n</div>\n" }]
58
- }], ctorParameters: function () { return []; }, propDecorators: { data: [{
99
+ args: [{ selector: 'spa-form', template: "\r\n<div [ngClass]=\"multiColumn ? 'tin-grid' : 'tin-col'\" >\r\n\r\n <div [ngClass]=\"field.span || field.type =='section' ? 'span-col' : ''\" *ngFor=\"let field of fields\">\r\n\r\n <ng-container [ngSwitch]=\"field.type\">\r\n\r\n <div *ngSwitchCase=\"'section'\" class=\"title\">\r\n <label style=\"font-size: larger;\">{{field.name | camelToWords}}</label>\r\n </div>\r\n\r\n <label *ngSwitchCase=\"'blank'\">.</label>\r\n\r\n <spa-text *ngSwitchCase=\"'text'\" [display]=\"field.name | camelToWords\" [options]=\"field.options\" [optionValue]=\"field.optionValue\" [rows]=\"field.rows\" [(value)]=\"data[field.name]\" [required]=\"field.required\" [min]=\"field.min\" [max]=\"field.max\" [readonly]=\"config.mode =='view'\"></spa-text>\r\n\r\n <spa-number *ngSwitchCase=\"'number'\" [display]=\"field.name | camelToWords\" [(value)]=\"data[field.name]\" [required]=\"field.required\" [min]=\"field.min\" [max]=\"field.max\" [readonly]=\"config.mode =='view'\"></spa-number>\r\n\r\n <spa-money *ngSwitchCase=\"'money'\" [display]=\"field.name | camelToWords\" [(value)]=\"data[field.name]\" [required]=\"field.required\" [min]=\"field.min\" [max]=\"field.max\" [readonly]=\"config.mode =='view'\"></spa-money>\r\n\r\n <spa-check *ngSwitchCase=\"'checkbox'\" [display]=\"field.name | camelToWords\" [(value)]=\"data[field.name]\" [readonly]=\"config.mode =='view'\"></spa-check>\r\n\r\n <spa-date *ngSwitchCase=\"'date'\" [display]=\"field.name | camelToWords\" [(value)]=\"data[field.name]\" [min]=\"field?.min\" [max]=\"field?.max\" [readonly]=\"config.mode =='view'\" ></spa-date>\r\n\r\n <spa-select *ngSwitchCase=\"'select'\"\r\n [display]=\"field.name | camelToWords\"\r\n [options]=\"field.options\" [optionDisplay]=\"field.optionDisplay\" [optionValue]=\"field.optionValue\" [(value)]=\"data[field.name]\" [readonly]=\"config.mode =='view'\" >\r\n </spa-select>\r\n\r\n <spa-select *ngSwitchCase=\"'multi-select'\"\r\n [display]=\"field.name | camelToWords\"\r\n [options]=\"field.options\" [optionDisplay]=\"field.optionDisplay\" [optionValue]=\"field.optionValue\" [(value)]=\"data[field.name]\" [readonly]=\"config.mode =='view'\" [multiple]=\"true\">\r\n </spa-select>\r\n\r\n <spa-text *ngSwitchDefault [display]=\"field.name | camelToWords\" [options]=\"field.options\" [optionValue]=\"field.optionValue\" [rows]=\"field.rows\" [(value)]=\"data[field.name]\" [required]=\"field.required\" [min]=\"field.min\" [max]=\"field.max\" [readonly]=\"config.mode =='view'\"></spa-text>\r\n\r\n </ng-container>\r\n\r\n </div>\r\n\r\n\r\n <div class=\"span-col-center\" *ngIf=\"config.button\">\r\n <button mat-raised-button color=\"primary\" [disabled]=\"isProcessing\" (click)=\"buttonClicked()\" cdkFocusInitial>{{buttonDisplay}}</button>\r\n </div>\r\n\r\n\r\n</div>\r\n", styles: [".title{margin-top:1em;font-size:larger;font-weight:300}\n"] }]
100
+ }], ctorParameters: function () { return [{ type: i1.MessageService }, { type: i2.DataServiceLib }]; }, propDecorators: { data: [{
59
101
  type: Input
60
102
  }], config: [{
61
103
  type: Input
104
+ }], buttonClick: [{
105
+ type: Output
62
106
  }] } });
63
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90aW4tc3BhL3NyYy9saWIvY29tcG9uZW50cy9mb3JtL2Zvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGluLXNwYS9zcmMvbGliL2NvbXBvbmVudHMvZm9ybS9mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7OztBQVF6RCxNQUFNLE9BQU8sYUFBYTtJQU14QixnQkFBZ0IsQ0FBQztJQUVqQixRQUFRO1FBQ04sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUM7WUFDZixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO1NBQ2xDO1FBRUQsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFDO1lBQzdDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUN2QjtJQUdILENBQUM7SUFFRCxXQUFXO1FBQ1QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQTtJQUd4QixDQUFDO0lBRUQsY0FBYztRQUVaLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ2YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0QsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sZUFBZSxDQUFDLElBQW1CO1FBQ3pDLFFBQVEsSUFBSSxFQUFFO1lBQ1osS0FBSyxNQUFNO2dCQUNULE9BQU8sRUFBRSxDQUFDO1lBQ1osS0FBSyxPQUFPO2dCQUNWLE9BQU8sQ0FBQyxDQUFDO1lBQ1gsS0FBSyxRQUFRO2dCQUNYLE9BQU8sQ0FBQyxDQUFDO1lBQ1gsS0FBSyxNQUFNO2dCQUNULE9BQU8sRUFBRSxDQUFDO1lBQ1osS0FBSyxVQUFVO2dCQUNiLE9BQU8sS0FBSyxDQUFDO1lBQ2YsS0FBSyxRQUFRO2dCQUNYLE9BQU8sSUFBSSxDQUFDO1lBQ2Q7Z0JBQ0UsT0FBTyxJQUFJLENBQUM7U0FDZjtJQUNILENBQUM7SUFFRCxhQUFhO1FBRVgsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7SUFFeEIsQ0FBQzs7MEdBekRVLGFBQWE7OEZBQWIsYUFBYSxpSENSMUIseW5EQXFDQTsyRkQ3QmEsYUFBYTtrQkFMekIsU0FBUzsrQkFDRSxVQUFVOzBFQU9YLElBQUk7c0JBQVosS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Db25maWcsIEZpZWxkIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9DbGFzc2VzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc3BhLWZvcm0nLFxuICB0ZW1wbGF0ZVVybDogJy4vZm9ybS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Zvcm0uY29tcG9uZW50LmNzcyddXG59KVxuZXhwb3J0IGNsYXNzIEZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIGZpZWxkczogRmllbGRbXTtcbiAgQElucHV0KCkgZGF0YTogYW55O1xuICBASW5wdXQoKSBjb25maWc6IEZvcm1Db25maWc7XG5cbiAgY29uc3RydWN0b3IoKSB7IH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAoIXRoaXMuZmllbGRzKXtcbiAgICAgIHRoaXMuZmllbGRzID0gdGhpcy5jb25maWcuZmllbGRzO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbmZpZy5tb2RlID09IFwiY3JlYXRlXCIgJiYgIXRoaXMuZGF0YSl7XG4gICAgICB0aGlzLmdlbmVyYXRlT2JqZWN0KCk7XG4gICAgfVxuXG5cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKCkge1xuICAgIGNvbnNvbGUubG9nKFwiY2hhbmdlZFwiKVxuXG5cbiAgfVxuXG4gIGdlbmVyYXRlT2JqZWN0KCl7XG5cbiAgICB0aGlzLmRhdGEgPSB7fTtcbiAgICB0aGlzLmZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgIHRoaXMuZGF0YVtmaWVsZC5uYW1lXSA9IHRoaXMuZ2V0SW5pdGlhbFZhbHVlKGZpZWxkLnR5cGUpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRJbml0aWFsVmFsdWUodHlwZTogRmllbGRbJ3R5cGUnXSk6IGFueSB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICd0ZXh0JzpcbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgY2FzZSAnbW9uZXknOlxuICAgICAgICByZXR1cm4gMDtcbiAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIGNhc2UgJ2NoZWNrYm94JzpcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgY2FzZSAnc2VsZWN0JzpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBjcmVhdGVDbGlja2VkKCl7XG5cbiAgICBjb25zb2xlLmxvZyh0aGlzLmRhdGEpXG5cbiAgfVxuXG59XG5cblxuIiwiXG48ZGl2IGNsYXNzPVwidGluLWdyaWRcIj5cblxuICA8ZGl2ICpuZ0Zvcj1cImxldCBmaWVsZCBvZiBmaWVsZHNcIiA+XG5cbiAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJmaWVsZC50eXBlXCI+XG5cbiAgICAgIDxzcGEtdGV4dCAqbmdTd2l0Y2hDYXNlPVwiJ3RleHQnXCIgW2Rpc3BsYXldPVwiZmllbGQubmFtZSB8IGNhbWVsVG9Xb3Jkc1wiIFsodmFsdWUpXT1cImRhdGFbZmllbGQubmFtZV1cIiBbcmVhZG9ubHldPVwiY29uZmlnLm1vZGUgPT0ndmlldydcIj48L3NwYS10ZXh0PlxuXG4gICAgICA8c3BhLW51bWJlciAqbmdTd2l0Y2hDYXNlPVwiJ251bWJlcidcIiBbZGlzcGxheV09XCJmaWVsZC5uYW1lIHwgY2FtZWxUb1dvcmRzXCIgWyh2YWx1ZSldPVwiZGF0YVtmaWVsZC5uYW1lXVwiIFtyZWFkb25seV09XCJjb25maWcubW9kZSA9PSd2aWV3J1wiPjwvc3BhLW51bWJlcj5cblxuICAgICAgPHNwYS1tb25leSAqbmdTd2l0Y2hDYXNlPVwiJ21vbmV5J1wiIFtkaXNwbGF5XT1cImZpZWxkLm5hbWUgfCBjYW1lbFRvV29yZHNcIiBbKHZhbHVlKV09XCJkYXRhW2ZpZWxkLm5hbWVdXCIgW3JlYWRvbmx5XT1cImNvbmZpZy5tb2RlID09J3ZpZXcnXCI+PC9zcGEtbW9uZXk+XG5cbiAgICAgIDxzcGEtY2hlY2sgKm5nU3dpdGNoQ2FzZT1cIidjaGVja2JveCdcIiBbZGlzcGxheV09XCJmaWVsZC5uYW1lIHwgY2FtZWxUb1dvcmRzXCIgWyh2YWx1ZSldPVwiZGF0YVtmaWVsZC5uYW1lXVwiIFtyZWFkb25seV09XCJjb25maWcubW9kZSA9PSd2aWV3J1wiPjwvc3BhLWNoZWNrPlxuXG4gICAgICA8c3BhLWRhdGUgKm5nU3dpdGNoQ2FzZT1cIidkYXRlJ1wiIFtkaXNwbGF5XT1cImZpZWxkLm5hbWUgfCBjYW1lbFRvV29yZHNcIiBbKHZhbHVlKV09XCJkYXRhW2ZpZWxkLm5hbWVdXCIgW3JlYWRvbmx5XT1cImNvbmZpZy5tb2RlID09J3ZpZXcnXCIgPjwvc3BhLWRhdGU+XG5cbiAgICAgIDxzcGEtc2VsZWN0ICpuZ1N3aXRjaENhc2U9XCInc2VsZWN0J1wiXG4gICAgICAgIFtkaXNwbGF5XT1cImZpZWxkLm5hbWUgfCBjYW1lbFRvV29yZHNcIlxuICAgICAgICBbb3B0aW9uc109XCJmaWVsZC5vcHRpb25zXCIgW29wdGlvbkRpc3BsYXldPVwiZmllbGQub3B0aW9uRGlzcGxheVwiIFtvcHRpb25WYWx1ZV09XCJmaWVsZC5vcHRpb25WYWx1ZVwiIFsodmFsdWUpXT1cImRhdGFbZmllbGQubmFtZV1cIiBbcmVhZG9ubHldPVwiY29uZmlnLm1vZGUgPT0ndmlldydcIiA+XG4gICAgICA8L3NwYS1zZWxlY3Q+XG5cbiAgICAgIDxzcGEtdGV4dCAqbmdTd2l0Y2hEZWZhdWx0IFtkaXNwbGF5XT1cImZpZWxkLm5hbWUgfCBjYW1lbFRvV29yZHNcIiBbKHZhbHVlKV09XCJkYXRhW2ZpZWxkLm5hbWVdXCIgW3JlYWRvbmx5XT1cImNvbmZpZy5tb2RlID09J3ZpZXcnXCI+PC9zcGEtdGV4dD5cblxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gIDwvZGl2PlxuXG5cblxuXG4gIDxkaXYgY2xhc3M9XCJzcGFuLWNvbC1jZW50ZXJcIiAqbmdJZj1cImNvbmZpZy5idXR0b25cIj5cbiAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCJjcmVhdGVDbGlja2VkKClcIiAgY2RrRm9jdXNJbml0aWFsPnt7Y29uZmlnLmJ1dHRvbi5uYW1lfX08L2J1dHRvbj5cbiAgPC9kaXY+XG5cblxuPC9kaXY+XG4iXX0=
107
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90aW4tc3BhL3NyYy9saWIvY29tcG9uZW50cy9mb3JtL2Zvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGluLXNwYS9zcmMvbGliL2NvbXBvbmVudHMvZm9ybS9mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFL0UsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7Ozs7Ozs7Ozs7O0FBUzdDLE1BQU0sT0FBTyxhQUFhO0lBRXhCLFlBQW9CLGNBQThCLEVBQVUsV0FBMkI7UUFBbkUsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQVUsZ0JBQVcsR0FBWCxXQUFXLENBQWdCO1FBa0N2RixrQkFBYSxHQUFHLFFBQVEsQ0FBQztRQUN6QixpQkFBWSxHQUFhLEtBQUssQ0FBQztRQUMvQixnQkFBVyxHQUFhLEtBQUssQ0FBQztRQUlwQixnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7SUF4Q2dELENBQUM7SUFFNUYsUUFBUTtRQUVOLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBQztZQUN0QixJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyw4QkFBOEIsQ0FBQyxDQUFBO1lBQ3pELE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ2QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsNEJBQTRCLENBQUMsQ0FBQTtZQUN2RCxPQUFPO1NBQ1I7UUFFRCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBR2pD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LENBQUMsQ0FBQztJQUNMLENBQUM7OzBHQTdHVSxhQUFhOzhGQUFiLGFBQWEsMEpDWDFCLDYwRkE4Q0E7MkZEbkNhLGFBQWE7a0JBTHpCLFNBQVM7K0JBQ0UsVUFBVTtrSUE0Q1gsSUFBSTtzQkFBWixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDSSxXQUFXO3NCQUFwQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUNvbmZpZywgRmllbGQsIEJ1dHRvbiB9IGZyb20gJy4uLy4uL2NsYXNzZXMvQ2xhc3Nlcyc7XG5pbXBvcnQgeyBDb3JlIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9UaW5Db3JlJztcbmltcG9ydCB7IE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbWVzc2FnZS5zZXJ2aWNlJztcbmltcG9ydCB7IERhdGFTZXJ2aWNlTGliIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZGF0YS5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc3BhLWZvcm0nLFxuICB0ZW1wbGF0ZVVybDogJy4vZm9ybS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Zvcm0uY29tcG9uZW50LmNzcyddXG59KVxuZXhwb3J0IGNsYXNzIEZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLCBwcml2YXRlIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZUxpYikgeyB9XG5cbiAgbmdPbkluaXQoKSB7XG5cbiAgICBpZiAoIXRoaXMuY29uZmlnLmZpZWxkcyl7XG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnRvYXN0KFwiUGxlYXNlIENvbmZpZ3VyZSBGb3JtIEZpZWxkc1wiKVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5kYXRhKSB7XG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnRvYXN0KFwiUGxlYXNlIENvbmZpZ3VyZSBGb3JtIERhdGFcIilcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmZpZWxkcyA9IHRoaXMuY29uZmlnLmZpZWxkcztcblxuXG4gICAgaWYgKHRoaXMuY29uZmlnLm11bHRpQ29sdW1uKXtcbiAgICAgIHRoaXMubXVsdGlDb2x1bW4gPSB0aGlzLmNvbmZpZy5tdWx0aUNvbHVtblxuICAgIH1lbHNle1xuICAgICAgdGhpcy5tdWx0aUNvbHVtbiA9IHRoaXMuZmllbGRzLmxlbmd0aCA+IDJcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb25maWc/LmJ1dHRvbj8uZGlzcGxheSl7XG4gICAgICB0aGlzLmJ1dHRvbkRpc3BsYXkgPSB0aGlzLmNvbmZpZy5idXR0b24uZGlzcGxheTtcbiAgICB9XG5cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKCkge1xuICAgIGNvbnNvbGUubG9nKFwiY2hhbmdlZFwiKVxuICB9XG5cbiAgZmllbGRzOiBGaWVsZFtdO1xuICBidXR0b25EaXNwbGF5ID0gXCJTdWJtaXRcIjtcbiAgaXNQcm9jZXNzaW5nIDogYm9vbGVhbiA9IGZhbHNlO1xuICBtdWx0aUNvbHVtbiA6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKSBkYXRhOiBhbnk7XG4gIEBJbnB1dCgpIGNvbmZpZzogRm9ybUNvbmZpZztcbiAgQE91dHB1dCgpIGJ1dHRvbkNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIGJ1dHRvbkNsaWNrZWQoKXtcblxuICAgIGNvbnNvbGUubG9nKFwiQnV0dG9uIENsaWNrZWRcIilcbiAgICB0aGlzLmJ1dHRvbkNsaWNrLmVtaXQodGhpcy5kYXRhKTtcbiAgICBjb25zb2xlLmxvZyh0aGlzLmRhdGEpXG5cblxuXG5cbiAgICBsZXQgYnV0dG9uID0gdGhpcy5jb25maWcuYnV0dG9uO1xuXG4gICAgaWYgKCFidXR0b24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvL3ZhbGlkYXRpb25cbiAgICBsZXQgcmVzcCA9IENvcmUudmFsaWRhdGVPYmplY3QodGhpcy5maWVsZHMsdGhpcy5kYXRhKTtcbiAgICBpZiAocmVzcCAhPSAnJyl7XG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnRvYXN0KHJlc3ApXG4gICAgICByZXR1cm47XG4gICAgfVxuXG5cbiAgICBpZiAoYnV0dG9uLmNvbmZpcm0pe1xuXG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmNvbmZpcm0oYCR7YnV0dG9uLmNvbmZpcm0ubWVzc2FnZX1gKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgICBpZiAocmVzdWx0ID09IFwieWVzXCIpIHtcbiAgICAgICAgICB0aGlzLnByb2Nlc3NDYWxsKGJ1dHRvbilcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICB9ZWxzZXtcbiAgICAgIHRoaXMucHJvY2Vzc0NhbGwoYnV0dG9uKVxuICAgIH1cblxuXG5cblxuICB9XG5cbiAgcHJvY2Vzc0NhbGwoYnV0dG9uOiBCdXR0b24pe1xuXG4gICAgaWYgKCFidXR0b24uYWN0aW9uKSByZXR1cm5cblxuICAgIHRoaXMuaXNQcm9jZXNzaW5nID0gdHJ1ZVxuICAgIHRoaXMuZGF0YVNlcnZpY2UuQ2FsbEFwaShidXR0b24uYWN0aW9uLCB0aGlzLmRhdGEpLnN1YnNjcmliZSgoYXBpUmVzcG9uc2UpID0+IHtcbiAgICAgIHRoaXMuaXNQcm9jZXNzaW5nID0gZmFsc2VcblxuICAgICAgaWYgKGFwaVJlc3BvbnNlLnN1Y2Nlc3MpIHtcblxuICAgICAgICBpZiAoYnV0dG9uLmFjdGlvbi5zdWNjZXNzTWVzc2FnZSkge1xuICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UudG9hc3QoYnV0dG9uLmFjdGlvbi5zdWNjZXNzTWVzc2FnZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS50b2FzdChcIlN1Ym1pdHRlZFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmNvbmZpZy5yZXNldCkge1xuICAgICAgICAgIENvcmUucmVzZXRPYmplY3QodGhpcy5maWVsZHMsIHRoaXMuZGF0YSlcbiAgICAgICAgfVxuXG5cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UudG9hc3QoXCJFcnJvcjogXCIgKyBhcGlSZXNwb25zZS5tZXNzYWdlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG59XG5cblxuIiwiXHJcbjxkaXYgW25nQ2xhc3NdPVwibXVsdGlDb2x1bW4gPyAndGluLWdyaWQnIDogJ3Rpbi1jb2wnXCIgPlxyXG5cclxuICA8ZGl2IFtuZ0NsYXNzXT1cImZpZWxkLnNwYW4gfHwgZmllbGQudHlwZSA9PSdzZWN0aW9uJyA/ICdzcGFuLWNvbCcgOiAnJ1wiICpuZ0Zvcj1cImxldCBmaWVsZCBvZiBmaWVsZHNcIj5cclxuXHJcbiAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJmaWVsZC50eXBlXCI+XHJcblxyXG4gICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInc2VjdGlvbidcIiBjbGFzcz1cInRpdGxlXCI+XHJcbiAgICAgICAgPGxhYmVsIHN0eWxlPVwiZm9udC1zaXplOiBsYXJnZXI7XCI+e3tmaWVsZC5uYW1lIHwgY2FtZWxUb1dvcmRzfX08L2xhYmVsPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxsYWJlbCAqbmdTd2l0Y2hDYXNlPVwiJ2JsYW5rJ1wiPi48L2xhYmVsPlxyXG5cclxuICAgICAgPHNwYS10ZXh0ICAqbmdTd2l0Y2hDYXNlPVwiJ3RleHQnXCIgW2Rpc3BsYXldPVwiZmllbGQubmFtZSB8IGNhbWVsVG9Xb3Jkc1wiIFtvcHRpb25zXT1cImZpZWxkLm9wdGlvbnNcIiBbb3B0aW9uVmFsdWVdPVwiZmllbGQub3B0aW9uVmFsdWVcIiBbcm93c109XCJmaWVsZC5yb3dzXCIgWyh2YWx1ZSldPVwiZGF0YVtmaWVsZC5uYW1lXVwiIFtyZXF1aXJlZF09XCJmaWVsZC5yZXF1aXJlZFwiIFttaW5dPVwiZmllbGQubWluXCIgW21heF09XCJmaWVsZC5tYXhcIiBbcmVhZG9ubHldPVwiY29uZmlnLm1vZGUgPT0ndmlldydcIj48L3NwYS10ZXh0PlxyXG5cclxuICAgICAgPHNwYS1udW1iZXIgKm5nU3dpdGNoQ2FzZT1cIidudW1iZXInXCIgW2Rpc3BsYXldPVwiZmllbGQubmFtZSB8IGNhbWVsVG9Xb3Jkc1wiIFsodmFsdWUpXT1cImRhdGFbZmllbGQubmFtZV1cIiBbcmVxdWlyZWRdPVwiZmllbGQucmVxdWlyZWRcIiBbbWluXT1cImZpZWxkLm1pblwiIFttYXhdPVwiZmllbGQubWF4XCIgW3JlYWRvbmx5XT1cImNvbmZpZy5tb2RlID09J3ZpZXcnXCI+PC9zcGEtbnVtYmVyPlxyXG5cclxuICAgICAgPHNwYS1tb25leSAqbmdTd2l0Y2hDYXNlPVwiJ21vbmV5J1wiIFtkaXNwbGF5XT1cImZpZWxkLm5hbWUgfCBjYW1lbFRvV29yZHNcIiBbKHZhbHVlKV09XCJkYXRhW2ZpZWxkLm5hbWVdXCIgW3JlcXVpcmVkXT1cImZpZWxkLnJlcXVpcmVkXCIgW21pbl09XCJmaWVsZC5taW5cIiBbbWF4XT1cImZpZWxkLm1heFwiIFtyZWFkb25seV09XCJjb25maWcubW9kZSA9PSd2aWV3J1wiPjwvc3BhLW1vbmV5PlxyXG5cclxuICAgICAgPHNwYS1jaGVjayAqbmdTd2l0Y2hDYXNlPVwiJ2NoZWNrYm94J1wiIFtkaXNwbGF5XT1cImZpZWxkLm5hbWUgfCBjYW1lbFRvV29yZHNcIiBbKHZhbHVlKV09XCJkYXRhW2ZpZWxkLm5hbWVdXCIgW3JlYWRvbmx5XT1cImNvbmZpZy5tb2RlID09J3ZpZXcnXCI+PC9zcGEtY2hlY2s+XHJcblxyXG4gICAgICA8c3BhLWRhdGUgKm5nU3dpdGNoQ2FzZT1cIidkYXRlJ1wiIFtkaXNwbGF5XT1cImZpZWxkLm5hbWUgfCBjYW1lbFRvV29yZHNcIiBbKHZhbHVlKV09XCJkYXRhW2ZpZWxkLm5hbWVdXCIgW21pbl09XCJmaWVsZD8ubWluXCIgW21heF09XCJmaWVsZD8ubWF4XCIgW3JlYWRvbmx5XT1cImNvbmZpZy5tb2RlID09J3ZpZXcnXCIgPjwvc3BhLWRhdGU+XHJcblxyXG4gICAgICA8c3BhLXNlbGVjdCAqbmdTd2l0Y2hDYXNlPVwiJ3NlbGVjdCdcIlxyXG4gICAgICAgIFtkaXNwbGF5XT1cImZpZWxkLm5hbWUgfCBjYW1lbFRvV29yZHNcIlxyXG4gICAgICAgIFtvcHRpb25zXT1cImZpZWxkLm9wdGlvbnNcIiBbb3B0aW9uRGlzcGxheV09XCJmaWVsZC5vcHRpb25EaXNwbGF5XCIgW29wdGlvblZhbHVlXT1cImZpZWxkLm9wdGlvblZhbHVlXCIgWyh2YWx1ZSldPVwiZGF0YVtmaWVsZC5uYW1lXVwiIFtyZWFkb25seV09XCJjb25maWcubW9kZSA9PSd2aWV3J1wiID5cclxuICAgICAgPC9zcGEtc2VsZWN0PlxyXG5cclxuICAgICAgPHNwYS1zZWxlY3QgKm5nU3dpdGNoQ2FzZT1cIidtdWx0aS1zZWxlY3QnXCJcclxuICAgICAgW2Rpc3BsYXldPVwiZmllbGQubmFtZSB8IGNhbWVsVG9Xb3Jkc1wiXHJcbiAgICAgIFtvcHRpb25zXT1cImZpZWxkLm9wdGlvbnNcIiBbb3B0aW9uRGlzcGxheV09XCJmaWVsZC5vcHRpb25EaXNwbGF5XCIgW29wdGlvblZhbHVlXT1cImZpZWxkLm9wdGlvblZhbHVlXCIgWyh2YWx1ZSldPVwiZGF0YVtmaWVsZC5uYW1lXVwiIFtyZWFkb25seV09XCJjb25maWcubW9kZSA9PSd2aWV3J1wiIFttdWx0aXBsZV09XCJ0cnVlXCI+XHJcbiAgICAgIDwvc3BhLXNlbGVjdD5cclxuXHJcbiAgICAgIDxzcGEtdGV4dCAqbmdTd2l0Y2hEZWZhdWx0IFtkaXNwbGF5XT1cImZpZWxkLm5hbWUgfCBjYW1lbFRvV29yZHNcIiBbb3B0aW9uc109XCJmaWVsZC5vcHRpb25zXCIgW29wdGlvblZhbHVlXT1cImZpZWxkLm9wdGlvblZhbHVlXCIgW3Jvd3NdPVwiZmllbGQucm93c1wiIFsodmFsdWUpXT1cImRhdGFbZmllbGQubmFtZV1cIiBbcmVxdWlyZWRdPVwiZmllbGQucmVxdWlyZWRcIiBbbWluXT1cImZpZWxkLm1pblwiIFttYXhdPVwiZmllbGQubWF4XCIgW3JlYWRvbmx5XT1cImNvbmZpZy5tb2RlID09J3ZpZXcnXCI+PC9zcGEtdGV4dD5cclxuXHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgPC9kaXY+XHJcblxyXG5cclxuICA8ZGl2IGNsYXNzPVwic3Bhbi1jb2wtY2VudGVyXCIgKm5nSWY9XCJjb25maWcuYnV0dG9uXCI+XHJcbiAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIFtkaXNhYmxlZF09XCJpc1Byb2Nlc3NpbmdcIiAoY2xpY2spPVwiYnV0dG9uQ2xpY2tlZCgpXCIgIGNka0ZvY3VzSW5pdGlhbD57e2J1dHRvbkRpc3BsYXl9fTwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG5cclxuXHJcbjwvZGl2PlxyXG4iXX0=
@@ -1,4 +1,5 @@
1
1
  import { Component, EventEmitter, Input, Output } from '@angular/core';
2
+ import { FormControl, Validators } from '@angular/forms';
2
3
  import * as i0 from "@angular/core";
3
4
  import * as i1 from "@angular/common";
4
5
  import * as i2 from "@angular/forms";
@@ -8,15 +9,21 @@ import * as i5 from "./currency-input-mask.directive";
8
9
  export class MoneyComponent {
9
10
  constructor() {
10
11
  this.readonly = false;
12
+ this.hint = "";
11
13
  this.display = "";
12
- this.value = "";
13
14
  this.placeholder = "";
14
- this.valueChange = new EventEmitter();
15
- this.enterPress = new EventEmitter();
16
- this.leave = new EventEmitter();
15
+ this.value = "";
17
16
  this.width = "100%";
18
- this.hint = "";
19
17
  this.currency = "";
18
+ this.valueChange = new EventEmitter();
19
+ this.leave = new EventEmitter();
20
+ this.enterPress = new EventEmitter();
21
+ //validation input
22
+ this.required = true;
23
+ this.min = 0;
24
+ this.max = 9000000000000000; //Math.max 9000000000000000
25
+ //validation
26
+ this.control = new FormControl(this.value, [Validators.required, Validators.min(this.min), Validators.max(this.max)]);
20
27
  }
21
28
  ngOnInit() {
22
29
  if (this.placeholder == "") {
@@ -25,40 +32,77 @@ export class MoneyComponent {
25
32
  }
26
33
  ngOnChanges() {
27
34
  }
35
+ ngAfterViewInit() {
36
+ this.initControl(this.control);
37
+ }
38
+ initControl(control) {
39
+ if (this.readonly) {
40
+ control.setValidators(null);
41
+ control.updateValueAndValidity();
42
+ }
43
+ if (!this.required && !this.readonly) {
44
+ control.setValidators([Validators.min(this.min), Validators.max(this.max)]);
45
+ this.control.updateValueAndValidity();
46
+ }
47
+ }
28
48
  changed(x) {
29
49
  this.valueChange.emit(x);
30
50
  }
51
+ leaved() {
52
+ this.leave.emit();
53
+ }
31
54
  enterPressed() {
32
55
  this.enterPress.emit();
33
56
  }
34
- leaved() {
35
- this.leave.emit();
57
+ validate(control) {
58
+ if (this.required && control.hasError('required')) {
59
+ return `Required`;
60
+ }
61
+ if (parseFloat(this.value) < this.min) {
62
+ return `Minimun value is ${this.min}`;
63
+ }
64
+ if (parseFloat(this.value) > this.max) {
65
+ return `Maximum value is ${this.max}`;
66
+ }
67
+ if (control.hasError('min')) {
68
+ return `Minimun value is ${this.min}`;
69
+ }
70
+ if (control.hasError('max')) {
71
+ return `Maximum value is ${this.max}`;
72
+ }
73
+ return "";
36
74
  }
37
75
  }
38
76
  MoneyComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: MoneyComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
39
- MoneyComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: MoneyComponent, selector: "spa-money", inputs: { readonly: "readonly", display: "display", value: "value", placeholder: "placeholder", width: "width", hint: "hint", currency: "currency" }, outputs: { valueChange: "valueChange", enterPress: "enterPress", leave: "leave" }, usesOnChanges: true, ngImport: i0, template: "\r\n\r\n<mat-form-field [hintLabel]=\"hint\" [ngStyle]=\"{'width':width}\" hideRequiredMarker=\"true\" style=\"margin-right: 5px;\">\r\n <mat-label>{{display}}</mat-label>\r\n <input matInput appCurrencyInputMask autocomplete=\"off\" style=\"text-align: right;\"\r\n\r\n [ngModel]=\"value\" (ngModelChange)=\"changed($event)\" (keyup.enter)=\"enterPressed()\" (blur)=\"leaved()\" [placeholder]=\"placeholder\" [readonly]=\"readonly\" />\r\n <span *ngIf=\"currency!=''\" matPrefix>{{currency}}&nbsp;</span>\r\n</mat-form-field>\r\n\r\n", styles: ["input.example-right-align{-moz-appearance:textfield}.example-right-align{text-align:right}input.example-right-align::-webkit-outer-spin-button,input.example-right-align::-webkit-inner-spin-button{display:none}.curr{background-color:red}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i3.MatPrefix, selector: "[matPrefix]" }, { kind: "directive", type: i4.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "directive", type: i5.CurrencyInputMaskDirective, selector: "[appCurrencyInputMask]" }] });
77
+ MoneyComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: MoneyComponent, selector: "spa-money", inputs: { readonly: "readonly", hint: "hint", display: "display", placeholder: "placeholder", value: "value", width: "width", currency: "currency", required: "required", min: "min", max: "max" }, outputs: { valueChange: "valueChange", leave: "leave", enterPress: "enterPress" }, usesOnChanges: true, ngImport: i0, template: "\r\n\r\n<mat-form-field hideRequiredMarker=\"true\" [hintLabel]=\"hint\" [ngStyle]=\"{'width':width}\" hideRequiredMarker=\"true\" style=\"margin-right: 5px;\">\r\n <mat-label>{{display}}</mat-label>\r\n <input matInput appCurrencyInputMask autocomplete=\"off\" style=\"text-align: right;\"\r\n [min]=\"min\" [max]=\"max\"\r\n [ngModel]=\"value\" (ngModelChange)=\"changed($event)\" (keyup.enter)=\"enterPressed()\" (blur)=\"leaved()\" [placeholder]=\"placeholder\" [formControl]=\"control\" [readonly]=\"readonly\" />\r\n <span *ngIf=\"currency!=''\" matPrefix>{{currency}}&nbsp;</span>\r\n <mat-error *ngIf=\"control.invalid\">{{validate(control)}}</mat-error>\r\n</mat-form-field>\r\n\r\n", styles: ["input.example-right-align{-moz-appearance:textfield}.example-right-align{text-align:right}input.example-right-align::-webkit-outer-spin-button,input.example-right-align::-webkit-inner-spin-button{display:none}.curr{background-color:red}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.MatError, selector: "mat-error", inputs: ["id"] }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i3.MatPrefix, selector: "[matPrefix]" }, { kind: "directive", type: i4.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "directive", type: i5.CurrencyInputMaskDirective, selector: "[appCurrencyInputMask]" }] });
40
78
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: MoneyComponent, decorators: [{
41
79
  type: Component,
42
- args: [{ selector: 'spa-money', template: "\r\n\r\n<mat-form-field [hintLabel]=\"hint\" [ngStyle]=\"{'width':width}\" hideRequiredMarker=\"true\" style=\"margin-right: 5px;\">\r\n <mat-label>{{display}}</mat-label>\r\n <input matInput appCurrencyInputMask autocomplete=\"off\" style=\"text-align: right;\"\r\n\r\n [ngModel]=\"value\" (ngModelChange)=\"changed($event)\" (keyup.enter)=\"enterPressed()\" (blur)=\"leaved()\" [placeholder]=\"placeholder\" [readonly]=\"readonly\" />\r\n <span *ngIf=\"currency!=''\" matPrefix>{{currency}}&nbsp;</span>\r\n</mat-form-field>\r\n\r\n", styles: ["input.example-right-align{-moz-appearance:textfield}.example-right-align{text-align:right}input.example-right-align::-webkit-outer-spin-button,input.example-right-align::-webkit-inner-spin-button{display:none}.curr{background-color:red}\n"] }]
80
+ args: [{ selector: 'spa-money', template: "\r\n\r\n<mat-form-field hideRequiredMarker=\"true\" [hintLabel]=\"hint\" [ngStyle]=\"{'width':width}\" hideRequiredMarker=\"true\" style=\"margin-right: 5px;\">\r\n <mat-label>{{display}}</mat-label>\r\n <input matInput appCurrencyInputMask autocomplete=\"off\" style=\"text-align: right;\"\r\n [min]=\"min\" [max]=\"max\"\r\n [ngModel]=\"value\" (ngModelChange)=\"changed($event)\" (keyup.enter)=\"enterPressed()\" (blur)=\"leaved()\" [placeholder]=\"placeholder\" [formControl]=\"control\" [readonly]=\"readonly\" />\r\n <span *ngIf=\"currency!=''\" matPrefix>{{currency}}&nbsp;</span>\r\n <mat-error *ngIf=\"control.invalid\">{{validate(control)}}</mat-error>\r\n</mat-form-field>\r\n\r\n", styles: ["input.example-right-align{-moz-appearance:textfield}.example-right-align{text-align:right}input.example-right-align::-webkit-outer-spin-button,input.example-right-align::-webkit-inner-spin-button{display:none}.curr{background-color:red}\n"] }]
43
81
  }], ctorParameters: function () { return []; }, propDecorators: { readonly: [{
44
82
  type: Input
83
+ }], hint: [{
84
+ type: Input
45
85
  }], display: [{
46
86
  type: Input
87
+ }], placeholder: [{
88
+ type: Input
47
89
  }], value: [{
48
90
  type: Input
49
- }], placeholder: [{
91
+ }], width: [{
92
+ type: Input
93
+ }], currency: [{
50
94
  type: Input
51
95
  }], valueChange: [{
52
96
  type: Output
53
- }], enterPress: [{
54
- type: Output
55
97
  }], leave: [{
56
98
  type: Output
57
- }], width: [{
99
+ }], enterPress: [{
100
+ type: Output
101
+ }], required: [{
58
102
  type: Input
59
- }], hint: [{
103
+ }], min: [{
60
104
  type: Input
61
- }], currency: [{
105
+ }], max: [{
62
106
  type: Input
63
107
  }] } });
64
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9uZXkuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGluLXNwYS9zcmMvbGliL2NvbXBvbmVudHMvbW9uZXkvbW9uZXkuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGluLXNwYS9zcmMvbGliL2NvbXBvbmVudHMvbW9uZXkvbW9uZXkuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7OztBQU8vRSxNQUFNLE9BQU8sY0FBYztJQUV6QjtRQWNTLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDakIsWUFBTyxHQUFHLEVBQUUsQ0FBQztRQUNiLFVBQUssR0FBRyxFQUFFLENBQUM7UUFDWCxnQkFBVyxHQUFHLEVBQUUsQ0FBQztRQUNoQixnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDakMsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDaEMsVUFBSyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFFNUIsVUFBSyxHQUFHLE1BQU0sQ0FBQTtRQUNkLFNBQUksR0FBRyxFQUFFLENBQUM7UUFDVixhQUFRLEdBQUcsRUFBRSxDQUFDO0lBeEJQLENBQUM7SUFFakIsUUFBUTtRQUNOLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxFQUFFLEVBQUU7WUFDMUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztTQUM1QztJQUdILENBQUM7SUFFRCxXQUFXO0lBRVgsQ0FBQztJQWdCRCxPQUFPLENBQUMsQ0FBQztRQUNQLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFRCxZQUFZO1FBQ1YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBR0QsTUFBTTtRQUNKLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDcEIsQ0FBQzs7MkdBekNVLGNBQWM7K0ZBQWQsY0FBYywrU0NQM0IsNmhCQVVBOzJGREhhLGNBQWM7a0JBTDFCLFNBQVM7K0JBQ0UsV0FBVzswRUFvQlosUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0ksV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLEtBQUs7c0JBQWQsTUFBTTtnQkFFRSxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NwYS1tb25leScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL21vbmV5LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9tb25leS5jb21wb25lbnQuY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIE1vbmV5Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5wbGFjZWhvbGRlciA9PSBcIlwiKSB7XHJcbiAgICAgIHRoaXMucGxhY2Vob2xkZXIgPSBcIkVudGVyIFwiICsgdGhpcy5kaXNwbGF5O1xyXG4gICAgfVxyXG5cclxuXHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcygpIHtcclxuXHJcbiAgfVxyXG5cclxuICBASW5wdXQoKSByZWFkb25seSA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGRpc3BsYXkgPSBcIlwiO1xyXG4gIEBJbnB1dCgpIHZhbHVlID0gXCJcIjtcclxuICBASW5wdXQoKSBwbGFjZWhvbGRlciA9IFwiXCI7XHJcbiAgQE91dHB1dCgpIHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBlbnRlclByZXNzID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBsZWF2ZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgQElucHV0KCkgd2lkdGggPSBcIjEwMCVcIlxyXG4gIEBJbnB1dCgpIGhpbnQgPSBcIlwiO1xyXG4gIEBJbnB1dCgpIGN1cnJlbmN5ID0gXCJcIjtcclxuXHJcblxyXG5cclxuICBjaGFuZ2VkKHgpe1xyXG4gICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHgpO1xyXG4gIH1cclxuXHJcbiAgZW50ZXJQcmVzc2VkKCkge1xyXG4gICAgdGhpcy5lbnRlclByZXNzLmVtaXQoKTtcclxuICB9XHJcblxyXG5cclxuICBsZWF2ZWQoKSB7XHJcbiAgICB0aGlzLmxlYXZlLmVtaXQoKTtcclxuICB9XHJcbn1cclxuIiwiXHJcblxyXG48bWF0LWZvcm0tZmllbGQgW2hpbnRMYWJlbF09XCJoaW50XCIgIFtuZ1N0eWxlXT1cInsnd2lkdGgnOndpZHRofVwiIGhpZGVSZXF1aXJlZE1hcmtlcj1cInRydWVcIiBzdHlsZT1cIm1hcmdpbi1yaWdodDogNXB4O1wiPlxyXG4gIDxtYXQtbGFiZWw+e3tkaXNwbGF5fX08L21hdC1sYWJlbD5cclxuICA8aW5wdXQgbWF0SW5wdXQgYXBwQ3VycmVuY3lJbnB1dE1hc2sgYXV0b2NvbXBsZXRlPVwib2ZmXCIgc3R5bGU9XCJ0ZXh0LWFsaWduOiByaWdodDtcIlxyXG5cclxuICBbbmdNb2RlbF09XCJ2YWx1ZVwiIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZWQoJGV2ZW50KVwiIChrZXl1cC5lbnRlcik9XCJlbnRlclByZXNzZWQoKVwiIChibHVyKT1cImxlYXZlZCgpXCIgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCIgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCIgLz5cclxuICA8c3BhbiAqbmdJZj1cImN1cnJlbmN5IT0nJ1wiIG1hdFByZWZpeD57e2N1cnJlbmN5fX0mbmJzcDs8L3NwYW4+XHJcbjwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG4iXX0=
108
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9uZXkuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGluLXNwYS9zcmMvbGliL2NvbXBvbmVudHMvbW9uZXkvbW9uZXkuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGluLXNwYS9zcmMvbGliL2NvbXBvbmVudHMvbW9uZXkvbW9uZXkuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7O0FBT3pELE1BQU0sT0FBTyxjQUFjO0lBRXpCO1FBNEJTLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDakIsU0FBSSxHQUFHLEVBQUUsQ0FBQztRQUNWLFlBQU8sR0FBRyxFQUFFLENBQUM7UUFDYixnQkFBVyxHQUFHLEVBQUUsQ0FBQztRQUNqQixVQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ1gsVUFBSyxHQUFHLE1BQU0sQ0FBQTtRQUNkLGFBQVEsR0FBRyxFQUFFLENBQUM7UUFFYixnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDakMsVUFBSyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDM0IsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFJMUMsa0JBQWtCO1FBQ1QsYUFBUSxHQUFHLElBQUksQ0FBQztRQUNoQixRQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQ1IsUUFBRyxHQUFHLGdCQUFnQixDQUFDLENBQUMsMkJBQTJCO1FBZTVELFlBQVk7UUFDWixZQUFPLEdBQUcsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLEdB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QUs7Z0JBQ0csR0FBRztzQkFBWCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc3BhLW1vbmV5JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vbW9uZXkuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL21vbmV5LmNvbXBvbmVudC5jc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTW9uZXlDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnBsYWNlaG9sZGVyID09IFwiXCIpIHtcclxuICAgICAgdGhpcy5wbGFjZWhvbGRlciA9IFwiRW50ZXIgXCIgKyB0aGlzLmRpc3BsYXk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcygpIHtcclxuXHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICB0aGlzLmluaXRDb250cm9sKHRoaXMuY29udHJvbClcclxuICB9XHJcblxyXG4gIGluaXRDb250cm9sKGNvbnRyb2w6IEZvcm1Db250cm9sKSB7XHJcbiAgICBpZiAodGhpcy5yZWFkb25seSkge1xyXG4gICAgICBjb250cm9sLnNldFZhbGlkYXRvcnMobnVsbCk7XHJcbiAgICAgIGNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLnJlcXVpcmVkICYmICF0aGlzLnJlYWRvbmx5KSB7XHJcblxyXG4gICAgICBjb250cm9sLnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMubWluKHRoaXMubWluKSwgVmFsaWRhdG9ycy5tYXgodGhpcy5tYXgpXSk7XHJcbiAgICAgIHRoaXMuY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKSByZWFkb25seSA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGhpbnQgPSBcIlwiO1xyXG4gIEBJbnB1dCgpIGRpc3BsYXkgPSBcIlwiO1xyXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyID0gXCJcIjtcclxuICBASW5wdXQoKSB2YWx1ZSA9IFwiXCI7XHJcbiAgQElucHV0KCkgd2lkdGggPSBcIjEwMCVcIlxyXG4gIEBJbnB1dCgpIGN1cnJlbmN5ID0gXCJcIjtcclxuXHJcbiAgQE91dHB1dCgpIHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBsZWF2ZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgZW50ZXJQcmVzcyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcblxyXG5cclxuICAvL3ZhbGlkYXRpb24gaW5wdXRcclxuICBASW5wdXQoKSByZXF1aXJlZCA9IHRydWU7XHJcbiAgQElucHV0KCkgbWluID0gMDtcclxuICBASW5wdXQoKSBtYXggPSA5MDAwMDAwMDAwMDAwMDAwOyAvL01hdGgubWF4IDkwMDAwMDAwMDAwMDAwMDBcclxuXHJcblxyXG4gIGNoYW5nZWQoeCl7XHJcbiAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoeCk7XHJcbiAgfVxyXG5cclxuICBsZWF2ZWQoKSB7XHJcbiAgICB0aGlzLmxlYXZlLmVtaXQoKTtcclxuICB9XHJcblxyXG4gIGVudGVyUHJlc3NlZCgpIHtcclxuICAgIHRoaXMuZW50ZXJQcmVzcy5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICAvL3ZhbGlkYXRpb25cclxuICBjb250cm9sID0gbmV3IEZvcm1Db250cm9sKHRoaXMudmFsdWUsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbih0aGlzLm1pbiksIFZhbGlkYXRvcnMubWF4KHRoaXMubWF4KV0pO1xyXG5cclxuICB2YWxpZGF0ZShjb250cm9sOiBGb3JtQ29udHJvbCk6IHN0cmluZyB7XHJcblxyXG4gICAgaWYgKHRoaXMucmVxdWlyZWQgJiYgY29udHJvbC5oYXNFcnJvcigncmVxdWlyZWQnKSkge1xyXG4gICAgICByZXR1cm4gYFJlcXVpcmVkYDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAocGFyc2VGbG9hdCh0aGlzLnZhbHVlKSA8IHRoaXMubWluKXtcclxuICAgICAgcmV0dXJuIGBNaW5pbXVuIHZhbHVlIGlzICR7dGhpcy5taW59YDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAocGFyc2VGbG9hdCh0aGlzLnZhbHVlKSA+IHRoaXMubWF4KSB7XHJcbiAgICAgIHJldHVybiBgTWF4aW11bSB2YWx1ZSBpcyAke3RoaXMubWF4fWA7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbnRyb2wuaGFzRXJyb3IoJ21pbicpKSB7XHJcbiAgICAgIHJldHVybiBgTWluaW11biB2YWx1ZSBpcyAke3RoaXMubWlufWA7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbnRyb2wuaGFzRXJyb3IoJ21heCcpKSB7XHJcbiAgICAgIHJldHVybiBgTWF4aW11bSB2YWx1ZSBpcyAke3RoaXMubWF4fWA7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIFwiXCI7XHJcbiAgfVxyXG5cclxuXHJcbn1cclxuIiwiXHJcblxyXG48bWF0LWZvcm0tZmllbGQgaGlkZVJlcXVpcmVkTWFya2VyPVwidHJ1ZVwiIFtoaW50TGFiZWxdPVwiaGludFwiICBbbmdTdHlsZV09XCJ7J3dpZHRoJzp3aWR0aH1cIiBoaWRlUmVxdWlyZWRNYXJrZXI9XCJ0cnVlXCIgc3R5bGU9XCJtYXJnaW4tcmlnaHQ6IDVweDtcIj5cclxuICA8bWF0LWxhYmVsPnt7ZGlzcGxheX19PC9tYXQtbGFiZWw+XHJcbiAgPGlucHV0IG1hdElucHV0IGFwcEN1cnJlbmN5SW5wdXRNYXNrIGF1dG9jb21wbGV0ZT1cIm9mZlwiIHN0eWxlPVwidGV4dC1hbGlnbjogcmlnaHQ7XCJcclxuICBbbWluXT1cIm1pblwiIFttYXhdPVwibWF4XCJcclxuICBbbmdNb2RlbF09XCJ2YWx1ZVwiIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZWQoJGV2ZW50KVwiIChrZXl1cC5lbnRlcik9XCJlbnRlclByZXNzZWQoKVwiIChibHVyKT1cImxlYXZlZCgpXCIgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCIgW2Zvcm1Db250cm9sXT1cImNvbnRyb2xcIiBbcmVhZG9ubHldPVwicmVhZG9ubHlcIiAvPlxyXG4gIDxzcGFuICpuZ0lmPVwiY3VycmVuY3khPScnXCIgbWF0UHJlZml4Pnt7Y3VycmVuY3l9fSZuYnNwOzwvc3Bhbj5cclxuICA8bWF0LWVycm9yICpuZ0lmPVwiY29udHJvbC5pbnZhbGlkXCI+e3t2YWxpZGF0ZShjb250cm9sKX19PC9tYXQtZXJyb3I+XHJcbjwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG4iXX0=
@@ -15,10 +15,10 @@ export class NumberComponent {
15
15
  this.display = "";
16
16
  this.placeholder = "";
17
17
  this.value = 0;
18
+ this.width = "100%";
18
19
  this.valueChange = new EventEmitter();
19
20
  this.leave = new EventEmitter();
20
21
  this.enterPress = new EventEmitter();
21
- this.width = "100%";
22
22
  //validation input
23
23
  this.required = true;
24
24
  this.min = 0;
@@ -28,6 +28,22 @@ export class NumberComponent {
28
28
  this.control = new FormControl(this.value, [Validators.required, Validators.min(this.min), Validators.max(this.max)]);
29
29
  }
30
30
  ngOnInit() {
31
+ if (this.placeholder == "") {
32
+ this.placeholder = "Enter " + this.display;
33
+ }
34
+ }
35
+ ngAfterViewInit() {
36
+ this.initControl(this.control);
37
+ }
38
+ initControl(control) {
39
+ if (this.readonly) {
40
+ control.setValidators(null);
41
+ control.updateValueAndValidity();
42
+ }
43
+ if (!this.required && !this.readonly) {
44
+ control.setValidators([Validators.minLength(this.min), Validators.maxLength(this.max)]);
45
+ this.control.updateValueAndValidity();
46
+ }
31
47
  }
32
48
  changed() {
33
49
  this.valueChange.emit(this.value);
@@ -43,10 +59,10 @@ export class NumberComponent {
43
59
  return `Required`;
44
60
  }
45
61
  if (control.hasError('min')) {
46
- return `Minimun length is ${this.min}`;
62
+ return `Minimun value is ${this.min}`;
47
63
  }
48
64
  if (control.hasError('max')) {
49
- return `Maximum length is ${this.max}`;
65
+ return `Maximum value is ${this.max}`;
50
66
  }
51
67
  return "";
52
68
  }
@@ -66,14 +82,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
66
82
  type: Input
67
83
  }], value: [{
68
84
  type: Input
85
+ }], width: [{
86
+ type: Input
69
87
  }], valueChange: [{
70
88
  type: Output
71
89
  }], leave: [{
72
90
  type: Output
73
91
  }], enterPress: [{
74
92
  type: Output
75
- }], width: [{
76
- type: Input
77
93
  }], required: [{
78
94
  type: Input
79
95
  }], min: [{
@@ -83,4 +99,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
83
99
  }], step: [{
84
100
  type: Input
85
101
  }] } });
86
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVtYmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Rpbi1zcGEvc3JjL2xpYi9jb21wb25lbnRzL251bWJlci9udW1iZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGluLXNwYS9zcmMvbGliL2NvbXBvbmVudHMvbnVtYmVyL251bWJlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7OztBQU96RCxNQUFNLE9BQU8sZUFBZTtJQUUxQjtRQUtBLHNCQUFzQjtRQUN0Qix3QkFBbUIsR0FBRyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QyxTQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsbUJBQW1CO1FBRXZCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDakIsU0FBSSxHQUFHLEVBQUUsQ0FBQztRQUNWLFlBQU8sR0FBRyxFQUFFLENBQUM7UUFDYixnQkFBVyxHQUFHLEVBQUUsQ0FBQztRQUNqQixVQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ1QsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBRWpDLFVBQUssR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzNCLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBRWpDLFVBQUssR0FBRyxNQUFNLENBQUE7UUFLdkIsa0JBQWtCO1FBQ1QsYUFBUSxHQUFHLElBQUksQ0FBQztRQUNoQixRQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQ1IsUUFBRyxHQUFHLGdCQUFnQixDQUFDLENBQUMsVUFBVTtRQUNsQyxTQUFJLEdBQUcsQ0FBQyxDQUFDO1FBZWxCLFlBQVk7UUFDWixZQUFPLEdBQUcsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBNUNqRyxDQUFDO0lBRWpCLFFBQVE7SUFDUixDQUFDO0lBNEJELE9BQU87UUFDTCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELE1BQU07UUFDSixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxZQUFZO1FBQ1YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBS0QsUUFBUSxDQUFDLE9BQW9CO1FBRTNCLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSyxPQUFPLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQ2xELE9BQU8sVUFBVSxDQUFDO1NBQ25CO1FBRUQsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzNCLE9BQU8scUJBQXFCLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztTQUN4QztRQUVELElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUMzQixPQUFPLHFCQUFxQixJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7U0FDeEM7UUFFRCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7OzRHQS9EVSxlQUFlO2dHQUFmLGVBQWUsaVVDUjVCLHN6QkFXQTsyRkRIYSxlQUFlO2tCQUwzQixTQUFTOytCQUNFLFlBQVk7MEVBZWIsUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNJLFdBQVc7c0JBQXBCLE1BQU07Z0JBRUcsS0FBSztzQkFBZCxNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU07Z0JBRUUsS0FBSztzQkFBYixLQUFLO2dCQU1HLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csR0FBRztzQkFBWCxLQUFLO2dCQUNHLEdBQUc7c0JBQVgsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc3BhLW51bWJlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9udW1iZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9udW1iZXIuY29tcG9uZW50LmNzcyddXG59KVxuZXhwb3J0IGNsYXNzIE51bWJlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgY29uc3RydWN0b3IoKSB7IH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgfVxuXG4gIC8vIG9wdGlvbnM6IEZvcm1Hcm91cDtcbiAgaGlkZVJlcXVpcmVkQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCh0cnVlKTtcbiAgaGlkZSA9IHRydWU7IC8vZm9yIHBhc3N3b3JkIG9ubHlcblxuICBASW5wdXQoKSByZWFkb25seSA9IGZhbHNlO1xuICBASW5wdXQoKSBoaW50ID0gXCJcIjtcbiAgQElucHV0KCkgZGlzcGxheSA9IFwiXCI7XG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyID0gXCJcIjtcbiAgQElucHV0KCkgdmFsdWUgPSAwO1xuICBAT3V0cHV0KCkgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQE91dHB1dCgpIGxlYXZlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgZW50ZXJQcmVzcyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBASW5wdXQoKSB3aWR0aCA9IFwiMTAwJVwiXG5cblxuXG5cbiAgLy92YWxpZGF0aW9uIGlucHV0XG4gIEBJbnB1dCgpIHJlcXVpcmVkID0gdHJ1ZTtcbiAgQElucHV0KCkgbWluID0gMDtcbiAgQElucHV0KCkgbWF4ID0gOTAwMDAwMDAwMDAwMDAwMDsgLy9NYXRoLm1heFxuICBASW5wdXQoKSBzdGVwID0gMTtcblxuXG4gIGNoYW5nZWQoKSB7XG4gICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMudmFsdWUpO1xuICB9XG5cbiAgbGVhdmVkKCkge1xuICAgIHRoaXMubGVhdmUuZW1pdCgpO1xuICB9XG5cbiAgZW50ZXJQcmVzc2VkKCkge1xuICAgIHRoaXMuZW50ZXJQcmVzcy5lbWl0KCk7XG4gIH1cblxuICAvL3ZhbGlkYXRpb25cbiAgY29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCh0aGlzLnZhbHVlLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW4odGhpcy5taW4pLCBWYWxpZGF0b3JzLm1heCh0aGlzLm1heCldKTtcblxuICB2YWxpZGF0ZShjb250cm9sOiBGb3JtQ29udHJvbCk6IHN0cmluZyB7XG5cbiAgICBpZiAodGhpcy5yZXF1aXJlZCAgJiYgY29udHJvbC5oYXNFcnJvcigncmVxdWlyZWQnKSkge1xuICAgICAgcmV0dXJuIGBSZXF1aXJlZGA7XG4gICAgfVxuXG4gICAgaWYgKGNvbnRyb2wuaGFzRXJyb3IoJ21pbicpKSB7XG4gICAgICByZXR1cm4gYE1pbmltdW4gbGVuZ3RoIGlzICR7dGhpcy5taW59YDtcbiAgICB9XG5cbiAgICBpZiAoY29udHJvbC5oYXNFcnJvcignbWF4JykpIHtcbiAgICAgIHJldHVybiBgTWF4aW11bSBsZW5ndGggaXMgJHt0aGlzLm1heH1gO1xuICAgIH1cblxuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbn1cbiIsIjwhLS0gPG1hdC1mb3JtLWZpZWxkIHN0eWxlPVwid2lkdGg6MzAwcHhcIj5cbiAgPG1hdC1sYWJlbD5Ob3N0cm8gQmFsYW5jZTwvbWF0LWxhYmVsPlxuICA8aW5wdXQgbWF0SW5wdXQgYXV0b2NvbXBsZXRlPVwib2ZmXCIgdHlwZT1cIm51bWJlclwiIG1pbj1cIjAuMDBcIiBzdGVwPVwiMC4wMVwiIFsobmdNb2RlbCldPVwiYmlkLmJhbGFuY2VcIiBwbGFjZWhvbGRlcj1cIk5vc3RybyBCYWxhbmNlXCIgLz5cbjwvbWF0LWZvcm0tZmllbGQ+IC0tPlxuXG5cbjxtYXQtZm9ybS1maWVsZCBoaWRlUmVxdWlyZWRNYXJrZXI9XCJ0cnVlXCIgW2hpbnRMYWJlbF09XCJoaW50XCIgW25nU3R5bGVdPVwieyd3aWR0aCc6d2lkdGh9XCIgc3R5bGU9XCJtYXJnaW4tcmlnaHQ6IDVweDtcIj5cbiAgPG1hdC1sYWJlbD57e2Rpc3BsYXl9fTwvbWF0LWxhYmVsPlxuICA8aW5wdXQgbWF0SW5wdXQgYXV0b2NvbXBsZXRlPVwib2ZmXCIgdHlwZT1cIm51bWJlclwiIFttaW5dPVwibWluXCIgW21heF09XCJtYXhcIiBbc3RlcF09XCJzdGVwXCIgWyhuZ01vZGVsKV09XCJ2YWx1ZVwiIChjaGFuZ2UpPVwiY2hhbmdlZCgpXCIgKGJsdXIpPVwibGVhdmVkKClcIiAoa2V5dXAuZW50ZXIpPVwiZW50ZXJQcmVzc2VkKClcIiBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIiBbZm9ybUNvbnRyb2xdPVwiY29udHJvbFwiIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiIFtyZWFkb25seV09XCJyZWFkb25seVwiIC8+XG4gIDxtYXQtZXJyb3IgKm5nSWY9XCJjb250cm9sLmludmFsaWRcIj57e3ZhbGlkYXRlKGNvbnRyb2wpfX08L21hdC1lcnJvcj5cbjwvbWF0LWZvcm0tZmllbGQ+XG4iXX0=
102
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVtYmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Rpbi1zcGEvc3JjL2xpYi9jb21wb25lbnRzL251bWJlci9udW1iZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGluLXNwYS9zcmMvbGliL2NvbXBvbmVudHMvbnVtYmVyL251bWJlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7OztBQU96RCxNQUFNLE9BQU8sZUFBZTtJQUUxQjtRQXdCQSxzQkFBc0I7UUFDdEIsd0JBQW1CLEdBQUcsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUMsU0FBSSxHQUFHLElBQUksQ0FBQyxDQUFDLG1CQUFtQjtRQUV2QixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLFNBQUksR0FBRyxFQUFFLENBQUM7UUFDVixZQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2IsZ0JBQVcsR0FBRyxFQUFFLENBQUM7UUFDakIsVUFBSyxHQUFHLENBQUMsQ0FBQztRQUNWLFVBQUssR0FBRyxNQUFNLENBQUE7UUFFYixnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDakMsVUFBSyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDM0IsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFPMUMsa0JBQWtCO1FBQ1QsYUFBUSxHQUFHLElBQUksQ0FBQztRQUNoQixRQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQ1IsUUFBRyxHQUFHLGdCQUFnQixDQUFDLENBQUMsVUFBVTtRQUNsQyxTQUFJLEdBQUcsQ0FBQyxDQUFDO1FBZWxCLFlBQVk7UUFDWixZQUFPLEdBQUcsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBaEVqRyxDQUFDO0lBRWpCLFFBQVE7UUFDTixJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksRUFBRSxFQUFFO1lBQzFCLElBQUksQ0FBQyxXQUFXLEdBQUcsUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7U0FDNUM7SUFDSCxDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ2hDLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBb0I7UUFDOUIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2pCLE9BQU8sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDNUIsT0FBTyxDQUFDLHNCQUFzQixFQUFFLENBQUM7U0FDbEM7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFFcEMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN4RixJQUFJLENBQUMsT0FBTyxDQUFDLHNCQUFzQixFQUFFLENBQUM7U0FDdkM7SUFDSCxDQUFDO0lBNkJELE9BQU87UUFDTCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELE1BQU07UUFDSixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxZQUFZO1FBQ1YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBS0QsUUFBUSxDQUFDLE9BQW9CO1FBRTNCLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSyxPQUFPLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQ2xELE9BQU8sVUFBVSxDQUFDO1NBQ25CO1FBRUQsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzNCLE9BQU8sb0JBQW9CLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztTQUN2QztRQUVELElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUMzQixPQUFPLG9CQUFvQixJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7U0FDdkM7UUFFRCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7OzRHQW5GVSxlQUFlO2dHQUFmLGVBQWUsaVVDUjVCLHN6QkFXQTsyRkRIYSxlQUFlO2tCQUwzQixTQUFTOytCQUNFLFlBQVk7MEVBa0NiLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBRUksV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxLQUFLO3NCQUFkLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFRRSxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLEdBQUc7c0JBQVgsS0FBSztnQkFDRyxHQUFHO3NCQUFYLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NwYS1udW1iZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vbnVtYmVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbnVtYmVyLmNvbXBvbmVudC5jc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBOdW1iZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIGNvbnN0cnVjdG9yKCkgeyB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucGxhY2Vob2xkZXIgPT0gXCJcIikge1xuICAgICAgdGhpcy5wbGFjZWhvbGRlciA9IFwiRW50ZXIgXCIgKyB0aGlzLmRpc3BsYXk7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMuaW5pdENvbnRyb2wodGhpcy5jb250cm9sKVxuICB9XG5cbiAgaW5pdENvbnRyb2woY29udHJvbDogRm9ybUNvbnRyb2wpIHtcbiAgICBpZiAodGhpcy5yZWFkb25seSkge1xuICAgICAgY29udHJvbC5zZXRWYWxpZGF0b3JzKG51bGwpO1xuICAgICAgY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgfVxuICAgIGlmICghdGhpcy5yZXF1aXJlZCAmJiAhdGhpcy5yZWFkb25seSkge1xuXG4gICAgICBjb250cm9sLnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMubWluTGVuZ3RoKHRoaXMubWluKSwgVmFsaWRhdG9ycy5tYXhMZW5ndGgodGhpcy5tYXgpXSk7XG4gICAgICB0aGlzLmNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIG9wdGlvbnM6IEZvcm1Hcm91cDtcbiAgaGlkZVJlcXVpcmVkQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCh0cnVlKTtcbiAgaGlkZSA9IHRydWU7IC8vZm9yIHBhc3N3b3JkIG9ubHlcblxuICBASW5wdXQoKSByZWFkb25seSA9IGZhbHNlO1xuICBASW5wdXQoKSBoaW50ID0gXCJcIjtcbiAgQElucHV0KCkgZGlzcGxheSA9IFwiXCI7XG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyID0gXCJcIjtcbiAgQElucHV0KCkgdmFsdWUgPSAwO1xuICBASW5wdXQoKSB3aWR0aCA9IFwiMTAwJVwiXG5cbiAgQE91dHB1dCgpIHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgbGVhdmUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBlbnRlclByZXNzID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG5cblxuXG5cblxuICAvL3ZhbGlkYXRpb24gaW5wdXRcbiAgQElucHV0KCkgcmVxdWlyZWQgPSB0cnVlO1xuICBASW5wdXQoKSBtaW4gPSAwO1xuICBASW5wdXQoKSBtYXggPSA5MDAwMDAwMDAwMDAwMDAwOyAvL01hdGgubWF4XG4gIEBJbnB1dCgpIHN0ZXAgPSAxO1xuXG5cbiAgY2hhbmdlZCgpIHtcbiAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy52YWx1ZSk7XG4gIH1cblxuICBsZWF2ZWQoKSB7XG4gICAgdGhpcy5sZWF2ZS5lbWl0KCk7XG4gIH1cblxuICBlbnRlclByZXNzZWQoKSB7XG4gICAgdGhpcy5lbnRlclByZXNzLmVtaXQoKTtcbiAgfVxuXG4gIC8vdmFsaWRhdGlvblxuICBjb250cm9sID0gbmV3IEZvcm1Db250cm9sKHRoaXMudmFsdWUsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbih0aGlzLm1pbiksIFZhbGlkYXRvcnMubWF4KHRoaXMubWF4KV0pO1xuXG4gIHZhbGlkYXRlKGNvbnRyb2w6IEZvcm1Db250cm9sKTogc3RyaW5nIHtcblxuICAgIGlmICh0aGlzLnJlcXVpcmVkICAmJiBjb250cm9sLmhhc0Vycm9yKCdyZXF1aXJlZCcpKSB7XG4gICAgICByZXR1cm4gYFJlcXVpcmVkYDtcbiAgICB9XG5cbiAgICBpZiAoY29udHJvbC5oYXNFcnJvcignbWluJykpIHtcbiAgICAgIHJldHVybiBgTWluaW11biB2YWx1ZSBpcyAke3RoaXMubWlufWA7XG4gICAgfVxuXG4gICAgaWYgKGNvbnRyb2wuaGFzRXJyb3IoJ21heCcpKSB7XG4gICAgICByZXR1cm4gYE1heGltdW0gdmFsdWUgaXMgJHt0aGlzLm1heH1gO1xuICAgIH1cblxuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbn1cbiIsIjwhLS0gPG1hdC1mb3JtLWZpZWxkIHN0eWxlPVwid2lkdGg6MzAwcHhcIj5cbiAgPG1hdC1sYWJlbD5Ob3N0cm8gQmFsYW5jZTwvbWF0LWxhYmVsPlxuICA8aW5wdXQgbWF0SW5wdXQgYXV0b2NvbXBsZXRlPVwib2ZmXCIgdHlwZT1cIm51bWJlclwiIG1pbj1cIjAuMDBcIiBzdGVwPVwiMC4wMVwiIFsobmdNb2RlbCldPVwiYmlkLmJhbGFuY2VcIiBwbGFjZWhvbGRlcj1cIk5vc3RybyBCYWxhbmNlXCIgLz5cbjwvbWF0LWZvcm0tZmllbGQ+IC0tPlxuXG5cbjxtYXQtZm9ybS1maWVsZCBoaWRlUmVxdWlyZWRNYXJrZXI9XCJ0cnVlXCIgW2hpbnRMYWJlbF09XCJoaW50XCIgW25nU3R5bGVdPVwieyd3aWR0aCc6d2lkdGh9XCIgc3R5bGU9XCJtYXJnaW4tcmlnaHQ6IDVweDtcIj5cbiAgPG1hdC1sYWJlbD57e2Rpc3BsYXl9fTwvbWF0LWxhYmVsPlxuICA8aW5wdXQgbWF0SW5wdXQgYXV0b2NvbXBsZXRlPVwib2ZmXCIgdHlwZT1cIm51bWJlclwiIFttaW5dPVwibWluXCIgW21heF09XCJtYXhcIiBbc3RlcF09XCJzdGVwXCIgWyhuZ01vZGVsKV09XCJ2YWx1ZVwiIChjaGFuZ2UpPVwiY2hhbmdlZCgpXCIgKGJsdXIpPVwibGVhdmVkKClcIiAoa2V5dXAuZW50ZXIpPVwiZW50ZXJQcmVzc2VkKClcIiBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIiBbZm9ybUNvbnRyb2xdPVwiY29udHJvbFwiIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiIFtyZWFkb25seV09XCJyZWFkb25seVwiIC8+XG4gIDxtYXQtZXJyb3IgKm5nSWY9XCJjb250cm9sLmludmFsaWRcIj57e3ZhbGlkYXRlKGNvbnRyb2wpfX08L21hdC1lcnJvcj5cbjwvbWF0LWZvcm0tZmllbGQ+XG4iXX0=
@@ -83,9 +83,9 @@ export class RolesComponent {
83
83
  }
84
84
  }
85
85
  RolesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: RolesComponent, deps: [{ token: i1.HttpService }, { token: i2.Router }, { token: i3.AuthService }, { token: i4.DataServiceLib }, { token: i5.MatDialog }, { token: i6.MessageService }], target: i0.ɵɵFactoryTarget.Component });
86
- RolesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: RolesComponent, selector: "spa-roles", ngImport: i0, template: "<h4> Roles </h4>\r\n<hr />\r\n\r\n<div class=\"container mb-5\">\r\n\r\n <div class=\"row justify-content-between\" style=\"padding-bottom: 10px;padding-left:10px\">\r\n <div class=\"col-2\">\r\n\r\n <button id=\"btnNewRole\" mat-raised-button color=\"primary\" (click)=\"addRole()\">New Role</button>\r\n </div>\r\n <div class=\"col-1\">\r\n\r\n <button id=\"btnRefresh\" mat-mini-fab color=\"primary\" (click)=\"refresh()\" style=\"margin-right:1em;margin-top:5px\" matTooltip=\"refresh data\" matTooltipPosition=\"right\"><mat-icon class=\"refreshIcon\">refresh</mat-icon></button>\r\n\r\n </div>\r\n </div>\r\n\r\n\r\n <div class=\"row mt-2 mb-1\" style=\"margin-left:10px\" *ngFor=\"let role of roles\">\r\n\r\n <mat-card class=\"mat-elevation-z8\" style=\"width:100%;padding-left:2em\">\r\n\r\n <h4>{{role.roleName}}</h4>\r\n <hr />\r\n\r\n <div class=\"row\" style=\"margin-left: 2em;\">\r\n\r\n\r\n <div class=\"row\" style=\"margin-right:20px;\" *ngFor=\"let capItem of appConfig.capItems\">\r\n\r\n <mat-checkbox color=\"primary\" style=\" font-size:12px; width: 200px;\" [(ngModel)]=\"role[capItem.name]\">{{capItem.display}}</mat-checkbox>\r\n\r\n <div class=\"row\" style=\"margin-right:20px;margin-left: 0px; \" *ngFor=\"let capSubItem of capItem.capSubItems\">\r\n\r\n <mat-checkbox color=\"primary\" style=\" font-size:12px; width: 200px;\" [(ngModel)]=\"role[capSubItem.name]\">{{capSubItem.display}}</mat-checkbox>\r\n\r\n <div class=\"row\" style=\"margin-right:20px;margin-left: 0px;\" *ngFor=\"let capSubSubItem of capSubItem.capSubItems\">\r\n\r\n <mat-checkbox color=\"primary\" style=\"font-size:12px; width: 200px;\" [(ngModel)]=\"role[capSubSubItem.name]\">{{capSubSubItem.display}}</mat-checkbox>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n <mat-card-actions>\r\n\r\n <button mat-mini-fab color=\"primary\" (click)=\"updateRole(role)\" style=\"margin-right:10px;\">\r\n <mat-icon>done_all</mat-icon>\r\n </button>\r\n\r\n <!-- <button mat-mini-fab color=\"warn\" (click)=\"editRole(role)\" style=\"margin-right:10px\">\r\n <mat-icon>edit</mat-icon>\r\n </button> -->\r\n\r\n <button mat-mini-fab color=\"warn\" (click)=\"deleteRole(role)\" style=\"margin-right:10px\">\r\n <mat-icon>delete</mat-icon>\r\n </button>\r\n\r\n </mat-card-actions>\r\n\r\n </mat-card>\r\n\r\n </div>\r\n\r\n\r\n</div>\r\n\r\n", styles: [".mat-mini-fab{width:32px;height:32px}.mat-mini-fab mat-icon{font-size:16px;margin-top:-3px}.refreshIcon{font-size:22px!important;margin-top:-7px!important}\n"], dependencies: [{ kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i9.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "component", type: i10.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i11.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i12.MatCard, selector: "mat-card", exportAs: ["matCard"] }, { kind: "directive", type: i12.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "directive", type: i13.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }] });
86
+ RolesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: RolesComponent, selector: "spa-roles", ngImport: i0, template: "<h4> Roles </h4>\r\n<hr />\r\n\r\n<div class=\"container mb-5\">\r\n\r\n <div class=\"d-flex justify-content-between mb-2\">\r\n\r\n <div >\r\n <button id=\"btnNewRole\" mat-raised-button color=\"primary\" (click)=\"addRole()\">New Role</button>\r\n </div>\r\n\r\n <div class=\"d-flex justify-content-end\">\r\n <button id=\"btnRefresh\" mat-mini-fab color=\"primary\" (click)=\"refresh()\" matTooltip=\"refresh data\" matTooltipPosition=\"right\"><mat-icon class=\"refreshIcon\">refresh</mat-icon></button>\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n <div class=\"row mt-2 mb-1\" *ngFor=\"let role of roles\">\r\n\r\n <mat-card class=\"mat-elevation-z8\" style=\"width:100%\">\r\n\r\n <h4>{{role.roleName}}</h4>\r\n <hr />\r\n\r\n <div class=\"tin-row\" style=\" font-size:12px;\">\r\n\r\n\r\n <div class=\"tin-row\" *ngFor=\"let capItem of appConfig.capItems\">\r\n\r\n <mat-checkbox color=\"primary\" style=\"min-width: 200px;\" [(ngModel)]=\"role[capItem.name]\">{{capItem.display}}</mat-checkbox>\r\n\r\n <div class=\"tin-row\" *ngFor=\"let capSubItem of capItem.capSubItems\">\r\n\r\n <mat-checkbox color=\"primary\" style=\"min-width: 200px;\" [(ngModel)]=\"role[capSubItem.name]\">{{capSubItem.display}}</mat-checkbox>\r\n\r\n <div class=\"tin-row\" *ngFor=\"let capSubSubItem of capSubItem.capSubItems\">\r\n\r\n <mat-checkbox color=\"primary\" style=\"min-width: 200px;\" [(ngModel)]=\"role[capSubSubItem.name]\">{{capSubSubItem.display}}</mat-checkbox>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n <mat-card-actions>\r\n\r\n <button mat-mini-fab color=\"primary\" (click)=\"updateRole(role)\" style=\"margin-right:10px;\">\r\n <mat-icon>done_all</mat-icon>\r\n </button>\r\n\r\n <button mat-mini-fab color=\"warn\" (click)=\"deleteRole(role)\" style=\"margin-right:10px\">\r\n <mat-icon>delete</mat-icon>\r\n </button>\r\n\r\n </mat-card-actions>\r\n\r\n </mat-card>\r\n\r\n </div>\r\n\r\n\r\n</div>\r\n\r\n", styles: [".mat-mini-fab{width:32px;height:32px}.mat-mini-fab mat-icon{font-size:16px;margin-top:-3px}.refreshIcon{font-size:22px!important;margin-top:-7px!important}\n"], dependencies: [{ kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i9.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "component", type: i10.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i11.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i12.MatCard, selector: "mat-card", exportAs: ["matCard"] }, { kind: "directive", type: i12.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "directive", type: i13.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }] });
87
87
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: RolesComponent, decorators: [{
88
88
  type: Component,
89
- args: [{ selector: "spa-roles", template: "<h4> Roles </h4>\r\n<hr />\r\n\r\n<div class=\"container mb-5\">\r\n\r\n <div class=\"row justify-content-between\" style=\"padding-bottom: 10px;padding-left:10px\">\r\n <div class=\"col-2\">\r\n\r\n <button id=\"btnNewRole\" mat-raised-button color=\"primary\" (click)=\"addRole()\">New Role</button>\r\n </div>\r\n <div class=\"col-1\">\r\n\r\n <button id=\"btnRefresh\" mat-mini-fab color=\"primary\" (click)=\"refresh()\" style=\"margin-right:1em;margin-top:5px\" matTooltip=\"refresh data\" matTooltipPosition=\"right\"><mat-icon class=\"refreshIcon\">refresh</mat-icon></button>\r\n\r\n </div>\r\n </div>\r\n\r\n\r\n <div class=\"row mt-2 mb-1\" style=\"margin-left:10px\" *ngFor=\"let role of roles\">\r\n\r\n <mat-card class=\"mat-elevation-z8\" style=\"width:100%;padding-left:2em\">\r\n\r\n <h4>{{role.roleName}}</h4>\r\n <hr />\r\n\r\n <div class=\"row\" style=\"margin-left: 2em;\">\r\n\r\n\r\n <div class=\"row\" style=\"margin-right:20px;\" *ngFor=\"let capItem of appConfig.capItems\">\r\n\r\n <mat-checkbox color=\"primary\" style=\" font-size:12px; width: 200px;\" [(ngModel)]=\"role[capItem.name]\">{{capItem.display}}</mat-checkbox>\r\n\r\n <div class=\"row\" style=\"margin-right:20px;margin-left: 0px; \" *ngFor=\"let capSubItem of capItem.capSubItems\">\r\n\r\n <mat-checkbox color=\"primary\" style=\" font-size:12px; width: 200px;\" [(ngModel)]=\"role[capSubItem.name]\">{{capSubItem.display}}</mat-checkbox>\r\n\r\n <div class=\"row\" style=\"margin-right:20px;margin-left: 0px;\" *ngFor=\"let capSubSubItem of capSubItem.capSubItems\">\r\n\r\n <mat-checkbox color=\"primary\" style=\"font-size:12px; width: 200px;\" [(ngModel)]=\"role[capSubSubItem.name]\">{{capSubSubItem.display}}</mat-checkbox>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n <mat-card-actions>\r\n\r\n <button mat-mini-fab color=\"primary\" (click)=\"updateRole(role)\" style=\"margin-right:10px;\">\r\n <mat-icon>done_all</mat-icon>\r\n </button>\r\n\r\n <!-- <button mat-mini-fab color=\"warn\" (click)=\"editRole(role)\" style=\"margin-right:10px\">\r\n <mat-icon>edit</mat-icon>\r\n </button> -->\r\n\r\n <button mat-mini-fab color=\"warn\" (click)=\"deleteRole(role)\" style=\"margin-right:10px\">\r\n <mat-icon>delete</mat-icon>\r\n </button>\r\n\r\n </mat-card-actions>\r\n\r\n </mat-card>\r\n\r\n </div>\r\n\r\n\r\n</div>\r\n\r\n", styles: [".mat-mini-fab{width:32px;height:32px}.mat-mini-fab mat-icon{font-size:16px;margin-top:-3px}.refreshIcon{font-size:22px!important;margin-top:-7px!important}\n"] }]
89
+ args: [{ selector: "spa-roles", template: "<h4> Roles </h4>\r\n<hr />\r\n\r\n<div class=\"container mb-5\">\r\n\r\n <div class=\"d-flex justify-content-between mb-2\">\r\n\r\n <div >\r\n <button id=\"btnNewRole\" mat-raised-button color=\"primary\" (click)=\"addRole()\">New Role</button>\r\n </div>\r\n\r\n <div class=\"d-flex justify-content-end\">\r\n <button id=\"btnRefresh\" mat-mini-fab color=\"primary\" (click)=\"refresh()\" matTooltip=\"refresh data\" matTooltipPosition=\"right\"><mat-icon class=\"refreshIcon\">refresh</mat-icon></button>\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n <div class=\"row mt-2 mb-1\" *ngFor=\"let role of roles\">\r\n\r\n <mat-card class=\"mat-elevation-z8\" style=\"width:100%\">\r\n\r\n <h4>{{role.roleName}}</h4>\r\n <hr />\r\n\r\n <div class=\"tin-row\" style=\" font-size:12px;\">\r\n\r\n\r\n <div class=\"tin-row\" *ngFor=\"let capItem of appConfig.capItems\">\r\n\r\n <mat-checkbox color=\"primary\" style=\"min-width: 200px;\" [(ngModel)]=\"role[capItem.name]\">{{capItem.display}}</mat-checkbox>\r\n\r\n <div class=\"tin-row\" *ngFor=\"let capSubItem of capItem.capSubItems\">\r\n\r\n <mat-checkbox color=\"primary\" style=\"min-width: 200px;\" [(ngModel)]=\"role[capSubItem.name]\">{{capSubItem.display}}</mat-checkbox>\r\n\r\n <div class=\"tin-row\" *ngFor=\"let capSubSubItem of capSubItem.capSubItems\">\r\n\r\n <mat-checkbox color=\"primary\" style=\"min-width: 200px;\" [(ngModel)]=\"role[capSubSubItem.name]\">{{capSubSubItem.display}}</mat-checkbox>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n <mat-card-actions>\r\n\r\n <button mat-mini-fab color=\"primary\" (click)=\"updateRole(role)\" style=\"margin-right:10px;\">\r\n <mat-icon>done_all</mat-icon>\r\n </button>\r\n\r\n <button mat-mini-fab color=\"warn\" (click)=\"deleteRole(role)\" style=\"margin-right:10px\">\r\n <mat-icon>delete</mat-icon>\r\n </button>\r\n\r\n </mat-card-actions>\r\n\r\n </mat-card>\r\n\r\n </div>\r\n\r\n\r\n</div>\r\n\r\n", styles: [".mat-mini-fab{width:32px;height:32px}.mat-mini-fab mat-icon{font-size:16px;margin-top:-3px}.refreshIcon{font-size:22px!important;margin-top:-7px!important}\n"] }]
90
90
  }], ctorParameters: function () { return [{ type: i1.HttpService }, { type: i2.Router }, { type: i3.AuthService }, { type: i4.DataServiceLib }, { type: i5.MatDialog }, { type: i6.MessageService }]; } });
91
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9sZXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGluLXNwYS9zcmMvbGliL2NvbXBvbmVudHMvcm9sZXMvcm9sZXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGluLXNwYS9zcmMvbGliL2NvbXBvbmVudHMvcm9sZXMvcm9sZXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxTQUFTLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBSXpELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7O0FBWTFELE1BQU0sT0FBTyxjQUFjO0lBQ3pCLFlBQW9CLFdBQXdCLEVBQVUsTUFBYyxFQUFVLFdBQXdCLEVBQVUsV0FBMkIsRUFBUyxNQUFpQixFQUFVLGNBQThCO1FBQXpMLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQVUsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUFVLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQVUsZ0JBQVcsR0FBWCxXQUFXLENBQWdCO1FBQVMsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQUFVLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQVE3TSxpQkFBWSxHQUFHLEtBQUssQ0FBQztRQUdyQixjQUFTLEdBQUcsSUFBSSxTQUFTLEVBQUUsQ0FBQztJQVhxTCxDQUFDO0lBRWxOLFFBQVE7UUFDTixJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5RCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBT0QsU0FBUztRQUNQLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRTtZQUM1RCxJQUFJLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQztRQUMzQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxPQUFPO1FBQ0wsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFRCxPQUFPO1FBQ0wsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ2hELEtBQUssRUFBRSxRQUFRO1lBQ2YsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUTtTQUM5QixDQUFDLENBQUM7UUFFSCxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDM0MsSUFBSSxNQUFNLElBQUksU0FBUyxFQUFFO2dCQUN2QixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7YUFDbEI7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxVQUFVLENBQUMsSUFBVTtRQUVuQixJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxVQUFVLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBRTVFLElBQUksTUFBTSxJQUFJLEtBQUssRUFBRTtnQkFFbkIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFO29CQUVoRSxJQUFJLFdBQVcsQ0FBQyxPQUFPLEVBQUU7d0JBQ3ZCLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO3dCQUMxQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7cUJBQ2xCO3lCQUFNO3dCQUNMLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxXQUFXLENBQUMsQ0FBQztxQkFDcEQ7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7YUFFSjtRQUVILENBQUMsQ0FBQyxDQUFBO0lBR0osQ0FBQztJQUFBLENBQUM7SUFFRixVQUFVLENBQUMsSUFBVTtRQUVuQixJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxVQUFVLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBRTVFLElBQUksTUFBTSxJQUFJLEtBQUssRUFBRTtnQkFFbkIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFO29CQUNsRSxJQUFJLFdBQVcsQ0FBQyxPQUFPLEVBQUU7d0JBQ3ZCLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO3dCQUMxQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7cUJBQ2xCO3lCQUFNO3dCQUNMLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxXQUFXLENBQUMsQ0FBQztxQkFDcEQ7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7YUFFSjtRQUVILENBQUMsQ0FBQyxDQUFBO0lBRUosQ0FBQzs7MkdBL0VVLGNBQWM7K0ZBQWQsY0FBYyxpRENqQjNCLHloRkF3RUE7MkZEdkRhLGNBQWM7a0JBTDFCLFNBQVM7K0JBQ0UsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFwcENvbmZpZyB9IGZyb20gJy4vLi4vLi4vY2xhc3Nlcy9DbGFzc2VzJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2RpYWxvZ1wiO1xyXG5pbXBvcnQgeyBEYXRhU2VydmljZUxpYiB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9kYXRhLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgUm9sZSwgQ2FwSXRlbSB9IGZyb20gXCIuLi8uLi9jbGFzc2VzL0NsYXNzZXNcIjtcclxuaW1wb3J0IHsgYWRkUm9sZURpYWxvZyB9IGZyb20gXCIuL2FkZFJvbGVEaWFsb2cuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuaW1wb3J0IHsgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tZXNzYWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2F1dGguc2VydmljZSc7XHJcbmltcG9ydCB7IEh0dHBTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvaHR0cC5zZXJ2aWNlJztcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJzcGEtcm9sZXNcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL3JvbGVzLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmxzOiBbXCIuL3JvbGVzLmNvbXBvbmVudC5jc3NcIl0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSb2xlc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwU2VydmljZTogSHR0cFNlcnZpY2UsIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLCBwcml2YXRlIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZUxpYiwgcHVibGljIGRpYWxvZzogTWF0RGlhbG9nLCBwcml2YXRlIG1lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlU2VydmljZSkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5hdXRoU2VydmljZS5pc0F1dGhvcmlzZWQodGhpcy5kYXRhU2VydmljZS5jYXBSb2xlcy5uYW1lKTtcclxuICAgIHRoaXMubG9hZFJvbGVzKCk7XHJcbiAgICB0aGlzLmRhdGFTZXJ2aWNlLmFwcENvbmZpZ09ic2Vydi5zdWJzY3JpYmUoeCA9PiB0aGlzLmFwcENvbmZpZyA9IHgpO1xyXG4gIH1cclxuXHJcbiAgaXNQcm9jZXNzaW5nID0gZmFsc2U7XHJcbiAgcm9sZXM6IFJvbGVbXTtcclxuXHJcbiAgYXBwQ29uZmlnID0gbmV3IEFwcENvbmZpZygpO1xyXG5cclxuICBsb2FkUm9sZXMoKSB7XHJcbiAgICB0aGlzLmRhdGFTZXJ2aWNlLkdldFJvbGUoXCJhbGxcIiwgXCJcIikuc3Vic2NyaWJlKChhcGlSZXNwb25zZSkgPT4ge1xyXG4gICAgICB0aGlzLnJvbGVzID0gYXBpUmVzcG9uc2U7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHJlZnJlc2goKSB7XHJcbiAgICB0aGlzLmxvYWRSb2xlcygpO1xyXG4gIH1cclxuXHJcbiAgYWRkUm9sZSgpIHtcclxuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oYWRkUm9sZURpYWxvZywge1xyXG4gICAgICB3aWR0aDogXCIxMTAwcHhcIixcclxuICAgICAgZGF0YTogdGhpcy5hcHBDb25maWcuY2FwSXRlbXMsXHJcbiAgICB9KTtcclxuXHJcbiAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICBpZiAocmVzdWx0ID09IFwic3VjY2Vzc1wiKSB7XHJcbiAgICAgICAgdGhpcy5sb2FkUm9sZXMoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVSb2xlKHJvbGU6IFJvbGUpIHtcclxuXHJcbiAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmNvbmZpcm0oYFVQREFURSAke3JvbGUucm9sZU5hbWV9ID9gKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG5cclxuICAgICAgaWYgKHJlc3VsdCA9PSBcInllc1wiKSB7XHJcblxyXG4gICAgICAgIHRoaXMuZGF0YVNlcnZpY2UuUG9zdFJvbGUocm9sZSwgXCJlZGl0XCIpLnN1YnNjcmliZSgoYXBpUmVzcG9uc2UpID0+IHtcclxuXHJcbiAgICAgICAgICBpZiAoYXBpUmVzcG9uc2Uuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnRvYXN0KFwiUm9sZSBVcGRhdGVkXCIpO1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRSb2xlcygpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS50b2FzdChcIkVycm9yOiBcIiArIGFwaVJlc3BvbnNlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgIH1cclxuXHJcbiAgICB9KVxyXG5cclxuXHJcbiAgfTtcclxuXHJcbiAgZGVsZXRlUm9sZShyb2xlOiBSb2xlKSB7XHJcblxyXG4gICAgdGhpcy5tZXNzYWdlU2VydmljZS5jb25maXJtKGBERUxFVEUgJHtyb2xlLnJvbGVOYW1lfSA/YCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuXHJcbiAgICAgIGlmIChyZXN1bHQgPT0gXCJ5ZXNcIikge1xyXG5cclxuICAgICAgICB0aGlzLmRhdGFTZXJ2aWNlLlBvc3RSb2xlKHJvbGUsIFwiZGVsZXRlXCIpLnN1YnNjcmliZSgoYXBpUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIGlmIChhcGlSZXNwb25zZS5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UudG9hc3QoXCJSb2xlIERlbGV0ZWRcIik7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZFJvbGVzKCk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnRvYXN0KFwiRXJyb3I6IFwiICsgYXBpUmVzcG9uc2UpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgfVxyXG5cclxuICAgIH0pXHJcblxyXG4gIH1cclxufVxyXG4iLCI8aDQ+IFJvbGVzIDwvaDQ+XHJcbjxociAvPlxyXG5cclxuPGRpdiBjbGFzcz1cImNvbnRhaW5lciBtYi01XCI+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJyb3cganVzdGlmeS1jb250ZW50LWJldHdlZW5cIiBzdHlsZT1cInBhZGRpbmctYm90dG9tOiAxMHB4O3BhZGRpbmctbGVmdDoxMHB4XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLTJcIj5cclxuXHJcbiAgICAgIDxidXR0b24gaWQ9XCJidG5OZXdSb2xlXCIgbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cImFkZFJvbGUoKVwiPk5ldyBSb2xlPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtMVwiPlxyXG5cclxuICAgICAgPGJ1dHRvbiBpZD1cImJ0blJlZnJlc2hcIiBtYXQtbWluaS1mYWIgY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cInJlZnJlc2goKVwiIHN0eWxlPVwibWFyZ2luLXJpZ2h0OjFlbTttYXJnaW4tdG9wOjVweFwiIG1hdFRvb2x0aXA9XCJyZWZyZXNoIGRhdGFcIiBtYXRUb29sdGlwUG9zaXRpb249XCJyaWdodFwiPjxtYXQtaWNvbiBjbGFzcz1cInJlZnJlc2hJY29uXCI+cmVmcmVzaDwvbWF0LWljb24+PC9idXR0b24+XHJcblxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG5cclxuICA8ZGl2IGNsYXNzPVwicm93IG10LTIgbWItMVwiIHN0eWxlPVwibWFyZ2luLWxlZnQ6MTBweFwiICpuZ0Zvcj1cImxldCByb2xlIG9mIHJvbGVzXCI+XHJcblxyXG4gICAgPG1hdC1jYXJkIGNsYXNzPVwibWF0LWVsZXZhdGlvbi16OFwiIHN0eWxlPVwid2lkdGg6MTAwJTtwYWRkaW5nLWxlZnQ6MmVtXCI+XHJcblxyXG4gICAgICA8aDQ+e3tyb2xlLnJvbGVOYW1lfX08L2g0PlxyXG4gICAgICA8aHIgLz5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAyZW07XCI+XHJcblxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCIgc3R5bGU9XCJtYXJnaW4tcmlnaHQ6MjBweDtcIiAgKm5nRm9yPVwibGV0IGNhcEl0ZW0gb2YgYXBwQ29uZmlnLmNhcEl0ZW1zXCI+XHJcblxyXG4gICAgICAgICAgPG1hdC1jaGVja2JveCBjb2xvcj1cInByaW1hcnlcIiBzdHlsZT1cIiBmb250LXNpemU6MTJweDsgd2lkdGg6IDIwMHB4O1wiIFsobmdNb2RlbCldPVwicm9sZVtjYXBJdGVtLm5hbWVdXCI+e3tjYXBJdGVtLmRpc3BsYXl9fTwvbWF0LWNoZWNrYm94PlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiBzdHlsZT1cIm1hcmdpbi1yaWdodDoyMHB4O21hcmdpbi1sZWZ0OiAwcHg7IFwiICpuZ0Zvcj1cImxldCBjYXBTdWJJdGVtIG9mIGNhcEl0ZW0uY2FwU3ViSXRlbXNcIj5cclxuXHJcbiAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggICBjb2xvcj1cInByaW1hcnlcIiBzdHlsZT1cIiBmb250LXNpemU6MTJweDsgd2lkdGg6IDIwMHB4O1wiIFsobmdNb2RlbCldPVwicm9sZVtjYXBTdWJJdGVtLm5hbWVdXCI+e3tjYXBTdWJJdGVtLmRpc3BsYXl9fTwvbWF0LWNoZWNrYm94PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiIHN0eWxlPVwibWFyZ2luLXJpZ2h0OjIwcHg7bWFyZ2luLWxlZnQ6IDBweDtcIiAqbmdGb3I9XCJsZXQgY2FwU3ViU3ViSXRlbSBvZiBjYXBTdWJJdGVtLmNhcFN1Ykl0ZW1zXCI+XHJcblxyXG4gICAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggICBjb2xvcj1cInByaW1hcnlcIiBzdHlsZT1cImZvbnQtc2l6ZToxMnB4OyB3aWR0aDogMjAwcHg7XCIgWyhuZ01vZGVsKV09XCJyb2xlW2NhcFN1YlN1Ykl0ZW0ubmFtZV1cIj57e2NhcFN1YlN1Ykl0ZW0uZGlzcGxheX19PC9tYXQtY2hlY2tib3g+XHJcblxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8L2Rpdj5cclxuXHJcblxyXG4gICAgICA8bWF0LWNhcmQtYWN0aW9ucz5cclxuXHJcbiAgICAgICAgPGJ1dHRvbiAgbWF0LW1pbmktZmFiIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCJ1cGRhdGVSb2xlKHJvbGUpXCIgc3R5bGU9XCJtYXJnaW4tcmlnaHQ6MTBweDtcIj5cclxuICAgICAgICAgICA8bWF0LWljb24+ZG9uZV9hbGw8L21hdC1pY29uPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICA8IS0tIDxidXR0b24gbWF0LW1pbmktZmFiIGNvbG9yPVwid2FyblwiIChjbGljayk9XCJlZGl0Um9sZShyb2xlKVwiIHN0eWxlPVwibWFyZ2luLXJpZ2h0OjEwcHhcIj5cclxuICAgICAgICAgIDxtYXQtaWNvbj5lZGl0PC9tYXQtaWNvbj5cclxuICAgICAgICA8L2J1dHRvbj4gLS0+XHJcblxyXG4gICAgICAgIDxidXR0b24gbWF0LW1pbmktZmFiIGNvbG9yPVwid2FyblwiIChjbGljayk9XCJkZWxldGVSb2xlKHJvbGUpXCIgc3R5bGU9XCJtYXJnaW4tcmlnaHQ6MTBweFwiPlxyXG4gICAgICAgICAgPG1hdC1pY29uPmRlbGV0ZTwvbWF0LWljb24+XHJcbiAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICA8L21hdC1jYXJkLWFjdGlvbnM+XHJcblxyXG4gICAgPC9tYXQtY2FyZD5cclxuXHJcbiAgPC9kaXY+XHJcblxyXG5cclxuPC9kaXY+XHJcblxyXG4iXX0=
91
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9sZXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGluLXNwYS9zcmMvbGliL2NvbXBvbmVudHMvcm9sZXMvcm9sZXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGluLXNwYS9zcmMvbGliL2NvbXBvbmVudHMvcm9sZXMvcm9sZXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxTQUFTLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBSXpELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7O0FBWTFELE1BQU0sT0FBTyxjQUFjO0lBQ3pCLFlBQW9CLFdBQXdCLEVBQVUsTUFBYyxFQUFVLFdBQXdCLEVBQVUsV0FBMkIsRUFBUyxNQUFpQixFQUFVLGNBQThCO1FBQXpMLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQVUsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUFVLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQVUsZ0JBQVcsR0FBWCxXQUFXLENBQWdCO1FBQVMsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQUFVLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQVE3TSxpQkFBWSxHQUFHLEtBQUssQ0FBQztRQUdyQixjQUFTLEdBQUcsSUFBSSxTQUFTLEVBQUUsQ0FBQztJQVhxTCxDQUFDO0lBRWxOLFFBQVE7UUFDTixJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5RCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBT0QsU0FBUztRQUNQLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRTtZQUM1RCxJQUFJLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQztRQUMzQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxPQUFPO1FBQ0wsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFRCxPQUFPO1FBQ0wsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ2hELEtBQUssRUFBRSxRQUFRO1lBQ2YsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUTtTQUM5QixDQUFDLENBQUM7UUFFSCxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDM0MsSUFBSSxNQUFNLElBQUksU0FBUyxFQUFFO2dCQUN2QixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7YUFDbEI7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxVQUFVLENBQUMsSUFBVTtRQUVuQixJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxVQUFVLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBRTVFLElBQUksTUFBTSxJQUFJLEtBQUssRUFBRTtnQkFFbkIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFO29CQUVoRSxJQUFJLFdBQVcsQ0FBQyxPQUFPLEVBQUU7d0JBQ3ZCLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO3dCQUMxQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7cUJBQ2xCO3lCQUFNO3dCQUNMLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxXQUFXLENBQUMsQ0FBQztxQkFDcEQ7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7YUFFSjtRQUVILENBQUMsQ0FBQyxDQUFBO0lBR0osQ0FBQztJQUFBLENBQUM7SUFFRixVQUFVLENBQUMsSUFBVTtRQUVuQixJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxVQUFVLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBRTVFLElBQUksTUFBTSxJQUFJLEtBQUssRUFBRTtnQkFFbkIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFO29CQUNsRSxJQUFJLFdBQVcsQ0FBQyxPQUFPLEVBQUU7d0JBQ3ZCLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO3dCQUMxQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7cUJBQ2xCO3lCQUFNO3dCQUNMLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxXQUFXLENBQUMsQ0FBQztxQkFDcEQ7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7YUFFSjtRQUVILENBQUMsQ0FBQyxDQUFBO0lBRUosQ0FBQzs7MkdBL0VVLGNBQWM7K0ZBQWQsY0FBYyxpRENqQjNCLCtsRUFvRUE7MkZEbkRhLGNBQWM7a0JBTDFCLFNBQVM7K0JBQ0UsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFwcENvbmZpZyB9IGZyb20gJy4vLi4vLi4vY2xhc3Nlcy9DbGFzc2VzJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2RpYWxvZ1wiO1xyXG5pbXBvcnQgeyBEYXRhU2VydmljZUxpYiB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9kYXRhLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgUm9sZSwgQ2FwSXRlbSB9IGZyb20gXCIuLi8uLi9jbGFzc2VzL0NsYXNzZXNcIjtcclxuaW1wb3J0IHsgYWRkUm9sZURpYWxvZyB9IGZyb20gXCIuL2FkZFJvbGVEaWFsb2cuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuaW1wb3J0IHsgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tZXNzYWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2F1dGguc2VydmljZSc7XHJcbmltcG9ydCB7IEh0dHBTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvaHR0cC5zZXJ2aWNlJztcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJzcGEtcm9sZXNcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL3JvbGVzLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmxzOiBbXCIuL3JvbGVzLmNvbXBvbmVudC5jc3NcIl0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSb2xlc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwU2VydmljZTogSHR0cFNlcnZpY2UsIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLCBwcml2YXRlIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZUxpYiwgcHVibGljIGRpYWxvZzogTWF0RGlhbG9nLCBwcml2YXRlIG1lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlU2VydmljZSkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5hdXRoU2VydmljZS5pc0F1dGhvcmlzZWQodGhpcy5kYXRhU2VydmljZS5jYXBSb2xlcy5uYW1lKTtcclxuICAgIHRoaXMubG9hZFJvbGVzKCk7XHJcbiAgICB0aGlzLmRhdGFTZXJ2aWNlLmFwcENvbmZpZ09ic2Vydi5zdWJzY3JpYmUoeCA9PiB0aGlzLmFwcENvbmZpZyA9IHgpO1xyXG4gIH1cclxuXHJcbiAgaXNQcm9jZXNzaW5nID0gZmFsc2U7XHJcbiAgcm9sZXM6IFJvbGVbXTtcclxuXHJcbiAgYXBwQ29uZmlnID0gbmV3IEFwcENvbmZpZygpO1xyXG5cclxuICBsb2FkUm9sZXMoKSB7XHJcbiAgICB0aGlzLmRhdGFTZXJ2aWNlLkdldFJvbGUoXCJhbGxcIiwgXCJcIikuc3Vic2NyaWJlKChhcGlSZXNwb25zZSkgPT4ge1xyXG4gICAgICB0aGlzLnJvbGVzID0gYXBpUmVzcG9uc2U7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHJlZnJlc2goKSB7XHJcbiAgICB0aGlzLmxvYWRSb2xlcygpO1xyXG4gIH1cclxuXHJcbiAgYWRkUm9sZSgpIHtcclxuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oYWRkUm9sZURpYWxvZywge1xyXG4gICAgICB3aWR0aDogXCIxMTAwcHhcIixcclxuICAgICAgZGF0YTogdGhpcy5hcHBDb25maWcuY2FwSXRlbXMsXHJcbiAgICB9KTtcclxuXHJcbiAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICBpZiAocmVzdWx0ID09IFwic3VjY2Vzc1wiKSB7XHJcbiAgICAgICAgdGhpcy5sb2FkUm9sZXMoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVSb2xlKHJvbGU6IFJvbGUpIHtcclxuXHJcbiAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmNvbmZpcm0oYFVQREFURSAke3JvbGUucm9sZU5hbWV9ID9gKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG5cclxuICAgICAgaWYgKHJlc3VsdCA9PSBcInllc1wiKSB7XHJcblxyXG4gICAgICAgIHRoaXMuZGF0YVNlcnZpY2UuUG9zdFJvbGUocm9sZSwgXCJlZGl0XCIpLnN1YnNjcmliZSgoYXBpUmVzcG9uc2UpID0+IHtcclxuXHJcbiAgICAgICAgICBpZiAoYXBpUmVzcG9uc2Uuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnRvYXN0KFwiUm9sZSBVcGRhdGVkXCIpO1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRSb2xlcygpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS50b2FzdChcIkVycm9yOiBcIiArIGFwaVJlc3BvbnNlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgIH1cclxuXHJcbiAgICB9KVxyXG5cclxuXHJcbiAgfTtcclxuXHJcbiAgZGVsZXRlUm9sZShyb2xlOiBSb2xlKSB7XHJcblxyXG4gICAgdGhpcy5tZXNzYWdlU2VydmljZS5jb25maXJtKGBERUxFVEUgJHtyb2xlLnJvbGVOYW1lfSA/YCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuXHJcbiAgICAgIGlmIChyZXN1bHQgPT0gXCJ5ZXNcIikge1xyXG5cclxuICAgICAgICB0aGlzLmRhdGFTZXJ2aWNlLlBvc3RSb2xlKHJvbGUsIFwiZGVsZXRlXCIpLnN1YnNjcmliZSgoYXBpUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIGlmIChhcGlSZXNwb25zZS5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UudG9hc3QoXCJSb2xlIERlbGV0ZWRcIik7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZFJvbGVzKCk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnRvYXN0KFwiRXJyb3I6IFwiICsgYXBpUmVzcG9uc2UpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgfVxyXG5cclxuICAgIH0pXHJcblxyXG4gIH1cclxufVxyXG4iLCI8aDQ+IFJvbGVzIDwvaDQ+XHJcbjxociAvPlxyXG5cclxuPGRpdiBjbGFzcz1cImNvbnRhaW5lciBtYi01XCI+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gbWItMlwiPlxyXG5cclxuICAgIDxkaXYgPlxyXG4gICAgICA8YnV0dG9uIGlkPVwiYnRuTmV3Um9sZVwiIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCJhZGRSb2xlKClcIj5OZXcgUm9sZTwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICAgIDxidXR0b24gaWQ9XCJidG5SZWZyZXNoXCIgbWF0LW1pbmktZmFiIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCJyZWZyZXNoKClcIiAgbWF0VG9vbHRpcD1cInJlZnJlc2ggZGF0YVwiIG1hdFRvb2x0aXBQb3NpdGlvbj1cInJpZ2h0XCI+PG1hdC1pY29uIGNsYXNzPVwicmVmcmVzaEljb25cIj5yZWZyZXNoPC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG5cclxuICA8L2Rpdj5cclxuXHJcblxyXG4gIDxkaXYgY2xhc3M9XCJyb3cgbXQtMiBtYi0xXCIgICpuZ0Zvcj1cImxldCByb2xlIG9mIHJvbGVzXCI+XHJcblxyXG4gICAgPG1hdC1jYXJkIGNsYXNzPVwibWF0LWVsZXZhdGlvbi16OFwiIHN0eWxlPVwid2lkdGg6MTAwJVwiPlxyXG5cclxuICAgICAgPGg0Pnt7cm9sZS5yb2xlTmFtZX19PC9oND5cclxuICAgICAgPGhyIC8+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwidGluLXJvd1wiIHN0eWxlPVwiIGZvbnQtc2l6ZToxMnB4O1wiPlxyXG5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInRpbi1yb3dcIiAgKm5nRm9yPVwibGV0IGNhcEl0ZW0gb2YgYXBwQ29uZmlnLmNhcEl0ZW1zXCI+XHJcblxyXG4gICAgICAgICAgPG1hdC1jaGVja2JveCBjb2xvcj1cInByaW1hcnlcIiBzdHlsZT1cIm1pbi13aWR0aDogMjAwcHg7XCIgWyhuZ01vZGVsKV09XCJyb2xlW2NhcEl0ZW0ubmFtZV1cIj57e2NhcEl0ZW0uZGlzcGxheX19PC9tYXQtY2hlY2tib3g+XHJcblxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRpbi1yb3dcIiAgKm5nRm9yPVwibGV0IGNhcFN1Ykl0ZW0gb2YgY2FwSXRlbS5jYXBTdWJJdGVtc1wiPlxyXG5cclxuICAgICAgICAgICAgPG1hdC1jaGVja2JveCBjb2xvcj1cInByaW1hcnlcIiBzdHlsZT1cIm1pbi13aWR0aDogMjAwcHg7XCIgWyhuZ01vZGVsKV09XCJyb2xlW2NhcFN1Ykl0ZW0ubmFtZV1cIj57e2NhcFN1Ykl0ZW0uZGlzcGxheX19PC9tYXQtY2hlY2tib3g+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGluLXJvd1wiICAqbmdGb3I9XCJsZXQgY2FwU3ViU3ViSXRlbSBvZiBjYXBTdWJJdGVtLmNhcFN1Ykl0ZW1zXCI+XHJcblxyXG4gICAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggY29sb3I9XCJwcmltYXJ5XCIgc3R5bGU9XCJtaW4td2lkdGg6IDIwMHB4O1wiIFsobmdNb2RlbCldPVwicm9sZVtjYXBTdWJTdWJJdGVtLm5hbWVdXCI+e3tjYXBTdWJTdWJJdGVtLmRpc3BsYXl9fTwvbWF0LWNoZWNrYm94PlxyXG5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPC9kaXY+XHJcblxyXG5cclxuICAgICAgPG1hdC1jYXJkLWFjdGlvbnM+XHJcblxyXG4gICAgICAgIDxidXR0b24gIG1hdC1taW5pLWZhYiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwidXBkYXRlUm9sZShyb2xlKVwiIHN0eWxlPVwibWFyZ2luLXJpZ2h0OjEwcHg7XCI+XHJcbiAgICAgICAgICAgPG1hdC1pY29uPmRvbmVfYWxsPC9tYXQtaWNvbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgPGJ1dHRvbiBtYXQtbWluaS1mYWIgY29sb3I9XCJ3YXJuXCIgKGNsaWNrKT1cImRlbGV0ZVJvbGUocm9sZSlcIiBzdHlsZT1cIm1hcmdpbi1yaWdodDoxMHB4XCI+XHJcbiAgICAgICAgICA8bWF0LWljb24+ZGVsZXRlPC9tYXQtaWNvbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgIDwvbWF0LWNhcmQtYWN0aW9ucz5cclxuXHJcbiAgICA8L21hdC1jYXJkPlxyXG5cclxuICA8L2Rpdj5cclxuXHJcblxyXG48L2Rpdj5cclxuXHJcbiJdfQ==