angular-odata 0.95.0 → 0.99.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/esm2020/lib/resources/query/expressions/base.mjs +20 -0
  2. package/esm2020/lib/resources/query/expressions/compute.mjs +38 -0
  3. package/esm2020/lib/resources/query/expressions/expand.mjs +57 -0
  4. package/esm2020/lib/resources/query/expressions/filter.mjs +154 -0
  5. package/esm2020/lib/resources/query/expressions/index.mjs +7 -0
  6. package/esm2020/lib/resources/query/expressions/orderby.mjs +54 -0
  7. package/esm2020/lib/resources/query/expressions/search.mjs +113 -0
  8. package/esm2020/lib/resources/query/expressions/select.mjs +32 -0
  9. package/esm2020/lib/resources/query/expressions/syntax.mjs +371 -0
  10. package/esm2020/lib/resources/query/handlers.mjs +16 -14
  11. package/esm2020/lib/resources/query/options.mjs +2 -2
  12. package/esm2020/lib/resources/resource.mjs +2 -2
  13. package/esm2020/lib/resources/types/batch.mjs +31 -10
  14. package/fesm2015/angular-odata.mjs +359 -123
  15. package/fesm2015/angular-odata.mjs.map +1 -1
  16. package/fesm2020/angular-odata.mjs +359 -123
  17. package/fesm2020/angular-odata.mjs.map +1 -1
  18. package/lib/resources/query/expressions/base.d.ts +19 -0
  19. package/lib/resources/query/expressions/compute.d.ts +26 -0
  20. package/lib/resources/query/expressions/expand.d.ts +40 -0
  21. package/lib/resources/query/expressions/filter.d.ts +58 -0
  22. package/lib/resources/query/expressions/index.d.ts +6 -0
  23. package/lib/resources/query/expressions/orderby.d.ts +37 -0
  24. package/lib/resources/query/expressions/search.d.ts +47 -0
  25. package/lib/resources/query/expressions/select.d.ts +21 -0
  26. package/lib/resources/query/{syntax.d.ts → expressions/syntax.d.ts} +8 -6
  27. package/lib/resources/query/handlers.d.ts +24 -9
  28. package/lib/resources/types/batch.d.ts +9 -0
  29. package/package.json +1 -1
  30. package/esm2020/lib/resources/query/expressions.mjs +0 -207
  31. package/esm2020/lib/resources/query/syntax.mjs +0 -406
  32. package/lib/resources/query/expressions.d.ts +0 -63
