@decaf-ts/injectable-decorators 1.6.3 → 1.6.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.
- package/dist/injectable-decorators.cjs +72 -83
- package/dist/injectable-decorators.esm.cjs +72 -84
- package/lib/Injectables.cjs +4 -4
- package/lib/Injectables.d.ts +5 -3
- package/lib/decorators.cjs +29 -56
- package/lib/decorators.d.ts +17 -2
- package/lib/esm/Injectables.d.ts +5 -3
- package/lib/esm/Injectables.js +4 -4
- package/lib/esm/decorators.d.ts +17 -2
- package/lib/esm/decorators.js +27 -56
- package/lib/esm/index.d.ts +2 -1
- package/lib/esm/index.js +3 -2
- package/lib/esm/registry.d.ts +17 -10
- package/lib/esm/registry.js +36 -24
- package/lib/esm/types.d.ts +16 -0
- package/lib/esm/types.js +2 -0
- package/lib/esm/utils.d.ts +1 -1
- package/lib/esm/utils.js +11 -2
- package/lib/index.cjs +3 -2
- package/lib/index.d.ts +2 -1
- package/lib/registry.cjs +36 -24
- package/lib/registry.d.ts +17 -10
- package/lib/types.cjs +3 -0
- package/lib/types.d.ts +16 -0
- package/lib/utils.cjs +11 -2
- package/lib/utils.d.ts +1 -1
- package/package.json +1 -1
|
@@ -63,52 +63,62 @@ class InjectableRegistryImp {
|
|
|
63
63
|
constructor() {
|
|
64
64
|
this.cache = {};
|
|
65
65
|
}
|
|
66
|
+
has(name) {
|
|
67
|
+
if (typeof name === "symbol")
|
|
68
|
+
return name in this.cache;
|
|
69
|
+
return Symbol.for(name.toString()) in this.cache;
|
|
70
|
+
}
|
|
66
71
|
/**
|
|
67
72
|
* @inheritDoc
|
|
68
73
|
*/
|
|
69
74
|
get(name, ...args) {
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
return innerCache.instance || this.build(buildDef, ...args);
|
|
76
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
75
|
+
if (typeof name === "string")
|
|
76
|
+
name = Symbol.for(name);
|
|
77
|
+
if (typeof name !== "symbol") {
|
|
78
|
+
const meta = Reflect.getMetadata(getInjectKey(InjectablesKeys.INJECTABLE), name);
|
|
79
|
+
name = meta?.symbol || Symbol.for(name.toString());
|
|
77
80
|
}
|
|
78
|
-
|
|
81
|
+
if (!name)
|
|
82
|
+
throw new Error(`Injectable ${name} not found`);
|
|
83
|
+
if (!(name in this.cache)) {
|
|
79
84
|
return undefined;
|
|
80
85
|
}
|
|
86
|
+
const cache = this.cache[name];
|
|
87
|
+
if (!cache.options.singleton && !cache.instance)
|
|
88
|
+
return this.build(name, ...args);
|
|
89
|
+
return cache.instance || this.build(name, ...args);
|
|
81
90
|
}
|
|
82
91
|
/**
|
|
83
92
|
* @inheritDoc
|
|
84
93
|
*/
|
|
85
|
-
register(obj, category
|
|
94
|
+
register(obj, category, options, force = false) {
|
|
86
95
|
const castObj = obj;
|
|
87
96
|
const constructor = !castObj.name && castObj.constructor;
|
|
88
97
|
if (typeof castObj !== "function" && !constructor)
|
|
89
98
|
throw new Error(`Injectable registering failed. Missing Class name or constructor`);
|
|
90
|
-
const name = category ||
|
|
91
|
-
(constructor && constructor.name && constructor.name !== "Function"
|
|
92
|
-
? constructor.name
|
|
93
|
-
: castObj.name);
|
|
99
|
+
const name = category || Symbol.for(obj.toString());
|
|
94
100
|
if (!this.cache[name] || force)
|
|
95
101
|
this.cache[name] = {
|
|
96
102
|
instance: constructor ? obj : undefined,
|
|
97
|
-
constructor: !constructor ? obj :
|
|
98
|
-
|
|
103
|
+
constructor: !constructor ? obj : obj.constructor,
|
|
104
|
+
options: options,
|
|
99
105
|
};
|
|
100
106
|
}
|
|
101
107
|
/**
|
|
102
108
|
* @inheritDoc
|
|
103
109
|
*/
|
|
104
|
-
build(
|
|
105
|
-
const { constructor,
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
instance
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
110
|
+
build(name, ...args) {
|
|
111
|
+
const { constructor, options } = this.cache[name];
|
|
112
|
+
let instance;
|
|
113
|
+
try {
|
|
114
|
+
instance = new constructor(...args);
|
|
115
|
+
}
|
|
116
|
+
catch (e) {
|
|
117
|
+
throw new Error(`failed to build ${name.toString()} with args ${args}: ${e}`);
|
|
118
|
+
}
|
|
119
|
+
this.cache[name].instance = instance;
|
|
120
|
+
if (options.callback)
|
|
121
|
+
instance = options.callback(instance, ...args);
|
|
112
122
|
return instance;
|
|
113
123
|
}
|
|
114
124
|
}
|
|
@@ -185,12 +195,12 @@ class Injectables {
|
|
|
185
195
|
* @description Creates a new instance of an injectable class.
|
|
186
196
|
* @summary Instantiates an injectable class using its constructor and the provided arguments.
|
|
187
197
|
* @template T Type of the object to build
|
|
188
|
-
* @param {
|
|
198
|
+
* @param {symbol} name symbol referencing the injectable
|
|
189
199
|
* @param {any[]} args Constructor arguments to pass when instantiating the injectable
|
|
190
200
|
* @return {T} The newly created instance
|
|
191
201
|
*/
|
|
192
|
-
static build(
|
|
193
|
-
return Injectables.getRegistry().build(
|
|
202
|
+
static build(name, ...args) {
|
|
203
|
+
return Injectables.getRegistry().build(name, ...args);
|
|
194
204
|
}
|
|
195
205
|
/**
|
|
196
206
|
* @description Replaces the current registry implementation.
|
|
@@ -253,7 +263,14 @@ const TypeKey = "design:type";
|
|
|
253
263
|
*/
|
|
254
264
|
function getTypeFromDecorator(model, propKey) {
|
|
255
265
|
const typeDef = Reflect.getMetadata(TypeKey, model, propKey);
|
|
256
|
-
|
|
266
|
+
if (typeDef.name === "Function") {
|
|
267
|
+
return undefined;
|
|
268
|
+
}
|
|
269
|
+
const meta = Reflect.getMetadata(getInjectKey(InjectablesKeys.INJECTABLE), typeDef);
|
|
270
|
+
if (!meta) {
|
|
271
|
+
return undefined;
|
|
272
|
+
}
|
|
273
|
+
return meta.symbol;
|
|
257
274
|
}
|
|
258
275
|
|
|
259
276
|
/**
|
|
@@ -265,59 +282,20 @@ function getTypeFromDecorator(model, propKey) {
|
|
|
265
282
|
* @memberOf module:injectable-decorators
|
|
266
283
|
*/
|
|
267
284
|
const getInjectKey = (key) => InjectablesKeys.REFLECT + key;
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
* @param {string} [category] Defaults to the class name. Useful when minification occurs and names are changed,
|
|
274
|
-
* or when you want to upcast the object to a different type.
|
|
275
|
-
* @param {boolean} [force] Defines if the injectable should override an already existing instance (if any).
|
|
276
|
-
* Only meant for extending decorators.
|
|
277
|
-
* @param {Function} [instanceCallback] Optional callback function that will be called with the instance after creation.
|
|
278
|
-
* @return {Function} A decorator function that transforms the class into an injectable.
|
|
279
|
-
*
|
|
280
|
-
* @function injectable
|
|
281
|
-
* @category Class Decorators
|
|
282
|
-
*
|
|
283
|
-
* @mermaid
|
|
284
|
-
* sequenceDiagram
|
|
285
|
-
* participant Client
|
|
286
|
-
* participant Decorator
|
|
287
|
-
* participant Injectables
|
|
288
|
-
*
|
|
289
|
-
* Client->>Decorator: @injectable()
|
|
290
|
-
* Decorator->>Decorator: Create new constructor
|
|
291
|
-
*
|
|
292
|
-
* Note over Decorator: When new instance requested
|
|
293
|
-
* Decorator->>Injectables: get(name)
|
|
294
|
-
* alt Instance exists
|
|
295
|
-
* Injectables-->>Decorator: Return existing instance
|
|
296
|
-
* else No instance
|
|
297
|
-
* Decorator->>Injectables: register(original, name)
|
|
298
|
-
* Decorator->>Injectables: get(name)
|
|
299
|
-
* Injectables-->>Decorator: Return new instance
|
|
300
|
-
* opt Has callback
|
|
301
|
-
* Decorator->>Decorator: Call instanceCallback
|
|
302
|
-
* end
|
|
303
|
-
* end
|
|
304
|
-
* Decorator->>Decorator: Define metadata
|
|
305
|
-
* Decorator-->>Client: Return instance
|
|
306
|
-
*/
|
|
307
|
-
function injectable(category = undefined, force = false, instanceCallback) {
|
|
308
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
309
|
-
return (original, propertyKey) => {
|
|
285
|
+
function injectable(name, cb) {
|
|
286
|
+
const category = typeof name === "string" ? name : undefined;
|
|
287
|
+
const instanceCallback = (typeof category === "function" ? category : cb);
|
|
288
|
+
return (original) => {
|
|
289
|
+
const symbol = Symbol.for(category || original.toString());
|
|
310
290
|
const name = category || original.name;
|
|
291
|
+
const metadata = {
|
|
292
|
+
class: name,
|
|
293
|
+
symbol: symbol,
|
|
294
|
+
};
|
|
295
|
+
Reflect.defineMetadata(getInjectKey(InjectablesKeys.INJECTABLE), metadata, original);
|
|
311
296
|
// the new constructor behaviour
|
|
312
297
|
const newConstructor = function (...args) {
|
|
313
|
-
|
|
314
|
-
if (!inj)
|
|
315
|
-
return undefined;
|
|
316
|
-
const metadata = Object.assign({}, {
|
|
317
|
-
class: name,
|
|
318
|
-
});
|
|
319
|
-
Reflect.defineMetadata(getInjectKey(InjectablesKeys.INJECTABLE), metadata, inj.constructor);
|
|
320
|
-
return inj;
|
|
298
|
+
return Injectables.get(symbol, ...args);
|
|
321
299
|
};
|
|
322
300
|
// copy prototype so instanceof operator still works
|
|
323
301
|
newConstructor.prototype = original.prototype;
|
|
@@ -329,7 +307,12 @@ function injectable(category = undefined, force = false, instanceCallback) {
|
|
|
329
307
|
configurable: false,
|
|
330
308
|
value: original.prototype.constructor.name,
|
|
331
309
|
});
|
|
332
|
-
|
|
310
|
+
const opts = {
|
|
311
|
+
singleton: true,
|
|
312
|
+
callback: instanceCallback,
|
|
313
|
+
};
|
|
314
|
+
Reflect.defineMetadata(getInjectKey(InjectablesKeys.INJECTABLE), metadata, newConstructor);
|
|
315
|
+
Injectables.register(original, symbol, opts);
|
|
333
316
|
// return new constructor (will override original)
|
|
334
317
|
return newConstructor;
|
|
335
318
|
};
|
|
@@ -396,9 +379,14 @@ function injectable(category = undefined, force = false, instanceCallback) {
|
|
|
396
379
|
function inject(category, transformer) {
|
|
397
380
|
return (target, propertyKey) => {
|
|
398
381
|
const values = new WeakMap();
|
|
399
|
-
const name = category
|
|
400
|
-
|
|
382
|
+
const name = category
|
|
383
|
+
? typeof category === "symbol"
|
|
384
|
+
? category
|
|
385
|
+
: Symbol.for(category.toString())
|
|
386
|
+
: getTypeFromDecorator(target, propertyKey);
|
|
387
|
+
if (!name) {
|
|
401
388
|
throw new Error(`Could not get Type from decorator`);
|
|
389
|
+
}
|
|
402
390
|
Reflect.defineMetadata(getInjectKey(InjectablesKeys.INJECT), {
|
|
403
391
|
injectable: name,
|
|
404
392
|
}, target, propertyKey);
|
|
@@ -415,7 +403,7 @@ function inject(category, transformer) {
|
|
|
415
403
|
if (!obj) {
|
|
416
404
|
obj = Injectables.get(name);
|
|
417
405
|
if (!obj)
|
|
418
|
-
throw new Error(`Could not get Injectable ${name} to inject in ${target.constructor ? target.constructor.name : target.name}'s ${propertyKey}`);
|
|
406
|
+
throw new Error(`Could not get Injectable ${name.toString()} to inject in ${target.constructor ? target.constructor.name : target.name}'s ${propertyKey}`);
|
|
419
407
|
if (transformer)
|
|
420
408
|
try {
|
|
421
409
|
obj = transformer(obj, target);
|
|
@@ -449,7 +437,7 @@ function inject(category, transformer) {
|
|
|
449
437
|
* @const VERSION
|
|
450
438
|
* @memberOf module:injectable-decorators
|
|
451
439
|
*/
|
|
452
|
-
const VERSION = "1.6.
|
|
440
|
+
const VERSION = "1.6.5";
|
|
453
441
|
|
|
454
|
-
export { InjectableRegistryImp, Injectables, InjectablesKeys, TypeKey, VERSION, getTypeFromDecorator, inject, injectable };
|
|
455
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5qZWN0YWJsZS1kZWNvcmF0b3JzLmVzbS5janMiLCJzb3VyY2VzIjpbIi4uL3NyYy9jb25zdGFudHMudHMiLCIuLi9zcmMvcmVnaXN0cnkudHMiLCIuLi9zcmMvSW5qZWN0YWJsZXMudHMiLCIuLi9zcmMvdXRpbHMudHMiLCIuLi9zcmMvZGVjb3JhdG9ycy50cyIsIi4uL3NyYy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBkZXNjcmlwdGlvbiBDb25zdGFudHMgdXNlZCBmb3IgcmVmbGVjdGlvbiBtZXRhZGF0YSBrZXlzIGluIHRoZSBkZXBlbmRlbmN5IGluamVjdGlvbiBzeXN0ZW0uXG4gKiBAc3VtbWFyeSBJbmplY3RhYmxlcyBSZWZsZWN0aW9uIGtleXMgdXNlZCB0byBzdG9yZSBhbmQgcmV0cmlldmUgbWV0YWRhdGEgYWJvdXQgaW5qZWN0YWJsZSBjbGFzc2VzIGFuZCBwcm9wZXJ0aWVzLlxuICogXG4gKiBAcHJvcGVydHkge3N0cmluZ30gUkVGTEVDVCBSZWZsZWN0aW9uIGluamVjdGFibGVzIGJhc2Uga2V5IHByZWZpeCBmb3IgYWxsIG1ldGFkYXRhIGtleXNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBJTkpFQ1RBQkxFIFJlZmxlY3Rpb24ga2V5IHN1ZmZpeCBmb3IgbWFya2luZyBhIGNsYXNzIGFzIGluamVjdGFibGVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBJTkpFQ1QgUmVmbGVjdGlvbiBrZXkgc3VmZml4IGZvciBtYXJraW5nIGEgcHJvcGVydHkgZm9yIGluamVjdGlvblxuICogXG4gKiBAY29uc3QgSW5qZWN0YWJsZXNLZXlzXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmluamVjdGFibGUtZGVjb3JhdG9yc1xuICovXG5leHBvcnQgY29uc3QgSW5qZWN0YWJsZXNLZXlzID0ge1xuICBSRUZMRUNUOiBcImluamVjdC5kYi5cIixcbiAgSU5KRUNUQUJMRTogXCJpbmplY3RhYmxlXCIsXG4gIElOSkVDVDogXCJpbmplY3RcIixcbn07XG4iLCIvKipcbiAqIEBkZXNjcmlwdGlvbiBUeXBlIHJlcHJlc2VudGluZyBlaXRoZXIgYSBjbGFzcyBjb25zdHJ1Y3RvciBvciBhbiBpbnN0YW5jZS5cbiAqIEBzdW1tYXJ5IERlZmluZXMgYW4gSW5qZWN0YWJsZSB0eXBlIHRoYXQgY2FuIGJlIGVpdGhlciBhIGNsYXNzIGNvbnN0cnVjdG9yIG9yIGFuIGluc3RhbmNlIG9mIGEgY2xhc3MuXG4gKiBAdGVtcGxhdGUgVCBUaGUgdHlwZSBvZiB0aGUgaW5qZWN0YWJsZSBvYmplY3RcbiAqIEB0eXBlZGVmIHtmdW5jdGlvbihhbnkpOiBUIHwgVH0gSW5qZWN0YWJsZVxuICogQG1lbWJlck9mIG1vZHVsZTppbmplY3RhYmxlLWRlY29yYXRvcnNcbiAqL1xuZXhwb3J0IHR5cGUgSW5qZWN0YWJsZTxUPiA9IHsgbmV3ICguLi5hcmdzOiBhbnlbXSk6IFQgfSB8IFQ7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIENvbnRyYWN0IGZvciBhIHJlZ2lzdHJ5IHRoYXQgbWFuYWdlcyBpbmplY3RhYmxlIG9iamVjdHMuXG4gKiBAc3VtbWFyeSBJbnRlcmZhY2UgZm9yIGFuIGluamVjdGFibGUgcmVnaXN0cnkgdGhhdCBwcm92aWRlcyBtZXRob2RzIGZvciByZXRyaWV2aW5nLCByZWdpc3RlcmluZywgYW5kIGJ1aWxkaW5nIGluamVjdGFibGUgb2JqZWN0cy5cbiAqIEB0ZW1wbGF0ZSBUIFR5cGUgcGFyYW1ldGVyIHVzZWQgaW4gdGhlIGludGVyZmFjZSBtZXRob2RzXG4gKiBAaW50ZXJmYWNlIEluamVjdGFibGVzUmVnaXN0cnlcbiAqIEBtZW1iZXJPZiBtb2R1bGU6aW5qZWN0YWJsZS1kZWNvcmF0b3JzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5qZWN0YWJsZXNSZWdpc3RyeSB7XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRmV0Y2hlcyBhbiBpbmplY3RhYmxlIGluc3RhbmNlIGJ5IGl0cyByZWdpc3RlcmVkIG5hbWUuXG4gICAqIEBzdW1tYXJ5IFJldHJpZXZlcyBhbiB7QGxpbmsgSW5qZWN0YWJsZX0gZnJvbSB0aGUgcmVnaXN0cnkgYnkgbmFtZSwgb3B0aW9uYWxseSBwYXNzaW5nIGNvbnN0cnVjdG9yIGFyZ3VtZW50cy5cbiAgICogQHRlbXBsYXRlIFQgVHlwZSBvZiB0aGUgaW5qZWN0YWJsZSBvYmplY3QgdG8gcmV0cmlldmVcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgVGhlIHJlZ2lzdGVyZWQgbmFtZSBvZiB0aGUgaW5qZWN0YWJsZSB0byByZXRyaWV2ZVxuICAgKiBAcGFyYW0ge2FueVtdfSBhcmdzIENvbnN0cnVjdG9yIGFyZ3VtZW50cyB0byBwYXNzIHdoZW4gaW5zdGFudGlhdGluZyB0aGUgaW5qZWN0YWJsZVxuICAgKiBAcmV0dXJuIHtJbmplY3RhYmxlPFQ+IHwgdW5kZWZpbmVkfSBUaGUgaW5qZWN0YWJsZSBpbnN0YW5jZSBvciB1bmRlZmluZWQgaWYgbm90IGZvdW5kXG4gICAqIEBtZW1iZXJPZiBtb2R1bGU6aW5qZWN0YWJsZS1kZWNvcmF0b3JzXG4gICAqL1xuICBnZXQ8VD4obmFtZTogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IEluamVjdGFibGU8VD4gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBBZGRzIGEgY2xhc3Mgb3Igb2JqZWN0IHRvIHRoZSBpbmplY3RhYmxlIHJlZ2lzdHJ5LlxuICAgKiBAc3VtbWFyeSBSZWdpc3RlcnMgYW4gaW5qZWN0YWJsZSBjb25zdHJ1Y3RvciBvciBpbnN0YW5jZSB3aXRoIHRoZSByZWdpc3RyeSwgbWFraW5nIGl0IGF2YWlsYWJsZSBmb3IgaW5qZWN0aW9uLlxuICAgKiBAdGVtcGxhdGUgVCBUeXBlIG9mIHRoZSBpbmplY3RhYmxlIG9iamVjdCB0byByZWdpc3RlclxuICAgKiBAcGFyYW0ge0luamVjdGFibGU8VD59IGNvbnN0cnVjdG9yIFRoZSBjbGFzcyBjb25zdHJ1Y3RvciBvciBvYmplY3QgaW5zdGFuY2UgdG8gcmVnaXN0ZXJcbiAgICogQHBhcmFtIHthbnlbXX0gYXJncyBBZGRpdGlvbmFsIGFyZ3VtZW50cyBmb3IgcmVnaXN0cmF0aW9uIChjYXRlZ29yeSwgc2luZ2xldG9uIGZsYWcsIGV0Yy4pXG4gICAqIEByZXR1cm4ge3ZvaWR9XG4gICAqIEBtZW1iZXJPZiBtb2R1bGU6aW5qZWN0YWJsZS1kZWNvcmF0b3JzXG4gICAqL1xuICByZWdpc3RlcjxUPihjb25zdHJ1Y3RvcjogSW5qZWN0YWJsZTxUPiwgLi4uYXJnczogYW55W10pOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiBhbiBpbmplY3RhYmxlIGNsYXNzLlxuICAgKiBAc3VtbWFyeSBJbnN0YW50aWF0ZXMgYW4gaW5qZWN0YWJsZSBjbGFzcyB1c2luZyBpdHMgY29uc3RydWN0b3IgYW5kIHRoZSBwcm92aWRlZCBhcmd1bWVudHMuXG4gICAqIEB0ZW1wbGF0ZSBUIFR5cGUgb2YgdGhlIG9iamVjdCB0byBidWlsZFxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IG9iaiBPYmplY3QgY29udGFpbmluZyB0aGUgbmFtZSBvZiB0aGUgaW5qZWN0YWJsZSB0byBidWlsZFxuICAgKiBAcGFyYW0ge2FueVtdfSBhcmdzIENvbnN0cnVjdG9yIGFyZ3VtZW50cyB0byBwYXNzIHdoZW4gaW5zdGFudGlhdGluZyB0aGUgaW5qZWN0YWJsZVxuICAgKiBAcmV0dXJuIHtUfSBUaGUgbmV3bHkgY3JlYXRlZCBpbnN0YW5jZVxuICAgKiBAbWVtYmVyT2YgbW9kdWxlOmluamVjdGFibGUtZGVjb3JhdG9yc1xuICAgKi9cbiAgYnVpbGQ8VD4ob2JqOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCAuLi5hcmdzOiBhbnlbXSk6IFQ7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIERlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgdGhlIEluamVjdGFibGVzUmVnaXN0cnkgaW50ZXJmYWNlLlxuICogQHN1bW1hcnkgSG9sZHMgdGhlIHZhcmlvdXMge0BsaW5rIEluamVjdGFibGV9cyBpbiBhIGNhY2hlIGFuZCBwcm92aWRlcyBtZXRob2RzIHRvIHJlZ2lzdGVyLCByZXRyaWV2ZSwgYW5kIGJ1aWxkIHRoZW0uXG4gKiBAdGVtcGxhdGUgVCBUeXBlIHBhcmFtZXRlciB1c2VkIGluIHRoZSBjbGFzcyBtZXRob2RzXG4gKlxuICogQGNsYXNzIEluamVjdGFibGVSZWdpc3RyeUltcFxuICogQGltcGxlbWVudHMgSW5qZWN0YWJsZXNSZWdpc3RyeVxuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6aW5qZWN0YWJsZS1kZWNvcmF0b3JzXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENyZWF0ZSBhIG5ldyByZWdpc3RyeVxuICogY29uc3QgcmVnaXN0cnkgPSBuZXcgSW5qZWN0YWJsZVJlZ2lzdHJ5SW1wKCk7XG4gKlxuICogLy8gUmVnaXN0ZXIgYSBjbGFzc1xuICogY2xhc3MgTXlTZXJ2aWNlIHtcbiAqICAgZG9Tb21ldGhpbmcoKSB7XG4gKiAgICAgcmV0dXJuICdIZWxsbyBXb3JsZCc7XG4gKiAgIH1cbiAqIH1cbiAqIHJlZ2lzdHJ5LnJlZ2lzdGVyKE15U2VydmljZSwgJ015U2VydmljZScsIHRydWUpO1xuICpcbiAqIC8vIEdldCB0aGUgaW5zdGFuY2VcbiAqIGNvbnN0IHNlcnZpY2UgPSByZWdpc3RyeS5nZXQoJ015U2VydmljZScpO1xuICogc2VydmljZS5kb1NvbWV0aGluZygpOyAvLyAnSGVsbG8gV29ybGQnXG4gKlxuICogQG1lcm1haWRcbiAqIHNlcXVlbmNlRGlhZ3JhbVxuICogICBwYXJ0aWNpcGFudCBDbGllbnRcbiAqICAgcGFydGljaXBhbnQgUmVnaXN0cnlcbiAqXG4gKiAgIENsaWVudC0+PlJlZ2lzdHJ5OiByZWdpc3RlcihNeVNlcnZpY2UpXG4gKiAgIFJlZ2lzdHJ5LT4+UmVnaXN0cnk6IFN0b3JlIGluIGNhY2hlXG4gKlxuICogICBDbGllbnQtPj5SZWdpc3RyeTogZ2V0KFwiTXlTZXJ2aWNlXCIpXG4gKiAgIGFsdCBJbnN0YW5jZSBleGlzdHMgYW5kIGlzIHNpbmdsZXRvblxuICogICAgIFJlZ2lzdHJ5LS0+PkNsaWVudDogUmV0dXJuIGNhY2hlZCBpbnN0YW5jZVxuICogICBlbHNlIE5vIGluc3RhbmNlIG9yIG5vdCBzaW5nbGV0b25cbiAqICAgICBSZWdpc3RyeS0+PlJlZ2lzdHJ5OiBidWlsZChuYW1lKVxuICogICAgIFJlZ2lzdHJ5LS0+PkNsaWVudDogUmV0dXJuIG5ldyBpbnN0YW5jZVxuICogICBlbmRcbiAqL1xuZXhwb3J0IGNsYXNzIEluamVjdGFibGVSZWdpc3RyeUltcCBpbXBsZW1lbnRzIEluamVjdGFibGVzUmVnaXN0cnkge1xuICBwcml2YXRlIGNhY2hlOiB7IFtpbmRleGVyOiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgZ2V0PFQ+KG5hbWU6IHN0cmluZywgLi4uYXJnczogYW55W10pOiBUIHwgdW5kZWZpbmVkIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgaW5uZXJDYWNoZSA9IHRoaXMuY2FjaGVbbmFtZV07XG4gICAgICBjb25zdCBidWlsZERlZiA9IHsgbmFtZTogbmFtZSB9O1xuICAgICAgaWYgKCFpbm5lckNhY2hlLnNpbmdsZXRvbiAmJiAhaW5uZXJDYWNoZS5pbnN0YW5jZSlcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVpbGQ8VD4oYnVpbGREZWYsIC4uLmFyZ3MpO1xuICAgICAgcmV0dXJuIGlubmVyQ2FjaGUuaW5zdGFuY2UgfHwgdGhpcy5idWlsZDxUPihidWlsZERlZiwgLi4uYXJncyk7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICByZWdpc3RlcjxUPihcbiAgICBvYmo6IEluamVjdGFibGU8VD4sXG4gICAgY2F0ZWdvcnk6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZCxcbiAgICBpc1NpbmdsZXRvbjogYm9vbGVhbiA9IHRydWUsXG4gICAgZm9yY2U6IGJvb2xlYW4gPSBmYWxzZVxuICApOiB2b2lkIHtcbiAgICBjb25zdCBjYXN0T2JqOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0gb2JqIGFzIFJlY29yZDxzdHJpbmcsIGFueT47XG5cbiAgICBjb25zdCBjb25zdHJ1Y3RvciA9ICFjYXN0T2JqLm5hbWUgJiYgY2FzdE9iai5jb25zdHJ1Y3RvcjtcbiAgICBpZiAodHlwZW9mIGNhc3RPYmogIT09IFwiZnVuY3Rpb25cIiAmJiAhY29uc3RydWN0b3IpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBJbmplY3RhYmxlIHJlZ2lzdGVyaW5nIGZhaWxlZC4gTWlzc2luZyBDbGFzcyBuYW1lIG9yIGNvbnN0cnVjdG9yYFxuICAgICAgKTtcblxuICAgIGNvbnN0IG5hbWUgPVxuICAgICAgY2F0ZWdvcnkgfHxcbiAgICAgIChjb25zdHJ1Y3RvciAmJiBjb25zdHJ1Y3Rvci5uYW1lICYmIGNvbnN0cnVjdG9yLm5hbWUgIT09IFwiRnVuY3Rpb25cIlxuICAgICAgICA/IChjb25zdHJ1Y3RvciBhcyB7IFtpbmRleGVyOiBzdHJpbmddOiBhbnkgfSkubmFtZVxuICAgICAgICA6IGNhc3RPYmoubmFtZSk7XG5cbiAgICBpZiAoIXRoaXMuY2FjaGVbbmFtZV0gfHwgZm9yY2UpXG4gICAgICB0aGlzLmNhY2hlW25hbWVdID0ge1xuICAgICAgICBpbnN0YW5jZTogY29uc3RydWN0b3IgPyBvYmogOiB1bmRlZmluZWQsXG4gICAgICAgIGNvbnN0cnVjdG9yOiAhY29uc3RydWN0b3IgPyBvYmogOiB1bmRlZmluZWQsXG4gICAgICAgIHNpbmdsZXRvbjogaXNTaW5nbGV0b24sXG4gICAgICB9O1xuICB9XG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgYnVpbGQ8VD4oZGVmczogeyBuYW1lOiBzdHJpbmcgfSwgLi4uYXJnczogYW55W10pOiBUIHtcbiAgICBjb25zdCB7IGNvbnN0cnVjdG9yLCBzaW5nbGV0b24gfSA9IHRoaXMuY2FjaGVbZGVmcy5uYW1lXTtcbiAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBjb25zdHJ1Y3RvciguLi5hcmdzKTtcbiAgICB0aGlzLmNhY2hlW2RlZnMubmFtZV0gPSB7XG4gICAgICBpbnN0YW5jZTogaW5zdGFuY2UsXG4gICAgICBjb25zdHJ1Y3RvcjogY29uc3RydWN0b3IsXG4gICAgICBzaW5nbGV0b246IHNpbmdsZXRvbixcbiAgICB9O1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfVxufVxuIiwiaW1wb3J0IHtcbiAgSW5qZWN0YWJsZSxcbiAgSW5qZWN0YWJsZVJlZ2lzdHJ5SW1wLFxuICBJbmplY3RhYmxlc1JlZ2lzdHJ5LFxufSBmcm9tIFwiLi9yZWdpc3RyeVwiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBDZW50cmFsIHJlZ2lzdHJ5IGZvciBtYW5hZ2luZyBpbmplY3RhYmxlIGRlcGVuZGVuY2llcy5cbiAqIEBzdW1tYXJ5IFN0YXRpYyBjbGFzcyBob2xkaW5nIHRoZSBhY2Nlc3MgdG8gdGhlIGluamVjdGFibGVzIGZ1bmN0aW9ucy4gUHJvdmlkZXMgbWV0aG9kcyBmb3IgcmVnaXN0ZXJpbmcsXG4gKiByZXRyaWV2aW5nLCBhbmQgYnVpbGRpbmcgaW5qZWN0YWJsZSBvYmplY3RzLlxuICogQHRlbXBsYXRlIFQgVHlwZSBvZiB0aGUgaW5qZWN0YWJsZSBvYmplY3RcbiAqIFxuICogQGNsYXNzIEluamVjdGFibGVzXG4gKiBcbiAqIEBleGFtcGxlXG4gKiAvLyBEZWZpbmUgYW4gaW5qZWN0YWJsZSBjbGFzc1xuICogQGluamVjdGFibGUoKVxuICogY2xhc3MgTXlTZXJ2aWNlIHtcbiAqICAgZG9Tb21ldGhpbmcoKSB7XG4gKiAgICAgcmV0dXJuICdIZWxsbyBXb3JsZCc7XG4gKiAgIH1cbiAqIH1cbiAqIFxuICogLy8gSW5qZWN0IHRoZSBzZXJ2aWNlIGludG8gYW5vdGhlciBjbGFzc1xuICogY2xhc3MgTXlDb21wb25lbnQge1xuICogICBAaW5qZWN0KClcbiAqICAgcHJpdmF0ZSBzZXJ2aWNlITogTXlTZXJ2aWNlO1xuICogICBcbiAqICAgdXNlU2VydmljZSgpIHtcbiAqICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlLmRvU29tZXRoaW5nKCk7XG4gKiAgIH1cbiAqIH1cbiAqIFxuICogQG1lcm1haWRcbiAqIHNlcXVlbmNlRGlhZ3JhbVxuICogICBwYXJ0aWNpcGFudCBDbGllbnRcbiAqICAgcGFydGljaXBhbnQgSW5qZWN0YWJsZXNcbiAqICAgcGFydGljaXBhbnQgUmVnaXN0cnlcbiAqICAgXG4gKiAgIENsaWVudC0+PkluamVjdGFibGVzOiByZWdpc3RlcihNeVNlcnZpY2UpXG4gKiAgIEluamVjdGFibGVzLT4+UmVnaXN0cnk6IHJlZ2lzdGVyKE15U2VydmljZSlcbiAqICAgUmVnaXN0cnktLT4+SW5qZWN0YWJsZXM6IHZvaWRcbiAqICAgXG4gKiAgIENsaWVudC0+PkluamVjdGFibGVzOiBnZXQoXCJNeVNlcnZpY2VcIilcbiAqICAgSW5qZWN0YWJsZXMtPj5SZWdpc3RyeTogZ2V0KFwiTXlTZXJ2aWNlXCIpXG4gKiAgIFJlZ2lzdHJ5LS0+PkluamVjdGFibGVzOiBNeVNlcnZpY2UgaW5zdGFuY2VcbiAqICAgSW5qZWN0YWJsZXMtLT4+Q2xpZW50OiBNeVNlcnZpY2UgaW5zdGFuY2VcbiAqL1xuZXhwb3J0IGNsYXNzIEluamVjdGFibGVzIHtcbiAgcHJpdmF0ZSBzdGF0aWMgYWN0aW5nSW5qZWN0YWJsZXNSZWdpc3RyeT86IEluamVjdGFibGVzUmVnaXN0cnkgPSB1bmRlZmluZWQ7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBGZXRjaGVzIGFuIGluamVjdGFibGUgaW5zdGFuY2UgYnkgaXRzIHJlZ2lzdGVyZWQgbmFtZS5cbiAgICogQHN1bW1hcnkgUmV0cmlldmVzIHRoZSBuYW1lZCB7QGxpbmsgSW5qZWN0YWJsZX0gZnJvbSB0aGUgcmVnaXN0cnkuIElmIHRoZSBpbmplY3RhYmxlIGlzIGEgc2luZ2xldG9uLFxuICAgKiByZXR1cm5zIHRoZSBleGlzdGluZyBpbnN0YW5jZS4gT3RoZXJ3aXNlLCBjcmVhdGVzIGEgbmV3IGluc3RhbmNlLlxuICAgKiBAdGVtcGxhdGUgVCBUeXBlIG9mIHRoZSBpbmplY3RhYmxlIG9iamVjdCB0byByZXRyaWV2ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBUaGUgcmVnaXN0ZXJlZCBuYW1lIG9mIHRoZSBpbmplY3RhYmxlIHRvIHJldHJpZXZlXG4gICAqIEBwYXJhbSB7YW55W119IGFyZ3MgQ29uc3RydWN0b3IgYXJndW1lbnRzIHRvIHBhc3Mgd2hlbiBpbnN0YW50aWF0aW5nIHRoZSBpbmplY3RhYmxlXG4gICAqIEByZXR1cm4ge0luamVjdGFibGU8VD4gfCB1bmRlZmluZWR9IFRoZSBpbmplY3RhYmxlIGluc3RhbmNlIG9yIHVuZGVmaW5lZCBpZiBub3QgZm91bmRcbiAgICovXG4gIHN0YXRpYyBnZXQ8VD4obmFtZTogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IEluamVjdGFibGU8VD4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiBJbmplY3RhYmxlcy5nZXRSZWdpc3RyeSgpLmdldChuYW1lLCAuLi5hcmdzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQWRkcyBhIGNsYXNzIG9yIG9iamVjdCB0byB0aGUgaW5qZWN0YWJsZSByZWdpc3RyeS5cbiAgICogQHN1bW1hcnkgUmVnaXN0ZXJzIGFuIGluamVjdGFibGUgY29uc3RydWN0b3Igb3IgaW5zdGFuY2Ugd2l0aCB0aGUgcmVnaXN0cnksIG1ha2luZyBpdCBhdmFpbGFibGUgZm9yIGluamVjdGlvbi5cbiAgICogQHRlbXBsYXRlIFQgVHlwZSBvZiB0aGUgaW5qZWN0YWJsZSBvYmplY3QgdG8gcmVnaXN0ZXJcbiAgICogQHBhcmFtIHtJbmplY3RhYmxlPFQ+fSBjb25zdHJ1Y3RvciBUaGUgY2xhc3MgY29uc3RydWN0b3Igb3Igb2JqZWN0IGluc3RhbmNlIHRvIHJlZ2lzdGVyXG4gICAqIEBwYXJhbSB7YW55W119IGFyZ3MgQWRkaXRpb25hbCBhcmd1bWVudHMgZm9yIHJlZ2lzdHJhdGlvbiAoY2F0ZWdvcnksIHNpbmdsZXRvbiBmbGFnLCBldGMuKVxuICAgKiBAcmV0dXJuIHt2b2lkfVxuICAgKi9cbiAgc3RhdGljIHJlZ2lzdGVyPFQ+KGNvbnN0cnVjdG9yOiBJbmplY3RhYmxlPFQ+LCAuLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xuICAgIHJldHVybiBJbmplY3RhYmxlcy5nZXRSZWdpc3RyeSgpLnJlZ2lzdGVyKGNvbnN0cnVjdG9yLCAuLi5hcmdzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiBhbiBpbmplY3RhYmxlIGNsYXNzLlxuICAgKiBAc3VtbWFyeSBJbnN0YW50aWF0ZXMgYW4gaW5qZWN0YWJsZSBjbGFzcyB1c2luZyBpdHMgY29uc3RydWN0b3IgYW5kIHRoZSBwcm92aWRlZCBhcmd1bWVudHMuXG4gICAqIEB0ZW1wbGF0ZSBUIFR5cGUgb2YgdGhlIG9iamVjdCB0byBidWlsZFxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IG9iaiBPYmplY3QgY29udGFpbmluZyB0aGUgbmFtZSBvZiB0aGUgaW5qZWN0YWJsZSB0byBidWlsZFxuICAgKiBAcGFyYW0ge2FueVtdfSBhcmdzIENvbnN0cnVjdG9yIGFyZ3VtZW50cyB0byBwYXNzIHdoZW4gaW5zdGFudGlhdGluZyB0aGUgaW5qZWN0YWJsZVxuICAgKiBAcmV0dXJuIHtUfSBUaGUgbmV3bHkgY3JlYXRlZCBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGJ1aWxkPFQ+KG9iajogUmVjb3JkPHN0cmluZywgYW55PiwgLi4uYXJnczogYW55W10pOiBUIHtcbiAgICByZXR1cm4gSW5qZWN0YWJsZXMuZ2V0UmVnaXN0cnkoKS5idWlsZChvYmosIC4uLmFyZ3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZXBsYWNlcyB0aGUgY3VycmVudCByZWdpc3RyeSBpbXBsZW1lbnRhdGlvbi5cbiAgICogQHN1bW1hcnkgU2V0cyBhIG5ldyB7QGxpbmsgSW5qZWN0YWJsZXNSZWdpc3RyeX0gaW1wbGVtZW50YXRpb24sIGFsbG93aW5nIGZvciBjdXN0b20gcmVnaXN0cnkgYmVoYXZpb3IuXG4gICAqIEBwYXJhbSB7SW5qZWN0YWJsZXNSZWdpc3RyeX0gb3BlcmF0aW9uc1JlZ2lzdHJ5IFRoZSBuZXcgaW1wbGVtZW50YXRpb24gb2YgUmVnaXN0cnkgdG8gdXNlXG4gICAqIEByZXR1cm4ge3ZvaWR9XG4gICAqL1xuICBzdGF0aWMgc2V0UmVnaXN0cnkob3BlcmF0aW9uc1JlZ2lzdHJ5OiBJbmplY3RhYmxlc1JlZ2lzdHJ5KSB7XG4gICAgSW5qZWN0YWJsZXMuYWN0aW5nSW5qZWN0YWJsZXNSZWdpc3RyeSA9IG9wZXJhdGlvbnNSZWdpc3RyeTtcbiAgfVxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFByb3ZpZGVzIGFjY2VzcyB0byB0aGUgY3VycmVudCByZWdpc3RyeSBpbnN0YW5jZS5cbiAgICogQHN1bW1hcnkgUmV0dXJucyB0aGUgY3VycmVudCB7QGxpbmsgSW5qZWN0YWJsZXNSZWdpc3RyeX0gb3IgY3JlYXRlcyBhIGRlZmF1bHQgb25lIGlmIG5vbmUgZXhpc3RzLlxuICAgKiBAcmV0dXJuIHtJbmplY3RhYmxlc1JlZ2lzdHJ5fSBUaGUgY3VycmVudCByZWdpc3RyeSBpbnN0YW5jZVxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0UmVnaXN0cnkoKSB7XG4gICAgaWYgKCFJbmplY3RhYmxlcy5hY3RpbmdJbmplY3RhYmxlc1JlZ2lzdHJ5KVxuICAgICAgSW5qZWN0YWJsZXMuYWN0aW5nSW5qZWN0YWJsZXNSZWdpc3RyeSA9IG5ldyBJbmplY3RhYmxlUmVnaXN0cnlJbXAoKTtcbiAgICByZXR1cm4gSW5qZWN0YWJsZXMuYWN0aW5nSW5qZWN0YWJsZXNSZWdpc3RyeTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ2xlYXJzIGFsbCByZWdpc3RlcmVkIGluamVjdGFibGVzLlxuICAgKiBAc3VtbWFyeSBSZXNldHMgdGhlIHJlZ2lzdHJ5IHRvIGEgY2xlYW4gc3RhdGUgYnkgY3JlYXRpbmcgYSBuZXcgZW1wdHkgcmVnaXN0cnkgaW5zdGFuY2UuXG4gICAqIEByZXR1cm4ge3ZvaWR9XG4gICAqL1xuICBzdGF0aWMgcmVzZXQoKSB7XG4gICAgSW5qZWN0YWJsZXMuc2V0UmVnaXN0cnkobmV3IEluamVjdGFibGVSZWdpc3RyeUltcCgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVtb3ZlcyBzcGVjaWZpYyBpbmplY3RhYmxlcyBmcm9tIHRoZSByZWdpc3RyeSBiYXNlZCBvbiBhIHBhdHRlcm4uXG4gICAqIEBzdW1tYXJ5IFNlbGVjdGl2ZWx5IHJlc2V0cyB0aGUgcmVnaXN0cnkgYnkgcmVtb3Zpbmcgb25seSB0aGUgaW5qZWN0YWJsZXMgd2hvc2UgbmFtZXMgbWF0Y2ggdGhlIHByb3ZpZGVkIHBhdHRlcm4uXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgUmVnRXhwfSBtYXRjaCBBIHN0cmluZyBvciByZWd1bGFyIGV4cHJlc3Npb24gcGF0dGVybiB0byBtYXRjaCBhZ2FpbnN0IGluamVjdGFibGUgbmFtZXNcbiAgICogQHJldHVybiB7dm9pZH1cbiAgICovXG4gIHN0YXRpYyBzZWxlY3RpdmVSZXNldChtYXRjaDogc3RyaW5nIHwgUmVnRXhwKSB7XG4gICAgY29uc3QgcmVnZXhwID0gdHlwZW9mIG1hdGNoID09PSBcInN0cmluZ1wiID8gbmV3IFJlZ0V4cChtYXRjaCkgOiBtYXRjaDtcbiAgICAoSW5qZWN0YWJsZXMuYWN0aW5nSW5qZWN0YWJsZXNSZWdpc3RyeSBhcyBhbnkpW1wiY2FjaGVcIl0gPSBPYmplY3QuZW50cmllcyhcbiAgICAgIChJbmplY3RhYmxlcy5hY3RpbmdJbmplY3RhYmxlc1JlZ2lzdHJ5IGFzIGFueSlbXCJjYWNoZVwiXVxuICAgICkucmVkdWNlKChhY2N1bTogUmVjb3JkPHN0cmluZywgYW55PiwgW2tleSwgdmFsXSkgPT4ge1xuICAgICAgaWYgKCFrZXkubWF0Y2gocmVnZXhwKSkgYWNjdW1ba2V5XSA9IHZhbDtcbiAgICAgIHJldHVybiBhY2N1bTtcbiAgICB9LCB7fSk7XG4gIH1cbn1cbiIsImltcG9ydCBcInJlZmxlY3QtbWV0YWRhdGFcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gUmVmbGVjdGlvbiBtZXRhZGF0YSBrZXkgZm9yIGFjY2Vzc2luZyBUeXBlU2NyaXB0IHR5cGUgaW5mb3JtYXRpb24uXG4gKiBAc3VtbWFyeSBIb2xkcyB0aGUga2V5IGZvciByZXRyaWV2aW5nIHRoZSBkZXNpZ24gdHlwZSBmcm9tIFR5cGVTY3JpcHQncyByZWZsZWN0aW9uIG1ldGFkYXRhLlxuICogQGNvbnN0IFR5cGVLZXlcbiAqIEBtZW1iZXJPZiBtb2R1bGU6aW5qZWN0YWJsZS1kZWNvcmF0b3JzXG4gKi9cbmV4cG9ydCBjb25zdCBUeXBlS2V5ID0gXCJkZXNpZ246dHlwZVwiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBFeHRyYWN0cyB0aGUgdHlwZSBuYW1lIGZyb20gYSBkZWNvcmF0ZWQgcHJvcGVydHkgdXNpbmcgcmVmbGVjdGlvbi5cbiAqIEBzdW1tYXJ5IFJldHJpZXZlcyB0aGUgdHlwZSBmcm9tIGEgcHJvcGVydHkgZGVjb3JhdG9yIGJ5IGFjY2Vzc2luZyBUeXBlU2NyaXB0J3MgcmVmbGVjdGlvbiBtZXRhZGF0YS5cbiAqIEBwYXJhbSB7YW55fSBtb2RlbCBUaGUgdGFyZ2V0IG9iamVjdCBjb250YWluaW5nIHRoZSBkZWNvcmF0ZWQgcHJvcGVydHlcbiAqIEBwYXJhbSB7c3RyaW5nIHwgc3ltYm9sfSBwcm9wS2V5IFRoZSBwcm9wZXJ0eSBrZXkgKG5hbWUgb3Igc3ltYm9sKSBvZiB0aGUgZGVjb3JhdGVkIHByb3BlcnR5XG4gKiBAcmV0dXJuIHtzdHJpbmcgfCB1bmRlZmluZWR9IFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0eXBlLCBvciB1bmRlZmluZWQgaWYgaXQncyBhIEZ1bmN0aW9uIHR5cGVcbiAqIEBmdW5jdGlvbiBnZXRUeXBlRnJvbURlY29yYXRvclxuICogQG1lbWJlck9mIG1vZHVsZTppbmplY3RhYmxlLWRlY29yYXRvcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFR5cGVGcm9tRGVjb3JhdG9yKFxuICBtb2RlbDogYW55LFxuICBwcm9wS2V5OiBzdHJpbmcgfCBzeW1ib2wsXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCB0eXBlRGVmID0gUmVmbGVjdC5nZXRNZXRhZGF0YShUeXBlS2V5LCBtb2RlbCwgcHJvcEtleSk7XG4gIHJldHVybiB0eXBlRGVmLm5hbWUgIT09IFwiRnVuY3Rpb25cIiA/IHR5cGVEZWYubmFtZSA6IHVuZGVmaW5lZDtcbn1cbiIsImltcG9ydCB7IEluamVjdGFibGVzS2V5cyB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgSW5qZWN0YWJsZXMgfSBmcm9tIFwiLi9JbmplY3RhYmxlc1wiO1xuaW1wb3J0IHsgZ2V0VHlwZUZyb21EZWNvcmF0b3IgfSBmcm9tIFwiLi91dGlsc1wiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBHZW5lcmF0ZXMgYSBmdWxseSBxdWFsaWZpZWQgcmVmbGVjdGlvbiBtZXRhZGF0YSBrZXkuXG4gKiBAc3VtbWFyeSBSZXR1cm5zIHRoZSByZWZsZWN0aW9uIGtleSBmb3IgaW5qZWN0YWJsZXMgYnkgcHJlZml4aW5nIHRoZSBwcm92aWRlZCBrZXkgd2l0aCB0aGUgYmFzZSByZWZsZWN0aW9uIGtleS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSB0byBiZSBwcmVmaXhlZFxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgZnVsbHkgcXVhbGlmaWVkIHJlZmxlY3Rpb24ga2V5XG4gKiBAZnVuY3Rpb24gZ2V0SW5qZWN0S2V5XG4gKiBAbWVtYmVyT2YgbW9kdWxlOmluamVjdGFibGUtZGVjb3JhdG9yc1xuICovXG5jb25zdCBnZXRJbmplY3RLZXkgPSAoa2V5OiBzdHJpbmcpID0+IEluamVjdGFibGVzS2V5cy5SRUZMRUNUICsga2V5O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBEZWNvcmF0b3IgdGhhdCBtYXJrcyBhIGNsYXNzIGFzIGF2YWlsYWJsZSBmb3IgZGVwZW5kZW5jeSBpbmplY3Rpb24uXG4gKiBAc3VtbWFyeSBEZWZpbmVzIGEgY2xhc3MgYXMgYW4gaW5qZWN0YWJsZSBzaW5nbGV0b24gdGhhdCBjYW4gYmUgcmV0cmlldmVkIGZyb20gdGhlIHJlZ2lzdHJ5LlxuICogV2hlbiBhcHBsaWVkIHRvIGEgY2xhc3MsIHJlcGxhY2VzIGl0cyBjb25zdHJ1Y3RvciB3aXRoIG9uZSB0aGF0IHJldHVybnMgYSBzaW5nbGV0b24gaW5zdGFuY2UuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IFtjYXRlZ29yeV0gRGVmYXVsdHMgdG8gdGhlIGNsYXNzIG5hbWUuIFVzZWZ1bCB3aGVuIG1pbmlmaWNhdGlvbiBvY2N1cnMgYW5kIG5hbWVzIGFyZSBjaGFuZ2VkLFxuICogb3Igd2hlbiB5b3Ugd2FudCB0byB1cGNhc3QgdGhlIG9iamVjdCB0byBhIGRpZmZlcmVudCB0eXBlLlxuICogQHBhcmFtIHtib29sZWFufSBbZm9yY2VdIERlZmluZXMgaWYgdGhlIGluamVjdGFibGUgc2hvdWxkIG92ZXJyaWRlIGFuIGFscmVhZHkgZXhpc3RpbmcgaW5zdGFuY2UgKGlmIGFueSkuXG4gKiBPbmx5IG1lYW50IGZvciBleHRlbmRpbmcgZGVjb3JhdG9ycy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtpbnN0YW5jZUNhbGxiYWNrXSBPcHRpb25hbCBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIGluc3RhbmNlIGFmdGVyIGNyZWF0aW9uLlxuICogQHJldHVybiB7RnVuY3Rpb259IEEgZGVjb3JhdG9yIGZ1bmN0aW9uIHRoYXQgdHJhbnNmb3JtcyB0aGUgY2xhc3MgaW50byBhbiBpbmplY3RhYmxlLlxuICpcbiAqIEBmdW5jdGlvbiBpbmplY3RhYmxlXG4gKiBAY2F0ZWdvcnkgQ2xhc3MgRGVjb3JhdG9yc1xuICpcbiAqIEBtZXJtYWlkXG4gKiBzZXF1ZW5jZURpYWdyYW1cbiAqICAgcGFydGljaXBhbnQgQ2xpZW50XG4gKiAgIHBhcnRpY2lwYW50IERlY29yYXRvclxuICogICBwYXJ0aWNpcGFudCBJbmplY3RhYmxlc1xuICpcbiAqICAgQ2xpZW50LT4+RGVjb3JhdG9yOiBAaW5qZWN0YWJsZSgpXG4gKiAgIERlY29yYXRvci0+PkRlY29yYXRvcjogQ3JlYXRlIG5ldyBjb25zdHJ1Y3RvclxuICpcbiAqICAgTm90ZSBvdmVyIERlY29yYXRvcjogV2hlbiBuZXcgaW5zdGFuY2UgcmVxdWVzdGVkXG4gKiAgIERlY29yYXRvci0+PkluamVjdGFibGVzOiBnZXQobmFtZSlcbiAqICAgYWx0IEluc3RhbmNlIGV4aXN0c1xuICogICAgIEluamVjdGFibGVzLS0+PkRlY29yYXRvcjogUmV0dXJuIGV4aXN0aW5nIGluc3RhbmNlXG4gKiAgIGVsc2UgTm8gaW5zdGFuY2VcbiAqICAgICBEZWNvcmF0b3ItPj5JbmplY3RhYmxlczogcmVnaXN0ZXIob3JpZ2luYWwsIG5hbWUpXG4gKiAgICAgRGVjb3JhdG9yLT4+SW5qZWN0YWJsZXM6IGdldChuYW1lKVxuICogICAgIEluamVjdGFibGVzLS0+PkRlY29yYXRvcjogUmV0dXJuIG5ldyBpbnN0YW5jZVxuICogICAgIG9wdCBIYXMgY2FsbGJhY2tcbiAqICAgICAgIERlY29yYXRvci0+PkRlY29yYXRvcjogQ2FsbCBpbnN0YW5jZUNhbGxiYWNrXG4gKiAgICAgZW5kXG4gKiAgIGVuZFxuICogICBEZWNvcmF0b3ItPj5EZWNvcmF0b3I6IERlZmluZSBtZXRhZGF0YVxuICogICBEZWNvcmF0b3ItLT4+Q2xpZW50OiBSZXR1cm4gaW5zdGFuY2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluamVjdGFibGUoXG4gIGNhdGVnb3J5OiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQsXG4gIGZvcmNlOiBib29sZWFuID0gZmFsc2UsXG4gIGluc3RhbmNlQ2FsbGJhY2s/OiAoaW5zdGFuY2U6IGFueSwgLi4uYXJnczogYW55W10pID0+IHZvaWRcbikge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIHJldHVybiAob3JpZ2luYWw6IGFueSwgcHJvcGVydHlLZXk/OiBhbnkpID0+IHtcbiAgICBjb25zdCBuYW1lID0gY2F0ZWdvcnkgfHwgb3JpZ2luYWwubmFtZTtcbiAgICAvLyB0aGUgbmV3IGNvbnN0cnVjdG9yIGJlaGF2aW91clxuICAgIGNvbnN0IG5ld0NvbnN0cnVjdG9yOiBhbnkgPSBmdW5jdGlvbiAoLi4uYXJnczogYW55W10pIHtcbiAgICAgIGNvbnN0IGluajogYW55ID0gSW5qZWN0YWJsZXMuZ2V0PGFueT4obmFtZSwgLi4uYXJncyk7XG4gICAgICBpZiAoIWluaikgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgICAgY29uc3QgbWV0YWRhdGEgPSBPYmplY3QuYXNzaWduKFxuICAgICAgICB7fSxcbiAgICAgICAge1xuICAgICAgICAgIGNsYXNzOiBuYW1lLFxuICAgICAgICB9XG4gICAgICApO1xuXG4gICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKFxuICAgICAgICBnZXRJbmplY3RLZXkoSW5qZWN0YWJsZXNLZXlzLklOSkVDVEFCTEUpLFxuICAgICAgICBtZXRhZGF0YSxcbiAgICAgICAgaW5qLmNvbnN0cnVjdG9yXG4gICAgICApO1xuXG4gICAgICByZXR1cm4gaW5qO1xuICAgIH07XG5cbiAgICAvLyBjb3B5IHByb3RvdHlwZSBzbyBpbnN0YW5jZW9mIG9wZXJhdG9yIHN0aWxsIHdvcmtzXG4gICAgbmV3Q29uc3RydWN0b3IucHJvdG90eXBlID0gb3JpZ2luYWwucHJvdG90eXBlO1xuICAgIC8vIG5ld0NvbnN0cnVjdG9yLl9fcHJvdG9fXyA9IG9yaWdpbmFsLl9fcHJvdG9fXztcbiAgICAvLyBTZXRzIHRoZSBwcm9wZXIgY29uc3RydWN0b3IgbmFtZSBmb3IgdHlwZSB2ZXJpZmljYXRpb25cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobmV3Q29uc3RydWN0b3IsIFwibmFtZVwiLCB7XG4gICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgIHZhbHVlOiBvcmlnaW5hbC5wcm90b3R5cGUuY29uc3RydWN0b3IubmFtZSxcbiAgICB9KTtcblxuICAgIEluamVjdGFibGVzLnJlZ2lzdGVyKG5ld0NvbnN0cnVjdG9yLCBuYW1lLCB0cnVlLCBmb3JjZSk7XG4gICAgLy8gcmV0dXJuIG5ldyBjb25zdHJ1Y3RvciAod2lsbCBvdmVycmlkZSBvcmlnaW5hbClcbiAgICByZXR1cm4gbmV3Q29uc3RydWN0b3I7XG4gIH07XG59XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBGdW5jdGlvbiB0eXBlIGZvciB0cmFuc2Zvcm1pbmcgaW5qZWN0YWJsZSBpbnN0YW5jZXMgYmVmb3JlIHRoZXkncmUgaW5qZWN0ZWQuXG4gKiBAc3VtbWFyeSBGdW5jdGlvbiB3aGljaCB0cmFuc2Zvcm1zIGEgY2FjaGVkIHtAbGluayBpbmplY3RhYmxlfSBpbnN0YW5jZSBiZWZvcmUgaXQncyBpbmplY3RlZCBpbnRvIGEgdGFyZ2V0IG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge2FueX0gaW5qZWN0YWJsZSBUaGUgaW5qZWN0YWJsZSBpbnN0YW5jZSB0byB0cmFuc2Zvcm1cbiAqIEBwYXJhbSB7YW55fSBvYmogVGhlIG9iamVjdCB0aGUgaW5qZWN0YWJsZSB3aWxsIGJlIGluamVjdGVkIG9uXG4gKiBAcmV0dXJuIHthbnl9IFRoZSB0cmFuc2Zvcm1lZCBpbmplY3RhYmxlIGluc3RhbmNlXG4gKlxuICogQHR5cGVkZWYge0Z1bmN0aW9ufSBJbnN0YW5jZVRyYW5zZm9ybWVyXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmluamVjdGFibGUtZGVjb3JhdG9yc1xuICovXG5leHBvcnQgdHlwZSBJbnN0YW5jZVRyYW5zZm9ybWVyID0gKGluamVjdGFibGU6IGFueSwgb2JqOiBhbnkpID0+IGFueTtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gUHJvcGVydHkgZGVjb3JhdG9yIHRoYXQgaW5qZWN0cyBhIGRlcGVuZGVuY3kgaW50byBhIGNsYXNzIHByb3BlcnR5LlxuICogQHN1bW1hcnkgQWxsb3dzIGZvciB0aGUgaW5qZWN0aW9uIG9mIGFuIHtAbGluayBpbmplY3RhYmxlfSBkZWNvcmF0ZWQgZGVwZW5kZW5jeSBpbnRvIGEgY2xhc3MgcHJvcGVydHkuXG4gKiBUaGUgcHJvcGVydHkgbXVzdCBiZSB0eXBlZCBmb3IgdGhlIHJlcXVlc3RlZCBkZXBlbmRlbmN5LiBPbmx5IGNvbmNyZXRlIGNsYXNzZXMgYXJlIHN1cHBvcnRlZDsgZ2VuZXJpY3MgYXJlIG5vdC5cbiAqXG4gKiBJbmplY3RlZCBwcm9wZXJ0aWVzIHNob3VsZCBiZSBkZXNjcmliZWQgbGlrZSBzbzpcbiAqIDxwcmU+XG4gKiAgICAgY2xhc3MgQ2xhc3NOYW1lIHtcbiAqICAgICAgICAgLi4uXG4gKlxuICogICAgICAgICBAaW5qZWN0KClcbiAqICAgICAgICAgcHJvcGVydHlOYW1lITogSW5qZWN0YWJsZUNsYXNzO1xuICpcbiAqICAgICAgICAgLi4uXG4gKiAgICAgfVxuICogPC9wcmU+XG4gKlxuICogd2hlcmUgSW5qZWN0YWJsZUNsYXNzIGlzIHRoZSBjbGFzcyB5b3Ugd2FudCB0byBpbmplY3QuXG4gKiBOb3RpY2UgdGhlIHVzZSBvZiAnITonIHRvIGVuc3VyZSB0aGUgdHJhbnNwaWxlciB0aGUgcHJvcGVydHkgd2lsbCBiZSBzZXQgb3V0c2lkZSB0aGUgY29uc3RydWN0b3IgYnV0IHdpbGwgYWx3YXlzIGJlIGRlZmluZWQuXG4gKiBGb3IgcHJvamVjdHMgd2hlcmUgbWluaWZpY2F0aW9uIG9jY3VycywgeW91IHNob3VsZCB1c2UgdGhlIGNhdGVnb3J5IHBhcmFtIHRvIGVuc3VyZSB0aGUgbmFtZSBpcyB0aGUgc2FtZSB0aHJvdWdob3V0LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBbY2F0ZWdvcnldIERlZmF1bHRzIHRvIHRoZSBjbGFzcyBuYW1lIGRlcml2ZWQgZnJvbSB0aGUgcHJvcGVydHkgdHlwZS4gVXNlZnVsIHdoZW4gbWluaWZpY2F0aW9uIG9jY3Vyc1xuICogYW5kIG5hbWVzIGFyZSBjaGFuZ2VkLCBvciB3aGVuIHlvdSB3YW50IHRvIHVwY2FzdCB0aGUgb2JqZWN0IHRvIGEgZGlmZmVyZW50IHR5cGUuXG4gKiBAcGFyYW0ge0luc3RhbmNlVHJhbnNmb3JtZXJ9IFt0cmFuc2Zvcm1lcl0gT3B0aW9uYWwgZnVuY3Rpb24gdG8gdHJhbnNmb3JtIHRoZSBpbmplY3RhYmxlIGluc3RhbmNlIGJlZm9yZSBpdCdzIGluamVjdGVkLlxuICogQHJldHVybiB7RnVuY3Rpb259IEEgcHJvcGVydHkgZGVjb3JhdG9yIGZ1bmN0aW9uIHRoYXQgc2V0cyB1cCB0aGUgZGVwZW5kZW5jeSBpbmplY3Rpb24uXG4gKlxuICogQGZ1bmN0aW9uIGluamVjdFxuICogQGNhdGVnb3J5IFByb3BlcnR5IERlY29yYXRvcnNcbiAqXG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IENsaWVudFxuICogICBwYXJ0aWNpcGFudCBEZWNvcmF0b3JcbiAqICAgcGFydGljaXBhbnQgSW5qZWN0YWJsZXNcbiAqXG4gKiAgIENsaWVudC0+PkRlY29yYXRvcjogQGluamVjdCgpXG4gKiAgIERlY29yYXRvci0+PkRlY29yYXRvcjogR2V0IHR5cGUgZnJvbSBwcm9wZXJ0eVxuICogICBEZWNvcmF0b3ItPj5EZWNvcmF0b3I6IERlZmluZSBtZXRhZGF0YVxuICogICBEZWNvcmF0b3ItPj5EZWNvcmF0b3I6IERlZmluZSBwcm9wZXJ0eSBnZXR0ZXJcbiAqXG4gKiAgIE5vdGUgb3ZlciBEZWNvcmF0b3I6IFdoZW4gcHJvcGVydHkgYWNjZXNzZWRcbiAqICAgQ2xpZW50LT4+RGVjb3JhdG9yOiBhY2Nlc3MgcHJvcGVydHlcbiAqICAgRGVjb3JhdG9yLT4+RGVjb3JhdG9yOiBDaGVjayBpZiBpbnN0YW5jZSBleGlzdHNcbiAqICAgYWx0IEluc3RhbmNlIGV4aXN0cyBpbiBXZWFrTWFwXG4gKiAgICAgRGVjb3JhdG9yLS0+PkNsaWVudDogUmV0dXJuIGNhY2hlZCBpbnN0YW5jZVxuICogICBlbHNlIE5vIGluc3RhbmNlXG4gKiAgICAgRGVjb3JhdG9yLT4+SW5qZWN0YWJsZXM6IGdldChuYW1lKVxuICogICAgIGFsdCBJbmplY3RhYmxlIGZvdW5kXG4gKiAgICAgICBJbmplY3RhYmxlcy0tPj5EZWNvcmF0b3I6IFJldHVybiBpbmplY3RhYmxlIGluc3RhbmNlXG4gKiAgICAgICBvcHQgSGFzIHRyYW5zZm9ybWVyXG4gKiAgICAgICAgIERlY29yYXRvci0+PkRlY29yYXRvcjogQ2FsbCB0cmFuc2Zvcm1lclxuICogICAgICAgZW5kXG4gKiAgICAgICBEZWNvcmF0b3ItPj5EZWNvcmF0b3I6IFN0b3JlIGluIFdlYWtNYXBcbiAqICAgICAgIERlY29yYXRvci0tPj5DbGllbnQ6IFJldHVybiBpbnN0YW5jZVxuICogICAgIGVsc2UgTm8gaW5qZWN0YWJsZVxuICogICAgICAgRGVjb3JhdG9yLS0+PkNsaWVudDogVGhyb3cgZXJyb3JcbiAqICAgICBlbmRcbiAqICAgZW5kXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3QoY2F0ZWdvcnk/OiBzdHJpbmcsIHRyYW5zZm9ybWVyPzogSW5zdGFuY2VUcmFuc2Zvcm1lcikge1xuICByZXR1cm4gKHRhcmdldDogYW55LCBwcm9wZXJ0eUtleT86IGFueSkgPT4ge1xuICAgIGNvbnN0IHZhbHVlcyA9IG5ldyBXZWFrTWFwKCk7XG5cbiAgICBjb25zdCBuYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQgPVxuICAgICAgY2F0ZWdvcnkgfHwgZ2V0VHlwZUZyb21EZWNvcmF0b3IodGFyZ2V0LCBwcm9wZXJ0eUtleSk7XG4gICAgaWYgKCFuYW1lKSB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBnZXQgVHlwZSBmcm9tIGRlY29yYXRvcmApO1xuXG4gICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShcbiAgICAgIGdldEluamVjdEtleShJbmplY3RhYmxlc0tleXMuSU5KRUNUKSxcbiAgICAgIHtcbiAgICAgICAgaW5qZWN0YWJsZTogbmFtZSxcbiAgICAgIH0sXG4gICAgICB0YXJnZXQsXG4gICAgICBwcm9wZXJ0eUtleVxuICAgICk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSwge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0KHRoaXM6IGFueSkge1xuICAgICAgICBjb25zdCBkZXNjcmlwdG9yOiBQcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFxuICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICBwcm9wZXJ0eUtleVxuICAgICAgICApIGFzIFByb3BlcnR5RGVzY3JpcHRvcjtcbiAgICAgICAgaWYgKGRlc2NyaXB0b3IuY29uZmlndXJhYmxlKSB7XG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIHByb3BlcnR5S2V5LCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIGdldCh0aGlzOiBhbnkpIHtcbiAgICAgICAgICAgICAgbGV0IG9iaiA9IHZhbHVlcy5nZXQodGhpcyk7XG4gICAgICAgICAgICAgIGlmICghb2JqKSB7XG4gICAgICAgICAgICAgICAgb2JqID0gSW5qZWN0YWJsZXMuZ2V0KG5hbWUpO1xuICAgICAgICAgICAgICAgIGlmICghb2JqKVxuICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICAgICBgQ291bGQgbm90IGdldCBJbmplY3RhYmxlICR7bmFtZX0gdG8gaW5qZWN0IGluICR7dGFyZ2V0LmNvbnN0cnVjdG9yID8gdGFyZ2V0LmNvbnN0cnVjdG9yLm5hbWUgOiB0YXJnZXQubmFtZX0ncyAke3Byb3BlcnR5S2V5fWBcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybWVyKVxuICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgb2JqID0gdHJhbnNmb3JtZXIob2JqLCB0YXJnZXQpO1xuICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhbHVlcy5zZXQodGhpcywgb2JqKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gb2JqO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gdGhpc1twcm9wZXJ0eUtleV07XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSk7XG4gIH07XG59XG4iLCIvKipcbiAqIEBkZXNjcmlwdGlvbiBBIGxpZ2h0d2VpZ2h0IGRlcGVuZGVuY3kgaW5qZWN0aW9uIGxpYnJhcnkgZm9yIFR5cGVTY3JpcHQgYXBwbGljYXRpb25zLlxuICogQHN1bW1hcnkgQWRkcyBhIHNpbXBsZSBJbmplY3RhYmxlcyBpbXBsZW1lbnRhdGlvbiB0byBjcmVhdGUgc2luZ2xldG9uIGluc3RhbmNlcyBvZiBhbiBvYmplY3RcbiAqIGFuZCBlYXNpbHkgaW5qZWN0IGl0IGludG8gb3RoZXIgb2JqZWN0cy4gUHJvdmlkZXMgZGVjb3JhdG9ycyBmb3IgbWFya2luZyBjbGFzc2VzIGFzIGluamVjdGFibGVcbiAqIGFuZCBmb3IgaW5qZWN0aW5nIGRlcGVuZGVuY2llcyBpbnRvIGNsYXNzIHByb3BlcnRpZXMuXG4gKlxuICogQG1vZHVsZSBpbmplY3RhYmxlLWRlY29yYXRvcnNcbiAqL1xuXG5leHBvcnQgKiBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2RlY29yYXRvcnNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL0luamVjdGFibGVzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9yZWdpc3RyeVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vdXRpbHNcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQ3VycmVudCB2ZXJzaW9uIG9mIHRoZSBpbmplY3RhYmxlLWRlY29yYXRvcnMgbGlicmFyeS5cbiAqIEBzdW1tYXJ5IERlZmluZWQgb24gbGlicmFyeSBidWlsZC4gSG9sZHMgdGhlIGxpYnJhcnkncyBjdXJyZW50IHZlcnNpb24gc3RyaW5nLlxuICogQGNvbnN0IFZFUlNJT05cbiAqIEBtZW1iZXJPZiBtb2R1bGU6aW5qZWN0YWJsZS1kZWNvcmF0b3JzXG4gKi9cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gXCIjI1ZFUlNJT04jI1wiO1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUE7Ozs7Ozs7Ozs7QUFVRztBQUNVLE1BQUEsZUFBZSxHQUFHO0FBQzdCLElBQUEsT0FBTyxFQUFFLFlBQVk7QUFDckIsSUFBQSxVQUFVLEVBQUUsWUFBWTtBQUN4QixJQUFBLE1BQU0sRUFBRSxRQUFROzs7QUNxQ2xCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXlDRztNQUNVLHFCQUFxQixDQUFBO0FBQWxDLElBQUEsV0FBQSxHQUFBO1FBQ1UsSUFBSyxDQUFBLEtBQUEsR0FBK0IsRUFBRTs7QUFFOUM7O0FBRUc7QUFDSCxJQUFBLEdBQUcsQ0FBSSxJQUFZLEVBQUUsR0FBRyxJQUFXLEVBQUE7QUFDakMsUUFBQSxJQUFJO1lBQ0YsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFDbkMsWUFBQSxNQUFNLFFBQVEsR0FBRyxFQUFFLElBQUksRUFB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
|
|
442
|
+
export { InjectableRegistryImp, Injectables, InjectablesKeys, TypeKey, VERSION, getInjectKey, getTypeFromDecorator, inject, injectable };
|
|
443
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5qZWN0YWJsZS1kZWNvcmF0b3JzLmVzbS5janMiLCJzb3VyY2VzIjpbIi4uL3NyYy9jb25zdGFudHMudHMiLCIuLi9zcmMvcmVnaXN0cnkudHMiLCIuLi9zcmMvSW5qZWN0YWJsZXMudHMiLCIuLi9zcmMvdXRpbHMudHMiLCIuLi9zcmMvZGVjb3JhdG9ycy50cyIsIi4uL3NyYy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBkZXNjcmlwdGlvbiBDb25zdGFudHMgdXNlZCBmb3IgcmVmbGVjdGlvbiBtZXRhZGF0YSBrZXlzIGluIHRoZSBkZXBlbmRlbmN5IGluamVjdGlvbiBzeXN0ZW0uXG4gKiBAc3VtbWFyeSBJbmplY3RhYmxlcyBSZWZsZWN0aW9uIGtleXMgdXNlZCB0byBzdG9yZSBhbmQgcmV0cmlldmUgbWV0YWRhdGEgYWJvdXQgaW5qZWN0YWJsZSBjbGFzc2VzIGFuZCBwcm9wZXJ0aWVzLlxuICogXG4gKiBAcHJvcGVydHkge3N0cmluZ30gUkVGTEVDVCBSZWZsZWN0aW9uIGluamVjdGFibGVzIGJhc2Uga2V5IHByZWZpeCBmb3IgYWxsIG1ldGFkYXRhIGtleXNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBJTkpFQ1RBQkxFIFJlZmxlY3Rpb24ga2V5IHN1ZmZpeCBmb3IgbWFya2luZyBhIGNsYXNzIGFzIGluamVjdGFibGVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBJTkpFQ1QgUmVmbGVjdGlvbiBrZXkgc3VmZml4IGZvciBtYXJraW5nIGEgcHJvcGVydHkgZm9yIGluamVjdGlvblxuICogXG4gKiBAY29uc3QgSW5qZWN0YWJsZXNLZXlzXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmluamVjdGFibGUtZGVjb3JhdG9yc1xuICovXG5leHBvcnQgY29uc3QgSW5qZWN0YWJsZXNLZXlzID0ge1xuICBSRUZMRUNUOiBcImluamVjdC5kYi5cIixcbiAgSU5KRUNUQUJMRTogXCJpbmplY3RhYmxlXCIsXG4gIElOSkVDVDogXCJpbmplY3RcIixcbn07XG4iLCJpbXBvcnQgeyBJbmplY3RhYmxlRGVmLCBJbmplY3RhYmxlT3B0aW9ucyB9IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgeyBJbmplY3RhYmxlc0tleXMgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGdldEluamVjdEtleSB9IGZyb20gXCIuL2RlY29yYXRvcnNcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gVHlwZSByZXByZXNlbnRpbmcgZWl0aGVyIGEgY2xhc3MgY29uc3RydWN0b3Igb3IgYW4gaW5zdGFuY2UuXG4gKiBAc3VtbWFyeSBEZWZpbmVzIGFuIEluamVjdGFibGUgdHlwZSB0aGF0IGNhbiBiZSBlaXRoZXIgYSBjbGFzcyBjb25zdHJ1Y3RvciBvciBhbiBpbnN0YW5jZSBvZiBhIGNsYXNzLlxuICogQHRlbXBsYXRlIFQgVGhlIHR5cGUgb2YgdGhlIGluamVjdGFibGUgb2JqZWN0XG4gKiBAdHlwZWRlZiB7ZnVuY3Rpb24oYW55KTogVCB8IFR9IEluamVjdGFibGVcbiAqIEBtZW1iZXJPZiBtb2R1bGU6aW5qZWN0YWJsZS1kZWNvcmF0b3JzXG4gKi9cbmV4cG9ydCB0eXBlIEluamVjdGFibGU8VD4gPSB7IG5ldyAoLi4uYXJnczogYW55W10pOiBUIH0gfCBUO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBDb250cmFjdCBmb3IgYSByZWdpc3RyeSB0aGF0IG1hbmFnZXMgaW5qZWN0YWJsZSBvYmplY3RzLlxuICogQHN1bW1hcnkgSW50ZXJmYWNlIGZvciBhbiBpbmplY3RhYmxlIHJlZ2lzdHJ5IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyBmb3IgcmV0cmlldmluZywgcmVnaXN0ZXJpbmcsIGFuZCBidWlsZGluZyBpbmplY3RhYmxlIG9iamVjdHMuXG4gKiBAdGVtcGxhdGUgVCBUeXBlIHBhcmFtZXRlciB1c2VkIGluIHRoZSBpbnRlcmZhY2UgbWV0aG9kc1xuICogQGludGVyZmFjZSBJbmplY3RhYmxlc1JlZ2lzdHJ5XG4gKiBAbWVtYmVyT2YgbW9kdWxlOmluamVjdGFibGUtZGVjb3JhdG9yc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEluamVjdGFibGVzUmVnaXN0cnkge1xuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEZldGNoZXMgYW4gaW5qZWN0YWJsZSBpbnN0YW5jZSBieSBpdHMgcmVnaXN0ZXJlZCBuYW1lLlxuICAgKiBAc3VtbWFyeSBSZXRyaWV2ZXMgYW4ge0BsaW5rIEluamVjdGFibGV9IGZyb20gdGhlIHJlZ2lzdHJ5IGJ5IG5hbWUsIG9wdGlvbmFsbHkgcGFzc2luZyBjb25zdHJ1Y3RvciBhcmd1bWVudHMuXG4gICAqIEB0ZW1wbGF0ZSBUIFR5cGUgb2YgdGhlIGluamVjdGFibGUgb2JqZWN0IHRvIHJldHJpZXZlXG4gICAqIEBwYXJhbSB7c3ltYm9sfSBuYW1lIFRoZSByZWdpc3RlcmVkIG5hbWUgb2YgdGhlIGluamVjdGFibGUgdG8gcmV0cmlldmVcbiAgICogQHBhcmFtIHthbnlbXX0gYXJncyBDb25zdHJ1Y3RvciBhcmd1bWVudHMgdG8gcGFzcyB3aGVuIGluc3RhbnRpYXRpbmcgdGhlIGluamVjdGFibGVcbiAgICogQHJldHVybiB7SW5qZWN0YWJsZTxUPiB8IHVuZGVmaW5lZH0gVGhlIGluamVjdGFibGUgaW5zdGFuY2Ugb3IgdW5kZWZpbmVkIGlmIG5vdCBmb3VuZFxuICAgKiBAbWVtYmVyT2YgbW9kdWxlOmluamVjdGFibGUtZGVjb3JhdG9yc1xuICAgKi9cbiAgZ2V0PFQ+KFxuICAgIG5hbWU6IHN5bWJvbCB8IHN0cmluZyB8IHsgbmV3ICguLi5hcmdzOiBhbnlbXSk6IFQgfSxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBUIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQWRkcyBhIGNsYXNzIG9yIG9iamVjdCB0byB0aGUgaW5qZWN0YWJsZSByZWdpc3RyeS5cbiAgICogQHN1bW1hcnkgUmVnaXN0ZXJzIGFuIGluamVjdGFibGUgY29uc3RydWN0b3Igb3IgaW5zdGFuY2Ugd2l0aCB0aGUgcmVnaXN0cnksIG1ha2luZyBpdCBhdmFpbGFibGUgZm9yIGluamVjdGlvbi5cbiAgICogQHRlbXBsYXRlIFQgVHlwZSBvZiB0aGUgaW5qZWN0YWJsZSBvYmplY3QgdG8gcmVnaXN0ZXJcbiAgICogQHBhcmFtIHtJbmplY3RhYmxlPFQ+fSBjb25zdHJ1Y3RvciBUaGUgY2xhc3MgY29uc3RydWN0b3Igb3Igb2JqZWN0IGluc3RhbmNlIHRvIHJlZ2lzdGVyXG4gICAqIEBwYXJhbSBvcHRpb25zXG4gICAqIEBwYXJhbSB7YW55W119IGFyZ3MgQWRkaXRpb25hbCBhcmd1bWVudHMgZm9yIHJlZ2lzdHJhdGlvbiAoY2F0ZWdvcnksIHNpbmdsZXRvbiBmbGFnLCBldGMuKVxuICAgKiBAcmV0dXJuIHt2b2lkfVxuICAgKiBAbWVtYmVyT2YgbW9kdWxlOmluamVjdGFibGUtZGVjb3JhdG9yc1xuICAgKi9cbiAgcmVnaXN0ZXI8VD4oXG4gICAgY29uc3RydWN0b3I6IEluamVjdGFibGU8VD4sXG4gICAgY2F0ZWdvcnk6IHN5bWJvbCB8IHVuZGVmaW5lZCxcbiAgICBvcHRpb25zOiBJbmplY3RhYmxlT3B0aW9uczxUPixcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiBhbiBpbmplY3RhYmxlIGNsYXNzLlxuICAgKiBAc3VtbWFyeSBJbnN0YW50aWF0ZXMgYW4gaW5qZWN0YWJsZSBjbGFzcyB1c2luZyBpdHMgY29uc3RydWN0b3IgYW5kIHRoZSBwcm92aWRlZCBhcmd1bWVudHMuXG4gICAqIEB0ZW1wbGF0ZSBUIFR5cGUgb2YgdGhlIG9iamVjdCB0byBidWlsZFxuICAgKiBAcGFyYW0ge3N5bWJvbH0gbmFtZSBPYmplY3QgY29udGFpbmluZyB0aGUgbmFtZSBvZiB0aGUgaW5qZWN0YWJsZSB0byBidWlsZFxuICAgKiBAcGFyYW0ge2FueVtdfSBhcmdzIENvbnN0cnVjdG9yIGFyZ3VtZW50cyB0byBwYXNzIHdoZW4gaW5zdGFudGlhdGluZyB0aGUgaW5qZWN0YWJsZVxuICAgKiBAcmV0dXJuIHtUfSBUaGUgbmV3bHkgY3JlYXRlZCBpbnN0YW5jZVxuICAgKiBAbWVtYmVyT2YgbW9kdWxlOmluamVjdGFibGUtZGVjb3JhdG9yc1xuICAgKi9cbiAgYnVpbGQ8VD4obmFtZTogc3ltYm9sLCAuLi5hcmdzOiBhbnlbXSk6IFQ7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIERlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgdGhlIEluamVjdGFibGVzUmVnaXN0cnkgaW50ZXJmYWNlLlxuICogQHN1bW1hcnkgSG9sZHMgdGhlIHZhcmlvdXMge0BsaW5rIEluamVjdGFibGV9cyBpbiBhIGNhY2hlIGFuZCBwcm92aWRlcyBtZXRob2RzIHRvIHJlZ2lzdGVyLCByZXRyaWV2ZSwgYW5kIGJ1aWxkIHRoZW0uXG4gKiBAdGVtcGxhdGUgVCBUeXBlIHBhcmFtZXRlciB1c2VkIGluIHRoZSBjbGFzcyBtZXRob2RzXG4gKlxuICogQGNsYXNzIEluamVjdGFibGVSZWdpc3RyeUltcFxuICogQGltcGxlbWVudHMgSW5qZWN0YWJsZXNSZWdpc3RyeVxuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6aW5qZWN0YWJsZS1kZWNvcmF0b3JzXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENyZWF0ZSBhIG5ldyByZWdpc3RyeVxuICogY29uc3QgcmVnaXN0cnkgPSBuZXcgSW5qZWN0YWJsZVJlZ2lzdHJ5SW1wKCk7XG4gKlxuICogLy8gUmVnaXN0ZXIgYSBjbGFzc1xuICogY2xhc3MgTXlTZXJ2aWNlIHtcbiAqICAgZG9Tb21ldGhpbmcoKSB7XG4gKiAgICAgcmV0dXJuICdIZWxsbyBXb3JsZCc7XG4gKiAgIH1cbiAqIH1cbiAqIHJlZ2lzdHJ5LnJlZ2lzdGVyKE15U2VydmljZSwgJ015U2VydmljZScsIHRydWUpO1xuICpcbiAqIC8vIEdldCB0aGUgaW5zdGFuY2VcbiAqIGNvbnN0IHNlcnZpY2UgPSByZWdpc3RyeS5nZXQoJ015U2VydmljZScpO1xuICogc2VydmljZS5kb1NvbWV0aGluZygpOyAvLyAnSGVsbG8gV29ybGQnXG4gKlxuICogQG1lcm1haWRcbiAqIHNlcXVlbmNlRGlhZ3JhbVxuICogICBwYXJ0aWNpcGFudCBDbGllbnRcbiAqICAgcGFydGljaXBhbnQgUmVnaXN0cnlcbiAqXG4gKiAgIENsaWVudC0+PlJlZ2lzdHJ5OiByZWdpc3RlcihNeVNlcnZpY2UpXG4gKiAgIFJlZ2lzdHJ5LT4+UmVnaXN0cnk6IFN0b3JlIGluIGNhY2hlXG4gKlxuICogICBDbGllbnQtPj5SZWdpc3RyeTogZ2V0KFwiTXlTZXJ2aWNlXCIpXG4gKiAgIGFsdCBJbnN0YW5jZSBleGlzdHMgYW5kIGlzIHNpbmdsZXRvblxuICogICAgIFJlZ2lzdHJ5LS0+PkNsaWVudDogUmV0dXJuIGNhY2hlZCBpbnN0YW5jZVxuICogICBlbHNlIE5vIGluc3RhbmNlIG9yIG5vdCBzaW5nbGV0b25cbiAqICAgICBSZWdpc3RyeS0+PlJlZ2lzdHJ5OiBidWlsZChuYW1lKVxuICogICAgIFJlZ2lzdHJ5LS0+PkNsaWVudDogUmV0dXJuIG5ldyBpbnN0YW5jZVxuICogICBlbmRcbiAqL1xuZXhwb3J0IGNsYXNzIEluamVjdGFibGVSZWdpc3RyeUltcCBpbXBsZW1lbnRzIEluamVjdGFibGVzUmVnaXN0cnkge1xuICBwcml2YXRlIGNhY2hlOiBSZWNvcmQ8c3ltYm9sLCBJbmplY3RhYmxlRGVmPiA9IHt9O1xuXG4gIGhhczxUPihuYW1lOiBzeW1ib2wgfCB7IG5ldyAoLi4uYXJnczogYW55W10pOiBUIH0pOiBib29sZWFuIHtcbiAgICBpZiAodHlwZW9mIG5hbWUgPT09IFwic3ltYm9sXCIpIHJldHVybiBuYW1lIGluIHRoaXMuY2FjaGU7XG4gICAgcmV0dXJuIFN5bWJvbC5mb3IobmFtZS50b1N0cmluZygpKSBpbiB0aGlzLmNhY2hlO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBnZXQ8VD4oXG4gICAgbmFtZTogc3ltYm9sIHwgc3RyaW5nIHwgeyBuZXcgKC4uLmFyZ3M6IGFueVtdKTogVCB9LFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFQgfCB1bmRlZmluZWQge1xuICAgIGlmICh0eXBlb2YgbmFtZSA9PT0gXCJzdHJpbmdcIikgbmFtZSA9IFN5bWJvbC5mb3IobmFtZSk7XG4gICAgaWYgKHR5cGVvZiBuYW1lICE9PSBcInN5bWJvbFwiKSB7XG4gICAgICBjb25zdCBtZXRhID0gUmVmbGVjdC5nZXRNZXRhZGF0YShcbiAgICAgICAgZ2V0SW5qZWN0S2V5KEluamVjdGFibGVzS2V5cy5JTkpFQ1RBQkxFKSxcbiAgICAgICAgbmFtZVxuICAgICAgKTtcbiAgICAgIG5hbWUgPSAobWV0YT8uc3ltYm9sIGFzIHN5bWJvbCkgfHwgU3ltYm9sLmZvcihuYW1lLnRvU3RyaW5nKCkpO1xuICAgIH1cbiAgICBpZiAoIW5hbWUpIHRocm93IG5ldyBFcnJvcihgSW5qZWN0YWJsZSAke25hbWV9IG5vdCBmb3VuZGApO1xuXG4gICAgaWYgKCEoKG5hbWUgYXMgc3ltYm9sKSBpbiB0aGlzLmNhY2hlKSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgY2FjaGUgPSB0aGlzLmNhY2hlW25hbWVdO1xuICAgIGlmICghY2FjaGUub3B0aW9ucy5zaW5nbGV0b24gJiYgIWNhY2hlLmluc3RhbmNlKVxuICAgICAgcmV0dXJuIHRoaXMuYnVpbGQ8VD4obmFtZSwgLi4uYXJncyk7XG4gICAgcmV0dXJuIGNhY2hlLmluc3RhbmNlIHx8IHRoaXMuYnVpbGQ8VD4obmFtZSwgLi4uYXJncyk7XG4gIH1cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICByZWdpc3RlcjxUPihcbiAgICBvYmo6IEluamVjdGFibGU8VD4sXG4gICAgY2F0ZWdvcnk6IHN5bWJvbCB8IHVuZGVmaW5lZCxcbiAgICBvcHRpb25zOiBJbmplY3RhYmxlT3B0aW9uczxUPixcbiAgICBmb3JjZTogYm9vbGVhbiA9IGZhbHNlXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGNhc3RPYmo6IFJlY29yZDxzdHJpbmcsIGFueT4gPSBvYmogYXMgUmVjb3JkPHN0cmluZywgYW55PjtcblxuICAgIGNvbnN0IGNvbnN0cnVjdG9yID0gIWNhc3RPYmoubmFtZSAmJiBjYXN0T2JqLmNvbnN0cnVjdG9yO1xuICAgIGlmICh0eXBlb2YgY2FzdE9iaiAhPT0gXCJmdW5jdGlvblwiICYmICFjb25zdHJ1Y3RvcilcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEluamVjdGFibGUgcmVnaXN0ZXJpbmcgZmFpbGVkLiBNaXNzaW5nIENsYXNzIG5hbWUgb3IgY29uc3RydWN0b3JgXG4gICAgICApO1xuXG4gICAgY29uc3QgbmFtZSA9IGNhdGVnb3J5IHx8IFN5bWJvbC5mb3IoKG9iaiBhcyBhbnkpLnRvU3RyaW5nKCkpO1xuXG4gICAgaWYgKCF0aGlzLmNhY2hlW25hbWVdIHx8IGZvcmNlKVxuICAgICAgdGhpcy5jYWNoZVtuYW1lXSA9IHtcbiAgICAgICAgaW5zdGFuY2U6IGNvbnN0cnVjdG9yID8gb2JqIDogdW5kZWZpbmVkLFxuICAgICAgICBjb25zdHJ1Y3RvcjogIWNvbnN0cnVjdG9yID8gb2JqIDogKG9iaiBhcyBhbnkpLmNvbnN0cnVjdG9yLFxuICAgICAgICBvcHRpb25zOiBvcHRpb25zLFxuICAgICAgfTtcbiAgfVxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIGJ1aWxkPFQ+KG5hbWU6IHN5bWJvbCwgLi4uYXJnczogYW55W10pOiBUIHtcbiAgICBjb25zdCB7IGNvbnN0cnVjdG9yLCBvcHRpb25zIH0gPSB0aGlzLmNhY2hlW25hbWVdO1xuICAgIGxldCBpbnN0YW5jZTogVDtcbiAgICB0cnkge1xuICAgICAgaW5zdGFuY2UgPSBuZXcgY29uc3RydWN0b3IoLi4uYXJncyk7XG4gICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgZmFpbGVkIHRvIGJ1aWxkICR7bmFtZS50b1N0cmluZygpfSB3aXRoIGFyZ3MgJHthcmdzfTogJHtlfWBcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMuY2FjaGVbbmFtZV0uaW5zdGFuY2UgPSBpbnN0YW5jZTtcbiAgICBpZiAob3B0aW9ucy5jYWxsYmFjaykgaW5zdGFuY2UgPSBvcHRpb25zLmNhbGxiYWNrKGluc3RhbmNlLCAuLi5hcmdzKTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH1cbn1cbiIsImltcG9ydCB7XG4gIEluamVjdGFibGUsXG4gIEluamVjdGFibGVSZWdpc3RyeUltcCxcbiAgSW5qZWN0YWJsZXNSZWdpc3RyeSxcbn0gZnJvbSBcIi4vcmVnaXN0cnlcIjtcbmltcG9ydCB7IEluamVjdGFibGVPcHRpb25zIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQ2VudHJhbCByZWdpc3RyeSBmb3IgbWFuYWdpbmcgaW5qZWN0YWJsZSBkZXBlbmRlbmNpZXMuXG4gKiBAc3VtbWFyeSBTdGF0aWMgY2xhc3MgaG9sZGluZyB0aGUgYWNjZXNzIHRvIHRoZSBpbmplY3RhYmxlcyBmdW5jdGlvbnMuIFByb3ZpZGVzIG1ldGhvZHMgZm9yIHJlZ2lzdGVyaW5nLFxuICogcmV0cmlldmluZywgYW5kIGJ1aWxkaW5nIGluamVjdGFibGUgb2JqZWN0cy5cbiAqIEB0ZW1wbGF0ZSBUIFR5cGUgb2YgdGhlIGluamVjdGFibGUgb2JqZWN0XG4gKlxuICogQGNsYXNzIEluamVjdGFibGVzXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIERlZmluZSBhbiBpbmplY3RhYmxlIGNsYXNzXG4gKiBAaW5qZWN0YWJsZSgpXG4gKiBjbGFzcyBNeVNlcnZpY2Uge1xuICogICBkb1NvbWV0aGluZygpIHtcbiAqICAgICByZXR1cm4gJ0hlbGxvIFdvcmxkJztcbiAqICAgfVxuICogfVxuICpcbiAqIC8vIEluamVjdCB0aGUgc2VydmljZSBpbnRvIGFub3RoZXIgY2xhc3NcbiAqIGNsYXNzIE15Q29tcG9uZW50IHtcbiAqICAgQGluamVjdCgpXG4gKiAgIHByaXZhdGUgc2VydmljZSE6IE15U2VydmljZTtcbiAqXG4gKiAgIHVzZVNlcnZpY2UoKSB7XG4gKiAgICAgcmV0dXJuIHRoaXMuc2VydmljZS5kb1NvbWV0aGluZygpO1xuICogICB9XG4gKiB9XG4gKlxuICogQG1lcm1haWRcbiAqIHNlcXVlbmNlRGlhZ3JhbVxuICogICBwYXJ0aWNpcGFudCBDbGllbnRcbiAqICAgcGFydGljaXBhbnQgSW5qZWN0YWJsZXNcbiAqICAgcGFydGljaXBhbnQgUmVnaXN0cnlcbiAqXG4gKiAgIENsaWVudC0+PkluamVjdGFibGVzOiByZWdpc3RlcihNeVNlcnZpY2UpXG4gKiAgIEluamVjdGFibGVzLT4+UmVnaXN0cnk6IHJlZ2lzdGVyKE15U2VydmljZSlcbiAqICAgUmVnaXN0cnktLT4+SW5qZWN0YWJsZXM6IHZvaWRcbiAqXG4gKiAgIENsaWVudC0+PkluamVjdGFibGVzOiBnZXQoXCJNeVNlcnZpY2VcIilcbiAqICAgSW5qZWN0YWJsZXMtPj5SZWdpc3RyeTogZ2V0KFwiTXlTZXJ2aWNlXCIpXG4gKiAgIFJlZ2lzdHJ5LS0+PkluamVjdGFibGVzOiBNeVNlcnZpY2UgaW5zdGFuY2VcbiAqICAgSW5qZWN0YWJsZXMtLT4+Q2xpZW50OiBNeVNlcnZpY2UgaW5zdGFuY2VcbiAqL1xuZXhwb3J0IGNsYXNzIEluamVjdGFibGVzIHtcbiAgcHJpdmF0ZSBzdGF0aWMgYWN0aW5nSW5qZWN0YWJsZXNSZWdpc3RyeT86IEluamVjdGFibGVzUmVnaXN0cnkgPSB1bmRlZmluZWQ7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBGZXRjaGVzIGFuIGluamVjdGFibGUgaW5zdGFuY2UgYnkgaXRzIHJlZ2lzdGVyZWQgbmFtZS5cbiAgICogQHN1bW1hcnkgUmV0cmlldmVzIHRoZSBuYW1lZCB7QGxpbmsgSW5qZWN0YWJsZX0gZnJvbSB0aGUgcmVnaXN0cnkuIElmIHRoZSBpbmplY3RhYmxlIGlzIGEgc2luZ2xldG9uLFxuICAgKiByZXR1cm5zIHRoZSBleGlzdGluZyBpbnN0YW5jZS4gT3RoZXJ3aXNlLCBjcmVhdGVzIGEgbmV3IGluc3RhbmNlLlxuICAgKiBAdGVtcGxhdGUgVCBUeXBlIG9mIHRoZSBpbmplY3RhYmxlIG9iamVjdCB0byByZXRyaWV2ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBUaGUgcmVnaXN0ZXJlZCBuYW1lIG9mIHRoZSBpbmplY3RhYmxlIHRvIHJldHJpZXZlXG4gICAqIEBwYXJhbSB7YW55W119IGFyZ3MgQ29uc3RydWN0b3IgYXJndW1lbnRzIHRvIHBhc3Mgd2hlbiBpbnN0YW50aWF0aW5nIHRoZSBpbmplY3RhYmxlXG4gICAqIEByZXR1cm4ge0luamVjdGFibGU8VD4gfCB1bmRlZmluZWR9IFRoZSBpbmplY3RhYmxlIGluc3RhbmNlIG9yIHVuZGVmaW5lZCBpZiBub3QgZm91bmRcbiAgICovXG4gIHN0YXRpYyBnZXQ8VD4oXG4gICAgbmFtZTogc3ltYm9sIHwgc3RyaW5nIHwgeyBuZXcgKC4uLmFyZ3M6IGFueVtdKTogVCB9LFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFQgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiBJbmplY3RhYmxlcy5nZXRSZWdpc3RyeSgpLmdldChuYW1lLCAuLi5hcmdzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQWRkcyBhIGNsYXNzIG9yIG9iamVjdCB0byB0aGUgaW5qZWN0YWJsZSByZWdpc3RyeS5cbiAgICogQHN1bW1hcnkgUmVnaXN0ZXJzIGFuIGluamVjdGFibGUgY29uc3RydWN0b3Igb3IgaW5zdGFuY2Ugd2l0aCB0aGUgcmVnaXN0cnksIG1ha2luZyBpdCBhdmFpbGFibGUgZm9yIGluamVjdGlvbi5cbiAgICogQHRlbXBsYXRlIFQgVHlwZSBvZiB0aGUgaW5qZWN0YWJsZSBvYmplY3QgdG8gcmVnaXN0ZXJcbiAgICogQHBhcmFtIHtJbmplY3RhYmxlPFQ+fSBjb25zdHJ1Y3RvciBUaGUgY2xhc3MgY29uc3RydWN0b3Igb3Igb2JqZWN0IGluc3RhbmNlIHRvIHJlZ2lzdGVyXG4gICAqIEBwYXJhbSB7YW55W119IGFyZ3MgQWRkaXRpb25hbCBhcmd1bWVudHMgZm9yIHJlZ2lzdHJhdGlvbiAoY2F0ZWdvcnksIHNpbmdsZXRvbiBmbGFnLCBldGMuKVxuICAgKiBAcmV0dXJuIHt2b2lkfVxuICAgKi9cbiAgc3RhdGljIHJlZ2lzdGVyPFQ+KGNvbnN0cnVjdG9yOiBJbmplY3RhYmxlPFQ+LCAuLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xuICAgIHJldHVybiBJbmplY3RhYmxlcy5nZXRSZWdpc3RyeSgpLnJlZ2lzdGVyKFxuICAgICAgY29uc3RydWN0b3IsXG4gICAgICAuLi4oYXJncyBhcyBbc3ltYm9sLCBJbmplY3RhYmxlT3B0aW9uczxUPl0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiBhbiBpbmplY3RhYmxlIGNsYXNzLlxuICAgKiBAc3VtbWFyeSBJbnN0YW50aWF0ZXMgYW4gaW5qZWN0YWJsZSBjbGFzcyB1c2luZyBpdHMgY29uc3RydWN0b3IgYW5kIHRoZSBwcm92aWRlZCBhcmd1bWVudHMuXG4gICAqIEB0ZW1wbGF0ZSBUIFR5cGUgb2YgdGhlIG9iamVjdCB0byBidWlsZFxuICAgKiBAcGFyYW0ge3N5bWJvbH0gbmFtZSBzeW1ib2wgcmVmZXJlbmNpbmcgdGhlIGluamVjdGFibGVcbiAgICogQHBhcmFtIHthbnlbXX0gYXJncyBDb25zdHJ1Y3RvciBhcmd1bWVudHMgdG8gcGFzcyB3aGVuIGluc3RhbnRpYXRpbmcgdGhlIGluamVjdGFibGVcbiAgICogQHJldHVybiB7VH0gVGhlIG5ld2x5IGNyZWF0ZWQgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBidWlsZDxUPihuYW1lOiBzeW1ib2wsIC4uLmFyZ3M6IGFueVtdKTogVCB7XG4gICAgcmV0dXJuIEluamVjdGFibGVzLmdldFJlZ2lzdHJ5KCkuYnVpbGQobmFtZSwgLi4uYXJncyk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJlcGxhY2VzIHRoZSBjdXJyZW50IHJlZ2lzdHJ5IGltcGxlbWVudGF0aW9uLlxuICAgKiBAc3VtbWFyeSBTZXRzIGEgbmV3IHtAbGluayBJbmplY3RhYmxlc1JlZ2lzdHJ5fSBpbXBsZW1lbnRhdGlvbiwgYWxsb3dpbmcgZm9yIGN1c3RvbSByZWdpc3RyeSBiZWhhdmlvci5cbiAgICogQHBhcmFtIHtJbmplY3RhYmxlc1JlZ2lzdHJ5fSBvcGVyYXRpb25zUmVnaXN0cnkgVGhlIG5ldyBpbXBsZW1lbnRhdGlvbiBvZiBSZWdpc3RyeSB0byB1c2VcbiAgICogQHJldHVybiB7dm9pZH1cbiAgICovXG4gIHN0YXRpYyBzZXRSZWdpc3RyeShvcGVyYXRpb25zUmVnaXN0cnk6IEluamVjdGFibGVzUmVnaXN0cnkpOiB2b2lkIHtcbiAgICBJbmplY3RhYmxlcy5hY3RpbmdJbmplY3RhYmxlc1JlZ2lzdHJ5ID0gb3BlcmF0aW9uc1JlZ2lzdHJ5O1xuICB9XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBjdXJyZW50IHJlZ2lzdHJ5IGluc3RhbmNlLlxuICAgKiBAc3VtbWFyeSBSZXR1cm5zIHRoZSBjdXJyZW50IHtAbGluayBJbmplY3RhYmxlc1JlZ2lzdHJ5fSBvciBjcmVhdGVzIGEgZGVmYXVsdCBvbmUgaWYgbm9uZSBleGlzdHMuXG4gICAqIEByZXR1cm4ge0luamVjdGFibGVzUmVnaXN0cnl9IFRoZSBjdXJyZW50IHJlZ2lzdHJ5IGluc3RhbmNlXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBnZXRSZWdpc3RyeSgpOiBJbmplY3RhYmxlc1JlZ2lzdHJ5IHtcbiAgICBpZiAoIUluamVjdGFibGVzLmFjdGluZ0luamVjdGFibGVzUmVnaXN0cnkpXG4gICAgICBJbmplY3RhYmxlcy5hY3RpbmdJbmplY3RhYmxlc1JlZ2lzdHJ5ID0gbmV3IEluamVjdGFibGVSZWdpc3RyeUltcCgpO1xuICAgIHJldHVybiBJbmplY3RhYmxlcy5hY3RpbmdJbmplY3RhYmxlc1JlZ2lzdHJ5O1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDbGVhcnMgYWxsIHJlZ2lzdGVyZWQgaW5qZWN0YWJsZXMuXG4gICAqIEBzdW1tYXJ5IFJlc2V0cyB0aGUgcmVnaXN0cnkgdG8gYSBjbGVhbiBzdGF0ZSBieSBjcmVhdGluZyBhIG5ldyBlbXB0eSByZWdpc3RyeSBpbnN0YW5jZS5cbiAgICogQHJldHVybiB7dm9pZH1cbiAgICovXG4gIHN0YXRpYyByZXNldCgpOiB2b2lkIHtcbiAgICBJbmplY3RhYmxlcy5zZXRSZWdpc3RyeShuZXcgSW5qZWN0YWJsZVJlZ2lzdHJ5SW1wKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZW1vdmVzIHNwZWNpZmljIGluamVjdGFibGVzIGZyb20gdGhlIHJlZ2lzdHJ5IGJhc2VkIG9uIGEgcGF0dGVybi5cbiAgICogQHN1bW1hcnkgU2VsZWN0aXZlbHkgcmVzZXRzIHRoZSByZWdpc3RyeSBieSByZW1vdmluZyBvbmx5IHRoZSBpbmplY3RhYmxlcyB3aG9zZSBuYW1lcyBtYXRjaCB0aGUgcHJvdmlkZWQgcGF0dGVybi5cbiAgICogQHBhcmFtIHtzdHJpbmcgfCBSZWdFeHB9IG1hdGNoIEEgc3RyaW5nIG9yIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJuIHRvIG1hdGNoIGFnYWluc3QgaW5qZWN0YWJsZSBuYW1lc1xuICAgKiBAcmV0dXJuIHt2b2lkfVxuICAgKi9cbiAgc3RhdGljIHNlbGVjdGl2ZVJlc2V0KG1hdGNoOiBzdHJpbmcgfCBSZWdFeHApOiB2b2lkIHtcbiAgICBjb25zdCByZWdleHAgPSB0eXBlb2YgbWF0Y2ggPT09IFwic3RyaW5nXCIgPyBuZXcgUmVnRXhwKG1hdGNoKSA6IG1hdGNoO1xuICAgIChJbmplY3RhYmxlcy5hY3RpbmdJbmplY3RhYmxlc1JlZ2lzdHJ5IGFzIGFueSlbXCJjYWNoZVwiXSA9IE9iamVjdC5lbnRyaWVzKFxuICAgICAgKEluamVjdGFibGVzLmFjdGluZ0luamVjdGFibGVzUmVnaXN0cnkgYXMgYW55KVtcImNhY2hlXCJdXG4gICAgKS5yZWR1Y2UoKGFjY3VtOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBba2V5LCB2YWxdKSA9PiB7XG4gICAgICBpZiAoIWtleS5tYXRjaChyZWdleHApKSBhY2N1bVtrZXldID0gdmFsO1xuICAgICAgcmV0dXJuIGFjY3VtO1xuICAgIH0sIHt9KTtcbiAgfVxufVxuIiwiaW1wb3J0IFwicmVmbGVjdC1tZXRhZGF0YVwiO1xuaW1wb3J0IHsgZ2V0SW5qZWN0S2V5IH0gZnJvbSBcIi4vZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgSW5qZWN0YWJsZXNLZXlzIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFJlZmxlY3Rpb24gbWV0YWRhdGEga2V5IGZvciBhY2Nlc3NpbmcgVHlwZVNjcmlwdCB0eXBlIGluZm9ybWF0aW9uLlxuICogQHN1bW1hcnkgSG9sZHMgdGhlIGtleSBmb3IgcmV0cmlldmluZyB0aGUgZGVzaWduIHR5cGUgZnJvbSBUeXBlU2NyaXB0J3MgcmVmbGVjdGlvbiBtZXRhZGF0YS5cbiAqIEBjb25zdCBUeXBlS2V5XG4gKiBAbWVtYmVyT2YgbW9kdWxlOmluamVjdGFibGUtZGVjb3JhdG9yc1xuICovXG5leHBvcnQgY29uc3QgVHlwZUtleSA9IFwiZGVzaWduOnR5cGVcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRXh0cmFjdHMgdGhlIHR5cGUgbmFtZSBmcm9tIGEgZGVjb3JhdGVkIHByb3BlcnR5IHVzaW5nIHJlZmxlY3Rpb24uXG4gKiBAc3VtbWFyeSBSZXRyaWV2ZXMgdGhlIHR5cGUgZnJvbSBhIHByb3BlcnR5IGRlY29yYXRvciBieSBhY2Nlc3NpbmcgVHlwZVNjcmlwdCdzIHJlZmxlY3Rpb24gbWV0YWRhdGEuXG4gKiBAcGFyYW0ge2FueX0gbW9kZWwgVGhlIHRhcmdldCBvYmplY3QgY29udGFpbmluZyB0aGUgZGVjb3JhdGVkIHByb3BlcnR5XG4gKiBAcGFyYW0ge3N0cmluZyB8IHN5bWJvbH0gcHJvcEtleSBUaGUgcHJvcGVydHkga2V5IChuYW1lIG9yIHN5bWJvbCkgb2YgdGhlIGRlY29yYXRlZCBwcm9wZXJ0eVxuICogQHJldHVybiB7c3RyaW5nIHwgdW5kZWZpbmVkfSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdHlwZSwgb3IgdW5kZWZpbmVkIGlmIGl0J3MgYSBGdW5jdGlvbiB0eXBlXG4gKiBAZnVuY3Rpb24gZ2V0VHlwZUZyb21EZWNvcmF0b3JcbiAqIEBtZW1iZXJPZiBtb2R1bGU6aW5qZWN0YWJsZS1kZWNvcmF0b3JzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUeXBlRnJvbURlY29yYXRvcihcbiAgbW9kZWw6IGFueSxcbiAgcHJvcEtleTogc3RyaW5nIHwgc3ltYm9sXG4pOiBzeW1ib2wgfCB1bmRlZmluZWQge1xuICBjb25zdCB0eXBlRGVmID0gUmVmbGVjdC5nZXRNZXRhZGF0YShUeXBlS2V5LCBtb2RlbCwgcHJvcEtleSk7XG4gIGlmICh0eXBlRGVmLm5hbWUgPT09IFwiRnVuY3Rpb25cIikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgbWV0YSA9IFJlZmxlY3QuZ2V0TWV0YWRhdGEoXG4gICAgZ2V0SW5qZWN0S2V5KEluamVjdGFibGVzS2V5cy5JTkpFQ1RBQkxFKSxcbiAgICB0eXBlRGVmXG4gICk7XG4gIGlmICghbWV0YSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIG1ldGEuc3ltYm9sO1xufVxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZXNLZXlzIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBJbmplY3RhYmxlcyB9IGZyb20gXCIuL0luamVjdGFibGVzXCI7XG5pbXBvcnQgeyBnZXRUeXBlRnJvbURlY29yYXRvciB9IGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQge1xuICBJbmplY3RhYmxlTWV0YWRhdGEsXG4gIEluamVjdGFibGVPcHRpb25zLFxuICBJbnN0YW5jZUNhbGxiYWNrLFxufSBmcm9tIFwiLi90eXBlc1wiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBHZW5lcmF0ZXMgYSBmdWxseSBxdWFsaWZpZWQgcmVmbGVjdGlvbiBtZXRhZGF0YSBrZXkuXG4gKiBAc3VtbWFyeSBSZXR1cm5zIHRoZSByZWZsZWN0aW9uIGtleSBmb3IgaW5qZWN0YWJsZXMgYnkgcHJlZml4aW5nIHRoZSBwcm92aWRlZCBrZXkgd2l0aCB0aGUgYmFzZSByZWZsZWN0aW9uIGtleS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSB0byBiZSBwcmVmaXhlZFxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgZnVsbHkgcXVhbGlmaWVkIHJlZmxlY3Rpb24ga2V5XG4gKiBAZnVuY3Rpb24gZ2V0SW5qZWN0S2V5XG4gKiBAbWVtYmVyT2YgbW9kdWxlOmluamVjdGFibGUtZGVjb3JhdG9yc1xuICovXG5leHBvcnQgY29uc3QgZ2V0SW5qZWN0S2V5ID0gKGtleTogc3RyaW5nKSA9PiBJbmplY3RhYmxlc0tleXMuUkVGTEVDVCArIGtleTtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRGVjb3JhdG9yIHRoYXQgbWFya3MgYSBjbGFzcyBhcyBhdmFpbGFibGUgZm9yIGRlcGVuZGVuY3kgaW5qZWN0aW9uLlxuICogQHN1bW1hcnkgRGVmaW5lcyBhIGNsYXNzIGFzIGFuIGluamVjdGFibGUgc2luZ2xldG9uIHRoYXQgY2FuIGJlIHJldHJpZXZlZCBmcm9tIHRoZSByZWdpc3RyeS5cbiAqIFdoZW4gYXBwbGllZCB0byBhIGNsYXNzLCByZXBsYWNlcyBpdHMgY29uc3RydWN0b3Igd2l0aCBvbmUgdGhhdCByZXR1cm5zIGEgc2luZ2xldG9uIGluc3RhbmNlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBbY2F0ZWdvcnldIERlZmF1bHRzIHRvIHRoZSBjbGFzcyBuYW1lLiBVc2VmdWwgd2hlbiBtaW5pZmljYXRpb24gb2NjdXJzIGFuZCBuYW1lcyBhcmUgY2hhbmdlZCxcbiAqIG9yIHdoZW4geW91IHdhbnQgdG8gdXBjYXN0IHRoZSBvYmplY3QgdG8gYSBkaWZmZXJlbnQgdHlwZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2ZvcmNlXSBEZWZpbmVzIGlmIHRoZSBpbmplY3RhYmxlIHNob3VsZCBvdmVycmlkZSBhbiBhbHJlYWR5IGV4aXN0aW5nIGluc3RhbmNlIChpZiBhbnkpLlxuICogT25seSBtZWFudCBmb3IgZXh0ZW5kaW5nIGRlY29yYXRvcnMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaW5zdGFuY2VDYWxsYmFja10gT3B0aW9uYWwgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZSBpbnN0YW5jZSBhZnRlciBjcmVhdGlvbi5cbiAqIEByZXR1cm4ge0Z1bmN0aW9ufSBBIGRlY29yYXRvciBmdW5jdGlvbiB0aGF0IHRyYW5zZm9ybXMgdGhlIGNsYXNzIGludG8gYW4gaW5qZWN0YWJsZS5cbiAqXG4gKiBAZnVuY3Rpb24gaW5qZWN0YWJsZVxuICogQGNhdGVnb3J5IENsYXNzIERlY29yYXRvcnNcbiAqXG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IENsaWVudFxuICogICBwYXJ0aWNpcGFudCBEZWNvcmF0b3JcbiAqICAgcGFydGljaXBhbnQgSW5qZWN0YWJsZXNcbiAqXG4gKiAgIENsaWVudC0+PkRlY29yYXRvcjogQGluamVjdGFibGUoKVxuICogICBEZWNvcmF0b3ItPj5EZWNvcmF0b3I6IENyZWF0ZSBuZXcgY29uc3RydWN0b3JcbiAqXG4gKiAgIE5vdGUgb3ZlciBEZWNvcmF0b3I6IFdoZW4gbmV3IGluc3RhbmNlIHJlcXVlc3RlZFxuICogICBEZWNvcmF0b3ItPj5JbmplY3RhYmxlczogZ2V0KG5hbWUpXG4gKiAgIGFsdCBJbnN0YW5jZSBleGlzdHNcbiAqICAgICBJbmplY3RhYmxlcy0tPj5EZWNvcmF0b3I6IFJldHVybiBleGlzdGluZyBpbnN0YW5jZVxuICogICBlbHNlIE5vIGluc3RhbmNlXG4gKiAgICAgRGVjb3JhdG9yLT4+SW5qZWN0YWJsZXM6IHJlZ2lzdGVyKG9yaWdpbmFsLCBuYW1lKVxuICogICAgIERlY29yYXRvci0+PkluamVjdGFibGVzOiBnZXQobmFtZSlcbiAqICAgICBJbmplY3RhYmxlcy0tPj5EZWNvcmF0b3I6IFJldHVybiBuZXcgaW5zdGFuY2VcbiAqICAgICBvcHQgSGFzIGNhbGxiYWNrXG4gKiAgICAgICBEZWNvcmF0b3ItPj5EZWNvcmF0b3I6IENhbGwgaW5zdGFuY2VDYWxsYmFja1xuICogICAgIGVuZFxuICogICBlbmRcbiAqICAgRGVjb3JhdG9yLT4+RGVjb3JhdG9yOiBEZWZpbmUgbWV0YWRhdGFcbiAqICAgRGVjb3JhdG9yLS0+PkNsaWVudDogUmV0dXJuIGluc3RhbmNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RhYmxlKCk6IChvcmlnaW5hbDogYW55KSA9PiBhbnk7XG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0YWJsZShjYXRlZ29yeTogc3RyaW5nKTogKG9yaWdpbmFsOiBhbnkpID0+IGFueTtcbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RhYmxlKFxuICBpbnN0YW5jZUNhbGxiYWNrOiBJbnN0YW5jZUNhbGxiYWNrPGFueT5cbik6IChvcmlnaW5hbDogYW55KSA9PiBhbnk7XG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0YWJsZShcbiAgY2F0ZWdvcnk6IHN0cmluZyxcbiAgaW5zdGFuY2VDYWxsYmFjazogSW5zdGFuY2VDYWxsYmFjazxhbnk+XG4pOiAob3JpZ2luYWw6IGFueSkgPT4gYW55O1xuZXhwb3J0IGZ1bmN0aW9uIGluamVjdGFibGUoXG4gIG5hbWU/OiBzdHJpbmcgfCBJbnN0YW5jZUNhbGxiYWNrPGFueT4sXG4gIGNiPzogSW5zdGFuY2VDYWxsYmFjazxhbnk+XG4pIHtcbiAgY29uc3QgY2F0ZWdvcnkgPSB0eXBlb2YgbmFtZSA9PT0gXCJzdHJpbmdcIiA/IG5hbWUgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IGluc3RhbmNlQ2FsbGJhY2sgPSAodHlwZW9mIGNhdGVnb3J5ID09PSBcImZ1bmN0aW9uXCIgPyBjYXRlZ29yeSA6IGNiKSBhc1xuICAgIHwgSW5zdGFuY2VDYWxsYmFjazxhbnk+XG4gICAgfCB1bmRlZmluZWQ7XG5cbiAgcmV0dXJuIChvcmlnaW5hbDogYW55KSA9PiB7XG4gICAgY29uc3Qgc3ltYm9sID0gU3ltYm9sLmZvcihjYXRlZ29yeSB8fCBvcmlnaW5hbC50b1N0cmluZygpKTtcbiAgICBjb25zdCBuYW1lID0gY2F0ZWdvcnkgfHwgb3JpZ2luYWwubmFtZTtcblxuICAgIGNvbnN0IG1ldGFkYXRhOiBJbmplY3RhYmxlTWV0YWRhdGEgPSB7XG4gICAgICBjbGFzczogbmFtZSxcbiAgICAgIHN5bWJvbDogc3ltYm9sLFxuICAgIH07XG5cbiAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKFxuICAgICAgZ2V0SW5qZWN0S2V5KEluamVjdGFibGVzS2V5cy5JTkpFQ1RBQkxFKSxcbiAgICAgIG1ldGFkYXRhLFxuICAgICAgb3JpZ2luYWxcbiAgICApO1xuICAgIC8vIHRoZSBuZXcgY29uc3RydWN0b3IgYmVoYXZpb3VyXG4gICAgY29uc3QgbmV3Q29uc3RydWN0b3I6IGFueSA9IGZ1bmN0aW9uICguLi5hcmdzOiBhbnlbXSkge1xuICAgICAgcmV0dXJuIEluamVjdGFibGVzLmdldDxhbnk+KHN5bWJvbCwgLi4uYXJncyk7XG4gICAgfTtcblxuICAgIC8vIGNvcHkgcHJvdG90eXBlIHNvIGluc3RhbmNlb2Ygb3BlcmF0b3Igc3RpbGwgd29ya3NcbiAgICBuZXdDb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBvcmlnaW5hbC5wcm90b3R5cGU7XG4gICAgLy8gbmV3Q29uc3RydWN0b3IuX19wcm90b19fID0gb3JpZ2luYWwuX19wcm90b19fO1xuICAgIC8vIFNldHMgdGhlIHByb3BlciBjb25zdHJ1Y3RvciBuYW1lIGZvciB0eXBlIHZlcmlmaWNhdGlvblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuZXdDb25zdHJ1Y3RvciwgXCJuYW1lXCIsIHtcbiAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgdmFsdWU6IG9yaWdpbmFsLnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5uYW1lLFxuICAgIH0pO1xuXG4gICAgY29uc3Qgb3B0czogSW5qZWN0YWJsZU9wdGlvbnM8YW55PiA9IHtcbiAgICAgIHNpbmdsZXRvbjogdHJ1ZSxcbiAgICAgIGNhbGxiYWNrOiBpbnN0YW5jZUNhbGxiYWNrIGFzIEluc3RhbmNlQ2FsbGJhY2s8YW55PixcbiAgICB9O1xuXG4gICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShcbiAgICAgIGdldEluamVjdEtleShJbmplY3RhYmxlc0tleXMuSU5KRUNUQUJMRSksXG4gICAgICBtZXRhZGF0YSxcbiAgICAgIG5ld0NvbnN0cnVjdG9yXG4gICAgKTtcblxuICAgIEluamVjdGFibGVzLnJlZ2lzdGVyKG9yaWdpbmFsLCBzeW1ib2wsIG9wdHMpO1xuICAgIC8vIHJldHVybiBuZXcgY29uc3RydWN0b3IgKHdpbGwgb3ZlcnJpZGUgb3JpZ2luYWwpXG4gICAgcmV0dXJuIG5ld0NvbnN0cnVjdG9yO1xuICB9O1xufVxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRnVuY3Rpb24gdHlwZSBmb3IgdHJhbnNmb3JtaW5nIGluamVjdGFibGUgaW5zdGFuY2VzIGJlZm9yZSB0aGV5J3JlIGluamVjdGVkLlxuICogQHN1bW1hcnkgRnVuY3Rpb24gd2hpY2ggdHJhbnNmb3JtcyBhIGNhY2hlZCB7QGxpbmsgaW5qZWN0YWJsZX0gaW5zdGFuY2UgYmVmb3JlIGl0J3MgaW5qZWN0ZWQgaW50byBhIHRhcmdldCBvYmplY3QuXG4gKlxuICogQHBhcmFtIHthbnl9IGluamVjdGFibGUgVGhlIGluamVjdGFibGUgaW5zdGFuY2UgdG8gdHJhbnNmb3JtXG4gKiBAcGFyYW0ge2FueX0gb2JqIFRoZSBvYmplY3QgdGhlIGluamVjdGFibGUgd2lsbCBiZSBpbmplY3RlZCBvblxuICogQHJldHVybiB7YW55fSBUaGUgdHJhbnNmb3JtZWQgaW5qZWN0YWJsZSBpbnN0YW5jZVxuICpcbiAqIEB0eXBlZGVmIHtGdW5jdGlvbn0gSW5zdGFuY2VUcmFuc2Zvcm1lclxuICogQG1lbWJlck9mIG1vZHVsZTppbmplY3RhYmxlLWRlY29yYXRvcnNcbiAqL1xuZXhwb3J0IHR5cGUgSW5zdGFuY2VUcmFuc2Zvcm1lciA9IChpbmplY3RhYmxlOiBhbnksIG9iajogYW55KSA9PiBhbnk7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFByb3BlcnR5IGRlY29yYXRvciB0aGF0IGluamVjdHMgYSBkZXBlbmRlbmN5IGludG8gYSBjbGFzcyBwcm9wZXJ0eS5cbiAqIEBzdW1tYXJ5IEFsbG93cyBmb3IgdGhlIGluamVjdGlvbiBvZiBhbiB7QGxpbmsgaW5qZWN0YWJsZX0gZGVjb3JhdGVkIGRlcGVuZGVuY3kgaW50byBhIGNsYXNzIHByb3BlcnR5LlxuICogVGhlIHByb3BlcnR5IG11c3QgYmUgdHlwZWQgZm9yIHRoZSByZXF1ZXN0ZWQgZGVwZW5kZW5jeS4gT25seSBjb25jcmV0ZSBjbGFzc2VzIGFyZSBzdXBwb3J0ZWQ7IGdlbmVyaWNzIGFyZSBub3QuXG4gKlxuICogSW5qZWN0ZWQgcHJvcGVydGllcyBzaG91bGQgYmUgZGVzY3JpYmVkIGxpa2Ugc286XG4gKiA8cHJlPlxuICogICAgIGNsYXNzIENsYXNzTmFtZSB7XG4gKiAgICAgICAgIC4uLlxuICpcbiAqICAgICAgICAgQGluamVjdCgpXG4gKiAgICAgICAgIHByb3BlcnR5TmFtZSE6IEluamVjdGFibGVDbGFzcztcbiAqXG4gKiAgICAgICAgIC4uLlxuICogICAgIH1cbiAqIDwvcHJlPlxuICpcbiAqIHdoZXJlIEluamVjdGFibGVDbGFzcyBpcyB0aGUgY2xhc3MgeW91IHdhbnQgdG8gaW5qZWN0LlxuICogTm90aWNlIHRoZSB1c2Ugb2YgJyE6JyB0byBlbnN1cmUgdGhlIHRyYW5zcGlsZXIgdGhlIHByb3BlcnR5IHdpbGwgYmUgc2V0IG91dHNpZGUgdGhlIGNvbnN0cnVjdG9yIGJ1dCB3aWxsIGFsd2F5cyBiZSBkZWZpbmVkLlxuICogRm9yIHByb2plY3RzIHdoZXJlIG1pbmlmaWNhdGlvbiBvY2N1cnMsIHlvdSBzaG91bGQgdXNlIHRoZSBjYXRlZ29yeSBwYXJhbSB0byBlbnN1cmUgdGhlIG5hbWUgaXMgdGhlIHNhbWUgdGhyb3VnaG91dC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gW2NhdGVnb3J5XSBEZWZhdWx0cyB0byB0aGUgY2xhc3MgbmFtZSBkZXJpdmVkIGZyb20gdGhlIHByb3BlcnR5IHR5cGUuIFVzZWZ1bCB3aGVuIG1pbmlmaWNhdGlvbiBvY2N1cnNcbiAqIGFuZCBuYW1lcyBhcmUgY2hhbmdlZCwgb3Igd2hlbiB5b3Ugd2FudCB0byB1cGNhc3QgdGhlIG9iamVjdCB0byBhIGRpZmZlcmVudCB0eXBlLlxuICogQHBhcmFtIHtJbnN0YW5jZVRyYW5zZm9ybWVyfSBbdHJhbnNmb3JtZXJdIE9wdGlvbmFsIGZ1bmN0aW9uIHRvIHRyYW5zZm9ybSB0aGUgaW5qZWN0YWJsZSBpbnN0YW5jZSBiZWZvcmUgaXQncyBpbmplY3RlZC5cbiAqIEByZXR1cm4ge0Z1bmN0aW9ufSBBIHByb3BlcnR5IGRlY29yYXRvciBmdW5jdGlvbiB0aGF0IHNldHMgdXAgdGhlIGRlcGVuZGVuY3kgaW5qZWN0aW9uLlxuICpcbiAqIEBmdW5jdGlvbiBpbmplY3RcbiAqIEBjYXRlZ29yeSBQcm9wZXJ0eSBEZWNvcmF0b3JzXG4gKlxuICogQG1lcm1haWRcbiAqIHNlcXVlbmNlRGlhZ3JhbVxuICogICBwYXJ0aWNpcGFudCBDbGllbnRcbiAqICAgcGFydGljaXBhbnQgRGVjb3JhdG9yXG4gKiAgIHBhcnRpY2lwYW50IEluamVjdGFibGVzXG4gKlxuICogICBDbGllbnQtPj5EZWNvcmF0b3I6IEBpbmplY3QoKVxuICogICBEZWNvcmF0b3ItPj5EZWNvcmF0b3I6IEdldCB0eXBlIGZyb20gcHJvcGVydHlcbiAqICAgRGVjb3JhdG9yLT4+RGVjb3JhdG9yOiBEZWZpbmUgbWV0YWRhdGFcbiAqICAgRGVjb3JhdG9yLT4+RGVjb3JhdG9yOiBEZWZpbmUgcHJvcGVydHkgZ2V0dGVyXG4gKlxuICogICBOb3RlIG92ZXIgRGVjb3JhdG9yOiBXaGVuIHByb3BlcnR5IGFjY2Vzc2VkXG4gKiAgIENsaWVudC0+PkRlY29yYXRvcjogYWNjZXNzIHByb3BlcnR5XG4gKiAgIERlY29yYXRvci0+PkRlY29yYXRvcjogQ2hlY2sgaWYgaW5zdGFuY2UgZXhpc3RzXG4gKiAgIGFsdCBJbnN0YW5jZSBleGlzdHMgaW4gV2Vha01hcFxuICogICAgIERlY29yYXRvci0tPj5DbGllbnQ6IFJldHVybiBjYWNoZWQgaW5zdGFuY2VcbiAqICAgZWxzZSBObyBpbnN0YW5jZVxuICogICAgIERlY29yYXRvci0+PkluamVjdGFibGVzOiBnZXQobmFtZSlcbiAqICAgICBhbHQgSW5qZWN0YWJsZSBmb3VuZFxuICogICAgICAgSW5qZWN0YWJsZXMtLT4+RGVjb3JhdG9yOiBSZXR1cm4gaW5qZWN0YWJsZSBpbnN0YW5jZVxuICogICAgICAgb3B0IEhhcyB0cmFuc2Zvcm1lclxuICogICAgICAgICBEZWNvcmF0b3ItPj5EZWNvcmF0b3I6IENhbGwgdHJhbnNmb3JtZXJcbiAqICAgICAgIGVuZFxuICogICAgICAgRGVjb3JhdG9yLT4+RGVjb3JhdG9yOiBTdG9yZSBpbiBXZWFrTWFwXG4gKiAgICAgICBEZWNvcmF0b3ItLT4+Q2xpZW50OiBSZXR1cm4gaW5zdGFuY2VcbiAqICAgICBlbHNlIE5vIGluamVjdGFibGVcbiAqICAgICAgIERlY29yYXRvci0tPj5DbGllbnQ6IFRocm93IGVycm9yXG4gKiAgICAgZW5kXG4gKiAgIGVuZFxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0KFxuICBjYXRlZ29yeT86IHN5bWJvbCB8IHN0cmluZyB8IHsgbmV3ICguLi5hcmdzOiBhbnlbXSk6IGFueSB9LFxuICB0cmFuc2Zvcm1lcj86IEluc3RhbmNlVHJhbnNmb3JtZXJcbikge1xuICByZXR1cm4gKHRhcmdldDogYW55LCBwcm9wZXJ0eUtleT86IGFueSkgPT4ge1xuICAgIGNvbnN0IHZhbHVlcyA9IG5ldyBXZWFrTWFwKCk7XG5cbiAgICBjb25zdCBuYW1lOiBzeW1ib2wgfCB1bmRlZmluZWQgPSBjYXRlZ29yeVxuICAgICAgPyB0eXBlb2YgY2F0ZWdvcnkgPT09IFwic3ltYm9sXCJcbiAgICAgICAgPyBjYXRlZ29yeVxuICAgICAgICA6IFN5bWJvbC5mb3IoY2F0ZWdvcnkudG9TdHJpbmcoKSlcbiAgICAgIDogZ2V0VHlwZUZyb21EZWNvcmF0b3IodGFyZ2V0LCBwcm9wZXJ0eUtleSk7XG4gICAgaWYgKCFuYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBnZXQgVHlwZSBmcm9tIGRlY29yYXRvcmApO1xuICAgIH1cblxuICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGEoXG4gICAgICBnZXRJbmplY3RLZXkoSW5qZWN0YWJsZXNLZXlzLklOSkVDVCksXG4gICAgICB7XG4gICAgICAgIGluamVjdGFibGU6IG5hbWUsXG4gICAgICB9LFxuICAgICAgdGFyZ2V0LFxuICAgICAgcHJvcGVydHlLZXlcbiAgICApO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXksIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldCh0aGlzOiBhbnkpIHtcbiAgICAgICAgY29uc3QgZGVzY3JpcHRvcjogUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihcbiAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgcHJvcGVydHlLZXlcbiAgICAgICAgKSBhcyBQcm9wZXJ0eURlc2NyaXB0b3I7XG4gICAgICAgIGlmIChkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSkge1xuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBwcm9wZXJ0eUtleSwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICAgICAgICBnZXQodGhpczogYW55KSB7XG4gICAgICAgICAgICAgIGxldCBvYmogPSB2YWx1ZXMuZ2V0KHRoaXMpO1xuICAgICAgICAgICAgICBpZiAoIW9iaikge1xuICAgICAgICAgICAgICAgIG9iaiA9IEluamVjdGFibGVzLmdldChuYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAoIW9iailcbiAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgYENvdWxkIG5vdCBnZXQgSW5qZWN0YWJsZSAke25hbWUudG9TdHJpbmcoKX0gdG8gaW5qZWN0IGluICR7dGFyZ2V0LmNvbnN0cnVjdG9yID8gdGFyZ2V0LmNvbnN0cnVjdG9yLm5hbWUgOiB0YXJnZXQubmFtZX0ncyAke3Byb3BlcnR5S2V5fWBcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybWVyKVxuICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgb2JqID0gdHJhbnNmb3JtZXIob2JqLCB0YXJnZXQpO1xuICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhbHVlcy5zZXQodGhpcywgb2JqKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gb2JqO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gdGhpc1twcm9wZXJ0eUtleV07XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSk7XG4gIH07XG59XG4iLCIvKipcbiAqIEBkZXNjcmlwdGlvbiBBIGxpZ2h0d2VpZ2h0IGRlcGVuZGVuY3kgaW5qZWN0aW9uIGxpYnJhcnkgZm9yIFR5cGVTY3JpcHQgYXBwbGljYXRpb25zLlxuICogQHN1bW1hcnkgQWRkcyBhIHNpbXBsZSBJbmplY3RhYmxlcyBpbXBsZW1lbnRhdGlvbiB0byBjcmVhdGUgc2luZ2xldG9uIGluc3RhbmNlcyBvZiBhbiBvYmplY3RcbiAqIGFuZCBlYXNpbHkgaW5qZWN0IGl0IGludG8gb3RoZXIgb2JqZWN0cy4gUHJvdmlkZXMgZGVjb3JhdG9ycyBmb3IgbWFya2luZyBjbGFzc2VzIGFzIGluamVjdGFibGVcbiAqIGFuZCBmb3IgaW5qZWN0aW5nIGRlcGVuZGVuY2llcyBpbnRvIGNsYXNzIHByb3BlcnRpZXMuXG4gKlxuICogQG1vZHVsZSBpbmplY3RhYmxlLWRlY29yYXRvcnNcbiAqL1xuXG5leHBvcnQgKiBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2RlY29yYXRvcnNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL0luamVjdGFibGVzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9yZWdpc3RyeVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vdHlwZXNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3V0aWxzXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgaW5qZWN0YWJsZS1kZWNvcmF0b3JzIGxpYnJhcnkuXG4gKiBAc3VtbWFyeSBEZWZpbmVkIG9uIGxpYnJhcnkgYnVpbGQuIEhvbGRzIHRoZSBsaWJyYXJ5J3MgY3VycmVudCB2ZXJzaW9uIHN0cmluZy5cbiAqIEBjb25zdCBWRVJTSU9OXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmluamVjdGFibGUtZGVjb3JhdG9yc1xuICovXG5leHBvcnQgY29uc3QgVkVSU0lPTiA9IFwiIyNWRVJTSU9OIyNcIjtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBOzs7Ozs7Ozs7O0FBVUc7QUFDVSxNQUFBLGVBQWUsR0FBRztBQUM3QixJQUFBLE9BQU8sRUFBRSxZQUFZO0FBQ3JCLElBQUEsVUFBVSxFQUFFLFlB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
|
package/lib/Injectables.cjs
CHANGED
|
@@ -74,12 +74,12 @@ class Injectables {
|
|
|
74
74
|
* @description Creates a new instance of an injectable class.
|
|
75
75
|
* @summary Instantiates an injectable class using its constructor and the provided arguments.
|
|
76
76
|
* @template T Type of the object to build
|
|
77
|
-
* @param {
|
|
77
|
+
* @param {symbol} name symbol referencing the injectable
|
|
78
78
|
* @param {any[]} args Constructor arguments to pass when instantiating the injectable
|
|
79
79
|
* @return {T} The newly created instance
|
|
80
80
|
*/
|
|
81
|
-
static build(
|
|
82
|
-
return Injectables.getRegistry().build(
|
|
81
|
+
static build(name, ...args) {
|
|
82
|
+
return Injectables.getRegistry().build(name, ...args);
|
|
83
83
|
}
|
|
84
84
|
/**
|
|
85
85
|
* @description Replaces the current registry implementation.
|
|
@@ -124,4 +124,4 @@ class Injectables {
|
|
|
124
124
|
}
|
|
125
125
|
}
|
|
126
126
|
exports.Injectables = Injectables;
|
|
127
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
127
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW5qZWN0YWJsZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvSW5qZWN0YWJsZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBSW9CO0FBR3BCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXlDRztBQUNILE1BQWEsV0FBVzthQUNQLDhCQUF5QixHQUF5QixTQUFTLENBQUM7SUFFM0UsZ0JBQXVCLENBQUM7SUFFeEI7Ozs7Ozs7O09BUUc7SUFDSCxNQUFNLENBQUMsR0FBRyxDQUNSLElBQW1ELEVBQ25ELEdBQUcsSUFBVztRQUVkLE9BQU8sV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILE1BQU0sQ0FBQyxRQUFRLENBQUksV0FBMEIsRUFBRSxHQUFHLElBQVc7UUFDM0QsT0FBTyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUN2QyxXQUFXLEVBQ1gsR0FBSSxJQUF1QyxDQUM1QyxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxNQUFNLENBQUMsS0FBSyxDQUFJLElBQVksRUFBRSxHQUFHLElBQVc7UUFDMUMsT0FBTyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILE1BQU0sQ0FBQyxXQUFXLENBQUMsa0JBQXVDO1FBQ3hELFdBQVcsQ0FBQyx5QkFBeUIsR0FBRyxrQkFBa0IsQ0FBQztJQUM3RCxDQUFDO0lBQ0Q7Ozs7T0FJRztJQUNLLE1BQU0sQ0FBQyxXQUFXO1FBQ3hCLElBQUksQ0FBQyxXQUFXLENBQUMseUJBQXlCO1lBQ3hDLFdBQVcsQ0FBQyx5QkFBeUIsR0FBRyxJQUFJLGdDQUFxQixFQUFFLENBQUM7UUFDdEUsT0FBTyxXQUFXLENBQUMseUJBQXlCLENBQUM7SUFDL0MsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxNQUFNLENBQUMsS0FBSztRQUNWLFdBQVcsQ0FBQyxXQUFXLENBQUMsSUFBSSxnQ0FBcUIsRUFBRSxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFzQjtRQUMxQyxNQUFNLE1BQU0sR0FBRyxPQUFPLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDcEUsV0FBVyxDQUFDLHlCQUFpQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQ3JFLFdBQVcsQ0FBQyx5QkFBaUMsQ0FBQyxPQUFPLENBQUMsQ0FDeEQsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUEwQixFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUU7WUFDbEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO2dCQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7WUFDekMsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDVCxDQUFDOztBQTNGSCxrQ0E0RkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBJbmplY3RhYmxlLFxuICBJbmplY3RhYmxlUmVnaXN0cnlJbXAsXG4gIEluamVjdGFibGVzUmVnaXN0cnksXG59IGZyb20gXCIuL3JlZ2lzdHJ5XCI7XG5pbXBvcnQgeyBJbmplY3RhYmxlT3B0aW9ucyB9IGZyb20gXCIuL3R5cGVzXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIENlbnRyYWwgcmVnaXN0cnkgZm9yIG1hbmFnaW5nIGluamVjdGFibGUgZGVwZW5kZW5jaWVzLlxuICogQHN1bW1hcnkgU3RhdGljIGNsYXNzIGhvbGRpbmcgdGhlIGFjY2VzcyB0byB0aGUgaW5qZWN0YWJsZXMgZnVuY3Rpb25zLiBQcm92aWRlcyBtZXRob2RzIGZvciByZWdpc3RlcmluZyxcbiAqIHJldHJpZXZpbmcsIGFuZCBidWlsZGluZyBpbmplY3RhYmxlIG9iamVjdHMuXG4gKiBAdGVtcGxhdGUgVCBUeXBlIG9mIHRoZSBpbmplY3RhYmxlIG9iamVjdFxuICpcbiAqIEBjbGFzcyBJbmplY3RhYmxlc1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBEZWZpbmUgYW4gaW5qZWN0YWJsZSBjbGFzc1xuICogQGluamVjdGFibGUoKVxuICogY2xhc3MgTXlTZXJ2aWNlIHtcbiAqICAgZG9Tb21ldGhpbmcoKSB7XG4gKiAgICAgcmV0dXJuICdIZWxsbyBXb3JsZCc7XG4gKiAgIH1cbiAqIH1cbiAqXG4gKiAvLyBJbmplY3QgdGhlIHNlcnZpY2UgaW50byBhbm90aGVyIGNsYXNzXG4gKiBjbGFzcyBNeUNvbXBvbmVudCB7XG4gKiAgIEBpbmplY3QoKVxuICogICBwcml2YXRlIHNlcnZpY2UhOiBNeVNlcnZpY2U7XG4gKlxuICogICB1c2VTZXJ2aWNlKCkge1xuICogICAgIHJldHVybiB0aGlzLnNlcnZpY2UuZG9Tb21ldGhpbmcoKTtcbiAqICAgfVxuICogfVxuICpcbiAqIEBtZXJtYWlkXG4gKiBzZXF1ZW5jZURpYWdyYW1cbiAqICAgcGFydGljaXBhbnQgQ2xpZW50XG4gKiAgIHBhcnRpY2lwYW50IEluamVjdGFibGVzXG4gKiAgIHBhcnRpY2lwYW50IFJlZ2lzdHJ5XG4gKlxuICogICBDbGllbnQtPj5JbmplY3RhYmxlczogcmVnaXN0ZXIoTXlTZXJ2aWNlKVxuICogICBJbmplY3RhYmxlcy0+PlJlZ2lzdHJ5OiByZWdpc3RlcihNeVNlcnZpY2UpXG4gKiAgIFJlZ2lzdHJ5LS0+PkluamVjdGFibGVzOiB2b2lkXG4gKlxuICogICBDbGllbnQtPj5JbmplY3RhYmxlczogZ2V0KFwiTXlTZXJ2aWNlXCIpXG4gKiAgIEluamVjdGFibGVzLT4+UmVnaXN0cnk6IGdldChcIk15U2VydmljZVwiKVxuICogICBSZWdpc3RyeS0tPj5JbmplY3RhYmxlczogTXlTZXJ2aWNlIGluc3RhbmNlXG4gKiAgIEluamVjdGFibGVzLS0+PkNsaWVudDogTXlTZXJ2aWNlIGluc3RhbmNlXG4gKi9cbmV4cG9ydCBjbGFzcyBJbmplY3RhYmxlcyB7XG4gIHByaXZhdGUgc3RhdGljIGFjdGluZ0luamVjdGFibGVzUmVnaXN0cnk/OiBJbmplY3RhYmxlc1JlZ2lzdHJ5ID0gdW5kZWZpbmVkO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7fVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRmV0Y2hlcyBhbiBpbmplY3RhYmxlIGluc3RhbmNlIGJ5IGl0cyByZWdpc3RlcmVkIG5hbWUuXG4gICAqIEBzdW1tYXJ5IFJldHJpZXZlcyB0aGUgbmFtZWQge0BsaW5rIEluamVjdGFibGV9IGZyb20gdGhlIHJlZ2lzdHJ5LiBJZiB0aGUgaW5qZWN0YWJsZSBpcyBhIHNpbmdsZXRvbixcbiAgICogcmV0dXJucyB0aGUgZXhpc3RpbmcgaW5zdGFuY2UuIE90aGVyd2lzZSwgY3JlYXRlcyBhIG5ldyBpbnN0YW5jZS5cbiAgICogQHRlbXBsYXRlIFQgVHlwZSBvZiB0aGUgaW5qZWN0YWJsZSBvYmplY3QgdG8gcmV0cmlldmVcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgVGhlIHJlZ2lzdGVyZWQgbmFtZSBvZiB0aGUgaW5qZWN0YWJsZSB0byByZXRyaWV2ZVxuICAgKiBAcGFyYW0ge2FueVtdfSBhcmdzIENvbnN0cnVjdG9yIGFyZ3VtZW50cyB0byBwYXNzIHdoZW4gaW5zdGFudGlhdGluZyB0aGUgaW5qZWN0YWJsZVxuICAgKiBAcmV0dXJuIHtJbmplY3RhYmxlPFQ+IHwgdW5kZWZpbmVkfSBUaGUgaW5qZWN0YWJsZSBpbnN0YW5jZSBvciB1bmRlZmluZWQgaWYgbm90IGZvdW5kXG4gICAqL1xuICBzdGF0aWMgZ2V0PFQ+KFxuICAgIG5hbWU6IHN5bWJvbCB8IHN0cmluZyB8IHsgbmV3ICguLi5hcmdzOiBhbnlbXSk6IFQgfSxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBUIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gSW5qZWN0YWJsZXMuZ2V0UmVnaXN0cnkoKS5nZXQobmFtZSwgLi4uYXJncyk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEFkZHMgYSBjbGFzcyBvciBvYmplY3QgdG8gdGhlIGluamVjdGFibGUgcmVnaXN0cnkuXG4gICAqIEBzdW1tYXJ5IFJlZ2lzdGVycyBhbiBpbmplY3RhYmxlIGNvbnN0cnVjdG9yIG9yIGluc3RhbmNlIHdpdGggdGhlIHJlZ2lzdHJ5LCBtYWtpbmcgaXQgYXZhaWxhYmxlIGZvciBpbmplY3Rpb24uXG4gICAqIEB0ZW1wbGF0ZSBUIFR5cGUgb2YgdGhlIGluamVjdGFibGUgb2JqZWN0IHRvIHJlZ2lzdGVyXG4gICAqIEBwYXJhbSB7SW5qZWN0YWJsZTxUPn0gY29uc3RydWN0b3IgVGhlIGNsYXNzIGNvbnN0cnVjdG9yIG9yIG9iamVjdCBpbnN0YW5jZSB0byByZWdpc3RlclxuICAgKiBAcGFyYW0ge2FueVtdfSBhcmdzIEFkZGl0aW9uYWwgYXJndW1lbnRzIGZvciByZWdpc3RyYXRpb24gKGNhdGVnb3J5LCBzaW5nbGV0b24gZmxhZywgZXRjLilcbiAgICogQHJldHVybiB7dm9pZH1cbiAgICovXG4gIHN0YXRpYyByZWdpc3RlcjxUPihjb25zdHJ1Y3RvcjogSW5qZWN0YWJsZTxUPiwgLi4uYXJnczogYW55W10pOiB2b2lkIHtcbiAgICByZXR1cm4gSW5qZWN0YWJsZXMuZ2V0UmVnaXN0cnkoKS5yZWdpc3RlcihcbiAgICAgIGNvbnN0cnVjdG9yLFxuICAgICAgLi4uKGFyZ3MgYXMgW3N5bWJvbCwgSW5qZWN0YWJsZU9wdGlvbnM8VD5dKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgYW4gaW5qZWN0YWJsZSBjbGFzcy5cbiAgICogQHN1bW1hcnkgSW5zdGFudGlhdGVzIGFuIGluamVjdGFibGUgY2xhc3MgdXNpbmcgaXRzIGNvbnN0cnVjdG9yIGFuZCB0aGUgcHJvdmlkZWQgYXJndW1lbnRzLlxuICAgKiBAdGVtcGxhdGUgVCBUeXBlIG9mIHRoZSBvYmplY3QgdG8gYnVpbGRcbiAgICogQHBhcmFtIHtzeW1ib2x9IG5hbWUgc3ltYm9sIHJlZmVyZW5jaW5nIHRoZSBpbmplY3RhYmxlXG4gICAqIEBwYXJhbSB7YW55W119IGFyZ3MgQ29uc3RydWN0b3IgYXJndW1lbnRzIHRvIHBhc3Mgd2hlbiBpbnN0YW50aWF0aW5nIHRoZSBpbmplY3RhYmxlXG4gICAqIEByZXR1cm4ge1R9IFRoZSBuZXdseSBjcmVhdGVkIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgYnVpbGQ8VD4obmFtZTogc3ltYm9sLCAuLi5hcmdzOiBhbnlbXSk6IFQge1xuICAgIHJldHVybiBJbmplY3RhYmxlcy5nZXRSZWdpc3RyeSgpLmJ1aWxkKG5hbWUsIC4uLmFyZ3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZXBsYWNlcyB0aGUgY3VycmVudCByZWdpc3RyeSBpbXBsZW1lbnRhdGlvbi5cbiAgICogQHN1bW1hcnkgU2V0cyBhIG5ldyB7QGxpbmsgSW5qZWN0YWJsZXNSZWdpc3RyeX0gaW1wbGVtZW50YXRpb24sIGFsbG93aW5nIGZvciBjdXN0b20gcmVnaXN0cnkgYmVoYXZpb3IuXG4gICAqIEBwYXJhbSB7SW5qZWN0YWJsZXNSZWdpc3RyeX0gb3BlcmF0aW9uc1JlZ2lzdHJ5IFRoZSBuZXcgaW1wbGVtZW50YXRpb24gb2YgUmVnaXN0cnkgdG8gdXNlXG4gICAqIEByZXR1cm4ge3ZvaWR9XG4gICAqL1xuICBzdGF0aWMgc2V0UmVnaXN0cnkob3BlcmF0aW9uc1JlZ2lzdHJ5OiBJbmplY3RhYmxlc1JlZ2lzdHJ5KTogdm9pZCB7XG4gICAgSW5qZWN0YWJsZXMuYWN0aW5nSW5qZWN0YWJsZXNSZWdpc3RyeSA9IG9wZXJhdGlvbnNSZWdpc3RyeTtcbiAgfVxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFByb3ZpZGVzIGFjY2VzcyB0byB0aGUgY3VycmVudCByZWdpc3RyeSBpbnN0YW5jZS5cbiAgICogQHN1bW1hcnkgUmV0dXJucyB0aGUgY3VycmVudCB7QGxpbmsgSW5qZWN0YWJsZXNSZWdpc3RyeX0gb3IgY3JlYXRlcyBhIGRlZmF1bHQgb25lIGlmIG5vbmUgZXhpc3RzLlxuICAgKiBAcmV0dXJuIHtJbmplY3RhYmxlc1JlZ2lzdHJ5fSBUaGUgY3VycmVudCByZWdpc3RyeSBpbnN0YW5jZVxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0UmVnaXN0cnkoKTogSW5qZWN0YWJsZXNSZWdpc3RyeSB7XG4gICAgaWYgKCFJbmplY3RhYmxlcy5hY3RpbmdJbmplY3RhYmxlc1JlZ2lzdHJ5KVxuICAgICAgSW5qZWN0YWJsZXMuYWN0aW5nSW5qZWN0YWJsZXNSZWdpc3RyeSA9IG5ldyBJbmplY3RhYmxlUmVnaXN0cnlJbXAoKTtcbiAgICByZXR1cm4gSW5qZWN0YWJsZXMuYWN0aW5nSW5qZWN0YWJsZXNSZWdpc3RyeTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ2xlYXJzIGFsbCByZWdpc3RlcmVkIGluamVjdGFibGVzLlxuICAgKiBAc3VtbWFyeSBSZXNldHMgdGhlIHJlZ2lzdHJ5IHRvIGEgY2xlYW4gc3RhdGUgYnkgY3JlYXRpbmcgYSBuZXcgZW1wdHkgcmVnaXN0cnkgaW5zdGFuY2UuXG4gICAqIEByZXR1cm4ge3ZvaWR9XG4gICAqL1xuICBzdGF0aWMgcmVzZXQoKTogdm9pZCB7XG4gICAgSW5qZWN0YWJsZXMuc2V0UmVnaXN0cnkobmV3IEluamVjdGFibGVSZWdpc3RyeUltcCgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVtb3ZlcyBzcGVjaWZpYyBpbmplY3RhYmxlcyBmcm9tIHRoZSByZWdpc3RyeSBiYXNlZCBvbiBhIHBhdHRlcm4uXG4gICAqIEBzdW1tYXJ5IFNlbGVjdGl2ZWx5IHJlc2V0cyB0aGUgcmVnaXN0cnkgYnkgcmVtb3Zpbmcgb25seSB0aGUgaW5qZWN0YWJsZXMgd2hvc2UgbmFtZXMgbWF0Y2ggdGhlIHByb3ZpZGVkIHBhdHRlcm4uXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgUmVnRXhwfSBtYXRjaCBBIHN0cmluZyBvciByZWd1bGFyIGV4cHJlc3Npb24gcGF0dGVybiB0byBtYXRjaCBhZ2FpbnN0IGluamVjdGFibGUgbmFtZXNcbiAgICogQHJldHVybiB7dm9pZH1cbiAgICovXG4gIHN0YXRpYyBzZWxlY3RpdmVSZXNldChtYXRjaDogc3RyaW5nIHwgUmVnRXhwKTogdm9pZCB7XG4gICAgY29uc3QgcmVnZXhwID0gdHlwZW9mIG1hdGNoID09PSBcInN0cmluZ1wiID8gbmV3IFJlZ0V4cChtYXRjaCkgOiBtYXRjaDtcbiAgICAoSW5qZWN0YWJsZXMuYWN0aW5nSW5qZWN0YWJsZXNSZWdpc3RyeSBhcyBhbnkpW1wiY2FjaGVcIl0gPSBPYmplY3QuZW50cmllcyhcbiAgICAgIChJbmplY3RhYmxlcy5hY3RpbmdJbmplY3RhYmxlc1JlZ2lzdHJ5IGFzIGFueSlbXCJjYWNoZVwiXVxuICAgICkucmVkdWNlKChhY2N1bTogUmVjb3JkPHN0cmluZywgYW55PiwgW2tleSwgdmFsXSkgPT4ge1xuICAgICAgaWYgKCFrZXkubWF0Y2gocmVnZXhwKSkgYWNjdW1ba2V5XSA9IHZhbDtcbiAgICAgIHJldHVybiBhY2N1bTtcbiAgICB9LCB7fSk7XG4gIH1cbn1cbiJdfQ==
|
package/lib/Injectables.d.ts
CHANGED
|
@@ -53,7 +53,9 @@ export declare class Injectables {
|
|
|
53
53
|
* @param {any[]} args Constructor arguments to pass when instantiating the injectable
|
|
54
54
|
* @return {Injectable<T> | undefined} The injectable instance or undefined if not found
|
|
55
55
|
*/
|
|
56
|
-
static get<T>(name:
|
|
56
|
+
static get<T>(name: symbol | string | {
|
|
57
|
+
new (...args: any[]): T;
|
|
58
|
+
}, ...args: any[]): T | undefined;
|
|
57
59
|
/**
|
|
58
60
|
* @description Adds a class or object to the injectable registry.
|
|
59
61
|
* @summary Registers an injectable constructor or instance with the registry, making it available for injection.
|
|
@@ -67,11 +69,11 @@ export declare class Injectables {
|
|
|
67
69
|
* @description Creates a new instance of an injectable class.
|
|
68
70
|
* @summary Instantiates an injectable class using its constructor and the provided arguments.
|
|
69
71
|
* @template T Type of the object to build
|
|
70
|
-
* @param {
|
|
72
|
+
* @param {symbol} name symbol referencing the injectable
|
|
71
73
|
* @param {any[]} args Constructor arguments to pass when instantiating the injectable
|
|
72
74
|
* @return {T} The newly created instance
|
|
73
75
|
*/
|
|
74
|
-
static build<T>(
|
|
76
|
+
static build<T>(name: symbol, ...args: any[]): T;
|
|
75
77
|
/**
|
|
76
78
|
* @description Replaces the current registry implementation.
|
|
77
79
|
* @summary Sets a new {@link InjectablesRegistry} implementation, allowing for custom registry behavior.
|