angular-odata 0.102.0 → 0.102.5

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 (51) hide show
  1. package/esm2020/lib/api.mjs +83 -63
  2. package/esm2020/lib/cache/cache.mjs +1 -1
  3. package/esm2020/lib/cache/memory.mjs +1 -1
  4. package/esm2020/lib/cache/storage.mjs +1 -1
  5. package/esm2020/lib/models/collection.mjs +3 -3
  6. package/esm2020/lib/models/model.mjs +1 -1
  7. package/esm2020/lib/models/options.mjs +37 -19
  8. package/esm2020/lib/resources/query/expressions/compute.mjs +5 -5
  9. package/esm2020/lib/resources/query/expressions/expand.mjs +6 -6
  10. package/esm2020/lib/resources/query/expressions/filter.mjs +9 -9
  11. package/esm2020/lib/resources/query/expressions/index.mjs +3 -1
  12. package/esm2020/lib/resources/query/expressions/orderby.mjs +5 -5
  13. package/esm2020/lib/resources/query/expressions/search.mjs +3 -3
  14. package/esm2020/lib/resources/query/expressions/select.mjs +7 -7
  15. package/esm2020/lib/resources/query/handlers.mjs +2 -4
  16. package/esm2020/lib/resources/query/options.mjs +2 -3
  17. package/esm2020/lib/resources/request.mjs +22 -16
  18. package/esm2020/lib/resources/resource.mjs +1 -1
  19. package/esm2020/lib/resources/types/navigation-property.mjs +2 -2
  20. package/esm2020/lib/resources/types/property.mjs +4 -4
  21. package/esm2020/lib/schema/enum-type.mjs +9 -25
  22. package/esm2020/lib/schema/parsers/callable.mjs +6 -1
  23. package/esm2020/lib/schema/parsers/enum-type.mjs +23 -3
  24. package/esm2020/lib/schema/parsers/structured-type.mjs +120 -42
  25. package/esm2020/lib/schema/structured-type.mjs +26 -38
  26. package/esm2020/lib/types.mjs +1 -1
  27. package/esm2020/lib/utils/objects.mjs +2 -2
  28. package/esm2020/lib/utils/types.mjs +2 -7
  29. package/fesm2015/angular-odata.mjs +361 -250
  30. package/fesm2015/angular-odata.mjs.map +1 -1
  31. package/fesm2020/angular-odata.mjs +356 -243
  32. package/fesm2020/angular-odata.mjs.map +1 -1
  33. package/lib/api.d.ts +2 -4
  34. package/lib/models/collection.d.ts +2 -1
  35. package/lib/models/options.d.ts +9 -6
  36. package/lib/resources/query/expressions/compute.d.ts +7 -6
  37. package/lib/resources/query/expressions/expand.d.ts +17 -32
  38. package/lib/resources/query/expressions/filter.d.ts +11 -10
  39. package/lib/resources/query/expressions/index.d.ts +2 -0
  40. package/lib/resources/query/expressions/orderby.d.ts +7 -6
  41. package/lib/resources/query/expressions/search.d.ts +5 -4
  42. package/lib/resources/query/expressions/select.d.ts +7 -6
  43. package/lib/resources/query/handlers.d.ts +7 -30
  44. package/lib/schema/enum-type.d.ts +7 -19
  45. package/lib/schema/parsers/callable.d.ts +1 -0
  46. package/lib/schema/parsers/enum-type.d.ts +18 -10
  47. package/lib/schema/parsers/structured-type.d.ts +47 -3
  48. package/lib/schema/structured-type.d.ts +19 -19
  49. package/lib/types.d.ts +5 -5
  50. package/lib/utils/types.d.ts +0 -1
  51. package/package.json +1 -1
@@ -44,7 +44,7 @@ export class ODataApi {
44
44
  this.options = new ODataApiOptions(Object.assign({ version: this.version }, config.options || {}));
45
45
  this.cache = config.cache || new ODataInMemoryCache();
46
46
  this.errorHandler = config.errorHandler;
47
- this.parsers = config.parsers || EDM_PARSERS;
47
+ this.parsers = new Map(Object.entries(config.parsers || EDM_PARSERS));
48
48
  this.schemas = (config.schemas || []).map((schema) => new ODataSchema(schema, this));
49
49
  }