@@ -0,0 +1,371 @@
1
+ import { normalizeValue } from '../builder';
2
+ export class Field {
3
+ constructor(name = '') {
4
+ this.name = name;
5
+ }
6
+ static factory() {
7
+ const h = new Field();
8
+ return new Proxy({ _name: '' }, h);
9
+ }
10
+ get(target, p) {
11
+ let name = target['_name'];
12
+ if (p === 'render') {
13
+ return ({ prefix }) => prefix ? `${prefix}/${name}` : name;
14
+ }
15
+ name = name ? `${name}/${p}` : p;
16
+ return new Proxy({ _name: name }, this);
17
+ }
18
+ }
19
+ function applyMixins(derivedCtor, constructors) {
20
+ constructors.forEach((baseCtor) => {
21
+ Object.getOwnPropertyNames(baseCtor.prototype).forEach((name) => {
22
+ Object.defineProperty(derivedCtor.prototype, name, Object.getOwnPropertyDescriptor(baseCtor.prototype, name) ||
23
+ Object.create(null));
24
+ });
25
+ });
26
+ }
27
+ export function render(value, { aliases, normalize, escape, prefix, } = {}) {
28
+ if (typeof value === 'function') {
29
+ return render(value(syntax), { aliases, normalize, prefix });
30
+ }
31
+ if (typeof value === 'object' &&
32
+ value !== null &&
33
+ value.render !== undefined) {
34
+ return render(value.render({ aliases, escape, prefix }), {
35
+ aliases,
36
+ normalize,
37
+ escape,
38
+ prefix,
39
+ });
40
+ }
41
+ return normalize ? normalizeValue(value, { aliases, escape }) : value;
42
+ }
43
+ export class Function {
44
+ constructor(name, values, normalize = true, escape = false) {
45
+ this.name = name;
46
+ this.values = values;
47
+ this.normalize = normalize;
48
+ this.escape = escape;
49
+ }
50
+ get [Symbol.toStringTag]() {
51
+ return 'Function';
52
+ }
53
+ toJSON() {
54
+ return {
55
+ name: this.name,
56
+ values: this.values,
57
+ normalize: this.normalize,
58
+ };
59
+ }
60
+ render({ aliases, escape, prefix, }) {
61
+ let [field, ...values] = this.values;
62
+ field = render(field, { aliases, escape, prefix });
63
+ let params = [
64
+ field,
65
+ ...values.map((v) => render(v, { aliases, escape, prefix, normalize: this.normalize })),
66
+ ];
67
+ return `${this.name}(${params.join(', ')})`;
68
+ }
69
+ }
70
+ export class StringAndCollectionFunctions {
71
+ concat(field, value, normalize) {
72
+ return new Function('concat', [field, value], normalize);
73
+ }
74
+ contains(field, value, normalize) {
75
+ return new Function('contains', [field, value], normalize);
76
+ }
77
+ endsWith(field, value, normalize) {
78
+ return new Function('endswith', [field, value], normalize);
79
+ }
80
+ indexOf(field, value, normalize) {
81
+ return new Function('indexof', [field, value], normalize);
82
+ }
83
+ length(value, normalize) {
84
+ return new Function('length', [value], normalize);
85
+ }
86
+ startsWith(field, value, normalize) {
87
+ return new Function('startswith', [field, value], normalize);
88
+ }
89
+ subString(field, start, length) {
90
+ let values = [field, start];
91
+ if (length !== undefined) {
92
+ values.push(length);
93
+ }
94
+ return new Function('substring', values);
95
+ }
96
+ }
97
+ export class CollectionFunctions {
98
+ hasSubset(s1, s2) {
99
+ return new Function('hassubset', [s1, s2]);
100
+ }
101
+ hasSubsequence(s1, s2) {
102
+ return new Function('hassubsequence', [s1, s2]);
103
+ }
104
+ }
105
+ export class StringFunctions {
106
+ matchesPattern(value, pattern) {
107
+ return new Function('matchesPattern', [value, pattern]);
108
+ }
109
+ toLower(value) {
110
+ return new Function('tolower', [value]);
111
+ }
112
+ toUpper(value) {
113
+ return new Function('toupper', [value]);
114
+ }
115
+ trim(value) {
116
+ return new Function('trim', [value]);
117
+ }
118
+ }
119
+ export class DateAndTimeFunctions {
120
+ date(value) {
121
+ return new Function('date', [value]);
122
+ }
123
+ day(value) {
124
+ return new Function('day', [value]);
125
+ }
126
+ fractionalseconds(value) {
127
+ return new Function('fractionalseconds', [value]);
128
+ }
129
+ hour(value) {
130
+ return new Function('hour', [value]);
131
+ }
132
+ maxdatetime(value) {
133
+ return new Function('maxdatetime', [value]);
134
+ }
135
+ mindatetime(value) {
136
+ return new Function('mindatetime', [value]);
137
+ }
138
+ minute(value) {
139
+ return new Function('minute', [value]);
140
+ }
141
+ month(value) {
142
+ return new Function('month', [value]);
143
+ }
144
+ now() {
145
+ return new Function('now', []);
146
+ }
147
+ second(value) {
148
+ return new Function('second', [value]);
149
+ }
150
+ time(value) {
151
+ return new Function('time', [value]);
152
+ }
153
+ totaloffsetminutes(value) {
154
+ return new Function('totaloffsetminutes', [value]);
155
+ }
156
+ totalseconds(value) {
157
+ return new Function('totalseconds', [value]);
158
+ }
159
+ year(value) {
160
+ return new Function('year', [value]);
161
+ }
162
+ }
163
+ export class ArithmeticFunctions {
164
+ ceiling(value) {
165
+ return new Function('ceiling', [value]);
166
+ }
167
+ floor(value) {
168
+ return new Function('floor', [value]);
169
+ }
170
+ round(value) {
171
+ return new Function('round', [value]);
172
+ }
173
+ }
174
+ export class TypeFunctions {
175
+ cast(value, type) {
176
+ return new Function('cast', [value, type]);
177
+ }
178
+ isof(value, type) {
179
+ return new Function('isof', [value, type]);
180
+ }
181
+ }
182
+ export class GeoFunctions {
183
+ geoDistance(value, point, normalize) {
184
+ return new Function('geo.distance', [value, point], normalize);
185
+ }
186
+ geoIntersects(value, polygon, normalize) {
187
+ return new Function('geo.intersects', [value, polygon], normalize);
188
+ }
189
+ geoLength(line, normalize) {
190
+ return new Function('geo.length', [line], normalize);
191
+ }
192
+ }
193
+ export class ConditionalFunctions {
194
+ case(condition, value) {
195
+ return new Function('case', [condition, value]);
196
+ }
197
+ }
198
+ export class Operator {
199
+ constructor(op, values, normalize = true) {
200
+ this.op = op;
201
+ this.values = values;
202
+ this.normalize = normalize;
203
+ }
204
+ get [Symbol.toStringTag]() {
205
+ return 'Operator';
206
+ }
207
+ toJSON() {
208
+ return {
209
+ op: this.op,
210
+ values: this.values,
211
+ normalize: this.normalize,
212
+ };
213
+ }
214
+ render({ aliases, escape, prefix, }) {
215
+ let [left, right] = this.values;
216
+ left = render(left, { aliases, escape, prefix });
217
+ if (right !== undefined) {
218
+ right = Array.isArray(right)
219
+ ? `(${right
220
+ .map((v) => render(v, {
221
+ aliases,
222
+ escape,
223
+ prefix,
224
+ normalize: this.normalize,
225
+ }))
226
+ .join(',')})`
227
+ : render(right, {
228
+ aliases,
229
+ escape,
230
+ prefix,
231
+ normalize: this.normalize,
232
+ });
233
+ return `${left} ${this.op} ${right}`;
234
+ }
235
+ return `${this.op}(${left})`;
236
+ }
237
+ }
238
+ export class LogicalOperators {
239
+ eq(left, right, normalize) {
240
+ return new Operator('eq', [left, right], normalize);
241
+ }
242
+ ne(left, right, normalize) {
243
+ return new Operator('ne', [left, right], normalize);
244
+ }
245
+ gt(left, right, normalize) {
246
+ return new Operator('gt', [left, right], normalize);
247
+ }
248
+ ge(left, right, normalize) {
249
+ return new Operator('ge', [left, right], normalize);
250
+ }
251
+ lt(left, right, normalize) {
252
+ return new Operator('lt', [left, right], normalize);
253
+ }
254
+ le(left, right, normalize) {
255
+ return new Operator('le', [left, right], normalize);
256
+ }
257
+ /*
258
+ and(left: any, right: any, normalize?: boolean) {
259
+ return new Operator('and', [left, right], normalize);
260
+ }
261
+ or(left: any, right: any, normalize?: boolean) {
262
+ return new Operator('or', [left, right], normalize);
263
+ }
264
+ */
265
+ not(value, normalize) {
266
+ return new Operator('not', [value], normalize);
267
+ }
268
+ has(left, right, normalize) {
269
+ return new Operator('has', [left, right], normalize);
270
+ }
271
+ in(left, right, normalize) {
272
+ return new Operator('in', [left, right], normalize);
273
+ }
274
+ }
275
+ export class ArithmeticOperators {
276
+ add(left, right, normalize) {
277
+ return new Operator('add', [left, right], normalize);
278
+ }
279
+ sub(left, right, normalize) {
280
+ return new Operator('sub', [left, right], normalize);
281
+ }
282
+ mul(left, right, normalize) {
283
+ return new Operator('mul', [left, right], normalize);
284
+ }
285
+ div(left, right, normalize) {
286
+ return new Operator('div', [left, right], normalize);
287
+ }
288
+ mod(left, right, normalize) {
289
+ return new Operator('mod', [left, right], normalize);
290
+ }
291
+ neg(value, normalize) {
292
+ return new Operator('-', [value], normalize);
293
+ }
294
+ }
295
+ export class Grouping {
296
+ constructor(group) {
297
+ this.group = group;
298
+ }
299
+ get [Symbol.toStringTag]() {
300
+ return 'Grouping';
301
+ }
302
+ toJSON() {
303
+ return {
304
+ group: this.group.toJSON(),
305
+ };
306
+ }
307
+ render({ aliases, escape, prefix, }) {
308
+ return `(${render(this.group, { aliases, escape, prefix })})`;
309
+ }
310
+ }
311
+ export class Lambda {
312
+ constructor(op, values, alias) {
313
+ this.op = op;
314
+ this.values = values;
315
+ this.alias = alias;
316
+ }
317
+ get [Symbol.toStringTag]() {
318
+ return 'Lambda';
319
+ }
320
+ toJSON() {
321
+ return {
322
+ op: this.op,
323
+ values: this.values,
324
+ alias: this.alias,
325
+ };
326
+ }
327
+ render({ aliases, escape, prefix, }) {
328
+ let [left, right] = this.values;
329
+ left = render(left, { aliases, escape, prefix });
330
+ let alias = this.alias || left.split('/').pop().toLowerCase()[0];
331
+ return `${left}/${this.op}(${alias}:${render(right, {
332
+ aliases,
333
+ escape,
334
+ prefix: alias,
335
+ })})`;
336
+ }
337
+ }
338
+ export class LambdaOperators {
339
+ any(field, value, alias) {
340
+ return new Lambda('any', [field, value], alias);
341
+ }
342
+ all(field, value, alias) {
343
+ return new Lambda('all', [field, value], alias);
344
+ }
345
+ }
346
+ export class ODataOperators {
347
+ }
348
+ applyMixins(ODataOperators, [
349
+ LogicalOperators,
350
+ ArithmeticOperators,
351
+ LambdaOperators,
352
+ ]);
353
+ export const operators = new ODataOperators();
354
+ export class ODataFunctions {
355
+ }
356
+ applyMixins(ODataFunctions, [
357
+ StringAndCollectionFunctions,
358
+ CollectionFunctions,
359
+ StringFunctions,
360
+ DateAndTimeFunctions,
361
+ ArithmeticFunctions,
362
+ TypeFunctions,
363
+ GeoFunctions,
364
+ ConditionalFunctions,
365
+ ]);
366
+ export const functions = new ODataFunctions();
367
+ export class ODataSyntax {
368
+ }
369
+ applyMixins(ODataSyntax, [ODataOperators, ODataFunctions]);
370
+ export const syntax = new ODataSyntax();
371
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ludGF4LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1vZGF0YS9zcmMvbGliL3Jlc291cmNlcy9xdWVyeS9leHByZXNzaW9ucy9zeW50YXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQWdCNUMsTUFBTSxPQUFPLEtBQUs7SUFDaEIsWUFBbUIsT0FBZSxFQUFFO1FBQWpCLFNBQUksR0FBSixJQUFJLENBQWE7SUFBRyxDQUFDO0lBRXhDLE1BQU0sQ0FBQyxPQUFPO1FBQ1osTUFBTSxDQUFDLEdBQUcsSUFBSSxLQUFLLEVBQUssQ0FBQztRQUN6QixPQUFPLElBQUksS0FBSyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRCxHQUFHLENBQUMsTUFBUyxFQUFFLENBQWtCO1FBQy9CLElBQUksSUFBSSxHQUFJLE1BQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsS0FBSyxRQUFRLEVBQUU7WUFDbEIsT0FBTyxDQUFDLEVBQUUsTUFBTSxFQUF1QixFQUFFLEVBQUUsQ0FDekMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1NBQ3ZDO1FBQ0QsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzQyxPQUFPLElBQUksS0FBSyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBUyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2pELENBQUM7Q0FDRjtBQUVELFNBQVMsV0FBVyxDQUFDLFdBQWdCLEVBQUUsWUFBbUI7SUFDeEQsWUFBWSxDQUFDLE9BQU8s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QyxDQUFDO0lBQ3RELENBQUM7SUFDRCxFQUFFLENBQUMsSUFBUyxFQUFFLEtBQVUsRUFBRSxTQUFtQjtRQUMzQyxPQUFPLElBQUksUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBQ0QsRUFBRSxDQUFDLElBQVMsRUFBRSxLQUFVLEVBQUUsU0FBbUI7UUFDM0MsT0FBTyxJQUFJLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUNELEVBQUUsQ0FBQyxJQUFTLEVBQUUsS0FBVSxFQUFFLFNBQW1CO1FBQzNDLE9BQU8sSUFBSSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFDRCxFQUFFLENBQUMsSUFBUyxFQUFFLEtBQVUsRUFBRSxTQUFtQjtRQUMzQyxPQUFPLElBQUksUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBQ0Q7Ozs7Ozs7TUFPRTtJQUNGLEdBQUcsQ0FBQyxLQUFVLEVBQUUsU0FBbUI7UUFDakMsT0FBTyxJQUFJLFFBQVEsQ0FBSSxLQUFLLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBQ0QsR0FBRyxDQUFDLElBQVMsRUFBRSxLQUFVLEVBQUUsU0FBbUI7UUFDNUMsT0FBTyxJQUFJLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUNELEVBQUUsQ0FBQyxJQUFTLEVBQUUsS0FBVSxFQUFFLFNBQW1CO1FBQzNDLE9BQU8sSUFBSSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxF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QUFPLENBQUM7QUFFeEUsTUFBTSxPQUFPLFdBQVc7Q0FBTTtBQUU5QixXQUFXLENBQUMsV0FBVyxFQUFFLENBQUMsY0FBYyxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUM7QUFFM0QsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFxQixJQUFJLFdBQVcsRUFBTyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBRdWVyeUN1c3RvbVR5cGUgfSBmcm9tICcuLi9idWlsZGVyJztcbmltcG9ydCB7IG5vcm1hbGl6ZVZhbHVlIH0gZnJvbSAnLi4vYnVpbGRlcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVuZGVyYWJsZSB7XG4gIHJlbmRlcih7XG4gICAgYWxpYXNlcyxcbiAgICBlc2NhcGUsXG4gICAgcHJlZml4LFxuICB9OiB7XG4gICAgYWxpYXNlcz86IFF1ZXJ5Q3VzdG9tVHlwZVtdO1xuICAgIGVzY2FwZT86IGJvb2xlYW47XG4gICAgcHJlZml4Pzogc3RyaW5nO1xuICB9KTogc3RyaW5nO1xuICB0b1N0cmluZygpOiBzdHJpbmc7XG4gIHRvSlNPTigpOiBhbnk7XG59XG5cbmV4cG9ydCBjbGFzcyBGaWVsZDxUIGV4dGVuZHMgb2JqZWN0PiBpbXBsZW1lbnRzIFByb3h5SGFuZGxlcjxUPiB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOiBzdHJpbmcgPSAnJykge31cblxuICBzdGF0aWMgZmFjdG9yeTxUIGV4dGVuZHMgb2JqZWN0PigpIHtcbiAgICBjb25zdCBoID0gbmV3IEZpZWxkPFQ+KCk7XG4gICAgcmV0dXJuIG5ldyBQcm94eSh7IF9uYW1lOiAnJyB9IGFzIFQsIGgpO1xuICB9XG5cbiAgZ2V0KHRhcmdldDogVCwgcDogc3RyaW5nIHwgc3ltYm9sKTogYW55IHtcbiAgICBsZXQgbmFtZSA9ICh0YXJnZXQgYXMgYW55KVsnX25hbWUnXTtcbiAgICBpZiAocCA9PT0gJ3JlbmRlcicpIHtcbiAgICAgIHJldHVybiAoeyBwcmVmaXggfTogeyBwcmVmaXg/OiBzdHJpbmcgfSkgPT5cbiAgICAgICAgcHJlZml4ID8gYCR7cHJlZml4fS8ke25hbWV9YCA6IG5hbWU7XG4gICAgfVxuICAgIG5hbWUgPSBuYW1lID8gYCR7bmFtZX0vJHtwIGFzIHN0cmluZ31gIDogcDtcbiAgICByZXR1cm4gbmV3IFByb3h5KHsgX25hbWU6IG5hbWUgfSBhcyBhbnksIHRoaXMpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFwcGx5TWl4aW5zKGRlcml2ZWRDdG9yOiBhbnksIGNvbnN0cnVjdG9yczogYW55W10pIHtcbiAgY29uc3RydWN0b3JzLmZvckVhY2goKGJhc2VDdG9yKSA9PiB7XG4gICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYmFzZUN0b3IucHJvdG90eXBlKS5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoXG4gICAgICAgIGRlcml2ZWRDdG9yLnByb3RvdHlwZSxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihiYXNlQ3Rvci5wcm90b3R5cGUsIG5hbWUpIHx8XG4gICAgICAgICAgT2JqZWN0LmNyZWF0ZShudWxsKVxuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXIoXG4gIHZhbHVlOiBhbnksXG4gIHtcbiAgICBhbGlhc2VzLFxuICAgIG5vcm1hbGl6ZSxcbiAgICBlc2NhcGUsXG4gICAgcHJlZml4LFxuICB9OiB7XG4gICAgYWxpYXNlcz86IFF1ZXJ5Q3VzdG9tVHlwZVtdO1xuICAgIG5vcm1hbGl6ZT86IGJvb2xlYW47XG4gICAgZXNjYXBlPzogYm9vbGVhbjtcbiAgICBwcmVmaXg/OiBzdHJpbmc7XG4gIH0gPSB7fVxuKTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGwge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHJlbmRlcih2YWx1ZShzeW50YXgpLCB7IGFsaWFzZXMsIG5vcm1hbGl6ZSwgcHJlZml4IH0pO1xuICB9XG4gIGlmIChcbiAgICB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmXG4gICAgdmFsdWUgIT09IG51bGwgJiZcbiAgICB2YWx1ZS5yZW5kZXIgIT09IHVuZGVmaW5lZFxuICApIHtcbiAgICByZXR1cm4gcmVuZGVyKHZhbHVlLnJlbmRlcih7IGFsaWFzZXMsIGVzY2FwZSwgcHJlZml4IH0pLCB7XG4gICAgICBhbGlhc2VzLFxuICAgICAgbm9ybWFsaXplLFxuICAgICAgZXNjYXBlLFxuICAgICAgcHJlZml4LFxuICAgIH0pO1xuICB9XG4gIHJldHVybiBub3JtYWxpemUgPyBub3JtYWxpemVWYWx1ZSh2YWx1ZSwgeyBhbGlhc2VzLCBlc2NhcGUgfSkgOiB2YWx1ZTtcbn1cblxuZXhwb3J0IGNsYXNzIEZ1bmN0aW9uPFQ+IGltcGxlbWVudHMgUmVuZGVyYWJsZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBuYW1lOiBzdHJpbmcsXG4gICAgcHJvdGVjdGVkIHZhbHVlczogYW55W10sXG4gICAgcHJvdGVjdGVkIG5vcm1hbGl6ZTogYm9vbGVhbiA9IHRydWUsXG4gICAgcHJvdGVjdGVkIGVzY2FwZTogYm9vbGVhbiA9IGZhbHNlXG4gICkge31cblxuICBnZXQgW1N5bWJvbC50b1N0cmluZ1RhZ10oKSB7XG4gICAgcmV0dXJuICdGdW5jdGlvbic7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgIHZhbHVlczogdGhpcy52YWx1ZXMsXG4gICAgICBub3JtYWxpemU6IHRoaXMubm9ybWFsaXplLFxuICAgIH07XG4gIH1cblxuICByZW5kZXIoe1xuICAgIGFsaWFzZXMsXG4gICAgZXNjYXBlLFxuICAgIHByZWZpeCxcbiAgfToge1xuICAgIGFsaWFzZXM/OiBRdWVyeUN1c3RvbVR5cGVbXTtcbiAgICBlc2NhcGU/OiBib29sZWFuO1xuICAgIHByZWZpeD86IHN0cmluZztcbiAgfSk6IHN0cmluZyB7XG4gICAgbGV0IFtmaWVsZCwgLi4udmFsdWVzXSA9IHRoaXMudmFsdWVzO1xuXG4gICAgZmllbGQgPSByZW5kZXIoZmllbGQsIHsgYWxpYXNlcywgZXNjYXBlLCBwcmVmaXggfSk7XG4gICAgbGV0IHBhcmFtcyA9IFtcbiAgICAgIGZpZWxkLFxuICAgICAgLi4udmFsdWVzLm1hcCgodikgPT5cbiAgICAgICAgcmVuZGVyKHYsIHsgYWxpYXNlcywgZXNjYXBlLCBwcmVmaXgsIG5vcm1hbGl6ZTogdGhpcy5ub3JtYWxpemUgfSlcbiAgICAgICksXG4gICAgXTtcbiAgICByZXR1cm4gYCR7dGhpcy5uYW1lfSgke3BhcmFtcy5qb2luKCcsICcpfSlgO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdHJpbmdBbmRDb2xsZWN0aW9uRnVuY3Rpb25zPFQ+IHtcbiAgY29uY2F0KGZpZWxkOiBhbnksIHZhbHVlOiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdjb25jYXQnLCBbZmllbGQsIHZhbHVlXSwgbm9ybWFsaXplKTtcbiAgfVxuXG4gIGNvbnRhaW5zKGZpZWxkOiBhbnksIHZhbHVlOiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdjb250YWlucycsIFtmaWVsZCwgdmFsdWVdLCBub3JtYWxpemUpO1xuICB9XG5cbiAgZW5kc1dpdGgoZmllbGQ6IGFueSwgdmFsdWU6IGFueSwgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ2VuZHN3aXRoJywgW2ZpZWxkLCB2YWx1ZV0sIG5vcm1hbGl6ZSk7XG4gIH1cblxuICBpbmRleE9mKGZpZWxkOiBhbnksIHZhbHVlOiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdpbmRleG9mJywgW2ZpZWxkLCB2YWx1ZV0sIG5vcm1hbGl6ZSk7XG4gIH1cblxuICBsZW5ndGgodmFsdWU6IGFueSwgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ2xlbmd0aCcsIFt2YWx1ZV0sIG5vcm1hbGl6ZSk7XG4gIH1cblxuICBzdGFydHNXaXRoKGZpZWxkOiBhbnksIHZhbHVlOiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdzdGFydHN3aXRoJywgW2ZpZWxkLCB2YWx1ZV0sIG5vcm1hbGl6ZSk7XG4gIH1cblxuICBzdWJTdHJpbmcoZmllbGQ6IGFueSwgc3RhcnQ6IG51bWJlciwgbGVuZ3RoPzogbnVtYmVyKSB7XG4gICAgbGV0IHZhbHVlcyA9IFtmaWVsZCwgc3RhcnRdO1xuICAgIGlmIChsZW5ndGggIT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFsdWVzLnB1c2gobGVuZ3RoKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignc3Vic3RyaW5nJywgdmFsdWVzKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvbkZ1bmN0aW9uczxUPiB7XG4gIGhhc1N1YnNldChzMTogVCwgczI6IGFueSkge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ2hhc3N1YnNldCcsIFtzMSwgczJdKTtcbiAgfVxuICBoYXNTdWJzZXF1ZW5jZShzMTogVCwgczI6IGFueSkge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ2hhc3N1YnNlcXVlbmNlJywgW3MxLCBzMl0pO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdHJpbmdGdW5jdGlvbnM8VD4ge1xuICBtYXRjaGVzUGF0dGVybih2YWx1ZTogVCB8IHN0cmluZywgcGF0dGVybjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignbWF0Y2hlc1BhdHRlcm4nLCBbdmFsdWUsIHBhdHRlcm5dKTtcbiAgfVxuICB0b0xvd2VyKHZhbHVlOiBUKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPigndG9sb3dlcicsIFt2YWx1ZV0pO1xuICB9XG4gIHRvVXBwZXIodmFsdWU6IFQpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCd0b3VwcGVyJywgW3ZhbHVlXSk7XG4gIH1cbiAgdHJpbSh2YWx1ZTogVCkge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ3RyaW0nLCBbdmFsdWVdKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRGF0ZUFuZFRpbWVGdW5jdGlvbnM8VD4ge1xuICBkYXRlKHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdkYXRlJywgW3ZhbHVlXSk7XG4gIH1cbiAgZGF5KHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdkYXknLCBbdmFsdWVdKTtcbiAgfVxuICBmcmFjdGlvbmFsc2Vjb25kcyh2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignZnJhY3Rpb25hbHNlY29uZHMnLCBbdmFsdWVdKTtcbiAgfVxuICBob3VyKHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdob3VyJywgW3ZhbHVlXSk7XG4gIH1cbiAgbWF4ZGF0ZXRpbWUodmFsdWU6IGFueSkge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ21heGRhdGV0aW1lJywgW3ZhbHVlXSk7XG4gIH1cbiAgbWluZGF0ZXRpbWUodmFsdWU6IGFueSkge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ21pbmRhdGV0aW1lJywgW3ZhbHVlXSk7XG4gIH1cbiAgbWludXRlKHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdtaW51dGUnLCBbdmFsdWVdKTtcbiAgfVxuICBtb250aCh2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignbW9udGgnLCBbdmFsdWVdKTtcbiAgfVxuICBub3coKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignbm93JywgW10pO1xuICB9XG4gIHNlY29uZCh2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignc2Vjb25kJywgW3ZhbHVlXSk7XG4gIH1cbiAgdGltZSh2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPigndGltZScsIFt2YWx1ZV0pO1xuICB9XG4gIHRvdGFsb2Zmc2V0bWludXRlcyh2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPigndG90YWxvZmZzZXRtaW51dGVzJywgW3ZhbHVlXSk7XG4gIH1cbiAgdG90YWxzZWNvbmRzKHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCd0b3RhbHNlY29uZHMnLCBbdmFsdWVdKTtcbiAgfVxuICB5ZWFyKHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCd5ZWFyJywgW3ZhbHVlXSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFyaXRobWV0aWNGdW5jdGlvbnM8VD4ge1xuICBjZWlsaW5nKHZhbHVlOiBUIHwgc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignY2VpbGluZycsIFt2YWx1ZV0pO1xuICB9XG4gIGZsb29yKHZhbHVlOiBUIHwgc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignZmxvb3InLCBbdmFsdWVdKTtcbiAgfVxuICByb3VuZCh2YWx1ZTogVCB8IHN0cmluZykge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ3JvdW5kJywgW3ZhbHVlXSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFR5cGVGdW5jdGlvbnM8VD4ge1xuICBjYXN0KHZhbHVlOiBUIHwgc3RyaW5nLCB0eXBlPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignY2FzdCcsIFt2YWx1ZSwgdHlwZV0pO1xuICB9XG5cbiAgaXNvZih2YWx1ZTogVCB8IHN0cmluZywgdHlwZT86IHN0cmluZykge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ2lzb2YnLCBbdmFsdWUsIHR5cGVdKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2VvRnVuY3Rpb25zPFQ+IHtcbiAgZ2VvRGlzdGFuY2UodmFsdWU6IFQsIHBvaW50OiBzdHJpbmcsIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdnZW8uZGlzdGFuY2UnLCBbdmFsdWUsIHBvaW50XSwgbm9ybWFsaXplKTtcbiAgfVxuICBnZW9JbnRlcnNlY3RzKHZhbHVlOiBULCBwb2x5Z29uOiBzdHJpbmcsIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdnZW8uaW50ZXJzZWN0cycsIFt2YWx1ZSwgcG9seWdvbl0sIG5vcm1hbGl6ZSk7XG4gIH1cbiAgZ2VvTGVuZ3RoKGxpbmU6IFQsIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdnZW8ubGVuZ3RoJywgW2xpbmVdLCBub3JtYWxpemUpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDb25kaXRpb25hbEZ1bmN0aW9uczxUPiB7XG4gIGNhc2UoY29uZGl0aW9uOiBUIHwgc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignY2FzZScsIFtjb25kaXRpb24sIHZhbHVlXSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE9wZXJhdG9yPFQ+IGltcGxlbWVudHMgUmVuZGVyYWJsZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBvcDogc3RyaW5nLFxuICAgIHByb3RlY3RlZCB2YWx1ZXM6IGFueVtdLFxuICAgIHByb3RlY3RlZCBub3JtYWxpemU6IGJvb2xlYW4gPSB0cnVlXG4gICkge31cblxuICBnZXQgW1N5bWJvbC50b1N0cmluZ1RhZ10oKSB7XG4gICAgcmV0dXJuICdPcGVyYXRvcic7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG9wOiB0aGlzLm9wLFxuICAgICAgdmFsdWVzOiB0aGlzLnZhbHVlcyxcbiAgICAgIG5vcm1hbGl6ZTogdGhpcy5ub3JtYWxpemUsXG4gICAgfTtcbiAgfVxuXG4gIHJlbmRlcih7XG4gICAgYWxpYXNlcyxcbiAgICBlc2NhcGUsXG4gICAgcHJlZml4LFxuICB9OiB7XG4gICAgYWxpYXNlcz86IFF1ZXJ5Q3VzdG9tVHlwZVtdO1xuICAgIGVzY2FwZT86IGJvb2xlYW47XG4gICAgcHJlZml4Pzogc3RyaW5nO1xuICB9KTogc3RyaW5nIHtcbiAgICBsZXQgW2xlZnQsIHJpZ2h0XSA9IHRoaXMudmFsdWVzO1xuXG4gICAgbGVmdCA9IHJlbmRlcihsZWZ0LCB7IGFsaWFzZXMsIGVzY2FwZSwgcHJlZml4IH0pO1xuICAgIGlmIChyaWdodCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByaWdodCA9IEFycmF5LmlzQXJyYXkocmlnaHQpXG4gICAgICAgID8gYCgke3JpZ2h0XG4gICAgICAgICAgICAubWFwKCh2KSA9PlxuICAgICAgICAgICAgICByZW5kZXIodiwge1xuICAgICAgICAgICAgICAgIGFsaWFzZXMsXG4gICAgICAgICAgICAgICAgZXNjYXBlLFxuICAgICAgICAgICAgICAgIHByZWZpeCxcbiAgICAgICAgICAgICAgICBub3JtYWxpemU6IHRoaXMubm9ybWFsaXplLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmpvaW4oJywnKX0pYFxuICAgICAgICA6IHJlbmRlcihyaWdodCwge1xuICAgICAgICAgICAgYWxpYXNlcyxcbiAgICAgICAgICAgIGVzY2FwZSxcbiAgICAgICAgICAgIHByZWZpeCxcbiAgICAgICAgICAgIG5vcm1hbGl6ZTogdGhpcy5ub3JtYWxpemUsXG4gICAgICAgICAgfSk7XG4gICAgICByZXR1cm4gYCR7bGVmdH0gJHt0aGlzLm9wfSAke3JpZ2h0fWA7XG4gICAgfVxuICAgIHJldHVybiBgJHt0aGlzLm9wfSgke2xlZnR9KWA7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIExvZ2ljYWxPcGVyYXRvcnM8VD4ge1xuICBlcShsZWZ0OiBhbnksIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yKCdlcScsIFtsZWZ0LCByaWdodF0sIG5vcm1hbGl6ZSk7XG4gIH1cbiAgbmUobGVmdDogYW55LCByaWdodDogYW55LCBub3JtYWxpemU/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvcignbmUnLCBbbGVmdCwgcmlnaHRdLCBub3JtYWxpemUpO1xuICB9XG4gIGd0KGxlZnQ6IGFueSwgcmlnaHQ6IGFueSwgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiBuZXcgT3BlcmF0b3IoJ2d0JywgW2xlZnQsIHJpZ2h0XSwgbm9ybWFsaXplKTtcbiAgfVxuICBnZShsZWZ0OiBhbnksIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yKCdnZScsIFtsZWZ0LCByaWdodF0sIG5vcm1hbGl6ZSk7XG4gIH1cbiAgbHQobGVmdDogYW55LCByaWdodDogYW55LCBub3JtYWxpemU/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvcignbHQnLCBbbGVmdCwgcmlnaHRdLCBub3JtYWxpemUpO1xuICB9XG4gIGxlKGxlZnQ6IGFueSwgcmlnaHQ6IGFueSwgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiBuZXcgT3BlcmF0b3IoJ2xlJywgW2xlZnQsIHJpZ2h0XSwgbm9ybWFsaXplKTtcbiAgfVxuICAvKlxuICBhbmQobGVmdDogYW55LCByaWdodDogYW55LCBub3JtYWxpemU/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvcignYW5kJywgW2xlZnQsIHJpZ2h0XSwgbm9ybWFsaXplKTtcbiAgfVxuICBvcihsZWZ0OiBhbnksIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yKCdvcicsIFtsZWZ0LCByaWdodF0sIG5vcm1hbGl6ZSk7XG4gIH1cbiAgKi9cbiAgbm90KHZhbHVlOiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yPFQ+KCdub3QnLCBbdmFsdWVdLCBub3JtYWxpemUpO1xuICB9XG4gIGhhcyhsZWZ0OiBhbnksIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yKCdoYXMnLCBbbGVmdCwgcmlnaHRdLCBub3JtYWxpemUpO1xuICB9XG4gIGluKGxlZnQ6IGFueSwgcmlnaHQ6IGFueSwgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiBuZXcgT3BlcmF0b3IoJ2luJywgW2xlZnQsIHJpZ2h0XSwgbm9ybWFsaXplKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQXJpdGhtZXRpY09wZXJhdG9yczxUPiB7XG4gIGFkZChsZWZ0OiBhbnksIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yPFQ+KCdhZGQnLCBbbGVmdCwgcmlnaHRdLCBub3JtYWxpemUpO1xuICB9XG4gIHN1YihsZWZ0OiBhbnksIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yKCdzdWInLCBbbGVmdCwgcmlnaHRdLCBub3JtYWxpemUpO1xuICB9XG4gIG11bChsZWZ0OiBhbnksIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yKCdtdWwnLCBbbGVmdCwgcmlnaHRdLCBub3JtYWxpemUpO1xuICB9XG4gIGRpdihsZWZ0OiBhbnksIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yKCdkaXYnLCBbbGVmdCwgcmlnaHRdLCBub3JtYWxpemUpO1xuICB9XG4gIG1vZChsZWZ0OiBhbnksIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yKCdtb2QnLCBbbGVmdCwgcmlnaHRdLCBub3JtYWxpemUpO1xuICB9XG4gIG5lZyh2YWx1ZTogYW55LCBub3JtYWxpemU/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvcignLScsIFt2YWx1ZV0sIG5vcm1hbGl6ZSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdyb3VwaW5nPFQ+IGltcGxlbWVudHMgUmVuZGVyYWJsZSB7XG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBncm91cDogUmVuZGVyYWJsZSkge31cblxuICBnZXQgW1N5bWJvbC50b1N0cmluZ1RhZ10oKSB7XG4gICAgcmV0dXJuICdHcm91cGluZyc7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGdyb3VwOiB0aGlzLmdyb3VwLnRvSlNPTigpLFxuICAgIH07XG4gIH1cblxuICByZW5kZXIoe1xuICAgIGFsaWFzZXMsXG4gICAgZXNjYXBlLFxuICAgIHByZWZpeCxcbiAgfToge1xuICAgIGFsaWFzZXM/OiBRdWVyeUN1c3RvbVR5cGVbXTtcbiAgICBlc2NhcGU/OiBib29sZWFuO1xuICAgIHByZWZpeD86IHN0cmluZztcbiAgfSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAoJHtyZW5kZXIodGhpcy5ncm91cCwgeyBhbGlhc2VzLCBlc2NhcGUsIHByZWZpeCB9KX0pYDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGFtYmRhPFQ+IGltcGxlbWVudHMgUmVuZGVyYWJsZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBvcDogc3RyaW5nLFxuICAgIHByb3RlY3RlZCB2YWx1ZXM6IGFueVtdLFxuICAgIHByb3RlY3RlZCBhbGlhcz86IHN0cmluZ1xuICApIHt9XG5cbiAgZ2V0IFtTeW1ib2wudG9TdHJpbmdUYWddKCkge1xuICAgIHJldHVybiAnTGFtYmRhJztcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgb3A6IHRoaXMub3AsXG4gICAgICB2YWx1ZXM6IHRoaXMudmFsdWVzLFxuICAgICAgYWxpYXM6IHRoaXMuYWxpYXMsXG4gICAgfTtcbiAgfVxuXG4gIHJlbmRlcih7XG4gICAgYWxpYXNlcyxcbiAgICBlc2NhcGUsXG4gICAgcHJlZml4LFxuICB9OiB7XG4gICAgYWxpYXNlcz86IFF1ZXJ5Q3VzdG9tVHlwZVtdO1xuICAgIGVzY2FwZT86IGJvb2xlYW47XG4gICAgcHJlZml4Pzogc3RyaW5nO1xuICB9KTogc3RyaW5nIHtcbiAgICBsZXQgW2xlZnQsIHJpZ2h0XSA9IHRoaXMudmFsdWVzO1xuXG4gICAgbGVmdCA9IHJlbmRlcihsZWZ0LCB7IGFsaWFzZXMsIGVzY2FwZSwgcHJlZml4IH0pO1xuICAgIGxldCBhbGlhcyA9IHRoaXMuYWxpYXMgfHwgbGVmdC5zcGxpdCgnLycpLnBvcCgpLnRvTG93ZXJDYXNlKClbMF07XG4gICAgcmV0dXJuIGAke2xlZnR9LyR7dGhpcy5vcH0oJHthbGlhc306JHtyZW5kZXIocmlnaHQsIHtcbiAgICAgIGFsaWFzZXMsXG4gICAgICBlc2NhcGUsXG4gICAgICBwcmVmaXg6IGFsaWFzLFxuICAgIH0pfSlgO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMYW1iZGFPcGVyYXRvcnM8VD4ge1xuICBhbnkoZmllbGQ6IFQsIHZhbHVlOiBhbnksIGFsaWFzPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBMYW1iZGEoJ2FueScsIFtmaWVsZCwgdmFsdWVdLCBhbGlhcyk7XG4gIH1cblxuICBhbGwoZmllbGQ6IFQsIHZhbHVlOiBhbnksIGFsaWFzPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBMYW1iZGEoJ2FsbCcsIFtmaWVsZCwgdmFsdWVdLCBhbGlhcyk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE9EYXRhT3BlcmF0b3JzPFQ+IHt9XG5leHBvcnQgaW50ZXJmYWNlIE9EYXRhT3BlcmF0b3JzPFQ+XG4gIGV4dGVuZHMgTG9naWNhbE9wZXJhdG9yczxUPixcbiAgICBBcml0aG1ldGljT3BlcmF0b3JzPFQ+LFxuICAgIExhbWJkYU9wZXJhdG9yczxUPiB7fVxuXG5hcHBseU1peGlucyhPRGF0YU9wZXJhdG9ycywgW1xuICBMb2dpY2FsT3BlcmF0b3JzLFxuICBBcml0aG1ldGljT3BlcmF0b3JzLFxuICBMYW1iZGFPcGVyYXRvcnMsXG5dKTtcbmV4cG9ydCBjb25zdCBvcGVyYXRvcnM6IE9EYXRhT3BlcmF0b3JzPGFueT4gPSBuZXcgT0RhdGFPcGVyYXRvcnM8YW55PigpO1xuXG5leHBvcnQgY2xhc3MgT0RhdGFGdW5jdGlvbnM8VD4ge31cbmV4cG9ydCBpbnRlcmZhY2UgT0RhdGFGdW5jdGlvbnM8VD5cbiAgZXh0ZW5kcyBTdHJpbmdBbmRDb2xsZWN0aW9uRnVuY3Rpb25zPFQ+LFxuICAgIENvbGxlY3Rpb25GdW5jdGlvbnM8VD4sXG4gICAgU3RyaW5nRnVuY3Rpb25zPFQ+LFxuICAgIERhdGVBbmRUaW1lRnVuY3Rpb25zPFQ+LFxuICAgIEFyaXRobWV0aWNGdW5jdGlvbnM8VD4sXG4gICAgVHlwZUZ1bmN0aW9uczxUPixcbiAgICBHZW9GdW5jdGlvbnM8VD4sXG4gICAgQ29uZGl0aW9uYWxGdW5jdGlvbnM8VD4ge31cblxuYXBwbHlNaXhpbnMoT0RhdGFGdW5jdGlvbnMsIFtcbiAgU3RyaW5nQW5kQ29sbGVjdGlvbkZ1bmN0aW9ucyxcbiAgQ29sbGVjdGlvbkZ1bmN0aW9ucyxcbiAgU3RyaW5nRnVuY3Rpb25zLFxuICBEYXRlQW5kVGltZUZ1bmN0aW9ucyxcbiAgQXJpdGhtZXRpY0Z1bmN0aW9ucyxcbiAgVHlwZUZ1bmN0aW9ucyxcbiAgR2VvRnVuY3Rpb25zLFxuICBDb25kaXRpb25hbEZ1bmN0aW9ucyxcbl0pO1xuZXhwb3J0IGNvbnN0IGZ1bmN0aW9uczogT0RhdGFGdW5jdGlvbnM8YW55PiA9IG5ldyBPRGF0YUZ1bmN0aW9uczxhbnk+KCk7XG5cbmV4cG9ydCBjbGFzcyBPRGF0YVN5bnRheDxUPiB7fVxuZXhwb3J0IGludGVyZmFjZSBPRGF0YVN5bnRheDxUPiBleHRlbmRzIE9EYXRhT3BlcmF0b3JzPFQ+LCBPRGF0YUZ1bmN0aW9uczxUPiB7fVxuYXBwbHlNaXhpbnMoT0RhdGFTeW50YXgsIFtPRGF0YU9wZXJhdG9ycywgT0RhdGFGdW5jdGlvbnNdKTtcblxuZXhwb3J0IGNvbnN0IHN5bnRheDogT0RhdGFTeW50YXg8YW55PiA9IG5ldyBPRGF0YVN5bnRheDxhbnk+KCk7XG4iXX0=
@@ -1,7 +1,9 @@
1
1
  import { QueryOptionNames } from '../../types';
