1 | ;
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | const logger_1 = require("./logger");
|
4 | class NullableAssert {
|
5 | constructor(assert) {
|
6 | this.assert = assert;
|
7 | }
|
8 | signedFloat(value, constraints) {
|
9 | return value === undefined ? undefined : this.assert.signedFloat(value, constraints);
|
10 | }
|
11 | uFloat(value, constraints) {
|
12 | return value === undefined ? undefined : this.assert.uFloat(value, constraints);
|
13 | }
|
14 | signedInt(value, constraints) {
|
15 | return value === undefined ? undefined : this.assert.signedInt(value, constraints);
|
16 | }
|
17 | uInt(value, constraints) {
|
18 | return value === undefined ? undefined : this.assert.uInt(value, constraints);
|
19 | }
|
20 | string(value, constraints) {
|
21 | return value === undefined ? undefined : this.assert.string(value, constraints);
|
22 | }
|
23 | noEmptyString(value, constraints) {
|
24 | return value === undefined ? undefined : this.assert.noEmptyString(value, constraints);
|
25 | }
|
26 | date(value, constraints) {
|
27 | return value === undefined ? undefined : this.assert.date(value, constraints);
|
28 | }
|
29 | array(value, constraints) {
|
30 | return value === undefined ? undefined : this.assert.array(value, constraints);
|
31 | }
|
32 | noEmptyArray(value, constraints) {
|
33 | return value === undefined ? undefined : this.assert.noEmptyArray(value, constraints);
|
34 | }
|
35 | bool(value) {
|
36 | return value === undefined ? undefined : this.assert.bool(value);
|
37 | }
|
38 | email(value) {
|
39 | return value === undefined ? undefined : this.assert.email(value);
|
40 | }
|
41 | object(value) {
|
42 | return value === undefined ? undefined : this.assert.object(value);
|
43 | }
|
44 | noEmptyObject(value) {
|
45 | return value === undefined ? undefined : this.assert.noEmptyObject(value);
|
46 | }
|
47 | union(value, union) {
|
48 | return value === undefined ? undefined : this.assert.union(value, union);
|
49 | }
|
50 | enum(value, Enum) {
|
51 | return value === undefined ? undefined : this.assert.enum(value, Enum);
|
52 | }
|
53 | }
|
54 | class Assert {
|
55 | constructor(ErrorFactory) {
|
56 | this.ErrorFactory = ErrorFactory;
|
57 | this.nullable = new NullableAssert(this);
|
58 | }
|
59 | error(name, json) {
|
60 | throw new this.ErrorFactory(name, json);
|
61 | }
|
62 | validateNumber(value, constraints) {
|
63 | if (typeof value !== 'number')
|
64 | this.error('Value is not a number', { value });
|
65 | if (Number.isNaN(value))
|
66 | this.error('Value is NaN', { value });
|
67 | if (!Number.isFinite(value))
|
68 | this.error('Value is not finite', { value });
|
69 | if (constraints !== undefined) {
|
70 | this.between(value, constraints.min, constraints.max, 'Value');
|
71 | }
|
72 | }
|
73 | between(value, min, max, error) {
|
74 | if (min !== undefined && min > value)
|
75 | this.error(error + ' should be >= ', { min, value });
|
76 | if (max !== undefined && max < value)
|
77 | this.error(error + ' should be <= ', { max, value });
|
78 | }
|
79 | validateUnsigned(value) {
|
80 | if (value < 0)
|
81 | this.error('Value should be 0 or positive', { value });
|
82 | }
|
83 | validateInt(value) {
|
84 | if (value !== Math.ceil(value))
|
85 | this.error('Value should be integer', { value });
|
86 | }
|
87 | signedFloat(value, constraints) {
|
88 | this.validateNumber(value, constraints);
|
89 | return value;
|
90 | }
|
91 | uFloat(value, constraints) {
|
92 | this.signedFloat(value, constraints);
|
93 | this.validateUnsigned(value);
|
94 | return value;
|
95 | }
|
96 | signedInt(value, constraints) {
|
97 | this.validateNumber(value, constraints);
|
98 | this.validateInt(value);
|
99 | return value;
|
100 | }
|
101 | uInt(value, constraints) {
|
102 | this.signedInt(value, constraints);
|
103 | this.validateUnsigned(value);
|
104 | return value;
|
105 | }
|
106 | string(value, constraints) {
|
107 | if (typeof value !== 'string')
|
108 | this.error('Value is not a string', { value });
|
109 | if (constraints !== undefined) {
|
110 | this.between(value.length, constraints.minLen, constraints.maxLen, 'String length');
|
111 | if (constraints.regexp !== undefined && constraints.regexp.test(value)) {
|
112 | this.error('String is not valueidated by regexp ', { regexp: constraints.regexp.toString(), value });
|
113 | }
|
114 | }
|
115 | return value;
|
116 | }
|
117 | noEmptyString(value, constraints) {
|
118 | this.string(value, constraints);
|
119 | if (value === '')
|
120 | this.error('String should not be empty', { value });
|
121 | return value;
|
122 | }
|
123 | date(value, constraints) {
|
124 | if (!(value instanceof Date))
|
125 | this.error('Value is not a date', { value });
|
126 | if (Number.isNaN(value.getTime()))
|
127 | this.error('Date is invalueid', { value });
|
128 | if (constraints !== undefined) {
|
129 | this.between(value.getTime(), constraints.min !== undefined ? constraints.min.getTime() : undefined, constraints.max !== undefined ? constraints.max.getTime() : undefined, 'Date');
|
130 | }
|
131 | return value;
|
132 | }
|
133 | array(value, constraints) {
|
134 | if (!Array.isArray(value))
|
135 | this.error('Value is not an array', { value });
|
136 | if (constraints !== undefined)
|
137 | this.between(value.length, constraints.minSize, constraints.maxSize, 'Array.length');
|
138 | return value;
|
139 | }
|
140 | noEmptyArray(value, constraints) {
|
141 | this.array(value, constraints);
|
142 | if (value.length === 0)
|
143 | this.error('Array should have elements', { value });
|
144 | return value;
|
145 | }
|
146 | bool(value) {
|
147 | if (typeof value !== 'boolean')
|
148 | this.error('Value is not a boolean', { value });
|
149 | return value;
|
150 | }
|
151 | email(value) {
|
152 | this.string(value);
|
153 | if (!/^\S+@\S+$/.test(value))
|
154 | this.error('Value is an incorrect email', { value });
|
155 | return value;
|
156 | }
|
157 | object(value) {
|
158 | if (typeof value !== 'object' || value === null)
|
159 | this.error('Value is not an object', { value });
|
160 | return value;
|
161 | }
|
162 | noEmptyObject(value) {
|
163 | this.object(value);
|
164 | if (Object.keys(value).length === 0)
|
165 | this.error('Object should have elements', { value });
|
166 | return value;
|
167 | }
|
168 | union(value, union) {
|
169 | if (!union.includes(value))
|
170 | this.error(`Union doesn't have specified element`, { value });
|
171 | return value;
|
172 | }
|
173 | enum(value, Enum) {
|
174 | if (Enum[value] === undefined)
|
175 | this.error(`Enum doesn't have specified element`, { value });
|
176 | return value;
|
177 | }
|
178 | }
|
179 | exports.Assert = Assert;
|
180 | exports.assert = new Assert(logger_1.Exception);
|
181 | exports.clientValidation = new Assert(logger_1.ClientException);
|
182 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXJ0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2Fzc2VydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHFDQUFzRDtBQWF0RCxNQUFNLGNBQWM7SUE4Q25CLFlBQXNCLE1BQWM7UUFBZCxXQUFNLEdBQU4sTUFBTSxDQUFRO0lBQUcsQ0FBQztJQTdDeEMsV0FBVyxDQUFDLEtBQXlCLEVBQUUsV0FBOEI7UUFDcEUsT0FBTyxLQUFLLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztJQUN0RixDQUFDO0lBQ0QsTUFBTSxDQUFDLEtBQXlCLEVBQUUsV0FBOEI7UUFDL0QsT0FBTyxLQUFLLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNqRixDQUFDO0lBQ0QsU0FBUyxDQUFDLEtBQXlCLEVBQUUsV0FBOEI7UUFDbEUsT0FBTyxLQUFLLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNwRixDQUFDO0lBQ0QsSUFBSSxDQUFDLEtBQXlCLEVBQUUsV0FBOEI7UUFDN0QsT0FBTyxLQUFLLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztJQUMvRSxDQUFDO0lBQ0QsTUFBTSxDQUFDLEtBQXlCLEVBQUUsV0FBOEI7UUFDL0QsT0FBTyxLQUFLLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNqRixDQUFDO0lBQ0QsYUFBYSxDQUFDLEtBQXlCLEVBQUUsV0FBOEI7UUFDdEUsT0FBTyxLQUFLLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztJQUN4RixDQUFDO0lBQ0QsSUFBSSxDQUFDLEtBQXVCLEVBQUUsV0FBNEI7UUFDekQsT0FBTyxLQUFLLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztJQUMvRSxDQUFDO0lBQ0QsS0FBSyxDQUFJLEtBQStCLEVBQUUsV0FBNkI7UUFDdEUsT0FBTyxLQUFLLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNoRixDQUFDO0lBQ0QsWUFBWSxDQUFJLEtBQStCLEVBQUUsV0FBNkI7UUFDN0UsT0FBTyxLQUFLLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztJQUN2RixDQUFDO0lBQ0QsSUFBSSxDQUFDLEtBQTBCO1FBQzlCLE9BQU8sS0FBSyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBQ0QsS0FBSyxDQUFDLEtBQXlCO1FBQzlCLE9BQU8sS0FBSyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBQ0QsTUFBTSxDQUFtQixLQUFvQjtRQUM1QyxPQUFPLEtBQUssS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUNELGFBQWEsQ0FBbUIsS0FBb0I7UUFDbkQsT0FBTyxLQUFLLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFDRCxLQUFLLENBQWlCLEtBQW9CLEVBQUUsS0FBbUI7UUFDOUQsT0FBTyxLQUFLLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBQ0QsSUFBSSxDQUFDLEtBQWtDLEVBQUUsSUFBK0I7UUFDdkUsT0FBTyxLQUFLLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN4RSxDQUFDO0NBRUQ7QUFFRCxNQUFhLE1BQU07SUFDbEIsWUFBc0IsWUFBb0M7UUFBcEMsaUJBQVksR0FBWixZQUFZLENBQXdCO1FBRTFELGFBQVEsR0FBRyxJQUFJLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUZ5QixDQUFDO0lBSXBELEtBQUssQ0FBQyxJQUFZLEVBQUUsSUFBWTtRQUN6QyxNQUFNLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVTLGNBQWMsQ0FBQyxLQUFhLEVBQUUsV0FBeUM7UUFDaEYsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRO1lBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDOUUsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztZQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7WUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLHFCQUFxQixFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUMxRSxJQUFJLFdBQVcsS0FBSyxTQUFTLEVBQUU7WUFDOUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLEdBQUcsRUFBRSxXQUFXLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1NBQy9EO0lBQ0YsQ0FBQztJQUVTLE9BQU8sQ0FBQyxLQUFhLEVBQUUsR0FBdUIsRUFBRSxHQUF1QixFQUFFLEtBQWE7UUFDL0YsSUFBSSxHQUFHLEtBQUssU0FBUyxJQUFJLEdBQUcsR0FBRyxLQUFLO1lBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsZ0JBQWdCLEVBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUMzRixJQUFJLEdBQUcsS0FBSyxTQUFTLElBQUksR0FBRyxHQUFHLEtBQUs7WUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxnQkFBZ0IsRUFBRSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzVGLENBQUM7SUFFUyxnQkFBZ0IsQ0FBQyxLQUFhO1FBQ3ZDLElBQUksS0FBSyxHQUFHLENBQUM7WUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLCtCQUErQixFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRVMsV0FBVyxDQUFDLEtBQWE7UUFDbEMsSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7WUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLHlCQUF5QixFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUNsRixDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQWEsRUFBRSxXQUE4QjtRQUN4RCxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztRQUN4QyxPQUFPLEtBQUssQ0FBQztJQUNkLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBYSxFQUFFLFdBQThCO1FBQ25ELElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QixPQUFPLEtBQUssQ0FBQztJQUNkLENBQUM7SUFDRCxTQUFTLENBQUMsS0FBYSxFQUFFLFdBQThCO1FBQ3RELElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEIsT0FBTyxLQUFLLENBQUM7SUFDZCxDQUFDO0lBQ0QsSUFBSSxDQUFDLEtBQWEsRUFBRSxXQUE4QjtRQUNqRCxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0IsT0FBTyxLQUFLLENBQUM7SUFDZCxDQUFDO0lBQ0QsTUFBTSxDQUFDLEtBQWEsRUFBRSxXQUE4QjtRQUNuRCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVE7WUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLHVCQUF1QixFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUM5RSxJQUFJLFdBQVcsS0FBSyxTQUFTLEVBQUU7WUFDOUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLE1BQU0sRUFBRSxlQUFlLENBQUMsQ0FBQztZQUNwRixJQUFJLFdBQVcsQ0FBQyxNQUFNLEtBQUssU0FBUyxJQUFJLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUN2RSxJQUFJLENBQUMsS0FBSyxDQUFDLHNDQUFzQyxFQUFFLEVBQUUsTUFBTSxFQUFFLFdBQVcsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQzthQUNyRztTQUNEO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZCxDQUFDO0lBQ0QsYUFBYSxDQUFDLEtBQWEsRUFBRSxXQUE4QjtRQUMxRCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztRQUNoQyxJQUFJLEtBQUssS0FBSyxFQUFFO1lBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyw0QkFBNEIsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDdEUsT0FBTyxLQUFLLENBQUM7SUFDZCxDQUFDO0lBQ0QsSUFBSSxDQUFDLEtBQVcsRUFBRSxXQUE0QjtRQUM3QyxJQUFJLENBQUMsQ0FBQyxLQUFLLFlBQVksSUFBSSxDQUFDO1lBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDM0UsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQzlFLElBQUksV0FBVyxLQUFLLFNBQVMsRUFBRTtZQUM5QixJQUFJLENBQUMsT0FBTyxDQUNYLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFDZixXQUFXLENBQUMsR0FBRyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUNyRSxXQUFXLENBQUMsR0FBRyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUNyRSxNQUFNLENBQ04sQ0FBQztTQUNGO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZCxDQUFDO0lBQ0QsS0FBSyxDQUFJLEtBQW1CLEVBQUUsV0FBb0Q7UUFDakYsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1lBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDMUUsSUFBSSxXQUFXLEtBQUssU0FBUztZQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxPQUFPLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDcEgsT0FBTyxLQUFLLENBQUM7SUFDZCxDQUFDO0lBQ0QsWUFBWSxDQUFJLEtBQW1CLEVBQUUsV0FBb0Q7UUFDeEYsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDL0IsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUM7WUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLDRCQUE0QixFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUM1RSxPQUFPLEtBQUssQ0FBQztJQUNkLENBQUM7SUFDRCxJQUFJLENBQUMsS0FBYztRQUNsQixJQUFJLE9BQU8sS0FBSyxLQUFLLFNBQVM7WUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLHdCQUF3QixFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUNoRixPQUFPLEtBQUssQ0FBQztJQUNkLENBQUM7SUFDRCxLQUFLLENBQUMsS0FBYTtRQUNsQixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25CLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztZQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsNkJBQTZCLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ25GLE9BQU8sS0FBSyxDQUFDO0lBQ2QsQ0FBQztJQUNELE1BQU0sQ0FBbUIsS0FBUTtRQUNoQyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLEtBQUssSUFBSTtZQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsd0JBQXdCLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ2pHLE9BQU8sS0FBSyxDQUFDO0lBQ2QsQ0FBQztJQUNELGFBQWEsQ0FBbUIsS0FBUTtRQUN2QyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25CLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsNkJBQTZCLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQzFGLE9BQU8sS0FBSyxDQUFDO0lBQ2QsQ0FBQztJQUNELEtBQUssQ0FBaUIsS0FBUSxFQUFFLEtBQW1CO1FBQ2xELElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztZQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsc0NBQXNDLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQzFGLE9BQU8sS0FBSyxDQUFDO0lBQ2QsQ0FBQztJQUNELElBQUksQ0FBQyxLQUFzQixFQUFFLElBQStCO1FBQzNELElBQUksSUFBSSxDQUFDLEtBQWUsQ0FBQyxLQUFLLFNBQVM7WUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLHFDQUFxQyxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUN0RyxPQUFPLEtBQUssQ0FBQztJQUNkLENBQUM7Q0FDRDtBQW5IRCx3QkFtSEM7QUFFWSxRQUFBLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxrQkFBUyxDQUFDLENBQUM7QUFDL0IsUUFBQSxnQkFBZ0IsR0FBRyxJQUFJLE1BQU0sQ0FBQyx3QkFBZSxDQUFDLENBQUMifQ== |
\ | No newline at end of file |