50
50
  configure(settings = {}) {
@@ -156,29 +156,37 @@ export class ODataApi {
156
156
  .pop();
157
157
  }
158
158
  findEnumTypeForType(type) {
159
- if (!this.memo.forType.enum.has(type)) {
160
- this.memo.forType.enum.set(type, this.findSchemaForType(type)?.findEnumTypeForType(type));
159
+ if (this.memo.forType.enum.has(type)) {
160
+ return this.memo.forType.enum.get(type);
161
161
  }
162
- return this.memo.forType.enum.get(type);
162
+ const enumType = this.findSchemaForType(type)?.findEnumTypeForType(type);
163
+ this.memo.forType.enum.set(type, enumType);
164
+ return enumType;
163
165
  }
164
166
  findStructuredTypeForType(type) {
165
- if (!this.memo.forType.structured.has(type)) {
166
- this.memo.forType.structured.set(type, this.findSchemaForType(type)?.findStructuredTypeForType(type));
167
+ if (this.memo.forType.structured.has(type)) {
168
+ return this.memo.forType.structured.get(type);
167
169
  }
168
- return this.memo.forType.structured.get(type);
170
+ const structuredType = this.findSchemaForType(type)?.findStructuredTypeForType(type);
171
+ this.memo.forType.structured.set(type, structuredType);
172
+ return structuredType;
169
173
  }
170
174
  findCallableForType(type, bindingType) {
171
175
  const key = bindingType !== undefined ? `${bindingType}/${type}` : type;
172
- if (!this.memo.forType.callable.has(key)) {
173
- this.memo.forType.callable.set(key, this.findSchemaForType(type)?.findCallableForType(type, bindingType));
176
+ if (this.memo.forType.callable.has(key)) {
177
+ return this.memo.forType.callable.get(key);
174
178
  }
175
- return this.memo.forType.callable.get(key);
179
+ const callable = this.findSchemaForType(type)?.findCallableForType(type, bindingType);
180
+ this.memo.forType.callable.set(key, callable);
181
+ return callable;
176
182
  }
177
183
  findEntitySetForType(type) {
178
- if (!this.memo.forType.entitySet.has(type)) {
179
- this.memo.forType.entitySet.set(type, this.findSchemaForType(type)?.findEntitySetForType(type));
184
+ if (this.memo.forType.entitySet.has(type)) {
185
+ return this.memo.forType.entitySet.get(type);
180
186
  }
181
- return this.memo.forType.entitySet.get(type);
187
+ const entitySet = this.findSchemaForType(type)?.findEntitySetForType(type);
188
+ this.memo.forType.entitySet.set(type, entitySet);
189
+ return entitySet;
182
190
  }
183
191
  findModelForType(type) {
184
192
  return this.findStructuredTypeForType(type)?.model;
@@ -225,49 +233,59 @@ export class ODataApi {
225
233
  return this.findEntitySetForType(type)?.service;
226
234
  }
227
235
  findEntitySetForEntityType(entityType) {
228
- if (!this.memo.forType.entitySet.has(entityType)) {
229
- this.memo.forType.entitySet.set(entityType, this.schemas
230
- .reduce((acc, schema) => [...acc, ...schema.entitySets], [])
231
- .find((e) => e.entityType === entityType));
236
+ if (this.memo.forType.entitySet.has(entityType)) {
237
+ return this.memo.forType.entitySet.get(entityType);
232
238
  }
233
- return this.memo.forType.entitySet.get(entityType);
239
+ const entitySet = this.schemas
240
+ .reduce((acc, schema) => [...acc, ...schema.entitySets], [])
241
+ .find((e) => e.entityType === entityType);
242
+ this.memo.forType.entitySet.set(entityType, entitySet);
243
+ return entitySet;
234
244
  }
235
245
  findServiceForEntityType(entityType) {
236
246
  return this.findEntitySetForEntityType(entityType)?.service;
237
247
  }
238
248
  findEnumTypeByName(name) {
239
- if (!this.memo.byName.enum.has(name)) {
240
- this.memo.byName.enum.set(name, this.schemas
241
- .reduce((acc, schema) => [...acc, ...schema.enums], [])
242
- .find((e) => e.name === name));
249
+ if (this.memo.byName.enum.has(name)) {
250
+ return this.memo.byName.enum.get(name);
243
251
  }
244
- return this.memo.byName.enum.get(name);
252
+ const enumType = this.schemas
253
+ .reduce((acc, schema) => [...acc, ...schema.enums], [])
254
+ .find((e) => e.name === name);
255
+ this.memo.byName.enum.set(name, enumType);
256
+ return enumType;
245
257
  }
246
258
  findStructuredTypeByName(name) {
247
- if (!this.memo.byName.structured.has(name)) {
248
- this.memo.byName.structured.set(name, this.schemas
249
- .reduce((acc, schema) => [...acc, ...schema.entities], [])
250
- .find((e) => e.name === name));
259
+ if (this.memo.byName.structured.has(name)) {
260
+ return this.memo.byName.structured.get(name);
251
261
  }
252
- return this.memo.byName.structured.get(name);
262
+ const structuredType = this.schemas
263
+ .reduce((acc, schema) => [...acc, ...schema.entities], [])
264
+ .find((e) => e.name === name);
265
+ this.memo.byName.structured.set(name, structuredType);
266
+ return structuredType;
253
267
  }
254
268
  findCallableByName(name, bindingType) {
255
269
  const key = bindingType !== undefined ? `${bindingType}/${name}` : name;
256
- if (!this.memo.byName.callable.has(key)) {
257
- this.memo.byName.callable.set(key, this.schemas
258
- .reduce((acc, schema) => [...acc, ...schema.callables], [])
259
- .find((c) => c.name === name &&
260
- (bindingType === undefined || c.binding()?.type === bindingType)));
270
+ if (this.memo.byName.callable.has(key)) {
271
+ return this.memo.byName.callable.get(key);
261
272
  }
262
- return this.memo.byName.callable.get(key);
273
+ const callable = this.schemas
274
+ .reduce((acc, schema) => [...acc, ...schema.callables], [])
275
+ .find((c) => c.name === name &&
276
+ (bindingType === undefined || c.binding()?.type === bindingType));
277
+ this.memo.byName.callable.set(key, callable);
278
+ return callable;
263
279
  }
264
280
  findEntitySetByName(name) {
265
- if (!this.memo.byName.entitySet.has(name)) {
266
- this.memo.byName.entitySet.set(name, this.schemas
267
- .reduce((acc, schema) => [...acc, ...schema.entitySets], [])
268
- .find((e) => e.name === name));
281
+ if (this.memo.byName.entitySet.has(name)) {
282
+ return this.memo.byName.entitySet.get(name);
269
283
  }
270
- return this.memo.byName.entitySet.get(name);
284
+ const schema = this.schemas
285
+ .reduce((acc, schema) => [...acc, ...schema.entitySets], [])
286
+ .find((e) => e.name === name);
287
+ this.memo.byName.entitySet.set(name, schema);
288
+ return schema;
271
289
  }
272
290
  findModelByName(name) {
273
291
  return this.findStructuredTypeByName(name)?.model;
@@ -280,34 +298,36 @@ export class ODataApi {
280
298
  }
281
299
  parserForType(type, bindingType) {
282
300
  const key = bindingType !== undefined ? `${bindingType}/${type}` : type;
283
- if (!this.memo.forType.parser.has(key)) {
284
- if (type in this.parsers) {
285
- // Edm, Base Parsers
286
- this.memo.forType.parser.set(key, this.parsers[type]);
287
- }
288
- else if (!type.startsWith('Edm.')) {
289
- // EnumType, ComplexType and EntityType Parsers
290
- let value = this.findCallableForType(type, bindingType) ||
291
- this.findEnumTypeForType(type) ||
292
- this.findStructuredTypeForType(type);
293
- this.memo.forType.parser.set(key, value?.parser);
294
- }
295
- else {
296
- // None Parser
297
- this.memo.forType.parser.set(key, NONE_PARSER);
298
- }
301
+ if (this.memo.forType.parser.has(key)) {
302
+ return this.memo.forType.parser.get(key);
299
303
  }
300
- return this.memo.forType.parser.get(key);
304
+ // None Parser by default
305
+ let parser = NONE_PARSER;
306
+ if (this.parsers.has(type)) {
307
+ // Edm, Base Parsers
308
+ parser = this.parsers.get(type);
309
+ }
310
+ else if (!type.startsWith('Edm.')) {
311
+ // EnumType, ComplexType and EntityType Parsers
312
+ let value = this.findCallableForType(type, bindingType) ||
313
+ this.findEnumTypeForType(type) ||
314
+ this.findStructuredTypeForType(type);
315
+ parser = value?.parser;
316
+ }
317
+ // Set Parser for next time
318
+ this.memo.forType.parser.set(key, parser);
319
+ return parser;
301
320
  }
302
321
  findOptionsForType(type) {
303
322
  // Strucutred Options
304
- if (!this.memo.forType.options.has(type)) {
305
- let st = this.findStructuredTypeForType(type);
306
- this.memo.forType.options.set(type, st !== undefined && st.model !== undefined && st.model?.meta !== null
307
- ? st.model.meta
308
- : undefined);
323
+ if (this.memo.forType.options.has(type)) {
324
+ return this.memo.forType.options.get(type);
309
325
  }
310
- return this.memo.forType.options.get(type);
326
+ const st = this.findStructuredTypeForType(type);
327
+ const options = st?.model?.meta;
328
+ // Set Options for next time
329
+ this.memo.forType.options.set(type, options);
330
+ return options;
311
331
  }
312
332
  }
313
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1vZGF0YS9zcmMvbGliL2FwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWEsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDaEUsT0FBTyxFQUFFLEtBQUssRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUN6QyxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pELE9BQU8sRUFBYyxrQkFBa0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFxQixNQUFNLGdCQUFnQixDQUFDO0FBQ2hGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDNUMsT0FBTyxFQUNMLG1CQUFtQixFQUNuQixrQkFBa0IsRUFDbEIsbUJBQW1CLEVBQ25CLHNCQUFzQixFQUN0QixxQkFBcUIsRUFDckIscUJBQXFCLEVBQ3JCLCtCQUErQixFQUMvQixpQkFBaUIsRUFDakIsaUJBQWlCLEVBRWpCLGFBQWEsRUFFYixzQkFBc0IsR0FDdkIsTUFBTSxtQkFBbUIsQ0FBQztBQUMzQixPQUFPLEVBQ0wsV0FBVyxFQUlYLFdBQVcsR0FFWixNQUFNLFVBQVUsQ0FBQztBQUVsQixPQUFPLEVBR0wsV0FBVyxFQUVYLGdCQUFnQixHQUNqQixNQUFNLFNBQVMsQ0FBQztBQUVqQjs7R0FFRztBQUNILE1BQU0sT0FBTyxRQUFRO0lBbUJuQixZQUFZLE1BQWlCO1FBK0o3Qix1QkFBdUI7UUFDdkIsVUFBVTtRQUNGLFNBQUksR0FlUjtZQUNGLE9BQU8sRUFBRTtnQkFDUCxJQUFJLEVBQUUsSUFBSSxHQUFHLEVBQTBDO2dCQUN2RCxVQUFVLEVBQUUsSUFBSSxHQUFHLEVBQWdEO2dCQUNu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QUcsQ0FBQyxJQUFJLENBRTVCLENBQUM7SUFDaEIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cEV2ZW50LCBIdHRwRXZlbnRUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgTkVWRVIsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE9EYXRhQ2FjaGUsIE9EYXRhSW5NZW1vcnlDYWNoZSB9IGZyb20gJy4vY2FjaGUvaW5kZXgnO1xuaW1wb3J0IHsgREVGQVVMVF9WRVJTSU9OIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgT0RhdGFDb2xsZWN0aW9uLCBPRGF0YU1vZGVsLCBPRGF0YU1vZGVsT3B0aW9ucyB9IGZyb20gJy4vbW9kZWxzL2luZGV4JztcbmltcG9ydCB7IE9EYXRhQXBpT3B0aW9ucyB9IGZyb20gJy4vb3B0aW9ucyc7XG5pbXBvcnQge1xuICBPRGF0YUFjdGlvblJlc291cmNlLFxuICBPRGF0YUJhdGNoUmVzb3VyY2UsXG4gIE9EYXRhRW50aXR5UmVzb3VyY2UsXG4gIE9EYXRhRW50aXR5U2V0UmVzb3VyY2UsXG4gIE9EYXRhRnVuY3Rpb25SZXNvdXJjZSxcbiAgT0RhdGFNZXRhZGF0YVJlc291cmNlLFxuICBPRGF0YU5hdmlnYXRpb25Qcm9wZXJ0eVJlc291cmNlLFxuICBPRGF0YVBhdGhTZWdtZW50cyxcbiAgT0RhdGFRdWVyeU9wdGlvbnMsXG4gIE9EYXRhUmVxdWVzdCxcbiAgT0RhdGFSZXNwb25zZSxcbiAgT0RhdGFTZWdtZW50LFxuICBPRGF0YVNpbmdsZXRvblJlc291cmNlLFxufSBmcm9tICcuL3Jlc291cmNlcy9pbmRleCc7XG5pbXBvcnQge1xuICBFRE1fUEFSU0VSUyxcbiAgT0RhdGFDYWxsYWJsZSxcbiAgT0RhdGFFbnRpdHlTZXQsXG4gIE9EYXRhRW51bVR5cGUsXG4gIE9EYXRhU2NoZW1hLFxuICBPRGF0YVN0cnVjdHVyZWRUeXBlLFxufSBmcm9tICcuL3NjaGVtYSc7XG5pbXBvcnQgeyBPRGF0YUVudGl0eVNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2VudGl0eSc7XG5pbXBvcnQge1xuICBBcGlDb25maWcsXG4gIEFwaU9wdGlvbnMsXG4gIE5PTkVfUEFSU0VSLFxuICBQYXJzZXIsXG4gIFBhdGhTZWdtZW50TmFtZXMsXG59IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIEFwaSBhYnN0cmFjdGlvbiBmb3IgY29uc3VtaW5nIE9EYXRhIHNlcnZpY2VzLlxuICovXG5leHBvcnQgY2xhc3MgT0RhdGFBcGkge1xuICByZXF1ZXN0ZXI/OiAocmVxdWVzdDogT0RhdGFSZXF1ZXN0PGFueT4pID0+IE9ic2VydmFibGU8YW55PjtcbiAgc2VydmljZVJvb3RVcmw6IHN0cmluZztcbiAgbWV0YWRhdGFVcmw6IHN0cmluZztcbiAgbmFtZT86IHN0cmluZztcbiAgdmVyc2lvbjogc3RyaW5nO1xuICBkZWZhdWx0OiBib29sZWFuO1xuICBjcmVhdGlvbjogRGF0ZTtcbiAgLy8gT3B0aW9uc1xuICBvcHRpb25zOiBPRGF0YUFwaU9wdGlvbnM7XG4gIC8vIENhY2hlXG4gIGNhY2hlITogT0RhdGFDYWNoZTtcbiAgLy8gRXJyb3IgSGFuZGxlclxuICBlcnJvckhhbmRsZXI/OiAoZXJyb3I6IGFueSwgY2F1Z2h0OiBPYnNlcnZhYmxlPGFueT4pID0+IE9ic2VydmFibGU8bmV2ZXI+O1xuICAvLyBCYXNlIFBhcnNlcnNcbiAgcGFyc2VyczogeyBbdHlwZTogc3RyaW5nXTogUGFyc2VyPGFueT4gfTtcbiAgLy8gU2NoZW1hc1xuICBzY2hlbWFzOiBPRGF0YVNjaGVtYVtdO1xuXG4gIGNvbnN0cnVjdG9yKGNvbmZpZzogQXBpQ29uZmlnKSB7XG4gICAgdGhpcy5zZXJ2aWNlUm9vdFVybCA9IGNvbmZpZy5zZXJ2aWNlUm9vdFVybDtcbiAgICBpZiAodGhpcy5zZXJ2aWNlUm9vdFVybC5pbmRleE9mKCc/JykgIT0gLTEpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiVGhlICdzZXJ2aWNlUm9vdFVybCcgc2hvdWxkIG5vdCBjb250YWluIHF1ZXJ5IHN0cmluZy4gUGxlYXNlIHVzZSAncGFyYW1zJyB0byBhZGQgZXh0cmEgcGFyYW1ldGVyc1wiXG4gICAgICApO1xuICAgIGlmICghdGhpcy5zZXJ2aWNlUm9vdFVybC5lbmRzV2l0aCgnLycpKSB0aGlzLnNlcnZpY2VSb290VXJsICs9ICcvJztcbiAgICB0aGlzLm1ldGFkYXRhVXJsID0gYCR7dGhpcy5zZXJ2aWNlUm9vdFVybH0kbWV0YWRhdGFgO1xuICAgIHRoaXMubmFtZSA9IGNvbmZpZy5uYW1lO1xuICAgIHRoaXMudmVyc2lvbiA9IGNvbmZpZy52ZXJzaW9uIHx8IERFRkFVTFRfVkVSU0lPTjtcbiAgICB0aGlzLmRlZmF1bHQgPSBjb25maWcuZGVmYXVsdCB8fCBmYWxzZTtcbiAgICB0aGlzLmNyZWF0aW9uID0gY29uZmlnLmNyZWF0aW9uIHx8IG5ldyBEYXRlKCk7XG4gICAgdGhpcy5vcHRpb25zID0gbmV3IE9EYXRhQXBpT3B0aW9ucyhcbiAgICAgIE9iamVjdC5hc3NpZ24oPEFwaU9wdGlvbnM+eyB2ZXJzaW9uOiB0aGlzLnZlcnNpb24gfSwgY29uZmlnLm9wdGlvbnMgfHwge30pXG4gICAgKTtcblxuICAgIHRoaXMuY2FjaGUgPSAoY29uZmlnLmNhY2hlIGFzIE9EYXRhQ2FjaGUpIHx8IG5ldyBPRGF0YUluTWVtb3J5Q2FjaGUoKTtcbiAgICB0aGlzLmVycm9ySGFuZGxlciA9IGNvbmZpZy5lcnJvckhhbmRsZXI7XG5cbiAgICB0aGlzLnBhcnNlcnMgPSBjb25maWcucGFyc2VycyB8fCBFRE1fUEFSU0VSUztcblxuICAgIHRoaXMuc2NoZW1hcyA9IChjb25maWcuc2NoZW1hcyB8fCBbXSkubWFwKFxuICAgICAgKHNjaGVtYSkgPT4gbmV3IE9EYXRhU2NoZW1hKHNjaGVtYSwgdGhpcylcbiAgICApO1xuICB9XG5cbiAgY29uZmlndXJlKFxuICAgIHNldHRpbmdzOiB7XG4gICAgICByZXF1ZXN0ZXI/OiAocmVxdWVzdDogT0RhdGFSZXF1ZXN0PGFueT4pID0+IE9ic2VydmFibGU8YW55PjtcbiAgICB9ID0ge31cbiAgKSB7XG4gICAgdGhpcy5yZXF1ZXN0ZXIgPSBzZXR0aW5ncy5yZXF1ZXN0ZXI7XG4gICAgdGhpcy5zY2hlbWFzLmZvckVhY2goKHNjaGVtYSkgPT4ge1xuICAgICAgc2NoZW1hLmNvbmZpZ3VyZSh7XG4gICAgICAgIHBhcnNlckZvclR5cGU6ICh0eXBlOiBzdHJpbmcpID0+IHRoaXMucGFyc2VyRm9yVHlwZSh0eXBlKSxcbiAgICAgICAgZmluZE9wdGlvbnNGb3JUeXBlOiAodHlwZTogc3RyaW5nKSA9PiB0aGlzLmZpbmRPcHRpb25zRm9yVHlwZSh0eXBlKSxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgZnJvbUpTT048UCwgUj4oanNvbjoge1xuICAgIHNlZ21lbnRzOiBPRGF0YVNlZ21lbnRbXTtcbiAgICBvcHRpb25zOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfTtcbiAgfSk6IE9EYXRhQWN0aW9uUmVzb3VyY2U8UCwgUj4gfCBPRGF0YUZ1bmN0aW9uUmVzb3VyY2U8UCwgUj47XG4gIGZyb21KU09OPEU+KGpzb246IHtcbiAgICBzZWdtZW50czogT0RhdGFTZWdtZW50W107XG4gICAgb3B0aW9uczogeyBbbmFtZTogc3RyaW5nXTogYW55IH07XG4gIH0pOlxuICAgIHwgT0RhdGFFbnRpdHlSZXNvdXJjZTxFPlxuICAgIHwgT0RhdGFFbnRpdHlTZXRSZXNvdXJjZTxFPlxuICAgIHwgT0RhdGFOYXZpZ2F0aW9uUHJvcGVydHlSZXNvdXJjZTxFPlxuICAgIHwgT0RhdGFTaW5nbGV0b25SZXNvdXJjZTxFPjtcbiAgZnJvbUpTT04oanNvbjoge1xuICAgIHNlZ21lbnRzOiBPRGF0YVNlZ21lbnRbXTtcbiAgICBvcHRpb25zOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfTtcbiAgfSkge1xuICAgIGNvbnN0IHNlZ21lbnRzID0gbmV3IE9EYXRhUGF0aFNlZ21lbnRzKGpzb24uc2VnbWVudHMpO1xuICAgIGNvbnN0IHF1ZXJ5ID0gbmV3IE9EYXRhUXVlcnlPcHRpb25zKGpzb24ub3B0aW9ucyk7XG4gICAgc3dpdGNoIChzZWdtZW50cy5sYXN0KCk/Lm5hbWUgYXMgUGF0aFNlZ21lbnROYW1lcykge1xuICAgICAgY2FzZSBQYXRoU2VnbWVudE5hbWVzLmVudGl0eVNldDpcbiAgICAgICAgaWYgKHNlZ21lbnRzLmxhc3QoKT8uaGFzS2V5KCkpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IE9EYXRhRW50aXR5UmVzb3VyY2UodGhpcywgeyBzZWdtZW50cywgcXVlcnkgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBPRGF0YUVudGl0eVNldFJlc291cmNlKHRoaXMsIHsgc2VnbWVudHMsIHF1ZXJ5IH0pO1xuICAgICAgICB9XG4gICAgICBjYXNlIFBhdGhTZWdtZW50TmFtZXMubmF2aWdhdGlvblByb3BlcnR5OlxuICAgICAgICByZXR1cm4gbmV3IE9EYXRhTmF2aWdhdGlvblByb3BlcnR5UmVzb3VyY2UodGhpcywgeyBzZWdtZW50cywgcXVlcnkgfSk7XG4gICAgICBjYXNlIFBhdGhTZWdtZW50TmFtZXMuc2luZ2xldG9uOlxuICAgICAgICByZXR1cm4gbmV3IE9EYXRhU2luZ2xldG9uUmVzb3VyY2UodGhpcywgeyBzZWdtZW50cywgcXVlcnkgfSk7XG4gICAgICBjYXNlIFBhdGhTZWdtZW50TmFtZXMuYWN0aW9uOlxuICAgICAgICByZXR1cm4gbmV3IE9EYXRhQWN0aW9uUmVzb3VyY2UodGhpcywgeyBzZWdtZW50cywgcXVlcnkgfSk7XG4gICAgICBjYXNlIFBhdGhTZWdtZW50TmFtZXMuZnVuY3Rpb246XG4gICAgICAgIHJldHVybiBuZXcgT0RhdGFGdW5jdGlvblJlc291cmNlKHRoaXMsIHsgc2VnbWVudHMsIHF1ZXJ5IH0pO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFJlc291cmNlIGZvciBqc29uJyk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgYSBtZXRhZGF0YSByZXNvdXJjZS5cbiAgICogQHJldHVybnMgT0RhdGFNZXRhZGF0YVJlc291cmNlXG4gICAqL1xuICBtZXRhZGF0YSgpOiBPRGF0YU1ldGFkYXRhUmVzb3VyY2Uge1xuICAgIHJldHVybiBPRGF0YU1ldGFkYXRhUmVzb3VyY2UuZmFjdG9yeSh0aGlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBhIGJhdGNoIHJlc291cmNlLlxuICAgKiBAcmV0dXJucyBPRGF0YUJhdGNoUmVzb3VyY2VcbiAgICovXG4gIGJhdGNoKCk6IE9EYXRhQmF0Y2hSZXNvdXJjZSB7XG4gICAgcmV0dXJuIE9EYXRhQmF0Y2hSZXNvdXJjZS5mYWN0b3J5KHRoaXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGEgc2luZ2xldG9uIHJlc291cmNlLlxuICAgKiBAcGFyYW0gcGF0aCBOYW1lIG9mIHRoZSBzaW5nbGV0b25cbiAgICogQHJldHVybnNcbiAgICovXG4gIHNpbmdsZXRvbjxUPihwYXRoOiBzdHJpbmcpIHtcbiAgICBjb25zdCBlbnRpdHlTZXQgPSB0aGlzLmZpbmRFbnRpdHlTZXRCeU5hbWUocGF0aCk7XG4gICAgY29uc3Qgc2NoZW1hID1cbiAgICAgIGVudGl0eVNldCAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gdGhpcy5maW5kU3RydWN0dXJlZFR5cGVGb3JUeXBlPFQ+KGVudGl0eVNldC5lbnRpdHlUeXBlKVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gT0RhdGFTaW5nbGV0b25SZXNvdXJjZS5mYWN0b3J5PFQ+KHRoaXMsIHsgcGF0aCwgc2NoZW1hIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGFuIGVudGl0eSBzZXQgcmVzb3VyY2UuXG4gICAqIEBwYXJhbSBwYXRoIE5hbWUgb2YgdGhlIGVudGl0eSBzZXRcbiAgICogQHJldHVybnNcbiAgICovXG4gIGVudGl0eVNldDxUPihwYXRoOiBzdHJpbmcpOiBPRGF0YUVudGl0eVNldFJlc291cmNlPFQ+IHtcbiAgICBjb25zdCBlbnRpdHlTZXQgPSB0aGlzLmZpbmRFbnRpdHlTZXRCeU5hbWUocGF0aCk7XG4gICAgY29uc3Qgc2NoZW1hID1cbiAgICAgIGVudGl0eVNldCAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gdGhpcy5maW5kU3RydWN0dXJlZFR5cGVGb3JUeXBlPFQ+KGVudGl0eVNldC5lbnRpdHlUeXBlKVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gT0RhdGFFbnRpdHlTZXRSZXNvdXJjZS5mYWN0b3J5PFQ+KHRoaXMsIHsgcGF0aCwgc2NoZW1hIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFVuYm91bmQgQWN0aW9uXG4gICAqIEBwYXJhbSAge3N0cmluZ30gcGF0aD9cbiAgICogQHJldHVybnMgT0RhdGFBY3Rpb25SZXNvdXJjZVxuICAgKi9cbiAgYWN0aW9uPFAsIFI+KHBhdGg6IHN0cmluZyk6IE9EYXRhQWN0aW9uUmVzb3VyY2U8UCwgUj4ge1xuICAgIGNvbnN0IHNjaGVtYSA9IHRoaXMuZmluZENhbGxhYmxlRm9yVHlwZTxSPihwYXRoKTtcbiAgICByZXR1cm4gT0RhdGFBY3Rpb25SZXNvdXJjZS5mYWN0b3J5PFAsIFI+KHRoaXMsIHsgcGF0aCwgc2NoZW1hIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFVuYm91bmQgRnVuY3Rpb25cbiAgICogQHBhcmFtICB7c3RyaW5nfSBwYXRoP1xuICAgKiBAcmV0dXJucyBPRGF0YUZ1bmN0aW9uUmVzb3VyY2VcbiAgICovXG4gIGZ1bmN0aW9uPFAsIFI+KHBhdGg6IHN0cmluZyk6IE9EYXRhRnVuY3Rpb25SZXNvdXJjZTxQLCBSPiB7XG4gICAgY29uc3Qgc2NoZW1hID0gdGhpcy5maW5kQ2FsbGFibGVGb3JUeXBlPFI+KHBhdGgpO1xuICAgIHJldHVybiBPRGF0YUZ1bmN0aW9uUmVzb3VyY2UuZmFjdG9yeTxQLCBSPih0aGlzLCB7IHBhdGgsIHNjaGVtYSB9KTtcbiAgfVxuXG4gIHJlcXVlc3QocmVxOiBPRGF0YVJlcXVlc3Q8YW55Pik6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHJlcyQgPSB0aGlzLnJlcXVlc3RlciAhPT0gdW5kZWZpbmVkID8gdGhpcy5yZXF1ZXN0ZXIocmVxKSA6IE5FVkVSO1xuICAgIHJlcyQgPSByZXMkLnBpcGUoXG4gICAgICBtYXAoKHJlczogSHR0cEV2ZW50PGFueT4pID0+XG4gICAgICAgIHJlcy50eXBlID09PSBIdHRwRXZlbnRUeXBlLlJlc3BvbnNlXG4gICAgICAgICAgPyBPRGF0YVJlc3BvbnNlLmZyb21IdHRwUmVzcG9uc2U8YW55PihyZXEsIHJlcylcbiAgICAgICAgICA6IHJlc1xuICAgICAgKVxuICAgICk7XG5cbiAgICBpZiAodGhpcy5lcnJvckhhbmRsZXIgIT09IHVuZGVmaW5lZClcbiAgICAgIHJlcyQgPSByZXMkLnBpcGUoY2F0Y2hFcnJvcih0aGlzLmVycm9ySGFuZGxlcikpO1xuXG4gICAgcmV0dXJuIHJlcS5vYnNlcnZlID09PSAncmVzcG9uc2UnXG4gICAgICA/IHRoaXMuY2FjaGUuaGFuZGxlUmVxdWVzdChyZXEsIHJlcyQpXG4gICAgICA6IHJlcyQ7XG4gIH1cblxuICAvLyMgcmVnaW9uIEZpbmQgYnkgVHlwZVxuICAvLyBNZW1vaXplXG4gIHByaXZhdGUgbWVtbzoge1xuICAgIGZvclR5cGU6IHtcbiAgICAgIGVudW06IE1hcDxzdHJpbmcsIE9EYXRhRW51bVR5cGU8YW55PiB8IHVuZGVmaW5lZD47XG4gICAgICBzdHJ1Y3R1cmVkOiBNYXA8c3RyaW5nLCBPRGF0YVN0cnVjdHVyZWRUeXBlPGFueT4gfCB1bmRlZmluZWQ+O1xuICAgICAgY2FsbGFibGU6IE1hcDxzdHJpbmcsIE9EYXRhQ2FsbGFibGU8YW55PiB8IHVuZGVmaW5lZD47XG4gICAgICBlbnRpdHlTZXQ6IE1hcDxzdHJpbmcsIE9EYXRhRW50aXR5U2V0IHwgdW5kZWZpbmVkPjtcbiAgICAgIHBhcnNlcjogTWFwPHN0cmluZywgUGFyc2VyPGFueT4+O1xuICAgICAgb3B0aW9uczogTWFwPHN0cmluZywgT0RhdGFNb2RlbE9wdGlvbnM8YW55PiB8IHVuZGVmaW5lZD47XG4gICAgfTtcbiAgICBieU5hbWU6IHtcbiAgICAgIGVudW06IE1hcDxzdHJpbmcsIE9EYXRhRW51bVR5cGU8YW55PiB8IHVuZGVmaW5lZD47XG4gICAgICBzdHJ1Y3R1cmVkOiBNYXA8c3RyaW5nLCBPRGF0YVN0cnVjdHVyZWRUeXBlPGFueT4gfCB1bmRlZmluZWQ+O1xuICAgICAgY2FsbGFibGU6IE1hcDxzdHJpbmcsIE9EYXRhQ2FsbGFibGU8YW55PiB8IHVuZGVmaW5lZD47XG4gICAgICBlbnRpdHlTZXQ6IE1hcDxzdHJpbmcsIE9EYXRhRW50aXR5U2V0IHwgdW5kZWZpbmVkPjtcbiAgICB9O1xuICB9ID0ge1xuICAgIGZvclR5cGU6IHtcbiAgICAgIGVudW06IG5ldyBNYXA8c3RyaW5nLCBPRGF0YUVudW1UeXBlPGFueT4gfCB1bmRlZmluZWQ+KCksXG4gICAgICBzdHJ1Y3R1cmVkOiBuZXcgTWFwPHN0cmluZywgT0RhdGFTdHJ1Y3R1cmVkVHlwZTxhbnk+IHwgdW5kZWZpbmVkPigpLFxuICAgICAgY2FsbGFibGU6IG5ldyBNYXA8c3RyaW5nLCBPRGF0YUNhbGxhYmxlPGFueT4gfCB1bmRlZmluZWQ+KCksXG4gICAgICBlbnRpdHlTZXQ6IG5ldyBNYXA8c3RyaW5nLCBPRGF0YUVudGl0eVNldCB8IHVuZGVmaW5lZD4oKSxcbiAgICAgIHBhcnNlcjogbmV3IE1hcDxzdHJpbmcsIFBhcnNlcjxhbnk+PigpLFxuICAgICAgb3B0aW9uczogbmV3IE1hcDxzdHJpbmcsIE9EYXRhTW9kZWxPcHRpb25zPGFueT4gfCB1bmRlZmluZWQ+KCksXG4gICAgfSxcbiAgICBieU5hbWU6IHtcbiAgICAgIGVudW06IG5ldyBNYXA8c3RyaW5nLCBPRGF0YUVudW1UeXBlPGFueT4gfCB1bmRlZmluZWQ+KCksXG4gICAgICBzdHJ1Y3R1cmVkOiBuZXcgTWFwPHN0cmluZywgT0RhdGFTdHJ1Y3R1cmVkVHlwZTxhbnk+IHwgdW5kZWZpbmVkPigpLFxuICAgICAgY2FsbGFibGU6IG5ldyBNYXA8c3RyaW5nLCBPRGF0YUNhbGxhYmxlPGFueT4gfCB1bmRlZmluZWQ+KCksXG4gICAgICBlbnRpdHlTZXQ6IG5ldyBNYXA8c3RyaW5nLCBPRGF0YUVudGl0eVNldCB8IHVuZGVmaW5lZD4oKSxcbiAgICB9LFxuICB9O1xuXG4gIHByaXZhdGUgZmluZFNjaGVtYUZvclR5cGUodHlwZTogc3RyaW5nKSB7XG4gICAgY29uc3Qgc2NoZW1hcyA9IHRoaXMuc2NoZW1hcy5maWx0ZXIoKHMpID0+IHMuaXNOYW1lc3BhY2VPZih0eXBlKSk7XG4gICAgaWYgKHNjaGVtYXMubGVuZ3RoID09PSAwKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGlmIChzY2hlbWFzLmxlbmd0aCA9PT0gMSkgcmV0dXJuIHNjaGVtYXNbMF07XG4gICAgcmV0dXJuIHNjaGVtYXNcbiAgICAgIC5zb3J0KChzMSwgczIpID0+IHMxLm5hbWVzcGFjZS5sZW5ndGggLSBzMi5uYW1lc3BhY2UubGVuZ3RoKVxuICAgICAgLnBvcCgpO1xuICB9XG5cbiAgcHVibGljIGZpbmRFbnVtVHlwZUZvclR5cGU8VD4odHlwZTogc3RyaW5nKSB7XG4gICAgaWYgKCF0aGlzLm1lbW8uZm9yVHlwZS5lbnVtLmhhcyh0eXBlKSkge1xuICAgICAgdGhpcy5tZW1vLmZvclR5cGUuZW51bS5zZXQoXG4gICAgICAgIHR5cGUsXG4gICAgICAgIHRoaXMuZmluZFNjaGVtYUZvclR5cGUodHlwZSk/LmZpbmRFbnVtVHlwZUZvclR5cGU8VD4odHlwZSlcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm1lbW8uZm9yVHlwZS5lbnVtLmdldCh0eXBlKSBhcyBPRGF0YUVudW1UeXBlPFQ+IHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIGZpbmRTdHJ1Y3R1cmVkVHlwZUZvclR5cGU8VD4odHlwZTogc3RyaW5nKSB7XG4gICAgaWYgKCF0aGlzLm1lbW8uZm9yVHlwZS5zdHJ1Y3R1cmVkLmhhcyh0eXBlKSkge1xuICAgICAgdGhpcy5tZW1vLmZvclR5cGUuc3RydWN0dXJlZC5zZXQoXG4gICAgICAgIHR5cGUsXG4gICAgICAgIHRoaXMuZmluZFNjaGVtYUZvclR5cGUodHlwZSk/LmZpbmRTdHJ1Y3R1cmVkVHlwZUZvclR5cGU8VD4odHlwZSlcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm1lbW8uZm9yVHlwZS5zdHJ1Y3R1cmVkLmdldCh0eXBlKSBhc1xuICAgICAgfCBPRGF0YVN0cnVjdHVyZWRUeXBlPFQ+XG4gICAgICB8IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBmaW5kQ2FsbGFibGVGb3JUeXBlPFQ+KHR5cGU6IHN0cmluZywgYmluZGluZ1R5cGU/OiBzdHJpbmcpIHtcbiAgICBjb25zdCBrZXkgPSBiaW5kaW5nVHlwZSAhPT0gdW5kZWZpbmVkID8gYCR7YmluZGluZ1R5cGV9LyR7dHlwZX1gIDogdHlwZTtcbiAgICBpZiAoIXRoaXMubWVtby5mb3JUeXBlLmNhbGxhYmxlLmhhcyhrZXkpKSB7XG4gICAgICB0aGlzLm1lbW8uZm9yVHlwZS5jYWxsYWJsZS5zZXQoXG4gICAgICAgIGtleSxcbiAgICAgICAgdGhpcy5maW5kU2NoZW1hRm9yVHlwZSh0eXBlKT8uZmluZENhbGxhYmxlRm9yVHlwZTxUPih0eXBlLCBiaW5kaW5nVHlwZSlcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm1lbW8uZm9yVHlwZS5jYWxsYWJsZS5nZXQoa2V5KSBhcyBPRGF0YUNhbGxhYmxlPFQ+IHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIGZpbmRFbnRpdHlTZXRGb3JUeXBlKHR5cGU6IHN0cmluZykge1xuICAgIGlmICghdGhpcy5tZW1vLmZvclR5cGUuZW50aXR5U2V0Lmhhcyh0eXBlKSkge1xuICAgICAgdGhpcy5tZW1vLmZvclR5cGUuZW50aXR5U2V0LnNldChcbiAgICAgICAgdHlwZSxcbiAgICAgICAgdGhpcy5maW5kU2NoZW1hRm9yVHlwZSh0eXBlKT8uZmluZEVudGl0eVNldEZvclR5cGUodHlwZSlcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm1lbW8uZm9yVHlwZS5lbnRpdHlTZXQuZ2V0KHR5cGUpIGFzIE9EYXRhRW50aXR5U2V0IHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIGZpbmRNb2RlbEZvclR5cGUodHlwZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuZmluZFN0cnVjdHVyZWRUeXBlRm9yVHlwZTxhbnk+KHR5cGUpPy5tb2RlbDtcbiAgfVxuXG4gIHB1YmxpYyBtb2RlbEZvclR5cGUodHlwZTogc3RyaW5nKSB7XG4gICAgbGV0IE1vZGVsID0gdGhpcy5maW5kTW9kZWxGb3JUeXBlKHR5cGUpO1xuICAgIGlmIChNb2RlbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBCdWlsZCBBZC1ob2MgbW9kZWxcbiAgICAgIGxldCBzY2hlbWEgPSB0aGlzLmZpbmRTdHJ1Y3R1cmVkVHlwZUZvclR5cGU8YW55Pih0eXBlKTtcbiAgICAgIGlmIChzY2hlbWEgPT09IHVuZGVmaW5lZCkgdGhyb3cgRXJyb3IoYE5vIHNjaGVtYSBmb3IgJHt0eXBlfWApO1xuICAgICAgTW9kZWwgPSBjbGFzcyBleHRlbmRzIE9EYXRhTW9kZWw8YW55PiB7fSBhcyB0eXBlb2YgT0RhdGFNb2RlbDtcbiAgICAgIC8vIEJ1aWxkIE1ldGFcbiAgICAgIE1vZGVsLmJ1aWxkTWV0YSh7IHNjaGVtYSB9KTtcbiAgICAgIC8vIENvbmZpZ3VyZVxuICAgICAgTW9kZWwubWV0YS5jb25maWd1cmUoe1xuICAgICAgICBmaW5kT3B0aW9uc0ZvclR5cGU6ICh0eXBlOiBzdHJpbmcpID0+IHRoaXMuZmluZE9wdGlvbnNGb3JUeXBlKHR5cGUpLFxuICAgICAgICBvcHRpb25zOiB0aGlzLm9wdGlvbnMucGFyc2VyT3B0aW9ucyxcbiAgICAgIH0pO1xuICAgICAgLy8gU3RvcmUgTmV3IE1vZGVsIGZvciBuZXh0IHRpbWVcbiAgICAgIHNjaGVtYS5tb2RlbCA9IE1vZGVsO1xuICAgIH1cbiAgICByZXR1cm4gTW9kZWw7XG4gIH1cblxuICBwdWJsaWMgZmluZENvbGxlY3Rpb25Gb3JUeXBlKHR5cGU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmZpbmRTdHJ1Y3R1cmVkVHlwZUZvclR5cGU8YW55Pih0eXBlKT8uY29sbGVjdGlvbjtcbiAgfVxuXG4gIHB1YmxpYyBjb2xsZWN0aW9uRm9yVHlwZSh0eXBlOiBzdHJpbmcpIHtcbiAgICBsZXQgQ29sbGVjdGlvbiA9IHRoaXMuZmluZENvbGxlY3Rpb25Gb3JUeXBlKHR5cGUpO1xuICAgIGlmIChDb2xsZWN0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGxldCBzY2hlbWEgPSB0aGlzLmZpbmRTdHJ1Y3R1cmVkVHlwZUZvclR5cGU8YW55Pih0eXBlKTtcbiAgICAgIGlmIChzY2hlbWEgPT09IHVuZGVmaW5lZCkgdGhyb3cgRXJyb3IoJycpO1xuICAgICAgQ29sbGVjdGlvbiA9IGNsYXNzIGV4dGVuZHMgT0RhdGFDb2xsZWN0aW9uPFxuICAgICAgICBhbnksXG4gICAgICAgIE9EYXRhTW9kZWw8YW55PlxuICAgICAgPiB7fSBhcyB0eXBlb2YgT0RhdGFDb2xsZWN0aW9uO1xuICAgICAgQ29sbGVjdGlvbi5tb2RlbCA9IHRoaXMubW9kZWxGb3JUeXBlKHR5cGUpO1xuICAgICAgLy8gU3RvcmUgTmV3IENvbGxlY3Rpb24gZm9yIG5leHQgdGltZVxuICAgICAgc2NoZW1hLmNvbGxlY3Rpb24gPSBDb2xsZWN0aW9uO1xuICAgIH1cbiAgICByZXR1cm4gQ29sbGVjdGlvbjtcbiAgfVxuXG4gIHB1YmxpYyBmaW5kU2VydmljZUZvclR5cGUodHlwZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuZmluZEVudGl0eVNldEZvclR5cGUodHlwZSk/LnNlcnZpY2UgYXNcbiAgICAgIHwgdHlwZW9mIE9EYXRhRW50aXR5U2VydmljZVxuICAgICAgfCB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgZmluZEVudGl0eVNldEZvckVudGl0eVR5cGUoZW50aXR5VHlwZTogc3RyaW5nKSB7XG4gICAgaWYgKCF0aGlzLm1lbW8uZm9yVHlwZS5lbnRpdHlTZXQuaGFzKGVudGl0eVR5cGUpKSB7XG4gICAgICB0aGlzLm1lbW8uZm9yVHlwZS5lbnRpdHlTZXQuc2V0KFxuICAgICAgICBlbnRpdHlUeXBlLFxuICAgICAgICB0aGlzLnNjaGVtYXNcbiAgICAgICAgICAucmVkdWNlKFxuICAgICAgICAgICAgKGFjYywgc2NoZW1hKSA9PiBbLi4uYWNjLCAuLi5zY2hlbWEuZW50aXR5U2V0c10sXG4gICAgICAgICAgICA8T0RhdGFFbnRpdHlTZXRbXT5bXVxuICAgICAgICAgIClcbiAgICAgICAgICAuZmluZCgoZSkgPT4gZS5lbnRpdHlUeXBlID09PSBlbnRpdHlUeXBlKVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMubWVtby5mb3JUeXBlLmVudGl0eVNldC5nZXQoZW50aXR5VHlwZSkgYXNcbiAgICAgIHwgT0RhdGFFbnRpdHlTZXRcbiAgICAgIHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIGZpbmRTZXJ2aWNlRm9yRW50aXR5VHlwZShlbnRpdHlUeXBlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5maW5kRW50aXR5U2V0Rm9yRW50aXR5VHlwZShlbnRpdHlUeXBlKT8uc2VydmljZSBhc1xuICAgICAgfCB0eXBlb2YgT0RhdGFFbnRpdHlTZXJ2aWNlXG4gICAgICB8IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBmaW5kRW51bVR5cGVCeU5hbWU8VD4obmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKCF0aGlzLm1lbW8uYnlOYW1lLmVudW0uaGFzKG5hbWUpKSB7XG4gICAgICB0aGlzLm1lbW8uYnlOYW1lLmVudW0uc2V0KFxuICAgICAgICBuYW1lLFxuICAgICAgICB0aGlzLnNjaGVtYXNcbiAgICAgICAgICAucmVkdWNlKFxuICAgICAgICAgICAgKGFjYywgc2NoZW1hKSA9PiBbLi4uYWNjLCAuLi5zY2hlbWEuZW51bXNdLFxuICAgICAgICAgICAgPE9EYXRhRW51bVR5cGU8VD5bXT5bXVxuICAgICAgICAgIClcbiAgICAgICAgICAuZmluZCgoZSkgPT4gZS5uYW1lID09PSBuYW1lKVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMubWVtby5ieU5hbWUuZW51bS5nZXQobmFtZSkgYXMgT0RhdGFFbnVtVHlwZTxUPiB8IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBmaW5kU3RydWN0dXJlZFR5cGVCeU5hbWU8VD4obmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKCF0aGlzLm1lbW8uYnlOYW1lLnN0cnVjdHVyZWQuaGFzKG5hbWUpKSB7XG4gICAgICB0aGlzLm1lbW8uYnlOYW1lLnN0cnVjdHVyZWQuc2V0KFxuICAgICAgICBuYW1lLFxuICAgICAgICB0aGlzLnNjaGVtYXNcbiAgICAgICAgICAucmVkdWNlKFxuICAgICAgICAgICAgKGFjYywgc2NoZW1hKSA9PiBbLi4uYWNjLCAuLi5zY2hlbWEuZW50aXRpZXNdLFxuICAgICAgICAgICAgPE9EYXRhU3RydWN0dXJlZFR5cGU8VD5bXT5bXVxuICAgICAgICAgIClcbiAgICAgICAgICAuZmluZCgoZSkgPT4gZS5uYW1lID09PSBuYW1lKVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMubWVtby5ieU5hbWUuc3RydWN0dXJlZC5nZXQobmFtZSkgYXNcbiAgICAgIHwgT0RhdGFTdHJ1Y3R1cmVkVHlwZTxUPlxuICAgICAgfCB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgZmluZENhbGxhYmxlQnlOYW1lPFQ+KG5hbWU6IHN0cmluZywgYmluZGluZ1R5cGU/OiBzdHJpbmcpIHtcbiAgICBjb25zdCBrZXkgPSBiaW5kaW5nVHlwZSAhPT0gdW5kZWZpbmVkID8gYCR7YmluZGluZ1R5cGV9LyR7bmFtZX1gIDogbmFtZTtcbiAgICBpZiAoIXRoaXMubWVtby5ieU5hbWUuY2FsbGFibGUuaGFzKGtleSkpIHtcbiAgICAgIHRoaXMubWVtby5ieU5hbWUuY2FsbGFibGUuc2V0KFxuICAgICAgICBrZXksXG4gICAgICAgIHRoaXMuc2NoZW1hc1xuICAgICAgICAgIC5yZWR1Y2UoXG4gICAgICAgICAgICAoYWNjLCBzY2hlbWEpID0+IFsuLi5hY2MsIC4uLnNjaGVtYS5jYWxsYWJsZXNdLFxuICAgICAgICAgICAgPE9EYXRhQ2FsbGFibGU8VD5bXT5bXVxuICAgICAgICAgIClcbiAgICAgICAgICAuZmluZChcbiAgICAgICAgICAgIChjKSA9PlxuICAgICAgICAgICAgICBjLm5hbWUgPT09IG5hbWUgJiZcbiAgICAgICAgICAgICAgKGJpbmRpbmdUeXBlID09PSB1bmRlZmluZWQgfHwgYy5iaW5kaW5nKCk/LnR5cGUgPT09IGJpbmRpbmdUeXBlKVxuICAgICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm1lbW8uYnlOYW1lLmNhbGxhYmxlLmdldChrZXkpIGFzIE9EYXRhQ2FsbGFibGU8VD4gfCB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgZmluZEVudGl0eVNldEJ5TmFtZShuYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAoIXRoaXMubWVtby5ieU5hbWUuZW50aXR5U2V0LmhhcyhuYW1lKSkge1xuICAgICAgdGhpcy5tZW1vLmJ5TmFtZS5lbnRpdHlTZXQuc2V0KFxuICAgICAgICBuYW1lLFxuICAgICAgICB0aGlzLnNjaGVtYXNcbiAgICAgICAgICAucmVkdWNlKFxuICAgICAgICAgICAgKGFjYywgc2NoZW1hKSA9PiBbLi4uYWNjLCAuLi5zY2hlbWEuZW50aXR5U2V0c10sXG4gICAgICAgICAgICA8T0RhdGFFbnRpdHlTZXRbXT5bXVxuICAgICAgICAgIClcbiAgICAgICAgICAuZmluZCgoZSkgPT4gZS5uYW1lID09PSBuYW1lKVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMubWVtby5ieU5hbWUuZW50aXR5U2V0LmdldChuYW1lKSBhcyBPRGF0YUVudGl0eVNldCB8IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBmaW5kTW9kZWxCeU5hbWUobmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuZmluZFN0cnVjdHVyZWRUeXBlQnlOYW1lPGFueT4obmFtZSk/Lm1vZGVsIGFzXG4gICAgICB8IHR5cGVvZiBPRGF0YU1vZGVsXG4gICAgICB8IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBmaW5kQ29sbGVjdGlvbkJ5TmFtZShuYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5maW5kU3RydWN0dXJlZFR5cGVCeU5hbWU8YW55PihuYW1lKT8uY29sbGVjdGlvbiBhc1xuICAgICAgfCB0eXBlb2YgT0RhdGFDb2xsZWN0aW9uXG4gICAgICB8IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBmaW5kU2VydmljZUJ5TmFtZShuYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5maW5kRW50aXR5U2V0QnlOYW1lKG5hbWUpPy5zZXJ2aWNlIGFzXG4gICAgICB8IHR5cGVvZiBPRGF0YUVudGl0eVNlcnZpY2VcbiAgICAgIHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIHBhcnNlckZvclR5cGU8VD4odHlwZTogc3RyaW5nLCBiaW5kaW5nVHlwZT86IHN0cmluZykge1xuICAgIGNvbnN0IGtleSA9IGJpbmRpbmdUeXBlICE9PSB1bmRlZmluZWQgPyBgJHtiaW5kaW5nVHlwZX0vJHt0eXBlfWAgOiB0eXBlO1xuICAgIGlmICghdGhpcy5tZW1vLmZvclR5cGUucGFyc2VyLmhhcyhrZXkpKSB7XG4gICAgICBpZiAodHlwZSBpbiB0aGlzLnBhcnNlcnMpIHtcbiAgICAgICAgLy8gRWRtLCBCYXNlIFBhcnNlcnNcbiAgICAgICAgdGhpcy5tZW1vLmZvclR5cGUucGFyc2VyLnNldChrZXksIHRoaXMucGFyc2Vyc1t0eXBlXSBhcyBQYXJzZXI8VD4pO1xuICAgICAgfSBlbHNlIGlmICghdHlwZS5zdGFydHNXaXRoKCdFZG0uJykpIHtcbiAgICAgICAgLy8gRW51bVR5cGUsIENvbXBsZXhUeXBlIGFuZCBFbnRpdHlUeXBlIFBhcnNlcnNcbiAgICAgICAgbGV0IHZhbHVlID1cbiAgICAgICAgICB0aGlzLmZpbmRDYWxsYWJsZUZvclR5cGU8VD4odHlwZSwgYmluZGluZ1R5cGUpIHx8XG4gICAgICAgICAgdGhpcy5maW5kRW51bVR5cGVGb3JUeXBlPFQ+KHR5cGUpIHx8XG4gICAgICAgICAgdGhpcy5maW5kU3RydWN0dXJlZFR5cGVGb3JUeXBlPFQ+KHR5cGUpO1xuICAgICAgICB0aGlzLm1lbW8uZm9yVHlwZS5wYXJzZXIuc2V0KGtleSwgdmFsdWU/LnBhcnNlciBhcyBQYXJzZXI8VD4pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gTm9uZSBQYXJzZXJcbiAgICAgICAgdGhpcy5tZW1vLmZvclR5cGUucGFyc2VyLnNldChrZXksIE5PTkVfUEFSU0VSKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMubWVtby5mb3JUeXBlLnBhcnNlci5nZXQoa2V5KSBhcyBQYXJzZXI8VD47XG4gIH1cblxuICBwdWJsaWMgZmluZE9wdGlvbnNGb3JUeXBlPFQ+KHR5cGU6IHN0cmluZykge1xuICAgIC8vIFN0cnVjdXRyZWQgT3B0aW9uc1xuICAgIGlmICghdGhpcy5tZW1vLmZvclR5cGUub3B0aW9ucy5oYXModHlwZSkpIHtcbiAgICAgIGxldCBzdCA9IHRoaXMuZmluZFN0cnVjdHVyZWRUeXBlRm9yVHlwZTxUPih0eXBlKTtcbiAgICAgIHRoaXMubWVtby5mb3JUeXBlLm9wdGlvbnMuc2V0KFxuICAgICAgICB0eXBlLFxuICAgICAgICBzdCAhPT0gdW5kZWZpbmVkICYmIHN0Lm1vZGVsICE9PSB1bmRlZmluZWQgJiYgc3QubW9kZWw/Lm1ldGEgIT09IG51bGxcbiAgICAgICAgICA/IHN0Lm1vZGVsLm1ldGFcbiAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMubWVtby5mb3JUeXBlLm9wdGlvbnMuZ2V0KHR5cGUpIGFzXG4gICAgICB8IE9EYXRhTW9kZWxPcHRpb25zPFQ+XG4gICAgICB8IHVuZGVmaW5lZDtcbiAgfVxufVxuIl19
333
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1vZGF0YS9zcmMvbGliL2FwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWEsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDaEUsT0FBTyxFQUFFLEtBQUssRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUN6QyxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pELE9BQU8sRUFBYyxrQkFBa0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFxQixNQUFNLGdCQUFnQixDQUFDO0FBQ2hGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDNUMsT0FBTyxFQUNMLG1CQUFtQixFQUNuQixrQkFBa0IsRUFDbEIsbUJBQW1CLEVBQ25CLHNCQUFzQixFQUN0QixxQkFBcUIsRUFDckIscUJBQXFCLEVBQ3JCLCtCQUErQixFQUMvQixpQkFBaUIsRUFDakIsaUJBQWlCLEVBRWpCLGFBQWEsRUFFYixzQkFBc0IsR0FDdkIsTUFBTSxtQkFBbUIsQ0FBQztBQUMzQixPQUFPLEVBQ0wsV0FBVyxFQUlYLFdBQVcsR0FFWixNQUFNLFVBQVUsQ0FBQztBQUVsQixPQUFPLEVBR0wsV0FBVyxFQUVYLGdCQUFnQixHQUNqQixNQUFNLFNBQVMsQ0FBQztBQUVqQjs7R0FFRztBQUNILE1BQU0sT0FBTyxRQUFRO0lBbUJuQixZQUFZLE1BQWlCO1FBK0o3Qix1QkFBdUI7UUFDdkIsVUFBVTtRQUNGLFNBQUksR0FlUjtZQUNGLE9BQU8sRUFBRTtnQkFDUCxJQUFJLEVBQUUsSUFBSSxHQUFHLEVBQTBDO2dCQUN2RCxVQUFVLEVBQUUsSUFBSSxHQUFHLEVBQWdEO2dCQUNu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QUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDdkMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FFNUIsQ0FBQztTQUNmO1FBQ0QsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFJLElBQUksQ0FBQyxDQUFDO1FBQ25ELE1BQU0sT0FBTyxHQUFHLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDO1FBQ2hDLDRCQUE0QjtRQUM1QixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztRQUM3QyxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwRXZlbnQsIEh0dHBFdmVudFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBORVZFUiwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgT0RhdGFDYWNoZSwgT0RhdGFJbk1lbW9yeUNhY2hlIH0gZnJvbSAnLi9jYWNoZS9pbmRleCc7XG5pbXBvcnQgeyBERUZBVUxUX1ZFUlNJT04gfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBPRGF0YUNvbGxlY3Rpb24sIE9EYXRhTW9kZWwsIE9EYXRhTW9kZWxPcHRpb25zIH0gZnJvbSAnLi9tb2RlbHMvaW5kZXgnO1xuaW1wb3J0IHsgT0RhdGFBcGlPcHRpb25zIH0gZnJvbSAnLi9vcHRpb25zJztcbmltcG9ydCB7XG4gIE9EYXRhQWN0aW9uUmVzb3VyY2UsXG4gIE9EYXRhQmF0Y2hSZXNvdXJjZSxcbiAgT0RhdGFFbnRpdHlSZXNvdXJjZSxcbiAgT0RhdGFFbnRpdHlTZXRSZXNvdXJjZSxcbiAgT0RhdGFGdW5jdGlvblJlc291cmNlLFxuICBPRGF0YU1ldGFkYXRhUmVzb3VyY2UsXG4gIE9EYXRhTmF2aWdhdGlvblByb3BlcnR5UmVzb3VyY2UsXG4gIE9EYXRhUGF0aFNlZ21lbnRzLFxuICBPRGF0YVF1ZXJ5T3B0aW9ucyxcbiAgT0RhdGFSZXF1ZXN0LFxuICBPRGF0YVJlc3BvbnNlLFxuICBPRGF0YVNlZ21lbnQsXG4gIE9EYXRhU2luZ2xldG9uUmVzb3VyY2UsXG59IGZyb20gJy4vcmVzb3VyY2VzL2luZGV4JztcbmltcG9ydCB7XG4gIEVETV9QQVJTRVJTLFxuICBPRGF0YUNhbGxhYmxlLFxuICBPRGF0YUVudGl0eVNldCxcbiAgT0RhdGFFbnVtVHlwZSxcbiAgT0RhdGFTY2hlbWEsXG4gIE9EYXRhU3RydWN0dXJlZFR5cGUsXG59IGZyb20gJy4vc2NoZW1hJztcbmltcG9ydCB7IE9EYXRhRW50aXR5U2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvZW50aXR5JztcbmltcG9ydCB7XG4gIEFwaUNvbmZpZyxcbiAgQXBpT3B0aW9ucyxcbiAgTk9ORV9QQVJTRVIsXG4gIFBhcnNlcixcbiAgUGF0aFNlZ21lbnROYW1lcyxcbn0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogQXBpIGFic3RyYWN0aW9uIGZvciBjb25zdW1pbmcgT0RhdGEgc2VydmljZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBPRGF0YUFwaSB7XG4gIHJlcXVlc3Rlcj86IChyZXF1ZXN0OiBPRGF0YVJlcXVlc3Q8YW55PikgPT4gT2JzZXJ2YWJsZTxhbnk+O1xuICBzZXJ2aWNlUm9vdFVybDogc3RyaW5nO1xuICBtZXRhZGF0YVVybDogc3RyaW5nO1xuICBuYW1lPzogc3RyaW5nO1xuICB2ZXJzaW9uOiBzdHJpbmc7XG4gIGRlZmF1bHQ6IGJvb2xlYW47XG4gIGNyZWF0aW9uOiBEYXRlO1xuICAvLyBPcHRpb25zXG4gIG9wdGlvbnM6IE9EYXRhQXBpT3B0aW9ucztcbiAgLy8gQ2FjaGVcbiAgY2FjaGUhOiBPRGF0YUNhY2hlO1xuICAvLyBFcnJvciBIYW5kbGVyXG4gIGVycm9ySGFuZGxlcj86IChlcnJvcjogYW55LCBjYXVnaHQ6IE9ic2VydmFibGU8YW55PikgPT4gT2JzZXJ2YWJsZTxuZXZlcj47XG4gIC8vIEJhc2UgUGFyc2Vyc1xuICBwYXJzZXJzOiBNYXA8c3RyaW5nLCBQYXJzZXI8YW55Pj47XG4gIC8vIFNjaGVtYXNcbiAgc2NoZW1hczogT0RhdGFTY2hlbWFbXTtcblxuICBjb25zdHJ1Y3Rvcihjb25maWc6IEFwaUNvbmZpZykge1xuICAgIHRoaXMuc2VydmljZVJvb3RVcmwgPSBjb25maWcuc2VydmljZVJvb3RVcmw7XG4gICAgaWYgKHRoaXMuc2VydmljZVJvb3RVcmwuaW5kZXhPZignPycpICE9IC0xKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIlRoZSAnc2VydmljZVJvb3RVcmwnIHNob3VsZCBub3QgY29udGFpbiBxdWVyeSBzdHJpbmcuIFBsZWFzZSB1c2UgJ3BhcmFtcycgdG8gYWRkIGV4dHJhIHBhcmFtZXRlcnNcIlxuICAgICAgKTtcbiAgICBpZiAoIXRoaXMuc2VydmljZVJvb3RVcmwuZW5kc1dpdGgoJy8nKSkgdGhpcy5zZXJ2aWNlUm9vdFVybCArPSAnLyc7XG4gICAgdGhpcy5tZXRhZGF0YVVybCA9IGAke3RoaXMuc2VydmljZVJvb3RVcmx9JG1ldGFkYXRhYDtcbiAgICB0aGlzLm5hbWUgPSBjb25maWcubmFtZTtcbiAgICB0aGlzLnZlcnNpb24gPSBjb25maWcudmVyc2lvbiB8fCBERUZBVUxUX1ZFUlNJT047XG4gICAgdGhpcy5kZWZhdWx0ID0gY29uZmlnLmRlZmF1bHQgfHwgZmFsc2U7XG4gICAgdGhpcy5jcmVhdGlvbiA9IGNvbmZpZy5jcmVhdGlvbiB8fCBuZXcgRGF0ZSgpO1xuICAgIHRoaXMub3B0aW9ucyA9IG5ldyBPRGF0YUFwaU9wdGlvbnMoXG4gICAgICBPYmplY3QuYXNzaWduKDxBcGlPcHRpb25zPnsgdmVyc2lvbjogdGhpcy52ZXJzaW9uIH0sIGNvbmZpZy5vcHRpb25zIHx8IHt9KVxuICAgICk7XG5cbiAgICB0aGlzLmNhY2hlID0gKGNvbmZpZy5jYWNoZSBhcyBPRGF0YUNhY2hlKSB8fCBuZXcgT0RhdGFJbk1lbW9yeUNhY2hlKCk7XG4gICAgdGhpcy5lcnJvckhhbmRsZXIgPSBjb25maWcuZXJyb3JIYW5kbGVyO1xuXG4gICAgdGhpcy5wYXJzZXJzID0gbmV3IE1hcChPYmplY3QuZW50cmllcyhjb25maWcucGFyc2VycyB8fCBFRE1fUEFSU0VSUykpO1xuXG4gICAgdGhpcy5zY2hlbWFzID0gKGNvbmZpZy5zY2hlbWFzIHx8IFtdKS5tYXAoXG4gICAgICAoc2NoZW1hKSA9PiBuZXcgT0RhdGFTY2hlbWEoc2NoZW1hLCB0aGlzKVxuICAgICk7XG4gIH1cblxuICBjb25maWd1cmUoXG4gICAgc2V0dGluZ3M6IHtcbiAgICAgIHJlcXVlc3Rlcj86IChyZXF1ZXN0OiBPRGF0YVJlcXVlc3Q8YW55PikgPT4gT2JzZXJ2YWJsZTxhbnk+O1xuICAgIH0gPSB7fVxuICApIHtcbiAgICB0aGlzLnJlcXVlc3RlciA9IHNldHRpbmdzLnJlcXVlc3RlcjtcbiAgICB0aGlzLnNjaGVtYXMuZm9yRWFjaCgoc2NoZW1hKSA9PiB7XG4gICAgICBzY2hlbWEuY29uZmlndXJlKHtcbiAgICAgICAgcGFyc2VyRm9yVHlwZTogKHR5cGU6IHN0cmluZykgPT4gdGhpcy5wYXJzZXJGb3JUeXBlKHR5cGUpLFxuICAgICAgICBmaW5kT3B0aW9uc0ZvclR5cGU6ICh0eXBlOiBzdHJpbmcpID0+IHRoaXMuZmluZE9wdGlvbnNGb3JUeXBlKHR5cGUpLFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBmcm9tSlNPTjxQLCBSPihqc29uOiB7XG4gICAgc2VnbWVudHM6IE9EYXRhU2VnbWVudFtdO1xuICAgIG9wdGlvbnM6IHsgW25hbWU6IHN0cmluZ106IGFueSB9O1xuICB9KTogT0RhdGFBY3Rpb25SZXNvdXJjZTxQLCBSPiB8IE9EYXRhRnVuY3Rpb25SZXNvdXJjZTxQLCBSPjtcbiAgZnJvbUpTT048RT4oanNvbjoge1xuICAgIHNlZ21lbnRzOiBPRGF0YVNlZ21lbnRbXTtcbiAgICBvcHRpb25zOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfTtcbiAgfSk6XG4gICAgfCBPRGF0YUVudGl0eVJlc291cmNlPEU+XG4gICAgfCBPRGF0YUVudGl0eVNldFJlc291cmNlPEU+XG4gICAgfCBPRGF0YU5hdmlnYXRpb25Qcm9wZXJ0eVJlc291cmNlPEU+XG4gICAgfCBPRGF0YVNpbmdsZXRvblJlc291cmNlPEU+O1xuICBmcm9tSlNPTihqc29uOiB7XG4gICAgc2VnbWVudHM6IE9EYXRhU2VnbWVudFtdO1xuICAgIG9wdGlvbnM6IHsgW25hbWU6IHN0cmluZ106IGFueSB9O1xuICB9KSB7XG4gICAgY29uc3Qgc2VnbWVudHMgPSBuZXcgT0RhdGFQYXRoU2VnbWVudHMoanNvbi5zZWdtZW50cyk7XG4gICAgY29uc3QgcXVlcnkgPSBuZXcgT0RhdGFRdWVyeU9wdGlvbnMoanNvbi5vcHRpb25zKTtcbiAgICBzd2l0Y2ggKHNlZ21lbnRzLmxhc3QoKT8ubmFtZSBhcyBQYXRoU2VnbWVudE5hbWVzKSB7XG4gICAgICBjYXNlIFBhdGhTZWdtZW50TmFtZXMuZW50aXR5U2V0OlxuICAgICAgICBpZiAoc2VnbWVudHMubGFzdCgpPy5oYXNLZXkoKSkge1xuICAgICAgICAgIHJldHVybiBuZXcgT0RhdGFFbnRpdHlSZXNvdXJjZSh0aGlzLCB7IHNlZ21lbnRzLCBxdWVyeSB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbmV3IE9EYXRhRW50aXR5U2V0UmVzb3VyY2UodGhpcywgeyBzZWdtZW50cywgcXVlcnkgfSk7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgUGF0aFNlZ21lbnROYW1lcy5uYXZpZ2F0aW9uUHJvcGVydHk6XG4gICAgICAgIHJldHVybiBuZXcgT0RhdGFOYXZpZ2F0aW9uUHJvcGVydHlSZXNvdXJjZSh0aGlzLCB7IHNlZ21lbnRzLCBxdWVyeSB9KTtcbiAgICAgIGNhc2UgUGF0aFNlZ21lbnROYW1lcy5zaW5nbGV0b246XG4gICAgICAgIHJldHVybiBuZXcgT0RhdGFTaW5nbGV0b25SZXNvdXJjZSh0aGlzLCB7IHNlZ21lbnRzLCBxdWVyeSB9KTtcbiAgICAgIGNhc2UgUGF0aFNlZ21lbnROYW1lcy5hY3Rpb246XG4gICAgICAgIHJldHVybiBuZXcgT0RhdGFBY3Rpb25SZXNvdXJjZSh0aGlzLCB7IHNlZ21lbnRzLCBxdWVyeSB9KTtcbiAgICAgIGNhc2UgUGF0aFNlZ21lbnROYW1lcy5mdW5jdGlvbjpcbiAgICAgICAgcmV0dXJuIG5ldyBPRGF0YUZ1bmN0aW9uUmVzb3VyY2UodGhpcywgeyBzZWdtZW50cywgcXVlcnkgfSk7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcignTm8gUmVzb3VyY2UgZm9yIGpzb24nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBhIG1ldGFkYXRhIHJlc291cmNlLlxuICAgKiBAcmV0dXJucyBPRGF0YU1ldGFkYXRhUmVzb3VyY2VcbiAgICovXG4gIG1ldGFkYXRhKCk6IE9EYXRhTWV0YWRhdGFSZXNvdXJjZSB7XG4gICAgcmV0dXJuIE9EYXRhTWV0YWRhdGFSZXNvdXJjZS5mYWN0b3J5KHRoaXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGEgYmF0Y2ggcmVzb3VyY2UuXG4gICAqIEByZXR1cm5zIE9EYXRhQmF0Y2hSZXNvdXJjZVxuICAgKi9cbiAgYmF0Y2goKTogT0RhdGFCYXRjaFJlc291cmNlIHtcbiAgICByZXR1cm4gT0RhdGFCYXRjaFJlc291cmNlLmZhY3RvcnkodGhpcyk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgYSBzaW5nbGV0b24gcmVzb3VyY2UuXG4gICAqIEBwYXJhbSBwYXRoIE5hbWUgb2YgdGhlIHNpbmdsZXRvblxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgc2luZ2xldG9uPFQ+KHBhdGg6IHN0cmluZykge1xuICAgIGNvbnN0IGVudGl0eVNldCA9IHRoaXMuZmluZEVudGl0eVNldEJ5TmFtZShwYXRoKTtcbiAgICBjb25zdCBzY2hlbWEgPVxuICAgICAgZW50aXR5U2V0ICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyB0aGlzLmZpbmRTdHJ1Y3R1cmVkVHlwZUZvclR5cGU8VD4oZW50aXR5U2V0LmVudGl0eVR5cGUpXG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgIHJldHVybiBPRGF0YVNpbmdsZXRvblJlc291cmNlLmZhY3Rvcnk8VD4odGhpcywgeyBwYXRoLCBzY2hlbWEgfSk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgYW4gZW50aXR5IHNldCByZXNvdXJjZS5cbiAgICogQHBhcmFtIHBhdGggTmFtZSBvZiB0aGUgZW50aXR5IHNldFxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgZW50aXR5U2V0PFQ+KHBhdGg6IHN0cmluZyk6IE9EYXRhRW50aXR5U2V0UmVzb3VyY2U8VD4ge1xuICAgIGNvbnN0IGVudGl0eVNldCA9IHRoaXMuZmluZEVudGl0eVNldEJ5TmFtZShwYXRoKTtcbiAgICBjb25zdCBzY2hlbWEgPVxuICAgICAgZW50aXR5U2V0ICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyB0aGlzLmZpbmRTdHJ1Y3R1cmVkVHlwZUZvclR5cGU8VD4oZW50aXR5U2V0LmVudGl0eVR5cGUpXG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgIHJldHVybiBPRGF0YUVudGl0eVNldFJlc291cmNlLmZhY3Rvcnk8VD4odGhpcywgeyBwYXRoLCBzY2hlbWEgfSk7XG4gIH1cblxuICAvKipcbiAgICogVW5ib3VuZCBBY3Rpb25cbiAgICogQHBhcmFtICB7c3RyaW5nfSBwYXRoP1xuICAgKiBAcmV0dXJucyBPRGF0YUFjdGlvblJlc291cmNlXG4gICAqL1xuICBhY3Rpb248UCwgUj4ocGF0aDogc3RyaW5nKTogT0RhdGFBY3Rpb25SZXNvdXJjZTxQLCBSPiB7XG4gICAgY29uc3Qgc2NoZW1hID0gdGhpcy5maW5kQ2FsbGFibGVGb3JUeXBlPFI+KHBhdGgpO1xuICAgIHJldHVybiBPRGF0YUFjdGlvblJlc291cmNlLmZhY3Rvcnk8UCwgUj4odGhpcywgeyBwYXRoLCBzY2hlbWEgfSk7XG4gIH1cblxuICAvKipcbiAgICogVW5ib3VuZCBGdW5jdGlvblxuICAgKiBAcGFyYW0gIHtzdHJpbmd9IHBhdGg/XG4gICAqIEByZXR1cm5zIE9EYXRhRnVuY3Rpb25SZXNvdXJjZVxuICAgKi9cbiAgZnVuY3Rpb248UCwgUj4ocGF0aDogc3RyaW5nKTogT0RhdGFGdW5jdGlvblJlc291cmNlPFAsIFI+IHtcbiAgICBjb25zdCBzY2hlbWEgPSB0aGlzLmZpbmRDYWxsYWJsZUZvclR5cGU8Uj4ocGF0aCk7XG4gICAgcmV0dXJuIE9EYXRhRnVuY3Rpb25SZXNvdXJjZS5mYWN0b3J5PFAsIFI+KHRoaXMsIHsgcGF0aCwgc2NoZW1hIH0pO1xuICB9XG5cbiAgcmVxdWVzdChyZXE6IE9EYXRhUmVxdWVzdDxhbnk+KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcmVzJCA9IHRoaXMucmVxdWVzdGVyICE9PSB1bmRlZmluZWQgPyB0aGlzLnJlcXVlc3RlcihyZXEpIDogTkVWRVI7XG4gICAgcmVzJCA9IHJlcyQucGlwZShcbiAgICAgIG1hcCgocmVzOiBIdHRwRXZlbnQ8YW55PikgPT5cbiAgICAgICAgcmVzLnR5cGUgPT09IEh0dHBFdmVudFR5cGUuUmVzcG9uc2VcbiAgICAgICAgICA/IE9EYXRhUmVzcG9uc2UuZnJvbUh0dHBSZXNwb25zZTxhbnk+KHJlcSwgcmVzKVxuICAgICAgICAgIDogcmVzXG4gICAgICApXG4gICAgKTtcblxuICAgIGlmICh0aGlzLmVycm9ySGFuZGxlciAhPT0gdW5kZWZpbmVkKVxuICAgICAgcmVzJCA9IHJlcyQucGlwZShjYXRjaEVycm9yKHRoaXMuZXJyb3JIYW5kbGVyKSk7XG5cbiAgICByZXR1cm4gcmVxLm9ic2VydmUgPT09ICdyZXNwb25zZSdcbiAgICAgID8gdGhpcy5jYWNoZS5oYW5kbGVSZXF1ZXN0KHJlcSwgcmVzJClcbiAgICAgIDogcmVzJDtcbiAgfVxuXG4gIC8vIyByZWdpb24gRmluZCBieSBUeXBlXG4gIC8vIE1lbW9pemVcbiAgcHJpdmF0ZSBtZW1vOiB7XG4gICAgZm9yVHlwZToge1xuICAgICAgZW51bTogTWFwPHN0cmluZywgT0RhdGFFbnVtVHlwZTxhbnk+IHwgdW5kZWZpbmVkPjtcbiAgICAgIHN0cnVjdHVyZWQ6IE1hcDxzdHJpbmcsIE9EYXRhU3RydWN0dXJlZFR5cGU8YW55PiB8IHVuZGVmaW5lZD47XG4gICAgICBjYWxsYWJsZTogTWFwPHN0cmluZywgT0RhdGFDYWxsYWJsZTxhbnk+IHwgdW5kZWZpbmVkPjtcbiAgICAgIGVudGl0eVNldDogTWFwPHN0cmluZywgT0RhdGFFbnRpdHlTZXQgfCB1bmRlZmluZWQ+O1xuICAgICAgcGFyc2VyOiBNYXA8c3RyaW5nLCBQYXJzZXI8YW55Pj47XG4gICAgICBvcHRpb25zOiBNYXA8c3RyaW5nLCBPRGF0YU1vZGVsT3B0aW9uczxhbnk+IHwgdW5kZWZpbmVkPjtcbiAgICB9O1xuICAgIGJ5TmFtZToge1xuICAgICAgZW51bTogTWFwPHN0cmluZywgT0RhdGFFbnVtVHlwZTxhbnk+IHwgdW5kZWZpbmVkPjtcbiAgICAgIHN0cnVjdHVyZWQ6IE1hcDxzdHJpbmcsIE9EYXRhU3RydWN0dXJlZFR5cGU8YW55PiB8IHVuZGVmaW5lZD47XG4gICAgICBjYWxsYWJsZTogTWFwPHN0cmluZywgT0RhdGFDYWxsYWJsZTxhbnk+IHwgdW5kZWZpbmVkPjtcbiAgICAgIGVudGl0eVNldDogTWFwPHN0cmluZywgT0RhdGFFbnRpdHlTZXQgfCB1bmRlZmluZWQ+O1xuICAgIH07XG4gIH0gPSB7XG4gICAgZm9yVHlwZToge1xuICAgICAgZW51bTogbmV3IE1hcDxzdHJpbmcsIE9EYXRhRW51bVR5cGU8YW55PiB8IHVuZGVmaW5lZD4oKSxcbiAgICAgIHN0cnVjdHVyZWQ6IG5ldyBNYXA8c3RyaW5nLCBPRGF0YVN0cnVjdHVyZWRUeXBlPGFueT4gfCB1bmRlZmluZWQ+KCksXG4gICAgICBjYWxsYWJsZTogbmV3IE1hcDxzdHJpbmcsIE9EYXRhQ2FsbGFibGU8YW55PiB8IHVuZGVmaW5lZD4oKSxcbiAgICAgIGVudGl0eVNldDogbmV3IE1hcDxzdHJpbmcsIE9EYXRhRW50aXR5U2V0IHwgdW5kZWZpbmVkPigpLFxuICAgICAgcGFyc2VyOiBuZXcgTWFwPHN0cmluZywgUGFyc2VyPGFueT4+KCksXG4gICAgICBvcHRpb25zOiBuZXcgTWFwPHN0cmluZywgT0RhdGFNb2RlbE9wdGlvbnM8YW55PiB8IHVuZGVmaW5lZD4oKSxcbiAgICB9LFxuICAgIGJ5TmFtZToge1xuICAgICAgZW51bTogbmV3IE1hcDxzdHJpbmcsIE9EYXRhRW51bVR5cGU8YW55PiB8IHVuZGVmaW5lZD4oKSxcbiAgICAgIHN0cnVjdHVyZWQ6IG5ldyBNYXA8c3RyaW5nLCBPRGF0YVN0cnVjdHVyZWRUeXBlPGFueT4gfCB1bmRlZmluZWQ+KCksXG4gICAgICBjYWxsYWJsZTogbmV3IE1hcDxzdHJpbmcsIE9EYXRhQ2FsbGFibGU8YW55PiB8IHVuZGVmaW5lZD4oKSxcbiAgICAgIGVudGl0eVNldDogbmV3IE1hcDxzdHJpbmcsIE9EYXRhRW50aXR5U2V0IHwgdW5kZWZpbmVkPigpLFxuICAgIH0sXG4gIH07XG5cbiAgcHJpdmF0ZSBmaW5kU2NoZW1hRm9yVHlwZSh0eXBlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBzY2hlbWFzID0gdGhpcy5zY2hlbWFzLmZpbHRlcigocykgPT4gcy5pc05hbWVzcGFjZU9mKHR5cGUpKTtcbiAgICBpZiAoc2NoZW1hcy5sZW5ndGggPT09IDApIHJldHVybiB1bmRlZmluZWQ7XG4gICAgaWYgKHNjaGVtYXMubGVuZ3RoID09PSAxKSByZXR1cm4gc2NoZW1hc1swXTtcbiAgICByZXR1cm4gc2NoZW1hc1xuICAgICAgLnNvcnQoKHMxLCBzMikgPT4gczEubmFtZXNwYWNlLmxlbmd0aCAtIHMyLm5hbWVzcGFjZS5sZW5ndGgpXG4gICAgICAucG9wKCk7XG4gIH1cblxuICBwdWJsaWMgZmluZEVudW1UeXBlRm9yVHlwZTxUPih0eXBlOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5tZW1vLmZvclR5cGUuZW51bS5oYXModHlwZSkpIHtcbiAgICAgIHJldHVybiB0aGlzLm1lbW8uZm9yVHlwZS5lbnVtLmdldCh0eXBlKSBhcyBPRGF0YUVudW1UeXBlPFQ+IHwgdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBlbnVtVHlwZSA9IHRoaXMuZmluZFNjaGVtYUZvclR5cGUodHlwZSk/LmZpbmRFbnVtVHlwZUZvclR5cGU8VD4odHlwZSk7XG4gICAgdGhpcy5tZW1vLmZvclR5cGUuZW51bS5zZXQodHlwZSwgZW51bVR5cGUpO1xuICAgIHJldHVybiBlbnVtVHlwZTtcbiAgfVxuXG4gIHB1YmxpYyBmaW5kU3RydWN0dXJlZFR5cGVGb3JUeXBlPFQ+KHR5cGU6IHN0cmluZykge1xuICAgIGlmICh0aGlzLm1lbW8uZm9yVHlwZS5zdHJ1Y3R1cmVkLmhhcyh0eXBlKSkge1xuICAgICAgcmV0dXJuIHRoaXMubWVtby5mb3JUeXBlLnN0cnVjdHVyZWQuZ2V0KHR5cGUpIGFzXG4gICAgICAgIHwgT0RhdGFTdHJ1Y3R1cmVkVHlwZTxUPlxuICAgICAgICB8IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3Qgc3RydWN0dXJlZFR5cGUgPVxuICAgICAgdGhpcy5maW5kU2NoZW1hRm9yVHlwZSh0eXBlKT8uZmluZFN0cnVjdHVyZWRUeXBlRm9yVHlwZTxUPih0eXBlKTtcbiAgICB0aGlzLm1lbW8uZm9yVHlwZS5zdHJ1Y3R1cmVkLnNldCh0eXBlLCBzdHJ1Y3R1cmVkVHlwZSk7XG4gICAgcmV0dXJuIHN0cnVjdHVyZWRUeXBlO1xuICB9XG5cbiAgcHVibGljIGZpbmRDYWxsYWJsZUZvclR5cGU8VD4odHlwZTogc3RyaW5nLCBiaW5kaW5nVHlwZT86IHN0cmluZykge1xuICAgIGNvbnN0IGtleSA9IGJpbmRpbmdUeXBlICE9PSB1bmRlZmluZWQgPyBgJHtiaW5kaW5nVHlwZX0vJHt0eXBlfWAgOiB0eXBlO1xuICAgIGlmICh0aGlzLm1lbW8uZm9yVHlwZS5jYWxsYWJsZS5oYXMoa2V5KSkge1xuICAgICAgcmV0dXJuIHRoaXMubWVtby5mb3JUeXBlLmNhbGxhYmxlLmdldChrZXkpIGFzXG4gICAgICAgIHwgT0RhdGFDYWxsYWJsZTxUPlxuICAgICAgICB8IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgY2FsbGFibGUgPSB0aGlzLmZpbmRTY2hlbWFGb3JUeXBlKHR5cGUpPy5maW5kQ2FsbGFibGVGb3JUeXBlPFQ+KFxuICAgICAgdHlwZSxcbiAgICAgIGJpbmRpbmdUeXBlXG4gICAgKTtcbiAgICB0aGlzLm1lbW8uZm9yVHlwZS5jYWxsYWJsZS5zZXQoa2V5LCBjYWxsYWJsZSk7XG4gICAgcmV0dXJuIGNhbGxhYmxlO1xuICB9XG5cbiAgcHVibGljIGZpbmRFbnRpdHlTZXRGb3JUeXBlKHR5cGU6IHN0cmluZykge1xuICAgIGlmICh0aGlzLm1lbW8uZm9yVHlwZS5lbnRpdHlTZXQuaGFzKHR5cGUpKSB7XG4gICAgICByZXR1cm4gdGhpcy5tZW1vLmZvclR5cGUuZW50aXR5U2V0LmdldCh0eXBlKSBhc1xuICAgICAgICB8IE9EYXRhRW50aXR5U2V0XG4gICAgICAgIHwgdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBlbnRpdHlTZXQgPSB0aGlzLmZpbmRTY2hlbWFGb3JUeXBlKHR5cGUpPy5maW5kRW50aXR5U2V0Rm9yVHlwZSh0eXBlKTtcbiAgICB0aGlzLm1lbW8uZm9yVHlwZS5lbnRpdHlTZXQuc2V0KHR5cGUsIGVudGl0eVNldCk7XG4gICAgcmV0dXJuIGVudGl0eVNldDtcbiAgfVxuXG4gIHB1YmxpYyBmaW5kTW9kZWxGb3JUeXBlKHR5cGU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmZpbmRTdHJ1Y3R1cmVkVHlwZUZvclR5cGU8YW55Pih0eXBlKT8ubW9kZWw7XG4gIH1cblxuICBwdWJsaWMgbW9kZWxGb3JUeXBlKHR5cGU6IHN0cmluZykge1xuICAgIGxldCBNb2RlbCA9IHRoaXMuZmluZE1vZGVsRm9yVHlwZSh0eXBlKTtcbiAgICBpZiAoTW9kZWwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gQnVpbGQgQWQtaG9jIG1vZGVsXG4gICAgICBsZXQgc2NoZW1hID0gdGhpcy5maW5kU3RydWN0dXJlZFR5cGVGb3JUeXBlPGFueT4odHlwZSk7XG4gICAgICBpZiAoc2NoZW1hID09PSB1bmRlZmluZWQpIHRocm93IEVycm9yKGBObyBzY2hlbWEgZm9yICR7dHlwZX1gKTtcbiAgICAgIE1vZGVsID0gY2xhc3MgZXh0ZW5kcyBPRGF0YU1vZGVsPGFueT4ge30gYXMgdHlwZW9mIE9EYXRhTW9kZWw7XG4gICAgICAvLyBCdWlsZCBNZXRhXG4gICAgICBNb2RlbC5idWlsZE1ldGEoeyBzY2hlbWEgfSk7XG4gICAgICAvLyBDb25maWd1cmVcbiAgICAgIE1vZGVsLm1ldGEuY29uZmlndXJlKHtcbiAgICAgICAgZmluZE9wdGlvbnNGb3JUeXBlOiAodHlwZTogc3RyaW5nKSA9PiB0aGlzLmZpbmRPcHRpb25zRm9yVHlwZSh0eXBlKSxcbiAgICAgICAgb3B0aW9uczogdGhpcy5vcHRpb25zLnBhcnNlck9wdGlvbnMsXG4gICAgICB9KTtcbiAgICAgIC8vIFN0b3JlIE5ldyBNb2RlbCBmb3IgbmV4dCB0aW1lXG4gICAgICBzY2hlbWEubW9kZWwgPSBNb2RlbDtcbiAgICB9XG4gICAgcmV0dXJuIE1vZGVsO1xuICB9XG5cbiAgcHVibGljIGZpbmRDb2xsZWN0aW9uRm9yVHlwZSh0eXBlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5maW5kU3RydWN0dXJlZFR5cGVGb3JUeXBlPGFueT4odHlwZSk/LmNvbGxlY3Rpb247XG4gIH1cblxuICBwdWJsaWMgY29sbGVjdGlvbkZvclR5cGUodHlwZTogc3RyaW5nKSB7XG4gICAgbGV0IENvbGxlY3Rpb24gPSB0aGlzLmZpbmRDb2xsZWN0aW9uRm9yVHlwZSh0eXBlKTtcbiAgICBpZiAoQ29sbGVjdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBsZXQgc2NoZW1hID0gdGhpcy5maW5kU3RydWN0dXJlZFR5cGVGb3JUeXBlPGFueT4odHlwZSk7XG4gICAgICBpZiAoc2NoZW1hID09PSB1bmRlZmluZWQpIHRocm93IEVycm9yKCcnKTtcbiAgICAgIENvbGxlY3Rpb24gPSBjbGFzcyBleHRlbmRzIE9EYXRhQ29sbGVjdGlvbjxcbiAgICAgICAgYW55LFxuICAgICAgICBPRGF0YU1vZGVsPGFueT5cbiAgICAgID4ge30gYXMgdHlwZW9mIE9EYXRhQ29sbGVjdGlvbjtcbiAgICAgIENvbGxlY3Rpb24ubW9kZWwgPSB0aGlzLm1vZGVsRm9yVHlwZSh0eXBlKTtcbiAgICAgIC8vIFN0b3JlIE5ldyBDb2xsZWN0aW9uIGZvciBuZXh0IHRpbWVcbiAgICAgIHNjaGVtYS5jb2xsZWN0aW9uID0gQ29sbGVjdGlvbjtcbiAgICB9XG4gICAgcmV0dXJuIENvbGxlY3Rpb247XG4gIH1cblxuICBwdWJsaWMgZmluZFNlcnZpY2VGb3JUeXBlKHR5cGU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmZpbmRFbnRpdHlTZXRGb3JUeXBlKHR5cGUpPy5zZXJ2aWNlIGFzXG4gICAgICB8IHR5cGVvZiBPRGF0YUVudGl0eVNlcnZpY2VcbiAgICAgIHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIGZpbmRFbnRpdHlTZXRGb3JFbnRpdHlUeXBlKGVudGl0eVR5cGU6IHN0cmluZykge1xuICAgIGlmICh0aGlzLm1lbW8uZm9yVHlwZS5lbnRpdHlTZXQuaGFzKGVudGl0eVR5cGUpKSB7XG4gICAgICByZXR1cm4gdGhpcy5tZW1vLmZvclR5cGUuZW50aXR5U2V0LmdldChlbnRpdHlUeXBlKSBhc1xuICAgICAgICB8IE9EYXRhRW50aXR5U2V0XG4gICAgICAgIHwgdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBlbnRpdHlTZXQgPSB0aGlzLnNjaGVtYXNcbiAgICAgIC5yZWR1Y2UoXG4gICAgICAgIChhY2MsIHNjaGVtYSkgPT4gWy4uLmFjYywgLi4uc2NoZW1hLmVudGl0eVNldHNdLFxuICAgICAgICA8T0RhdGFFbnRpdHlTZXRbXT5bXVxuICAgICAgKVxuICAgICAgLmZpbmQoKGUpID0+IGUuZW50aXR5VHlwZSA9PT0gZW50aXR5VHlwZSk7XG4gICAgdGhpcy5tZW1vLmZvclR5cGUuZW50aXR5U2V0LnNldChlbnRpdHlUeXBlLCBlbnRpdHlTZXQpO1xuICAgIHJldHVybiBlbnRpdHlTZXQ7XG4gIH1cblxuICBwdWJsaWMgZmluZFNlcnZpY2VGb3JFbnRpdHlUeXBlKGVudGl0eVR5cGU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmZpbmRFbnRpdHlTZXRGb3JFbnRpdHlUeXBlKGVudGl0eVR5cGUpPy5zZXJ2aWNlIGFzXG4gICAgICB8IHR5cGVvZiBPRGF0YUVudGl0eVNlcnZpY2VcbiAgICAgIHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIGZpbmRFbnVtVHlwZUJ5TmFtZTxUPihuYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5tZW1vLmJ5TmFtZS5lbnVtLmhhcyhuYW1lKSkge1xuICAgICAgcmV0dXJuIHRoaXMubWVtby5ieU5hbWUuZW51bS5nZXQobmFtZSkgYXMgT0RhdGFFbnVtVHlwZTxUPiB8IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgZW51bVR5cGUgPSB0aGlzLnNjaGVtYXNcbiAgICAgIC5yZWR1Y2UoXG4gICAgICAgIChhY2MsIHNjaGVtYSkgPT4gWy4uLmFjYywgLi4uc2NoZW1hLmVudW1zXSxcbiAgICAgICAgPE9EYXRhRW51bVR5cGU8VD5bXT5bXVxuICAgICAgKVxuICAgICAgLmZpbmQoKGUpID0+IGUubmFtZSA9PT0gbmFtZSk7XG4gICAgdGhpcy5tZW1vLmJ5TmFtZS5lbnVtLnNldChuYW1lLCBlbnVtVHlwZSk7XG4gICAgcmV0dXJuIGVudW1UeXBlO1xuICB9XG5cbiAgcHVibGljIGZpbmRTdHJ1Y3R1cmVkVHlwZUJ5TmFtZTxUPihuYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5tZW1vLmJ5TmFtZS5zdHJ1Y3R1cmVkLmhhcyhuYW1lKSkge1xuICAgICAgcmV0dXJuIHRoaXMubWVtby5ieU5hbWUuc3RydWN0dXJlZC5nZXQobmFtZSkgYXNcbiAgICAgICAgfCBPRGF0YVN0cnVjdHVyZWRUeXBlPFQ+XG4gICAgICAgIHwgdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBzdHJ1Y3R1cmVkVHlwZSA9IHRoaXMuc2NoZW1hc1xuICAgICAgLnJlZHVjZShcbiAgICAgICAgKGFjYywgc2NoZW1hKSA9PiBbLi4uYWNjLCAuLi5zY2hlbWEuZW50aXRpZXNdLFxuICAgICAgICA8T0RhdGFTdHJ1Y3R1cmVkVHlwZTxUPltdPltdXG4gICAgICApXG4gICAgICAuZmluZCgoZSkgPT4gZS5uYW1lID09PSBuYW1lKTtcbiAgICB0aGlzLm1lbW8uYnlOYW1lLnN0cnVjdHVyZWQuc2V0KG5hbWUsIHN0cnVjdHVyZWRUeXBlKTtcbiAgICByZXR1cm4gc3RydWN0dXJlZFR5cGU7XG4gIH1cblxuICBwdWJsaWMgZmluZENhbGxhYmxlQnlOYW1lPFQ+KG5hbWU6IHN0cmluZywgYmluZGluZ1R5cGU/OiBzdHJpbmcpIHtcbiAgICBjb25zdCBrZXkgPSBiaW5kaW5nVHlwZSAhPT0gdW5kZWZpbmVkID8gYCR7YmluZGluZ1R5cGV9LyR7bmFtZX1gIDogbmFtZTtcbiAgICBpZiAodGhpcy5tZW1vLmJ5TmFtZS5jYWxsYWJsZS5oYXMoa2V5KSkge1xuICAgICAgcmV0dXJuIHRoaXMubWVtby5ieU5hbWUuY2FsbGFibGUuZ2V0KGtleSkgYXMgT0RhdGFDYWxsYWJsZTxUPiB8IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgY2FsbGFibGUgPSB0aGlzLnNjaGVtYXNcbiAgICAgIC5yZWR1Y2UoXG4gICAgICAgIChhY2MsIHNjaGVtYSkgPT4gWy4uLmFjYywgLi4uc2NoZW1hLmNhbGxhYmxlc10sXG4gICAgICAgIDxPRGF0YUNhbGxhYmxlPFQ+W10+W11cbiAgICAgIClcbiAgICAgIC5maW5kKFxuICAgICAgICAoYykgPT5cbiAgICAgICAgICBjLm5hbWUgPT09IG5hbWUgJiZcbiAgICAgICAgICAoYmluZGluZ1R5cGUgPT09IHVuZGVmaW5lZCB8fCBjLmJpbmRpbmcoKT8udHlwZSA9PT0gYmluZGluZ1R5cGUpXG4gICAgICApO1xuICAgIHRoaXMubWVtby5ieU5hbWUuY2FsbGFibGUuc2V0KGtleSwgY2FsbGFibGUpO1xuICAgIHJldHVybiBjYWxsYWJsZTtcbiAgfVxuXG4gIHB1YmxpYyBmaW5kRW50aXR5U2V0QnlOYW1lKG5hbWU6IHN0cmluZykge1xuICAgIGlmICh0aGlzLm1lbW8uYnlOYW1lLmVudGl0eVNldC5oYXMobmFtZSkpIHtcbiAgICAgIHJldHVybiB0aGlzLm1lbW8uYnlOYW1lLmVudGl0eVNldC5nZXQobmFtZSkgYXMgT0RhdGFFbnRpdHlTZXQgfCB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IHNjaGVtYSA9IHRoaXMuc2NoZW1hc1xuICAgICAgLnJlZHVjZShcbiAgICAgICAgKGFjYywgc2NoZW1hKSA9PiBbLi4uYWNjLCAuLi5zY2hlbWEuZW50aXR5U2V0c10sXG4gICAgICAgIDxPRGF0YUVudGl0eVNldFtdPltdXG4gICAgICApXG4gICAgICAuZmluZCgoZSkgPT4gZS5uYW1lID09PSBuYW1lKTtcbiAgICB0aGlzLm1lbW8uYnlOYW1lLmVudGl0eVNldC5zZXQobmFtZSwgc2NoZW1hKTtcbiAgICByZXR1cm4gc2NoZW1hO1xuICB9XG5cbiAgcHVibGljIGZpbmRNb2RlbEJ5TmFtZShuYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5maW5kU3RydWN0dXJlZFR5cGVCeU5hbWU8YW55PihuYW1lKT8ubW9kZWwgYXNcbiAgICAgIHwgdHlwZW9mIE9EYXRhTW9kZWxcbiAgICAgIHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIGZpbmRDb2xsZWN0aW9uQnlOYW1lKG5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmZpbmRTdHJ1Y3R1cmVkVHlwZUJ5TmFtZTxhbnk+KG5hbWUpPy5jb2xsZWN0aW9uIGFzXG4gICAgICB8IHR5cGVvZiBPRGF0YUNvbGxlY3Rpb25cbiAgICAgIHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIGZpbmRTZXJ2aWNlQnlOYW1lKG5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmZpbmRFbnRpdHlTZXRCeU5hbWUobmFtZSk/LnNlcnZpY2UgYXNcbiAgICAgIHwgdHlwZW9mIE9EYXRhRW50aXR5U2VydmljZVxuICAgICAgfCB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgcGFyc2VyRm9yVHlwZTxUPih0eXBlOiBzdHJpbmcsIGJpbmRpbmdUeXBlPzogc3RyaW5nKSB7XG4gICAgY29uc3Qga2V5ID0gYmluZGluZ1R5cGUgIT09IHVuZGVmaW5lZCA/IGAke2JpbmRpbmdUeXBlfS8ke3R5cGV9YCA6IHR5cGU7XG4gICAgaWYgKHRoaXMubWVtby5mb3JUeXBlLnBhcnNlci5oYXMoa2V5KSkge1xuICAgICAgcmV0dXJuIHRoaXMubWVtby5mb3JUeXBlLnBhcnNlci5nZXQoa2V5KSBhcyBQYXJzZXI8VD47XG4gICAgfVxuICAgIC8vIE5vbmUgUGFyc2VyIGJ5IGRlZmF1bHRcbiAgICBsZXQgcGFyc2VyOiBQYXJzZXI8VD4gPSBOT05FX1BBUlNFUjtcbiAgICBpZiAodGhpcy5wYXJzZXJzLmhhcyh0eXBlKSkge1xuICAgICAgLy8gRWRtLCBCYXNlIFBhcnNlcnNcbiAgICAgIHBhcnNlciA9IHRoaXMucGFyc2Vycy5nZXQodHlwZSkgYXMgUGFyc2VyPFQ+O1xuICAgIH0gZWxzZSBpZiAoIXR5cGUuc3RhcnRzV2l0aCgnRWRtLicpKSB7XG4gICAgICAvLyBFbnVtVHlwZSwgQ29tcGxleFR5cGUgYW5kIEVudGl0eVR5cGUgUGFyc2Vyc1xuICAgICAgbGV0IHZhbHVlID1cbiAgICAgICAgdGhpcy5maW5kQ2FsbGFibGVGb3JUeXBlPFQ+KHR5cGUsIGJpbmRpbmdUeXBlKSB8fFxuICAgICAgICB0aGlzLmZpbmRFbnVtVHlwZUZvclR5cGU8VD4odHlwZSkgfHxcbiAgICAgICAgdGhpcy5maW5kU3RydWN0dXJlZFR5cGVGb3JUeXBlPFQ+KHR5cGUpO1xuICAgICAgcGFyc2VyID0gdmFsdWU/LnBhcnNlciBhcyBQYXJzZXI8VD47XG4gICAgfVxuICAgIC8vIFNldCBQYXJzZXIgZm9yIG5leHQgdGltZVxuICAgIHRoaXMubWVtby5mb3JUeXBlLnBhcnNlci5zZXQoa2V5LCBwYXJzZXIpO1xuICAgIHJldHVybiBwYXJzZXI7XG4gIH1cblxuICBwdWJsaWMgZmluZE9wdGlvbnNGb3JUeXBlPFQ+KHR5cGU6IHN0cmluZykge1xuICAgIC8vIFN0cnVjdXRyZWQgT3B0aW9uc1xuICAgIGlmICh0aGlzLm1lbW8uZm9yVHlwZS5vcHRpb25zLmhhcyh0eXBlKSkge1xuICAgICAgcmV0dXJuIHRoaXMubWVtby5mb3JUeXBlLm9wdGlvbnMuZ2V0KHR5cGUpIGFzXG4gICAgICAgIHwgT0RhdGFNb2RlbE9wdGlvbnM8VD5cbiAgICAgICAgfCB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IHN0ID0gdGhpcy5maW5kU3RydWN0dXJlZFR5cGVGb3JUeXBlPFQ+KHR5cGUpO1xuICAgIGNvbnN0IG9wdGlvbnMgPSBzdD8ubW9kZWw/Lm1ldGE7XG4gICAgLy8gU2V0IE9wdGlvbnMgZm9yIG5leHQgdGltZVxuICAgIHRoaXMubWVtby5mb3JUeXBlLm9wdGlvbnMuc2V0KHR5cGUsIG9wdGlvbnMpO1xuICAgIHJldHVybiBvcHRpb25zO1xuICB9XG59XG4iXX0=
@@ -170,4 +170,4 @@ export class ODataCache {
170
170
  return res$;
171
171
  }
172
172
  }
173
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLW9kYXRhL3NyYy9saWIvY2FjaGUvY2FjaGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLEVBQUUsRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsZUFBZSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRXBFLE9BQU8sRUFBUyxnQkFBZ0IsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQWdCbkQsTUFBTSxPQUFnQixVQUFVO0lBSTlCLFlBQVksRUFBRSxPQUFPLEdBQUcsZUFBZSxFQUF3QjtRQUM3RCxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN2QixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksR0FBRyxFQUFnQyxDQUFDO0lBQ3pELENBQUM7SUFLRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLEdBQXNCO1FBQzFCLE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDOUMsT0FBTyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUM1QyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNULElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxnQkFBZ0IsQ0FBQyxTQUFTO2dCQUN2QyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFZLENBQUMsQ0FBQztZQUNyQyxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsRUFDRCxDQUFDLFNBQVMsQ0FBQyxDQUNaLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILElB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aUJBQ2pDLFFBQVEsRUFBRTtpQkFDVixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNoQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNWLEtBQUssSUFBSSxDQUFDLElBQUksUUFBUSxFQUFFO1lBQ3RCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7U0FDeEI7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUsIG9mLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBzdGFydFdpdGgsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IENBQ0hFX0tFWV9TRVBBUkFUT1IsIERFRkFVTFRfVElNRU9VVCB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBPRGF0YUJhdGNoUmVzb3VyY2UsIE9EYXRhUmVxdWVzdCwgT0RhdGFSZXNwb25zZSB9IGZyb20gJy4uL3Jlc291cmNlcyc7XG5pbXBvcnQgeyBDYWNoZSwgUGF0aFNlZ21lbnROYW1lcyB9IGZyb20gJy4uL3R5cGVzJztcblxuLyoqXG4gKiBBIGNhY2hlIGVudHJ5IHRoYXQgaG9sZHMgYSBwYXlsb2FkLCBhIGxhc3QgcmVhZCB0aW1lLCBhbmQgYSB0aW1lb3V0IGZvciB0aGUgZW50cnkuXG4gKiBAcGFyYW0gcGF5bG9hZCBUaGUgcGF5bG9hZCB0byBjYWNoZS5cbiAqIEBwYXJhbSBsYXN0UmVhZCBUaGUgbGFzdCByZWFkIHRpbWUuXG4gKiBAcGFyYW0gdGltZW91dCBUaGUgdGltZW91dC5cbiAqIEBwYXJhbSB0YWdzIFNvbWUgdGFncyB0byBpZGVudGlmeSB0aGUgZW50cnkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT0RhdGFDYWNoZUVudHJ5PFQ+IHtcbiAgcGF5bG9hZDogVDtcbiAgbGFzdFJlYWQ6IG51bWJlcjtcbiAgdGltZW91dDogbnVtYmVyO1xuICB0YWdzOiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE9EYXRhQ2FjaGUgaW1wbGVtZW50cyBDYWNoZSB7XG4gIHRpbWVvdXQ6IG51bWJlcjtcbiAgZW50cmllczogTWFwPHN0cmluZywgT0RhdGFDYWNoZUVudHJ5PGFueT4+O1xuXG4gIGNvbnN0cnVjdG9yKHsgdGltZW91dCA9IERFRkFVTFRfVElNRU9VVCB9OiB7IHRpbWVvdXQ/OiBudW1iZXIgfSkge1xuICAgIHRoaXMudGltZW91dCA9IHRpbWVvdXQ7XG4gICAgdGhpcy5lbnRyaWVzID0gbmV3IE1hcDxzdHJpbmcsIE9EYXRhQ2FjaGVFbnRyeTxhbnk+PigpO1xuICB9XG5cbiAgYWJzdHJhY3QgZ2V0UmVzcG9uc2UocmVxOiBPRGF0YVJlcXVlc3Q8YW55Pik6IE9EYXRhUmVzcG9uc2U8YW55PiB8IHVuZGVmaW5lZDtcbiAgYWJzdHJhY3QgcHV0UmVzcG9uc2UocmVxOiBPRGF0YVJlcXVlc3Q8YW55PiwgcmVzOiBPRGF0YVJlc3BvbnNlPGFueT4pOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBVc2luZyB0aGUgcmVzb3VyY2Ugb24gdGhlIHJlcXVlc3QgYnVpbGQgYW4gYXJyYXkgb2Ygc3RyaW5nIHRvIGlkZW50aWZ5IHRoZSBzY29wZSBvZiB0aGUgcmVxdWVzdCBcbiAgICogQHBhcmFtIHJlcSBUaGUgcmVxdWVzdCB3aXRoIHRoZSByZXNvdXJjZSB0byBidWlsZCB0aGUgc2NvcGVcbiAgICogQHJldHVybnMgQXJyYXkgb2Ygc3RyaW5nIHRvIGlkZW50aWZ5IHRoZSBzY29wZSBvZiB0aGUgcmVxdWVzdCBcbiAgICovXG4gIHNjb3BlKHJlcTogT0RhdGFSZXF1ZXN0PGFueT4pOiBzdHJpbmdbXSB7XG4gICAgY29uc3Qgc2VnbWVudHMgPSByZXEucmVzb3VyY2UuY2xvbmVTZWdtZW50cygpO1xuICAgIHJldHVybiBzZWdtZW50cy5zZWdtZW50cyh7IGtleTogdHJ1ZSB9KS5yZWR1Y2UoXG4gICAgICAoYWNjLCBzKSA9PiB7XG4gICAgICAgIGlmIChzLm5hbWUgPT09IFBhdGhTZWdtZW50TmFtZXMuZW50aXR5U2V0KVxuICAgICAgICAgIGFjYyA9IFsuLi5hY2MsIHMucGF0aCgpIGFzIHN0cmluZ107XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LFxuICAgICAgWydyZXF1ZXN0J11cbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFVzaW5nIHRoZSBvZGF0YSBjb250ZXh0IG9uIHRoZSByZXNwb25zZSBidWlsZCBhbiBhcnJheSBvZiBzdHJpbmcgdG8gaWRlbnRpZnkgdGhlIHRhZ3Mgb2YgdGhlIHJlc3BvbnNlXG4gICAqIEBwYXJhbSByZXMgVGhlIHJlc3BvbnNlIHRvIGJ1aWxkIHRoZSB0YWdzXG4gICAqIEByZXR1cm5zIEFycmF5IG9mIHN0cmluZyB0byBpZGVudGlmeSB0aGUgdGFncyBvZiB0aGUgcmVzcG9uc2VcbiAgICovXG4gIHRhZ3MocmVzOiBPRGF0YVJlc3BvbnNlPGFueT4pOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgdGFncyA9IFtdO1xuICAgIGNvbnN0IGNvbnRleHQgPSByZXMuY29udGV4dDtcbiAgICBpZiAoY29udGV4dC5lbnRpdHlTZXQpIHtcbiAgICAgIHRhZ3MucHVzaChcbiAgICAgICAgY29udGV4dC5rZXkgPyBgJHtjb250ZXh0LmVudGl0eVNldH0oJHtjb250ZXh0LmtleX0pYCA6IGNvbnRleHQuZW50aXR5U2V0XG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoY29udGV4dC50eXBlKSB0YWdzLnB1c2goY29udGV4dC50eXBlKTtcbiAgICByZXR1cm4gdGFncztcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBhbiBlbnRyeSBmcm9tIGEgcGF5bG9hZCBhbmQgc29tZSBvcHRpb25zIFxuICAgKiBAcGFyYW0gcGF5bG9hZCBUaGUgcGF5bG9hZCB0byBzdG9yZSBpbiB0aGUgY2FjaGVcbiAgICogQHBhcmFtIHRpbWVvdXQgVGhlIHRpbWVvdXQgZm9yIHRoZSBlbnRyeVxuICAgKiBAcGFyYW0gdGFncyBUaGUgdGFncyBmb3IgdGhlIGVudHJ5IFxuICAgKiBAcmV0dXJucyBUaGUgZW50cnkgdG8gc3RvcmUgaW4gdGhlIGNhY2hlIFxuICAgKi9cbiAgYnVpbGRFbnRyeTxUPihcbiAgICBwYXlsb2FkOiBULFxuICAgIHsgdGltZW91dCwgdGFncyB9OiB7IHRpbWVvdXQ/OiBudW1iZXI7IHRhZ3M/OiBzdHJpbmdbXSB9XG4gICk6IE9EYXRhQ2FjaGVFbnRyeTxUPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBheWxvYWQsXG4gICAgICBsYXN0UmVhZDogRGF0ZS5ub3coKSxcbiAgICAgIHRpbWVvdXQ6IHRpbWVvdXQgfHwgdGhpcy50aW1lb3V0LFxuICAgICAgdGFnczogdGFncyB8fCBbXSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGEga2V5IGZyb20gc3RvcmUgYW4gZW50cnkgaW4gdGhlIGNhY2hlIFxuICAgKiBAcGFyYW0gbmFtZXMgVGhlIG5hbWVzIG9mIHRoZSBlbnRyeVxuICAgKiBAcmV0dXJucyBUaGUga2V5IGZvciB0aGUgZW50cnkgXG4gICAqL1xuICBidWlsZEtleShuYW1lczogc3RyaW5nW10pOiBzdHJpbmcge1xuICAgIHJldHVybiBuYW1lcy5qb2luKENBQ0hFX0tFWV9TRVBBUkFUT1IpO1xuICB9XG5cbiAgLyoqXG4gICAqIFB1dCBzb21lIHBheWxvYWQgaW4gdGhlIGNhY2hlIFxuICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBmb3IgdGhlIGVudHJ5IFxuICAgKiBAcGFyYW0gcGF5bG9hZCBUaGUgcGF5bG9hZCB0byBzdG9yZSBpbiB0aGUgY2FjaGUgXG4gICAqIEBwYXJhbSB0aW1lb3V0IFRoZSB0aW1lb3V0IGZvciB0aGUgZW50cnkgXG4gICAqIEBwYXJhbSBzY29wZSBUaGUgc2NvcGUgZm9yIHRoZSBlbnRyeSBcbiAgICogQHBhcmFtIHRhZ3MgVGhlIHRhZ3MgZm9yIHRoZSBlbnRyeVxuICAgKi9cbiAgcHV0PFQ+KFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBwYXlsb2FkOiBULFxuICAgIHtcbiAgICAgIHRpbWVvdXQsXG4gICAgICBzY29wZSxcbiAgICAgIHRhZ3MsXG4gICAgfTogeyB0aW1lb3V0PzogbnVtYmVyOyBzY29wZT86IHN0cmluZ1tdOyB0YWdzPzogc3RyaW5nW10gfSA9IHt9XG4gICkge1xuICAgIGNvbnN0IGVudHJ5ID0gdGhpcy5idWlsZEVudHJ5PFQ+KHBheWxvYWQsIHsgdGltZW91dCwgdGFncyB9KTtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmJ1aWxkS2V5KFsuLi4oc2NvcGUgfHwgW10pLCBuYW1lXSk7XG4gICAgdGhpcy5lbnRyaWVzLnNldChrZXksIGVudHJ5KTtcbiAgICB0aGlzLmZvcmdldCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgcGF5bG9hZCBmcm9tIHRoZSBjYWNoZSBpZiBpdCBleGlzdHMgYW5kIGlzIG5vdCBleHBpcmVkXG4gICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBlbnRyeVxuICAgKiBAcGFyYW0gc2NvcGUgVGhlIHNjb3BlIG9mIHRoZSBlbnRyeVxuICAgKiBAcmV0dXJucyBUaGUgcGF5bG9hZCBvZiB0aGUgZW50cnkgXG4gICAqL1xuICBnZXQ8VD4obmFtZTogc3RyaW5nLCB7IHNjb3BlIH06IHsgc2NvcGU/OiBzdHJpbmdbXSB9ID0ge30pOiBUIHtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmJ1aWxkS2V5KFsuLi4oc2NvcGUgfHwgW10pLCBuYW1lXSk7XG4gICAgY29uc3QgZW50cnkgPSB0aGlzLmVudHJpZXMuZ2V0KGtleSk7XG4gICAgcmV0dXJuIGVudHJ5ICE9PSB1bmRlZmluZWQgJiYgIXRoaXMuaXNFeHBpcmVkKGVudHJ5KVxuICAgICAgPyBlbnRyeS5wYXlsb2FkXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYWxsIGNhY2hlIGVudHJpZXMgdGhhdCBhcmUgbWF0Y2hpbmcgd2l0aCB0aGUgZ2l2ZW4gb3B0aW9ucyBcbiAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgdG8gZm9yZ2V0XG4gICAqL1xuICBmb3JnZXQoe1xuICAgIG5hbWUsXG4gICAgc2NvcGUgPSBbXSxcbiAgICB0YWdzID0gW10sXG4gIH06IHsgbmFtZT86IHN0cmluZzsgc2NvcGU/OiBzdHJpbmdbXTsgdGFncz86IHN0cmluZ1tdIH0gPSB7fSkge1xuICAgIGlmIChuYW1lICE9PSB1bmRlZmluZWQpIHNjb3BlLnB1c2gobmFtZSk7XG4gICAgY29uc3Qga2V5ID0gc2NvcGUubGVuZ3RoID4gMCA/IHRoaXMuYnVpbGRLZXkoc2NvcGUpIDogdW5kZWZpbmVkO1xuICAgIHRoaXMuZW50cmllcy5mb3JFYWNoKChlbnRyeSwgaykgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmlzRXhwaXJlZChlbnRyeSkgfHwgLy8gRXhwaXJlZFxuICAgICAgICAoa2V5ICE9PSB1bmRlZmluZWQgJiYgay5zdGFydHNXaXRoKGtleSkpIHx8IC8vIEtleVxuICAgICAgICAodGFncy5sZW5ndGggPiAwICYmIHRhZ3Muc29tZSgodCkgPT4gZW50cnkudGFncy5pbmRleE9mKHQpICE9PSAtMSkpIC8vIFRhZ3NcbiAgICAgICkge1xuICAgICAgICB0aGlzLmVudHJpZXMuZGVsZXRlKGspO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhbGwgY2FjaGUgZW50cmllc1xuICAgKi9cbiAgZmx1c2goKSB7XG4gICAgdGhpcy5lbnRyaWVzID0gbmV3IE1hcDxzdHJpbmcsIE9EYXRhQ2FjaGVFbnRyeTxhbnk+PigpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHRoZSBlbnRyeSBpcyBleHBpcmVkIFxuICAgKiBAcGFyYW0gZW50cnkgVGhlIGNhY2hlIGVudHJ5XG4gICAqIEByZXR1cm5zIEJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGUgZW50cnkgaXMgZXhwaXJlZCBcbiAgICovXG4gIGlzRXhwaXJlZChlbnRyeTogT0RhdGFDYWNoZUVudHJ5PGFueT4pIHtcbiAgICByZXR1cm4gZW50cnkubGFzdFJlYWQgPCBEYXRlLm5vdygpIC0gKGVudHJ5LnRpbWVvdXQgfHwgdGhpcy50aW1lb3V0KSAqIDEwMDA7XG4gIH1cblxuICAvKipcbiAgICogVXNpbmcgdGhlIHJlcXVlc3QsIGhhbmRsZSB0aGUgZmV0Y2hpbmcgb2YgdGhlIHJlc3BvbnNlXG4gICAqIEBwYXJhbSByZXEgVGhlIHJlcXVlc3QgdG8gZmV0Y2hcbiAgICogQHBhcmFtIHJlcyQgT2JzZXJ2YWJsZSBvZiB0aGUgcmVzcG9uc2VcbiAgICogQHJldHVybnMgXG4gICAqL1xuICBoYW5kbGVSZXF1ZXN0KFxuICAgIHJlcTogT0RhdGFSZXF1ZXN0PGFueT4sXG4gICAgcmVzJDogT2JzZXJ2YWJsZTxPRGF0YVJlc3BvbnNlPGFueT4+XG4gICk6IE9ic2VydmFibGU8T0RhdGFSZXNwb25zZTxhbnk+PiB7XG4gICAgcmV0dXJuIHJlcS5pc0ZldGNoKClcbiAgICAgID8gdGhpcy5oYW5kbGVGZXRjaChyZXEsIHJlcyQpXG4gICAgICA6IHJlcS5pc011dGF0ZSgpXG4gICAgICA/IHRoaXMuaGFuZGxlTXV0YXRlKHJlcSwgcmVzJClcbiAgICAgIDogcmVzJDtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlRmV0Y2goXG4gICAgcmVxOiBPRGF0YVJlcXVlc3Q8YW55PixcbiAgICByZXMkOiBPYnNlcnZhYmxlPE9EYXRhUmVzcG9uc2U8YW55Pj5cbiAgKTogT2JzZXJ2YWJsZTxPRGF0YVJlc3BvbnNlPGFueT4+IHtcbiAgICBjb25zdCBwb2xpY3kgPSByZXEuZmV0Y2hQb2xpY3k7XG4gICAgY29uc3QgY2FjaGVkID0gdGhpcy5nZXRSZXNwb25zZShyZXEpO1xuICAgIGlmIChwb2xpY3kgPT09ICduby1jYWNoZScpIHtcbiAgICAgIHJldHVybiByZXMkO1xuICAgIH1cbiAgICBpZiAocG9saWN5ID09PSAnY2FjaGUtb25seScpIHtcbiAgICAgIGlmIChjYWNoZWQpIHtcbiAgICAgICAgcmV0dXJuIG9mKGNhY2hlZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IoJ05vIENhY2hlZCcpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKFxuICAgICAgcG9saWN5ID09PSAnY2FjaGUtZmlyc3QnIHx8XG4gICAgICBwb2xpY3kgPT09ICdjYWNoZS1hbmQtbmV0d29yaycgfHxcbiAgICAgIHBvbGljeSA9PT0gJ25ldHdvcmstb25seSdcbiAgICApIHtcbiAgICAgIHJlcyQgPSByZXMkLnBpcGUoXG4gICAgICAgIHRhcCgocmVzOiBPRGF0YVJlc3BvbnNlPGFueT4pID0+IHtcbiAgICAgICAgICBpZiAocmVzLm9wdGlvbnMuY2FjaGVhYmlsaXR5ICE9PSAnbm8tc3RvcmUnKVxuICAgICAgICAgICAgdGhpcy5wdXRSZXNwb25zZShyZXEsIHJlcyk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gY2FjaGVkICE9PSB1bmRlZmluZWQgJiYgcG9saWN5ICE9PSAnbmV0d29yay1vbmx5J1xuICAgICAgPyBwb2xpY3kgPT09ICdjYWNoZS1hbmQtbmV0d29yaydcbiAgICAgICAgPyByZXMkLnBpcGUoc3RhcnRXaXRoKGNhY2hlZCkpXG4gICAgICAgIDogb2YoY2FjaGVkKVxuICAgICAgOiByZXMkO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVNdXRhdGUoXG4gICAgcmVxOiBPRGF0YVJlcXVlc3Q8YW55PixcbiAgICByZXMkOiBPYnNlcnZhYmxlPE9EYXRhUmVzcG9uc2U8YW55Pj5cbiAgKTogT2JzZXJ2YWJsZTxPRGF0YVJlc3BvbnNlPGFueT4+IHtcbiAgICBjb25zdCByZXF1ZXN0cyA9IHJlcS5pc0JhdGNoKClcbiAgICAgID8gKHJlcS5yZXNvdXJjZSBhcyBPRGF0YUJhdGNoUmVzb3VyY2UpXG4gICAgICAgICAgLnJlcXVlc3RzKClcbiAgICAgICAgICAuZmlsdGVyKChyKSA9PiByLmlzTXV0YXRlKCkpXG4gICAgICA6IFtyZXFdO1xuICAgIGZvciAodmFyIHIgb2YgcmVxdWVzdHMpIHtcbiAgICAgIGNvbnN0IHNjb3BlID0gdGhpcy5zY29wZShyKTtcbiAgICAgIHRoaXMuZm9yZ2V0KHsgc2NvcGUgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXMkO1xuICB9XG59XG4iXX0=
173
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLW9kYXRhL3NyYy9saWIvY2FjaGUvY2FjaGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLEVBQUUsRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsZUFBZSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRXBFLE9BQU8sRUFBUyxnQkFBZ0IsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQWdCbkQsTUFBTSxPQUFnQixVQUFVO0lBSTlCLFlBQVksRUFBRSxPQUFPLEdBQUcsZUFBZSxFQUF3QjtRQUM3RCxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN2QixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksR0FBRyxFQUFnQyxDQUFDO0lBQ3pELENBQUM7SUFLRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLEdBQXNCO1FBQzFCLE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDOUMsT0FBTyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUM1QyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNULElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxnQkFBZ0IsQ0FBQyxTQUFTO2dCQUN2QyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFZLENBQUMsQ0FBQztZQUNyQyxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsRUFDRCxDQUFDLFNBQVMsQ0FBQyxDQUNaLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILElBQUksQ0FBQyxHQUF1QjtRQUMxQixNQUFNLElBQUksR0FBRyxFQUFFLENBQUM7UUFDaEIsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQztRQUM1QixJQUFJLE9BQU8sQ0FBQyxTQUFTLEVBQUU7WUFDckIsSUFBSSxDQUFDLElBQUksQ0FDUCxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxTQUFTLElBQUksT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUN6RSxDQUFDO1NBQ0g7UUFDRCxJQUFJLE9BQU8sQ0FBQyxJQUFJO1lBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsVUFBVSxDQUNSLE9BQVUsRUFDVixFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQXlDO1FBRXhELE9BQU87WUFDTCxPQUFPO1lBQ1AsUUFBUSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDcEIsT0FBTyxFQUFFLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTztZQUNoQyxJQUFJLEVBQUUsSUFBSSxJQUFJLEVBQUU7U0FDakIsQ0FBQztJQUNKLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsUUFBUSxDQUFDLEtBQWU7UUFDdEIsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxHQUFHLENBQ0QsSUFBWSxFQUNaLE9BQVUsRUFDVixFQUNFLE9BQU8sRUFDUCxLQUFLLEVBQ0wsSUFBSSxNQUN1RCxFQUFFO1FBRS9ELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUksT0FBTyxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDN0QsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNwRCxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDN0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILEdBQUcsQ0FBSSxJQUFZLEVBQUUsRUFBRSxLQUFLLEtBQTJCLEVBQUU7UUFDdkQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNwRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNwQyxPQUFPLEtBQUssS0FBSyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQztZQUNsRCxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU87WUFDZixDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsRUFDTCxJQUFJLEVBQ0osS0FBSyxHQUFHLEVBQUUsRUFDVixJQUFJLEdBQUcsRUFBRSxNQUMrQyxFQUFFO1FBQzFELElBQUksSUFBSSxLQUFLLFNBQVM7WUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDaEUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDaEMsSUFDRSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLFVBQVU7Z0JBQ25DLENBQUMsR0FBRyxLQUFLLFNBQVMsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksTUFBTTtnQkFDbEQsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTztjQUMzRTtnQkFDQSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN4QjtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSztRQUNILElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxHQUFHLEVBQWdDLENBQUM7SUFDekQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxTQUFTLENBQUMsS0FBMkI7UUFDbkMsT0FBTyxLQUFLLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQztJQUM5RSxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxhQUFhLENBQ1gsR0FBc0IsRUFDdEIsSUFBb0M7UUFFcEMsT0FBTyxHQUFHLENBQUMsT0FBTyxFQUFFO1lBQ2xCLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUM7WUFDN0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUU7Z0JBQ2hCLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUM7Z0JBQzlCLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDWCxDQUFDO0lBRU8sV0FBVyxDQUNqQixHQUFzQixFQUN0QixJQUFvQztRQUVwQyxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsV0FBVyxDQUFDO1FBQy9CLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDckMsSUFBSSxNQUFNLEtBQUssVUFBVSxFQUFFO1lBQ3pCLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxJQUFJLE1BQU0sS0FBSyxZQUFZLEVBQUU7WUFDM0IsSUFBSSxNQUFNLEVBQUU7Z0JBQ1YsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDbkI7aUJBQU07Z0JBQ0wsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQzthQUNqRDtTQUNGO1FBQ0QsSUFDRSxNQUFNLEtBQUssYUFBYTtZQUN4QixNQUFNLEtBQUssbUJBQW1CO1lBQzlCLE1BQU0sS0FBSyxjQUFjLEVBQ3pCO1lBQ0EsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQ2QsR0FBRyxDQUFDLENBQUMsR0FBdUIsRUFBRSxFQUFFO2dCQUM5QixJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsWUFBWSxLQUFLLFVBQVU7b0JBQ3pDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQy9CLENBQUMsQ0FBQyxDQUNILENBQUM7U0FDSDtRQUNELE9BQU8sTUFBTSxLQUFLLFNBQVMsSUFBSSxNQUFNLEtBQUssY0FBYztZQUN0RCxDQUFDLENBQUMsTUFBTSxLQUFLLG1CQUFtQjtnQkFDOUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUM5QixDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQztZQUNkLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDWCxDQUFDO0lBRU8sWUFBWSxDQUNsQixHQUFzQixFQUN0QixJQUFvQztRQUVwQyxNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUMsT0FBTyxFQUFFO1lBQzVCLENBQUMsQ0FBRSxHQUFHLENBQUMsUUFBK0I7aUJBQ2pDLFFBQVEsRUFBRTtpQkFDVixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNoQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNWLEtBQUssSUFBSSxDQUFDLElBQUksUUFBUSxFQUFFO1lBQ3RCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7U0FDeEI7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUsIG9mLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBzdGFydFdpdGgsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IENBQ0hFX0tFWV9TRVBBUkFUT1IsIERFRkFVTFRfVElNRU9VVCB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBPRGF0YUJhdGNoUmVzb3VyY2UsIE9EYXRhUmVxdWVzdCwgT0RhdGFSZXNwb25zZSB9IGZyb20gJy4uL3Jlc291cmNlcyc7XG5pbXBvcnQgeyBDYWNoZSwgUGF0aFNlZ21lbnROYW1lcyB9IGZyb20gJy4uL3R5cGVzJztcblxuLyoqXG4gKiBBIGNhY2hlIGVudHJ5IHRoYXQgaG9sZHMgYSBwYXlsb2FkLCBhIGxhc3QgcmVhZCB0aW1lLCBhbmQgYSB0aW1lb3V0IGZvciB0aGUgZW50cnkuXG4gKiBAcGFyYW0gcGF5bG9hZCBUaGUgcGF5bG9hZCB0byBjYWNoZS5cbiAqIEBwYXJhbSBsYXN0UmVhZCBUaGUgbGFzdCByZWFkIHRpbWUuXG4gKiBAcGFyYW0gdGltZW91dCBUaGUgdGltZW91dC5cbiAqIEBwYXJhbSB0YWdzIFNvbWUgdGFncyB0byBpZGVudGlmeSB0aGUgZW50cnkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT0RhdGFDYWNoZUVudHJ5PFQ+IHtcbiAgcGF5bG9hZDogVDtcbiAgbGFzdFJlYWQ6IG51bWJlcjtcbiAgdGltZW91dDogbnVtYmVyO1xuICB0YWdzOiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE9EYXRhQ2FjaGUgaW1wbGVtZW50cyBDYWNoZSB7XG4gIHRpbWVvdXQ6IG51bWJlcjtcbiAgZW50cmllczogTWFwPHN0cmluZywgT0RhdGFDYWNoZUVudHJ5PGFueT4+O1xuXG4gIGNvbnN0cnVjdG9yKHsgdGltZW91dCA9IERFRkFVTFRfVElNRU9VVCB9OiB7IHRpbWVvdXQ/OiBudW1iZXIgfSkge1xuICAgIHRoaXMudGltZW91dCA9IHRpbWVvdXQ7XG4gICAgdGhpcy5lbnRyaWVzID0gbmV3IE1hcDxzdHJpbmcsIE9EYXRhQ2FjaGVFbnRyeTxhbnk+PigpO1xuICB9XG5cbiAgYWJzdHJhY3QgZ2V0UmVzcG9uc2UocmVxOiBPRGF0YVJlcXVlc3Q8YW55Pik6IE9EYXRhUmVzcG9uc2U8YW55PiB8IHVuZGVmaW5lZDtcbiAgYWJzdHJhY3QgcHV0UmVzcG9uc2UocmVxOiBPRGF0YVJlcXVlc3Q8YW55PiwgcmVzOiBPRGF0YVJlc3BvbnNlPGFueT4pOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBVc2luZyB0aGUgcmVzb3VyY2Ugb24gdGhlIHJlcXVlc3QgYnVpbGQgYW4gYXJyYXkgb2Ygc3RyaW5nIHRvIGlkZW50aWZ5IHRoZSBzY29wZSBvZiB0aGUgcmVxdWVzdFxuICAgKiBAcGFyYW0gcmVxIFRoZSByZXF1ZXN0IHdpdGggdGhlIHJlc291cmNlIHRvIGJ1aWxkIHRoZSBzY29wZVxuICAgKiBAcmV0dXJucyBBcnJheSBvZiBzdHJpbmcgdG8gaWRlbnRpZnkgdGhlIHNjb3BlIG9mIHRoZSByZXF1ZXN0XG4gICAqL1xuICBzY29wZShyZXE6IE9EYXRhUmVxdWVzdDxhbnk+KTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHNlZ21lbnRzID0gcmVxLnJlc291cmNlLmNsb25lU2VnbWVudHMoKTtcbiAgICByZXR1cm4gc2VnbWVudHMuc2VnbWVudHMoeyBrZXk6IHRydWUgfSkucmVkdWNlKFxuICAgICAgKGFjYywgcykgPT4ge1xuICAgICAgICBpZiAocy5uYW1lID09PSBQYXRoU2VnbWVudE5hbWVzLmVudGl0eVNldClcbiAgICAgICAgICBhY2MgPSBbLi4uYWNjLCBzLnBhdGgoKSBhcyBzdHJpbmddO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSxcbiAgICAgIFsncmVxdWVzdCddXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVc2luZyB0aGUgb2RhdGEgY29udGV4dCBvbiB0aGUgcmVzcG9uc2UgYnVpbGQgYW4gYXJyYXkgb2Ygc3RyaW5nIHRvIGlkZW50aWZ5IHRoZSB0YWdzIG9mIHRoZSByZXNwb25zZVxuICAgKiBAcGFyYW0gcmVzIFRoZSByZXNwb25zZSB0byBidWlsZCB0aGUgdGFnc1xuICAgKiBAcmV0dXJucyBBcnJheSBvZiBzdHJpbmcgdG8gaWRlbnRpZnkgdGhlIHRhZ3Mgb2YgdGhlIHJlc3BvbnNlXG4gICAqL1xuICB0YWdzKHJlczogT0RhdGFSZXNwb25zZTxhbnk+KTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHRhZ3MgPSBbXTtcbiAgICBjb25zdCBjb250ZXh0ID0gcmVzLmNvbnRleHQ7XG4gICAgaWYgKGNvbnRleHQuZW50aXR5U2V0KSB7XG4gICAgICB0YWdzLnB1c2goXG4gICAgICAgIGNvbnRleHQua2V5ID8gYCR7Y29udGV4dC5lbnRpdHlTZXR9KCR7Y29udGV4dC5rZXl9KWAgOiBjb250ZXh0LmVudGl0eVNldFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGNvbnRleHQudHlwZSkgdGFncy5wdXNoKGNvbnRleHQudHlwZSk7XG4gICAgcmV0dXJuIHRhZ3M7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgYW4gZW50cnkgZnJvbSBhIHBheWxvYWQgYW5kIHNvbWUgb3B0aW9uc1xuICAgKiBAcGFyYW0gcGF5bG9hZCBUaGUgcGF5bG9hZCB0byBzdG9yZSBpbiB0aGUgY2FjaGVcbiAgICogQHBhcmFtIHRpbWVvdXQgVGhlIHRpbWVvdXQgZm9yIHRoZSBlbnRyeVxuICAgKiBAcGFyYW0gdGFncyBUaGUgdGFncyBmb3IgdGhlIGVudHJ5XG4gICAqIEByZXR1cm5zIFRoZSBlbnRyeSB0byBzdG9yZSBpbiB0aGUgY2FjaGVcbiAgICovXG4gIGJ1aWxkRW50cnk8VD4oXG4gICAgcGF5bG9hZDogVCxcbiAgICB7IHRpbWVvdXQsIHRhZ3MgfTogeyB0aW1lb3V0PzogbnVtYmVyOyB0YWdzPzogc3RyaW5nW10gfVxuICApOiBPRGF0YUNhY2hlRW50cnk8VD4ge1xuICAgIHJldHVybiB7XG4gICAgICBwYXlsb2FkLFxuICAgICAgbGFzdFJlYWQ6IERhdGUubm93KCksXG4gICAgICB0aW1lb3V0OiB0aW1lb3V0IHx8IHRoaXMudGltZW91dCxcbiAgICAgIHRhZ3M6IHRhZ3MgfHwgW10sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBhIGtleSBmcm9tIHN0b3JlIGFuIGVudHJ5IGluIHRoZSBjYWNoZVxuICAgKiBAcGFyYW0gbmFtZXMgVGhlIG5hbWVzIG9mIHRoZSBlbnRyeVxuICAgKiBAcmV0dXJucyBUaGUga2V5IGZvciB0aGUgZW50cnlcbiAgICovXG4gIGJ1aWxkS2V5KG5hbWVzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG5hbWVzLmpvaW4oQ0FDSEVfS0VZX1NFUEFSQVRPUik7XG4gIH1cblxuICAvKipcbiAgICogUHV0IHNvbWUgcGF5bG9hZCBpbiB0aGUgY2FjaGVcbiAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgZm9yIHRoZSBlbnRyeVxuICAgKiBAcGFyYW0gcGF5bG9hZCBUaGUgcGF5bG9hZCB0byBzdG9yZSBpbiB0aGUgY2FjaGVcbiAgICogQHBhcmFtIHRpbWVvdXQgVGhlIHRpbWVvdXQgZm9yIHRoZSBlbnRyeVxuICAgKiBAcGFyYW0gc2NvcGUgVGhlIHNjb3BlIGZvciB0aGUgZW50cnlcbiAgICogQHBhcmFtIHRhZ3MgVGhlIHRhZ3MgZm9yIHRoZSBlbnRyeVxuICAgKi9cbiAgcHV0PFQ+KFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBwYXlsb2FkOiBULFxuICAgIHtcbiAgICAgIHRpbWVvdXQsXG4gICAgICBzY29wZSxcbiAgICAgIHRhZ3MsXG4gICAgfTogeyB0aW1lb3V0PzogbnVtYmVyOyBzY29wZT86IHN0cmluZ1tdOyB0YWdzPzogc3RyaW5nW10gfSA9IHt9XG4gICkge1xuICAgIGNvbnN0IGVudHJ5ID0gdGhpcy5idWlsZEVudHJ5PFQ+KHBheWxvYWQsIHsgdGltZW91dCwgdGFncyB9KTtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmJ1aWxkS2V5KFsuLi4oc2NvcGUgfHwgW10pLCBuYW1lXSk7XG4gICAgdGhpcy5lbnRyaWVzLnNldChrZXksIGVudHJ5KTtcbiAgICB0aGlzLmZvcmdldCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgcGF5bG9hZCBmcm9tIHRoZSBjYWNoZSBpZiBpdCBleGlzdHMgYW5kIGlzIG5vdCBleHBpcmVkXG4gICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBlbnRyeVxuICAgKiBAcGFyYW0gc2NvcGUgVGhlIHNjb3BlIG9mIHRoZSBlbnRyeVxuICAgKiBAcmV0dXJucyBUaGUgcGF5bG9hZCBvZiB0aGUgZW50cnlcbiAgICovXG4gIGdldDxUPihuYW1lOiBzdHJpbmcsIHsgc2NvcGUgfTogeyBzY29wZT86IHN0cmluZ1tdIH0gPSB7fSk6IFQge1xuICAgIGNvbnN0IGtleSA9IHRoaXMuYnVpbGRLZXkoWy4uLihzY29wZSB8fCBbXSksIG5hbWVdKTtcbiAgICBjb25zdCBlbnRyeSA9IHRoaXMuZW50cmllcy5nZXQoa2V5KTtcbiAgICByZXR1cm4gZW50cnkgIT09IHVuZGVmaW5lZCAmJiAhdGhpcy5pc0V4cGlyZWQoZW50cnkpXG4gICAgICA/IGVudHJ5LnBheWxvYWRcbiAgICAgIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhbGwgY2FjaGUgZW50cmllcyB0aGF0IGFyZSBtYXRjaGluZyB3aXRoIHRoZSBnaXZlbiBvcHRpb25zXG4gICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHRvIGZvcmdldFxuICAgKi9cbiAgZm9yZ2V0KHtcbiAgICBuYW1lLFxuICAgIHNjb3BlID0gW10sXG4gICAgdGFncyA9IFtdLFxuICB9OiB7IG5hbWU/OiBzdHJpbmc7IHNjb3BlPzogc3RyaW5nW107IHRhZ3M/OiBzdHJpbmdbXSB9ID0ge30pIHtcbiAgICBpZiAobmFtZSAhPT0gdW5kZWZpbmVkKSBzY29wZS5wdXNoKG5hbWUpO1xuICAgIGNvbnN0IGtleSA9IHNjb3BlLmxlbmd0aCA+IDAgPyB0aGlzLmJ1aWxkS2V5KHNjb3BlKSA6IHVuZGVmaW5lZDtcbiAgICB0aGlzLmVudHJpZXMuZm9yRWFjaCgoZW50cnksIGspID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5pc0V4cGlyZWQoZW50cnkpIHx8IC8vIEV4cGlyZWRcbiAgICAgICAgKGtleSAhPT0gdW5kZWZpbmVkICYmIGsuc3RhcnRzV2l0aChrZXkpKSB8fCAvLyBLZXlcbiAgICAgICAgKHRhZ3MubGVuZ3RoID4gMCAmJiB0YWdzLnNvbWUoKHQpID0+IGVudHJ5LnRhZ3MuaW5kZXhPZih0KSAhPT0gLTEpKSAvLyBUYWdzXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5lbnRyaWVzLmRlbGV0ZShrKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYWxsIGNhY2hlIGVudHJpZXNcbiAgICovXG4gIGZsdXNoKCkge1xuICAgIHRoaXMuZW50cmllcyA9IG5ldyBNYXA8c3RyaW5nLCBPRGF0YUNhY2hlRW50cnk8YW55Pj4oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0aGUgZW50cnkgaXMgZXhwaXJlZFxuICAgKiBAcGFyYW0gZW50cnkgVGhlIGNhY2hlIGVudHJ5XG4gICAqIEByZXR1cm5zIEJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGUgZW50cnkgaXMgZXhwaXJlZFxuICAgKi9cbiAgaXNFeHBpcmVkKGVudHJ5OiBPRGF0YUNhY2hlRW50cnk8YW55Pikge1xuICAgIHJldHVybiBlbnRyeS5sYXN0UmVhZCA8IERhdGUubm93KCkgLSAoZW50cnkudGltZW91dCB8fCB0aGlzLnRpbWVvdXQpICogMTAwMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBVc2luZyB0aGUgcmVxdWVzdCwgaGFuZGxlIHRoZSBmZXRjaGluZyBvZiB0aGUgcmVzcG9uc2VcbiAgICogQHBhcmFtIHJlcSBUaGUgcmVxdWVzdCB0byBmZXRjaFxuICAgKiBAcGFyYW0gcmVzJCBPYnNlcnZhYmxlIG9mIHRoZSByZXNwb25zZVxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgaGFuZGxlUmVxdWVzdChcbiAgICByZXE6IE9EYXRhUmVxdWVzdDxhbnk+LFxuICAgIHJlcyQ6IE9ic2VydmFibGU8T0RhdGFSZXNwb25zZTxhbnk+PlxuICApOiBPYnNlcnZhYmxlPE9EYXRhUmVzcG9uc2U8YW55Pj4ge1xuICAgIHJldHVybiByZXEuaXNGZXRjaCgpXG4gICAgICA/IHRoaXMuaGFuZGxlRmV0Y2gocmVxLCByZXMkKVxuICAgICAgOiByZXEuaXNNdXRhdGUoKVxuICAgICAgPyB0aGlzLmhhbmRsZU11dGF0ZShyZXEsIHJlcyQpXG4gICAgICA6IHJlcyQ7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUZldGNoKFxuICAgIHJlcTogT0RhdGFSZXF1ZXN0PGFueT4sXG4gICAgcmVzJDogT2JzZXJ2YWJsZTxPRGF0YVJlc3BvbnNlPGFueT4+XG4gICk6IE9ic2VydmFibGU8T0RhdGFSZXNwb25zZTxhbnk+PiB7XG4gICAgY29uc3QgcG9saWN5ID0gcmVxLmZldGNoUG9saWN5O1xuICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMuZ2V0UmVzcG9uc2UocmVxKTtcbiAgICBpZiAocG9saWN5ID09PSAnbm8tY2FjaGUnKSB7XG4gICAgICByZXR1cm4gcmVzJDtcbiAgICB9XG4gICAgaWYgKHBvbGljeSA9PT0gJ2NhY2hlLW9ubHknKSB7XG4gICAgICBpZiAoY2FjaGVkKSB7XG4gICAgICAgIHJldHVybiBvZihjYWNoZWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKCdObyBDYWNoZWQnKSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChcbiAgICAgIHBvbGljeSA9PT0gJ2NhY2hlLWZpcnN0JyB8fFxuICAgICAgcG9saWN5ID09PSAnY2FjaGUtYW5kLW5ldHdvcmsnIHx8XG4gICAgICBwb2xpY3kgPT09ICduZXR3b3JrLW9ubHknXG4gICAgKSB7XG4gICAgICByZXMkID0gcmVzJC5waXBlKFxuICAgICAgICB0YXAoKHJlczogT0RhdGFSZXNwb25zZTxhbnk+KSA9PiB7XG4gICAgICAgICAgaWYgKHJlcy5vcHRpb25zLmNhY2hlYWJpbGl0eSAhPT0gJ25vLXN0b3JlJylcbiAgICAgICAgICAgIHRoaXMucHV0UmVzcG9uc2UocmVxLCByZXMpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGNhY2hlZCAhPT0gdW5kZWZpbmVkICYmIHBvbGljeSAhPT0gJ25ldHdvcmstb25seSdcbiAgICAgID8gcG9saWN5ID09PSAnY2FjaGUtYW5kLW5ldHdvcmsnXG4gICAgICAgID8gcmVzJC5waXBlKHN0YXJ0V2l0aChjYWNoZWQpKVxuICAgICAgICA6IG9mKGNhY2hlZClcbiAgICAgIDogcmVzJDtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlTXV0YXRlKFxuICAgIHJlcTogT0RhdGFSZXF1ZXN0PGFueT4sXG4gICAgcmVzJDogT2JzZXJ2YWJsZTxPRGF0YVJlc3BvbnNlPGFueT4+XG4gICk6IE9ic2VydmFibGU8T0RhdGFSZXNwb25zZTxhbnk+PiB7XG4gICAgY29uc3QgcmVxdWVzdHMgPSByZXEuaXNCYXRjaCgpXG4gICAgICA/IChyZXEucmVzb3VyY2UgYXMgT0RhdGFCYXRjaFJlc291cmNlKVxuICAgICAgICAgIC5yZXF1ZXN0cygpXG4gICAgICAgICAgLmZpbHRlcigocikgPT4gci5pc011dGF0ZSgpKVxuICAgICAgOiBbcmVxXTtcbiAgICBmb3IgKHZhciByIG9mIHJlcXVlc3RzKSB7XG4gICAgICBjb25zdCBzY29wZSA9IHRoaXMuc2NvcGUocik7XG4gICAgICB0aGlzLmZvcmdldCh7IHNjb3BlIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzJDtcbiAgfVxufVxuIl19
@@ -27,4 +27,4 @@ export class ODataInMemoryCache extends ODataCache {
27
27
  return this.get(req.cacheKey, { scope });
28
28
  }
29
29
  }
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtb3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1vZGF0YS9zcmMvbGliL2NhY2hlL21lbW9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRXJDLE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxVQUFVO0lBQ2hELFlBQVksRUFBRSxPQUFPLEtBQTJCLEVBQUU7UUFDaEQsS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFdBQVcsQ0FBQyxHQUFzQixFQUFFLEdBQXVCO1FBQ3pELElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDNUIsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMxQixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFO1lBQzFCLE9BQU8sRUFBRSxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU07WUFDM0IsS0FBSztZQUNMLElBQUk7U0FDTCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFdBQVcsQ0FBQyxHQUFzQjtRQUNoQyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzVCLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUMzQyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IE9EYXRhUmVxdWVzdCwgT0RhdGFSZXNwb25zZSB9IGZyb20gJy4uL3Jlc291cmNlcyc7XG5pbXBvcnQgeyBPRGF0YUNhY2hlIH0gZnJvbSAnLi9jYWNoZSc7XG5cbmV4cG9ydCBjbGFzcyBPRGF0YUluTWVtb3J5Q2FjaGUgZXh0ZW5kcyBPRGF0YUNhY2hlIHtcbiAgY29uc3RydWN0b3IoeyB0aW1lb3V0IH06IHsgdGltZW91dD86IG51bWJlciB9ID0ge30pIHtcbiAgICBzdXBlcih7IHRpbWVvdXQgfSk7XG4gIH1cblxuICAvKipcbiAgICogU3RvcmUgdGhlIHJlc3BvbnNlIGluIHRoZSBjYWNoZSBcbiAgICogQHBhcmFtIHJlcSBUaGUgcmVxdWVzdCB3aXRoIHRoZSByZXNvdXJjZSB0byBzdG9yZSB0aGUgcmVzcG9uc2VcbiAgICogQHBhcmFtIHJlcyBUaGUgcmVzcG9uc2UgdG8gc3RvcmUgaW4gdGhlIGNhY2hlXG4gICAqL1xuICBwdXRSZXNwb25zZShyZXE6IE9EYXRhUmVxdWVzdDxhbnk+LCByZXM6IE9EYXRhUmVzcG9uc2U8YW55Pikge1xuICAgIGxldCBzY29wZSA9IHRoaXMuc2NvcGUocmVxKTtcbiAgICBsZXQgdGFncyA9IHRoaXMudGFncyhyZXMpO1xuICAgIHRoaXMucHV0KHJlcS5jYWNoZUtleSwgcmVzLCB7XG4gICAgICB0aW1lb3V0OiByZXMub3B0aW9ucy5tYXhBZ2UsXG4gICAgICBzY29wZSxcbiAgICAgIHRhZ3MsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVzdG9yZSB0aGUgcmVzcG9uc2UgZnJvbSB0aGUgY2FjaGVcbiAgICogQHBhcmFtIHJlcSBUaGUgcmVxdWVzdCB3aXRoIHRoZSByZXNvdXJjZSB0byBnZXQgdGhlIHJlc3BvbnNlXG4gICAqIEByZXR1cm5zIFRoZSByZXNwb25zZSBmcm9tIHRoZSBjYWNoZVxuICAgKi9cbiAgZ2V0UmVzcG9uc2UocmVxOiBPRGF0YVJlcXVlc3Q8YW55Pik6IE9EYXRhUmVzcG9uc2U8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgbGV0IHNjb3BlID0gdGhpcy5zY29wZShyZXEpO1xuICAgIHJldHVybiB0aGlzLmdldChyZXEuY2FjaGVLZXksIHsgc2NvcGUgfSk7XG4gIH1cbn1cbiJdfQ==
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtb3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1vZGF0YS9zcmMvbGliL2NhY2hlL21lbW9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRXJDLE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxVQUFVO0lBQ2hELFlBQVksRUFBRSxPQUFPLEtBQTJCLEVBQUU7UUFDaEQsS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFdBQVcsQ0FBQyxHQUFzQixFQUFFLEdBQXVCO1FBQ3pELElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDNUIsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMxQixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFO1lBQzFCLE9BQU8sRUFBRSxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU07WUFDM0IsS0FBSztZQUNMLElBQUk7U0FDTCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFdBQVcsQ0FBQyxHQUFzQjtRQUNoQyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzVCLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUMzQyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IE9EYXRhUmVxdWVzdCwgT0RhdGFSZXNwb25zZSB9IGZyb20gJy4uL3Jlc291cmNlcyc7XG5pbXBvcnQgeyBPRGF0YUNhY2hlIH0gZnJvbSAnLi9jYWNoZSc7XG5cbmV4cG9ydCBjbGFzcyBPRGF0YUluTWVtb3J5Q2FjaGUgZXh0ZW5kcyBPRGF0YUNhY2hlIHtcbiAgY29uc3RydWN0b3IoeyB0aW1lb3V0IH06IHsgdGltZW91dD86IG51bWJlciB9ID0ge30pIHtcbiAgICBzdXBlcih7IHRpbWVvdXQgfSk7XG4gIH1cblxuICAvKipcbiAgICogU3RvcmUgdGhlIHJlc3BvbnNlIGluIHRoZSBjYWNoZVxuICAgKiBAcGFyYW0gcmVxIFRoZSByZXF1ZXN0IHdpdGggdGhlIHJlc291cmNlIHRvIHN0b3JlIHRoZSByZXNwb25zZVxuICAgKiBAcGFyYW0gcmVzIFRoZSByZXNwb25zZSB0byBzdG9yZSBpbiB0aGUgY2FjaGVcbiAgICovXG4gIHB1dFJlc3BvbnNlKHJlcTogT0RhdGFSZXF1ZXN0PGFueT4sIHJlczogT0RhdGFSZXNwb25zZTxhbnk+KSB7XG4gICAgbGV0IHNjb3BlID0gdGhpcy5zY29wZShyZXEpO1xuICAgIGxldCB0YWdzID0gdGhpcy50YWdzKHJlcyk7XG4gICAgdGhpcy5wdXQocmVxLmNhY2hlS2V5LCByZXMsIHtcbiAgICAgIHRpbWVvdXQ6IHJlcy5vcHRpb25zLm1heEFnZSxcbiAgICAgIHNjb3BlLFxuICAgICAgdGFncyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXN0b3JlIHRoZSByZXNwb25zZSBmcm9tIHRoZSBjYWNoZVxuICAgKiBAcGFyYW0gcmVxIFRoZSByZXF1ZXN0IHdpdGggdGhlIHJlc291cmNlIHRvIGdldCB0aGUgcmVzcG9uc2VcbiAgICogQHJldHVybnMgVGhlIHJlc3BvbnNlIGZyb20gdGhlIGNhY2hlXG4gICAqL1xuICBnZXRSZXNwb25zZShyZXE6IE9EYXRhUmVxdWVzdDxhbnk+KTogT0RhdGFSZXNwb25zZTxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICBsZXQgc2NvcGUgPSB0aGlzLnNjb3BlKHJlcSk7XG4gICAgcmV0dXJuIHRoaXMuZ2V0KHJlcS5jYWNoZUtleSwgeyBzY29wZSB9KTtcbiAgfVxufVxuIl19
@@ -52,4 +52,4 @@ export class ODataInStorageCache extends ODataCache {
52
52
  return data !== undefined ? ODataResponse.fromJSON(req, data) : undefined;
53
53
  }
54
54
  }
55
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItb2RhdGEvc3JjL2xpYi9jYWNoZS9zdG9yYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZ0IsYUFBYSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzNELE9BQU8sRUFBRSxVQUFVLEVBQW1CLE1BQU0sU0FBUyxDQUFDO0FBVXRELE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxVQUFVO0lBSWpELFlBQVksRUFDVixJQUFJLEVBQ0osT0FBTyxHQUFHLGNBQWMsRUFDeEIsT0FBTyxHQUtSO1FBQ0MsS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUNuQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN2QixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDZixNQUFNLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUs7UUFDSCxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FDbEIsSUFBSSxDQUFDLElBQUksRUFDVCxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQ25ELENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSCxPQUFPO1FBQ0wsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLEdBQUcsQ0FDcEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLENBQ3BELENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDTSxLQUFLO1FBQ1osS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2QsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2YsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxXQUFXLENBQUMsR0FBc0IsRUFBRSxHQUF1QjtRQUN6RCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzlCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLEdBQUcsQ0FBZSxHQUFHLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNqRCxPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNO1lBQzNCLEtBQUs7WUFDTCxJQUFJO1NBQ0wsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxXQUFXLENBQUMsR0FBc0I7UUFDaEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM5QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFlLEdBQUcsQ0FBQyxRQUFRLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBRTdELE9BQU8sSUFBSSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUM1RSxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPRGF0YVJlcXVlc3QsIE9EYXRhUmVzcG9uc2UgfSBmcm9tICcuLi9yZXNvdXJjZXMnO1xuaW1wb3J0IHsgT0RhdGFDYWNoZSwgT0RhdGFDYWNoZUVudHJ5IH0gZnJvbSAnLi9jYWNoZSc7XG5cbmludGVyZmFjZSBSZXNwb25zZUpzb24ge1xuICBib2R5OiBhbnkgfCBudWxsO1xuICBoZWFkZXJzOiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXSB9O1xuICBzdGF0dXM6IG51bWJlcjtcbiAgc3RhdHVzVGV4dDogc3RyaW5nO1xuICB1cmw6IHN0cmluZyB8IG51bGw7XG59XG5cbmV4cG9ydCBjbGFzcyBPRGF0YUluU3RvcmFnZUNhY2hlIGV4dGVuZHMgT0RhdGFDYWNoZSB7XG4gIG5hbWU6IHN0cmluZztcbiAgc3RvcmFnZTogU3RvcmFnZTtcblxuICBjb25zdHJ1Y3Rvcih7XG4gICAgbmFtZSxcbiAgICBzdG9yYWdlID0gc2Vzc2lvblN0b3JhZ2UsXG4gICAgdGltZW91dCxcbiAgfToge1xuICAgIHRpbWVvdXQ/OiBudW1iZXI7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHN0b3JhZ2U/OiBTdG9yYWdlO1xuICB9KSB7XG4gICAgc3VwZXIoeyB0aW1lb3V0IH0pO1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgdGhpcy5zdG9yYWdlID0gc3RvcmFnZTtcbiAgICB0aGlzLnJlc3RvcmUoKTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignYmVmb3JldW5sb2FkJywgKCkgPT4gdGhpcy5zdG9yZSgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9yZSB0aGUgY2FjaGUgaW4gdGhlIHN0b3JhZ2VcbiAgICovXG4gIHN0b3JlKCkge1xuICAgIHRoaXMuc3RvcmFnZS5zZXRJdGVtKFxuICAgICAgdGhpcy5uYW1lLFxuICAgICAgSlNPTi5zdHJpbmdpZnkoQXJyYXkuZnJvbSh0aGlzLmVudHJpZXMuZW50cmllcygpKSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc3RvcmUgdGhlIGNhY2hlIGZyb20gdGhlIHN0b3JhZ2VcbiAgICovXG4gIHJlc3RvcmUoKSB7XG4gICAgdGhpcy5lbnRyaWVzID0gbmV3IE1hcDxzdHJpbmcsIE9EYXRhQ2FjaGVFbnRyeTxhbnk+PihcbiAgICAgIEpTT04ucGFyc2UodGhpcy5zdG9yYWdlLmdldEl0ZW0odGhpcy5uYW1lKSB8fCAnW10nKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRmx1c2ggdGhlIGNhY2hlIGFuZCBjbGVhbiB0aGUgc3RvcmFnZVxuICAgKi9cbiAgb3ZlcnJpZGUgZmx1c2goKSB7XG4gICAgc3VwZXIuZmx1c2goKTtcbiAgICB0aGlzLnN0b3JlKCk7XG4gIH1cblxuICAvKipcbiAgICogU3RvcmUgdGhlIHJlc3BvbnNlIGluIHRoZSBjYWNoZVxuICAgKiBAcGFyYW0gcmVxIFRoZSByZXF1ZXN0IHdpdGggdGhlIHJlc291cmNlIHRvIHN0b3JlIHRoZSByZXNwb25zZVxuICAgKiBAcGFyYW0gcmVzIFRoZSByZXNwb25zZSB0byBzdG9yZSBpbiB0aGUgY2FjaGVcbiAgICovXG4gIHB1dFJlc3BvbnNlKHJlcTogT0RhdGFSZXF1ZXN0PGFueT4sIHJlczogT0RhdGFSZXNwb25zZTxhbnk+KSB7XG4gICAgY29uc3Qgc2NvcGUgPSB0aGlzLnNjb3BlKHJlcSk7XG4gICAgY29uc3QgdGFncyA9IHRoaXMudGFncyhyZXMpO1xuICAgIHRoaXMucHV0PFJlc3BvbnNlSnNvbj4ocmVxLmNhY2hlS2V5LCByZXMudG9KU09OKCksIHtcbiAgICAgIHRpbWVvdXQ6IHJlcy5vcHRpb25zLm1heEFnZSxcbiAgICAgIHNjb3BlLFxuICAgICAgdGFncyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXN0b3JlIHRoZSByZXNwb25zZSBmcm9tIHRoZSBjYWNoZSBcbiAgICogQHBhcmFtIHJlcSBUaGUgcmVxdWVzdCB3aXRoIHRoZSByZXNvdXJjZSB0byBnZXQgdGhlIHJlc3BvbnNlXG4gICAqIEByZXR1cm5zIFRoZSByZXNwb25zZSBmcm9tIHRoZSBjYWNoZVxuICAgKi9cbiAgZ2V0UmVzcG9uc2UocmVxOiBPRGF0YVJlcXVlc3Q8YW55Pik6IE9EYXRhUmVzcG9uc2U8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qgc2NvcGUgPSB0aGlzLnNjb3BlKHJlcSk7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMuZ2V0PFJlc3BvbnNlSnNvbj4ocmVxLmNhY2hlS2V5LCB7IHNjb3BlIH0pO1xuXG4gICAgcmV0dXJuIGRhdGEgIT09IHVuZGVmaW5lZCA/IE9EYXRhUmVzcG9uc2UuZnJvbUpTT04ocmVxLCBkYXRhKSA6IHVuZGVmaW5lZDtcbiAgfVxufVxuIl19
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItb2RhdGEvc3JjL2xpYi9jYWNoZS9zdG9yYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZ0IsYUFBYSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzNELE9BQU8sRUFBRSxVQUFVLEVBQW1CLE1BQU0sU0FBUyxDQUFDO0FBVXRELE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxVQUFVO0lBSWpELFlBQVksRUFDVixJQUFJLEVBQ0osT0FBTyxHQUFHLGNBQWMsRUFDeEIsT0FBTyxHQUtSO1FBQ0MsS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUNuQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN2QixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDZixNQUFNLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUs7UUFDSCxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FDbEIsSUFBSSxDQUFDLElBQUksRUFDVCxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQ25ELENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSCxPQUFPO1FBQ0wsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLEdBQUcsQ0FDcEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLENBQ3BELENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDTSxLQUFLO1FBQ1osS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2QsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2YsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxXQUFXLENBQUMsR0FBc0IsRUFBRSxHQUF1QjtRQUN6RCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzlCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLEdBQUcsQ0FBZSxHQUFHLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNqRCxPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNO1lBQzNCLEtBQUs7WUFDTCxJQUFJO1NBQ0wsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxXQUFXLENBQUMsR0FBc0I7UUFDaEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM5QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFlLEdBQUcsQ0FBQyxRQUFRLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBRTdELE9BQU8sSUFBSSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUM1RSxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPRGF0YVJlcXVlc3QsIE9EYXRhUmVzcG9uc2UgfSBmcm9tICcuLi9yZXNvdXJjZXMnO1xuaW1wb3J0IHsgT0RhdGFDYWNoZSwgT0RhdGFDYWNoZUVudHJ5IH0gZnJvbSAnLi9jYWNoZSc7XG5cbmludGVyZmFjZSBSZXNwb25zZUpzb24ge1xuICBib2R5OiBhbnkgfCBudWxsO1xuICBoZWFkZXJzOiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXSB9O1xuICBzdGF0dXM6IG51bWJlcjtcbiAgc3RhdHVzVGV4dDogc3RyaW5nO1xuICB1cmw6IHN0cmluZyB8IG51bGw7XG59XG5cbmV4cG9ydCBjbGFzcyBPRGF0YUluU3RvcmFnZUNhY2hlIGV4dGVuZHMgT0RhdGFDYWNoZSB7XG4gIG5hbWU6IHN0cmluZztcbiAgc3RvcmFnZTogU3RvcmFnZTtcblxuICBjb25zdHJ1Y3Rvcih7XG4gICAgbmFtZSxcbiAgICBzdG9yYWdlID0gc2Vzc2lvblN0b3JhZ2UsXG4gICAgdGltZW91dCxcbiAgfToge1xuICAgIHRpbWVvdXQ/OiBudW1iZXI7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHN0b3JhZ2U/OiBTdG9yYWdlO1xuICB9KSB7XG4gICAgc3VwZXIoeyB0aW1lb3V0IH0pO1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgdGhpcy5zdG9yYWdlID0gc3RvcmFnZTtcbiAgICB0aGlzLnJlc3RvcmUoKTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignYmVmb3JldW5sb2FkJywgKCkgPT4gdGhpcy5zdG9yZSgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9yZSB0aGUgY2FjaGUgaW4gdGhlIHN0b3JhZ2VcbiAgICovXG4gIHN0b3JlKCkge1xuICAgIHRoaXMuc3RvcmFnZS5zZXRJdGVtKFxuICAgICAgdGhpcy5uYW1lLFxuICAgICAgSlNPTi5zdHJpbmdpZnkoQXJyYXkuZnJvbSh0aGlzLmVudHJpZXMuZW50cmllcygpKSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc3RvcmUgdGhlIGNhY2hlIGZyb20gdGhlIHN0b3JhZ2VcbiAgICovXG4gIHJlc3RvcmUoKSB7XG4gICAgdGhpcy5lbnRyaWVzID0gbmV3IE1hcDxzdHJpbmcsIE9EYXRhQ2FjaGVFbnRyeTxhbnk+PihcbiAgICAgIEpTT04ucGFyc2UodGhpcy5zdG9yYWdlLmdldEl0ZW0odGhpcy5uYW1lKSB8fCAnW10nKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRmx1c2ggdGhlIGNhY2hlIGFuZCBjbGVhbiB0aGUgc3RvcmFnZVxuICAgKi9cbiAgb3ZlcnJpZGUgZmx1c2goKSB7XG4gICAgc3VwZXIuZmx1c2goKTtcbiAgICB0aGlzLnN0b3JlKCk7XG4gIH1cblxuICAvKipcbiAgICogU3RvcmUgdGhlIHJlc3BvbnNlIGluIHRoZSBjYWNoZVxuICAgKiBAcGFyYW0gcmVxIFRoZSByZXF1ZXN0IHdpdGggdGhlIHJlc291cmNlIHRvIHN0b3JlIHRoZSByZXNwb25zZVxuICAgKiBAcGFyYW0gcmVzIFRoZSByZXNwb25zZSB0byBzdG9yZSBpbiB0aGUgY2FjaGVcbiAgICovXG4gIHB1dFJlc3BvbnNlKHJlcTogT0RhdGFSZXF1ZXN0PGFueT4sIHJlczogT0RhdGFSZXNwb25zZTxhbnk+KSB7XG4gICAgY29uc3Qgc2NvcGUgPSB0aGlzLnNjb3BlKHJlcSk7XG4gICAgY29uc3QgdGFncyA9IHRoaXMudGFncyhyZXMpO1xuICAgIHRoaXMucHV0PFJlc3BvbnNlSnNvbj4ocmVxLmNhY2hlS2V5LCByZXMudG9KU09OKCksIHtcbiAgICAgIHRpbWVvdXQ6IHJlcy5vcHRpb25zLm1heEFnZSxcbiAgICAgIHNjb3BlLFxuICAgICAgdGFncyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXN0b3JlIHRoZSByZXNwb25zZSBmcm9tIHRoZSBjYWNoZVxuICAgKiBAcGFyYW0gcmVxIFRoZSByZXF1ZXN0IHdpdGggdGhlIHJlc291cmNlIHRvIGdldCB0aGUgcmVzcG9uc2VcbiAgICogQHJldHVybnMgVGhlIHJlc3BvbnNlIGZyb20gdGhlIGNhY2hlXG4gICAqL1xuICBnZXRSZXNwb25zZShyZXE6IE9EYXRhUmVxdWVzdDxhbnk+KTogT0RhdGFSZXNwb25zZTxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBzY29wZSA9IHRoaXMuc2NvcGUocmVxKTtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5nZXQ8UmVzcG9uc2VKc29uPihyZXEuY2FjaGVLZXksIHsgc2NvcGUgfSk7XG5cbiAgICByZXR1cm4gZGF0YSAhPT0gdW5kZWZpbmVkID8gT0RhdGFSZXNwb25zZS5mcm9tSlNPTihyZXEsIGRhdGEpIDogdW5kZWZpbmVkO1xuICB9XG59XG4iXX0=