ets-fe-ng-sdk 1.0.80 → 1.0.82
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.
|
@@ -2,7 +2,6 @@ import { Injectable } from '@angular/core';
|
|
|
2
2
|
import { HttpHeaders, HttpRequest, } from '@angular/common/http';
|
|
3
3
|
import { lastValueFrom, Observable, throwError } from 'rxjs';
|
|
4
4
|
import { catchError, map, retry, tap } from 'rxjs/operators';
|
|
5
|
-
import { ETSenvironment } from '../../environments/environment';
|
|
6
5
|
import * as i0 from "@angular/core";
|
|
7
6
|
import * as i1 from "@angular/common/http";
|
|
8
7
|
import * as i2 from "./cache/cache.service";
|
|
@@ -38,8 +37,11 @@ class ApiService {
|
|
|
38
37
|
let headers = new HttpHeaders();
|
|
39
38
|
for (const item of headers1.keys())
|
|
40
39
|
headers = headers.set(item, headers1.get(item));
|
|
41
|
-
for (const item of headers2.keys())
|
|
40
|
+
for (const item of headers2.keys()) {
|
|
41
|
+
if (headers.has(item))
|
|
42
|
+
headers.delete(item);
|
|
42
43
|
headers = headers.set(item, headers2.get(item));
|
|
44
|
+
}
|
|
43
45
|
return headers;
|
|
44
46
|
};
|
|
45
47
|
//#endregion
|
|
@@ -55,10 +57,6 @@ class ApiService {
|
|
|
55
57
|
this.logRoutes('get', route, parameters);
|
|
56
58
|
return new Observable((res) => {
|
|
57
59
|
const query = route + this.getRequestParse(parameters);
|
|
58
|
-
// if (this.cacheS.has(query)) {
|
|
59
|
-
// res.next(this.cacheS.getItem<T>(route));
|
|
60
|
-
// }
|
|
61
|
-
const headers = new HttpHeaders(this.headers);
|
|
62
60
|
this.http
|
|
63
61
|
.get(query, {
|
|
64
62
|
headers: this.concatenateHeaders(new HttpHeaders(this.headers), extras?.options?.headers),
|
|
@@ -85,23 +83,24 @@ class ApiService {
|
|
|
85
83
|
});
|
|
86
84
|
};
|
|
87
85
|
this.getCodes = (route) => this.get(route).pipe(map((res) => this.sortCodes(res)));
|
|
88
|
-
this.getText = (route, parameters) => this.get(route, parameters, {
|
|
86
|
+
this.getText = (route, parameters, extras) => this.get(route, parameters, {
|
|
89
87
|
options: {
|
|
90
|
-
headers: new HttpHeaders(this.headers),
|
|
88
|
+
headers: this.concatenateHeaders(new HttpHeaders(this.headers), extras?.options?.headers),
|
|
91
89
|
responseType: 'text',
|
|
92
90
|
},
|
|
93
91
|
});
|
|
94
|
-
this.getFile = (route, parameters) => this.get(route, parameters, {
|
|
92
|
+
this.getFile = (route, parameters, extras) => this.get(route, parameters, {
|
|
95
93
|
options: {
|
|
96
|
-
headers: new HttpHeaders(this.headers),
|
|
94
|
+
headers: this.concatenateHeaders(new HttpHeaders(this.headers), extras?.options?.headers),
|
|
97
95
|
responseType: 'arrayBuffer',
|
|
98
96
|
},
|
|
99
97
|
});
|
|
100
98
|
this.getWithBody = (route, body, extras) => {
|
|
101
99
|
this.logRoutes('get', route);
|
|
102
100
|
// debugger
|
|
103
|
-
const req = new HttpRequest('GET', route, body,
|
|
104
|
-
|
|
101
|
+
const req = new HttpRequest('GET', route, body, {
|
|
102
|
+
...extras?.options,
|
|
103
|
+
headers: this.concatenateHeaders(new HttpHeaders(this.headers), extras?.options?.headers),
|
|
105
104
|
responseType: 'json',
|
|
106
105
|
});
|
|
107
106
|
return this.http
|
|
@@ -152,26 +151,28 @@ class ApiService {
|
|
|
152
151
|
: new HttpHeaders(this.headers);
|
|
153
152
|
return this.http
|
|
154
153
|
.delete(route, {
|
|
155
|
-
headers,
|
|
156
154
|
responseType: 'json',
|
|
157
155
|
...extras?.options,
|
|
156
|
+
headers: this.concatenateHeaders(new HttpHeaders(this.headers), extras?.options?.headers),
|
|
158
157
|
})
|
|
159
158
|
.pipe(catchError(this.handleRequestError));
|
|
160
159
|
};
|
|
161
|
-
this.deleteWithBody = (route, body,
|
|
160
|
+
this.deleteWithBody = (route, body, extras) => {
|
|
162
161
|
this.logRoutes('delete', route);
|
|
163
|
-
const req = new HttpRequest('DELETE', route, body,
|
|
164
|
-
headers: new HttpHeaders(this.headers),
|
|
162
|
+
const req = new HttpRequest('DELETE', route, body, {
|
|
165
163
|
responseType: 'json',
|
|
164
|
+
...extras?.options,
|
|
165
|
+
headers: this.concatenateHeaders(new HttpHeaders(this.headers), extras?.options?.headers),
|
|
166
166
|
});
|
|
167
167
|
return this.http
|
|
168
168
|
.request(req)
|
|
169
169
|
.pipe(catchError(this.handleRequestError));
|
|
170
170
|
};
|
|
171
|
-
this.deleteText = (route) => this.delete(route, {
|
|
171
|
+
this.deleteText = (route, extras) => this.delete(route, {
|
|
172
172
|
options: {
|
|
173
|
-
headers: new HttpHeaders(this.headers),
|
|
174
173
|
responseType: 'text',
|
|
174
|
+
...extras?.options,
|
|
175
|
+
headers: this.concatenateHeaders(new HttpHeaders(this.headers), extras?.options?.headers),
|
|
175
176
|
},
|
|
176
177
|
});
|
|
177
178
|
//#endregion
|
|
@@ -193,9 +194,9 @@ class ApiService {
|
|
|
193
194
|
: new HttpHeaders(this.headers);
|
|
194
195
|
return this.http
|
|
195
196
|
.patch(encodeURI(route), body, {
|
|
196
|
-
headers,
|
|
197
197
|
responseType: 'json',
|
|
198
198
|
...extras?.options,
|
|
199
|
+
headers: this.concatenateHeaders(headers, extras?.options?.headers),
|
|
199
200
|
})
|
|
200
201
|
.pipe(catchError(this.handleRequestError));
|
|
201
202
|
}
|
|
@@ -209,19 +210,18 @@ class ApiService {
|
|
|
209
210
|
: new HttpHeaders(this.headers);
|
|
210
211
|
return this.http
|
|
211
212
|
.post(encodeURI(route), body, {
|
|
212
|
-
headers,
|
|
213
213
|
responseType: 'json',
|
|
214
214
|
...extras?.options,
|
|
215
|
+
headers: this.concatenateHeaders(headers, extras?.options?.headers),
|
|
215
216
|
})
|
|
216
217
|
.pipe(catchError(this.handleRequestError));
|
|
217
218
|
}
|
|
218
219
|
postFile(route, body, extras) {
|
|
219
220
|
return this.post(route, body, {
|
|
220
|
-
...extras?.options,
|
|
221
221
|
options: {
|
|
222
|
-
headers: new HttpHeaders(this.fileHeaders),
|
|
223
222
|
responseType: 'json',
|
|
224
223
|
...extras?.options,
|
|
224
|
+
headers: this.concatenateHeaders(new HttpHeaders(this.fileHeaders), extras?.options?.headers),
|
|
225
225
|
},
|
|
226
226
|
});
|
|
227
227
|
}
|
|
@@ -234,7 +234,7 @@ class ApiService {
|
|
|
234
234
|
});
|
|
235
235
|
}
|
|
236
236
|
postString(route, body, extras) {
|
|
237
|
-
console.log('requestCount', ++ETSenvironment.requestCount);
|
|
237
|
+
// console.log('requestCount', ++ETSenvironment.requestCount);
|
|
238
238
|
let headers = new HttpHeaders({
|
|
239
239
|
'Content-Type': 'text/plain',
|
|
240
240
|
});
|
|
@@ -242,10 +242,10 @@ class ApiService {
|
|
|
242
242
|
? headers.set('useEndorsement', 'true')
|
|
243
243
|
: headers;
|
|
244
244
|
return this.post(route, body, {
|
|
245
|
-
...extras?.options,
|
|
246
245
|
options: {
|
|
247
|
-
|
|
246
|
+
...extras?.options,
|
|
248
247
|
responseType: 'text',
|
|
248
|
+
headers: this.concatenateHeaders(headers, extras?.options?.headers),
|
|
249
249
|
},
|
|
250
250
|
});
|
|
251
251
|
}
|
|
@@ -269,23 +269,13 @@ class ApiService {
|
|
|
269
269
|
});
|
|
270
270
|
}
|
|
271
271
|
getRequestParse(parameters) {
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
// const str = nbody.toString();
|
|
280
|
-
// if(parameters)
|
|
281
|
-
// debugger;
|
|
282
|
-
if (!parameters)
|
|
283
|
-
return '';
|
|
284
|
-
return ('?' +
|
|
285
|
-
Object.keys(parameters)
|
|
286
|
-
.filter((key) => parameters[key]?.toString()?.trim() != null)
|
|
287
|
-
.map((key) => `${key}=${parameters[key]?.toString()?.trim()}`)
|
|
288
|
-
.join('&'));
|
|
272
|
+
return !parameters
|
|
273
|
+
? ''
|
|
274
|
+
: '?' +
|
|
275
|
+
Object.keys(parameters)
|
|
276
|
+
.filter((key) => parameters[key]?.toString()?.trim() != null)
|
|
277
|
+
.map((key) => `${key}=${parameters[key]?.toString()?.trim()}`)
|
|
278
|
+
.join('&');
|
|
289
279
|
}
|
|
290
280
|
//#endregion
|
|
291
281
|
//#region PUT
|
|
@@ -301,9 +291,9 @@ class ApiService {
|
|
|
301
291
|
: new HttpHeaders(this.headers);
|
|
302
292
|
return this.http
|
|
303
293
|
.put(query, nbody, {
|
|
304
|
-
headers,
|
|
305
294
|
responseType: 'json',
|
|
306
295
|
...extras?.options,
|
|
296
|
+
headers: this.concatenateHeaders(new HttpHeaders(this.headers), extras?.options?.headers),
|
|
307
297
|
})
|
|
308
298
|
.pipe(catchError(this.handleRequestError));
|
|
309
299
|
}
|
|
@@ -317,4 +307,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.3", ngImpor
|
|
|
317
307
|
providedIn: 'root',
|
|
318
308
|
}]
|
|
319
309
|
}], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.CacheService }, { type: i3.LocalCacheService }]; } });
|
|
320
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ldHMtZmUtbmctc2RrL3NyYy9saWIvU2VydmljZXMvYXBpLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBR0wsV0FBVyxFQUNYLFdBQVcsR0FDWixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBTyxhQUFhLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsRSxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFN0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDOzs7OztBQVNoRSxNQUdhLFVBQVU7SUFFckIsSUFBWSxPQUFPO1FBQ2pCLE9BQU87WUFDTCxjQUFjLEVBQUUsa0JBQWtCO1NBQ25DLENBQUM7SUFDSixDQUFDO0lBQ0QsSUFBWSxXQUFXO1FBQ3JCLE9BQU87WUFDTCxPQUFPLEVBQUUscUJBQXFCO1NBQy9CLENBQUM7SUFDSixDQUFDO0lBRUQsWUFDUyxJQUFnQixFQUNoQixNQUFvQixFQUNwQixPQUEwQjtRQUYxQixTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLFdBQU0sR0FBTixNQUFNLENBQWM7UUFDcEIsWUFBTyxHQUFQLE9BQU8sQ0FBbUI7UUFmM0IsZUFBVSxHQUFHLENBQUMsQ0FBQztRQVdmLGVBQVUsR0FBRyxDQUFDLENBQUM7UUFnQmYsdUJBQWtCLEdBQUcsQ0FBQyxHQUFzQixFQUFFLEVBQUU7WUFDdEQsSUFBSSxPQUFPLENBQUM7WUFDWixJQUFJLEdBQUcsRUFBRSxLQUFLLFlBQVksV0FBVztnQkFDbkMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLFVBQVUsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUN4RSxPQUFPLFVBQVUsQ0FBQyxPQUFPLElBQUksR0FBRyxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNwRCxDQUFDLENBQUM7UUFDTSx1QkFBa0IsR0FBRyxDQUMzQixRQUFxQixFQUNyQixRQUFxQixFQUNSLEVBQUU7WUFDZixJQUFJLENBQUMsUUFBUTtnQkFBRSxPQUFPLFFBQVEsQ0FBQztpQkFDMUIsSUFBSSxDQUFDLFFBQVE7Z0JBQUUsT0FBTyxRQUFRLENBQUM7WUFFcEMsSUFBSSxPQUFPLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNoQyxLQUFLLE1BQU0sSUFBSSxJQUFJLFFBQVEsQ0FBQyxJQUFJLEVBQUU7Z0JBQ2hDLE9BQU8sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDbEQsS0FBSyxNQUFNLElBQUksSUFBSSxRQUFRLENBQUMsSUFBSSxFQUFFO2dCQUNoQyxPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ2xELE9BQU8sT0FBTyxDQUFDO1FBQ2pCLENBQUMsQ0FBQztRQTJGRixZQUFZO1FBRVosYUFBYTtRQUNiOzs7Ozs7V0FNRztRQUNILFFBQUcsR0FBRyxDQUNKLEtBQWEsRUFDYixVQUEyRCxFQUMzRCxNQUFnQixFQUNELEVBQUU7WUFDakIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQ3pDLE9BQU8sSUFBSSxVQUFVLENBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDL0IsTUFBTSxLQUFLLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ3ZELGdDQUFnQztnQkFDaEMsNkNBQTZDO2dCQUM3QyxJQUFJO2dCQUNKLE1BQU0sT0FBTyxHQUFHLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFFOUMsSUFBSSxDQUFDLElBQUk7cUJBQ04sR0FBRyxDQUFDLEtBQUssRUFBRTtvQkFDVixPQUFPLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUM5QixJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQzdCLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUN6QjtvQkFDRCxZQUFZLEVBQUUsTUFBTTtvQkFDcEIsR0FBRyxNQUFNLEVBQUUsT0FBTztpQkFDbkIsQ0FBQztxQkFDRCxJQUFJLENBQ0gsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFDdEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQ3JELEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO29CQUNmLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUM7d0JBQ3BCLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUk7NEJBQUUsT0FBTyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQzs2QkFDbkQsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVTs0QkFDekIsT0FBTyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQzs7NEJBQ3pDLE9BQU8sR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO29CQUN6QixPQUFPLEdBQUcsQ0FBQztnQkFDYixDQUFDLENBQUMsRUFDRixVQUFVLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQ3BDO3FCQUNBLFNBQVMsRUFBRTtxQkFDWCxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtvQkFDVixHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNaLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDOUIsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNqQixDQUFDLENBQUM7cUJBQ0QsS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDcEMsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUM7UUFFRixhQUFRLEdBQUcsQ0FBb0MsS0FBYSxFQUFFLEVBQUUsQ0FDOUQsSUFBSSxDQUFDLEdBQUcsQ0FBTSxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUUvRCxZQUFPLEdBQUcsQ0FDUixLQUFhLEVBQ2IsVUFBMkQsRUFDM0QsRUFBRSxDQUNGLElBQUksQ0FBQyxHQUFHLENBQUksS0FBSyxFQUFFLFVBQVUsRUFBRTtZQUM3QixPQUFPLEVBQUU7Z0JBQ1AsT0FBTyxFQUFFLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7Z0JBQ3RDLFlBQVksRUFBRSxNQUFNO2FBQ3JCO1NBQ0YsQ0FBQyxDQUFDO1FBQ0wsWUFBTyxHQUFHLENBQ1IsS0FBYSxFQUNiLFVBQTJELEVBQzNELEVBQUUsQ0FDRixJQUFJLENBQUMsR0FBRyxDQUFJLEtBQUssRUFBRSxVQUFVLEVBQUU7WUFDN0IsT0FBTyxFQUFFO2dCQUNQLE9BQU8sRUFBRSxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO2dCQUN0QyxZQUFZLEVBQUUsYUFBYTthQUM1QjtTQUNGLENBQUMsQ0FBQztRQUNMLGdCQUFXLEdBQUcsQ0FBVSxLQUFhLEVBQUUsSUFBVSxFQUFFLE1BQWdCLEVBQUUsRUFBRTtZQUNyRSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztZQUM3QixXQUFXO1lBQ1gsTUFBTSxHQUFHLEdBQUcsSUFBSSxXQUFXLENBQ3pCLEtBQUssRUFDTCxLQUFLLEVBQ0wsSUFBSSxFQUNKLE1BQU0sRUFBRSxPQUFPLElBQUk7Z0JBQ2pCLE9BQU8sRUFBRSxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO2dCQUN0QyxZQUFZLEVBQUUsTUFBTTthQUNyQixDQUNGLENBQUM7WUFDRixPQUFPLElBQUksQ0FBQyxJQUFJO2lCQUNiLE9BQU8sQ0FBSSxHQUFHLENBQUM7aUJBQ2YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBa0IsQ0FBQztRQUNoRSxDQUFDLENBQUM7UUFFRixpQkFBWSxHQUFHLENBQ2IsS0FBYSxFQUNiLFVBQW1CLEVBQ25CLE1BQWdCLEVBQ2hCLEVBQUU7WUFDRixPQUFPLElBQUksVUFBVSxDQUFJLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQy9CLE1BQU0sS0FBSyxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUN2RCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO29CQUMzQixHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFJLEtBQUssQ0FBQyxDQUFDLENBQUM7b0JBQ3pDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztpQkFDaEI7O29CQUNDLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTt3QkFDdEQsMkJBQTJCO3dCQUMzQixHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUNaLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQzt3QkFDL0IsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUNqQixDQUFDLENBQUMsQ0FBQztZQUNQLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDO1FBQ0Ysc0JBQWlCLEdBQUcsQ0FDbEIsS0FBYSxFQUNiLFVBQW1CLEVBQ25CLE1BQWdCLEVBQ2hCLEVBQUU7WUFDRixPQUFPLElBQUksVUFBVSxDQUFJLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQy9CLE1BQU0sS0FBSyxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUN2RCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO29CQUMzQixHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFJLEtBQUssQ0FBQyxDQUFDLENBQUM7aUJBQzFDO2dCQUNELGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7cUJBQ3pDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO29CQUNWLDJCQUEyQjtvQkFDM0IsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDWixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQy9CLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDakIsQ0FBQyxDQUFDO3FCQUNELEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO29CQUNYLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ2IsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNqQixDQUFDLENBQUMsQ0FBQztZQUNQLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDO1FBMkNGLFlBQVk7UUFFWixnQkFBZ0I7UUFDaEIsV0FBTSxHQUFHLENBQVUsS0FBYSxFQUFFLE1BQWdCLEVBQUUsRUFBRTtZQUNwRCxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUVoQyxJQUFJLE9BQU8sR0FBRyxNQUFNLEVBQUUsY0FBYztnQkFDbEMsQ0FBQyxDQUFDLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsTUFBTSxDQUFDO2dCQUM3RCxDQUFDLENBQUMsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2xDLE9BQU8sSUFBSSxDQUFDLElBQUk7aUJBQ2IsTUFBTSxDQUFJLEtBQUssRUFBRTtnQkFDaEIsT0FBTztnQkFDUCxZQUFZLEVBQUUsTUFBTTtnQkFDcEIsR0FBRyxNQUFNLEVBQUUsT0FBTzthQUNuQixDQUFDO2lCQUNELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQW9CLENBQUM7UUFDbEUsQ0FBQyxDQUFDO1FBQ0YsbUJBQWMsR0FBRyxDQUFVLEtBQWEsRUFBRSxJQUFVLEVBQUUsT0FBUSxFQUFFLEVBQUU7WUFDaEUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDaEMsTUFBTSxHQUFHLEdBQUcsSUFBSSxXQUFXLENBQ3pCLFFBQVEsRUFDUixLQUFLLEVBQ0wsSUFBSSxFQUNKLE9BQU8sSUFBSTtnQkFDVCxPQUFPLEVBQUUsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztnQkFDdEMsWUFBWSxFQUFFLE1BQU07YUFDckIsQ0FDRixDQUFDO1lBQ0YsT0FBTyxJQUFJLENBQUMsSUFBSTtpQkFDYixPQUFPLENBQUksR0FBRyxDQUFDO2lCQUNmLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQW9CLENBQUM7UUFDbEUsQ0FBQyxDQUFDO1FBQ0YsZUFBVSxHQUFHLENBQUMsS0FBYSxFQUFFLEVBQUUsQ0FDN0IsSUFBSSxDQUFDLE1BQU0sQ0FBUyxLQUFLLEVBQUU7WUFDekIsT0FBTyxFQUFFO2dCQUNQLE9BQU8sRUFBRSxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO2dCQUN0QyxZQUFZLEVBQUUsTUFBTTthQUNyQjtTQUNGLENBQUMsQ0FBQztRQUNMLFlBQVk7UUFFWixjQUFTLEdBQUcsQ0FBSSxJQUFTLEVBQUUsRUFBRTtZQUMzQixPQUFPLElBQUksRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQWUsQ0FBQztRQUNoRSxDQUFDLENBQUM7SUF2VkMsQ0FBQztJQUVJLFNBQVMsQ0FDZixNQUF5QyxFQUN6QyxLQUFLLEVBQ0wsR0FBRyxNQUFNO1FBRVQsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ25CLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDO1NBQ3ZDO0lBQ0gsQ0FBQztJQXNCRCxlQUFlO0lBQ2YsS0FBSyxDQUFVLEtBQWEsRUFBRSxJQUFLLEVBQUUsTUFBZ0I7UUFDbkQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3BDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEIsSUFBSSxPQUFPLEdBQUcsTUFBTSxFQUFFLGNBQWM7WUFDbEMsQ0FBQyxDQUFDLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsTUFBTSxDQUFDO1lBQzdELENBQUMsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbEMsT0FBTyxJQUFJLENBQUMsSUFBSTthQUNiLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxFQUFFO1lBQzdCLE9BQU87WUFDUCxZQUFZLEVBQUUsTUFBTTtZQUNwQixHQUFHLE1BQU0sRUFBRSxPQUFPO1NBQ25CLENBQUM7YUFDRCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFvQixDQUFDO0lBQ2xFLENBQUM7SUFDRCxZQUFZO0lBQ1osY0FBYztJQUNkLElBQUksQ0FBVSxLQUFhLEVBQUUsSUFBSyxFQUFFLE1BQWdCO1FBQ2xELElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNwQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xCLElBQUksT0FBTyxHQUFHLE1BQU0sRUFBRSxjQUFjO1lBQ2xDLENBQUMsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLGdCQUFnQixFQUFFLE1BQU0sQ0FBQztZQUM3RCxDQUFDLENBQUMsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRWxDLE9BQU8sSUFBSSxDQUFDLElBQUk7YUFDYixJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksRUFBRTtZQUM1QixPQUFPO1lBQ1AsWUFBWSxFQUFFLE1BQU07WUFDcEIsR0FBRyxNQUFNLEVBQUUsT0FBTztTQUNuQixDQUFDO2FBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBb0IsQ0FBQztJQUNsRSxDQUFDO0lBQ0QsUUFBUSxDQUFVLEtBQWEsRUFBRSxJQUFjLEVBQUUsTUFBZ0I7UUFDL0QsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFJLEtBQUssRUFBRSxJQUFJLEVBQUU7WUFDL0IsR0FBRyxNQUFNLEVBQUUsT0FBTztZQUNsQixPQUFPLEVBQUU7Z0JBQ1AsT0FBTyxFQUFFLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7Z0JBQzFDLFlBQVksRUFBRSxNQUFNO2dCQUNwQixHQUFHLE1BQU0sRUFBRSxPQUFPO2FBQ25CO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNELHVCQUF1QixDQUFVLEtBQWEsRUFBRSxJQUFjO1FBQzVELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBSSxLQUFLLEVBQUUsSUFBSSxFQUFFO1lBQy9CLE9BQU8sRUFBRTtnQkFDUCxPQUFPLEVBQUUsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEdBQUcsQ0FDNUMsZ0JBQWdCLEVBQ2hCLE1BQU0sQ0FDUDtnQkFDRCxZQUFZLEVBQUUsTUFBTTthQUNyQjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDRCxVQUFVLENBQUMsS0FBYSxFQUFFLElBQUssRUFBRSxNQUFnQjtRQUMvQyxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsRUFBRSxFQUFFLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUMzRCxJQUFJLE9BQU8sR0FBRyxJQUFJLFdBQVcsQ0FBQztZQUM1QixjQUFjLEVBQUUsWUFBWTtTQUM3QixDQUFDLENBQUM7UUFDSCxPQUFPLEdBQUcsTUFBTSxFQUFFLGNBQWM7WUFDOUIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsTUFBTSxDQUFDO1lBQ3ZDLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDWixPQUFPLElBQUksQ0FBQyxJQUFJLENBQVMsS0FBSyxFQUFFLElBQUksRUFBRTtZQUNwQyxHQUFHLE1BQU0sRUFBRSxPQUFPO1lBQ2xCLE9BQU8sRUFBRTtnQkFDUCxPQUFPO2dCQUNQLFlBQVksRUFBRSxNQUFNO2FBQ3JCO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNELHdCQUF3QixDQUFDLEtBQWEsRUFBRSxJQUFZO1FBQ2xELE9BQU8sSUFBSSxVQUFVLENBQVMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNwQyxNQUFNLEdBQUcsR0FBRyxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDekIsV0FBVztZQUNYLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsRUFBRTtnQkFDdkMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBUyxLQUFLLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDM0Q7WUFFRCxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUM7aUJBQ3hCLFNBQVMsRUFBRTtpQkFDWCxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtnQkFDVixHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNaLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUMzQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDakIsQ0FBQyxDQUFDO2lCQUNELEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUNYLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDZixDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQTBJRCxlQUFlLENBQUMsVUFBbUI7UUFDakMsdUNBQXVDO1FBQ3ZDLGtDQUFrQztRQUNsQyxpRUFBaUU7UUFDakUsdUNBQXVDO1FBQ3ZDLHlEQUF5RDtRQUN6RCxNQUFNO1FBQ04sSUFBSTtRQUNKLGdDQUFnQztRQUNoQyxpQkFBaUI7UUFDakIsWUFBWTtRQUNaLElBQUksQ0FBQyxVQUFVO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFDM0IsT0FBTyxDQUNMLEdBQUc7WUFDSCxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztpQkFDcEIsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksSUFBSSxDQUFDO2lCQUM1RCxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDO2lCQUM3RCxJQUFJLENBQUMsR0FBRyxDQUFDLENBQ2IsQ0FBQztJQUNKLENBQUM7SUFDRCxZQUFZO0lBRVosYUFBYTtJQUNiLEdBQUcsQ0FBVSxLQUFhLEVBQUUsSUFBSyxFQUFFLE1BQWdCO1FBQ2pELElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNuQyxJQUFJLEtBQUssR0FBRyxLQUFLLEdBQUcsRUFBRSxFQUNwQixLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2YsSUFBSSxNQUFNLEVBQUUsV0FBVyxJQUFJLGFBQWEsRUFBRTtZQUN4QyxLQUFLLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNwQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1NBQ2Q7UUFDRCxJQUFJLE9BQU8sR0FBRyxNQUFNLEVBQUUsY0FBYztZQUNsQyxDQUFDLENBQUMsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNLENBQUM7WUFDN0QsQ0FBQyxDQUFDLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNsQyxPQUFPLElBQUksQ0FBQyxJQUFJO2FBQ2IsR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUU7WUFDakIsT0FBTztZQUNQLFlBQVksRUFBRSxNQUFNO1lBQ3BCLEdBQUcsTUFBTSxFQUFFLE9BQU87U0FDbkIsQ0FBQzthQUNELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQW9CLENBQUM7SUFDbEUsQ0FBQzs4R0E1VFUsVUFBVTtrSEFBVixVQUFVLGNBRlQsTUFBTTs7U0FFUCxVQUFVOzJGQUFWLFVBQVU7a0JBSHRCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgSHR0cENsaWVudCxcbiAgSHR0cEVycm9yUmVzcG9uc2UsXG4gIEh0dHBIZWFkZXJzLFxuICBIdHRwUmVxdWVzdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgaWlmLCBsYXN0VmFsdWVGcm9tLCBPYnNlcnZhYmxlLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAsIHJldHJ5LCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBJQ29kZURlc2NyaXB0aW9uLCBJQ29kZVRpdGxlIH0gZnJvbSAnLi4vU2hhcmVkL21vZGVscy9pbmRleC5tb2RlbCc7XG5pbXBvcnQgeyBFVFNlbnZpcm9ubWVudCB9IGZyb20gJy4uLy4uL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudCc7XG5pbXBvcnQgeyBDYWNoZVNlcnZpY2UgfSBmcm9tICcuL2NhY2hlL2NhY2hlLnNlcnZpY2UnO1xuaW1wb3J0IHsgTG9jYWxDYWNoZVNlcnZpY2UgfSBmcm9tICcuL2NhY2hlL2xvY2FsLWNhY2hlLnNlcnZpY2UnO1xuZXhwb3J0IGludGVyZmFjZSBJUmVzcG9uc2Uge1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIHJlc3VsdDogYW55O1xuICBzdGF0dXM6ICdzdWNjZXNzJyB8ICdlcnJvcicgfCAnZmFpbHVyZSc7XG4gIHN0YXR1c0NvZGU6ICdTTTAwMCcgfCAnU00wMDEnIHwgJ1NNMDAyJyB8ICdTTTAwMyc7XG59XG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgQXBpU2VydmljZSB7XG4gIHByaXZhdGUgc2hvd1JvdXRlcyA9IDA7XG4gIHByaXZhdGUgZ2V0IGhlYWRlcnMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgfTtcbiAgfVxuICBwcml2YXRlIGdldCBmaWxlSGVhZGVycygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZW5jdHlwZTogJ211bHRpcGFydC9mb3JtLWRhdGEnLFxuICAgIH07XG4gIH1cbiAgcHJpdmF0ZSByZXRyeUNvdW50ID0gMDtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgcHVibGljIGNhY2hlUzogQ2FjaGVTZXJ2aWNlLFxuICAgIHB1YmxpYyBsQ2FjaGVTOiBMb2NhbENhY2hlU2VydmljZVxuICApIHt9XG5cbiAgcHJpdmF0ZSBsb2dSb3V0ZXMoXG4gICAgbWV0aG9kOiAnZ2V0JyB8ICdwb3N0JyB8ICdwdXQnIHwgJ2RlbGV0ZScsXG4gICAgcm91dGUsXG4gICAgLi4uZXh0cmFzXG4gICkge1xuICAgIGlmICh0aGlzLnNob3dSb3V0ZXMpIHtcbiAgICAgIGNvbnNvbGUubG9nKG1ldGhvZCwgcm91dGUsIC4uLmV4dHJhcyk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgaGFuZGxlUmVxdWVzdEVycm9yID0gKGVycjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcbiAgICBsZXQgbWVzc2FnZTtcbiAgICBpZiAoZXJyPy5lcnJvciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKVxuICAgICAgbWVzc2FnZSA9IFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgbmV3IFVpbnQ4QXJyYXkoZXJyPy5lcnJvcikpO1xuICAgIHJldHVybiB0aHJvd0Vycm9yKG1lc3NhZ2UgfHwgZXJyPy5lcnJvcj8ubWVzc2FnZSk7XG4gIH07XG4gIHByaXZhdGUgY29uY2F0ZW5hdGVIZWFkZXJzID0gKFxuICAgIGhlYWRlcnMxOiBIdHRwSGVhZGVycyxcbiAgICBoZWFkZXJzMjogSHR0cEhlYWRlcnNcbiAgKTogSHR0cEhlYWRlcnMgPT4ge1xuICAgIGlmICghaGVhZGVyczEpIHJldHVybiBoZWFkZXJzMjtcbiAgICBlbHNlIGlmICghaGVhZGVyczIpIHJldHVybiBoZWFkZXJzMTtcblxuICAgIGxldCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCk7XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGhlYWRlcnMxLmtleXMoKSlcbiAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldChpdGVtLCBoZWFkZXJzMS5nZXQoaXRlbSkpO1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiBoZWFkZXJzMi5rZXlzKCkpXG4gICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoaXRlbSwgaGVhZGVyczIuZ2V0KGl0ZW0pKTtcbiAgICByZXR1cm4gaGVhZGVycztcbiAgfTtcblxuICAvLyNyZWdpb24gUEFUQ0hcbiAgcGF0Y2g8VCA9IGFueT4ocm91dGU6IHN0cmluZywgYm9keT8sIGV4dHJhcz86IElFeHRyYXMpOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICB0aGlzLmxvZ1JvdXRlcygncG9zdCcsIHJvdXRlLCBib2R5KTtcbiAgICBjb25zb2xlLmxvZyhib2R5KTtcbiAgICBsZXQgaGVhZGVycyA9IGV4dHJhcz8udXNlRW5kb3JzZW1lbnRcbiAgICAgID8gbmV3IEh0dHBIZWFkZXJzKHRoaXMuaGVhZGVycykuc2V0KCd1c2VFbmRvcnNlbWVudCcsICd0cnVlJylcbiAgICAgIDogbmV3IEh0dHBIZWFkZXJzKHRoaXMuaGVhZGVycyk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnBhdGNoKGVuY29kZVVSSShyb3V0ZSksIGJvZHksIHtcbiAgICAgICAgaGVhZGVycyxcbiAgICAgICAgcmVzcG9uc2VUeXBlOiAnanNvbicsXG4gICAgICAgIC4uLmV4dHJhcz8ub3B0aW9ucyxcbiAgICAgIH0pXG4gICAgICAucGlwZShjYXRjaEVycm9yKHRoaXMuaGFuZGxlUmVxdWVzdEVycm9yKSkgYXMgT2JzZXJ2YWJsZTxhbnk+O1xuICB9XG4gIC8vI2VuZHJlZ2lvblxuICAvLyNyZWdpb24gUE9TVFxuICBwb3N0PFQgPSBhbnk+KHJvdXRlOiBzdHJpbmcsIGJvZHk/LCBleHRyYXM/OiBJRXh0cmFzKTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgdGhpcy5sb2dSb3V0ZXMoJ3Bvc3QnLCByb3V0ZSwgYm9keSk7XG4gICAgY29uc29sZS5sb2coYm9keSk7XG4gICAgbGV0IGhlYWRlcnMgPSBleHRyYXM/LnVzZUVuZG9yc2VtZW50XG4gICAgICA/IG5ldyBIdHRwSGVhZGVycyh0aGlzLmhlYWRlcnMpLnNldCgndXNlRW5kb3JzZW1lbnQnLCAndHJ1ZScpXG4gICAgICA6IG5ldyBIdHRwSGVhZGVycyh0aGlzLmhlYWRlcnMpO1xuXG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnBvc3QoZW5jb2RlVVJJKHJvdXRlKSwgYm9keSwge1xuICAgICAgICBoZWFkZXJzLFxuICAgICAgICByZXNwb25zZVR5cGU6ICdqc29uJyxcbiAgICAgICAgLi4uZXh0cmFzPy5vcHRpb25zLFxuICAgICAgfSlcbiAgICAgIC5waXBlKGNhdGNoRXJyb3IodGhpcy5oYW5kbGVSZXF1ZXN0RXJyb3IpKSBhcyBPYnNlcnZhYmxlPGFueT47XG4gIH1cbiAgcG9zdEZpbGU8VCA9IGFueT4ocm91dGU6IHN0cmluZywgYm9keTogRm9ybURhdGEsIGV4dHJhcz86IElFeHRyYXMpIHtcbiAgICByZXR1cm4gdGhpcy5wb3N0PFQ+KHJvdXRlLCBib2R5LCB7XG4gICAgICAuLi5leHRyYXM/Lm9wdGlvbnMsXG4gICAgICBvcHRpb25zOiB7XG4gICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh0aGlzLmZpbGVIZWFkZXJzKSxcbiAgICAgICAgcmVzcG9uc2VUeXBlOiAnanNvbicsXG4gICAgICAgIC4uLmV4dHJhcz8ub3B0aW9ucyxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbiAgcG9zdEZpbGVXaXRoRW5kb3JzZW1lbnQ8VCA9IGFueT4ocm91dGU6IHN0cmluZywgYm9keTogRm9ybURhdGEpIHtcbiAgICByZXR1cm4gdGhpcy5wb3N0PFQ+KHJvdXRlLCBib2R5LCB7XG4gICAgICBvcHRpb25zOiB7XG4gICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh0aGlzLmZpbGVIZWFkZXJzKS5zZXQoXG4gICAgICAgICAgJ3VzZUVuZG9yc2VtZW50JyxcbiAgICAgICAgICAndHJ1ZSdcbiAgICAgICAgKSxcbiAgICAgICAgcmVzcG9uc2VUeXBlOiAnanNvbicsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG4gIHBvc3RTdHJpbmcocm91dGU6IHN0cmluZywgYm9keT8sIGV4dHJhcz86IElFeHRyYXMpIHtcbiAgICBjb25zb2xlLmxvZygncmVxdWVzdENvdW50JywgKytFVFNlbnZpcm9ubWVudC5yZXF1ZXN0Q291bnQpO1xuICAgIGxldCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICdDb250ZW50LVR5cGUnOiAndGV4dC9wbGFpbicsXG4gICAgfSk7XG4gICAgaGVhZGVycyA9IGV4dHJhcz8udXNlRW5kb3JzZW1lbnRcbiAgICAgID8gaGVhZGVycy5zZXQoJ3VzZUVuZG9yc2VtZW50JywgJ3RydWUnKVxuICAgICAgOiBoZWFkZXJzO1xuICAgIHJldHVybiB0aGlzLnBvc3Q8c3RyaW5nPihyb3V0ZSwgYm9keSwge1xuICAgICAgLi4uZXh0cmFzPy5vcHRpb25zLFxuICAgICAgb3B0aW9uczoge1xuICAgICAgICBoZWFkZXJzLFxuICAgICAgICByZXNwb25zZVR5cGU6ICd0ZXh0JyxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbiAgcG9zdFN0cmluZ1dpdGhMb2NhbENhY2hlKHJvdXRlOiBzdHJpbmcsIGJvZHk6IHN0cmluZykge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZTxzdHJpbmc+KChyZXMpID0+IHtcbiAgICAgIGNvbnN0IGJkeSA9IGJvZHk/LnRyaW0oKTtcbiAgICAgIC8vIGRlYnVnZ2VyXG4gICAgICBpZiAodGhpcy5sQ2FjaGVTLmhhcyhyb3V0ZSArICdfJyArIGJkeSkpIHtcbiAgICAgICAgcmVzLm5leHQodGhpcy5sQ2FjaGVTLmdldEl0ZW08c3RyaW5nPihyb3V0ZSArICdfJyArIGJkeSkpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnBvc3RTdHJpbmcocm91dGUsIGJkeSlcbiAgICAgICAgLnRvUHJvbWlzZSgpXG4gICAgICAgIC50aGVuKChyKSA9PiB7XG4gICAgICAgICAgcmVzLm5leHQocik7XG4gICAgICAgICAgdGhpcy5sQ2FjaGVTLnNldEl0ZW0ocm91dGUgKyAnXycgKyBiZHksIHIpO1xuICAgICAgICAgIHJlcy5jb21wbGV0ZSgpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICByZXMuZXJyb3IoZSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiBHRVRcbiAgLyoqXG4gICAqIFBlcmZvcm0gYSBHRVQgcmVxdWVzdFxuICAgKiBAcGFyYW0gcm91dGUgQVBJIGVuZHBvaW50XG4gICAqIEBwYXJhbSBwYXJhbWV0ZXJzIE9iamVjdCB0byBjb252ZXJ0IGludG8gcXVlcnlwYXJhbXNcbiAgICogQHBhcmFtIGV4dHJhcyBFeHRyYSBjb25maWd1cmF0aW9ucyBmb3IgdGhlIHJlcXVlc3RcbiAgICogQHJldHVybnNcbiAgICovXG4gIGdldCA9IDxUID0gYW55PihcbiAgICByb3V0ZTogc3RyaW5nLFxuICAgIHBhcmFtZXRlcnM/OiB7IFtmaWVsZDogc3RyaW5nXTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB9LFxuICAgIGV4dHJhcz86IElFeHRyYXNcbiAgKTogT2JzZXJ2YWJsZTxUPiA9PiB7XG4gICAgdGhpcy5sb2dSb3V0ZXMoJ2dldCcsIHJvdXRlLCBwYXJhbWV0ZXJzKTtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGU8VD4oKHJlcykgPT4ge1xuICAgICAgY29uc3QgcXVlcnkgPSByb3V0ZSArIHRoaXMuZ2V0UmVxdWVzdFBhcnNlKHBhcmFtZXRlcnMpO1xuICAgICAgLy8gaWYgKHRoaXMuY2FjaGVTLmhhcyhxdWVyeSkpIHtcbiAgICAgIC8vICAgcmVzLm5leHQodGhpcy5jYWNoZVMuZ2V0SXRlbTxUPihyb3V0ZSkpO1xuICAgICAgLy8gfVxuICAgICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycyh0aGlzLmhlYWRlcnMpO1xuXG4gICAgICB0aGlzLmh0dHBcbiAgICAgICAgLmdldChxdWVyeSwge1xuICAgICAgICAgIGhlYWRlcnM6IHRoaXMuY29uY2F0ZW5hdGVIZWFkZXJzKFxuICAgICAgICAgICAgbmV3IEh0dHBIZWFkZXJzKHRoaXMuaGVhZGVycyksXG4gICAgICAgICAgICBleHRyYXM/Lm9wdGlvbnM/LmhlYWRlcnNcbiAgICAgICAgICApLFxuICAgICAgICAgIHJlc3BvbnNlVHlwZTogJ2pzb24nLFxuICAgICAgICAgIC4uLmV4dHJhcz8ub3B0aW9ucyxcbiAgICAgICAgfSlcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgcmV0cnkodGhpcy5yZXRyeUNvdW50KSxcbiAgICAgICAgICB0YXAoKHgpID0+ICh0aGlzLnNob3dSb3V0ZXMgPyBjb25zb2xlLmxvZyh4KSA6IG51bGwpKSxcbiAgICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyZXMpKVxuICAgICAgICAgICAgICBpZiAocmVzWzBdPy5jb2RlKSByZXR1cm4gcmVzLnNvcnQoKS5zb3J0MignY29kZScsIHRydWUpO1xuICAgICAgICAgICAgICBlbHNlIGlmIChyZXNbMF0/LmNvbHVtbk5hbWUpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlcy5zb3J0KCkuc29ydDIoJ2NvbHVtbk5hbWUnLCB0cnVlKTtcbiAgICAgICAgICAgICAgZWxzZSByZXR1cm4gcmVzLnNvcnQoKTtcbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZVJlcXVlc3RFcnJvcilcbiAgICAgICAgKVxuICAgICAgICAudG9Qcm9taXNlKClcbiAgICAgICAgLnRoZW4oKHIpID0+IHtcbiAgICAgICAgICByZXMubmV4dChyKTtcbiAgICAgICAgICB0aGlzLmNhY2hlUy5zZXRJdGVtKHF1ZXJ5LCByKTtcbiAgICAgICAgICByZXMuY29tcGxldGUoKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKChlcnIpID0+IHJlcy5lcnJvcihlcnIpKTtcbiAgICB9KTtcbiAgfTtcblxuICBnZXRDb2RlcyA9IDxUID0gSUNvZGVUaXRsZSAmIElDb2RlRGVzY3JpcHRpb24+KHJvdXRlOiBzdHJpbmcpID0+XG4gICAgdGhpcy5nZXQ8VFtdPihyb3V0ZSkucGlwZShtYXAoKHJlcykgPT4gdGhpcy5zb3J0Q29kZXMocmVzKSkpO1xuXG4gIGdldFRleHQgPSA8VCA9IHN0cmluZz4oXG4gICAgcm91dGU6IHN0cmluZyxcbiAgICBwYXJhbWV0ZXJzPzogeyBbZmllbGQ6IHN0cmluZ106IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfVxuICApID0+XG4gICAgdGhpcy5nZXQ8VD4ocm91dGUsIHBhcmFtZXRlcnMsIHtcbiAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHRoaXMuaGVhZGVycyksXG4gICAgICAgIHJlc3BvbnNlVHlwZTogJ3RleHQnLFxuICAgICAgfSxcbiAgICB9KTtcbiAgZ2V0RmlsZSA9IDxUID0gc3RyaW5nPihcbiAgICByb3V0ZTogc3RyaW5nLFxuICAgIHBhcmFtZXRlcnM/OiB7IFtmaWVsZDogc3RyaW5nXTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB9XG4gICkgPT5cbiAgICB0aGlzLmdldDxUPihyb3V0ZSwgcGFyYW1ldGVycywge1xuICAgICAgb3B0aW9uczoge1xuICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXJzKSxcbiAgICAgICAgcmVzcG9uc2VUeXBlOiAnYXJyYXlCdWZmZXInLFxuICAgICAgfSxcbiAgICB9KTtcbiAgZ2V0V2l0aEJvZHkgPSA8VCA9IGFueT4ocm91dGU6IHN0cmluZywgYm9keT86IGFueSwgZXh0cmFzPzogSUV4dHJhcykgPT4ge1xuICAgIHRoaXMubG9nUm91dGVzKCdnZXQnLCByb3V0ZSk7XG4gICAgLy8gZGVidWdnZXJcbiAgICBjb25zdCByZXEgPSBuZXcgSHR0cFJlcXVlc3QoXG4gICAgICAnR0VUJyxcbiAgICAgIHJvdXRlLFxuICAgICAgYm9keSxcbiAgICAgIGV4dHJhcz8ub3B0aW9ucyB8fCB7XG4gICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh0aGlzLmhlYWRlcnMpLFxuICAgICAgICByZXNwb25zZVR5cGU6ICdqc29uJyxcbiAgICAgIH1cbiAgICApO1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5yZXF1ZXN0PFQ+KHJlcSlcbiAgICAgIC5waXBlKGNhdGNoRXJyb3IodGhpcy5oYW5kbGVSZXF1ZXN0RXJyb3IpKSBhcyBPYnNlcnZhYmxlPFQ+O1xuICB9O1xuXG4gIGdldEZyb21sb2NhbCA9IDxUID0gYW55PihcbiAgICByb3V0ZTogc3RyaW5nLFxuICAgIHBhcmFtZXRlcnM/OiBPYmplY3QsXG4gICAgZXh0cmFzPzogSUV4dHJhc1xuICApID0+IHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGU8VD4oKHJlcykgPT4ge1xuICAgICAgY29uc3QgcXVlcnkgPSByb3V0ZSArIHRoaXMuZ2V0UmVxdWVzdFBhcnNlKHBhcmFtZXRlcnMpO1xuICAgICAgaWYgKHRoaXMubENhY2hlUy5oYXMocXVlcnkpKSB7XG4gICAgICAgIHJlcy5uZXh0KHRoaXMubENhY2hlUy5nZXRJdGVtPFQ+KHF1ZXJ5KSk7XG4gICAgICAgIHJlcy5jb21wbGV0ZSgpO1xuICAgICAgfSBlbHNlXG4gICAgICAgIGxhc3RWYWx1ZUZyb20odGhpcy5nZXQocXVlcnksIG51bGwsIGV4dHJhcykpLnRoZW4oKHIpID0+IHtcbiAgICAgICAgICAvLyBpZiAoIXRoaXMuY1MuaGFzKHJvdXRlKSlcbiAgICAgICAgICByZXMubmV4dChyKTtcbiAgICAgICAgICB0aGlzLmxDYWNoZVMuc2V0SXRlbShxdWVyeSwgcik7XG4gICAgICAgICAgcmVzLmNvbXBsZXRlKCk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuICBnZXRXaXRoTG9jYWxDYWNoZSA9IDxUID0gYW55PihcbiAgICByb3V0ZTogc3RyaW5nLFxuICAgIHBhcmFtZXRlcnM/OiBPYmplY3QsXG4gICAgZXh0cmFzPzogSUV4dHJhc1xuICApID0+IHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGU8VD4oKHJlcykgPT4ge1xuICAgICAgY29uc3QgcXVlcnkgPSByb3V0ZSArIHRoaXMuZ2V0UmVxdWVzdFBhcnNlKHBhcmFtZXRlcnMpO1xuICAgICAgaWYgKHRoaXMubENhY2hlUy5oYXMocXVlcnkpKSB7XG4gICAgICAgIHJlcy5uZXh0KHRoaXMubENhY2hlUy5nZXRJdGVtPFQ+KHF1ZXJ5KSk7XG4gICAgICB9XG4gICAgICBsYXN0VmFsdWVGcm9tKHRoaXMuZ2V0KHF1ZXJ5LCBudWxsLCBleHRyYXMpKVxuICAgICAgICAudGhlbigocikgPT4ge1xuICAgICAgICAgIC8vIGlmICghdGhpcy5jUy5oYXMocm91dGUpKVxuICAgICAgICAgIHJlcy5uZXh0KHIpO1xuICAgICAgICAgIHRoaXMubENhY2hlUy5zZXRJdGVtKHF1ZXJ5LCByKTtcbiAgICAgICAgICByZXMuY29tcGxldGUoKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgcmVzLmVycm9yKGUpO1xuICAgICAgICAgIHJlcy5jb21wbGV0ZSgpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfTtcbiAgZ2V0UmVxdWVzdFBhcnNlKHBhcmFtZXRlcnM/OiBPYmplY3QpIHtcbiAgICAvLyBjb25zdCBuYm9keSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICAvLyBmb3IgKGNvbnN0IGtleSBpbiBwYXJhbWV0ZXJzKSB7XG4gICAgLy8gICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHBhcmFtZXRlcnMsIGtleSkpIHtcbiAgICAvLyAgICAgY29uc3QgZWxlbWVudCA9IHBhcmFtZXRlcnNba2V5XTtcbiAgICAvLyAgICAgaWYgKGVsZW1lbnQgIT0gbnVsbCkgbmJvZHkuc2V0KGtleSwgZWxlbWVudCArICcnKTtcbiAgICAvLyAgIH1cbiAgICAvLyB9XG4gICAgLy8gY29uc3Qgc3RyID0gbmJvZHkudG9TdHJpbmcoKTtcbiAgICAvLyBpZihwYXJhbWV0ZXJzKVxuICAgIC8vIGRlYnVnZ2VyO1xuICAgIGlmICghcGFyYW1ldGVycykgcmV0dXJuICcnO1xuICAgIHJldHVybiAoXG4gICAgICAnPycgK1xuICAgICAgT2JqZWN0LmtleXMocGFyYW1ldGVycylcbiAgICAgICAgLmZpbHRlcigoa2V5KSA9PiBwYXJhbWV0ZXJzW2tleV0/LnRvU3RyaW5nKCk/LnRyaW0oKSAhPSBudWxsKVxuICAgICAgICAubWFwKChrZXkpID0+IGAke2tleX09JHtwYXJhbWV0ZXJzW2tleV0/LnRvU3RyaW5nKCk/LnRyaW0oKX1gKVxuICAgICAgICAuam9pbignJicpXG4gICAgKTtcbiAgfVxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gUFVUXG4gIHB1dDxUID0gYW55Pihyb3V0ZTogc3RyaW5nLCBib2R5PywgZXh0cmFzPzogSUV4dHJhcyk6IE9ic2VydmFibGU8VD4ge1xuICAgIHRoaXMubG9nUm91dGVzKCdwdXQnLCByb3V0ZSwgYm9keSk7XG4gICAgbGV0IHF1ZXJ5ID0gcm91dGUgKyAnJyxcbiAgICAgIG5ib2R5ID0gYm9keTtcbiAgICBpZiAoZXh0cmFzPy5yZXF1ZXN0VHlwZSA9PSAncXVlcnlQYXJhbXMnKSB7XG4gICAgICBxdWVyeSArPSB0aGlzLmdldFJlcXVlc3RQYXJzZShib2R5KTtcbiAgICAgIG5ib2R5ID0gbnVsbDtcbiAgICB9XG4gICAgbGV0IGhlYWRlcnMgPSBleHRyYXM/LnVzZUVuZG9yc2VtZW50XG4gICAgICA/IG5ldyBIdHRwSGVhZGVycyh0aGlzLmhlYWRlcnMpLnNldCgndXNlRW5kb3JzZW1lbnQnLCAndHJ1ZScpXG4gICAgICA6IG5ldyBIdHRwSGVhZGVycyh0aGlzLmhlYWRlcnMpO1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5wdXQocXVlcnksIG5ib2R5LCB7XG4gICAgICAgIGhlYWRlcnMsXG4gICAgICAgIHJlc3BvbnNlVHlwZTogJ2pzb24nLFxuICAgICAgICAuLi5leHRyYXM/Lm9wdGlvbnMsXG4gICAgICB9KVxuICAgICAgLnBpcGUoY2F0Y2hFcnJvcih0aGlzLmhhbmRsZVJlcXVlc3RFcnJvcikpIGFzIE9ic2VydmFibGU8YW55PjtcbiAgfVxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gREVMRVRFXG4gIGRlbGV0ZSA9IDxUID0gYW55Pihyb3V0ZTogc3RyaW5nLCBleHRyYXM/OiBJRXh0cmFzKSA9PiB7XG4gICAgdGhpcy5sb2dSb3V0ZXMoJ2RlbGV0ZScsIHJvdXRlKTtcblxuICAgIGxldCBoZWFkZXJzID0gZXh0cmFzPy51c2VFbmRvcnNlbWVudFxuICAgICAgPyBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXJzKS5zZXQoJ3VzZUVuZG9yc2VtZW50JywgJ3RydWUnKVxuICAgICAgOiBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXJzKTtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAuZGVsZXRlPFQ+KHJvdXRlLCB7XG4gICAgICAgIGhlYWRlcnMsXG4gICAgICAgIHJlc3BvbnNlVHlwZTogJ2pzb24nLFxuICAgICAgICAuLi5leHRyYXM/Lm9wdGlvbnMsXG4gICAgICB9KVxuICAgICAgLnBpcGUoY2F0Y2hFcnJvcih0aGlzLmhhbmRsZVJlcXVlc3RFcnJvcikpIGFzIE9ic2VydmFibGU8YW55PjtcbiAgfTtcbiAgZGVsZXRlV2l0aEJvZHkgPSA8VCA9IGFueT4ocm91dGU6IHN0cmluZywgYm9keT86IGFueSwgb3B0aW9ucz8pID0+IHtcbiAgICB0aGlzLmxvZ1JvdXRlcygnZGVsZXRlJywgcm91dGUpO1xuICAgIGNvbnN0IHJlcSA9IG5ldyBIdHRwUmVxdWVzdChcbiAgICAgICdERUxFVEUnLFxuICAgICAgcm91dGUsXG4gICAgICBib2R5LFxuICAgICAgb3B0aW9ucyB8fCB7XG4gICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh0aGlzLmhlYWRlcnMpLFxuICAgICAgICByZXNwb25zZVR5cGU6ICdqc29uJyxcbiAgICAgIH1cbiAgICApO1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5yZXF1ZXN0PFQ+KHJlcSlcbiAgICAgIC5waXBlKGNhdGNoRXJyb3IodGhpcy5oYW5kbGVSZXF1ZXN0RXJyb3IpKSBhcyBPYnNlcnZhYmxlPGFueT47XG4gIH07XG4gIGRlbGV0ZVRleHQgPSAocm91dGU6IHN0cmluZykgPT5cbiAgICB0aGlzLmRlbGV0ZTxzdHJpbmc+KHJvdXRlLCB7XG4gICAgICBvcHRpb25zOiB7XG4gICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh0aGlzLmhlYWRlcnMpLFxuICAgICAgICByZXNwb25zZVR5cGU6ICd0ZXh0JyxcbiAgICAgIH0sXG4gICAgfSk7XG4gIC8vI2VuZHJlZ2lvblxuXG4gIHNvcnRDb2RlcyA9IDxUPihkYXRhOiBUW10pID0+IHtcbiAgICByZXR1cm4gZGF0YT8uc29ydDIoJ2NvZGUnLCB0cnVlKT8uc29ydDIoJ2NvZGUnKSBhcyBhbnkgYXMgVFtdO1xuICB9O1xufVxuXG5pbnRlcmZhY2UgSUV4dHJhcyB7XG4gIC8qKlxuICAgKiBTcGVjaWZ5IHdoZXRoZXIgdG8gdXNlIHRoZSBlbmRvcnNlbWVudCBoZWFkZXJcbiAgICovXG4gIHVzZUVuZG9yc2VtZW50PzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFNwZWNpZnkgdGhlIHJlcXVlc3Qgb3B0aW9ucy4gVGhlIGFkZGVkIG9wdGlvbnMgd2lsbCBiZSBhcHBlbmRlZCB0byB0aGUgZGVmYXVsdCBvcHRpb25zXG4gICAqL1xuICBvcHRpb25zPzoge1xuICAgIGhlYWRlcnM/Okh0dHBIZWFkZXJzLFxuICAgIFt4OnN0cmluZ106YW55XG4gIH07XG4gIC8qKlxuICAgKiBTcGVjaWZ5IHRoZSByZXF1ZXN0IHR5cGUuIElmIHRoZSByZXF1ZXN0IHR5cGUgaXMgcXVlcnlQYXJhbXMsIHRoZSBib2R5IHdpbGwgYmUgc2VudCBhcyBxdWVyeSBwYXJhbWV0ZXJzXG4gICAqL1xuICByZXF1ZXN0VHlwZT86ICdxdWVyeVBhcmFtcyc7XG59XG4iXX0=
|
|
310
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ldHMtZmUtbmctc2RrL3NyYy9saWIvU2VydmljZXMvYXBpLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBR0wsV0FBVyxFQUNYLFdBQVcsR0FDWixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBTyxhQUFhLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsRSxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7O0FBVzdELE1BR2EsVUFBVTtJQUVyQixJQUFZLE9BQU87UUFDakIsT0FBTztZQUNMLGNBQWMsRUFBRSxrQkFBa0I7U0FDbkMsQ0FBQztJQUNKLENBQUM7SUFDRCxJQUFZLFdBQVc7UUFDckIsT0FBTztZQUNMLE9BQU8sRUFBRSxxQkFBcUI7U0FDL0IsQ0FBQztJQUNKLENBQUM7SUFFRCxZQUNTLElBQWdCLEVBQ2hCLE1BQW9CLEVBQ3BCLE9BQTBCO1FBRjFCLFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsV0FBTSxHQUFOLE1BQU0sQ0FBYztRQUNwQixZQUFPLEdBQVAsT0FBTyxDQUFtQjtRQWYzQixlQUFVLEdBQUcsQ0FBQyxDQUFDO1FBV2YsZUFBVSxHQUFHLENBQUMsQ0FBQztRQWdCZix1QkFBa0IsR0FBRyxDQUFDLEdBQXNCLEVBQUUsRUFBRTtZQUN0RCxJQUFJLE9BQU8sQ0FBQztZQUNaLElBQUksR0FBRyxFQUFFLEtBQUssWUFBWSxXQUFXO2dCQUNuQyxPQUFPLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksVUFBVSxDQUFDLEdBQUcsRUFBRSxLQUFLLENB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QUFXLElBQUksYUFBYSxFQUFFO1lBQ3hDLEtBQUssSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3BDLEtBQUssR0FBRyxJQUFJLENBQUM7U0FDZDtRQUNELElBQUksT0FBTyxHQUFHLE1BQU0sRUFBRSxjQUFjO1lBQ2xDLENBQUMsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLGdCQUFnQixFQUFFLE1BQU0sQ0FBQztZQUM3RCxDQUFDLENBQUMsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2xDLE9BQU8sSUFBSSxDQUFDLElBQUk7YUFDYixHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRTtZQUNqQixZQUFZLEVBQUUsTUFBTTtZQUNwQixHQUFHLE1BQU0sRUFBRSxPQUFPO1lBQ2xCLE9BQU8sRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQzlCLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFDN0IsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQ3pCO1NBQ0YsQ0FBQzthQUNELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQW9CLENBQUM7SUFDbEUsQ0FBQzs4R0E1VFUsVUFBVTtrSEFBVixVQUFVLGNBRlQsTUFBTTs7U0FFUCxVQUFVOzJGQUFWLFVBQVU7a0JBSHRCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgSHR0cENsaWVudCxcbiAgSHR0cEVycm9yUmVzcG9uc2UsXG4gIEh0dHBIZWFkZXJzLFxuICBIdHRwUmVxdWVzdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgaWlmLCBsYXN0VmFsdWVGcm9tLCBPYnNlcnZhYmxlLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAsIHJldHJ5LCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBJQ29kZURlc2NyaXB0aW9uLCBJQ29kZVRpdGxlIH0gZnJvbSAnLi4vU2hhcmVkL21vZGVscy9pbmRleC5tb2RlbCc7XG5pbXBvcnQgeyBFVFNlbnZpcm9ubWVudCB9IGZyb20gJy4uLy4uL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudCc7XG5pbXBvcnQgeyBDYWNoZVNlcnZpY2UgfSBmcm9tICcuL2NhY2hlL2NhY2hlLnNlcnZpY2UnO1xuaW1wb3J0IHsgTG9jYWxDYWNoZVNlcnZpY2UgfSBmcm9tICcuL2NhY2hlL2xvY2FsLWNhY2hlLnNlcnZpY2UnO1xuZXhwb3J0IGludGVyZmFjZSBJUmVzcG9uc2Uge1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIHJlc3VsdDogYW55O1xuICBzdGF0dXM6ICdzdWNjZXNzJyB8ICdlcnJvcicgfCAnZmFpbHVyZSc7XG4gIHN0YXR1c0NvZGU6ICdTTTAwMCcgfCAnU00wMDEnIHwgJ1NNMDAyJyB8ICdTTTAwMyc7XG59XG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgQXBpU2VydmljZSB7XG4gIHByaXZhdGUgc2hvd1JvdXRlcyA9IDA7XG4gIHByaXZhdGUgZ2V0IGhlYWRlcnMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgfTtcbiAgfVxuICBwcml2YXRlIGdldCBmaWxlSGVhZGVycygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZW5jdHlwZTogJ211bHRpcGFydC9mb3JtLWRhdGEnLFxuICAgIH07XG4gIH1cbiAgcHJpdmF0ZSByZXRyeUNvdW50ID0gMDtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgcHVibGljIGNhY2hlUzogQ2FjaGVTZXJ2aWNlLFxuICAgIHB1YmxpYyBsQ2FjaGVTOiBMb2NhbENhY2hlU2VydmljZVxuICApIHt9XG5cbiAgcHJpdmF0ZSBsb2dSb3V0ZXMoXG4gICAgbWV0aG9kOiAnZ2V0JyB8ICdwb3N0JyB8ICdwdXQnIHwgJ2RlbGV0ZScsXG4gICAgcm91dGUsXG4gICAgLi4uZXh0cmFzXG4gICkge1xuICAgIGlmICh0aGlzLnNob3dSb3V0ZXMpIHtcbiAgICAgIGNvbnNvbGUubG9nKG1ldGhvZCwgcm91dGUsIC4uLmV4dHJhcyk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgaGFuZGxlUmVxdWVzdEVycm9yID0gKGVycjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcbiAgICBsZXQgbWVzc2FnZTtcbiAgICBpZiAoZXJyPy5lcnJvciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKVxuICAgICAgbWVzc2FnZSA9IFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgbmV3IFVpbnQ4QXJyYXkoZXJyPy5lcnJvcikpO1xuICAgIHJldHVybiB0aHJvd0Vycm9yKG1lc3NhZ2UgfHwgZXJyPy5lcnJvcj8ubWVzc2FnZSk7XG4gIH07XG4gIHByaXZhdGUgY29uY2F0ZW5hdGVIZWFkZXJzID0gKFxuICAgIGhlYWRlcnMxOiBIdHRwSGVhZGVycyxcbiAgICBoZWFkZXJzMjogSHR0cEhlYWRlcnNcbiAgKTogSHR0cEhlYWRlcnMgPT4ge1xuICAgIGlmICghaGVhZGVyczEpIHJldHVybiBoZWFkZXJzMjtcbiAgICBlbHNlIGlmICghaGVhZGVyczIpIHJldHVybiBoZWFkZXJzMTtcblxuICAgIGxldCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCk7XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGhlYWRlcnMxLmtleXMoKSlcbiAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldChpdGVtLCBoZWFkZXJzMS5nZXQoaXRlbSkpO1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiBoZWFkZXJzMi5rZXlzKCkpIHtcbiAgICAgIGlmIChoZWFkZXJzLmhhcyhpdGVtKSkgaGVhZGVycy5kZWxldGUoaXRlbSk7XG4gICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoaXRlbSwgaGVhZGVyczIuZ2V0KGl0ZW0pKTtcbiAgICB9XG4gICAgcmV0dXJuIGhlYWRlcnM7XG4gIH07XG5cbiAgLy8jcmVnaW9uIFBBVENIXG4gIHBhdGNoPFQgPSBhbnk+KHJvdXRlOiBzdHJpbmcsIGJvZHk/LCBleHRyYXM/OiBJRXh0cmFzKTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgdGhpcy5sb2dSb3V0ZXMoJ3Bvc3QnLCByb3V0ZSwgYm9keSk7XG4gICAgY29uc29sZS5sb2coYm9keSk7XG4gICAgbGV0IGhlYWRlcnMgPSBleHRyYXM/LnVzZUVuZG9yc2VtZW50XG4gICAgICA/IG5ldyBIdHRwSGVhZGVycyh0aGlzLmhlYWRlcnMpLnNldCgndXNlRW5kb3JzZW1lbnQnLCAndHJ1ZScpXG4gICAgICA6IG5ldyBIdHRwSGVhZGVycyh0aGlzLmhlYWRlcnMpO1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5wYXRjaChlbmNvZGVVUkkocm91dGUpLCBib2R5LCB7XG4gICAgICAgIHJlc3BvbnNlVHlwZTogJ2pzb24nLFxuICAgICAgICAuLi5leHRyYXM/Lm9wdGlvbnMsXG4gICAgICAgIGhlYWRlcnM6IHRoaXMuY29uY2F0ZW5hdGVIZWFkZXJzKGhlYWRlcnMsIGV4dHJhcz8ub3B0aW9ucz8uaGVhZGVycyksXG4gICAgICB9KVxuICAgICAgLnBpcGUoY2F0Y2hFcnJvcih0aGlzLmhhbmRsZVJlcXVlc3RFcnJvcikpIGFzIE9ic2VydmFibGU8YW55PjtcbiAgfVxuICAvLyNlbmRyZWdpb25cbiAgLy8jcmVnaW9uIFBPU1RcbiAgcG9zdDxUID0gYW55Pihyb3V0ZTogc3RyaW5nLCBib2R5PywgZXh0cmFzPzogSUV4dHJhcyk6IE9ic2VydmFibGU8VD4ge1xuICAgIHRoaXMubG9nUm91dGVzKCdwb3N0Jywgcm91dGUsIGJvZHkpO1xuICAgIGNvbnNvbGUubG9nKGJvZHkpO1xuICAgIGxldCBoZWFkZXJzID0gZXh0cmFzPy51c2VFbmRvcnNlbWVudFxuICAgICAgPyBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXJzKS5zZXQoJ3VzZUVuZG9yc2VtZW50JywgJ3RydWUnKVxuICAgICAgOiBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXJzKTtcblxuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5wb3N0KGVuY29kZVVSSShyb3V0ZSksIGJvZHksIHtcbiAgICAgICAgcmVzcG9uc2VUeXBlOiAnanNvbicsXG4gICAgICAgIC4uLmV4dHJhcz8ub3B0aW9ucyxcbiAgICAgICAgaGVhZGVyczogdGhpcy5jb25jYXRlbmF0ZUhlYWRlcnMoaGVhZGVycywgZXh0cmFzPy5vcHRpb25zPy5oZWFkZXJzKSxcbiAgICAgIH0pXG4gICAgICAucGlwZShjYXRjaEVycm9yKHRoaXMuaGFuZGxlUmVxdWVzdEVycm9yKSkgYXMgT2JzZXJ2YWJsZTxhbnk+O1xuICB9XG4gIHBvc3RGaWxlPFQgPSBhbnk+KHJvdXRlOiBzdHJpbmcsIGJvZHk6IEZvcm1EYXRhLCBleHRyYXM/OiBJRXh0cmFzKSB7XG4gICAgcmV0dXJuIHRoaXMucG9zdDxUPihyb3V0ZSwgYm9keSwge1xuICAgICAgb3B0aW9uczoge1xuICAgICAgICByZXNwb25zZVR5cGU6ICdqc29uJyxcbiAgICAgICAgLi4uZXh0cmFzPy5vcHRpb25zLFxuICAgICAgICBoZWFkZXJzOiB0aGlzLmNvbmNhdGVuYXRlSGVhZGVycyhcbiAgICAgICAgICBuZXcgSHR0cEhlYWRlcnModGhpcy5maWxlSGVhZGVycyksXG4gICAgICAgICAgZXh0cmFzPy5vcHRpb25zPy5oZWFkZXJzXG4gICAgICAgICksXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG4gIHBvc3RGaWxlV2l0aEVuZG9yc2VtZW50PFQgPSBhbnk+KHJvdXRlOiBzdHJpbmcsIGJvZHk6IEZvcm1EYXRhKSB7XG4gICAgcmV0dXJuIHRoaXMucG9zdDxUPihyb3V0ZSwgYm9keSwge1xuICAgICAgb3B0aW9uczoge1xuICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnModGhpcy5maWxlSGVhZGVycykuc2V0KFxuICAgICAgICAgICd1c2VFbmRvcnNlbWVudCcsXG4gICAgICAgICAgJ3RydWUnXG4gICAgICAgICksXG4gICAgICAgIHJlc3BvbnNlVHlwZTogJ2pzb24nLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuICBwb3N0U3RyaW5nKHJvdXRlOiBzdHJpbmcsIGJvZHk/LCBleHRyYXM/OiBJRXh0cmFzKSB7XG4gICAgLy8gY29uc29sZS5sb2coJ3JlcXVlc3RDb3VudCcsICsrRVRTZW52aXJvbm1lbnQucmVxdWVzdENvdW50KTtcbiAgICBsZXQgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAnQ29udGVudC1UeXBlJzogJ3RleHQvcGxhaW4nLFxuICAgIH0pO1xuICAgIGhlYWRlcnMgPSBleHRyYXM/LnVzZUVuZG9yc2VtZW50XG4gICAgICA/IGhlYWRlcnMuc2V0KCd1c2VFbmRvcnNlbWVudCcsICd0cnVlJylcbiAgICAgIDogaGVhZGVycztcbiAgICByZXR1cm4gdGhpcy5wb3N0PHN0cmluZz4ocm91dGUsIGJvZHksIHtcbiAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgLi4uZXh0cmFzPy5vcHRpb25zLFxuICAgICAgICByZXNwb25zZVR5cGU6ICd0ZXh0JyxcbiAgICAgICAgaGVhZGVyczogdGhpcy5jb25jYXRlbmF0ZUhlYWRlcnMoaGVhZGVycywgZXh0cmFzPy5vcHRpb25zPy5oZWFkZXJzKSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbiAgcG9zdFN0cmluZ1dpdGhMb2NhbENhY2hlKHJvdXRlOiBzdHJpbmcsIGJvZHk6IHN0cmluZykge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZTxzdHJpbmc+KChyZXMpID0+IHtcbiAgICAgIGNvbnN0IGJkeSA9IGJvZHk/LnRyaW0oKTtcbiAgICAgIC8vIGRlYnVnZ2VyXG4gICAgICBpZiAodGhpcy5sQ2FjaGVTLmhhcyhyb3V0ZSArICdfJyArIGJkeSkpIHtcbiAgICAgICAgcmVzLm5leHQodGhpcy5sQ2FjaGVTLmdldEl0ZW08c3RyaW5nPihyb3V0ZSArICdfJyArIGJkeSkpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnBvc3RTdHJpbmcocm91dGUsIGJkeSlcbiAgICAgICAgLnRvUHJvbWlzZSgpXG4gICAgICAgIC50aGVuKChyKSA9PiB7XG4gICAgICAgICAgcmVzLm5leHQocik7XG4gICAgICAgICAgdGhpcy5sQ2FjaGVTLnNldEl0ZW0ocm91dGUgKyAnXycgKyBiZHksIHIpO1xuICAgICAgICAgIHJlcy5jb21wbGV0ZSgpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICByZXMuZXJyb3IoZSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiBHRVRcbiAgLyoqXG4gICAqIFBlcmZvcm0gYSBHRVQgcmVxdWVzdFxuICAgKiBAcGFyYW0gcm91dGUgQVBJIGVuZHBvaW50XG4gICAqIEBwYXJhbSBwYXJhbWV0ZXJzIE9iamVjdCB0byBjb252ZXJ0IGludG8gcXVlcnlwYXJhbXNcbiAgICogQHBhcmFtIGV4dHJhcyBFeHRyYSBjb25maWd1cmF0aW9ucyBmb3IgdGhlIHJlcXVlc3RcbiAgICogQHJldHVybnNcbiAgICovXG4gIGdldCA9IDxUID0gYW55PihcbiAgICByb3V0ZTogc3RyaW5nLFxuICAgIHBhcmFtZXRlcnM/OiB7IFtmaWVsZDogc3RyaW5nXTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB9LFxuICAgIGV4dHJhcz86IElFeHRyYXNcbiAgKTogT2JzZXJ2YWJsZTxUPiA9PiB7XG4gICAgdGhpcy5sb2dSb3V0ZXMoJ2dldCcsIHJvdXRlLCBwYXJhbWV0ZXJzKTtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGU8VD4oKHJlcykgPT4ge1xuICAgICAgY29uc3QgcXVlcnkgPSByb3V0ZSArIHRoaXMuZ2V0UmVxdWVzdFBhcnNlKHBhcmFtZXRlcnMpO1xuICAgICAgdGhpcy5odHRwXG4gICAgICAgIC5nZXQocXVlcnksIHtcbiAgICAgICAgICBoZWFkZXJzOiB0aGlzLmNvbmNhdGVuYXRlSGVhZGVycyhcbiAgICAgICAgICAgIG5ldyBIdHRwSGVhZGVycyh0aGlzLmhlYWRlcnMpLFxuICAgICAgICAgICAgZXh0cmFzPy5vcHRpb25zPy5oZWFkZXJzXG4gICAgICAgICAgKSxcbiAgICAgICAgICByZXNwb25zZVR5cGU6ICdqc29uJyxcbiAgICAgICAgICAuLi5leHRyYXM/Lm9wdGlvbnMsXG4gICAgICAgIH0pXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHJldHJ5KHRoaXMucmV0cnlDb3VudCksXG4gICAgICAgICAgdGFwKCh4KSA9PiAodGhpcy5zaG93Um91dGVzID8gY29uc29sZS5sb2coeCkgOiBudWxsKSksXG4gICAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVzKSlcbiAgICAgICAgICAgICAgaWYgKHJlc1swXT8uY29kZSkgcmV0dXJuIHJlcy5zb3J0KCkuc29ydDIoJ2NvZGUnLCB0cnVlKTtcbiAgICAgICAgICAgICAgZWxzZSBpZiAocmVzWzBdPy5jb2x1bW5OYW1lKVxuICAgICAgICAgICAgICAgIHJldHVybiByZXMuc29ydCgpLnNvcnQyKCdjb2x1bW5OYW1lJywgdHJ1ZSk7XG4gICAgICAgICAgICAgIGVsc2UgcmV0dXJuIHJlcy5zb3J0KCk7XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVSZXF1ZXN0RXJyb3IpXG4gICAgICAgIClcbiAgICAgICAgLnRvUHJvbWlzZSgpXG4gICAgICAgIC50aGVuKChyKSA9PiB7XG4gICAgICAgICAgcmVzLm5leHQocik7XG4gICAgICAgICAgdGhpcy5jYWNoZVMuc2V0SXRlbShxdWVyeSwgcik7XG4gICAgICAgICAgcmVzLmNvbXBsZXRlKCk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaCgoZXJyKSA9PiByZXMuZXJyb3IoZXJyKSk7XG4gICAgfSk7XG4gIH07XG5cbiAgZ2V0Q29kZXMgPSA8VCA9IElDb2RlVGl0bGUgJiBJQ29kZURlc2NyaXB0aW9uPihyb3V0ZTogc3RyaW5nKSA9PlxuICAgIHRoaXMuZ2V0PFRbXT4ocm91dGUpLnBpcGUobWFwKChyZXMpID0+IHRoaXMuc29ydENvZGVzKHJlcykpKTtcblxuICBnZXRUZXh0ID0gPFQgPSBzdHJpbmc+KFxuICAgIHJvdXRlOiBzdHJpbmcsXG4gICAgcGFyYW1ldGVycz86IHsgW2ZpZWxkOiBzdHJpbmddOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIH0sXG4gICAgZXh0cmFzPzogSUV4dHJhc1xuICApID0+XG4gICAgdGhpcy5nZXQ8VD4ocm91dGUsIHBhcmFtZXRlcnMsIHtcbiAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgaGVhZGVyczogdGhpcy5jb25jYXRlbmF0ZUhlYWRlcnMoXG4gICAgICAgICAgbmV3IEh0dHBIZWFkZXJzKHRoaXMuaGVhZGVycyksXG4gICAgICAgICAgZXh0cmFzPy5vcHRpb25zPy5oZWFkZXJzXG4gICAgICAgICksXG4gICAgICAgIHJlc3BvbnNlVHlwZTogJ3RleHQnLFxuICAgICAgfSxcbiAgICB9KTtcblxuICBnZXRGaWxlID0gPFQgPSBzdHJpbmc+KFxuICAgIHJvdXRlOiBzdHJpbmcsXG4gICAgcGFyYW1ldGVycz86IHsgW2ZpZWxkOiBzdHJpbmddOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIH0sXG4gICAgZXh0cmFzPzogSUV4dHJhc1xuICApID0+XG4gICAgdGhpcy5nZXQ8VD4ocm91dGUsIHBhcmFtZXRlcnMsIHtcbiAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgaGVhZGVyczogdGhpcy5jb25jYXRlbmF0ZUhlYWRlcnMoXG4gICAgICAgICAgbmV3IEh0dHBIZWFkZXJzKHRoaXMuaGVhZGVycyksXG4gICAgICAgICAgZXh0cmFzPy5vcHRpb25zPy5oZWFkZXJzXG4gICAgICAgICksXG4gICAgICAgIHJlc3BvbnNlVHlwZTogJ2FycmF5QnVmZmVyJyxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgZ2V0V2l0aEJvZHkgPSA8VCA9IGFueT4ocm91dGU6IHN0cmluZywgYm9keT86IGFueSwgZXh0cmFzPzogSUV4dHJhcykgPT4ge1xuICAgIHRoaXMubG9nUm91dGVzKCdnZXQnLCByb3V0ZSk7XG4gICAgLy8gZGVidWdnZXJcbiAgICBjb25zdCByZXEgPSBuZXcgSHR0cFJlcXVlc3QoJ0dFVCcsIHJvdXRlLCBib2R5LCB7XG4gICAgICAuLi5leHRyYXM/Lm9wdGlvbnMsXG4gICAgICBoZWFkZXJzOiB0aGlzLmNvbmNhdGVuYXRlSGVhZGVycyhcbiAgICAgICAgbmV3IEh0dHBIZWFkZXJzKHRoaXMuaGVhZGVycyksXG4gICAgICAgIGV4dHJhcz8ub3B0aW9ucz8uaGVhZGVyc1xuICAgICAgKSxcbiAgICAgIHJlc3BvbnNlVHlwZTogJ2pzb24nLFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5yZXF1ZXN0PFQ+KHJlcSlcbiAgICAgIC5waXBlKGNhdGNoRXJyb3IodGhpcy5oYW5kbGVSZXF1ZXN0RXJyb3IpKSBhcyBPYnNlcnZhYmxlPFQ+O1xuICB9O1xuXG4gIGdldEZyb21sb2NhbCA9IDxUID0gYW55PihcbiAgICByb3V0ZTogc3RyaW5nLFxuICAgIHBhcmFtZXRlcnM/OiBPYmplY3QsXG4gICAgZXh0cmFzPzogSUV4dHJhc1xuICApID0+IHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGU8VD4oKHJlcykgPT4ge1xuICAgICAgY29uc3QgcXVlcnkgPSByb3V0ZSArIHRoaXMuZ2V0UmVxdWVzdFBhcnNlKHBhcmFtZXRlcnMpO1xuICAgICAgaWYgKHRoaXMubENhY2hlUy5oYXMocXVlcnkpKSB7XG4gICAgICAgIHJlcy5uZXh0KHRoaXMubENhY2hlUy5nZXRJdGVtPFQ+KHF1ZXJ5KSk7XG4gICAgICAgIHJlcy5jb21wbGV0ZSgpO1xuICAgICAgfSBlbHNlXG4gICAgICAgIGxhc3RWYWx1ZUZyb20odGhpcy5nZXQocXVlcnksIG51bGwsIGV4dHJhcykpLnRoZW4oKHIpID0+IHtcbiAgICAgICAgICAvLyBpZiAoIXRoaXMuY1MuaGFzKHJvdXRlKSlcbiAgICAgICAgICByZXMubmV4dChyKTtcbiAgICAgICAgICB0aGlzLmxDYWNoZVMuc2V0SXRlbShxdWVyeSwgcik7XG4gICAgICAgICAgcmVzLmNvbXBsZXRlKCk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuICBnZXRXaXRoTG9jYWxDYWNoZSA9IDxUID0gYW55PihcbiAgICByb3V0ZTogc3RyaW5nLFxuICAgIHBhcmFtZXRlcnM/OiBPYmplY3QsXG4gICAgZXh0cmFzPzogSUV4dHJhc1xuICApID0+IHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGU8VD4oKHJlcykgPT4ge1xuICAgICAgY29uc3QgcXVlcnkgPSByb3V0ZSArIHRoaXMuZ2V0UmVxdWVzdFBhcnNlKHBhcmFtZXRlcnMpO1xuICAgICAgaWYgKHRoaXMubENhY2hlUy5oYXMocXVlcnkpKSB7XG4gICAgICAgIHJlcy5uZXh0KHRoaXMubENhY2hlUy5nZXRJdGVtPFQ+KHF1ZXJ5KSk7XG4gICAgICB9XG4gICAgICBsYXN0VmFsdWVGcm9tKHRoaXMuZ2V0KHF1ZXJ5LCBudWxsLCBleHRyYXMpKVxuICAgICAgICAudGhlbigocikgPT4ge1xuICAgICAgICAgIC8vIGlmICghdGhpcy5jUy5oYXMocm91dGUpKVxuICAgICAgICAgIHJlcy5uZXh0KHIpO1xuICAgICAgICAgIHRoaXMubENhY2hlUy5zZXRJdGVtKHF1ZXJ5LCByKTtcbiAgICAgICAgICByZXMuY29tcGxldGUoKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgcmVzLmVycm9yKGUpO1xuICAgICAgICAgIHJlcy5jb21wbGV0ZSgpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfTtcbiAgZ2V0UmVxdWVzdFBhcnNlKHBhcmFtZXRlcnM/OiBPYmplY3QpIHtcbiAgICByZXR1cm4gIXBhcmFtZXRlcnNcbiAgICAgID8gJydcbiAgICAgIDogJz8nICtcbiAgICAgICAgICBPYmplY3Qua2V5cyhwYXJhbWV0ZXJzKVxuICAgICAgICAgICAgLmZpbHRlcigoa2V5KSA9PiBwYXJhbWV0ZXJzW2tleV0/LnRvU3RyaW5nKCk/LnRyaW0oKSAhPSBudWxsKVxuICAgICAgICAgICAgLm1hcCgoa2V5KSA9PiBgJHtrZXl9PSR7cGFyYW1ldGVyc1trZXldPy50b1N0cmluZygpPy50cmltKCl9YClcbiAgICAgICAgICAgIC5qb2luKCcmJyk7XG4gIH1cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIFBVVFxuICBwdXQ8VCA9IGFueT4ocm91dGU6IHN0cmluZywgYm9keT8sIGV4dHJhcz86IElFeHRyYXMpOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICB0aGlzLmxvZ1JvdXRlcygncHV0Jywgcm91dGUsIGJvZHkpO1xuICAgIGxldCBxdWVyeSA9IHJvdXRlICsgJycsXG4gICAgICBuYm9keSA9IGJvZHk7XG4gICAgaWYgKGV4dHJhcz8ucmVxdWVzdFR5cGUgPT0gJ3F1ZXJ5UGFyYW1zJykge1xuICAgICAgcXVlcnkgKz0gdGhpcy5nZXRSZXF1ZXN0UGFyc2UoYm9keSk7XG4gICAgICBuYm9keSA9IG51bGw7XG4gICAgfVxuICAgIGxldCBoZWFkZXJzID0gZXh0cmFzPy51c2VFbmRvcnNlbWVudFxuICAgICAgPyBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXJzKS5zZXQoJ3VzZUVuZG9yc2VtZW50JywgJ3RydWUnKVxuICAgICAgOiBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXJzKTtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAucHV0KHF1ZXJ5LCBuYm9keSwge1xuICAgICAgICByZXNwb25zZVR5cGU6ICdqc29uJyxcbiAgICAgICAgLi4uZXh0cmFzPy5vcHRpb25zLFxuICAgICAgICBoZWFkZXJzOiB0aGlzLmNvbmNhdGVuYXRlSGVhZGVycyhcbiAgICAgICAgICBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXJzKSxcbiAgICAgICAgICBleHRyYXM/Lm9wdGlvbnM/LmhlYWRlcnNcbiAgICAgICAgKSxcbiAgICAgIH0pXG4gICAgICAucGlwZShjYXRjaEVycm9yKHRoaXMuaGFuZGxlUmVxdWVzdEVycm9yKSkgYXMgT2JzZXJ2YWJsZTxhbnk+O1xuICB9XG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiBERUxFVEVcbiAgZGVsZXRlID0gPFQgPSBhbnk+KHJvdXRlOiBzdHJpbmcsIGV4dHJhcz86IElFeHRyYXMpID0+IHtcbiAgICB0aGlzLmxvZ1JvdXRlcygnZGVsZXRlJywgcm91dGUpO1xuXG4gICAgbGV0IGhlYWRlcnMgPSBleHRyYXM/LnVzZUVuZG9yc2VtZW50XG4gICAgICA/IG5ldyBIdHRwSGVhZGVycyh0aGlzLmhlYWRlcnMpLnNldCgndXNlRW5kb3JzZW1lbnQnLCAndHJ1ZScpXG4gICAgICA6IG5ldyBIdHRwSGVhZGVycyh0aGlzLmhlYWRlcnMpO1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5kZWxldGU8VD4ocm91dGUsIHtcbiAgICAgICAgcmVzcG9uc2VUeXBlOiAnanNvbicsXG4gICAgICAgIC4uLmV4dHJhcz8ub3B0aW9ucyxcbiAgICAgICAgaGVhZGVyczogdGhpcy5jb25jYXRlbmF0ZUhlYWRlcnMoXG4gICAgICAgICAgbmV3IEh0dHBIZWFkZXJzKHRoaXMuaGVhZGVycyksXG4gICAgICAgICAgZXh0cmFzPy5vcHRpb25zPy5oZWFkZXJzXG4gICAgICAgICksXG4gICAgICB9KVxuICAgICAgLnBpcGUoY2F0Y2hFcnJvcih0aGlzLmhhbmRsZVJlcXVlc3RFcnJvcikpIGFzIE9ic2VydmFibGU8YW55PjtcbiAgfTtcbiAgZGVsZXRlV2l0aEJvZHkgPSA8VCA9IGFueT4ocm91dGU6IHN0cmluZywgYm9keT86IGFueSwgZXh0cmFzPzogSUV4dHJhcykgPT4ge1xuICAgIHRoaXMubG9nUm91dGVzKCdkZWxldGUnLCByb3V0ZSk7XG4gICAgY29uc3QgcmVxID0gbmV3IEh0dHBSZXF1ZXN0KCdERUxFVEUnLCByb3V0ZSwgYm9keSwge1xuICAgICAgcmVzcG9uc2VUeXBlOiAnanNvbicsXG4gICAgICAuLi5leHRyYXM/Lm9wdGlvbnMsXG4gICAgICBoZWFkZXJzOiB0aGlzLmNvbmNhdGVuYXRlSGVhZGVycyhcbiAgICAgICAgbmV3IEh0dHBIZWFkZXJzKHRoaXMuaGVhZGVycyksXG4gICAgICAgIGV4dHJhcz8ub3B0aW9ucz8uaGVhZGVyc1xuICAgICAgKSxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAucmVxdWVzdDxUPihyZXEpXG4gICAgICAucGlwZShjYXRjaEVycm9yKHRoaXMuaGFuZGxlUmVxdWVzdEVycm9yKSkgYXMgT2JzZXJ2YWJsZTxhbnk+O1xuICB9O1xuICBkZWxldGVUZXh0ID0gKHJvdXRlOiBzdHJpbmcsIGV4dHJhcz86IElFeHRyYXMpID0+XG4gICAgdGhpcy5kZWxldGU8c3RyaW5nPihyb3V0ZSwge1xuICAgICAgb3B0aW9uczoge1xuICAgICAgICByZXNwb25zZVR5cGU6ICd0ZXh0JyxcbiAgICAgICAgLi4uZXh0cmFzPy5vcHRpb25zLFxuICAgICAgICBoZWFkZXJzOiB0aGlzLmNvbmNhdGVuYXRlSGVhZGVycyhcbiAgICAgICAgICBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXJzKSxcbiAgICAgICAgICBleHRyYXM/Lm9wdGlvbnM/LmhlYWRlcnNcbiAgICAgICAgKSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIC8vI2VuZHJlZ2lvblxuXG4gIHNvcnRDb2RlcyA9IDxUPihkYXRhOiBUW10pID0+IHtcbiAgICByZXR1cm4gZGF0YT8uc29ydDIoJ2NvZGUnLCB0cnVlKT8uc29ydDIoJ2NvZGUnKSBhcyBhbnkgYXMgVFtdO1xuICB9O1xufVxuXG5pbnRlcmZhY2UgSUV4dHJhcyB7XG4gIC8qKlxuICAgKiBTcGVjaWZ5IHdoZXRoZXIgdG8gdXNlIHRoZSBlbmRvcnNlbWVudCBoZWFkZXJcbiAgICovXG4gIHVzZUVuZG9yc2VtZW50PzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFNwZWNpZnkgdGhlIHJlcXVlc3Qgb3B0aW9ucy4gVGhlIGFkZGVkIG9wdGlvbnMgd2lsbCBiZSBhcHBlbmRlZCB0byB0aGUgZGVmYXVsdCBvcHRpb25zXG4gICAqL1xuICBvcHRpb25zPzoge1xuICAgIGhlYWRlcnM/OiBIdHRwSGVhZGVycztcbiAgICBbeDogc3RyaW5nXTogYW55O1xuICB9O1xuICAvKipcbiAgICogU3BlY2lmeSB0aGUgcmVxdWVzdCB0eXBlLiBJZiB0aGUgcmVxdWVzdCB0eXBlIGlzIHF1ZXJ5UGFyYW1zLCB0aGUgYm9keSB3aWxsIGJlIHNlbnQgYXMgcXVlcnkgcGFyYW1ldGVyc1xuICAgKi9cbiAgcmVxdWVzdFR5cGU/OiAncXVlcnlQYXJhbXMnO1xufVxuIl19
|
|
@@ -3822,8 +3822,11 @@ class ApiService {
|
|
|
3822
3822
|
let headers = new HttpHeaders();
|
|
3823
3823
|
for (const item of headers1.keys())
|
|
3824
3824
|
headers = headers.set(item, headers1.get(item));
|
|
3825
|
-
for (const item of headers2.keys())
|
|
3825
|
+
for (const item of headers2.keys()) {
|
|
3826
|
+
if (headers.has(item))
|
|
3827
|
+
headers.delete(item);
|
|
3826
3828
|
headers = headers.set(item, headers2.get(item));
|
|
3829
|
+
}
|
|
3827
3830
|
return headers;
|
|
3828
3831
|
};
|
|
3829
3832
|
//#endregion
|
|
@@ -3839,10 +3842,6 @@ class ApiService {
|
|
|
3839
3842
|
this.logRoutes('get', route, parameters);
|
|
3840
3843
|
return new Observable((res) => {
|
|
3841
3844
|
const query = route + this.getRequestParse(parameters);
|
|
3842
|
-
// if (this.cacheS.has(query)) {
|
|
3843
|
-
// res.next(this.cacheS.getItem<T>(route));
|
|
3844
|
-
// }
|
|
3845
|
-
const headers = new HttpHeaders(this.headers);
|
|
3846
3845
|
this.http
|
|
3847
3846
|
.get(query, {
|
|
3848
3847
|
headers: this.concatenateHeaders(new HttpHeaders(this.headers), extras?.options?.headers),
|
|
@@ -3869,23 +3868,24 @@ class ApiService {
|
|
|
3869
3868
|
});
|
|
3870
3869
|
};
|
|
3871
3870
|
this.getCodes = (route) => this.get(route).pipe(map((res) => this.sortCodes(res)));
|
|
3872
|
-
this.getText = (route, parameters) => this.get(route, parameters, {
|
|
3871
|
+
this.getText = (route, parameters, extras) => this.get(route, parameters, {
|
|
3873
3872
|
options: {
|
|
3874
|
-
headers: new HttpHeaders(this.headers),
|
|
3873
|
+
headers: this.concatenateHeaders(new HttpHeaders(this.headers), extras?.options?.headers),
|
|
3875
3874
|
responseType: 'text',
|
|
3876
3875
|
},
|
|
3877
3876
|
});
|
|
3878
|
-
this.getFile = (route, parameters) => this.get(route, parameters, {
|
|
3877
|
+
this.getFile = (route, parameters, extras) => this.get(route, parameters, {
|
|
3879
3878
|
options: {
|
|
3880
|
-
headers: new HttpHeaders(this.headers),
|
|
3879
|
+
headers: this.concatenateHeaders(new HttpHeaders(this.headers), extras?.options?.headers),
|
|
3881
3880
|
responseType: 'arrayBuffer',
|
|
3882
3881
|
},
|
|
3883
3882
|
});
|
|
3884
3883
|
this.getWithBody = (route, body, extras) => {
|
|
3885
3884
|
this.logRoutes('get', route);
|
|
3886
3885
|
// debugger
|
|
3887
|
-
const req = new HttpRequest('GET', route, body,
|
|
3888
|
-
|
|
3886
|
+
const req = new HttpRequest('GET', route, body, {
|
|
3887
|
+
...extras?.options,
|
|
3888
|
+
headers: this.concatenateHeaders(new HttpHeaders(this.headers), extras?.options?.headers),
|
|
3889
3889
|
responseType: 'json',
|
|
3890
3890
|
});
|
|
3891
3891
|
return this.http
|
|
@@ -3936,26 +3936,28 @@ class ApiService {
|
|
|
3936
3936
|
: new HttpHeaders(this.headers);
|
|
3937
3937
|
return this.http
|
|
3938
3938
|
.delete(route, {
|
|
3939
|
-
headers,
|
|
3940
3939
|
responseType: 'json',
|
|
3941
3940
|
...extras?.options,
|
|
3941
|
+
headers: this.concatenateHeaders(new HttpHeaders(this.headers), extras?.options?.headers),
|
|
3942
3942
|
})
|
|
3943
3943
|
.pipe(catchError(this.handleRequestError));
|
|
3944
3944
|
};
|
|
3945
|
-
this.deleteWithBody = (route, body,
|
|
3945
|
+
this.deleteWithBody = (route, body, extras) => {
|
|
3946
3946
|
this.logRoutes('delete', route);
|
|
3947
|
-
const req = new HttpRequest('DELETE', route, body,
|
|
3948
|
-
headers: new HttpHeaders(this.headers),
|
|
3947
|
+
const req = new HttpRequest('DELETE', route, body, {
|
|
3949
3948
|
responseType: 'json',
|
|
3949
|
+
...extras?.options,
|
|
3950
|
+
headers: this.concatenateHeaders(new HttpHeaders(this.headers), extras?.options?.headers),
|
|
3950
3951
|
});
|
|
3951
3952
|
return this.http
|
|
3952
3953
|
.request(req)
|
|
3953
3954
|
.pipe(catchError(this.handleRequestError));
|
|
3954
3955
|
};
|
|
3955
|
-
this.deleteText = (route) => this.delete(route, {
|
|
3956
|
+
this.deleteText = (route, extras) => this.delete(route, {
|
|
3956
3957
|
options: {
|
|
3957
|
-
headers: new HttpHeaders(this.headers),
|
|
3958
3958
|
responseType: 'text',
|
|
3959
|
+
...extras?.options,
|
|
3960
|
+
headers: this.concatenateHeaders(new HttpHeaders(this.headers), extras?.options?.headers),
|
|
3959
3961
|
},
|
|
3960
3962
|
});
|
|
3961
3963
|
//#endregion
|
|
@@ -3977,9 +3979,9 @@ class ApiService {
|
|
|
3977
3979
|
: new HttpHeaders(this.headers);
|
|
3978
3980
|
return this.http
|
|
3979
3981
|
.patch(encodeURI(route), body, {
|
|
3980
|
-
headers,
|
|
3981
3982
|
responseType: 'json',
|
|
3982
3983
|
...extras?.options,
|
|
3984
|
+
headers: this.concatenateHeaders(headers, extras?.options?.headers),
|
|
3983
3985
|
})
|
|
3984
3986
|
.pipe(catchError(this.handleRequestError));
|
|
3985
3987
|
}
|
|
@@ -3993,19 +3995,18 @@ class ApiService {
|
|
|
3993
3995
|
: new HttpHeaders(this.headers);
|
|
3994
3996
|
return this.http
|
|
3995
3997
|
.post(encodeURI(route), body, {
|
|
3996
|
-
headers,
|
|
3997
3998
|
responseType: 'json',
|
|
3998
3999
|
...extras?.options,
|
|
4000
|
+
headers: this.concatenateHeaders(headers, extras?.options?.headers),
|
|
3999
4001
|
})
|
|
4000
4002
|
.pipe(catchError(this.handleRequestError));
|
|
4001
4003
|
}
|
|
4002
4004
|
postFile(route, body, extras) {
|
|
4003
4005
|
return this.post(route, body, {
|
|
4004
|
-
...extras?.options,
|
|
4005
4006
|
options: {
|
|
4006
|
-
headers: new HttpHeaders(this.fileHeaders),
|
|
4007
4007
|
responseType: 'json',
|
|
4008
4008
|
...extras?.options,
|
|
4009
|
+
headers: this.concatenateHeaders(new HttpHeaders(this.fileHeaders), extras?.options?.headers),
|
|
4009
4010
|
},
|
|
4010
4011
|
});
|
|
4011
4012
|
}
|
|
@@ -4018,7 +4019,7 @@ class ApiService {
|
|
|
4018
4019
|
});
|
|
4019
4020
|
}
|
|
4020
4021
|
postString(route, body, extras) {
|
|
4021
|
-
console.log('requestCount', ++ETSenvironment.requestCount);
|
|
4022
|
+
// console.log('requestCount', ++ETSenvironment.requestCount);
|
|
4022
4023
|
let headers = new HttpHeaders({
|
|
4023
4024
|
'Content-Type': 'text/plain',
|
|
4024
4025
|
});
|
|
@@ -4026,10 +4027,10 @@ class ApiService {
|
|
|
4026
4027
|
? headers.set('useEndorsement', 'true')
|
|
4027
4028
|
: headers;
|
|
4028
4029
|
return this.post(route, body, {
|
|
4029
|
-
...extras?.options,
|
|
4030
4030
|
options: {
|
|
4031
|
-
|
|
4031
|
+
...extras?.options,
|
|
4032
4032
|
responseType: 'text',
|
|
4033
|
+
headers: this.concatenateHeaders(headers, extras?.options?.headers),
|
|
4033
4034
|
},
|
|
4034
4035
|
});
|
|
4035
4036
|
}
|
|
@@ -4053,23 +4054,13 @@ class ApiService {
|
|
|
4053
4054
|
});
|
|
4054
4055
|
}
|
|
4055
4056
|
getRequestParse(parameters) {
|
|
4056
|
-
|
|
4057
|
-
|
|
4058
|
-
|
|
4059
|
-
|
|
4060
|
-
|
|
4061
|
-
|
|
4062
|
-
|
|
4063
|
-
// const str = nbody.toString();
|
|
4064
|
-
// if(parameters)
|
|
4065
|
-
// debugger;
|
|
4066
|
-
if (!parameters)
|
|
4067
|
-
return '';
|
|
4068
|
-
return ('?' +
|
|
4069
|
-
Object.keys(parameters)
|
|
4070
|
-
.filter((key) => parameters[key]?.toString()?.trim() != null)
|
|
4071
|
-
.map((key) => `${key}=${parameters[key]?.toString()?.trim()}`)
|
|
4072
|
-
.join('&'));
|
|
4057
|
+
return !parameters
|
|
4058
|
+
? ''
|
|
4059
|
+
: '?' +
|
|
4060
|
+
Object.keys(parameters)
|
|
4061
|
+
.filter((key) => parameters[key]?.toString()?.trim() != null)
|
|
4062
|
+
.map((key) => `${key}=${parameters[key]?.toString()?.trim()}`)
|
|
4063
|
+
.join('&');
|
|
4073
4064
|
}
|
|
4074
4065
|
//#endregion
|
|
4075
4066
|
//#region PUT
|
|
@@ -4085,9 +4076,9 @@ class ApiService {
|
|
|
4085
4076
|
: new HttpHeaders(this.headers);
|
|
4086
4077
|
return this.http
|
|
4087
4078
|
.put(query, nbody, {
|
|
4088
|
-
headers,
|
|
4089
4079
|
responseType: 'json',
|
|
4090
4080
|
...extras?.options,
|
|
4081
|
+
headers: this.concatenateHeaders(new HttpHeaders(this.headers), extras?.options?.headers),
|
|
4091
4082
|
})
|
|
4092
4083
|
.pipe(catchError(this.handleRequestError));
|
|
4093
4084
|
}
|