monkey-front-components 0.0.568 → 0.0.570
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.
- package/README.md +24 -24
- package/esm2020/lib/components/base/base-component.mjs +333 -333
- package/esm2020/lib/components/base/base-dynamic-array.mjs +221 -221
- package/esm2020/lib/components/base/base-dynamic.mjs +102 -102
- package/esm2020/lib/components/base/base-scroll-component.mjs +55 -55
- package/esm2020/lib/components/base/base-validators.mjs +19 -19
- package/esm2020/lib/components/base/index.mjs +6 -6
- package/esm2020/lib/components/dynamic/button/button.component.mjs +52 -52
- package/esm2020/lib/components/dynamic/button/index.mjs +2 -2
- package/esm2020/lib/components/dynamic/dynamic-directive.mjs +95 -95
- package/esm2020/lib/components/dynamic/dynamic.module.mjs +84 -84
- package/esm2020/lib/components/dynamic/file-upload/file-upload.component.mjs +53 -53
- package/esm2020/lib/components/dynamic/file-upload/index.mjs +2 -2
- package/esm2020/lib/components/dynamic/form/dynamic-form-array.component.mjs +72 -72
- package/esm2020/lib/components/dynamic/form/dynamic-form.component.mjs +46 -46
- package/esm2020/lib/components/dynamic/form/index.mjs +3 -3
- package/esm2020/lib/components/dynamic/index.mjs +9 -9
- package/esm2020/lib/components/dynamic/input/index.mjs +2 -2
- package/esm2020/lib/components/dynamic/input/input.component.mjs +65 -65
- package/esm2020/lib/components/dynamic/input-phone/index.mjs +2 -2
- package/esm2020/lib/components/dynamic/input-phone/input-phone.component.mjs +65 -65
- package/esm2020/lib/components/dynamic/radio/index.mjs +2 -2
- package/esm2020/lib/components/dynamic/radio/radio.component.mjs +33 -33
- package/esm2020/lib/components/dynamic/select/index.mjs +2 -2
- package/esm2020/lib/components/dynamic/select/select.component.mjs +80 -80
- package/esm2020/lib/components/dynamic/select-search/index.mjs +2 -2
- package/esm2020/lib/components/dynamic/select-search/select-search.component.mjs +86 -86
- package/esm2020/lib/components/index.mjs +4 -4
- package/esm2020/lib/components/shared/filter/filter.component.mjs +142 -142
- package/esm2020/lib/components/shared/filter/filter.module.mjs +67 -67
- package/esm2020/lib/components/shared/filter/index.mjs +3 -3
- package/esm2020/lib/components/shared/filter/menu/index.mjs +2 -2
- package/esm2020/lib/components/shared/filter/menu/menu.component.mjs +120 -120
- package/esm2020/lib/components/shared/filter/menu/menu.module.mjs +70 -70
- package/esm2020/lib/components/shared/filter/options/children/children.component.mjs +50 -50
- package/esm2020/lib/components/shared/filter/options/children/index.mjs +2 -2
- package/esm2020/lib/components/shared/filter/options/currency/currency.component.mjs +46 -46
- package/esm2020/lib/components/shared/filter/options/currency/index.mjs +2 -2
- package/esm2020/lib/components/shared/filter/options/date-range/date-range.component.mjs +65 -65
- package/esm2020/lib/components/shared/filter/options/date-range/index.mjs +2 -2
- package/esm2020/lib/components/shared/filter/options/index.mjs +2 -2
- package/esm2020/lib/components/shared/filter/options/input/index.mjs +2 -2
- package/esm2020/lib/components/shared/filter/options/input/input.component.mjs +46 -46
- package/esm2020/lib/components/shared/filter/options/options.component.mjs +102 -102
- package/esm2020/lib/components/shared/filter/options/options.module.mjs +103 -103
- package/esm2020/lib/components/shared/filter/options/status/index.mjs +2 -2
- package/esm2020/lib/components/shared/filter/options/status/status.component.mjs +66 -66
- package/esm2020/lib/components/shared/filter/options/status-radio/index.mjs +2 -2
- package/esm2020/lib/components/shared/filter/options/status-radio/status-radio.component.mjs +37 -37
- package/esm2020/lib/components/shared/filter/selected/index.mjs +2 -2
- package/esm2020/lib/components/shared/filter/selected/item/children/children.component.mjs +57 -57
- package/esm2020/lib/components/shared/filter/selected/item/children/index.mjs +2 -2
- package/esm2020/lib/components/shared/filter/selected/item/currency/currency.component.mjs +29 -29
- package/esm2020/lib/components/shared/filter/selected/item/currency/index.mjs +2 -2
- package/esm2020/lib/components/shared/filter/selected/item/date-range/date-range.component.mjs +42 -42
- package/esm2020/lib/components/shared/filter/selected/item/date-range/index.mjs +2 -2
- package/esm2020/lib/components/shared/filter/selected/item/date-with-action/date-with-action.component.mjs +33 -33
- package/esm2020/lib/components/shared/filter/selected/item/date-with-action/index.mjs +2 -2
- package/esm2020/lib/components/shared/filter/selected/item/index.mjs +9 -9
- package/esm2020/lib/components/shared/filter/selected/item/input/index.mjs +2 -2
- package/esm2020/lib/components/shared/filter/selected/item/input/input.component.mjs +28 -28
- package/esm2020/lib/components/shared/filter/selected/item/item.component.mjs +75 -75
- package/esm2020/lib/components/shared/filter/selected/item/status/index.mjs +2 -2
- package/esm2020/lib/components/shared/filter/selected/item/status/status.component.mjs +39 -39
- package/esm2020/lib/components/shared/filter/selected/item/status-radio/index.mjs +2 -2
- package/esm2020/lib/components/shared/filter/selected/item/status-radio/status-radio.component.mjs +29 -29
- package/esm2020/lib/components/shared/filter/selected/selected.component.mjs +85 -85
- package/esm2020/lib/components/shared/filter/selected/selected.module.mjs +92 -92
- package/esm2020/lib/components/shared/index.mjs +5 -5
- package/esm2020/lib/components/shared/password-strength/index.mjs +3 -3
- package/esm2020/lib/components/shared/password-strength/password-strength.component.mjs +85 -85
- package/esm2020/lib/components/shared/password-strength/password-strength.mjs +2 -2
- package/esm2020/lib/components/shared/password-strength/password-strength.module.mjs +50 -50
- package/esm2020/lib/components/shared/products/filter/filter.component.mjs +36 -36
- package/esm2020/lib/components/shared/products/index.mjs +3 -3
- package/esm2020/lib/components/shared/products/products.component.mjs +91 -91
- package/esm2020/lib/components/shared/products/products.module.mjs +22 -22
- package/esm2020/lib/components/shared/products/providers/index.mjs +2 -2
- package/esm2020/lib/components/shared/products/providers/products.model.mjs +38 -38
- package/esm2020/lib/components/shared/progress-bar/index.mjs +4 -4
- package/esm2020/lib/components/shared/progress-bar/progress-bar.component.mjs +28 -28
- package/esm2020/lib/components/shared/progress-bar/progress-bar.module.mjs +18 -18
- package/esm2020/lib/components/shared/progress-bar/progress-bar.service.mjs +49 -49
- package/esm2020/lib/interfaces/field-config.mjs +2 -2
- package/esm2020/lib/interfaces/index.mjs +2 -2
- package/esm2020/monkey-front-components.mjs +4 -4
- package/esm2020/public-api.mjs +5 -5
- package/fesm2015/monkey-front-components.mjs +2914 -2914
- package/fesm2015/monkey-front-components.mjs.map +1 -1
- package/fesm2020/monkey-front-components.mjs +2892 -2892
- package/fesm2020/monkey-front-components.mjs.map +1 -1
- package/lib/components/base/base-component.d.ts +54 -54
- package/lib/components/base/base-dynamic-array.d.ts +34 -34
- package/lib/components/base/base-dynamic.d.ts +25 -25
- package/lib/components/base/base-scroll-component.d.ts +16 -16
- package/lib/components/base/base-validators.d.ts +1 -1
- package/lib/components/base/index.d.ts +5 -5
- package/lib/components/dynamic/button/button.component.d.ts +17 -17
- package/lib/components/dynamic/button/index.d.ts +1 -1
- package/lib/components/dynamic/dynamic-directive.d.ts +22 -22
- package/lib/components/dynamic/dynamic.module.d.ts +20 -20
- package/lib/components/dynamic/file-upload/file-upload.component.d.ts +17 -17
- package/lib/components/dynamic/file-upload/index.d.ts +1 -1
- package/lib/components/dynamic/form/dynamic-form-array.component.d.ts +16 -16
- package/lib/components/dynamic/form/dynamic-form.component.d.ts +14 -14
- package/lib/components/dynamic/form/index.d.ts +2 -2
- package/lib/components/dynamic/index.d.ts +8 -8
- package/lib/components/dynamic/input/index.d.ts +1 -1
- package/lib/components/dynamic/input/input.component.d.ts +20 -20
- package/lib/components/dynamic/input-phone/index.d.ts +1 -1
- package/lib/components/dynamic/input-phone/input-phone.component.d.ts +20 -20
- package/lib/components/dynamic/radio/index.d.ts +1 -1
- package/lib/components/dynamic/radio/radio.component.d.ts +11 -11
- package/lib/components/dynamic/select/index.d.ts +1 -1
- package/lib/components/dynamic/select/select.component.d.ts +16 -16
- package/lib/components/dynamic/select-search/index.d.ts +1 -1
- package/lib/components/dynamic/select-search/select-search.component.d.ts +18 -18
- package/lib/components/index.d.ts +3 -3
- package/lib/components/shared/filter/filter.component.d.ts +40 -40
- package/lib/components/shared/filter/filter.module.d.ts +14 -14
- package/lib/components/shared/filter/index.d.ts +2 -2
- package/lib/components/shared/filter/menu/index.d.ts +1 -1
- package/lib/components/shared/filter/menu/menu.component.d.ts +24 -24
- package/lib/components/shared/filter/menu/menu.module.d.ts +14 -14
- package/lib/components/shared/filter/options/children/children.component.d.ts +17 -17
- package/lib/components/shared/filter/options/children/index.d.ts +1 -1
- package/lib/components/shared/filter/options/currency/currency.component.d.ts +17 -17
- package/lib/components/shared/filter/options/currency/index.d.ts +1 -1
- package/lib/components/shared/filter/options/date-range/date-range.component.d.ts +24 -24
- package/lib/components/shared/filter/options/date-range/index.d.ts +1 -1
- package/lib/components/shared/filter/options/index.d.ts +1 -1
- package/lib/components/shared/filter/options/input/index.d.ts +1 -1
- package/lib/components/shared/filter/options/input/input.component.d.ts +17 -17
- package/lib/components/shared/filter/options/options.component.d.ts +28 -28
- package/lib/components/shared/filter/options/options.module.d.ts +19 -19
- package/lib/components/shared/filter/options/status/index.d.ts +1 -1
- package/lib/components/shared/filter/options/status/status.component.d.ts +19 -19
- package/lib/components/shared/filter/options/status-radio/index.d.ts +1 -1
- package/lib/components/shared/filter/options/status-radio/status-radio.component.d.ts +15 -15
- package/lib/components/shared/filter/selected/index.d.ts +1 -1
- package/lib/components/shared/filter/selected/item/children/children.component.d.ts +16 -16
- package/lib/components/shared/filter/selected/item/children/index.d.ts +1 -1
- package/lib/components/shared/filter/selected/item/currency/currency.component.d.ts +11 -11
- package/lib/components/shared/filter/selected/item/currency/index.d.ts +1 -1
- package/lib/components/shared/filter/selected/item/date-range/date-range.component.d.ts +12 -12
- package/lib/components/shared/filter/selected/item/date-range/index.d.ts +1 -1
- package/lib/components/shared/filter/selected/item/date-with-action/date-with-action.component.d.ts +11 -11
- package/lib/components/shared/filter/selected/item/date-with-action/index.d.ts +1 -1
- package/lib/components/shared/filter/selected/item/index.d.ts +8 -8
- package/lib/components/shared/filter/selected/item/input/index.d.ts +1 -1
- package/lib/components/shared/filter/selected/item/input/input.component.d.ts +11 -11
- package/lib/components/shared/filter/selected/item/item.component.d.ts +20 -20
- package/lib/components/shared/filter/selected/item/status/index.d.ts +1 -1
- package/lib/components/shared/filter/selected/item/status/status.component.d.ts +13 -13
- package/lib/components/shared/filter/selected/item/status-radio/index.d.ts +1 -1
- package/lib/components/shared/filter/selected/item/status-radio/status-radio.component.d.ts +11 -11
- package/lib/components/shared/filter/selected/selected.component.d.ts +19 -19
- package/lib/components/shared/filter/selected/selected.module.d.ts +22 -22
- package/lib/components/shared/index.d.ts +4 -4
- package/lib/components/shared/password-strength/index.d.ts +2 -2
- package/lib/components/shared/password-strength/password-strength.component.d.ts +23 -23
- package/lib/components/shared/password-strength/password-strength.d.ts +5 -5
- package/lib/components/shared/password-strength/password-strength.module.d.ts +12 -12
- package/lib/components/shared/products/filter/filter.component.d.ts +12 -12
- package/lib/components/shared/products/index.d.ts +2 -2
- package/lib/components/shared/products/products.component.d.ts +20 -20
- package/lib/components/shared/products/products.module.d.ts +11 -11
- package/lib/components/shared/products/providers/index.d.ts +1 -1
- package/lib/components/shared/products/providers/products.model.d.ts +13 -13
- package/lib/components/shared/progress-bar/index.d.ts +3 -3
- package/lib/components/shared/progress-bar/progress-bar.component.d.ts +12 -12
- package/lib/components/shared/progress-bar/progress-bar.module.d.ts +8 -8
- package/lib/components/shared/progress-bar/progress-bar.service.d.ts +14 -14
- package/lib/interfaces/field-config.d.ts +54 -54
- package/lib/interfaces/index.d.ts +1 -1
- package/monkey-front-components-0.0.570.tgz +0 -0
- package/monkey-front-components.d.ts +5 -5
- package/package.json +5 -5
- package/public-api.d.ts +1 -1
- package/monkey-front-components-0.0.568.tgz +0 -0
|
@@ -1,333 +1,333 @@
|
|
|
1
|
-
/* eslint-disable max-len */
|
|
2
|
-
import { Directive } from '@angular/core';
|
|
3
|
-
import { MonkeyEcxCommonsService, MonkeyEcxUtils, ValidateUtils, Validators } from 'monkey-front-core';
|
|
4
|
-
import { MonkeyUtils } from 'monkey-style-guide';
|
|
5
|
-
import { Subject } from 'rxjs';
|
|
6
|
-
import { takeUntil } from 'rxjs/operators';
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
export class BaseComponent {
|
|
9
|
-
constructor() {
|
|
10
|
-
this.__paginationOptions = null;
|
|
11
|
-
this.__isMobile = this.isMobile();
|
|
12
|
-
this.__locales = ['pt-BR', 'es-CL', 'en-US'];
|
|
13
|
-
this.__unsubscribeAll = new Subject();
|
|
14
|
-
}
|
|
15
|
-
isMobile() {
|
|
16
|
-
const isMobileWidth = (window.screen.width <= 640) ||
|
|
17
|
-
(window.matchMedia &&
|
|
18
|
-
window.matchMedia('only screen and (max-width: 640px)').matches);
|
|
19
|
-
return (/Android|webOS|iPhone|iPad|iPod|BlackBerry|Mobile/i.test(navigator.userAgent)) || isMobileWidth;
|
|
20
|
-
}
|
|
21
|
-
handlePagination(create = true) {
|
|
22
|
-
const { __paginationOptions } = this;
|
|
23
|
-
if (__paginationOptions) {
|
|
24
|
-
const { mainElement, service } = __paginationOptions;
|
|
25
|
-
const element = document.getElementById(mainElement);
|
|
26
|
-
if (element) {
|
|
27
|
-
element.scroll = null;
|
|
28
|
-
element.onscroll = null;
|
|
29
|
-
element.removeEventListener('scroll', element.eventListeners('scroll'));
|
|
30
|
-
element.removeEventListener('scroll', element.eventListeners('scroll')[0]);
|
|
31
|
-
if (create) {
|
|
32
|
-
element.addEventListener('scroll', () => {
|
|
33
|
-
const { scrollTop, scrollHeight, offsetHeight } = element;
|
|
34
|
-
const contentHeight = scrollHeight - offsetHeight;
|
|
35
|
-
if (contentHeight <= scrollTop) {
|
|
36
|
-
service.doPagination();
|
|
37
|
-
}
|
|
38
|
-
});
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
handleSupport(supportControls) {
|
|
44
|
-
const { service, show } = supportControls;
|
|
45
|
-
const method = show ? 'show' : 'hide';
|
|
46
|
-
service[method.toLowerCase()]();
|
|
47
|
-
}
|
|
48
|
-
handleTranslate(translateOptions) {
|
|
49
|
-
const { service } = translateOptions;
|
|
50
|
-
service.__oni18nDataChanged$
|
|
51
|
-
.pipe(takeUntil(this.__unsubscribeAll))
|
|
52
|
-
.subscribe(() => {
|
|
53
|
-
const data = service.__i18n;
|
|
54
|
-
if (data) {
|
|
55
|
-
this.__i18n = data;
|
|
56
|
-
}
|
|
57
|
-
});
|
|
58
|
-
}
|
|
59
|
-
handleViewScroll(options) {
|
|
60
|
-
const { elementId, service } = options;
|
|
61
|
-
if (elementId === service?.__savedState?.scrollElementId) {
|
|
62
|
-
this.goScroll(elementId);
|
|
63
|
-
service.__savedState.scrollElementId = null;
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
getErrorFirstMessageTranslated(formControl = null) {
|
|
67
|
-
if (formControl?.hasError('required'))
|
|
68
|
-
return 'FIELD-REQUIRED';
|
|
69
|
-
if (formControl?.hasError('invalid'))
|
|
70
|
-
return 'FIELD-INVALID';
|
|
71
|
-
if (formControl?.hasError('email'))
|
|
72
|
-
return 'INVALID-EMAIL';
|
|
73
|
-
if (formControl?.hasError('minlength'))
|
|
74
|
-
return 'MIN-LENGTH';
|
|
75
|
-
if (formControl?.hasError('maxlength'))
|
|
76
|
-
return 'MAX-LENGTH';
|
|
77
|
-
if (formControl?.hasError('max'))
|
|
78
|
-
return 'MAX';
|
|
79
|
-
if (formControl?.hasError('min'))
|
|
80
|
-
return 'MIN';
|
|
81
|
-
if (formControl?.hasError('passwordsNotMatching'))
|
|
82
|
-
return 'MATCH-PASSWORD';
|
|
83
|
-
if (formControl?.hasError('invalidDate'))
|
|
84
|
-
return 'INVALID-DATE';
|
|
85
|
-
if (formControl?.hasError('invalidTrue'))
|
|
86
|
-
return 'INVALID-TRUE';
|
|
87
|
-
if (formControl?.hasError('invalidCpfCnpj'))
|
|
88
|
-
return 'INVALID-DOCUMENT';
|
|
89
|
-
if (formControl?.hasError('invalidZipCode'))
|
|
90
|
-
return 'INVALID-ZIPCODE';
|
|
91
|
-
if (formControl?.hasError('invalidCombo'))
|
|
92
|
-
return 'INVALID-COMBO';
|
|
93
|
-
if (formControl?.hasError('invalidUrl'))
|
|
94
|
-
return 'INVALID-URL';
|
|
95
|
-
if (formControl?.hasError('invalidUnlockRegister')) {
|
|
96
|
-
return 'INVALID-UNLOCK-REGISTER';
|
|
97
|
-
}
|
|
98
|
-
if (formControl?.hasError('dateStartMustBeLessThanAnd')) {
|
|
99
|
-
return 'DATE-START-MUST-BE-LESS-THAN-AND';
|
|
100
|
-
}
|
|
101
|
-
if (formControl?.hasError('dateEndMustBeGreaterThanStart')) {
|
|
102
|
-
return 'DATE-END-MUST-BE-GREATER-THAN-SART';
|
|
103
|
-
}
|
|
104
|
-
if (formControl?.hasError('phone'))
|
|
105
|
-
return 'INVALID-PHONE';
|
|
106
|
-
if (formControl?.hasError('invalidValueGreaterThanZero'))
|
|
107
|
-
return 'INVALID-GREATER-THAN-ZERO';
|
|
108
|
-
if (formControl?.hasError('dateRange'))
|
|
109
|
-
return 'INVALID-DATERANGE';
|
|
110
|
-
return 'FIELD-INVALID';
|
|
111
|
-
}
|
|
112
|
-
getErrorLastMessageNotTranslated(formControl = null) {
|
|
113
|
-
if (formControl?.hasError('minlength')) {
|
|
114
|
-
return `${formControl?.getError('minlength').requiredLength} caracteres.`;
|
|
115
|
-
}
|
|
116
|
-
if (formControl?.hasError('maxlength')) {
|
|
117
|
-
return `${formControl?.getError('maxlength').requiredLength} caracteres.`;
|
|
118
|
-
}
|
|
119
|
-
if (formControl?.hasError('max')) {
|
|
120
|
-
return `${formControl?.getError('max').max}`;
|
|
121
|
-
}
|
|
122
|
-
if (formControl?.hasError('min')) {
|
|
123
|
-
return `${formControl?.getError('min').min}`;
|
|
124
|
-
}
|
|
125
|
-
return '';
|
|
126
|
-
}
|
|
127
|
-
validateFormWithTranslate(f, index) {
|
|
128
|
-
const formErrors = f.value;
|
|
129
|
-
if (f.status === 'VALID')
|
|
130
|
-
return true;
|
|
131
|
-
if (!formErrors)
|
|
132
|
-
return true;
|
|
133
|
-
Object.entries(formErrors).forEach(([key, value]) => {
|
|
134
|
-
const control = f.get(key);
|
|
135
|
-
formErrors[key] = '';
|
|
136
|
-
if (control && !control.valid) {
|
|
137
|
-
const msg = {
|
|
138
|
-
first: `ERRORS.${this.getErrorFirstMessageTranslated(f.get(key))}`,
|
|
139
|
-
last: this.getErrorLastMessageNotTranslated(f.get(key))
|
|
140
|
-
};
|
|
141
|
-
formErrors[key] = msg;
|
|
142
|
-
}
|
|
143
|
-
});
|
|
144
|
-
if (MonkeyUtils.persistNullEmptyUndefined(index)) {
|
|
145
|
-
this.__monkeyecxFormErrors[index || 0] = formErrors;
|
|
146
|
-
}
|
|
147
|
-
else {
|
|
148
|
-
this.__monkeyecxFormErrors = formErrors;
|
|
149
|
-
}
|
|
150
|
-
return false;
|
|
151
|
-
}
|
|
152
|
-
copyToClipboard(val) {
|
|
153
|
-
const selBox = document.createElement('textarea');
|
|
154
|
-
selBox.style.position = 'fixed';
|
|
155
|
-
selBox.style.left = '0';
|
|
156
|
-
selBox.style.top = '0';
|
|
157
|
-
selBox.style.opacity = '0';
|
|
158
|
-
selBox.value = val;
|
|
159
|
-
document.body.appendChild(selBox);
|
|
160
|
-
selBox.focus();
|
|
161
|
-
selBox.select();
|
|
162
|
-
document.execCommand('copy');
|
|
163
|
-
document.body.removeChild(selBox);
|
|
164
|
-
}
|
|
165
|
-
validateForm(f, index, alias) {
|
|
166
|
-
const formErrors = f.value;
|
|
167
|
-
if (f.status === 'VALID')
|
|
168
|
-
return true;
|
|
169
|
-
if (!formErrors)
|
|
170
|
-
return true;
|
|
171
|
-
Object.entries(formErrors).forEach(([key, value]) => {
|
|
172
|
-
const control = f.get(key);
|
|
173
|
-
formErrors[key] = '';
|
|
174
|
-
if (control && !control.valid) {
|
|
175
|
-
const msg = {
|
|
176
|
-
firstMessage: `ERRORS.${this.getErrorFirstMessageTranslated(f.get(key))}`,
|
|
177
|
-
lastMessage: this.getErrorLastMessageNotTranslated(f.get(key))
|
|
178
|
-
};
|
|
179
|
-
formErrors[key] = msg;
|
|
180
|
-
}
|
|
181
|
-
});
|
|
182
|
-
if (MonkeyUtils.persistNullEmptyUndefined(index)) {
|
|
183
|
-
this.__monkeyecxFormErrors[index || 0] = formErrors;
|
|
184
|
-
}
|
|
185
|
-
else {
|
|
186
|
-
let obj;
|
|
187
|
-
if (alias) {
|
|
188
|
-
obj = {
|
|
189
|
-
[alias]: {
|
|
190
|
-
...formErrors
|
|
191
|
-
}
|
|
192
|
-
};
|
|
193
|
-
}
|
|
194
|
-
else {
|
|
195
|
-
obj = formErrors;
|
|
196
|
-
}
|
|
197
|
-
this.__monkeyecxFormErrors = {
|
|
198
|
-
...this.__monkeyecxFormErrors,
|
|
199
|
-
...obj
|
|
200
|
-
};
|
|
201
|
-
}
|
|
202
|
-
f.markAllAsTouched();
|
|
203
|
-
return false;
|
|
204
|
-
}
|
|
205
|
-
clearAllServiceData(clearData) {
|
|
206
|
-
const context = this;
|
|
207
|
-
Object.values(context).forEach((ctx) => {
|
|
208
|
-
if (ctx instanceof MonkeyEcxCommonsService) {
|
|
209
|
-
ctx.clear(clearData);
|
|
210
|
-
}
|
|
211
|
-
});
|
|
212
|
-
}
|
|
213
|
-
ngOnInit(args) {
|
|
214
|
-
if (args?.paginationOptions) {
|
|
215
|
-
this.__paginationOptions = args?.paginationOptions;
|
|
216
|
-
this.handlePagination();
|
|
217
|
-
}
|
|
218
|
-
if (args?.supportControls) {
|
|
219
|
-
this.handleSupport(args?.supportControls);
|
|
220
|
-
}
|
|
221
|
-
if (args?.translateOptions) {
|
|
222
|
-
this.handleTranslate(args?.translateOptions);
|
|
223
|
-
}
|
|
224
|
-
if (args?.scrollOptions) {
|
|
225
|
-
this.handleViewScroll(args.scrollOptions);
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
ngOnDestroy(clearData = true) {
|
|
229
|
-
this.__unsubscribeAll.next();
|
|
230
|
-
this.__unsubscribeAll.complete();
|
|
231
|
-
this.clearAllServiceData(clearData);
|
|
232
|
-
this.handlePagination(false);
|
|
233
|
-
}
|
|
234
|
-
handleErrorFromServices(error, f) {
|
|
235
|
-
this.__monkeyecxFormErrors = null;
|
|
236
|
-
if (error.type === 'Parameter_Error') {
|
|
237
|
-
Object.entries(f.value).forEach(([key, value]) => {
|
|
238
|
-
error.notifications.forEach((_) => {
|
|
239
|
-
const field = _.split(':')[0];
|
|
240
|
-
const description = _.split(':')[1];
|
|
241
|
-
if (field === key) {
|
|
242
|
-
const msg = {
|
|
243
|
-
firstMessage: '',
|
|
244
|
-
lastMessage: description
|
|
245
|
-
};
|
|
246
|
-
this.__monkeyecxFormErrors = {
|
|
247
|
-
...this.__monkeyecxFormErrors,
|
|
248
|
-
[key]: msg
|
|
249
|
-
};
|
|
250
|
-
f.controls[key].setErrors({
|
|
251
|
-
incorrect: true
|
|
252
|
-
});
|
|
253
|
-
}
|
|
254
|
-
});
|
|
255
|
-
});
|
|
256
|
-
}
|
|
257
|
-
f.markAllAsTouched();
|
|
258
|
-
}
|
|
259
|
-
goBack() {
|
|
260
|
-
window.history.back();
|
|
261
|
-
}
|
|
262
|
-
goScroll(id) {
|
|
263
|
-
const element = document.getElementById(id);
|
|
264
|
-
if (element)
|
|
265
|
-
element.scrollIntoView();
|
|
266
|
-
}
|
|
267
|
-
getEmbeddedData(data, field) {
|
|
268
|
-
const { _embedded } = data;
|
|
269
|
-
return _embedded ? _embedded[field] : null;
|
|
270
|
-
}
|
|
271
|
-
openWindow(url) {
|
|
272
|
-
window.open(`${url}`, '_blank');
|
|
273
|
-
}
|
|
274
|
-
fillI18n(data) {
|
|
275
|
-
this.__i18n = data;
|
|
276
|
-
}
|
|
277
|
-
getCountryPrefix(country) {
|
|
278
|
-
return {
|
|
279
|
-
br: 55,
|
|
280
|
-
cl: 56
|
|
281
|
-
}[country];
|
|
282
|
-
}
|
|
283
|
-
getCountryCurrencyChartFormat(country) {
|
|
284
|
-
return {
|
|
285
|
-
br: 'R$ #,###,##0.00',
|
|
286
|
-
cl: 'CLP #,###,##0'
|
|
287
|
-
}[country];
|
|
288
|
-
}
|
|
289
|
-
getCountryDocumentMask(type, country) {
|
|
290
|
-
return MonkeyEcxUtils.getDocumentMask(type, country);
|
|
291
|
-
}
|
|
292
|
-
getCountryDocumentPlaceholder(type, country) {
|
|
293
|
-
return MonkeyEcxUtils.getDocumentPlaceholder(type, country);
|
|
294
|
-
}
|
|
295
|
-
getCountryValidators(country) {
|
|
296
|
-
return {
|
|
297
|
-
br: {
|
|
298
|
-
governmentId: ValidateUtils.DocumentValidator,
|
|
299
|
-
zipCode: Validators.zipCodeByCountry(country)
|
|
300
|
-
},
|
|
301
|
-
cl: {
|
|
302
|
-
governmentId: ValidateUtils.DocumentRutValidator,
|
|
303
|
-
zipCode: Validators.zipCodeByCountry(country)
|
|
304
|
-
}
|
|
305
|
-
}[country];
|
|
306
|
-
}
|
|
307
|
-
isAbleToHandlePagination() {
|
|
308
|
-
const { __paginationOptions } = this;
|
|
309
|
-
if (__paginationOptions) {
|
|
310
|
-
const { service } = __paginationOptions;
|
|
311
|
-
const links = service.__links;
|
|
312
|
-
if (links && links?.next)
|
|
313
|
-
return true;
|
|
314
|
-
}
|
|
315
|
-
return false;
|
|
316
|
-
}
|
|
317
|
-
onHandlePagination() {
|
|
318
|
-
const { __paginationOptions } = this;
|
|
319
|
-
if (__paginationOptions) {
|
|
320
|
-
const { service } = __paginationOptions;
|
|
321
|
-
service.doPagination();
|
|
322
|
-
}
|
|
323
|
-
}
|
|
324
|
-
}
|
|
325
|
-
BaseComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.
|
|
326
|
-
BaseComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.
|
|
327
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.
|
|
328
|
-
type: Directive,
|
|
329
|
-
args: [{
|
|
330
|
-
selector: '[baseComponent]'
|
|
331
|
-
}]
|
|
332
|
-
}], ctorParameters: function () { return []; } });
|
|
333
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tb25rZXktZnJvbnQtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvYmFzZS9iYXNlLWNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSw0QkFBNEI7QUFDNUIsT0FBTyxFQUFFLFNBQVMsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUVyRCxPQUFPLEVBQ0wsdUJBQXVCLEVBTXZCLGNBQWMsRUFDZCxhQUFhLEVBQ2IsVUFBVSxFQUNYLE1BQU0sbUJBQW1CLENBQUM7QUFDM0IsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQUszQyxNQUFNLE9BQWdCLGFBQWE7SUFlakM7UUFWQSx3QkFBbUIsR0FBc0MsSUFBSSxDQUFDO1FBSTlELGVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFFN0IsY0FBUyxHQUFHLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUt0QyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0lBRU8sUUFBUTtRQUNkLE1BQU0sYUFBYSxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksR0FBRyxDQUFDO1lBQ2hELENBQUMsTUFBTSxDQUFDLFVBQVU7Z0JBQ2hCLE1BQU0sQ0FBQyxVQUFVLENBQUMsb0NBQW9DLENBQUMsQ0FBQyxPQUFPLENBQ2hFLENBQUM7UUFDSixPQUFPLENBQUMsbURBQW1ELENBQUMsSUFBSSxDQUM5RCxTQUFTLENBQUMsU0FBUyxDQUNwQixDQUFDLElBQUksYUFBYSxDQUFDO0lBQ3RC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QUUsbUJBQW1CLEVBQUUsR0FBRyxJQUFJLENBQUM7UUFFckMsSUFBSSxtQkFBbUIsRUFBRTtZQUN2QixNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsbUJBQW1CLENBQUM7WUFDeEMsT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDO1NBQ3hCO0lBQ0gsQ0FBQzs7MkdBN1ZtQixhQUFhOytGQUFiLGFBQWE7NEZBQWIsYUFBYTtrQkFIbEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsaUJBQWlCO2lCQUM1QiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi9cbmltcG9ydCB7IERpcmVjdGl2ZSwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gIE1vbmtleUVjeENvbW1vbnNTZXJ2aWNlLFxuICBNb25rZXlFY3hFcnJvclJlc3BvbnNlLFxuICBNb25rZXlFY3hQYWdpbmF0aW9uT3B0aW9ucyxcbiAgTW9ua2V5RWN4U2Nyb2xsT3B0aW9ucyxcbiAgTW9ua2V5RWN4U3VwcG9ydE9wdGlvbnMsXG4gIE1vbmtleUVjeFRyYW5zbGF0ZU9wdGlvbnMsXG4gIE1vbmtleUVjeFV0aWxzLFxuICBWYWxpZGF0ZVV0aWxzLFxuICBWYWxpZGF0b3JzXG59IGZyb20gJ21vbmtleS1mcm9udC1jb3JlJztcbmltcG9ydCB7IE1vbmtleVV0aWxzIH0gZnJvbSAnbW9ua2V5LXN0eWxlLWd1aWRlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2Jhc2VDb21wb25lbnRdJ1xufSlcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgX19tb25rZXllY3hGb3JtRXJyb3JzOiBhbnkgfCBhbnlbXTtcblxuICBfX3Vuc3Vic2NyaWJlQWxsOiBTdWJqZWN0PGFueT47XG5cbiAgX19wYWdpbmF0aW9uT3B0aW9uczogTW9ua2V5RWN4UGFnaW5hdGlvbk9wdGlvbnMgfCBudWxsID0gbnVsbDtcblxuICBfX2kxOG46IGFueTtcblxuICBfX2lzTW9iaWxlID0gdGhpcy5pc01vYmlsZSgpO1xuXG4gIF9fbG9jYWxlcyA9IFsncHQtQlInLCAnZXMtQ0wnLCAnZW4tVVMnXTtcblxuICBwcml2YXRlIHBhZ2luYXRpb25GdW5jOiBhbnk7XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuX191bnN1YnNjcmliZUFsbCA9IG5ldyBTdWJqZWN0KCk7XG4gIH1cblxuICBwcml2YXRlIGlzTW9iaWxlKCkge1xuICAgIGNvbnN0IGlzTW9iaWxlV2lkdGggPSAod2luZG93LnNjcmVlbi53aWR0aCA8PSA2NDApIHx8XG4gICAgICAod2luZG93Lm1hdGNoTWVkaWEgJiZcbiAgICAgICAgd2luZG93Lm1hdGNoTWVkaWEoJ29ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA2NDBweCknKS5tYXRjaGVzXG4gICAgICApO1xuICAgIHJldHVybiAoL0FuZHJvaWR8d2ViT1N8aVBob25lfGlQYWR8aVBvZHxCbGFja0JlcnJ5fE1vYmlsZS9pLnRlc3QoXG4gICAgICBuYXZpZ2F0b3IudXNlckFnZW50XG4gICAgKSkgfHwgaXNNb2JpbGVXaWR0aDtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlUGFnaW5hdGlvbihjcmVhdGUgPSB0cnVlKSB7XG4gICAgY29uc3QgeyBfX3BhZ2luYXRpb25PcHRpb25zIH0gPSB0aGlzO1xuXG4gICAgaWYgKF9fcGFnaW5hdGlvbk9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHsgbWFpbkVsZW1lbnQsIHNlcnZpY2UgfSA9IF9fcGFnaW5hdGlvbk9wdGlvbnM7XG5cbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChtYWluRWxlbWVudCk7XG5cbiAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgIGVsZW1lbnQuc2Nyb2xsID0gbnVsbDtcbiAgICAgICAgZWxlbWVudC5vbnNjcm9sbCA9IG51bGw7XG5cbiAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCAoZWxlbWVudCBhcyBhbnkpLmV2ZW50TGlzdGVuZXJzKCdzY3JvbGwnKSk7XG4gICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgKGVsZW1lbnQgYXMgYW55KS5ldmVudExpc3RlbmVycygnc2Nyb2xsJylbMF0pO1xuICAgICAgICBpZiAoY3JlYXRlKSB7XG4gICAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IHNjcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0LCBvZmZzZXRIZWlnaHQgfSA9IGVsZW1lbnQ7XG4gICAgICAgICAgICBjb25zdCBjb250ZW50SGVpZ2h0ID0gc2Nyb2xsSGVpZ2h0IC0gb2Zmc2V0SGVpZ2h0O1xuXG4gICAgICAgICAgICBpZiAoY29udGVudEhlaWdodCA8PSBzY3JvbGxUb3ApIHtcbiAgICAgICAgICAgICAgc2VydmljZS5kb1BhZ2luYXRpb24oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlU3VwcG9ydChzdXBwb3J0Q29udHJvbHM6IE1vbmtleUVjeFN1cHBvcnRPcHRpb25zKSB7XG4gICAgY29uc3QgeyBzZXJ2aWNlLCBzaG93IH0gPSBzdXBwb3J0Q29udHJvbHM7XG4gICAgY29uc3QgbWV0aG9kID0gc2hvdyA/ICdzaG93JyA6ICdoaWRlJztcbiAgICBzZXJ2aWNlW21ldGhvZC50b0xvd2VyQ2FzZSgpXSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVUcmFuc2xhdGUodHJhbnNsYXRlT3B0aW9uczogTW9ua2V5RWN4VHJhbnNsYXRlT3B0aW9ucykge1xuICAgIGNvbnN0IHsgc2VydmljZSB9ID0gdHJhbnNsYXRlT3B0aW9ucztcbiAgICBzZXJ2aWNlLl9fb25pMThuRGF0YUNoYW5nZWQkXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fX3Vuc3Vic2NyaWJlQWxsKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBjb25zdCBkYXRhID0gc2VydmljZS5fX2kxOG47XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgdGhpcy5fX2kxOG4gPSBkYXRhO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlVmlld1Njcm9sbChvcHRpb25zOiBNb25rZXlFY3hTY3JvbGxPcHRpb25zKSB7XG4gICAgY29uc3QgeyBlbGVtZW50SWQsIHNlcnZpY2UgfSA9IG9wdGlvbnM7XG5cbiAgICBpZiAoZWxlbWVudElkID09PSBzZXJ2aWNlPy5fX3NhdmVkU3RhdGU/LnNjcm9sbEVsZW1lbnRJZCkge1xuICAgICAgdGhpcy5nb1Njcm9sbChlbGVtZW50SWQpO1xuXG4gICAgICBzZXJ2aWNlLl9fc2F2ZWRTdGF0ZS5zY3JvbGxFbGVtZW50SWQgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0RXJyb3JGaXJzdE1lc3NhZ2VUcmFuc2xhdGVkKGZvcm1Db250cm9sOiBBYnN0cmFjdENvbnRyb2wgfCBudWxsID0gbnVsbCkge1xuICAgIGlmIChmb3JtQ29udHJvbD8uaGFzRXJyb3IoJ3JlcXVpcmVkJykpIHJldHVybiAnRklFTEQtUkVRVUlSRUQnO1xuICAgIGlmIChmb3JtQ29udHJvbD8uaGFzRXJyb3IoJ2ludmFsaWQnKSkgcmV0dXJuICdGSUVMRC1JTlZBTElEJztcbiAgICBpZiAoZm9ybUNvbnRyb2w/Lmhhc0Vycm9yKCdlbWFpbCcpKSByZXR1cm4gJ0lOVkFMSUQtRU1BSUwnO1xuICAgIGlmIChmb3JtQ29udHJvbD8uaGFzRXJyb3IoJ21pbmxlbmd0aCcpKSByZXR1cm4gJ01JTi1MRU5HVEgnO1xuICAgIGlmIChmb3JtQ29udHJvbD8uaGFzRXJyb3IoJ21heGxlbmd0aCcpKSByZXR1cm4gJ01BWC1MRU5HVEgnO1xuICAgIGlmIChmb3JtQ29udHJvbD8uaGFzRXJyb3IoJ21heCcpKSByZXR1cm4gJ01BWCc7XG4gICAgaWYgKGZvcm1Db250cm9sPy5oYXNFcnJvcignbWluJykpIHJldHVybiAnTUlOJztcbiAgICBpZiAoZm9ybUNvbnRyb2w/Lmhhc0Vycm9yKCdwYXNzd29yZHNOb3RNYXRjaGluZycpKSByZXR1cm4gJ01BVENILVBBU1NXT1JEJztcbiAgICBpZiAoZm9ybUNvbnRyb2w/Lmhhc0Vycm9yKCdpbnZhbGlkRGF0ZScpKSByZXR1cm4gJ0lOVkFMSUQtREFURSc7XG4gICAgaWYgKGZvcm1Db250cm9sPy5oYXNFcnJvcignaW52YWxpZFRydWUnKSkgcmV0dXJuICdJTlZBTElELVRSVUUnO1xuICAgIGlmIChmb3JtQ29udHJvbD8uaGFzRXJyb3IoJ2ludmFsaWRDcGZDbnBqJykpIHJldHVybiAnSU5WQUxJRC1ET0NVTUVOVCc7XG4gICAgaWYgKGZvcm1Db250cm9sPy5oYXNFcnJvcignaW52YWxpZFppcENvZGUnKSkgcmV0dXJuICdJTlZBTElELVpJUENPREUnO1xuICAgIGlmIChmb3JtQ29udHJvbD8uaGFzRXJyb3IoJ2ludmFsaWRDb21ibycpKSByZXR1cm4gJ0lOVkFMSUQtQ09NQk8nO1xuICAgIGlmIChmb3JtQ29udHJvbD8uaGFzRXJyb3IoJ2ludmFsaWRVcmwnKSkgcmV0dXJuICdJTlZBTElELVVSTCc7XG4gICAgaWYgKGZvcm1Db250cm9sPy5oYXNFcnJvcignaW52YWxpZFVubG9ja1JlZ2lzdGVyJykpIHsgcmV0dXJuICdJTlZBTElELVVOTE9DSy1SRUdJU1RFUic7IH1cbiAgICBpZiAoZm9ybUNvbnRyb2w/Lmhhc0Vycm9yKCdkYXRlU3RhcnRNdXN0QmVMZXNzVGhhbkFuZCcpKSB7XG4gICAgICByZXR1cm4gJ0RBVEUtU1RBUlQtTVVTVC1CRS1MRVNTLVRIQU4tQU5EJztcbiAgICB9XG4gICAgaWYgKGZvcm1Db250cm9sPy5oYXNFcnJvcignZGF0ZUVuZE11c3RCZUdyZWF0ZXJUaGFuU3RhcnQnKSkge1xuICAgICAgcmV0dXJuICdEQVRFLUVORC1NVVNULUJFLUdSRUFURVItVEhBTi1TQVJUJztcbiAgICB9XG4gICAgaWYgKGZvcm1Db250cm9sPy5oYXNFcnJvcigncGhvbmUnKSkgcmV0dXJuICdJTlZBTElELVBIT05FJztcbiAgICBpZiAoZm9ybUNvbnRyb2w/Lmhhc0Vycm9yKCdpbnZhbGlkVmFsdWVHcmVhdGVyVGhhblplcm8nKSkgcmV0dXJuICdJTlZBTElELUdSRUFURVItVEhBTi1aRVJPJztcbiAgICBpZiAoZm9ybUNvbnRyb2w/Lmhhc0Vycm9yKCdkYXRlUmFuZ2UnKSkgcmV0dXJuICdJTlZBTElELURBVEVSQU5HRSc7XG5cbiAgICByZXR1cm4gJ0ZJRUxELUlOVkFMSUQnO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRFcnJvckxhc3RNZXNzYWdlTm90VHJhbnNsYXRlZChmb3JtQ29udHJvbDogQWJzdHJhY3RDb250cm9sIHwgbnVsbCA9IG51bGwpIHtcbiAgICBpZiAoZm9ybUNvbnRyb2w/Lmhhc0Vycm9yKCdtaW5sZW5ndGgnKSkge1xuICAgICAgcmV0dXJuIGAke2Zvcm1Db250cm9sPy5nZXRFcnJvcignbWlubGVuZ3RoJykucmVxdWlyZWRMZW5ndGh9IGNhcmFjdGVyZXMuYDtcbiAgICB9XG4gICAgaWYgKGZvcm1Db250cm9sPy5oYXNFcnJvcignbWF4bGVuZ3RoJykpIHtcbiAgICAgIHJldHVybiBgJHtmb3JtQ29udHJvbD8uZ2V0RXJyb3IoJ21heGxlbmd0aCcpLnJlcXVpcmVkTGVuZ3RofSBjYXJhY3RlcmVzLmA7XG4gICAgfVxuICAgIGlmIChmb3JtQ29udHJvbD8uaGFzRXJyb3IoJ21heCcpKSB7IHJldHVybiBgJHtmb3JtQ29udHJvbD8uZ2V0RXJyb3IoJ21heCcpLm1heH1gOyB9XG4gICAgaWYgKGZvcm1Db250cm9sPy5oYXNFcnJvcignbWluJykpIHsgcmV0dXJuIGAke2Zvcm1Db250cm9sPy5nZXRFcnJvcignbWluJykubWlufWA7IH1cblxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHB1YmxpYyB2YWxpZGF0ZUZvcm1XaXRoVHJhbnNsYXRlKGY6IEZvcm1Hcm91cCwgaW5kZXg/OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCBmb3JtRXJyb3JzOiBhbnkgPSBmLnZhbHVlO1xuXG4gICAgaWYgKGYuc3RhdHVzID09PSAnVkFMSUQnKSByZXR1cm4gdHJ1ZTtcblxuICAgIGlmICghZm9ybUVycm9ycykgcmV0dXJuIHRydWU7XG4gICAgT2JqZWN0LmVudHJpZXMoZm9ybUVycm9ycykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICBjb25zdCBjb250cm9sID0gZi5nZXQoa2V5KTtcbiAgICAgIGZvcm1FcnJvcnNba2V5XSA9ICcnO1xuICAgICAgaWYgKGNvbnRyb2wgJiYgIWNvbnRyb2wudmFsaWQpIHtcbiAgICAgICAgY29uc3QgbXNnID0ge1xuICAgICAgICAgIGZpcnN0OiBgRVJST1JTLiR7dGhpcy5nZXRFcnJvckZpcnN0TWVzc2FnZVRyYW5zbGF0ZWQoZi5nZXQoa2V5KSl9YCxcbiAgICAgICAgICBsYXN0OiB0aGlzLmdldEVycm9yTGFzdE1lc3NhZ2VOb3RUcmFuc2xhdGVkKGYuZ2V0KGtleSkpXG4gICAgICAgIH07XG4gICAgICAgIGZvcm1FcnJvcnNba2V5XSA9IG1zZztcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChNb25rZXlVdGlscy5wZXJzaXN0TnVsbEVtcHR5VW5kZWZpbmVkKGluZGV4KSkgeyB0aGlzLl9fbW9ua2V5ZWN4Rm9ybUVycm9yc1tpbmRleCB8fCAwXSA9IGZvcm1FcnJvcnM7IH0gZWxzZSB7XG4gICAgICB0aGlzLl9fbW9ua2V5ZWN4Rm9ybUVycm9ycyA9IGZvcm1FcnJvcnM7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGNvcHlUb0NsaXBib2FyZCh2YWw6IHN0cmluZykge1xuICAgIGNvbnN0IHNlbEJveCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RleHRhcmVhJyk7XG4gICAgc2VsQm94LnN0eWxlLnBvc2l0aW9uID0gJ2ZpeGVkJztcbiAgICBzZWxCb3guc3R5bGUubGVmdCA9ICcwJztcbiAgICBzZWxCb3guc3R5bGUudG9wID0gJzAnO1xuICAgIHNlbEJveC5zdHlsZS5vcGFjaXR5ID0gJzAnO1xuICAgIHNlbEJveC52YWx1ZSA9IHZhbDtcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHNlbEJveCk7XG4gICAgc2VsQm94LmZvY3VzKCk7XG4gICAgc2VsQm94LnNlbGVjdCgpO1xuICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdjb3B5Jyk7XG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChzZWxCb3gpO1xuICB9XG5cbiAgcHVibGljIHZhbGlkYXRlRm9ybShmOiBGb3JtR3JvdXAsIGluZGV4PzogbnVtYmVyLCBhbGlhcz86IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGZvcm1FcnJvcnM6IGFueSA9IGYudmFsdWU7XG4gICAgaWYgKGYuc3RhdHVzID09PSAnVkFMSUQnKSByZXR1cm4gdHJ1ZTtcblxuICAgIGlmICghZm9ybUVycm9ycykgcmV0dXJuIHRydWU7XG4gICAgT2JqZWN0LmVudHJpZXMoZm9ybUVycm9ycykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICBjb25zdCBjb250cm9sID0gZi5nZXQoa2V5KTtcbiAgICAgIGZvcm1FcnJvcnNba2V5XSA9ICcnO1xuICAgICAgaWYgKGNvbnRyb2wgJiYgIWNvbnRyb2wudmFsaWQpIHtcbiAgICAgICAgY29uc3QgbXNnID0ge1xuICAgICAgICAgIGZpcnN0TWVzc2FnZTogYEVSUk9SUy4ke3RoaXMuZ2V0RXJyb3JGaXJzdE1lc3NhZ2VUcmFuc2xhdGVkKFxuICAgICAgICAgICAgZi5nZXQoa2V5KVxuICAgICAgICAgICl9YCxcbiAgICAgICAgICBsYXN0TWVzc2FnZTogdGhpcy5nZXRFcnJvckxhc3RNZXNzYWdlTm90VHJhbnNsYXRlZChmLmdldChrZXkpKVxuICAgICAgICB9O1xuICAgICAgICBmb3JtRXJyb3JzW2tleV0gPSBtc2c7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoTW9ua2V5VXRpbHMucGVyc2lzdE51bGxFbXB0eVVuZGVmaW5lZChpbmRleCkpIHtcbiAgICAgIHRoaXMuX19tb25rZXllY3hGb3JtRXJyb3JzW2luZGV4IHx8IDBdID0gZm9ybUVycm9ycztcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IG9iajogYW55O1xuXG4gICAgICBpZiAoYWxpYXMpIHtcbiAgICAgICAgb2JqID0ge1xuICAgICAgICAgIFthbGlhc106IHtcbiAgICAgICAgICAgIC4uLmZvcm1FcnJvcnNcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvYmogPSBmb3JtRXJyb3JzO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9fbW9ua2V5ZWN4Rm9ybUVycm9ycyA9IHtcbiAgICAgICAgLi4udGhpcy5fX21vbmtleWVjeEZvcm1FcnJvcnMsXG4gICAgICAgIC4uLm9ialxuICAgICAgfTtcbiAgICB9XG4gICAgZi5tYXJrQWxsQXNUb3VjaGVkKCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGNsZWFyQWxsU2VydmljZURhdGEoY2xlYXJEYXRhOiBib29sZWFuKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXM7XG4gICAgT2JqZWN0LnZhbHVlcyhjb250ZXh0KS5mb3JFYWNoKChjdHg6IGFueSkgPT4ge1xuICAgICAgaWYgKGN0eCBpbnN0YW5jZW9mIE1vbmtleUVjeENvbW1vbnNTZXJ2aWNlKSB7XG4gICAgICAgIGN0eC5jbGVhcihjbGVhckRhdGEpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KGFyZ3M6IHtcbiAgICBwYWdpbmF0aW9uT3B0aW9ucz86IE1vbmtleUVjeFBhZ2luYXRpb25PcHRpb25zO1xuICAgIHN1cHBvcnRDb250cm9scz86IE1vbmtleUVjeFN1cHBvcnRPcHRpb25zO1xuICAgIHNjcm9sbE9wdGlvbnM/OiBNb25rZXlFY3hTY3JvbGxPcHRpb25zO1xuICAgIHRyYW5zbGF0ZU9wdGlvbnM/OiBNb25rZXlFY3hUcmFuc2xhdGVPcHRpb25zO1xuICB9KSB7XG4gICAgaWYgKGFyZ3M/LnBhZ2luYXRpb25PcHRpb25zKSB7XG4gICAgICB0aGlzLl9fcGFnaW5hdGlvbk9wdGlvbnMgPSBhcmdzPy5wYWdpbmF0aW9uT3B0aW9ucztcbiAgICAgIHRoaXMuaGFuZGxlUGFnaW5hdGlvbigpO1xuICAgIH1cbiAgICBpZiAoYXJncz8uc3VwcG9ydENvbnRyb2xzKSB7XG4gICAgICB0aGlzLmhhbmRsZVN1cHBvcnQoYXJncz8uc3VwcG9ydENvbnRyb2xzKTtcbiAgICB9XG4gICAgaWYgKGFyZ3M/LnRyYW5zbGF0ZU9wdGlvbnMpIHtcbiAgICAgIHRoaXMuaGFuZGxlVHJhbnNsYXRlKGFyZ3M/LnRyYW5zbGF0ZU9wdGlvbnMpO1xuICAgIH1cbiAgICBpZiAoYXJncz8uc2Nyb2xsT3B0aW9ucykge1xuICAgICAgdGhpcy5oYW5kbGVWaWV3U2Nyb2xsKGFyZ3Muc2Nyb2xsT3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KGNsZWFyRGF0YTogYm9vbGVhbiA9IHRydWUpIHtcbiAgICB0aGlzLl9fdW5zdWJzY3JpYmVBbGwubmV4dCgpO1xuICAgIHRoaXMuX191bnN1YnNjcmliZUFsbC5jb21wbGV0ZSgpO1xuICAgIHRoaXMuY2xlYXJBbGxTZXJ2aWNlRGF0YShjbGVhckRhdGEpO1xuICAgIHRoaXMuaGFuZGxlUGFnaW5hdGlvbihmYWxzZSk7XG4gIH1cblxuICBwdWJsaWMgaGFuZGxlRXJyb3JGcm9tU2VydmljZXMoZXJyb3I6IE1vbmtleUVjeEVycm9yUmVzcG9uc2UsIGY6IEZvcm1Hcm91cCkge1xuICAgIHRoaXMuX19tb25rZXllY3hGb3JtRXJyb3JzID0gbnVsbDtcbiAgICBpZiAoZXJyb3IudHlwZSA9PT0gJ1BhcmFtZXRlcl9FcnJvcicpIHtcbiAgICAgIE9iamVjdC5lbnRyaWVzKGYudmFsdWUpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICBlcnJvci5ub3RpZmljYXRpb25zLmZvckVhY2goKF86IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGZpZWxkID0gXy5zcGxpdCgnOicpWzBdO1xuICAgICAgICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gXy5zcGxpdCgnOicpWzFdO1xuICAgICAgICAgIGlmIChmaWVsZCA9PT0ga2V5KSB7XG4gICAgICAgICAgICBjb25zdCBtc2cgPSB7XG4gICAgICAgICAgICAgIGZpcnN0TWVzc2FnZTogJycsXG4gICAgICAgICAgICAgIGxhc3RNZXNzYWdlOiBkZXNjcmlwdGlvblxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMuX19tb25rZXllY3hGb3JtRXJyb3JzID0ge1xuICAgICAgICAgICAgICAuLi50aGlzLl9fbW9ua2V5ZWN4Rm9ybUVycm9ycyxcbiAgICAgICAgICAgICAgW2tleV06IG1zZ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGYuY29udHJvbHNba2V5XS5zZXRFcnJvcnMoe1xuICAgICAgICAgICAgICBpbmNvcnJlY3Q6IHRydWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmLm1hcmtBbGxBc1RvdWNoZWQoKTtcbiAgfVxuXG4gIHB1YmxpYyBnb0JhY2soKSB7XG4gICAgd2luZG93Lmhpc3RvcnkuYmFjaygpO1xuICB9XG5cbiAgcHVibGljIGdvU2Nyb2xsKGlkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuICAgIGlmIChlbGVtZW50KSBlbGVtZW50LnNjcm9sbEludG9WaWV3KCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0RW1iZWRkZWREYXRhKGRhdGE6IGFueSwgZmllbGQ6IHN0cmluZyk6IGFueVtdIHwgYW55IHtcbiAgICBjb25zdCB7IF9lbWJlZGRlZCB9ID0gZGF0YTtcbiAgICByZXR1cm4gX2VtYmVkZGVkID8gX2VtYmVkZGVkW2ZpZWxkXSA6IG51bGw7XG4gIH1cblxuICBwdWJsaWMgb3BlbldpbmRvdyh1cmw6IHN0cmluZykge1xuICAgIHdpbmRvdy5vcGVuKGAke3VybH1gLCAnX2JsYW5rJyk7XG4gIH1cblxuICBwdWJsaWMgZmlsbEkxOG4oZGF0YTogYW55KSB7XG4gICAgdGhpcy5fX2kxOG4gPSBkYXRhO1xuICB9XG5cbiAgcHVibGljIGdldENvdW50cnlQcmVmaXgoY291bnRyeTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJyOiA1NSxcbiAgICAgIGNsOiA1NlxuICAgIH1bY291bnRyeV07XG4gIH1cblxuICBwdWJsaWMgZ2V0Q291bnRyeUN1cnJlbmN5Q2hhcnRGb3JtYXQoY291bnRyeTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJyOiAnUiQgIywjIyMsIyMwLjAwJyxcbiAgICAgIGNsOiAnQ0xQICMsIyMjLCMjMCdcbiAgICB9W2NvdW50cnldO1xuICB9XG5cbiAgcHVibGljIGdldENvdW50cnlEb2N1bWVudE1hc2sodHlwZTogJ0NQRicgfCAnQ1BOSicgfCAnJywgY291bnRyeTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIE1vbmtleUVjeFV0aWxzLmdldERvY3VtZW50TWFzayh0eXBlLCBjb3VudHJ5KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDb3VudHJ5RG9jdW1lbnRQbGFjZWhvbGRlcih0eXBlOiAnQ1BGJyB8ICdDUE5KJyB8ICcnLCBjb3VudHJ5OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gTW9ua2V5RWN4VXRpbHMuZ2V0RG9jdW1lbnRQbGFjZWhvbGRlcih0eXBlLCBjb3VudHJ5KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDb3VudHJ5VmFsaWRhdG9ycyhjb3VudHJ5OiBzdHJpbmcpIHtcbiAgICByZXR1cm4ge1xuICAgICAgYnI6IHtcbiAgICAgICAgZ292ZXJubWVudElkOiBWYWxpZGF0ZVV0aWxzLkRvY3VtZW50VmFsaWRhdG9yLFxuICAgICAgICB6aXBDb2RlOiBWYWxpZGF0b3JzLnppcENvZGVCeUNvdW50cnkoY291bnRyeSlcbiAgICAgIH0sXG4gICAgICBjbDoge1xuICAgICAgICBnb3Zlcm5tZW50SWQ6IFZhbGlkYXRlVXRpbHMuRG9jdW1lbnRSdXRWYWxpZGF0b3IsXG4gICAgICAgIHppcENvZGU6IFZhbGlkYXRvcnMuemlwQ29kZUJ5Q291bnRyeShjb3VudHJ5KVxuICAgICAgfVxuICAgIH1bY291bnRyeV07XG4gIH1cblxuICBwdWJsaWMgaXNBYmxlVG9IYW5kbGVQYWdpbmF0aW9uKCkge1xuICAgIGNvbnN0IHsgX19wYWdpbmF0aW9uT3B0aW9ucyB9ID0gdGhpcztcblxuICAgIGlmIChfX3BhZ2luYXRpb25PcHRpb25zKSB7XG4gICAgICBjb25zdCB7IHNlcnZpY2UgfSA9IF9fcGFnaW5hdGlvbk9wdGlvbnM7XG5cbiAgICAgIGNvbnN0IGxpbmtzID0gc2VydmljZS5fX2xpbmtzO1xuICAgICAgaWYgKGxpbmtzICYmIGxpbmtzPy5uZXh0KSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIG9uSGFuZGxlUGFnaW5hdGlvbigpIHtcbiAgICBjb25zdCB7IF9fcGFnaW5hdGlvbk9wdGlvbnMgfSA9IHRoaXM7XG5cbiAgICBpZiAoX19wYWdpbmF0aW9uT3B0aW9ucykge1xuICAgICAgY29uc3QgeyBzZXJ2aWNlIH0gPSBfX3BhZ2luYXRpb25PcHRpb25zO1xuICAgICAgc2VydmljZS5kb1BhZ2luYXRpb24oKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
1
|
+
/* eslint-disable max-len */
|
|
2
|
+
import { Directive } from '@angular/core';
|
|
3
|
+
import { MonkeyEcxCommonsService, MonkeyEcxUtils, ValidateUtils, Validators } from 'monkey-front-core';
|
|
4
|
+
import { MonkeyUtils } from 'monkey-style-guide';
|
|
5
|
+
import { Subject } from 'rxjs';
|
|
6
|
+
import { takeUntil } from 'rxjs/operators';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
export class BaseComponent {
|
|
9
|
+
constructor() {
|
|
10
|
+
this.__paginationOptions = null;
|
|
11
|
+
this.__isMobile = this.isMobile();
|
|
12
|
+
this.__locales = ['pt-BR', 'es-CL', 'en-US'];
|
|
13
|
+
this.__unsubscribeAll = new Subject();
|
|
14
|
+
}
|
|
15
|
+
isMobile() {
|
|
16
|
+
const isMobileWidth = (window.screen.width <= 640) ||
|
|
17
|
+
(window.matchMedia &&
|
|
18
|
+
window.matchMedia('only screen and (max-width: 640px)').matches);
|
|
19
|
+
return (/Android|webOS|iPhone|iPad|iPod|BlackBerry|Mobile/i.test(navigator.userAgent)) || isMobileWidth;
|
|
20
|
+
}
|
|
21
|
+
handlePagination(create = true) {
|
|
22
|
+
const { __paginationOptions } = this;
|
|
23
|
+
if (__paginationOptions) {
|
|
24
|
+
const { mainElement, service } = __paginationOptions;
|
|
25
|
+
const element = document.getElementById(mainElement);
|
|
26
|
+
if (element) {
|
|
27
|
+
element.scroll = null;
|
|
28
|
+
element.onscroll = null;
|
|
29
|
+
element.removeEventListener('scroll', element.eventListeners('scroll'));
|
|
30
|
+
element.removeEventListener('scroll', element.eventListeners('scroll')[0]);
|
|
31
|
+
if (create) {
|
|
32
|
+
element.addEventListener('scroll', () => {
|
|
33
|
+
const { scrollTop, scrollHeight, offsetHeight } = element;
|
|
34
|
+
const contentHeight = scrollHeight - offsetHeight;
|
|
35
|
+
if (contentHeight <= scrollTop) {
|
|
36
|
+
service.doPagination();
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
handleSupport(supportControls) {
|
|
44
|
+
const { service, show } = supportControls;
|
|
45
|
+
const method = show ? 'show' : 'hide';
|
|
46
|
+
service[method.toLowerCase()]();
|
|
47
|
+
}
|
|
48
|
+
handleTranslate(translateOptions) {
|
|
49
|
+
const { service } = translateOptions;
|
|
50
|
+
service.__oni18nDataChanged$
|
|
51
|
+
.pipe(takeUntil(this.__unsubscribeAll))
|
|
52
|
+
.subscribe(() => {
|
|
53
|
+
const data = service.__i18n;
|
|
54
|
+
if (data) {
|
|
55
|
+
this.__i18n = data;
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
handleViewScroll(options) {
|
|
60
|
+
const { elementId, service } = options;
|
|
61
|
+
if (elementId === service?.__savedState?.scrollElementId) {
|
|
62
|
+
this.goScroll(elementId);
|
|
63
|
+
service.__savedState.scrollElementId = null;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
getErrorFirstMessageTranslated(formControl = null) {
|
|
67
|
+
if (formControl?.hasError('required'))
|
|
68
|
+
return 'FIELD-REQUIRED';
|
|
69
|
+
if (formControl?.hasError('invalid'))
|
|
70
|
+
return 'FIELD-INVALID';
|
|
71
|
+
if (formControl?.hasError('email'))
|
|
72
|
+
return 'INVALID-EMAIL';
|
|
73
|
+
if (formControl?.hasError('minlength'))
|
|
74
|
+
return 'MIN-LENGTH';
|
|
75
|
+
if (formControl?.hasError('maxlength'))
|
|
76
|
+
return 'MAX-LENGTH';
|
|
77
|
+
if (formControl?.hasError('max'))
|
|
78
|
+
return 'MAX';
|
|
79
|
+
if (formControl?.hasError('min'))
|
|
80
|
+
return 'MIN';
|
|
81
|
+
if (formControl?.hasError('passwordsNotMatching'))
|
|
82
|
+
return 'MATCH-PASSWORD';
|
|
83
|
+
if (formControl?.hasError('invalidDate'))
|
|
84
|
+
return 'INVALID-DATE';
|
|
85
|
+
if (formControl?.hasError('invalidTrue'))
|
|
86
|
+
return 'INVALID-TRUE';
|
|
87
|
+
if (formControl?.hasError('invalidCpfCnpj'))
|
|
88
|
+
return 'INVALID-DOCUMENT';
|
|
89
|
+
if (formControl?.hasError('invalidZipCode'))
|
|
90
|
+
return 'INVALID-ZIPCODE';
|
|
91
|
+
if (formControl?.hasError('invalidCombo'))
|
|
92
|
+
return 'INVALID-COMBO';
|
|
93
|
+
if (formControl?.hasError('invalidUrl'))
|
|
94
|
+
return 'INVALID-URL';
|
|
95
|
+
if (formControl?.hasError('invalidUnlockRegister')) {
|
|
96
|
+
return 'INVALID-UNLOCK-REGISTER';
|
|
97
|
+
}
|
|
98
|
+
if (formControl?.hasError('dateStartMustBeLessThanAnd')) {
|
|
99
|
+
return 'DATE-START-MUST-BE-LESS-THAN-AND';
|
|
100
|
+
}
|
|
101
|
+
if (formControl?.hasError('dateEndMustBeGreaterThanStart')) {
|
|
102
|
+
return 'DATE-END-MUST-BE-GREATER-THAN-SART';
|
|
103
|
+
}
|
|
104
|
+
if (formControl?.hasError('phone'))
|
|
105
|
+
return 'INVALID-PHONE';
|
|
106
|
+
if (formControl?.hasError('invalidValueGreaterThanZero'))
|
|
107
|
+
return 'INVALID-GREATER-THAN-ZERO';
|
|
108
|
+
if (formControl?.hasError('dateRange'))
|
|
109
|
+
return 'INVALID-DATERANGE';
|
|
110
|
+
return 'FIELD-INVALID';
|
|
111
|
+
}
|
|
112
|
+
getErrorLastMessageNotTranslated(formControl = null) {
|
|
113
|
+
if (formControl?.hasError('minlength')) {
|
|
114
|
+
return `${formControl?.getError('minlength').requiredLength} caracteres.`;
|
|
115
|
+
}
|
|
116
|
+
if (formControl?.hasError('maxlength')) {
|
|
117
|
+
return `${formControl?.getError('maxlength').requiredLength} caracteres.`;
|
|
118
|
+
}
|
|
119
|
+
if (formControl?.hasError('max')) {
|
|
120
|
+
return `${formControl?.getError('max').max}`;
|
|
121
|
+
}
|
|
122
|
+
if (formControl?.hasError('min')) {
|
|
123
|
+
return `${formControl?.getError('min').min}`;
|
|
124
|
+
}
|
|
125
|
+
return '';
|
|
126
|
+
}
|
|
127
|
+
validateFormWithTranslate(f, index) {
|
|
128
|
+
const formErrors = f.value;
|
|
129
|
+
if (f.status === 'VALID')
|
|
130
|
+
return true;
|
|
131
|
+
if (!formErrors)
|
|
132
|
+
return true;
|
|
133
|
+
Object.entries(formErrors).forEach(([key, value]) => {
|
|
134
|
+
const control = f.get(key);
|
|
135
|
+
formErrors[key] = '';
|
|
136
|
+
if (control && !control.valid) {
|
|
137
|
+
const msg = {
|
|
138
|
+
first: `ERRORS.${this.getErrorFirstMessageTranslated(f.get(key))}`,
|
|
139
|
+
last: this.getErrorLastMessageNotTranslated(f.get(key))
|
|
140
|
+
};
|
|
141
|
+
formErrors[key] = msg;
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
if (MonkeyUtils.persistNullEmptyUndefined(index)) {
|
|
145
|
+
this.__monkeyecxFormErrors[index || 0] = formErrors;
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
this.__monkeyecxFormErrors = formErrors;
|
|
149
|
+
}
|
|
150
|
+
return false;
|
|
151
|
+
}
|
|
152
|
+
copyToClipboard(val) {
|
|
153
|
+
const selBox = document.createElement('textarea');
|
|
154
|
+
selBox.style.position = 'fixed';
|
|
155
|
+
selBox.style.left = '0';
|
|
156
|
+
selBox.style.top = '0';
|
|
157
|
+
selBox.style.opacity = '0';
|
|
158
|
+
selBox.value = val;
|
|
159
|
+
document.body.appendChild(selBox);
|
|
160
|
+
selBox.focus();
|
|
161
|
+
selBox.select();
|
|
162
|
+
document.execCommand('copy');
|
|
163
|
+
document.body.removeChild(selBox);
|
|
164
|
+
}
|
|
165
|
+
validateForm(f, index, alias) {
|
|
166
|
+
const formErrors = f.value;
|
|
167
|
+
if (f.status === 'VALID')
|
|
168
|
+
return true;
|
|
169
|
+
if (!formErrors)
|
|
170
|
+
return true;
|
|
171
|
+
Object.entries(formErrors).forEach(([key, value]) => {
|
|
172
|
+
const control = f.get(key);
|
|
173
|
+
formErrors[key] = '';
|
|
174
|
+
if (control && !control.valid) {
|
|
175
|
+
const msg = {
|
|
176
|
+
firstMessage: `ERRORS.${this.getErrorFirstMessageTranslated(f.get(key))}`,
|
|
177
|
+
lastMessage: this.getErrorLastMessageNotTranslated(f.get(key))
|
|
178
|
+
};
|
|
179
|
+
formErrors[key] = msg;
|
|
180
|
+
}
|
|
181
|
+
});
|
|
182
|
+
if (MonkeyUtils.persistNullEmptyUndefined(index)) {
|
|
183
|
+
this.__monkeyecxFormErrors[index || 0] = formErrors;
|
|
184
|
+
}
|
|
185
|
+
else {
|
|
186
|
+
let obj;
|
|
187
|
+
if (alias) {
|
|
188
|
+
obj = {
|
|
189
|
+
[alias]: {
|
|
190
|
+
...formErrors
|
|
191
|
+
}
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
else {
|
|
195
|
+
obj = formErrors;
|
|
196
|
+
}
|
|
197
|
+
this.__monkeyecxFormErrors = {
|
|
198
|
+
...this.__monkeyecxFormErrors,
|
|
199
|
+
...obj
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
f.markAllAsTouched();
|
|
203
|
+
return false;
|
|
204
|
+
}
|
|
205
|
+
clearAllServiceData(clearData) {
|
|
206
|
+
const context = this;
|
|
207
|
+
Object.values(context).forEach((ctx) => {
|
|
208
|
+
if (ctx instanceof MonkeyEcxCommonsService) {
|
|
209
|
+
ctx.clear(clearData);
|
|
210
|
+
}
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
ngOnInit(args) {
|
|
214
|
+
if (args?.paginationOptions) {
|
|
215
|
+
this.__paginationOptions = args?.paginationOptions;
|
|
216
|
+
this.handlePagination();
|
|
217
|
+
}
|
|
218
|
+
if (args?.supportControls) {
|
|
219
|
+
this.handleSupport(args?.supportControls);
|
|
220
|
+
}
|
|
221
|
+
if (args?.translateOptions) {
|
|
222
|
+
this.handleTranslate(args?.translateOptions);
|
|
223
|
+
}
|
|
224
|
+
if (args?.scrollOptions) {
|
|
225
|
+
this.handleViewScroll(args.scrollOptions);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
ngOnDestroy(clearData = true) {
|
|
229
|
+
this.__unsubscribeAll.next();
|
|
230
|
+
this.__unsubscribeAll.complete();
|
|
231
|
+
this.clearAllServiceData(clearData);
|
|
232
|
+
this.handlePagination(false);
|
|
233
|
+
}
|
|
234
|
+
handleErrorFromServices(error, f) {
|
|
235
|
+
this.__monkeyecxFormErrors = null;
|
|
236
|
+
if (error.type === 'Parameter_Error') {
|
|
237
|
+
Object.entries(f.value).forEach(([key, value]) => {
|
|
238
|
+
error.notifications.forEach((_) => {
|
|
239
|
+
const field = _.split(':')[0];
|
|
240
|
+
const description = _.split(':')[1];
|
|
241
|
+
if (field === key) {
|
|
242
|
+
const msg = {
|
|
243
|
+
firstMessage: '',
|
|
244
|
+
lastMessage: description
|
|
245
|
+
};
|
|
246
|
+
this.__monkeyecxFormErrors = {
|
|
247
|
+
...this.__monkeyecxFormErrors,
|
|
248
|
+
[key]: msg
|
|
249
|
+
};
|
|
250
|
+
f.controls[key].setErrors({
|
|
251
|
+
incorrect: true
|
|
252
|
+
});
|
|
253
|
+
}
|
|
254
|
+
});
|
|
255
|
+
});
|
|
256
|
+
}
|
|
257
|
+
f.markAllAsTouched();
|
|
258
|
+
}
|
|
259
|
+
goBack() {
|
|
260
|
+
window.history.back();
|
|
261
|
+
}
|
|
262
|
+
goScroll(id) {
|
|
263
|
+
const element = document.getElementById(id);
|
|
264
|
+
if (element)
|
|
265
|
+
element.scrollIntoView();
|
|
266
|
+
}
|
|
267
|
+
getEmbeddedData(data, field) {
|
|
268
|
+
const { _embedded } = data;
|
|
269
|
+
return _embedded ? _embedded[field] : null;
|
|
270
|
+
}
|
|
271
|
+
openWindow(url) {
|
|
272
|
+
window.open(`${url}`, '_blank');
|
|
273
|
+
}
|
|
274
|
+
fillI18n(data) {
|
|
275
|
+
this.__i18n = data;
|
|
276
|
+
}
|
|
277
|
+
getCountryPrefix(country) {
|
|
278
|
+
return {
|
|
279
|
+
br: 55,
|
|
280
|
+
cl: 56
|
|
281
|
+
}[country];
|
|
282
|
+
}
|
|
283
|
+
getCountryCurrencyChartFormat(country) {
|
|
284
|
+
return {
|
|
285
|
+
br: 'R$ #,###,##0.00',
|
|
286
|
+
cl: 'CLP #,###,##0'
|
|
287
|
+
}[country];
|
|
288
|
+
}
|
|
289
|
+
getCountryDocumentMask(type, country) {
|
|
290
|
+
return MonkeyEcxUtils.getDocumentMask(type, country);
|
|
291
|
+
}
|
|
292
|
+
getCountryDocumentPlaceholder(type, country) {
|
|
293
|
+
return MonkeyEcxUtils.getDocumentPlaceholder(type, country);
|
|
294
|
+
}
|
|
295
|
+
getCountryValidators(country) {
|
|
296
|
+
return {
|
|
297
|
+
br: {
|
|
298
|
+
governmentId: ValidateUtils.DocumentValidator,
|
|
299
|
+
zipCode: Validators.zipCodeByCountry(country)
|
|
300
|
+
},
|
|
301
|
+
cl: {
|
|
302
|
+
governmentId: ValidateUtils.DocumentRutValidator,
|
|
303
|
+
zipCode: Validators.zipCodeByCountry(country)
|
|
304
|
+
}
|
|
305
|
+
}[country];
|
|
306
|
+
}
|
|
307
|
+
isAbleToHandlePagination() {
|
|
308
|
+
const { __paginationOptions } = this;
|
|
309
|
+
if (__paginationOptions) {
|
|
310
|
+
const { service } = __paginationOptions;
|
|
311
|
+
const links = service.__links;
|
|
312
|
+
if (links && links?.next)
|
|
313
|
+
return true;
|
|
314
|
+
}
|
|
315
|
+
return false;
|
|
316
|
+
}
|
|
317
|
+
onHandlePagination() {
|
|
318
|
+
const { __paginationOptions } = this;
|
|
319
|
+
if (__paginationOptions) {
|
|
320
|
+
const { service } = __paginationOptions;
|
|
321
|
+
service.doPagination();
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
BaseComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BaseComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
326
|
+
BaseComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.1.1", type: BaseComponent, selector: "[baseComponent]", ngImport: i0 });
|
|
327
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BaseComponent, decorators: [{
|
|
328
|
+
type: Directive,
|
|
329
|
+
args: [{
|
|
330
|
+
selector: '[baseComponent]'
|
|
331
|
+
}]
|
|
332
|
+
}], ctorParameters: function () { return []; } });
|
|
333
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tb25rZXktZnJvbnQtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvYmFzZS9iYXNlLWNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSw0QkFBNEI7QUFDNUIsT0FBTyxFQUFFLFNBQVMsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUVyRCxPQUFPLEVBQ0wsdUJBQXVCLEVBTXZCLGNBQWMsRUFDZCxhQUFhLEVBQ2IsVUFBVSxFQUNYLE1BQU0sbUJBQW1CLENBQUM7QUFDM0IsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQUszQyxNQUFNLE9BQWdCLGFBQWE7SUFlakM7UUFWQSx3QkFBbUIsR0FBc0MsSUFBSSxDQUFDO1FBSTlELGVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFFN0IsY0FBUyxHQUFHLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUt0QyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0lBRU8sUUFBUTtRQUNkLE1BQU0sYUFBYSxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksR0FBRyxDQUFDO1lBQ2hELENBQUMsTUFBTSxDQUFDLFVBQVU7Z0JBQ2hCLE1BQU0sQ0FBQyxVQUFVLENBQUMsb0NBQW9DLENBQUMsQ0FBQyxPQUFPLENBQ2hFLENBQUM7UUFDSixPQUFPLENBQUMsbURBQW1ELENBQUMsSUFBSSxDQUM5RCxTQUFTLENBQUMsU0FBUyxDQUNwQixDQUFDLElBQUksYUFBYSxDQUFDO0lBQ3RCLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsSUFBSTtRQUNwQyxNQUFNLEVBQUUsbUJBQW1CLEVBQUUsR0FBRyxJQUFJLENBQUM7UUFFckMsSUFBSSxtQkFBbUIsRUFBRTtZQUN2QixNQUFNLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxHQUFHLG1CQUFtQixDQUFDO1lBRXJELE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUM7WUFFckQsSUFBSSxPQUFPLEVBQUU7Z0JBQ1gsT0FBTyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7Z0JBQ3RCLE9BQU8sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO2dCQUV4QixPQUFPLENBQUMsbUJBQW1CLENBQUMsUUFBUSxFQUFHLE9BQWUsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztnQkFDakYsT0FBTyxDQUFDLG1CQUFtQixDQUFDLFFBQVEsRUFBRyxPQUFlLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BGLElBQUksTUFBTSxFQUFFO29CQUNWLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFO3dCQUN0QyxNQUFNLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsR0FBRyxPQUFPLENBQUM7d0JBQzFELE1BQU0sYUFBYSxHQUFHLFlBQVksR0FBRyxZQUFZLENBQUM7d0JBRWxELElBQUksYUFBYSxJQUFJLFNBQVMsRUFBRTs0QkFDOUIsT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDO3lCQUN4QjtvQkFDSCxDQUFDLENBQUMsQ0FBQztpQkFDSjthQUNGO1NBQ0Y7SUFDSCxDQUFDO0lBRU8sYUFBYSxDQUFDLGVBQXdDO1FBQzVELE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsZUFBZSxDQUFDO1FBQzFDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDdEMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVPLGVBQWUsQ0FBQyxnQkFBMkM7UUFDakUsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLGdCQUFnQixDQUFDO1FBQ3JDLE9BQU8sQ0FBQyxvQkFBb0I7YUFDekIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQzthQUN0QyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2QsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztZQUM1QixJQUFJLElBQUksRUFBRTtnQkFDUixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQzthQUNwQjtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLGdCQUFnQixDQUFDLE9BQStCO1FBQ3RELE1BQU0sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLEdBQUcsT0FBTyxDQUFDO1FBRXZDLElBQUksU0FBUyxLQUFLLE9BQU8sRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFO1lBQ3hELElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7WUFFekIsT0FBTyxDQUFDLFlBQVksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1NBQzdDO0lBQ0gsQ0FBQztJQUVPLDhCQUE4QixDQUFDLGNBQXNDLElBQUk7UUFDL0UsSUFBSSxXQUFXLEVBQUUsUUFBUSxDQUFDLFVBQVUsQ0FBQztZQUFFLE9BQU8sZ0JBQWdCLENBQUM7UUFDL0QsSUFBSSxXQUFXLEVBQUUsUUFBUSxDQUFDLFNBQVMsQ0FBQztZQUFFLE9BQU8sZUFBZSxDQUFDO1FBQzdELElBQUksV0FBVyxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUM7WUFBRSxPQUFPLGVBQWUsQ0FBQztRQUMzRCxJQUFJLFdBQVcsRUFBRSxRQUFRLENBQUMsV0FBVyxDQUFDO1lBQUUsT0FBTyxZQUFZLENBQUM7UUFDNUQsSUFBSSxXQUFXLEVBQUUsUUFBUSxDQUFDLFdBQVcsQ0FBQztZQUFFLE9BQU8sWUFBWSxDQUFDO1FBQzVELElBQUksV0FBVyxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUMvQyxJQUFJLFdBQVcsRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDL0MsSUFBSSxXQUFXLEVBQUUsUUFBUSxDQUFDLHNCQUFzQixDQUFDO1lBQUUsT0FBTyxnQkFBZ0IsQ0FBQztRQUMzRSxJQUFJLFdBQVcsRUFBRSxRQUFRLENBQUMsYUFBYSxDQUFDO1lBQUUsT0FBTyxjQUFjLENBQUM7UUFDaEUsSUFBSSxXQUFXLEVBQUUsUUFBUSxDQUFDLGFBQWEsQ0FBQztZQUFFLE9BQU8sY0FBYyxDQUFDO1FBQ2hFLElBQUksV0FBVyxFQUFFLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQztZQUFFLE9BQU8sa0JBQWtCLENBQUM7UUFDdkUsSUFBSSxXQUFXLEVBQUUsUUFBUSxDQUFDLGdCQUFnQixDQUFDO1lBQUUsT0FBTyxpQkFBaUIsQ0FBQztRQUN0RSxJQUFJLFdBQVcsRUFBRSxRQUFRLENBQUMsY0FBYyxDQUFDO1lBQUUsT0FBTyxlQUFlLENBQUM7UUFDbEUsSUFBSSxXQUFXLEVBQUUsUUFBUSxDQUFDLFlBQVksQ0FBQztZQUFFLE9BQU8sYUFBYSxDQUFDO1FBQzlELElBQUksV0FBVyxFQUFFLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFO1lBQUUsT0FBTyx5QkFBeUIsQ0FBQztTQUFFO1FBQ3pGLElBQUksV0FBVyxFQUFFLFFBQVEsQ0FBQyw0QkFBNEIsQ0FBQyxFQUFFO1lBQ3ZELE9BQU8sa0NBQWtDLENBQUM7U0FDM0M7UUFDRCxJQUFJLFdBQVcsRUFBRSxRQUFRLENBQUMsK0JBQStCLENBQUMsRUFBRTtZQUMxRCxPQUFPLG9DQUFvQyxDQUFDO1NBQzdDO1FBQ0QsSUFBSSxXQUFXLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQztZQUFFLE9BQU8sZUFBZSxDQUFDO1FBQzNELElBQUksV0FBVyxFQUFFLFFBQVEsQ0FBQyw2QkFBNkIsQ0FBQztZQUFFLE9BQU8sMkJBQTJCLENBQUM7UUFDN0YsSUFBSSxXQUFXLEVBQUUsUUFBUSxDQUFDLFdBQVcsQ0FBQztZQUFFLE9BQU8sbUJBQW1CLENBQUM7UUFFbkUsT0FBTyxlQUFlLENBQUM7SUFDekIsQ0FBQztJQUVPLGdDQUFnQyxDQUFDLGNBQXNDLElBQUk7UUFDakYsSUFBSSxXQUFXLEVBQUUsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFO1lBQ3RDLE9BQU8sR0FBRyxXQUFXLEVBQUUsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLGNBQWMsY0FBYyxDQUFDO1NBQzNFO1FBQ0QsSUFBSSxXQUFXLEVBQUUsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFO1lBQ3RDLE9BQU8sR0FBRyxXQUFXLEVBQUUsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLGNBQWMsY0FBYyxDQUFDO1NBQzNFO1FBQ0QsSUFBSSxXQUFXLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQUUsT0FBTyxHQUFHLFdBQVcsRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7U0FBRTtRQUNuRixJQUFJLFdBQVcsRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFBRSxPQUFPLEdBQUcsV0FBVyxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztTQUFFO1FBRW5GLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVNLHlCQUF5QixDQUFDLENBQVksRUFBRSxLQUFjO1FBQzNELE1BQU0sVUFBVSxHQUFRLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFFaEMsSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLE9BQU87WUFBRSxPQUFPLElBQUksQ0FBQztRQUV0QyxJQUFJLENBQUMsVUFBVTtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQzdCLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRTtZQUNsRCxNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzNCLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDckIsSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFO2dCQUM3QixNQUFNLEdBQUcsR0FBRztvQkFDVixLQUFLLEVBQUUsVUFBVSxJQUFJLENBQUMsOEJBQThCLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO29CQUNsRSxJQUFJLEVBQUUsSUFBSSxDQUFDLGdDQUFnQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQ3hELENBQUM7Z0JBQ0YsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQzthQUN2QjtRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxXQUFXLENBQUMseUJBQXlCLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFBRSxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQztTQUFFO2FBQU07WUFDOUcsSUFBSSxDQUFDLHFCQUFxQixHQUFHLFVBQVUsQ0FBQztTQUN6QztRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVNLGVBQWUsQ0FBQyxHQUFXO1FBQ2hDLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDbEQsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO1FBQ2hDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztRQUN4QixNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFDdkIsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDO1FBQzNCLE1BQU0sQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO1FBQ25CLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNmLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNoQixRQUFRLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzdCLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFTSxZQUFZLENBQUMsQ0FBWSxFQUFFLEtBQWMsRUFBRSxLQUFjO1FBQzlELE1BQU0sVUFBVSxHQUFRLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDaEMsSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLE9BQU87WUFBRSxPQUFPLElBQUksQ0FBQztRQUV0QyxJQUFJLENBQUMsVUFBVTtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQzdCLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRTtZQUNsRCxNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzNCLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDckIsSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFO2dCQUM3QixNQUFNLEdBQUcsR0FBRztvQkFDVixZQUFZLEVBQUUsVUFBVSxJQUFJLENBQUMsOEJBQThCLENBQ3pELENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQ1gsRUFBRTtvQkFDSCxXQUFXLEVBQUUsSUFBSSxDQUFDLGdDQUFnQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQy9ELENBQUM7Z0JBQ0YsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQzthQUN2QjtRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxXQUFXLENBQUMseUJBQXlCLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDaEQsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUM7U0FDckQ7YUFBTTtZQUNMLElBQUksR0FBUSxDQUFDO1lBRWIsSUFBSSxLQUFLLEVBQUU7Z0JBQ1QsR0FBRyxHQUFHO29CQUNKLENBQUMsS0FBSyxDQUFDLEVBQUU7d0JBQ1AsR0FBRyxVQUFVO3FCQUNkO2lCQUNGLENBQUM7YUFDSDtpQkFBTTtnQkFDTCxHQUFHLEdBQUcsVUFBVSxDQUFDO2FBQ2xCO1lBRUQsSUFBSSxDQUFDLHFCQUFxQixHQUFHO2dCQUMzQixHQUFHLElBQUksQ0FBQyxxQkFBcUI7Z0JBQzdCLEdBQUcsR0FBRzthQUNQLENBQUM7U0FDSDtRQUNELENBQUMsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3JCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVNLG1CQUFtQixDQUFDLFNBQWtCO1FBQzNDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQztRQUNyQixNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQzFDLElBQUksR0FBRyxZQUFZLHVCQUF1QixFQUFFO2dCQUMxQyxHQUFHLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQ3RCO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sUUFBUSxDQUFDLElBS2Y7UUFDQyxJQUFJLElBQUksRUFBRSxpQkFBaUIsRUFBRTtZQUMzQixJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxFQUFFLGlCQUFpQixDQUFDO1lBQ25ELElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1NBQ3pCO1FBQ0QsSUFBSSxJQUFJLEVBQUUsZUFBZSxFQUFFO1lBQ3pCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxDQUFDO1NBQzNDO1FBQ0QsSUFBSSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7WUFDMUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztTQUM5QztRQUNELElBQUksSUFBSSxFQUFFLGFBQWEsRUFBRTtZQUN2QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQzNDO0lBQ0gsQ0FBQztJQUVNLFdBQVcsQ0FBQyxZQUFxQixJQUFJO1FBQzFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDakMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRU0sdUJBQXVCLENBQUMsS0FBNkIsRUFBRSxDQUFZO1FBQ3hFLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUM7UUFDbEMsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLGlCQUFpQixFQUFFO1lBQ3BDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUU7Z0JBQy9DLEtBQUssQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUU7b0JBQ3JDLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQzlCLE1BQU0sV0FBVyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3BDLElBQUksS0FBSyxLQUFLLEdBQUcsRUFBRTt3QkFDakIsTUFBTSxHQUFHLEdBQUc7NEJBQ1YsWUFBWSxFQUFFLEVBQUU7NEJBQ2hCLFdBQVcsRUFBRSxXQUFXO3lCQUN6QixDQUFDO3dCQUNGLElBQUksQ0FBQyxxQkFBcUIsR0FBRzs0QkFDM0IsR0FBRyxJQUFJLENBQUMscUJBQXFCOzRCQUM3QixDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUc7eUJBQ1gsQ0FBQzt3QkFDRixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQzs0QkFDeEIsU0FBUyxFQUFFLElBQUk7eUJBQ2hCLENBQUMsQ0FBQztxQkFDSjtnQkFDSCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1NBQ0o7UUFFRCxDQUFDLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRU0sTUFBTTtRQUNYLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVNLFFBQVEsQ0FBQyxFQUFVO1FBQ3hCLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDNUMsSUFBSSxPQUFPO1lBQUUsT0FBTyxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3hDLENBQUM7SUFFTSxlQUFlLENBQUMsSUFBUyxFQUFFLEtBQWE7UUFDN0MsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLElBQUksQ0FBQztRQUMzQixPQUFPLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDN0MsQ0FBQztJQUVNLFVBQVUsQ0FBQyxHQUFXO1FBQzNCLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRU0sUUFBUSxDQUFDLElBQVM7UUFDdkIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDckIsQ0FBQztJQUVNLGdCQUFnQixDQUFDLE9BQWU7UUFDckMsT0FBTztZQUNMLEVBQUUsRUFBRSxFQUFFO1lBQ04sRUFBRSxFQUFFLEVBQUU7U0FDUCxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2IsQ0FBQztJQUVNLDZCQUE2QixDQUFDLE9BQWU7UUFDbEQsT0FBTztZQUNMLEVBQUUsRUFBRSxpQkFBaUI7WUFDckIsRUFBRSxFQUFFLGVBQWU7U0FDcEIsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7SUFFTSxzQkFBc0IsQ0FBQyxJQUF5QixFQUFFLE9BQWU7UUFDdEUsT0FBTyxjQUFjLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRU0sNkJBQTZCLENBQUMsSUFBeUIsRUFBRSxPQUFlO1FBQzdFLE9BQU8sY0FBYyxDQUFDLHNCQUFzQixDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRU0sb0JBQW9CLENBQUMsT0FBZTtRQUN6QyxPQUFPO1lBQ0wsRUFBRSxFQUFFO2dCQUNGLFlBQVksRUFBRSxhQUFhLENBQUMsaUJBQWlCO2dCQUM3QyxPQUFPLEVBQUUsVUFBVSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQzthQUM5QztZQUNELEVBQUUsRUFBRTtnQkFDRixZQUFZLEVBQUUsYUFBYSxDQUFDLG9CQUFvQjtnQkFDaEQsT0FBTyxFQUFFLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUM7YUFDOUM7U0FDRixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2IsQ0FBQztJQUVNLHdCQUF3QjtRQUM3QixNQUFNLEVBQUUsbUJBQW1CLEVBQUUsR0FBRyxJQUFJLENBQUM7UUFFckMsSUFBSSxtQkFBbUIsRUFBRTtZQUN2QixNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsbUJBQW1CLENBQUM7WUFFeEMsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQztZQUM5QixJQUFJLEtBQUssSUFBSSxLQUFLLEVBQUUsSUFBSTtnQkFBRSxPQUFPLElBQUksQ0FBQztTQUN2QztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVNLGtCQUFrQjtRQUN2QixNQUFNLEVBQUUsbUJBQW1CLEVBQUUsR0FBRyxJQUFJLENBQUM7UUFFckMsSUFBSSxtQkFBbUIsRUFBRTtZQUN2QixNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsbUJBQW1CLENBQUM7WUFDeEMsT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDO1NBQ3hCO0lBQ0gsQ0FBQzs7MEdBN1ZtQixhQUFhOzhGQUFiLGFBQWE7MkZBQWIsYUFBYTtrQkFIbEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsaUJBQWlCO2lCQUM1QiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi9cclxuaW1wb3J0IHsgRGlyZWN0aXZlLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7XHJcbiAgTW9ua2V5RWN4Q29tbW9uc1NlcnZpY2UsXHJcbiAgTW9ua2V5RWN4RXJyb3JSZXNwb25zZSxcclxuICBNb25rZXlFY3hQYWdpbmF0aW9uT3B0aW9ucyxcclxuICBNb25rZXlFY3hTY3JvbGxPcHRpb25zLFxyXG4gIE1vbmtleUVjeFN1cHBvcnRPcHRpb25zLFxyXG4gIE1vbmtleUVjeFRyYW5zbGF0ZU9wdGlvbnMsXHJcbiAgTW9ua2V5RWN4VXRpbHMsXHJcbiAgVmFsaWRhdGVVdGlscyxcclxuICBWYWxpZGF0b3JzXHJcbn0gZnJvbSAnbW9ua2V5LWZyb250LWNvcmUnO1xyXG5pbXBvcnQgeyBNb25rZXlVdGlscyB9IGZyb20gJ21vbmtleS1zdHlsZS1ndWlkZSc7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICdbYmFzZUNvbXBvbmVudF0nXHJcbn0pXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcclxuICBfX21vbmtleWVjeEZvcm1FcnJvcnM6IGFueSB8IGFueVtdO1xyXG5cclxuICBfX3Vuc3Vic2NyaWJlQWxsOiBTdWJqZWN0PGFueT47XHJcblxyXG4gIF9fcGFnaW5hdGlvbk9wdGlvbnM6IE1vbmtleUVjeFBhZ2luYXRpb25PcHRpb25zIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIF9faTE4bjogYW55O1xyXG5cclxuICBfX2lzTW9iaWxlID0gdGhpcy5pc01vYmlsZSgpO1xyXG5cclxuICBfX2xvY2FsZXMgPSBbJ3B0LUJSJywgJ2VzLUNMJywgJ2VuLVVTJ107XHJcblxyXG4gIHByaXZhdGUgcGFnaW5hdGlvbkZ1bmM6IGFueTtcclxuXHJcbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy5fX3Vuc3Vic2NyaWJlQWxsID0gbmV3IFN1YmplY3QoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNNb2JpbGUoKSB7XHJcbiAgICBjb25zdCBpc01vYmlsZVdpZHRoID0gKHdpbmRvdy5zY3JlZW4ud2lkdGggPD0gNjQwKSB8fFxyXG4gICAgICAod2luZG93Lm1hdGNoTWVkaWEgJiZcclxuICAgICAgICB3aW5kb3cubWF0Y2hNZWRpYSgnb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDY0MHB4KScpLm1hdGNoZXNcclxuICAgICAgKTtcclxuICAgIHJldHVybiAoL0FuZHJvaWR8d2ViT1N8aVBob25lfGlQYWR8aVBvZHxCbGFja0JlcnJ5fE1vYmlsZS9pLnRlc3QoXHJcbiAgICAgIG5hdmlnYXRvci51c2VyQWdlbnRcclxuICAgICkpIHx8IGlzTW9iaWxlV2lkdGg7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZVBhZ2luYXRpb24oY3JlYXRlID0gdHJ1ZSkge1xyXG4gICAgY29uc3QgeyBfX3BhZ2luYXRpb25PcHRpb25zIH0gPSB0aGlzO1xyXG5cclxuICAgIGlmIChfX3BhZ2luYXRpb25PcHRpb25zKSB7XHJcbiAgICAgIGNvbnN0IHsgbWFpbkVsZW1lbnQsIHNlcnZpY2UgfSA9IF9fcGFnaW5hdGlvbk9wdGlvbnM7XHJcblxyXG4gICAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQobWFpbkVsZW1lbnQpO1xyXG5cclxuICAgICAgaWYgKGVsZW1lbnQpIHtcclxuICAgICAgICBlbGVtZW50LnNjcm9sbCA9IG51bGw7XHJcbiAgICAgICAgZWxlbWVudC5vbnNjcm9sbCA9IG51bGw7XHJcblxyXG4gICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgKGVsZW1lbnQgYXMgYW55KS5ldmVudExpc3RlbmVycygnc2Nyb2xsJykpO1xyXG4gICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgKGVsZW1lbnQgYXMgYW55KS5ldmVudExpc3RlbmVycygnc2Nyb2xsJylbMF0pO1xyXG4gICAgICAgIGlmIChjcmVhdGUpIHtcclxuICAgICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB7IHNjcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0LCBvZmZzZXRIZWlnaHQgfSA9IGVsZW1lbnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRIZWlnaHQgPSBzY3JvbGxIZWlnaHQgLSBvZmZzZXRIZWlnaHQ7XHJcblxyXG4gICAgICAgICAgICBpZiAoY29udGVudEhlaWdodCA8PSBzY3JvbGxUb3ApIHtcclxuICAgICAgICAgICAgICBzZXJ2aWNlLmRvUGFnaW5hdGlvbigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlU3VwcG9ydChzdXBwb3J0Q29udHJvbHM6IE1vbmtleUVjeFN1cHBvcnRPcHRpb25zKSB7XHJcbiAgICBjb25zdCB7IHNlcnZpY2UsIHNob3cgfSA9IHN1cHBvcnRDb250cm9scztcclxuICAgIGNvbnN0IG1ldGhvZCA9IHNob3cgPyAnc2hvdycgOiAnaGlkZSc7XHJcbiAgICBzZXJ2aWNlW21ldGhvZC50b0xvd2VyQ2FzZSgpXSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVUcmFuc2xhdGUodHJhbnNsYXRlT3B0aW9uczogTW9ua2V5RWN4VHJhbnNsYXRlT3B0aW9ucykge1xyXG4gICAgY29uc3QgeyBzZXJ2aWNlIH0gPSB0cmFuc2xhdGVPcHRpb25zO1xyXG4gICAgc2VydmljZS5fX29uaTE4bkRhdGFDaGFuZ2VkJFxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fX3Vuc3Vic2NyaWJlQWxsKSlcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgZGF0YSA9IHNlcnZpY2UuX19pMThuO1xyXG4gICAgICAgIGlmIChkYXRhKSB7XHJcbiAgICAgICAgICB0aGlzLl9faTE4biA9IGRhdGE7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlVmlld1Njcm9sbChvcHRpb25zOiBNb25rZXlFY3hTY3JvbGxPcHRpb25zKSB7XHJcbiAgICBjb25zdCB7IGVsZW1lbnRJZCwgc2VydmljZSB9ID0gb3B0aW9ucztcclxuXHJcbiAgICBpZiAoZWxlbWVudElkID09PSBzZXJ2aWNlPy5fX3NhdmVkU3RhdGU/LnNjcm9sbEVsZW1lbnRJZCkge1xyXG4gICAgICB0aGlzLmdvU2Nyb2xsKGVsZW1lbnRJZCk7XHJcblxyXG4gICAgICBzZXJ2aWNlLl9fc2F2ZWRTdGF0ZS5zY3JvbGxFbGVtZW50SWQgPSBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRFcnJvckZpcnN0TWVzc2FnZVRyYW5zbGF0ZWQoZm9ybUNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCB8IG51bGwgPSBudWxsKSB7XHJcbiAgICBpZiAoZm9ybUNvbnRyb2w/Lmhhc0Vycm9yKCdyZXF1aXJlZCcpKSByZXR1cm4gJ0ZJRUxELVJFUVVJUkVEJztcclxuICAgIGlmIChmb3JtQ29udHJvbD8uaGFzRXJyb3IoJ2ludmFsaWQnKSkgcmV0dXJuICdGSUVMRC1JTlZBTElEJztcclxuICAgIGlmIChmb3JtQ29udHJvbD8uaGFzRXJyb3IoJ2VtYWlsJykpIHJldHVybiAnSU5WQUxJRC1FTUFJTCc7XHJcbiAgICBpZiAoZm9ybUNvbnRyb2w/Lmhhc0Vycm9yKCdtaW5sZW5ndGgnKSkgcmV0dXJuICdNSU4tTEVOR1RIJztcclxuICAgIGlmIChmb3JtQ29udHJvbD8uaGFzRXJyb3IoJ21heGxlbmd0aCcpKSByZXR1cm4gJ01BWC1MRU5HVEgnO1xyXG4gICAgaWYgKGZvcm1Db250cm9sPy5oYXNFcnJvcignbWF4JykpIHJldHVybiAnTUFYJztcclxuICAgIGlmIChmb3JtQ29udHJvbD8uaGFzRXJyb3IoJ21pbicpKSByZXR1cm4gJ01JTic7XHJcbiAgICBpZiAoZm9ybUNvbnRyb2w/Lmhhc0Vycm9yKCdwYXNzd29yZHNOb3RNYXRjaGluZycpKSByZXR1cm4gJ01BVENILVBBU1NXT1JEJztcclxuICAgIGlmIChmb3JtQ29udHJvbD8uaGFzRXJyb3IoJ2ludmFsaWREYXRlJykpIHJldHVybiAnSU5WQUxJRC1EQVRFJztcclxuICAgIGlmIChmb3JtQ29udHJvbD8uaGFzRXJyb3IoJ2ludmFsaWRUcnVlJykpIHJldHVybiAnSU5WQUxJRC1UUlVFJztcclxuICAgIGlmIChmb3JtQ29udHJvbD8uaGFzRXJyb3IoJ2ludmFsaWRDcGZDbnBqJykpIHJldHVybiAnSU5WQUxJRC1ET0NVTUVOVCc7XHJcbiAgICBpZiAoZm9ybUNvbnRyb2w/Lmhhc0Vycm9yKCdpbnZhbGlkWmlwQ29kZScpKSByZXR1cm4gJ0lOVkFMSUQtWklQQ09ERSc7XHJcbiAgICBpZiAoZm9ybUNvbnRyb2w/Lmhhc0Vycm9yKCdpbnZhbGlkQ29tYm8nKSkgcmV0dXJuICdJTlZBTElELUNPTUJPJztcclxuICAgIGlmIChmb3JtQ29udHJvbD8uaGFzRXJyb3IoJ2ludmFsaWRVcmwnKSkgcmV0dXJuICdJTlZBTElELVVSTCc7XHJcbiAgICBpZiAoZm9ybUNvbnRyb2w/Lmhhc0Vycm9yKCdpbnZhbGlkVW5sb2NrUmVnaXN0ZXInKSkgeyByZXR1cm4gJ0lOVkFMSUQtVU5MT0NLLVJFR0lTVEVSJzsgfVxyXG4gICAgaWYgKGZvcm1Db250cm9sPy5oYXNFcnJvcignZGF0ZVN0YXJ0TXVzdEJlTGVzc1RoYW5BbmQnKSkge1xyXG4gICAgICByZXR1cm4gJ0RBVEUtU1RBUlQtTVVTVC1CRS1MRVNTLVRIQU4tQU5EJztcclxuICAgIH1cclxuICAgIGlmIChmb3JtQ29udHJvbD8uaGFzRXJyb3IoJ2RhdGVFbmRNdXN0QmVHcmVhdGVyVGhhblN0YXJ0JykpIHtcclxuICAgICAgcmV0dXJuICdEQVRFLUVORC1NVVNULUJFLUdSRUFURVItVEhBTi1TQVJUJztcclxuICAgIH1cclxuICAgIGlmIChmb3JtQ29udHJvbD8uaGFzRXJyb3IoJ3Bob25lJykpIHJldHVybiAnSU5WQUxJRC1QSE9ORSc7XHJcbiAgICBpZiAoZm9ybUNvbnRyb2w/Lmhhc0Vycm9yKCdpbnZhbGlkVmFsdWVHcmVhdGVyVGhhblplcm8nKSkgcmV0dXJuICdJTlZBTElELUdSRUFURVItVEhBTi1aRVJPJztcclxuICAgIGlmIChmb3JtQ29udHJvbD8uaGFzRXJyb3IoJ2RhdGVSYW5nZScpKSByZXR1cm4gJ0lOVkFMSUQtREFURVJBTkdFJztcclxuXHJcbiAgICByZXR1cm4gJ0ZJRUxELUlOVkFMSUQnO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRFcnJvckxhc3RNZXNzYWdlTm90VHJhbnNsYXRlZChmb3JtQ29udHJvbDogQWJzdHJhY3RDb250cm9sIHwgbnVsbCA9IG51bGwpIHtcclxuICAgIGlmIChmb3JtQ29udHJvbD8uaGFzRXJyb3IoJ21pbmxlbmd0aCcpKSB7XHJcbiAgICAgIHJldHVybiBgJHtmb3JtQ29udHJvbD8uZ2V0RXJyb3IoJ21pbmxlbmd0aCcpLnJlcXVpcmVkTGVuZ3RofSBjYXJhY3RlcmVzLmA7XHJcbiAgICB9XHJcbiAgICBpZiAoZm9ybUNvbnRyb2w/Lmhhc0Vycm9yKCdtYXhsZW5ndGgnKSkge1xyXG4gICAgICByZXR1cm4gYCR7Zm9ybUNvbnRyb2w/LmdldEVycm9yKCdtYXhsZW5ndGgnKS5yZXF1aXJlZExlbmd0aH0gY2FyYWN0ZXJlcy5gO1xyXG4gICAgfVxyXG4gICAgaWYgKGZvcm1Db250cm9sPy5oYXNFcnJvcignbWF4JykpIHsgcmV0dXJuIGAke2Zvcm1Db250cm9sPy5nZXRFcnJvcignbWF4JykubWF4fWA7IH1cclxuICAgIGlmIChmb3JtQ29udHJvbD8uaGFzRXJyb3IoJ21pbicpKSB7IHJldHVybiBgJHtmb3JtQ29udHJvbD8uZ2V0RXJyb3IoJ21pbicpLm1pbn1gOyB9XHJcblxyXG4gICAgcmV0dXJuICcnO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHZhbGlkYXRlRm9ybVdpdGhUcmFuc2xhdGUoZjogRm9ybUdyb3VwLCBpbmRleD86IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgZm9ybUVycm9yczogYW55ID0gZi52YWx1ZTtcclxuXHJcbiAgICBpZiAoZi5zdGF0dXMgPT09ICdWQUxJRCcpIHJldHVybiB0cnVlO1xyXG5cclxuICAgIGlmICghZm9ybUVycm9ycykgcmV0dXJuIHRydWU7XHJcbiAgICBPYmplY3QuZW50cmllcyhmb3JtRXJyb3JzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcclxuICAgICAgY29uc3QgY29udHJvbCA9IGYuZ2V0KGtleSk7XHJcbiAgICAgIGZvcm1FcnJvcnNba2V5XSA9ICcnO1xyXG4gICAgICBpZiAoY29udHJvbCAmJiAhY29udHJvbC52YWxpZCkge1xyXG4gICAgICAgIGNvbnN0IG1zZyA9IHtcclxuICAgICAgICAgIGZpcnN0OiBgRVJST1JTLiR7dGhpcy5nZXRFcnJvckZpcnN0TWVzc2FnZVRyYW5zbGF0ZWQoZi5nZXQoa2V5KSl9YCxcclxuICAgICAgICAgIGxhc3Q6IHRoaXMuZ2V0RXJyb3JMYXN0TWVzc2FnZU5vdFRyYW5zbGF0ZWQoZi5nZXQoa2V5KSlcclxuICAgICAgICB9O1xyXG4gICAgICAgIGZvcm1FcnJvcnNba2V5XSA9IG1zZztcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKE1vbmtleVV0aWxzLnBlcnNpc3ROdWxsRW1wdHlVbmRlZmluZWQoaW5kZXgpKSB7IHRoaXMuX19tb25rZXllY3hGb3JtRXJyb3JzW2luZGV4IHx8IDBdID0gZm9ybUVycm9yczsgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fX21vbmtleWVjeEZvcm1FcnJvcnMgPSBmb3JtRXJyb3JzO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjb3B5VG9DbGlwYm9hcmQodmFsOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IHNlbEJveCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RleHRhcmVhJyk7XHJcbiAgICBzZWxCb3guc3R5bGUucG9zaXRpb24gPSAnZml4ZWQnO1xyXG4gICAgc2VsQm94LnN0eWxlLmxlZnQgPSAnMCc7XHJcbiAgICBzZWxCb3guc3R5bGUudG9wID0gJzAnO1xyXG4gICAgc2VsQm94LnN0eWxlLm9wYWNpdHkgPSAnMCc7XHJcbiAgICBzZWxCb3gudmFsdWUgPSB2YWw7XHJcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHNlbEJveCk7XHJcbiAgICBzZWxCb3guZm9jdXMoKTtcclxuICAgIHNlbEJveC5zZWxlY3QoKTtcclxuICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdjb3B5Jyk7XHJcbiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHNlbEJveCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdmFsaWRhdGVGb3JtKGY6IEZvcm1Hcm91cCwgaW5kZXg/OiBudW1iZXIsIGFsaWFzPzogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBmb3JtRXJyb3JzOiBhbnkgPSBmLnZhbHVlO1xyXG4gICAgaWYgKGYuc3RhdHVzID09PSAnVkFMSUQnKSByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICBpZiAoIWZvcm1FcnJvcnMpIHJldHVybiB0cnVlO1xyXG4gICAgT2JqZWN0LmVudHJpZXMoZm9ybUVycm9ycykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XHJcbiAgICAgIGNvbnN0IGNvbnRyb2wgPSBmLmdldChrZXkpO1xyXG4gICAgICBmb3JtRXJyb3JzW2tleV0gPSAnJztcclxuICAgICAgaWYgKGNvbnRyb2wgJiYgIWNvbnRyb2wudmFsaWQpIHtcclxuICAgICAgICBjb25zdCBtc2cgPSB7XHJcbiAgICAgICAgICBmaXJzdE1lc3NhZ2U6IGBFUlJPUlMuJHt0aGlzLmdldEVycm9yRmlyc3RNZXNzYWdlVHJhbnNsYXRlZChcclxuICAgICAgICAgICAgZi5nZXQoa2V5KVxyXG4gICAgICAgICAgKX1gLFxyXG4gICAgICAgICAgbGFzdE1lc3NhZ2U6IHRoaXMuZ2V0RXJyb3JMYXN0TWVzc2FnZU5vdFRyYW5zbGF0ZWQoZi5nZXQoa2V5KSlcclxuICAgICAgICB9O1xyXG4gICAgICAgIGZvcm1FcnJvcnNba2V5XSA9IG1zZztcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKE1vbmtleVV0aWxzLnBlcnNpc3ROdWxsRW1wdHlVbmRlZmluZWQoaW5kZXgpKSB7XHJcbiAgICAgIHRoaXMuX19tb25rZXllY3hGb3JtRXJyb3JzW2luZGV4IHx8IDBdID0gZm9ybUVycm9ycztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBvYmo6IGFueTtcclxuXHJcbiAgICAgIGlmIChhbGlhcykge1xyXG4gICAgICAgIG9iaiA9IHtcclxuICAgICAgICAgIFthbGlhc106IHtcclxuICAgICAgICAgICAgLi4uZm9ybUVycm9yc1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgb2JqID0gZm9ybUVycm9ycztcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5fX21vbmtleWVjeEZvcm1FcnJvcnMgPSB7XHJcbiAgICAgICAgLi4udGhpcy5fX21vbmtleWVjeEZvcm1FcnJvcnMsXHJcbiAgICAgICAgLi4ub2JqXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgICBmLm1hcmtBbGxBc1RvdWNoZWQoKTtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjbGVhckFsbFNlcnZpY2VEYXRhKGNsZWFyRGF0YTogYm9vbGVhbikge1xyXG4gICAgY29uc3QgY29udGV4dCA9IHRoaXM7XHJcbiAgICBPYmplY3QudmFsdWVzKGNvbnRleHQpLmZvckVhY2goKGN0eDogYW55KSA9PiB7XHJcbiAgICAgIGlmIChjdHggaW5zdGFuY2VvZiBNb25rZXlFY3hDb21tb25zU2VydmljZSkge1xyXG4gICAgICAgIGN0eC5jbGVhcihjbGVhckRhdGEpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBuZ09uSW5pdChhcmdzOiB7XHJcbiAgICBwYWdpbmF0aW9uT3B0aW9ucz86IE1vbmtleUVjeFBhZ2luYXRpb25PcHRpb25zO1xyXG4gICAgc3VwcG9ydENvbnRyb2xzPzogTW9ua2V5RWN4U3VwcG9ydE9wdGlvbnM7XHJcbiAgICBzY3JvbGxPcHRpb25zPzogTW9ua2V5RWN4U2Nyb2xsT3B0aW9ucztcclxuICAgIHRyYW5zbGF0ZU9wdGlvbnM/OiBNb25rZXlFY3hUcmFuc2xhdGVPcHRpb25zO1xyXG4gIH0pIHtcclxuICAgIGlmIChhcmdzPy5wYWdpbmF0aW9uT3B0aW9ucykge1xyXG4gICAgICB0aGlzLl9fcGFnaW5hdGlvbk9wdGlvbnMgPSBhcmdzPy5wYWdpbmF0aW9uT3B0aW9ucztcclxuICAgICAgdGhpcy5oYW5kbGVQYWdpbmF0aW9uKCk7XHJcbiAgICB9XHJcbiAgICBpZiAoYXJncz8uc3VwcG9ydENvbnRyb2xzKSB7XHJcbiAgICAgIHRoaXMuaGFuZGxlU3VwcG9ydChhcmdzPy5zdXBwb3J0Q29udHJvbHMpO1xyXG4gICAgfVxyXG4gICAgaWYgKGFyZ3M/LnRyYW5zbGF0ZU9wdGlvbnMpIHtcclxuICAgICAgdGhpcy5oYW5kbGVUcmFuc2xhdGUoYXJncz8udHJhbnNsYXRlT3B0aW9ucyk7XHJcbiAgICB9XHJcbiAgICBpZiAoYXJncz8uc2Nyb2xsT3B0aW9ucykge1xyXG4gICAgICB0aGlzLmhhbmRsZVZpZXdTY3JvbGwoYXJncy5zY3JvbGxPcHRpb25zKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBuZ09uRGVzdHJveShjbGVhckRhdGE6IGJvb2xlYW4gPSB0cnVlKSB7XHJcbiAgICB0aGlzLl9fdW5zdWJzY3JpYmVBbGwubmV4dCgpO1xyXG4gICAgdGhpcy5fX3Vuc3Vic2NyaWJlQWxsLmNvbXBsZXRlKCk7XHJcbiAgICB0aGlzLmNsZWFyQWxsU2VydmljZURhdGEoY2xlYXJEYXRhKTtcclxuICAgIHRoaXMuaGFuZGxlUGFnaW5hdGlvbihmYWxzZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFuZGxlRXJyb3JGcm9tU2VydmljZXMoZXJyb3I6IE1vbmtleUVjeEVycm9yUmVzcG9uc2UsIGY6IEZvcm1Hcm91cCkge1xyXG4gICAgdGhpcy5fX21vbmtleWVjeEZvcm1FcnJvcnMgPSBudWxsO1xyXG4gICAgaWYgKGVycm9yLnR5cGUgPT09ICdQYXJhbWV0ZXJfRXJyb3InKSB7XHJcbiAgICAgIE9iamVjdC5lbnRyaWVzKGYudmFsdWUpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xyXG4gICAgICAgIGVycm9yLm5vdGlmaWNhdGlvbnMuZm9yRWFjaCgoXzogYW55KSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBmaWVsZCA9IF8uc3BsaXQoJzonKVswXTtcclxuICAgICAgICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gXy5zcGxpdCgnOicpWzFdO1xyXG4gICAgICAgICAgaWYgKGZpZWxkID09PSBrZXkpIHtcclxuICAgICAgICAgICAgY29uc3QgbXNnID0ge1xyXG4gICAgICAgICAgICAgIGZpcnN0TWVzc2FnZTogJycsXHJcbiAgICAgICAgICAgICAgbGFzdE1lc3NhZ2U6IGRlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMuX19tb25rZXllY3hGb3JtRXJyb3JzID0ge1xyXG4gICAgICAgICAgICAgIC4uLnRoaXMuX19tb25rZXllY3hGb3JtRXJyb3JzLFxyXG4gICAgICAgICAgICAgIFtrZXldOiBtc2dcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgZi5jb250cm9sc1trZXldLnNldEVycm9ycyh7XHJcbiAgICAgICAgICAgICAgaW5jb3JyZWN0OiB0cnVlXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBmLm1hcmtBbGxBc1RvdWNoZWQoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnb0JhY2soKSB7XHJcbiAgICB3aW5kb3cuaGlzdG9yeS5iYWNrKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ29TY3JvbGwoaWQ6IHN0cmluZykge1xyXG4gICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcclxuICAgIGlmIChlbGVtZW50KSBlbGVtZW50LnNjcm9sbEludG9WaWV3KCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0RW1iZWRkZWREYXRhKGRhdGE6IGFueSwgZmllbGQ6IHN0cmluZyk6IGFueVtdIHwgYW55IHtcclxuICAgIGNvbnN0IHsgX2VtYmVkZGVkIH0gPSBkYXRhO1xyXG4gICAgcmV0dXJuIF9lbWJlZGRlZCA/IF9lbWJlZGRlZFtmaWVsZF0gOiBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9wZW5XaW5kb3codXJsOiBzdHJpbmcpIHtcclxuICAgIHdpbmRvdy5vcGVuKGAke3VybH1gLCAnX2JsYW5rJyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZmlsbEkxOG4oZGF0YTogYW55KSB7XHJcbiAgICB0aGlzLl9faTE4biA9IGRhdGE7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0Q291bnRyeVByZWZpeChjb3VudHJ5OiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGJyOiA1NSxcclxuICAgICAgY2w6IDU2XHJcbiAgICB9W2NvdW50cnldO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldENvdW50cnlDdXJyZW5jeUNoYXJ0Rm9ybWF0KGNvdW50cnk6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgYnI6ICdSJCAjLCMjIywjIzAuMDAnLFxyXG4gICAgICBjbDogJ0NMUCAjLCMjIywjIzAnXHJcbiAgICB9W2NvdW50cnldO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldENvdW50cnlEb2N1bWVudE1hc2sodHlwZTogJ0NQRicgfCAnQ1BOSicgfCAnJywgY291bnRyeTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gTW9ua2V5RWN4VXRpbHMuZ2V0RG9jdW1lbnRNYXNrKHR5cGUsIGNvdW50cnkpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldENvdW50cnlEb2N1bWVudFBsYWNlaG9sZGVyKHR5cGU6ICdDUEYnIHwgJ0NQTkonIHwgJycsIGNvdW50cnk6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIE1vbmtleUVjeFV0aWxzLmdldERvY3VtZW50UGxhY2Vob2xkZXIodHlwZSwgY291bnRyeSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0Q291bnRyeVZhbGlkYXRvcnMoY291bnRyeTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBicjoge1xyXG4gICAgICAgIGdvdmVybm1lbnRJZDogVmFsaWRhdGVVdGlscy5Eb2N1bWVudFZhbGlkYXRvcixcclxuICAgICAgICB6aXBDb2RlOiBWYWxpZGF0b3JzLnppcENvZGVCeUNvdW50cnkoY291bnRyeSlcclxuICAgICAgfSxcclxuICAgICAgY2w6IHtcclxuICAgICAgICBnb3Zlcm5tZW50SWQ6IFZhbGlkYXRlVXRpbHMuRG9jdW1lbnRSdXRWYWxpZGF0b3IsXHJcbiAgICAgICAgemlwQ29kZTogVmFsaWRhdG9ycy56aXBDb2RlQnlDb3VudHJ5KGNvdW50cnkpXHJcbiAgICAgIH1cclxuICAgIH1bY291bnRyeV07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaXNBYmxlVG9IYW5kbGVQYWdpbmF0aW9uKCkge1xyXG4gICAgY29uc3QgeyBfX3BhZ2luYXRpb25PcHRpb25zIH0gPSB0aGlzO1xyXG5cclxuICAgIGlmIChfX3BhZ2luYXRpb25PcHRpb25zKSB7XHJcbiAgICAgIGNvbnN0IHsgc2VydmljZSB9ID0gX19wYWdpbmF0aW9uT3B0aW9ucztcclxuXHJcbiAgICAgIGNvbnN0IGxpbmtzID0gc2VydmljZS5fX2xpbmtzO1xyXG4gICAgICBpZiAobGlua3MgJiYgbGlua3M/Lm5leHQpIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uSGFuZGxlUGFnaW5hdGlvbigpIHtcclxuICAgIGNvbnN0IHsgX19wYWdpbmF0aW9uT3B0aW9ucyB9ID0gdGhpcztcclxuXHJcbiAgICBpZiAoX19wYWdpbmF0aW9uT3B0aW9ucykge1xyXG4gICAgICBjb25zdCB7IHNlcnZpY2UgfSA9IF9fcGFnaW5hdGlvbk9wdGlvbnM7XHJcbiAgICAgIHNlcnZpY2UuZG9QYWdpbmF0aW9uKCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
|