2
2
  import { Objects, Types } from '../../utils';
3
3
  import { alias } from './builder';
4
- import { Expression } from './expressions';
4
+ import { ComputeExpression, FilterExpression, OrderByExpression, SearchExpression, } from './expressions';
5
+ import { ExpandExpression } from './expressions/expand';
6
+ import { SelectExpression } from './expressions/select';
5
7
  export class ODataQueryOptionHandler {
6
8
  constructor(o, n) {
7
9
  this.o = o;
@@ -98,16 +100,20 @@ export class ODataQueryOptionsHandler {
98
100
  return alias(value, name);
99
101
  }
100
102
  select(opts) {
103
+ if (Types.isFunction(opts)) {
104
+ return this.options.expression(QueryOptionNames.select, SelectExpression.select(opts));
105
+ }
101
106
  return this.options.option(QueryOptionNames.select, opts);
102
107
  }
103
108
  expand(opts) {
109
+ if (Types.isFunction(opts)) {
110
+ return this.options.expression(QueryOptionNames.expand, ExpandExpression.expand(opts));
111
+ }
104
112
  return this.options.option(QueryOptionNames.expand, opts);
105
113
  }
106
114
  compute(opts) {
107
115
  if (Types.isFunction(opts)) {
108
- return this.options.expression(QueryOptionNames.compute, opts({
109
- e: () => Expression.e(),
110
- }));
116
+ return this.options.expression(QueryOptionNames.compute, ComputeExpression.compute(opts));
111
117
  }
112
118
  return this.options.option(QueryOptionNames.compute, opts);
113
119
  }
@@ -118,24 +124,20 @@ export class ODataQueryOptionsHandler {
118
124
  return this.options.option(QueryOptionNames.transform, opts);
119
125
  }
120
126
  search(opts) {
127
+ if (Types.isFunction(opts)) {
128
+ return this.options.expression(QueryOptionNames.search, SearchExpression.search(opts));
129
+ }
121
130
  return this.options.option(QueryOptionNames.search, opts);
122
131
  }
123
132
  filter(opts) {
124
133
  if (Types.isFunction(opts)) {
125
- return this.options.expression(QueryOptionNames.filter, opts({
126
- s: Expression.s(),
127
- e: Expression.e,
128
- o: Expression.o(),
129
- f: Expression.f(),
130
- }));
134
+ return this.options.expression(QueryOptionNames.filter, FilterExpression.filter(opts));
131
135
  }
132
136
  return this.options.option(QueryOptionNames.filter, opts);
133
137
  }
134
138
  orderBy(opts) {
135
139
  if (Types.isFunction(opts)) {
136
- return this.options.expression(QueryOptionNames.orderBy, opts({
137
- e: () => Expression.e(),
138
- }));
140
+ return this.options.expression(QueryOptionNames.orderBy, OrderByExpression.orderBy(opts));
139
141
  }
140
142
  return this.options.option(QueryOptionNames.orderBy, opts);
141
143
  }
@@ -183,4 +185,4 @@ export class ODataQueryOptionsHandler {
183
185
  this.paging(query);
184
186
  }
185
187
  }
186
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLW9kYXRhL3NyYy9saWIvcmVzb3VyY2VzL3F1ZXJ5L2hhbmRsZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMvQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM3QyxPQUFPLEVBQUUsS0FBSyxFQUE4QyxNQUFNLFdBQVcsQ0FBQztBQUM5RSxPQUFPLEVBQWEsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSXRELE1BQU0sT0FBTyx1QkFBdUI7SUFDbEMsWUFDVSxDQUEwQixFQUMxQixDQUFtQjtRQURuQixNQUFDLEdBQUQsQ0FBQyxDQUF5QjtRQUMxQixNQUFDLEdBQUQsQ0FBQyxDQUFrQjtJQUMxQixDQUFDO0lBRUosSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2hCLENBQUM7SUFFRCxNQUFNO1FBQ0osT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBRUQsS0FBSztRQUNILE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCx5QkFBeUI7SUFDekIsS0FBSyxDQUFDLENBQU87UUFDWCxPQUFPLENBQUMsQ0FBQyxLQUFLLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUNELFlBQVk7SUFFWixx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Q0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDM0I7UUFDRCxJQUFJLEtBQUssQ0FBQyxTQUFTLEtBQUssU0FBUyxFQUFFO1lBQ2pDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQ2pDO1FBQ0QsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLFNBQVMsRUFBRTtZQUM5QixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUMzQjtRQUNELElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxTQUFTLEVBQUU7WUFDOUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDM0I7UUFDRCxJQUFJLEtBQUssQ0FBQyxPQUFPLEtBQUssU0FBUyxFQUFFO1lBQy9CLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQzdCO1FBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBRdWVyeU9wdGlvbk5hbWVzIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgT2JqZWN0cywgVHlwZXMgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyBhbGlhcywgRXhwYW5kLCBGaWx0ZXIsIE9yZGVyQnksIFNlbGVjdCwgVHJhbnNmb3JtIH0gZnJvbSAnLi9idWlsZGVyJztcbmltcG9ydCB7IENvbm5lY3RvciwgRXhwcmVzc2lvbiB9IGZyb20gJy4vZXhwcmVzc2lvbnMnO1xuaW1wb3J0IHR5cGUgeyBPRGF0YVF1ZXJ5QXJndW1lbnRzLCBPRGF0YVF1ZXJ5T3B0aW9ucyB9IGZyb20gJy4vb3B0aW9ucyc7XG5pbXBvcnQgeyBPRGF0YUZ1bmN0aW9ucywgT0RhdGFPcGVyYXRvcnMgfSBmcm9tICcuL3N5bnRheCc7XG5cbmV4cG9ydCBjbGFzcyBPRGF0YVF1ZXJ5T3B0aW9uSGFuZGxlcjxUPiB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgbzogeyBbbmFtZTogc3RyaW5nXTogYW55IH0sXG4gICAgcHJpdmF0ZSBuOiBRdWVyeU9wdGlvbk5hbWVzXG4gICkge31cblxuICBnZXQgbmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5uO1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIHJldHVybiB0aGlzLm9bdGhpcy5uXTtcbiAgfVxuXG4gIGVtcHR5KCkge1xuICAgIHJldHVybiBUeXBlcy5pc0VtcHR5KHRoaXMub1t0aGlzLm5dKTtcbiAgfVxuXG4gIC8vI3JlZ2lvbiBQcmltaXRpdmUgVmFsdWVcbiAgdmFsdWUodj86IGFueSkge1xuICAgIHJldHVybiAodiAhPT0gdW5kZWZpbmVkICYmICh0aGlzLm9bdGhpcy5uXSA9IHYpKSB8fCB0aGlzLm9bdGhpcy5uXTtcbiAgfVxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gQXJyYXkgVmFsdWVcbiAgcHJpdmF0ZSBhc3NlcnRBcnJheSgpOiBhbnlbXSB7XG4gICAgaWYgKCFUeXBlcy5pc0FycmF5KHRoaXMub1t0aGlzLm5dKSlcbiAgICAgIHRoaXMub1t0aGlzLm5dID0gdGhpcy5vW3RoaXMubl0gIT09IHVuZGVmaW5lZCA/IFt0aGlzLm9bdGhpcy5uXV0gOiBbXTtcbiAgICByZXR1cm4gdGhpcy5vW3RoaXMubl07XG4gIH1cblxuICBwdXNoKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLmFzc2VydEFycmF5KCkucHVzaCh2YWx1ZSk7XG4gIH1cblxuICByZW1vdmUodmFsdWU6IGFueSkge1xuICAgIHRoaXMub1t0aGlzLm5dID0gdGhpcy5hc3NlcnRBcnJheSgpLmZpbHRlcigodikgPT4gdiAhPT0gdmFsdWUpO1xuICAgIC8vIElmIG9ubHkgb25lLi4uIGRvd24gdG8gdmFsdWVcbiAgICBpZiAodGhpcy5vW3RoaXMubl0ubGVuZ3RoID09PSAxKSB0aGlzLm9bdGhpcy5uXSA9IHRoaXMub1t0aGlzLm5dWzBdO1xuICB9XG5cbiAgYXQoaW5kZXg6IG51bWJlcikge1xuICAgIHJldHVybiB0aGlzLmFzc2VydEFycmF5KClbaW5kZXhdO1xuICB9XG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiBIYXNoTWFwIFZhbHVlXG4gIHByaXZhdGUgYXNzZXJ0T2JqZWN0KGNyZWF0ZTogYm9vbGVhbik6IHsgW25hbWU6IHN0cmluZ106IGFueSB9IHtcbiAgICBpZiAoIVR5cGVzLmlzQXJyYXkodGhpcy5vW3RoaXMubl0pICYmIFR5cGVzLmlzUGxhaW5PYmplY3QodGhpcy5vW3RoaXMubl0pKSB7XG4gICAgICByZXR1cm4gdGhpcy5vW3RoaXMubl07XG4gICAgfVxuICAgIGxldCBhcnIgPSB0aGlzLmFzc2VydEFycmF5KCk7XG4gICAgbGV0IG9iaiA9IGFyci5maW5kKCh2KSA9PiBUeXBlcy5pc1BsYWluT2JqZWN0KHYpKTtcbiAgICBpZiAoIW9iaiAmJiBjcmVhdGUpIHtcbiAgICAgIG9iaiA9IHt9O1xuICAgICAgYXJyLnB1c2gob2JqKTtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHNldChwYXRoOiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICBsZXQgb2JqID0gdGhpcy5hc3NlcnRPYmplY3QodHJ1ZSk7XG4gICAgT2JqZWN0cy5zZXQob2JqLCBwYXRoLCB2YWx1ZSk7XG4gIH1cblxuICBnZXQocGF0aDogc3RyaW5nLCBkZWY/OiBhbnkpOiBhbnkge1xuICAgIGxldCBvYmogPSB0aGlzLmFzc2VydE9iamVjdChmYWxzZSkgfHwge307XG4gICAgcmV0dXJuIE9iamVjdHMuZ2V0KG9iaiwgcGF0aCwgZGVmKTtcbiAgfVxuXG4gIHVuc2V0KHBhdGg6IHN0cmluZykge1xuICAgIGxldCBvYmogPSB0aGlzLmFzc2VydE9iamVjdCh0cnVlKTtcbiAgICBPYmplY3RzLnVuc2V0KG9iaiwgcGF0aCk7XG5cbiAgICBpZiAoVHlwZXMuaXNBcnJheSh0aGlzLm9bdGhpcy5uXSkpIHtcbiAgICAgIHRoaXMub1t0aGlzLm5dID0gdGhpcy5vW3RoaXMubl0uZmlsdGVyKCh2OiBhbnkpID0+ICFUeXBlcy5pc0VtcHR5KHYpKTtcbiAgICAgIGlmICh0aGlzLm9bdGhpcy5uXS5sZW5ndGggPT09IDEpIHRoaXMub1t0aGlzLm5dID0gdGhpcy5vW3RoaXMubl1bMF07XG4gICAgfVxuICB9XG5cbiAgaGFzKHBhdGg6IHN0cmluZykge1xuICAgIGxldCBvYmogPSB0aGlzLmFzc2VydE9iamVjdChmYWxzZSkgfHwge307XG4gICAgcmV0dXJuIE9iamVjdHMuaGFzKG9iaiwgcGF0aCk7XG4gIH1cblxuICBhc3NpZ24odmFsdWVzOiB7IFthdHRyOiBzdHJpbmddOiBhbnkgfSkge1xuICAgIGxldCBvYmogPSB0aGlzLmFzc2VydE9iamVjdCh0cnVlKTtcbiAgICByZXR1cm4gT2JqZWN0cy5tZXJnZShvYmosIHZhbHVlcyk7XG4gIH1cbiAgLy8jZW5kcmVnaW9uXG5cbiAgY2xlYXIoKSB7XG4gICAgZGVsZXRlIHRoaXMub1t0aGlzLm5dO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBPRGF0YVF1ZXJ5T3B0aW9uc0hhbmRsZXI8VD4ge1xuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgb3B0aW9uczogT0RhdGFRdWVyeU9wdGlvbnM8VD4pIHt9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBvZGF0YSBhbGlhcyBwYXJhbWV0ZXJcbiAgICogQGxpbmsgaHR0cHM6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL29kYXRhL29kYXRhL3Y0LjAxL29kYXRhLXY0LjAxLXBhcnQyLXVybC1jb252ZW50aW9ucy5odG1sI3NlY19QYXJhbWV0ZXJBbGlhc2VzXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgb2YgdGhlIGFsaWFzXG4gICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBhbGlhc1xuICAgKiBAcmV0dXJucyBUaGUgYWxpYXNcbiAgICovXG4gIGFsaWFzKHZhbHVlOiBhbnksIG5hbWU/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYWxpYXModmFsdWUsIG5hbWUpO1xuICB9XG5cbiAgc2VsZWN0KG9wdHM6IFNlbGVjdDxUPik6IE9EYXRhUXVlcnlPcHRpb25IYW5kbGVyPFQ+O1xuICBzZWxlY3QoKTogT0RhdGFRdWVyeU9wdGlvbkhhbmRsZXI8VD47XG4gIHNlbGVjdChvcHRzPzogU2VsZWN0PFQ+KTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLm9wdGlvbjxTZWxlY3Q8VD4+KFF1ZXJ5T3B0aW9uTmFtZXMuc2VsZWN0LCBvcHRzKTtcbiAgfVxuXG4gIGV4cGFuZChvcHRzOiBFeHBhbmQ8VD4pOiBPRGF0YVF1ZXJ5T3B0aW9uSGFuZGxlcjxUPjtcbiAgZXhwYW5kKCk6IE9EYXRhUXVlcnlPcHRpb25IYW5kbGVyPFQ+O1xuICBleHBhbmQob3B0cz86IEV4cGFuZDxUPik6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5vcHRpb248RXhwYW5kPFQ+PihRdWVyeU9wdGlvbk5hbWVzLmV4cGFuZCwgb3B0cyk7XG4gIH1cblxuICAvKipcbiAgICogQGxpbmsgaHR0cHM6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL29kYXRhL29kYXRhL3Y0LjAxL29kYXRhLXY0LjAxLXBhcnQyLXVybC1jb252ZW50aW9ucy5odG1sI3NlY19TeXN0ZW1RdWVyeU9wdGlvbmNvbXB1dGVcbiAgICovXG4gIGNvbXB1dGUob3B0czogKGU6IHsgZTogRXhwcmVzc2lvbjxUPiB9KSA9PiBFeHByZXNzaW9uPFQ+KTogRXhwcmVzc2lvbjxUPjtcbiAgY29tcHV0ZShvcHRzOiBzdHJpbmcpOiBPRGF0YVF1ZXJ5T3B0aW9uSGFuZGxlcjxUPjtcbiAgY29tcHV0ZSgpOiBPRGF0YVF1ZXJ5T3B0aW9uSGFuZGxlcjxUPjtcbiAgY29tcHV0ZShvcHRzPzogYW55KTogYW55IHtcbiAgICBpZiAoVHlwZXMuaXNGdW5jdGlvbihvcHRzKSkge1xuICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5leHByZXNzaW9uKFxuICAgICAgICBRdWVyeU9wdGlvbk5hbWVzLmNvbXB1dGUsXG4gICAgICAgIG9wdHMoe1xuICAgICAgICAgIGU6ICgpID0+IEV4cHJlc3Npb24uZTxUPigpLFxuICAgICAgICB9KSBhcyBFeHByZXNzaW9uPFQ+XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLm9wdGlvbjxzdHJpbmc+KFF1ZXJ5T3B0aW9uTmFtZXMuY29tcHV0ZSwgb3B0cyk7XG4gIH1cblxuICAvKipcbiAgICogQGxpbmsgaHR0cHM6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL29kYXRhL29kYXRhL3Y0LjAxL29kYXRhLXY0LjAxLXBhcnQyLXVybC1jb252ZW50aW9ucy5odG1sI3NlY19TeXN0ZW1RdWVyeU9wdGlvbmZvcm1hdFxuICAgKi9cbiAgZm9ybWF0KG9wdHM6IHN0cmluZyk6IE9EYXRhUXVlcnlPcHRpb25IYW5kbGVyPFQ+O1xuICBmb3JtYXQoKTogT0RhdGFRdWVyeU9wdGlvbkhhbmRsZXI8VD47XG4gIGZvcm1hdChvcHRzPzogc3RyaW5nKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLm9wdGlvbjxzdHJpbmc+KFF1ZXJ5T3B0aW9uTmFtZXMuZm9ybWF0LCBvcHRzKTtcbiAgfVxuXG4gIHRyYW5zZm9ybShvcHRzOiBUcmFuc2Zvcm08VD4pOiBPRGF0YVF1ZXJ5T3B0aW9uSGFuZGxlcjxUPjtcbiAgdHJhbnNmb3JtKCk6IE9EYXRhUXVlcnlPcHRpb25IYW5kbGVyPFQ+O1xuICB0cmFuc2Zvcm0ob3B0cz86IFRyYW5zZm9ybTxUPik6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5vcHRpb248VHJhbnNmb3JtPFQ+PihRdWVyeU9wdGlvbk5hbWVzLnRyYW5zZm9ybSwgb3B0cyk7XG4gIH1cblxuICBzZWFyY2gob3B0czogc3RyaW5nKTogT0RhdGFRdWVyeU9wdGlvbkhhbmRsZXI8VD47XG4gIHNlYXJjaCgpOiBPRGF0YVF1ZXJ5T3B0aW9uSGFuZGxlcjxUPjtcbiAgc2VhcmNoKG9wdHM/OiBzdHJpbmcpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMub3B0aW9uPHN0cmluZz4oUXVlcnlPcHRpb25OYW1lcy5zZWFyY2gsIG9wdHMpO1xuICB9XG5cbiAgZmlsdGVyKFxuICAgIG9wdHM6IChlOiB7XG4gICAgICBzOiBUO1xuICAgICAgZTogKGNvbm5lY3Rvcj86IENvbm5lY3RvcikgPT4gRXhwcmVzc2lvbjxUPjtcbiAgICAgIG86IE9EYXRhT3BlcmF0b3JzPFQ+O1xuICAgICAgZjogT0RhdGFGdW5jdGlvbnM8VD47XG4gICAgfSkgPT4gRXhwcmVzc2lvbjxUPlxuICApOiBFeHByZXNzaW9uPFQ+O1xuICBmaWx0ZXIob3B0czogRmlsdGVyPFQ+KTogT0RhdGFRdWVyeU9wdGlvbkhhbmRsZXI8VD47XG4gIGZpbHRlcigpOiBPRGF0YVF1ZXJ5T3B0aW9uSGFuZGxlcjxUPjtcbiAgZmlsdGVyKG9wdHM/OiBhbnkpOiBhbnkge1xuICAgIGlmIChUeXBlcy5pc0Z1bmN0aW9uKG9wdHMpKSB7XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zLmV4cHJlc3Npb24oXG4gICAgICAgIFF1ZXJ5T3B0aW9uTmFtZXMuZmlsdGVyLFxuICAgICAgICBvcHRzKHtcbiAgICAgICAgICBzOiBFeHByZXNzaW9uLnM8YW55PigpIGFzIFQsXG4gICAgICAgICAgZTogRXhwcmVzc2lvbi5lLFxuICAgICAgICAgIG86IEV4cHJlc3Npb24ubzxUPigpLFxuICAgICAgICAgIGY6IEV4cHJlc3Npb24uZjxUPigpLFxuICAgICAgICB9KSBhcyBFeHByZXNzaW9uPFQ+XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLm9wdGlvbjxGaWx0ZXI8VD4+KFF1ZXJ5T3B0aW9uTmFtZXMuZmlsdGVyLCBvcHRzKTtcbiAgfVxuXG4gIG9yZGVyQnkoXG4gICAgb3B0czogKGU6IHtcbiAgICAgIGU6ICgpID0+IEV4cHJlc3Npb248VD47XG4gICAgICBub3Q6IChlOiBFeHByZXNzaW9uPFQ+KSA9PiBFeHByZXNzaW9uPFQ+O1xuICAgIH0pID0+IEV4cHJlc3Npb248VD5cbiAgKTogRXhwcmVzc2lvbjxUPjtcbiAgb3JkZXJCeShvcHRzOiBPcmRlckJ5PFQ+KTogT0RhdGFRdWVyeU9wdGlvbkhhbmRsZXI8VD47XG4gIG9yZGVyQnkoKTogT0RhdGFRdWVyeU9wdGlvbkhhbmRsZXI8VD47XG4gIG9yZGVyQnkob3B0cz86IGFueSk6IGFueSB7XG4gICAgaWYgKFR5cGVzLmlzRnVuY3Rpb24ob3B0cykpIHtcbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMuZXhwcmVzc2lvbihcbiAgICAgICAgUXVlcnlPcHRpb25OYW1lcy5vcmRlckJ5LFxuICAgICAgICBvcHRzKHtcbiAgICAgICAgICBlOiAoKSA9PiBFeHByZXNzaW9uLmU8VD4oKSxcbiAgICAgICAgfSkgYXMgRXhwcmVzc2lvbjxUPlxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5vcHRpb248T3JkZXJCeTxUPj4oUXVlcnlPcHRpb25OYW1lcy5vcmRlckJ5LCBvcHRzKTtcbiAgfVxuXG4gIHRvcChvcHRzOiBudW1iZXIpOiBPRGF0YVF1ZXJ5T3B0aW9uSGFuZGxlcjxUPjtcbiAgdG9wKCk6IE9EYXRhUXVlcnlPcHRpb25IYW5kbGVyPFQ+O1xuICB0b3Aob3B0cz86IG51bWJlcik6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5vcHRpb248bnVtYmVyPihRdWVyeU9wdGlvbk5hbWVzLnRvcCwgb3B0cyk7XG4gIH1cblxuICBza2lwKG9wdHM6IG51bWJlcik6IE9EYXRhUXVlcnlPcHRpb25IYW5kbGVyPFQ+O1xuICBza2lwKCk6IE9EYXRhUXVlcnlPcHRpb25IYW5kbGVyPFQ+O1xuICBza2lwKG9wdHM/OiBudW1iZXIpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMub3B0aW9uPG51bWJlcj4oUXVlcnlPcHRpb25OYW1lcy5za2lwLCBvcHRzKTtcbiAgfVxuXG4gIHNraXB0b2tlbihvcHRzOiBzdHJpbmcpOiBPRGF0YVF1ZXJ5T3B0aW9uSGFuZGxlcjxUPjtcbiAgc2tpcHRva2VuKCk6IE9EYXRhUXVlcnlPcHRpb25IYW5kbGVyPFQ+O1xuICBza2lwdG9rZW4ob3B0cz86IHN0cmluZyk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5vcHRpb248c3RyaW5nPihRdWVyeU9wdGlvbk5hbWVzLnNraXB0b2tlbiwgb3B0cyk7XG4gIH1cblxuICBwYWdpbmcoe1xuICAgIHNraXAsXG4gICAgc2tpcHRva2VuLFxuICAgIHRvcCxcbiAgfTogeyBza2lwPzogbnVtYmVyOyBza2lwdG9rZW4/OiBzdHJpbmc7IHRvcD86IG51bWJlciB9ID0ge30pIHtcbiAgICBpZiAoc2tpcHRva2VuICE9PSB1bmRlZmluZWQpIHRoaXMuc2tpcHRva2VuKHNraXB0b2tlbik7XG4gICAgZWxzZSBpZiAoc2tpcCAhPT0gdW5kZWZpbmVkKSB0aGlzLnNraXAoc2tpcCk7XG4gICAgaWYgKHRvcCAhPT0gdW5kZWZpbmVkKSB0aGlzLnRvcCh0b3ApO1xuICB9XG5cbiAgY2xlYXJQYWdpbmcoKSB7XG4gICAgdGhpcy5za2lwKCkuY2xlYXIoKTtcbiAgICB0aGlzLnRvcCgpLmNsZWFyKCk7XG4gICAgdGhpcy5za2lwdG9rZW4oKS5jbGVhcigpO1xuICB9XG5cbiAgYXBwbHkocXVlcnk6IE9EYXRhUXVlcnlBcmd1bWVudHM8VD4pIHtcbiAgICBpZiAocXVlcnkuc2VsZWN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuc2VsZWN0KHF1ZXJ5LnNlbGVjdCk7XG4gICAgfVxuICAgIGlmIChxdWVyeS5leHBhbmQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5leHBhbmQocXVlcnkuZXhwYW5kKTtcbiAgICB9XG4gICAgaWYgKHF1ZXJ5LnRyYW5zZm9ybSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnRyYW5zZm9ybShxdWVyeS50cmFuc2Zvcm0pO1xuICAgIH1cbiAgICBpZiAocXVlcnkuc2VhcmNoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuc2VhcmNoKHF1ZXJ5LnNlYXJjaCk7XG4gICAgfVxuICAgIGlmIChxdWVyeS5maWx0ZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5maWx0ZXIocXVlcnkuZmlsdGVyKTtcbiAgICB9XG4gICAgaWYgKHF1ZXJ5Lm9yZGVyQnkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5vcmRlckJ5KHF1ZXJ5Lm9yZGVyQnkpO1xuICAgIH1cbiAgICB0aGlzLnBhZ2luZyhxdWVyeSk7XG4gIH1cbn1cbiJdfQ==
188
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLW9kYXRhL3NyYy9saWIvcmVzb3VyY2VzL3F1ZXJ5L2hhbmRsZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMvQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM3QyxPQUFPLEVBQUUsS0FBSyxFQUE4QyxNQUFNLFdBQVcsQ0FBQztBQUM5RSxPQUFPLEVBQ0wsaUJBQWlCLEVBRWpCLGdCQUFnQixFQUNoQixpQkFBaUIsRUFFakIsZ0JBQWdCLEdBR2pCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBR3hELE1BQU0sT0FBTyx1QkFBdUI7SUFDbEMsWUFDVSxDQUEwQixFQUMxQixDQUFtQjtRQURuQixNQUFDLEdBQUQsQ0FBQyxDQUF5QjtRQUMxQixNQUFDLEdBQUQsQ0FBQyxDQUFrQjtJQUMxQixDQUFDO0lBRUosSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2hCLENBQUM7SUFFRCxNQUFNO1FBQ0osT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBRUQsS0FBSztRQUNILE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCx5QkFBeUI7SUFDekIsS0FBSyxDQUFDLENBQU87UUFDWCxPQUFPLENBQUMsQ0FBQyxLQUFLLFNBQVMsSUFBSSxDQUFDLElBQUks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cnlPcHRpb25OYW1lcyB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IE9iamVjdHMsIFR5cGVzIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgYWxpYXMsIEV4cGFuZCwgRmlsdGVyLCBPcmRlckJ5LCBTZWxlY3QsIFRyYW5zZm9ybSB9IGZyb20gJy4vYnVpbGRlcic7XG5pbXBvcnQge1xuICBDb21wdXRlRXhwcmVzc2lvbixcbiAgRmlsdGVyQ29ubmVjdG9yLFxuICBGaWx0ZXJFeHByZXNzaW9uLFxuICBPcmRlckJ5RXhwcmVzc2lvbixcbiAgU2VhcmNoQ29ubmVjdG9yLFxuICBTZWFyY2hFeHByZXNzaW9uLFxuICBPRGF0YUZ1bmN0aW9ucyxcbiAgT0RhdGFPcGVyYXRvcnMsXG59IGZyb20gJy4vZXhwcmVzc2lvbnMnO1xuaW1wb3J0IHsgRXhwYW5kRXhwcmVzc2lvbiB9IGZyb20gJy4vZXhwcmVzc2lvbnMvZXhwYW5kJztcbmltcG9ydCB7IFNlbGVjdEV4cHJlc3Npb24gfSBmcm9tICcuL2V4cHJlc3Npb25zL3NlbGVjdCc7XG5pbXBvcnQgdHlwZSB7IE9EYXRhUXVlcnlBcmd1bWVudHMsIE9EYXRhUXVlcnlPcHRpb25zIH0gZnJvbSAnLi9vcHRpb25zJztcblxuZXhwb3J0IGNsYXNzIE9EYXRhUXVlcnlPcHRpb25IYW5kbGVyPFQ+IHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBvOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSxcbiAgICBwcml2YXRlIG46IFF1ZXJ5T3B0aW9uTmFtZXNcbiAgKSB7fVxuXG4gIGdldCBuYW1lKCkge1xuICAgIHJldHVybiB0aGlzLm47XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHRoaXMub1t0aGlzLm5dO1xuICB9XG5cbiAgZW1wdHkoKSB7XG4gICAgcmV0dXJuIFR5cGVzLmlzRW1wdHkodGhpcy5vW3RoaXMubl0pO1xuICB9XG5cbiAgLy8jcmVnaW9uIFByaW1pdGl2ZSBWYWx1ZVxuICB2YWx1ZSh2PzogYW55KSB7XG4gICAgcmV0dXJuICh2ICE9PSB1bmRlZmluZWQgJiYgKHRoaXMub1t0aGlzLm5dID0gdikpIHx8IHRoaXMub1t0aGlzLm5dO1xuICB9XG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiBBcnJheSBWYWx1ZVxuICBwcml2YXRlIGFzc2VydEFycmF5KCk6IGFueVtdIHtcbiAgICBpZiAoIVR5cGVzLmlzQXJyYXkodGhpcy5vW3RoaXMubl0pKVxuICAgICAgdGhpcy5vW3RoaXMubl0gPSB0aGlzLm9bdGhpcy5uXSAhPT0gdW5kZWZpbmVkID8gW3RoaXMub1t0aGlzLm5dXSA6IFtdO1xuICAgIHJldHVybiB0aGlzLm9bdGhpcy5uXTtcbiAgfVxuXG4gIHB1c2godmFsdWU6IGFueSkge1xuICAgIHRoaXMuYXNzZXJ0QXJyYXkoKS5wdXNoKHZhbHVlKTtcbiAgfVxuXG4gIHJlbW92ZSh2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5vW3RoaXMubl0gPSB0aGlzLmFzc2VydEFycmF5KCkuZmlsdGVyKCh2KSA9PiB2ICE9PSB2YWx1ZSk7XG4gICAgLy8gSWYgb25seSBvbmUuLi4gZG93biB0byB2YWx1ZVxuICAgIGlmICh0aGlzLm9bdGhpcy5uXS5sZW5ndGggPT09IDEpIHRoaXMub1t0aGlzLm5dID0gdGhpcy5vW3RoaXMubl1bMF07XG4gIH1cblxuICBhdChpbmRleDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIHRoaXMuYXNzZXJ0QXJyYXkoKVtpbmRleF07XG4gIH1cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIEhhc2hNYXAgVmFsdWVcbiAgcHJpdmF0ZSBhc3NlcnRPYmplY3QoY3JlYXRlOiBib29sZWFuKTogeyBbbmFtZTogc3RyaW5nXTogYW55IH0ge1xuICAgIGlmICghVHlwZXMuaXNBcnJheSh0aGlzLm9bdGhpcy5uXSkgJiYgVHlwZXMuaXNQbGFpbk9iamVjdCh0aGlzLm9bdGhpcy5uXSkpIHtcbiAgICAgIHJldHVybiB0aGlzLm9bdGhpcy5uXTtcbiAgICB9XG4gICAgbGV0IGFyciA9IHRoaXMuYXNzZXJ0QXJyYXkoKTtcbiAgICBsZXQgb2JqID0gYXJyLmZpbmQoKHYpID0+IFR5cGVzLmlzUGxhaW5PYmplY3QodikpO1xuICAgIGlmICghb2JqICYmIGNyZWF0ZSkge1xuICAgICAgb2JqID0ge307XG4gICAgICBhcnIucHVzaChvYmopO1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgc2V0KHBhdGg6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIGxldCBvYmogPSB0aGlzLmFzc2VydE9iamVjdCh0cnVlKTtcbiAgICBPYmplY3RzLnNldChvYmosIHBhdGgsIHZhbHVlKTtcbiAgfVxuXG4gIGdldChwYXRoOiBzdHJpbmcsIGRlZj86IGFueSk6IGFueSB7XG4gICAgbGV0IG9iaiA9IHRoaXMuYXNzZXJ0T2JqZWN0KGZhbHNlKSB8fCB7fTtcbiAgICByZXR1cm4gT2JqZWN0cy5nZXQob2JqLCBwYXRoLCBkZWYpO1xuICB9XG5cbiAgdW5zZXQocGF0aDogc3RyaW5nKSB7XG4gICAgbGV0IG9iaiA9IHRoaXMuYXNzZXJ0T2JqZWN0KHRydWUpO1xuICAgIE9iamVjdHMudW5zZXQob2JqLCBwYXRoKTtcblxuICAgIGlmIChUeXBlcy5pc0FycmF5KHRoaXMub1t0aGlzLm5dKSkge1xuICAgICAgdGhpcy5vW3RoaXMubl0gPSB0aGlzLm9bdGhpcy5uXS5maWx0ZXIoKHY6IGFueSkgPT4gIVR5cGVzLmlzRW1wdHkodikpO1xuICAgICAgaWYgKHRoaXMub1t0aGlzLm5dLmxlbmd0aCA9PT0gMSkgdGhpcy5vW3RoaXMubl0gPSB0aGlzLm9bdGhpcy5uXVswXTtcbiAgICB9XG4gIH1cblxuICBoYXMocGF0aDogc3RyaW5nKSB7XG4gICAgbGV0IG9iaiA9IHRoaXMuYXNzZXJ0T2JqZWN0KGZhbHNlKSB8fCB7fTtcbiAgICByZXR1cm4gT2JqZWN0cy5oYXMob2JqLCBwYXRoKTtcbiAgfVxuXG4gIGFzc2lnbih2YWx1ZXM6IHsgW2F0dHI6IHN0cmluZ106IGFueSB9KSB7XG4gICAgbGV0IG9iaiA9IHRoaXMuYXNzZXJ0T2JqZWN0KHRydWUpO1xuICAgIHJldHVybiBPYmplY3RzLm1lcmdlKG9iaiwgdmFsdWVzKTtcbiAgfVxuICAvLyNlbmRyZWdpb25cblxuICBjbGVhcigpIHtcbiAgICBkZWxldGUgdGhpcy5vW3RoaXMubl07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE9EYXRhUXVlcnlPcHRpb25zSGFuZGxlcjxUPiB7XG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBvcHRpb25zOiBPRGF0YVF1ZXJ5T3B0aW9uczxUPikge31cblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IG9kYXRhIGFsaWFzIHBhcmFtZXRlclxuICAgKiBAbGluayBodHRwczovL2RvY3Mub2FzaXMtb3Blbi5vcmcvb2RhdGEvb2RhdGEvdjQuMDEvb2RhdGEtdjQuMDEtcGFydDItdXJsLWNvbnZlbnRpb25zLmh0bWwjc2VjX1BhcmFtZXRlckFsaWFzZXNcbiAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgYWxpYXNcbiAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIGFsaWFzXG4gICAqIEByZXR1cm5zIFRoZSBhbGlhc1xuICAgKi9cbiAgYWxpYXModmFsdWU6IGFueSwgbmFtZT86IHN0cmluZykge1xuICAgIHJldHVybiBhbGlhcyh2YWx1ZSwgbmFtZSk7XG4gIH1cblxuICBzZWxlY3QoXG4gICAgb3B0czogKGU6IHsgczogVDsgZTogKCkgPT4gU2VsZWN0RXhwcmVzc2lvbjxUPiB9KSA9PiBTZWxlY3RFeHByZXNzaW9uPFQ+XG4gICk6IFNlbGVjdEV4cHJlc3Npb248VD47XG4gIHNlbGVjdChvcHRzOiBTZWxlY3Q8VD4pOiBPRGF0YVF1ZXJ5T3B0aW9uSGFuZGxlcjxUPjtcbiAgc2VsZWN0KCk6IE9EYXRhUXVlcnlPcHRpb25IYW5kbGVyPFQ+O1xuICBzZWxlY3Qob3B0cz86IGFueSk6IGFueSB7XG4gICAgaWYgKFR5cGVzLmlzRnVuY3Rpb24ob3B0cykpIHtcbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMuZXhwcmVzc2lvbihcbiAgICAgICAgUXVlcnlPcHRpb25OYW1lcy5zZWxlY3QsXG4gICAgICAgIFNlbGVjdEV4cHJlc3Npb24uc2VsZWN0KG9wdHMpXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLm9wdGlvbjxTZWxlY3Q8VD4+KFF1ZXJ5T3B0aW9uTmFtZXMuc2VsZWN0LCBvcHRzKTtcbiAgfVxuXG4gIGV4cGFuZChcbiAgICBvcHRzOiAoZTogeyBzOiBUOyBlOiAoKSA9PiBFeHBhbmRFeHByZXNzaW9uPFQ+IH0pID0+IEV4cGFuZEV4cHJlc3Npb248VD5cbiAgKTogRXhwYW5kRXhwcmVzc2lvbjxUPjtcbiAgZXhwYW5kKG9wdHM6IEV4cGFuZDxUPik6IE9EYXRhUXVlcnlPcHRpb25IYW5kbGVyPFQ+O1xuICBleHBhbmQoKTogT0RhdGFRdWVyeU9wdGlvbkhhbmRsZXI8VD47XG4gIGV4cGFuZChvcHRzPzogYW55KTogYW55IHtcbiAgICBpZiAoVHlwZXMuaXNGdW5jdGlvbihvcHRzKSkge1xuICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5leHByZXNzaW9uKFxuICAgICAgICBRdWVyeU9wdGlvbk5hbWVzLmV4cGFuZCxcbiAgICAgICAgRXhwYW5kRXhwcmVzc2lvbi5leHBhbmQob3B0cylcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMub3B0aW9uPEV4cGFuZDxUPj4oUXVlcnlPcHRpb25OYW1lcy5leHBhbmQsIG9wdHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBsaW5rIGh0dHBzOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9vZGF0YS9vZGF0YS92NC4wMS9vZGF0YS12NC4wMS1wYXJ0Mi11cmwtY29udmVudGlvbnMuaHRtbCNzZWNfU3lzdGVtUXVlcnlPcHRpb25jb21wdXRlXG4gICAqL1xuICBjb21wdXRlKFxuICAgIG9wdHM6IChlOiB7XG4gICAgICBzOiBUO1xuICAgICAgZTogKCkgPT4gQ29tcHV0ZUV4cHJlc3Npb248VD47XG4gICAgICBvOiBPRGF0YU9wZXJhdG9yczxUPjtcbiAgICAgIGY6IE9EYXRhRnVuY3Rpb25zPFQ+O1xuICAgIH0pID0+IENvbXB1dGVFeHByZXNzaW9uPFQ+XG4gICk6IENvbXB1dGVFeHByZXNzaW9uPFQ+O1xuICBjb21wdXRlKG9wdHM6IHN0cmluZyk6IE9EYXRhUXVlcnlPcHRpb25IYW5kbGVyPFQ+O1xuICBjb21wdXRlKCk6IE9EYXRhUXVlcnlPcHRpb25IYW5kbGVyPFQ+O1xuICBjb21wdXRlKG9wdHM/OiBhbnkpOiBhbnkge1xuICAgIGlmIChUeXBlcy5pc0Z1bmN0aW9uKG9wdHMpKSB7XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zLmV4cHJlc3Npb24oXG4gICAgICAgIFF1ZXJ5T3B0aW9uTmFtZXMuY29tcHV0ZSxcbiAgICAgICAgQ29tcHV0ZUV4cHJlc3Npb24uY29tcHV0ZShvcHRzKVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5vcHRpb248c3RyaW5nPihRdWVyeU9wdGlvbk5hbWVzLmNvbXB1dGUsIG9wdHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBsaW5rIGh0dHBzOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9vZGF0YS9vZGF0YS92NC4wMS9vZGF0YS12NC4wMS1wYXJ0Mi11cmwtY29udmVudGlvbnMuaHRtbCNzZWNfU3lzdGVtUXVlcnlPcHRpb25mb3JtYXRcbiAgICovXG4gIGZvcm1hdChvcHRzOiBzdHJpbmcpOiBPRGF0YVF1ZXJ5T3B0aW9uSGFuZGxlcjxUPjtcbiAgZm9ybWF0KCk6IE9EYXRhUXVlcnlPcHRpb25IYW5kbGVyPFQ+O1xuICBmb3JtYXQob3B0cz86IHN0cmluZyk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5vcHRpb248c3RyaW5nPihRdWVyeU9wdGlvbk5hbWVzLmZvcm1hdCwgb3B0cyk7XG4gIH1cblxuICB0cmFuc2Zvcm0ob3B0czogVHJhbnNmb3JtPFQ+KTogT0RhdGFRdWVyeU9wdGlvbkhhbmRsZXI8VD47XG4gIHRyYW5zZm9ybSgpOiBPRGF0YVF1ZXJ5T3B0aW9uSGFuZGxlcjxUPjtcbiAgdHJhbnNmb3JtKG9wdHM/OiBUcmFuc2Zvcm08VD4pOiBhbnkge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMub3B0aW9uPFRyYW5zZm9ybTxUPj4oUXVlcnlPcHRpb25OYW1lcy50cmFuc2Zvcm0sIG9wdHMpO1xuICB9XG5cbiAgc2VhcmNoKFxuICAgIG9wdHM6IChlOiB7XG4gICAgICBlOiAoY29ubmVjdG9yOiBTZWFyY2hDb25uZWN0b3IpID0+IFNlYXJjaEV4cHJlc3Npb248VD47XG4gICAgfSkgPT4gU2VhcmNoRXhwcmVzc2lvbjxUPlxuICApOiBTZWFyY2hFeHByZXNzaW9uPFQ+O1xuICBzZWFyY2gob3B0czogc3RyaW5nKTogT0RhdGFRdWVyeU9wdGlvbkhhbmRsZXI8VD47XG4gIHNlYXJjaCgpOiBPRGF0YVF1ZXJ5T3B0aW9uSGFuZGxlcjxUPjtcbiAgc2VhcmNoKG9wdHM/OiBhbnkpOiBhbnkge1xuICAgIGlmIChUeXBlcy5pc0Z1bmN0aW9uKG9wdHMpKSB7XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zLmV4cHJlc3Npb24oXG4gICAgICAgIFF1ZXJ5T3B0aW9uTmFtZXMuc2VhcmNoLFxuICAgICAgICBTZWFyY2hFeHByZXNzaW9uLnNlYXJjaChvcHRzKVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5vcHRpb248c3RyaW5nPihRdWVyeU9wdGlvbk5hbWVzLnNlYXJjaCwgb3B0cyk7XG4gIH1cblxuICBmaWx0ZXIoXG4gICAgb3B0czogKGU6IHtcbiAgICAgIHM6IFQ7XG4gICAgICBlOiAoY29ubmVjdG9yPzogRmlsdGVyQ29ubmVjdG9yKSA9PiBGaWx0ZXJFeHByZXNzaW9uPFQ+O1xuICAgICAgbzogT0RhdGFPcGVyYXRvcnM8VD47XG4gICAgICBmOiBPRGF0YUZ1bmN0aW9uczxUPjtcbiAgICB9KSA9PiBGaWx0ZXJFeHByZXNzaW9uPFQ+XG4gICk6IEZpbHRlckV4cHJlc3Npb248VD47XG4gIGZpbHRlcihvcHRzOiBGaWx0ZXI8VD4pOiBPRGF0YVF1ZXJ5T3B0aW9uSGFuZGxlcjxUPjtcbiAgZmlsdGVyKCk6IE9EYXRhUXVlcnlPcHRpb25IYW5kbGVyPFQ+O1xuICBmaWx0ZXIob3B0cz86IGFueSk6IGFueSB7XG4gICAgaWYgKFR5cGVzLmlzRnVuY3Rpb24ob3B0cykpIHtcbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMuZXhwcmVzc2lvbihcbiAgICAgICAgUXVlcnlPcHRpb25OYW1lcy5maWx0ZXIsXG4gICAgICAgIEZpbHRlckV4cHJlc3Npb24uZmlsdGVyKG9wdHMpXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLm9wdGlvbjxGaWx0ZXI8VD4+KFF1ZXJ5T3B0aW9uTmFtZXMuZmlsdGVyLCBvcHRzKTtcbiAgfVxuXG4gIG9yZGVyQnkoXG4gICAgb3B0czogKGU6IHsgczogVDsgZTogKCkgPT4gT3JkZXJCeUV4cHJlc3Npb248VD4gfSkgPT4gT3JkZXJCeUV4cHJlc3Npb248VD5cbiAgKTogT3JkZXJCeUV4cHJlc3Npb248VD47XG4gIG9yZGVyQnkob3B0czogT3JkZXJCeTxUPik6IE9EYXRhUXVlcnlPcHRpb25IYW5kbGVyPFQ+O1xuICBvcmRlckJ5KCk6IE9EYXRhUXVlcnlPcHRpb25IYW5kbGVyPFQ+O1xuICBvcmRlckJ5KG9wdHM/OiBhbnkpOiBhbnkge1xuICAgIGlmIChUeXBlcy5pc0Z1bmN0aW9uKG9wdHMpKSB7XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zLmV4cHJlc3Npb24oXG4gICAgICAgIFF1ZXJ5T3B0aW9uTmFtZXMub3JkZXJCeSxcbiAgICAgICAgT3JkZXJCeUV4cHJlc3Npb24ub3JkZXJCeShvcHRzKVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5vcHRpb248T3JkZXJCeTxUPj4oUXVlcnlPcHRpb25OYW1lcy5vcmRlckJ5LCBvcHRzKTtcbiAgfVxuXG4gIHRvcChvcHRzOiBudW1iZXIpOiBPRGF0YVF1ZXJ5T3B0aW9uSGFuZGxlcjxUPjtcbiAgdG9wKCk6IE9EYXRhUXVlcnlPcHRpb25IYW5kbGVyPFQ+O1xuICB0b3Aob3B0cz86IG51bWJlcik6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5vcHRpb248bnVtYmVyPihRdWVyeU9wdGlvbk5hbWVzLnRvcCwgb3B0cyk7XG4gIH1cblxuICBza2lwKG9wdHM6IG51bWJlcik6IE9EYXRhUXVlcnlPcHRpb25IYW5kbGVyPFQ+O1xuICBza2lwKCk6IE9EYXRhUXVlcnlPcHRpb25IYW5kbGVyPFQ+O1xuICBza2lwKG9wdHM/OiBudW1iZXIpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMub3B0aW9uPG51bWJlcj4oUXVlcnlPcHRpb25OYW1lcy5za2lwLCBvcHRzKTtcbiAgfVxuXG4gIHNraXB0b2tlbihvcHRzOiBzdHJpbmcpOiBPRGF0YVF1ZXJ5T3B0aW9uSGFuZGxlcjxUPjtcbiAgc2tpcHRva2VuKCk6IE9EYXRhUXVlcnlPcHRpb25IYW5kbGVyPFQ+O1xuICBza2lwdG9rZW4ob3B0cz86IHN0cmluZyk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5vcHRpb248c3RyaW5nPihRdWVyeU9wdGlvbk5hbWVzLnNraXB0b2tlbiwgb3B0cyk7XG4gIH1cblxuICBwYWdpbmcoe1xuICAgIHNraXAsXG4gICAgc2tpcHRva2VuLFxuICAgIHRvcCxcbiAgfTogeyBza2lwPzogbnVtYmVyOyBza2lwdG9rZW4/OiBzdHJpbmc7IHRvcD86IG51bWJlciB9ID0ge30pIHtcbiAgICBpZiAoc2tpcHRva2VuICE9PSB1bmRlZmluZWQpIHRoaXMuc2tpcHRva2VuKHNraXB0b2tlbik7XG4gICAgZWxzZSBpZiAoc2tpcCAhPT0gdW5kZWZpbmVkKSB0aGlzLnNraXAoc2tpcCk7XG4gICAgaWYgKHRvcCAhPT0gdW5kZWZpbmVkKSB0aGlzLnRvcCh0b3ApO1xuICB9XG5cbiAgY2xlYXJQYWdpbmcoKSB7XG4gICAgdGhpcy5za2lwKCkuY2xlYXIoKTtcbiAgICB0aGlzLnRvcCgpLmNsZWFyKCk7XG4gICAgdGhpcy5za2lwdG9rZW4oKS5jbGVhcigpO1xuICB9XG5cbiAgYXBwbHkocXVlcnk6IE9EYXRhUXVlcnlBcmd1bWVudHM8VD4pIHtcbiAgICBpZiAocXVlcnkuc2VsZWN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuc2VsZWN0KHF1ZXJ5LnNlbGVjdCk7XG4gICAgfVxuICAgIGlmIChxdWVyeS5leHBhbmQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5leHBhbmQocXVlcnkuZXhwYW5kKTtcbiAgICB9XG4gICAgaWYgKHF1ZXJ5LnRyYW5zZm9ybSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnRyYW5zZm9ybShxdWVyeS50cmFuc2Zvcm0pO1xuICAgIH1cbiAgICBpZiAocXVlcnkuc2VhcmNoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuc2VhcmNoKHF1ZXJ5LnNlYXJjaCk7XG4gICAgfVxuICAgIGlmIChxdWVyeS5maWx0ZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5maWx0ZXIocXVlcnkuZmlsdGVyKTtcbiAgICB9XG4gICAgaWYgKHF1ZXJ5Lm9yZGVyQnkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5vcmRlckJ5KHF1ZXJ5Lm9yZGVyQnkpO1xuICAgIH1cbiAgICB0aGlzLnBhZ2luZyhxdWVyeSk7XG4gIH1cbn1cbiJdfQ==