angular-odata 0.100.1 → 0.101.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/api.mjs +2 -2
- package/esm2020/lib/cache/cache.mjs +56 -4
- package/esm2020/lib/cache/memory.mjs +14 -4
- package/esm2020/lib/cache/storage.mjs +21 -2
- package/esm2020/lib/client.mjs +3 -3
- package/esm2020/lib/constants.mjs +2 -1
- package/esm2020/lib/models/collection.mjs +100 -39
- package/esm2020/lib/models/model.mjs +17 -2
- package/esm2020/lib/models/options.mjs +119 -81
- package/esm2020/lib/module.mjs +4 -4
- package/esm2020/lib/options.mjs +3 -8
- package/esm2020/lib/resources/query/expressions/syntax.mjs +1 -1
- package/esm2020/lib/resources/query/handlers.mjs +69 -1
- package/esm2020/lib/resources/resource.mjs +13 -9
- package/esm2020/lib/resources/responses/annotations.mjs +1 -1
- package/esm2020/lib/resources/responses/metadata.mjs +1 -1
- package/esm2020/lib/resources/responses/options.mjs +1 -1
- package/esm2020/lib/resources/responses/response.mjs +2 -2
- package/esm2020/lib/resources/types/batch.mjs +108 -97
- package/esm2020/lib/schema/callable.mjs +3 -3
- package/esm2020/lib/schema/enum-type.mjs +5 -2
- package/esm2020/lib/schema/parsers/callable.mjs +10 -20
- package/esm2020/lib/schema/parsers/enum-type.mjs +13 -16
- package/esm2020/lib/schema/parsers/structured-type.mjs +13 -25
- package/esm2020/lib/schema/structured-type.mjs +8 -4
- package/esm2020/lib/services/factory.mjs +3 -3
- package/esm2020/lib/types.mjs +1 -1
- package/esm2020/lib/utils/arrays.mjs +10 -0
- package/esm2020/lib/utils/enums.mjs +3 -3
- package/esm2020/lib/utils/objects.mjs +10 -5
- package/esm2020/lib/utils/types.mjs +5 -1
- package/fesm2015/angular-odata.mjs +2927 -2651
- package/fesm2015/angular-odata.mjs.map +1 -1
- package/fesm2020/angular-odata.mjs +2927 -2650
- package/fesm2020/angular-odata.mjs.map +1 -1
- package/lib/cache/cache.d.ts +62 -1
- package/lib/cache/memory.d.ts +10 -0
- package/lib/cache/storage.d.ts +19 -0
- package/lib/constants.d.ts +1 -0
- package/lib/models/collection.d.ts +9 -5
- package/lib/models/model.d.ts +6 -3
- package/lib/models/options.d.ts +11 -10
- package/lib/options.d.ts +3 -7
- package/lib/resources/query/handlers.d.ts +119 -0
- package/lib/resources/resource.d.ts +4 -4
- package/lib/resources/responses/options.d.ts +2 -2
- package/lib/resources/types/batch.d.ts +8 -11
- package/lib/schema/callable.d.ts +4 -4
- package/lib/schema/enum-type.d.ts +4 -4
- package/lib/schema/parsers/callable.d.ts +10 -10
- package/lib/schema/parsers/enum-type.d.ts +7 -7
- package/lib/schema/parsers/structured-type.d.ts +11 -11
- package/lib/schema/structured-type.d.ts +4 -4
- package/lib/types.d.ts +6 -8
- package/lib/utils/arrays.d.ts +3 -0
- package/lib/utils/enums.d.ts +2 -2
- package/lib/utils/types.d.ts +1 -0
- package/package.json +1 -1
|
@@ -188,6 +188,16 @@ export class ODataModel {
|
|
|
188
188
|
this._meta.reset(this, { name: pathArray[0], silent });
|
|
189
189
|
}
|
|
190
190
|
}
|
|
191
|
+
clear({ silent = false } = {}) {
|
|
192
|
+
this._attributes.clear();
|
|
193
|
+
this._changes.clear();
|
|
194
|
+
this._relations.clear();
|
|
195
|
+
if (!silent) {
|
|
196
|
+
this.events$.emit(new ODataModelEvent('update', {
|
|
197
|
+
model: this,
|
|
198
|
+
}));
|
|
199
|
+
}
|
|
200
|
+
}
|
|
191
201
|
assign(entity, { reset = false, reparent = false, silent = false, } = {}) {
|
|
192
202
|
return this._meta.assign(this, entity, { reset, silent, reparent });
|
|
193
203
|
}
|
|
@@ -411,9 +421,14 @@ export class ODataModel {
|
|
|
411
421
|
if (field === undefined || !field.navigation)
|
|
412
422
|
throw Error(`getReference: Can't find navigation property ${name}`);
|
|
413
423
|
let model = this[name];
|
|
424
|
+
if (model === null)
|
|
425
|
+
return null;
|
|
414
426
|
if (model === undefined) {
|
|
415
427
|
const value = field.collection ? [] : this.referenced(field);
|
|
416
|
-
model =
|
|
428
|
+
model =
|
|
429
|
+
value !== null
|
|
430
|
+
? field.modelCollectionFactory({ parent: this, value })
|
|
431
|
+
: null;
|
|
417
432
|
this[name] = model;
|
|
418
433
|
}
|
|
419
434
|
return model;
|
|
@@ -446,4 +461,4 @@ export class ODataModel {
|
|
|
446
461
|
}
|
|
447
462
|
}
|
|
448
463
|
export const RESERVED_FIELD_NAMES = Object.getOwnPropertyNames(ODataModel.prototype);
|
|
449
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLW9kYXRhL3NyYy9saWIvbW9kZWxzL21vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQWMsRUFBRSxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuRSxPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFDLE9BQU8sRUFJTCxtQkFBbUIsRUFDbkIsK0JBQStCLEdBT2hDLE1BQU0sY0FBYyxDQUFDO0FBRXRCLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQy9DLE9BQU8sRUFDTCxZQUFZLEVBQ1osZUFBZSxFQUVmLGVBQWUsRUFFZixpQkFBaUIsR0FFbEIsTUFBTSxXQUFXLENBQUM7QUFFbkIsV0FBVztBQUNYLE1BQU0sT0FBTyxVQUFVO0lBc0RyQixZQUNFLE9BQTZDLEVBQUUsRUFDL0MsRUFDRSxNQUFNLEVBQ04sUUFBUSxFQUNSLE1BQU0sRUFDTixLQUFLLEdBQUcsS0FBSyxNQVNYLEVBQUU7UUFyQ1IsU0FBUztRQUNULFlBQU8sR0FLSSxJQUFJLENBQUM7UUFDaEIsZ0JBQVcsR0FBcUIsSUFBSSxHQUFHLEVBQWUsQ0FBQztRQUN2RCxhQUFRLEdBQXFCLElBQUksR0FBRyxFQUFlLENBQUM7UUFDcEQsZUFBVSxHQUF5QyxJQUFJLEdBQUcsRUFHdkQsQ0FBQztRQUNKLGNBQVMsR0FBNEIsSUFBSSxDQUFDO1FBRTFDLFdBQU0sR0FBWSxLQUFLLENBQUM7UUFDeEIsY0FBUyxHQUFZLEtBQUssQ0FBQztRQUMzQixZQUFP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ciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZm9ya0pvaW4sIE5FVkVSLCBPYnNlcnZhYmxlLCBvZiwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICBFbnRpdHlLZXksXG4gIE9EYXRhRW50aXR5LFxuICBPRGF0YUVudGl0eUFubm90YXRpb25zLFxuICBPRGF0YUVudGl0eVJlc291cmNlLFxuICBPRGF0YU5hdmlnYXRpb25Qcm9wZXJ0eVJlc291cmNlLFxuICBPRGF0YU9wdGlvbnMsXG4gIE9EYXRhUHJvcGVydHlSZXNvdXJjZSxcbiAgT0RhdGFRdWVyeUFyZ3VtZW50c09wdGlvbnMsXG4gIE9EYXRhUXVlcnlPcHRpb25zSGFuZGxlcixcbiAgT0RhdGFSZXNvdXJjZSxcbiAgT0RhdGFTaW5nbGV0b25SZXNvdXJjZSxcbn0gZnJvbSAnLi4vcmVzb3VyY2VzJztcbmltcG9ydCB7IE9EYXRhU3RydWN0dXJlZFR5cGUgfSBmcm9tICcuLi9zY2hlbWEnO1xuaW1wb3J0IHsgT2JqZWN0cywgU3RyaW5ncywgVHlwZXMgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBPRGF0YUNvbGxlY3Rpb24gfSBmcm9tICcuL2NvbGxlY3Rpb24nO1xuaW1wb3J0IHtcbiAgSU5DTFVERV9ERUVQLFxuICBJTkNMVURFX1NIQUxMT1csXG4gIE1vZGVsT3B0aW9ucyxcbiAgT0RhdGFNb2RlbEV2ZW50LFxuICBPRGF0YU1vZGVsRmllbGQsXG4gIE9EYXRhTW9kZWxPcHRpb25zLFxuICBPRGF0YU1vZGVsUmVsYXRpb24sXG59IGZyb20gJy4vb3B0aW9ucyc7XG5cbi8vIEBkeW5hbWljXG5leHBvcnQgY2xhc3MgT0RhdGFNb2RlbDxUPiB7XG4gIC8vIFByb3BlcnRpZXNcbiAgc3RhdGljIG9wdGlvbnM6IE1vZGVsT3B0aW9ucztcbiAgc3RhdGljIG1ldGE6IE9EYXRhTW9kZWxPcHRpb25zPGFueT47XG4gIHN0YXRpYyBidWlsZE1ldGE8VD4oe1xuICAgIG9wdGlvbnMsXG4gICAgc2NoZW1hLFxuICB9OiB7XG4gICAgb3B0aW9ucz86IE1vZGVsT3B0aW9ucztcbiAgICBzY2hlbWE6IE9EYXRhU3RydWN0dXJlZFR5cGU8VD47XG4gIH0pIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBsZXQgZmllbGRzID0gc2NoZW1hXG4gICAgICAgIC5maWVsZHMoeyBpbmNsdWRlX25hdmlnYXRpb246IHRydWUsIGluY2x1ZGVfcGFyZW50czogdHJ1ZSB9KVxuICAgICAgICAucmVkdWNlKChhY2MsIGYpID0+IHtcbiAgICAgICAgICBsZXQgbmFtZSA9IGYubmFtZTtcbiAgICAgICAgICAvLyBQcmV2ZW50IGNvbGxpc2lvbiB3aXRoIHJlc2VydmVkIGtleXdvcmRzXG4gICAgICAgICAgd2hpbGUgKFJFU0VSVkVEX0ZJRUxEX05BTUVTLmluY2x1ZGVzKG5hbWUpKSB7XG4gICAgICAgICAgICBuYW1lID0gbmFtZSArICdfJztcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oYWNjLCB7XG4gICAgICAgICAgICBbbmFtZV06IHtcbiAgICAgICAgICAgICAgZmllbGQ6IGYubmFtZSxcbiAgICAgICAgICAgICAgZGVmYXVsdDogZi5kZWZhdWx0LFxuICAgICAgICAgICAgICByZXF1aXJlZDogIWYubnVsbGFibGUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9LCB7fSk7XG4gICAgICBvcHRpb25zID0geyBmaWVsZHMgfTtcbiAgICB9XG4gICAgdGhpcy5tZXRhID0gbmV3IE9EYXRhTW9kZWxPcHRpb25zPFQ+KHsgb3B0aW9ucywgc2NoZW1hIH0pO1xuICB9XG4gIC8vIFBhcmVudFxuICBfcGFyZW50OlxuICAgIHwgW1xuICAgICAgICBPRGF0YU1vZGVsPGFueT4gfCBPRGF0YUNvbGxlY3Rpb248YW55LCBPRGF0YU1vZGVsPGFueT4+LFxuICAgICAgICBPRGF0YU1vZGVsRmllbGQ8YW55PiB8IG51bGxcbiAgICAgIF1cbiAgICB8IG51bGwgPSBudWxsO1xuICBfYXR0cmlidXRlczogTWFwPHN0cmluZywgYW55PiA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XG4gIF9jaGFuZ2VzOiBNYXA8c3RyaW5nLCBhbnk+ID0gbmV3IE1hcDxzdHJpbmcsIGFueT4oKTtcbiAgX3JlbGF0aW9uczogTWFwPHN0cmluZywgT0RhdGFNb2RlbFJlbGF0aW9uPGFueT4+ID0gbmV3IE1hcDxcbiAgICBzdHJpbmcsXG4gICAgT0RhdGFNb2RlbFJlbGF0aW9uPGFueT5cbiAgPigpO1xuICBfcmVzb3VyY2U6IE9EYXRhUmVzb3VyY2U8VD4gfCBudWxsID0gbnVsbDtcbiAgX2Fubm90YXRpb25zITogT0RhdGFFbnRpdHlBbm5vdGF0aW9ucztcbiAgX3Jlc2V0OiBib29sZWFuID0gZmFsc2U7XG4gIF9yZXBhcmVudDogYm9vbGVhbiA9IGZhbHNlO1xuICBfc2lsZW50OiBib29sZWFuID0gZmFsc2U7XG4gIF9tZXRhOiBPRGF0YU1vZGVsT3B0aW9uczxUPjtcbiAgLy8gRXZlbnRzXG4gIGV2ZW50cyQgPSBuZXcgRXZlbnRFbWl0dGVyPE9EYXRhTW9kZWxFdmVudDxUPj4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBkYXRhOiBQYXJ0aWFsPFQ+IHwgeyBbbmFtZTogc3RyaW5nXTogYW55IH0gPSB7fSxcbiAgICB7XG4gICAgICBwYXJlbnQsXG4gICAgICByZXNvdXJjZSxcbiAgICAgIGFubm90cyxcbiAgICAgIHJlc2V0ID0gZmFsc2UsXG4gICAgfToge1xuICAgICAgcGFyZW50PzogW1xuICAgICAgICBPRGF0YU1vZGVsPGFueT4gfCBPRGF0YUNvbGxlY3Rpb248YW55LCBPRGF0YU1vZGVsPGFueT4+LFxuICAgICAgICBPRGF0YU1vZGVsRmllbGQ8YW55PiB8IG51bGxcbiAgICAgIF07XG4gICAgICByZXNvdXJjZT86IE9EYXRhUmVzb3VyY2U8VD47XG4gICAgICBhbm5vdHM/OiBPRGF0YUVudGl0eUFubm90YXRpb25zO1xuICAgICAgcmVzZXQ/OiBib29sZWFuO1xuICAgIH0gPSB7fVxuICApIHtcbiAgICBjb25zdCBLbGFzcyA9IHRoaXMuY29uc3RydWN0b3IgYXMgdHlwZW9mIE9EYXRhTW9kZWw7XG4gICAgaWYgKEtsYXNzLm1ldGEgPT09IHVuZGVmaW5lZClcbiAgICAgIHRocm93IG5ldyBFcnJvcihgT0RhdGFNb2RlbDogQ2FuJ3QgY3JlYXRlIG1vZGVsIHdpdGhvdXQgbWV0YWRhdGFgKTtcbiAgICB0aGlzLl9tZXRhID0gS2xhc3MubWV0YTtcbiAgICB0aGlzLl9tZXRhLmJpbmQodGhpcywgeyBwYXJlbnQsIHJlc291cmNlLCBhbm5vdHMgfSk7XG5cbiAgICAvLyBDbGllbnQgSWRcbiAgICAoPGFueT50aGlzKVt0aGlzLl9tZXRhLmNpZF0gPVxuICAgICAgKDxhbnk+ZGF0YSlbdGhpcy5fbWV0YS5jaWRdIHx8XG4gICAgICBTdHJpbmdzLnVuaXF1ZUlkKGAke0tsYXNzLm1ldGEuc2NoZW1hLm5hbWUudG9Mb3dlckNhc2UoKX0tYCk7XG5cbiAgICBsZXQgYXR0cnMgPSB0aGlzLmFubm90cygpLmF0dHJpYnV0ZXM8VD4oZGF0YSwgJ2Z1bGwnKTtcbiAgICBsZXQgZGVmYXVsdHMgPSB0aGlzLmRlZmF1bHRzKCk7XG5cbiAgICB0aGlzLmFzc2lnbihPYmplY3RzLm1lcmdlKGRlZmF1bHRzLCBhdHRycyksIHsgcmVzZXQgfSk7XG4gIH1cblxuICAvLyNyZWdpb24gUmVzb3VyY2VzXG4gIHJlc291cmNlKCk6XG4gICAgfCBPRGF0YUVudGl0eVJlc291cmNlPFQ+XG4gICAgfCBPRGF0YU5hdmlnYXRpb25Qcm9wZXJ0eVJlc291cmNlPFQ+XG4gICAgfCBPRGF0YVByb3BlcnR5UmVzb3VyY2U8VD5cbiAgICB8IE9EYXRhU2luZ2xldG9uUmVzb3VyY2U8VD4ge1xuICAgIHJldHVybiBPRGF0YU1vZGVsT3B0aW9ucy5yZXNvdXJjZTxUPih0aGlzKSBhc1xuICAgICAgfCBPRGF0YUVudGl0eVJlc291cmNlPFQ+XG4gICAgICB8IE9EYXRhTmF2aWdhdGlvblByb3BlcnR5UmVzb3VyY2U8VD5cbiAgICAgIHwgT0RhdGFQcm9wZXJ0eVJlc291cmNlPFQ+XG4gICAgICB8IE9EYXRhU2luZ2xldG9uUmVzb3VyY2U8VD47XG4gIH1cblxuICBuYXZpZ2F0aW9uUHJvcGVydHk8Tj4oXG4gICAgbmFtZToga2V5b2YgVCB8IHN0cmluZ1xuICApOiBPRGF0YU5hdmlnYXRpb25Qcm9wZXJ0eVJlc291cmNlPE4+IHtcbiAgICBjb25zdCBmaWVsZCA9IHRoaXMuX21ldGEuZmllbGQobmFtZSk7XG4gICAgaWYgKGZpZWxkID09PSB1bmRlZmluZWQgfHwgIWZpZWxkLm5hdmlnYXRpb24pXG4gICAgICB0aHJvdyBFcnJvcihgbmF2aWdhdGlvblByb3BlcnR5OiBDYW4ndCBmaW5kIG5hdmlnYXRpb24gcHJvcGVydHkgJHtuYW1lfWApO1xuXG4gICAgY29uc3QgcmVzb3VyY2UgPSB0aGlzLnJlc291cmNlKCk7XG4gICAgaWYgKCEocmVzb3VyY2UgaW5zdGFuY2VvZiBPRGF0YUVudGl0eVJlc291cmNlKSB8fCAhcmVzb3VyY2UuaGFzS2V5KCkpXG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgXCJuYXZpZ2F0aW9uUHJvcGVydHk6IENhbid0IGdldCBuYXZpZ2F0aW9uIHdpdGhvdXQgT0RhdGFFbnRpdHlSZXNvdXJjZSB3aXRoIGtleVwiXG4gICAgICApO1xuXG4gICAgcmV0dXJuIGZpZWxkLnJlc291cmNlRmFjdG9yeTxULCBOPihcbiAgICAgIHJlc291cmNlXG4gICAgKSBhcyBPRGF0YU5hdmlnYXRpb25Qcm9wZXJ0eVJlc291cmNlPE4+O1xuICB9XG5cbiAgcHJvcGVydHk8Tj4obmFtZTogc3RyaW5nKTogT0RhdGFQcm9wZXJ0eVJlc291cmNlPE4+IHtcbiAgICBjb25zdCBmaWVsZCA9IHRoaXMuX21ldGEuZmllbGQobmFtZSk7XG4gICAgaWYgKGZpZWxkID09PSB1bmRlZmluZWQgfHwgZmllbGQubmF2aWdhdGlvbilcbiAgICAgIHRocm93IEVycm9yKGBwcm9wZXJ0eTogQ2FuJ3QgZmluZCBwcm9wZXJ0eSAke25hbWV9YCk7XG5cbiAgICBjb25zdCByZXNvdXJjZSA9IHRoaXMucmVzb3VyY2UoKTtcbiAgICBpZiAoIShyZXNvdXJjZSBpbnN0YW5jZW9mIE9EYXRhRW50aXR5UmVzb3VyY2UpIHx8ICFyZXNvdXJjZS5oYXNLZXkoKSlcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICBcInByb3BlcnR5OiBDYW4ndCBnZXQgcHJvcGVydHkgd2l0aG91dCBPRGF0YUVudGl0eVJlc291cmNlIHdpdGgga2V5XCJcbiAgICAgICk7XG5cbiAgICByZXR1cm4gZmllbGQucmVzb3VyY2VGYWN0b3J5PFQsIE4+KHJlc291cmNlKSBhcyBPRGF0YVByb3BlcnR5UmVzb3VyY2U8Tj47XG4gIH1cblxuICBhdHRhY2g8Uj4oXG4gICAgcmVzb3VyY2U6XG4gICAgICB8IE9EYXRhRW50aXR5UmVzb3VyY2U8Uj5cbiAgICAgIHwgT0RhdGFOYXZpZ2F0aW9uUHJvcGVydHlSZXNvdXJjZTxSPlxuICAgICAgfCBPRGF0YVByb3BlcnR5UmVzb3VyY2U8Uj5cbiAgICAgIHwgT0RhdGFTaW5nbGV0b25SZXNvdXJjZTxSPlxuICApIHtcbiAgICByZXR1cm4gdGhpcy5fbWV0YS5hdHRhY2g8Uj4odGhpcywgcmVzb3VyY2UpO1xuICB9XG4gIC8vI2VuZHJlZ2lvblxuXG4gIHNjaGVtYSgpIHtcbiAgICByZXR1cm4gdGhpcy5fbWV0YS5zY2hlbWE7XG4gIH1cblxuICBhbm5vdHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Fubm90YXRpb25zO1xuICB9XG5cbiAga2V5KHtcbiAgICBmaWVsZF9tYXBwaW5nID0gZmFsc2UsXG4gICAgcmVzb2x2ZSA9IHRydWUsXG4gIH06IHsgZmllbGRfbWFwcGluZz86IGJvb2xlYW47IHJlc29sdmU/OiBib29sZWFuIH0gPSB7fSk6XG4gICAgfCBFbnRpdHlLZXk8VD5cbiAgICB8IHsgW25hbWU6IHN0cmluZ106IGFueSB9XG4gICAgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9tZXRhLnJlc29sdmVLZXkodGhpcywgeyBmaWVsZF9tYXBwaW5nLCByZXNvbHZlIH0pO1xuICB9XG5cbiAgaXNOZXcoKSB7XG4gICAgcmV0dXJuIHRoaXMua2V5KCkgPT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlzUGFyZW50T2YoXG4gICAgY2hpbGQ6IE9EYXRhTW9kZWw8YW55PiB8IE9EYXRhQ29sbGVjdGlvbjxhbnksIE9EYXRhTW9kZWw8YW55Pj5cbiAgKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIGNoaWxkICE9PSB0aGlzICYmXG4gICAgICBPRGF0YU1vZGVsT3B0aW9ucy5jaGFpbihjaGlsZCkuc29tZSgocCkgPT4gcFswXSA9PT0gdGhpcylcbiAgICApO1xuICB9XG5cbiAgcmVmZXJlbnRpYWwoXG4gICAgZmllbGQ6IE9EYXRhTW9kZWxGaWVsZDxhbnk+LFxuICAgIHtcbiAgICAgIGZpZWxkX21hcHBpbmcgPSBmYWxzZSxcbiAgICAgIHJlc29sdmUgPSB0cnVlLFxuICAgIH06IHsgZmllbGRfbWFwcGluZz86IGJvb2xlYW47IHJlc29sdmU/OiBib29sZWFuIH0gPSB7fVxuICApOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX21ldGEucmVzb2x2ZVJlZmVyZW50aWFsKHRoaXMsIGZpZWxkLCB7XG4gICAgICBmaWVsZF9tYXBwaW5nLFxuICAgICAgcmVzb2x2ZSxcbiAgICB9KTtcbiAgfVxuXG4gIHJlZmVyZW5jZWQoXG4gICAgZmllbGQ6IE9EYXRhTW9kZWxGaWVsZDxhbnk+LFxuICAgIHtcbiAgICAgIGZpZWxkX21hcHBpbmcgPSBmYWxzZSxcbiAgICAgIHJlc29sdmUgPSB0cnVlLFxuICAgIH06IHsgZmllbGRfbWFwcGluZz86IGJvb2xlYW47IHJlc29sdmU/OiBib29sZWFuIH0gPSB7fVxuICApOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX21ldGEucmVzb2x2ZVJlZmVyZW5jZWQodGhpcywgZmllbGQsIHtcbiAgICAgIGZpZWxkX21hcHBpbmcsXG4gICAgICByZXNvbHZlLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gVmFsaWRhdGlvblxuICBfZXJyb3JzPzogeyBba2V5OiBzdHJpbmddOiBhbnkgfTtcbiAgdmFsaWRhdGUoe1xuICAgIG1ldGhvZCxcbiAgICBuYXZpZ2F0aW9uID0gZmFsc2UsXG4gIH06IHtcbiAgICBtZXRob2Q/OiAnY3JlYXRlJyB8ICd1cGRhdGUnIHwgJ21vZGlmeSc7XG4gICAgbmF2aWdhdGlvbj86IGJvb2xlYW47XG4gIH0gPSB7fSkge1xuICAgIHJldHVybiB0aGlzLl9tZXRhLnZhbGlkYXRlKHRoaXMsIHsgbWV0aG9kLCBuYXZpZ2F0aW9uIH0pO1xuICB9XG5cbiAgaXNWYWxpZCh7XG4gICAgbWV0aG9kLFxuICAgIG5hdmlnYXRpb24gPSBmYWxzZSxcbiAgfToge1xuICAgIG1ldGhvZD86ICdjcmVhdGUnIHwgJ3VwZGF0ZScgfCAnbW9kaWZ5JztcbiAgICBuYXZpZ2F0aW9uPzogYm9vbGVhbjtcbiAgfSA9IHt9KTogYm9vbGVhbiB7XG4gICAgdGhpcy5fZXJyb3JzID0gdGhpcy52YWxpZGF0ZSh7IG1ldGhvZCwgbmF2aWdhdGlvbiB9KTtcbiAgICBpZiAodGhpcy5fZXJyb3JzICE9PSB1bmRlZmluZWQpXG4gICAgICB0aGlzLmV2ZW50cyQuZW1pdChcbiAgICAgICAgbmV3IE9EYXRhTW9kZWxFdmVudCgnaW52YWxpZCcsIHtcbiAgICAgICAgICBtb2RlbDogdGhpcyxcbiAgICAgICAgICB2YWx1ZTogdGhpcy5fZXJyb3JzLFxuICAgICAgICAgIG9wdGlvbnM6IHsgbWV0aG9kIH0sXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIHJldHVybiB0aGlzLl9lcnJvcnMgPT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGRlZmF1bHRzKCkge1xuICAgIHJldHVybiB0aGlzLl9tZXRhLmRlZmF1bHRzKCkgfHwge307XG4gIH1cblxuICB0b0VudGl0eSh7XG4gICAgY2xpZW50X2lkID0gZmFsc2UsXG4gICAgaW5jbHVkZV9uYXZpZ2F0aW9uID0gZmFsc2UsXG4gICAgaW5jbHVkZV9jb25jdXJyZW5jeSA9IGZhbHNlLFxuICAgIGluY2x1ZGVfY29tcHV0ZWQgPSBmYWxzZSxcbiAgICBpbmNsdWRlX2tleSA9IHRydWUsXG4gICAgaW5jbHVkZV9ub25fZmllbGQgPSBmYWxzZSxcbiAgICBjaGFuZ2VzX29ubHkgPSBmYWxzZSxcbiAgICBmaWVsZF9tYXBwaW5nID0gZmFsc2UsXG4gICAgY2hhaW4gPSBbXSxcbiAgfToge1xuICAgIGNsaWVudF9pZD86IGJvb2xlYW47XG4gICAgaW5jbHVkZV9uYXZpZ2F0aW9uPzogYm9vbGVhbjtcbiAgICBpbmNsdWRlX2NvbmN1cnJlbmN5PzogYm9vbGVhbjtcbiAgICBpbmNsdWRlX2NvbXB1dGVkPzogYm9vbGVhbjtcbiAgICBpbmNsdWRlX2tleT86IGJvb2xlYW47XG4gICAgaW5jbHVkZV9ub25fZmllbGQ/OiBib29sZWFuO1xuICAgIGNoYW5nZXNfb25seT86IGJvb2xlYW47XG4gICAgZmllbGRfbWFwcGluZz86IGJvb2xlYW47XG4gICAgY2hhaW4/OiAoT0RhdGFNb2RlbDxhbnk+IHwgT0RhdGFDb2xsZWN0aW9uPGFueSwgT0RhdGFNb2RlbDxhbnk+PilbXTtcbiAgfSA9IHt9KTogVCB8IHsgW25hbWU6IHN0cmluZ106IGFueSB9IHtcbiAgICByZXR1cm4gdGhpcy5fbWV0YS50b0VudGl0eSh0aGlzLCB7XG4gICAgICBjbGllbnRfaWQsXG4gICAgICBpbmNsdWRlX25hdmlnYXRpb24sXG4gICAgICBpbmNsdWRlX2NvbmN1cnJlbmN5LFxuICAgICAgaW5jbHVkZV9jb21wdXRlZCxcbiAgICAgIGluY2x1ZGVfa2V5LFxuICAgICAgaW5jbHVkZV9ub25fZmllbGQsXG4gICAgICBjaGFuZ2VzX29ubHksXG4gICAgICBmaWVsZF9tYXBwaW5nLFxuICAgICAgY2hhaW4sXG4gICAgfSk7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHRoaXMudG9FbnRpdHkoKTtcbiAgfVxuXG4gIGF0dHJpYnV0ZXMoe1xuICAgIGNoYW5nZXNfb25seSA9IGZhbHNlLFxuICAgIGluY2x1ZGVfY29uY3VycmVuY3kgPSBmYWxzZSxcbiAgICBpbmNsdWRlX2NvbXB1dGVkID0gZmFsc2UsXG4gICAgaW5jbHVkZV9ub25fZmllbGQgPSBmYWxzZSxcbiAgICBmaWVsZF9tYXBwaW5nID0gZmFsc2UsXG4gIH06IHtcbiAgICBjaGFuZ2VzX29ubHk/OiBib29sZWFuO1xuICAgIGluY2x1ZGVfY29uY3VycmVuY3k/OiBib29sZWFuO1xuICAgIGluY2x1ZGVfY29tcHV0ZWQ/OiBib29sZWFuO1xuICAgIGluY2x1ZGVfbm9uX2ZpZWxkPzogYm9vbGVhbjtcbiAgICBmaWVsZF9tYXBwaW5nPzogYm9vbGVhbjtcbiAgfSA9IHt9KTogeyBbbmFtZTogc3RyaW5nXTogYW55IH0ge1xuICAgIHJldHVybiB0aGlzLl9tZXRhLmF0dHJpYnV0ZXModGhpcywge1xuICAgICAgY2hhbmdlc19vbmx5LFxuICAgICAgaW5jbHVkZV9jb25jdXJyZW5jeSxcbiAgICAgIGluY2x1ZGVfY29tcHV0ZWQsXG4gICAgICBpbmNsdWRlX25vbl9maWVsZCxcbiAgICAgIGZpZWxkX21hcHBpbmcsXG4gICAgfSk7XG4gIH1cblxuICBzZXQocGF0aDogc3RyaW5nIHwgc3RyaW5nW10sIHZhbHVlOiBhbnkpIHtcbiAgICBjb25zdCBwYXRoQXJyYXkgPSAoXG4gICAgICBUeXBlcy5pc0FycmF5KHBhdGgpID8gcGF0aCA6IChwYXRoIGFzIHN0cmluZykubWF0Y2goLyhbXlsuXFxdXSkrL2cpXG4gICAgKSBhcyBhbnlbXTtcbiAgICBpZiAocGF0aEFycmF5Lmxlbmd0aCA9PT0gMCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBpZiAocGF0aEFycmF5Lmxlbmd0aCA+IDEpIHtcbiAgICAgIGNvbnN0IG1vZGVsID0gKDxhbnk+dGhpcylbcGF0aEFycmF5WzBdXTtcbiAgICAgIHJldHVybiBtb2RlbC5zZXQocGF0aEFycmF5LnNsaWNlKDEpLCB2YWx1ZSk7XG4gICAgfVxuICAgIGlmIChwYXRoQXJyYXkubGVuZ3RoID09PSAxKSB7XG4gICAgICByZXR1cm4gKCg8YW55PnRoaXMpW3BhdGhBcnJheVswXV0gPSB2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0KHBhdGg6IHN0cmluZyB8IHN0cmluZ1tdKTogYW55IHtcbiAgICBjb25zdCBwYXRoQXJyYXkgPSAoXG4gICAgICBUeXBlcy5pc0FycmF5KHBhdGgpID8gcGF0aCA6IChwYXRoIGFzIHN0cmluZykubWF0Y2goLyhbXlsuXFxdXSkrL2cpXG4gICAgKSBhcyBhbnlbXTtcbiAgICBpZiAocGF0aEFycmF5Lmxlbmd0aCA9PT0gMCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBjb25zdCB2YWx1ZSA9ICg8YW55PnRoaXMpW3BhdGhBcnJheVswXV07XG4gICAgaWYgKFxuICAgICAgcGF0aEFycmF5Lmxlbmd0aCA+IDEgJiZcbiAgICAgICh2YWx1ZSBpbnN0YW5jZW9mIE9EYXRhTW9kZWwgfHwgdmFsdWUgaW5zdGFuY2VvZiBPRGF0YUNvbGxlY3Rpb24pXG4gICAgKSB7XG4gICAgICByZXR1cm4gdmFsdWUuZ2V0KHBhdGhBcnJheS5zbGljZSgxKSk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHJlc2V0KHtcbiAgICBwYXRoLFxuICAgIHNpbGVudCA9IGZhbHNlLFxuICB9OiB7IHBhdGg/OiBzdHJpbmcgfCBzdHJpbmdbXTsgc2lsZW50PzogYm9vbGVhbiB9ID0ge30pIHtcbiAgICBjb25zdCBwYXRoQXJyYXk6IHN0cmluZ1tdID0gKFxuICAgICAgcGF0aCA9PT0gdW5kZWZpbmVkXG4gICAgICAgID8gW11cbiAgICAgICAgOiBUeXBlcy5pc0FycmF5KHBhdGgpXG4gICAgICAgID8gcGF0aFxuICAgICAgICA6IChwYXRoIGFzIHN0cmluZykubWF0Y2goLyhbXlsuXFxdXSkrL2cpXG4gICAgKSBhcyBhbnlbXTtcbiAgICBjb25zdCBuYW1lID0gcGF0aEFycmF5WzBdO1xuICAgIGNvbnN0IHZhbHVlID0gbmFtZSAhPT0gdW5kZWZpbmVkID8gKDxhbnk+dGhpcylbbmFtZV0gOiB1bmRlZmluZWQ7XG4gICAgaWYgKFxuICAgICAgT0RhdGFNb2RlbE9wdGlvbnMuaXNNb2RlbCh2YWx1ZSkgfHxcbiAgICAgIE9EYXRhTW9kZWxPcHRpb25zLmlzQ29sbGVjdGlvbih2YWx1ZSlcbiAgICApIHtcbiAgICAgIHZhbHVlLnJlc2V0KHsgcGF0aDogcGF0aEFycmF5LnNsaWNlKDEpLCBzaWxlbnQgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX21ldGEucmVzZXQodGhpcywgeyBuYW1lOiBwYXRoQXJyYXlbMF0sIHNpbGVudCB9KTtcbiAgICB9XG4gIH1cblxuICBhc3NpZ24oXG4gICAgZW50aXR5OiBQYXJ0aWFsPFQ+IHwgeyBbbmFtZTogc3RyaW5nXTogYW55IH0sXG4gICAge1xuICAgICAgcmVzZXQgPSBmYWxzZSxcbiAgICAgIHJlcGFyZW50ID0gZmFsc2UsXG4gICAgICBzaWxlbnQgPSBmYWxzZSxcbiAgICB9OiB7IHJlc2V0PzogYm9vbGVhbjsgcmVwYXJlbnQ/OiBib29sZWFuOyBzaWxlbnQ/OiBib29sZWFuIH0gPSB7fVxuICApIHtcbiAgICByZXR1cm4gdGhpcy5fbWV0YS5hc3NpZ24odGhpcywgZW50aXR5LCB7IHJlc2V0LCBzaWxlbnQsIHJlcGFyZW50IH0pO1xuICB9XG5cbiAgY2xvbmU8TSBleHRlbmRzIE9EYXRhTW9kZWw8VD4+KCkge1xuICAgIGxldCBDdG9yID0gPHR5cGVvZiBPRGF0YU1vZGVsPnRoaXMuY29uc3RydWN0b3I7XG4gICAgcmV0dXJuIG5ldyBDdG9yKHRoaXMudG9FbnRpdHkoSU5DTFVERV9TSEFMTE9XKSwge1xuICAgICAgcmVzb3VyY2U6IHRoaXMucmVzb3VyY2UoKSBhcyBPRGF0YVJlc291cmNlPFQ+LFxuICAgICAgYW5ub3RzOiB0aGlzLmFubm90cygpLFxuICAgIH0pIGFzIE07XG4gIH1cblxuICBwcml2YXRlIF9yZXF1ZXN0KG9icyQ6IE9ic2VydmFibGU8T0RhdGFFbnRpdHk8YW55Pj4pOiBPYnNlcnZhYmxlPHRoaXM+IHtcbiAgICB0aGlzLmV2ZW50cyQuZW1pdChcbiAgICAgIG5ldyBPRGF0YU1vZGVsRXZlbnQoJ3JlcXVlc3QnLCB7XG4gICAgICAgIG1vZGVsOiB0aGlzLFxuICAgICAgICBvcHRpb25zOiB7IG9ic2VydmFibGU6IG9icyQgfSxcbiAgICAgIH0pXG4gICAgKTtcbiAgICByZXR1cm4gb2JzJC5waXBlKFxuICAgICAgbWFwKCh7IGVudGl0eSwgYW5ub3RzIH0pID0+IHtcbiAgICAgICAgdGhpcy5fYW5ub3RhdGlvbnMgPSBhbm5vdHM7XG4gICAgICAgIHRoaXMuYXNzaWduKGFubm90cy5hdHRyaWJ1dGVzPFQ+KGVudGl0eSB8fCB7fSwgJ2Z1bGwnKSwge1xuICAgICAgICAgIHJlc2V0OiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5ldmVudHMkLmVtaXQoXG4gICAgICAgICAgbmV3IE9EYXRhTW9kZWxFdmVudCgnc3luYycsIHtcbiAgICAgICAgICAgIG1vZGVsOiB0aGlzLFxuICAgICAgICAgICAgb3B0aW9uczogeyBlbnRpdHksIGFubm90cyB9LFxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZmV0Y2goe1xuICAgIC4uLm9wdGlvbnNcbiAgfTogT0RhdGFPcHRpb25zICYge1xuICAgIG9wdGlvbnM/OiBPRGF0YU9wdGlvbnM7XG4gIH0gPSB7fSk6IE9ic2VydmFibGU8dGhpcz4ge1xuICAgIGxldCByZXNvdXJjZSA9IHRoaXMucmVzb3VyY2UoKTtcbiAgICBpZiAocmVzb3VyY2UgPT09IHVuZGVmaW5lZClcbiAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcignZmV0Y2g6IFJlc291cmNlIGlzIHVuZGVmaW5lZCcpKTtcblxuICAgIGxldCBvYnMkOiBPYnNlcnZhYmxlPE9EYXRhRW50aXR5PFQ+PjtcbiAgICBpZiAocmVzb3VyY2UgaW5zdGFuY2VvZiBPRGF0YUVudGl0eVJlc291cmNlKSB7XG4gICAgICBpZiAoIXJlc291cmNlLmhhc0tleSgpKVxuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihcbiAgICAgICAgICAoKSA9PiBuZXcgRXJyb3IoXCJmZXRjaDogQ2FuJ3QgZmV0Y2ggbW9kZWwgd2l0aG91dCBrZXlcIilcbiAgICAgICAgKTtcbiAgICAgIG9icyQgPSByZXNvdXJjZS5mZXRjaChvcHRpb25zKTtcbiAgICB9IGVsc2UgaWYgKHJlc291cmNlIGluc3RhbmNlb2YgT0RhdGFOYXZpZ2F0aW9uUHJvcGVydHlSZXNvdXJjZSkge1xuICAgICAgb2JzJCA9IHJlc291cmNlLmZldGNoKHsgcmVzcG9uc2VUeXBlOiAnZW50aXR5JywgLi4ub3B0aW9ucyB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2JzJCA9IChyZXNvdXJjZSBhcyBPRGF0YVByb3BlcnR5UmVzb3VyY2U8VD4pLmZldGNoKHtcbiAgICAgICAgcmVzcG9uc2VUeXBlOiAnZW50aXR5JyxcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fcmVxdWVzdChvYnMkKTtcbiAgfVxuXG4gIHNhdmUoe1xuICAgIG1ldGhvZCxcbiAgICBuYXZpZ2F0aW9uID0gZmFsc2UsXG4gICAgdmFsaWRhdGUgPSB0cnVlLFxuICAgIC4uLm9wdGlvbnNcbiAgfTogT0RhdGFPcHRpb25zICYge1xuICAgIG1ldGhvZD86ICdjcmVhdGUnIHwgJ3VwZGF0ZScgfCAnbW9kaWZ5JztcbiAgICBuYXZpZ2F0aW9uPzogYm9vbGVhbjtcbiAgICB2YWxpZGF0ZT86IGJvb2xlYW47XG4gICAgb3B0aW9ucz86IE9EYXRhT3B0aW9ucztcbiAgfSA9IHt9KTogT2JzZXJ2YWJsZTx0aGlzPiB7XG4gICAgbGV0IHJlc291cmNlID0gdGhpcy5yZXNvdXJjZSgpO1xuICAgIGlmIChyZXNvdXJjZSA9PT0gdW5kZWZpbmVkKVxuICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKCdzYXZlOiBSZXNvdXJjZSBpcyB1bmRlZmluZWQnKSk7XG4gICAgaWYgKFxuICAgICAgIShcbiAgICAgICAgcmVzb3VyY2UgaW5zdGFuY2VvZiBPRGF0YUVudGl0eVJlc291cmNlIHx8XG4gICAgICAgIHJlc291cmNlIGluc3RhbmNlb2YgT0RhdGFOYXZpZ2F0aW9uUHJvcGVydHlSZXNvdXJjZVxuICAgICAgKVxuICAgIClcbiAgICAgIHJldHVybiB0aHJvd0Vycm9yKFxuICAgICAgICAoKSA9PlxuICAgICAgICAgIG5ldyBFcnJvcihcbiAgICAgICAgICAgICdzYXZlOiBSZXNvdXJjZSB0eXBlIE9EYXRhRW50aXR5UmVzb3VyY2UvT0RhdGFOYXZpZ2F0aW9uUHJvcGVydHlSZXNvdXJjZSBuZWVkZWQnXG4gICAgICAgICAgKVxuICAgICAgKTtcblxuICAgIC8vIFJlc29sdmUgbWV0aG9kIGFuZCByZXNvdXJjZSBrZXlcbiAgICBpZiAobWV0aG9kID09PSB1bmRlZmluZWQgJiYgdGhpcy5zY2hlbWEoKS5pc0NvbXBvdW5kS2V5KCkpXG4gICAgICByZXR1cm4gdGhyb3dFcnJvcihcbiAgICAgICAgKCkgPT5cbiAgICAgICAgICBuZXcgRXJyb3IoXG4gICAgICAgICAgICAnc2F2ZTogQ29tcG9zaXRlIGtleSByZXF1aXJlIGEgc3BlY2lmaWMgbWV0aG9kLCB1c2UgY3JlYXRlL3VwZGF0ZS9tb2RpZnknXG4gICAgICAgICAgKVxuICAgICAgKTtcbiAgICBtZXRob2QgPSBtZXRob2QgfHwgKCFyZXNvdXJjZS5oYXNLZXkoKSA/ICdjcmVhdGUnIDogJ3VwZGF0ZScpO1xuICAgIGlmIChcbiAgICAgIHJlc291cmNlIGluc3RhbmNlb2YgT0RhdGFFbnRpdHlSZXNvdXJjZSAmJlxuICAgICAgKG1ldGhvZCA9PT0gJ3VwZGF0ZScgfHwgbWV0aG9kID09PSAnbW9kaWZ5JykgJiZcbiAgICAgICFyZXNvdXJjZS5oYXNLZXkoKVxuICAgIClcbiAgICAgIHJldHVybiB0aHJvd0Vycm9yKFxuICAgICAgICAoKSA9PiBuZXcgRXJyb3IoJ3NhdmU6IFVwZGF0ZS9QYXRjaCByZXF1aXJlIGVudGl0eSBrZXknKVxuICAgICAgKTtcbiAgICBpZiAoXG4gICAgICByZXNvdXJjZSBpbnN0YW5jZW9mIE9EYXRhTmF2aWdhdGlvblByb3BlcnR5UmVzb3VyY2UgfHxcbiAgICAgIG1ldGhvZCA9PT0gJ2NyZWF0ZSdcbiAgICApXG4gICAgICByZXNvdXJjZS5jbGVhcktleSgpO1xuXG4gICAgaWYgKHZhbGlkYXRlICYmICF0aGlzLmlzVmFsaWQoeyBtZXRob2QsIG5hdmlnYXRpb24gfSkpIHtcbiAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcignc2F2ZTogVmFsaWRhdGlvbiBlcnJvcnMnKSk7XG4gICAgfVxuICAgIGNvbnN0IF9lbnRpdHkgPSB0aGlzLnRvRW50aXR5KHtcbiAgICAgIGNoYW5nZXNfb25seTogbWV0aG9kID09PSAnbW9kaWZ5JyxcbiAgICAgIGZpZWxkX21hcHBpbmc6IHRydWUsXG4gICAgICBpbmNsdWRlX2NvbmN1cnJlbmN5OiB0cnVlLFxuICAgICAgaW5jbHVkZV9uYXZpZ2F0aW9uOiBuYXZpZ2F0aW9uLFxuICAgIH0pIGFzIFQ7XG4gICAgcmV0dXJuIHRoaXMuX3JlcXVlc3QoXG4gICAgICAobWV0aG9kID09PSAnY3JlYXRlJ1xuICAgICAgICA/IHJlc291cmNlLmNyZWF0ZShfZW50aXR5LCBvcHRpb25zKVxuICAgICAgICA6IG1ldGhvZCA9PT0gJ21vZGlmeSdcbiAgICAgICAgPyByZXNvdXJjZS5tb2RpZnkoX2VudGl0eSwgeyBldGFnOiB0aGlzLmFubm90cygpLmV0YWcsIC4uLm9wdGlvbnMgfSlcbiAgICAgICAgOiByZXNvdXJjZS51cGRhdGUoX2VudGl0eSwgeyBldGFnOiB0aGlzLmFubm90cygpLmV0YWcsIC4uLm9wdGlvbnMgfSlcbiAgICAgICkucGlwZShcbiAgICAgICAgbWFwKCh7IGVudGl0eSwgYW5ub3RzIH0pID0+ICh7IGVudGl0eTogZW50aXR5IHx8IF9lbnRpdHksIGFubm90cyB9KSlcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgZGVzdHJveSh7XG4gICAgLi4ub3B0aW9uc1xuICB9OiBPRGF0YU9wdGlvbnMgJiB7XG4gICAgb3B0aW9ucz86IE9EYXRhT3B0aW9ucztcbiAgfSA9IHt9KTogT2JzZXJ2YWJsZTx0aGlzPiB7XG4gICAgbGV0IHJlc291cmNlID0gdGhpcy5yZXNvdXJjZSgpO1xuICAgIGlmIChyZXNvdXJjZSA9PT0gdW5kZWZpbmVkKVxuICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKCdkZXN0cm95OiBSZXNvdXJjZSBpcyB1bmRlZmluZWQnKSk7XG4gICAgaWYgKFxuICAgICAgIShcbiAgICAgICAgcmVzb3VyY2UgaW5zdGFuY2VvZiBPRGF0YUVudGl0eVJlc291cmNlIHx8XG4gICAgICAgIHJlc291cmNlIGluc3RhbmNlb2YgT0RhdGFOYXZpZ2F0aW9uUHJvcGVydHlSZXNvdXJjZVxuICAgICAgKVxuICAgIClcbiAgICAgIHJldHVybiB0aHJvd0Vycm9yKFxuICAgICAgICAoKSA9PlxuICAgICAgICAgIG5ldyBFcnJvcihcbiAgICAgICAgICAgICdkZXN0cm95OiBSZXNvdXJjZSB0eXBlIE9EYXRhRW50aXR5UmVzb3VyY2UvT0RhdGFOYXZpZ2F0aW9uUHJvcGVydHlSZXNvdXJjZSBuZWVkZWQnXG4gICAgICAgICAgKVxuICAgICAgKTtcbiAgICBpZiAoIXJlc291cmNlLmhhc0tleSgpKVxuICAgICAgcmV0dXJuIHRocm93RXJyb3IoXG4gICAgICAgICgpID0+IG5ldyBFcnJvcihcImRlc3Ryb3k6IENhbid0IGRlc3Ryb3kgbW9kZWwgd2l0aG91dCBrZXlcIilcbiAgICAgICk7XG5cbiAgICBjb25zdCBfZW50aXR5ID0gdGhpcy50b0VudGl0eSh7IGZpZWxkX21hcHBpbmc6IHRydWUgfSkgYXMgVDtcbiAgICBjb25zdCBvYnMkID0gcmVzb3VyY2VcbiAgICAgIC5kZXN0cm95KHsgZXRhZzogdGhpcy5hbm5vdHMoKS5ldGFnLCAuLi5vcHRpb25zIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKCh7IGVudGl0eSwgYW5ub3RzIH0pID0+ICh7IGVudGl0eTogZW50aXR5IHx8IF9lbnRpdHksIGFubm90cyB9KSlcbiAgICAgICk7XG4gICAgcmV0dXJuIHRoaXMuX3JlcXVlc3Qob2JzJCkucGlwZShcbiAgICAgIHRhcCgoKSA9PlxuICAgICAgICB0aGlzLmV2ZW50cyQuZW1pdChuZXcgT0RhdGFNb2RlbEV2ZW50KCdkZXN0cm95JywgeyBtb2RlbDogdGhpcyB9KSlcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBleGVjdXRpb24gY29udGV4dCBmb3IgY2hhbmdlIHRoZSBpbnRlcm5hbCBxdWVyeSBvZiBhIHJlc291cmNlXG4gICAqIEBwYXJhbSBmdW5jIEZ1bmN0aW9uIHRvIGV4ZWN1dGVcbiAgICovXG4gIHF1ZXJ5KGZ1bmM6IChxOiBPRGF0YVF1ZXJ5T3B0aW9uc0hhbmRsZXI8VD4pID0+IHZvaWQpIHtcbiAgICByZXR1cm4gdGhpcy5fbWV0YS5xdWVyeSh0aGlzLCB0aGlzLnJlc291cmNlKCksIGZ1bmMpIGFzIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogUGVyZm9ybSBhIGNoZWNrIG9uIHRoZSBpbnRlcm5hbCBzdGF0ZSBvZiB0aGUgbW9kZWwgYW5kIHJldHVybiB0cnVlIGlmIHRoZSBtb2RlbCBpcyBjaGFuZ2VkLlxuICAgKiBAcGFyYW0gaW5jbHVkZV9uYXZpZ2F0aW9uIENoZWNrIGluIG5hdmlnYXRpb24gcHJvcGVydGllc1xuICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBtb2RlbCBoYXMgY2hhbmdlZCwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqL1xuICBoYXNDaGFuZ2VkKHtcbiAgICBpbmNsdWRlX25hdmlnYXRpb24gPSBmYWxzZSxcbiAgfTogeyBpbmNsdWRlX25hdmlnYXRpb24/OiBib29sZWFuIH0gPSB7fSkge1xuICAgIHJldHVybiB0aGlzLl9tZXRhLmhhc0NoYW5nZWQodGhpcywgeyBpbmNsdWRlX25hdmlnYXRpb24gfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFuIGV4ZWN1dGlvbiBjb250ZXh0IGZvciBhIGdpdmVuIGZ1bmN0aW9uLCB3aGVyZSB0aGUgbW9kZWwgaXMgYm91bmQgdG8gaXRzIGVudGl0eSBlbmRwb2ludFxuICAgKiBAcGFyYW0gY3R4IENvbnRleHQgZnVuY3Rpb25cbiAgICogQHJldHVybnMgVGhlIHJlc3VsdCBvZiB0aGUgY29udGV4dFxuICAgKi9cbiAgYXNFbnRpdHk8Uj4oY3R4OiAobW9kZWw6IHRoaXMpID0+IFIpOiBSIHtcbiAgICByZXR1cm4gdGhpcy5fbWV0YS5hc0VudGl0eSh0aGlzLCBjdHgpO1xuICB9XG5cbiAgY2FsbEZ1bmN0aW9uPFAsIFI+KFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBwYXJhbXM6IFAgfCBudWxsLFxuICAgIHJlc3BvbnNlVHlwZTogJ3Byb3BlcnR5JyB8ICdtb2RlbCcgfCAnY29sbGVjdGlvbicgfCAnbm9uZScsXG4gICAgeyAuLi5vcHRpb25zIH06IHt9ICYgT0RhdGFRdWVyeUFyZ3VtZW50c09wdGlvbnM8Uj4gPSB7fVxuICApOiBPYnNlcnZhYmxlPFIgfCBPRGF0YU1vZGVsPFI+IHwgT0RhdGFDb2xsZWN0aW9uPFIsIE9EYXRhTW9kZWw8Uj4+IHwgbnVsbD4ge1xuICAgIGNvbnN0IHJlc291cmNlID0gdGhpcy5yZXNvdXJjZSgpO1xuICAgIGlmICghKHJlc291cmNlIGluc3RhbmNlb2YgT0RhdGFFbnRpdHlSZXNvdXJjZSkgfHwgIXJlc291cmNlLmhhc0tleSgpKVxuICAgICAgcmV0dXJuIHRocm93RXJyb3IoXG4gICAgICAgICgpID0+XG4gICAgICAgICAgbmV3IEVycm9yKFxuICAgICAgICAgICAgXCJjYWxsRnVuY3Rpb246IENhbid0IGNhbGwgZnVuY3Rpb24gd2l0aG91dCBPRGF0YUVudGl0eVJlc291cmNlIHdpdGgga2V5XCJcbiAgICAgICAgICApXG4gICAgICApO1xuXG4gICAgY29uc3QgZnVuYyA9IHJlc291cmNlLmZ1bmN0aW9uPFAsIFI+KG5hbWUpLnF1ZXJ5KChxKSA9PiBxLmFwcGx5KG9wdGlvbnMpKTtcbiAgICBzd2l0Y2ggKHJlc3BvbnNlVHlwZSkge1xuICAgICAgY2FzZSAncHJvcGVydHknOlxuICAgICAgICByZXR1cm4gZnVuYy5jYWxsUHJvcGVydHkocGFyYW1zLCBvcHRpb25zKTtcbiAgICAgIGNhc2UgJ21vZGVsJzpcbiAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbE1vZGVsKHBhcmFtcywgb3B0aW9ucyk7XG4gICAgICBjYXNlICdjb2xsZWN0aW9uJzpcbiAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbENvbGxlY3Rpb24ocGFyYW1zLCBvcHRpb25zKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBmdW5jLmNhbGwocGFyYW1zLCB7IHJlc3BvbnNlVHlwZSwgLi4ub3B0aW9ucyB9KTtcbiAgICB9XG4gIH1cblxuICBjYWxsQWN0aW9uPFAsIFI+KFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBwYXJhbXM6IFAgfCBudWxsLFxuICAgIHJlc3BvbnNlVHlwZTogJ3Byb3BlcnR5JyB8ICdtb2RlbCcgfCAnY29sbGVjdGlvbicgfCAnbm9uZScsXG4gICAgeyAuLi5vcHRpb25zIH06IHt9ICYgT0RhdGFRdWVyeUFyZ3VtZW50c09wdGlvbnM8Uj4gPSB7fVxuICApOiBPYnNlcnZhYmxlPFIgfCBPRGF0YU1vZGVsPFI+IHwgT0RhdGFDb2xsZWN0aW9uPFIsIE9EYXRhTW9kZWw8Uj4+IHwgbnVsbD4ge1xuICAgIGNvbnN0IHJlc291cmNlID0gdGhpcy5yZXNvdXJjZSgpO1xuICAgIGlmICghKHJlc291cmNlIGluc3RhbmNlb2YgT0RhdGFFbnRpdHlSZXNvdXJjZSkgfHwgIXJlc291cmNlLmhhc0tleSgpKVxuICAgICAgcmV0dXJuIHRocm93RXJyb3IoXG4gICAgICAgICgpID0+XG4gICAgICAgICAgbmV3IEVycm9yKFxuICAgICAgICAgICAgXCJjYWxsQWN0aW9uOiBDYW4ndCBjYWxsIGFjdGlvbiB3aXRob3V0IE9EYXRhRW50aXR5UmVzb3VyY2Ugd2l0aCBrZXlcIlxuICAgICAgICAgIClcbiAgICAgICk7XG5cbiAgICBjb25zdCBhY3Rpb24gPSByZXNvdXJjZS5hY3Rpb248UCwgUj4obmFtZSkucXVlcnkoKHEpID0+IHEuYXBwbHkob3B0aW9ucykpO1xuICAgIHN3aXRjaCAocmVzcG9uc2VUeXBlKSB7XG4gICAgICBjYXNlICdwcm9wZXJ0eSc6XG4gICAgICAgIHJldHVybiBhY3Rpb24uY2FsbFByb3BlcnR5KHBhcmFtcywgb3B0aW9ucyk7XG4gICAgICBjYXNlICdtb2RlbCc6XG4gICAgICAgIHJldHVybiBhY3Rpb24uY2FsbE1vZGVsKHBhcmFtcywgb3B0aW9ucyk7XG4gICAgICBjYXNlICdjb2xsZWN0aW9uJzpcbiAgICAgICAgcmV0dXJuIGFjdGlvbi5jYWxsQ29sbGVjdGlvbihwYXJhbXMsIG9wdGlvbnMpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGFjdGlvbi5jYWxsKHBhcmFtcywgeyByZXNwb25zZVR5cGUsIC4uLm9wdGlvbnMgfSk7XG4gICAgfVxuICB9XG5cbiAgLy8gQ2FzdFxuICBjYXN0PFM+KHR5cGU6IHN0cmluZyk6IE9EYXRhTW9kZWw8Uz4ge1xuICAgIGNvbnN0IHJlc291cmNlID0gdGhpcy5yZXNvdXJjZSgpO1xuICAgIGlmICghKHJlc291cmNlIGluc3RhbmNlb2YgT0RhdGFFbnRpdHlSZXNvdXJjZSkpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBjYXN0OiBDYW4ndCBjYXN0IHRvIGRlcml2ZWQgbW9kZWwgd2l0aG91dCBPRGF0YUVudGl0eVJlc291cmNlYFxuICAgICAgKTtcblxuICAgIHJldHVybiByZXNvdXJjZVxuICAgICAgLmNhc3Q8Uz4odHlwZSlcbiAgICAgIC5hc01vZGVsKHRoaXMudG9FbnRpdHkoSU5DTFVERV9ERUVQKSwgeyBhbm5vdHM6IHRoaXMuYW5ub3RzKCkgfSk7XG4gIH1cblxuICBmZXRjaE5hdmlnYXRpb25Qcm9wZXJ0eTxTPihcbiAgICBuYW1lOiBrZXlvZiBUIHwgc3RyaW5nLFxuICAgIHJlc3BvbnNlVHlwZTogJ21vZGVsJyB8ICdjb2xsZWN0aW9uJyxcbiAgICB7IC4uLm9wdGlvbnMgfToge30gJiBPRGF0YVF1ZXJ5QXJndW1lbnRzT3B0aW9uczxTPiA9IHt9XG4gICk6IE9ic2VydmFibGU8T0RhdGFNb2RlbDxTPiB8IE9EYXRhQ29sbGVjdGlvbjxTLCBPRGF0YU1vZGVsPFM+PiB8IG51bGw+IHtcbiAgICBjb25zdCBuYXYgPSB0aGlzLm5hdmlnYXRpb25Qcm9wZXJ0eTxTPihcbiAgICAgIG5hbWVcbiAgICApIGFzIE9EYXRhTmF2aWdhdGlvblByb3BlcnR5UmVzb3VyY2U8Uz47XG4gICAgbmF2LnF1ZXJ5KChxKSA9PiBxLmFwcGx5KG9wdGlvbnMpKTtcbiAgICBzd2l0Y2ggKHJlc3BvbnNlVHlwZSkge1xuICAgICAgY2FzZSAnbW9kZWwnOlxuICAgICAgICByZXR1cm4gbmF2LmZldGNoTW9kZWwob3B0aW9ucyk7XG4gICAgICBjYXNlICdjb2xsZWN0aW9uJzpcbiAgICAgICAgcmV0dXJuIG5hdi5mZXRjaENvbGxlY3Rpb24ob3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgLy8gR2V0IFZhbHVlXG4gIGdldFZhbHVlPFA+KFxuICAgIG5hbWU6IGtleW9mIFQgfCBzdHJpbmcsXG4gICAgb3B0aW9ucz86IE9EYXRhT3B0aW9uc1xuICApOiBPYnNlcnZhYmxlPFAgfCBPRGF0YU1vZGVsPFA+IHwgT0RhdGFDb2xsZWN0aW9uPFAsIE9EYXRhTW9kZWw8UD4+IHwgbnVsbD4ge1xuICAgIGNvbnN0IGZpZWxkID0gdGhpcy5fbWV0YS5maWVsZChuYW1lKTtcbiAgICBpZiAoZmllbGQgPT09IHVuZGVmaW5lZCB8fCBmaWVsZC5uYXZpZ2F0aW9uKVxuICAgICAgdGhyb3cgRXJyb3IoYGdldFZhbHVlOiBDYW4ndCBmaW5kIHByb3BlcnR5ICR7bmFtZX1gKTtcblxuICAgIGxldCB2YWx1ZSA9ICh0aGlzIGFzIGFueSlbbmFtZV0gYXNcbiAgICAgIHwgUFxuICAgICAgfCBPRGF0YU1vZGVsPFA+XG4gICAgICB8IE9EYXRhQ29sbGVjdGlvbjxQLCBPRGF0YU1vZGVsPFA+PjtcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgcHJvcCA9IGZpZWxkLnJlc291cmNlRmFjdG9yeShcbiAgICAgICAgdGhpcy5yZXNvdXJjZSgpXG4gICAgICApIGFzIE9EYXRhUHJvcGVydHlSZXNvdXJjZTxQPjtcbiAgICAgIHJldHVybiBmaWVsZC5jb2xsZWN0aW9uXG4gICAgICAgID8gcHJvcFxuICAgICAgICAgICAgLmZldGNoQ29sbGVjdGlvbihvcHRpb25zKVxuICAgICAgICAgICAgLnBpcGUodGFwKChjKSA9PiB0aGlzLmFzc2lnbih7IFtuYW1lXTogYyB9LCB7IHNpbGVudDogdHJ1ZSB9KSkpXG4gICAgICAgIDogZmllbGQuaXNTdHJ1Y3R1cmVkVHlwZSgpXG4gICAgICAgID8gcHJvcFxuICAgICAgICAgICAgLmZldGNoTW9kZWwob3B0aW9ucylcbiAgICAgICAgICAgIC5waXBlKHRhcCgoYykgPT4gdGhpcy5hc3NpZ24oeyBbbmFtZV06IGMgfSwgeyBzaWxlbnQ6IHRydWUgfSkpKVxuICAgICAgICA6IHByb3BcbiAgICAgICAgICAgIC5mZXRjaFByb3BlcnR5KG9wdGlvbnMpXG4gICAgICAgICAgICAucGlwZSh0YXAoKGMpID0+IHRoaXMuYXNzaWduKHsgW25hbWVdOiBjIH0sIHsgc2lsZW50OiB0cnVlIH0pKSk7XG4gICAgfVxuICAgIHJldHVybiBvZih2YWx1ZSBhcyBQKTtcbiAgfVxuXG4gIC8vIFNldCBSZWZlcmVuY2VcbiAgc2V0UmVmZXJlbmNlPE4+KFxuICAgIG5hbWU6IGtleW9mIFQgfCBzdHJpbmcsXG4gICAgbW9kZWw6IE9EYXRhTW9kZWw8Tj4gfCBPRGF0YUNvbGxlY3Rpb248TiwgT0RhdGFNb2RlbDxOPj4gfCBudWxsLFxuICAgIG9wdGlvbnM/OiBPRGF0YU9wdGlvbnNcbiAgKTogT2JzZXJ2YWJsZTx0aGlzPiB7XG4gICAgY29uc3QgcmVmZXJlbmNlID0gKFxuICAgICAgdGhpcy5uYXZpZ2F0aW9uUHJvcGVydHk8Tj4obmFtZSkgYXMgT0RhdGFOYXZpZ2F0aW9uUHJvcGVydHlSZXNvdXJjZTxOPlxuICAgICkucmVmZXJlbmNlKCk7XG5cbiAgICBjb25zdCBldGFnID0gdGhpcy5hbm5vdHMoKS5ldGFnO1xuICAgIGxldCBvYnMkID0gTkVWRVIgYXMgT2JzZXJ2YWJsZTxhbnk+O1xuICAgIGlmIChtb2RlbCBpbnN0YW5jZW9mIE9EYXRhTW9kZWwpIHtcbiAgICAgIG9icyQgPSByZWZlcmVuY2Uuc2V0KFxuICAgICAgICBtb2RlbC5fbWV0YS5lbnRpdHlSZXNvdXJjZShtb2RlbCkgYXMgT0RhdGFFbnRpdHlSZXNvdXJjZTxOPixcbiAgICAgICAgeyBldGFnLCAuLi5vcHRpb25zIH1cbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChtb2RlbCBpbnN0YW5jZW9mIE9EYXRhQ29sbGVjdGlvbikge1xuICAgICAgb2JzJCA9IGZvcmtKb2luKFxuICAgICAgICBtb2RlbFxuICAgICAgICAgIC5tb2RlbHMoKVxuICAgICAgICAgIC5tYXAoKG0pID0+XG4gICAgICAgICAgICByZWZlcmVuY2UuYWRkKFxuICAgICAgICAgICAgICBtLl9tZXRhLmVudGl0eVJlc291cmNlKG0pIGFzIE9EYXRhRW50aXR5UmVzb3VyY2U8Tj4sXG4gICAgICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAobW9kZWwgPT09IG51bGwpIHtcbiAgICAgIG9icyQgPSByZWZlcmVuY2UudW5zZXQoeyBldGFnLCAuLi5vcHRpb25zIH0pO1xuICAgIH1cbiAgICB0aGlzLmV2ZW50cyQuZW1pdChcbiAgICAgIG5ldyBPRGF0YU1vZGVsRXZlbnQoJ3JlcXVlc3QnLCB7XG4gICAgICAgIG1vZGVsOiB0aGlzLFxuICAgICAgICBvcHRpb25zOiB7IG9ic2VydmFibGU6IG9icyQgfSxcbiAgICAgIH0pXG4gICAgKTtcbiAgICByZXR1cm4gb2JzJC5waXBlKFxuICAgICAgbWFwKChtb2RlbCkgPT4ge1xuICAgICAgICB0aGlzLmFzc2lnbih7IFtuYW1lXTogbW9kZWwgfSk7XG4gICAgICAgIHRoaXMuZXZlbnRzJC5lbWl0KG5ldyBPRGF0YU1vZGVsRXZlbnQoJ3N5bmMnLCB7IG1vZGVsOiB0aGlzIH0pKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRSZWZlcmVuY2U8UD4oXG4gICAgbmFtZToga2V5b2YgVCB8IHN0cmluZ1xuICApOiBPRGF0YU1vZGVsPFA+IHwgT0RhdGFDb2xsZWN0aW9uPFAsIE9EYXRhTW9kZWw8UD4+IHtcbiAgICBjb25zdCBmaWVsZCA9IHRoaXMuX21ldGEuZmllbGQobmFtZSk7XG4gICAgaWYgKGZpZWxkID09PSB1bmRlZmluZWQgfHwgIWZpZWxkLm5hdmlnYXRpb24pXG4gICAgICB0aHJvdyBFcnJvcihgZ2V0UmVmZXJlbmNlOiBDYW4ndCBmaW5kIG5hdmlnYXRpb24gcHJvcGVydHkgJHtuYW1lfWApO1xuXG4gICAgbGV0IG1vZGVsID0gKHRoaXMgYXMgYW55KVtuYW1lXSBhc1xuICAgICAgfCBPRGF0YU1vZGVsPFA+XG4gICAgICB8IE9EYXRhQ29sbGVjdGlvbjxQLCBPRGF0YU1vZGVsPFA+PjtcbiAgICBpZiAobW9kZWwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgdmFsdWUgPSBmaWVsZC5jb2xsZWN0aW9uID8gW10gOiB0aGlzLnJlZmVyZW5jZWQoZmllbGQpO1xuICAgICAgbW9kZWwgPSBmaWVsZC5tb2RlbENvbGxlY3Rpb25GYWN0b3J5PFQsIFA+KHsgcGFyZW50OiB0aGlzLCB2YWx1ZSB9KTtcbiAgICAgICh0aGlzIGFzIGFueSlbbmFtZV0gPSBtb2RlbDtcbiAgICB9XG4gICAgcmV0dXJuIG1vZGVsO1xuICB9XG5cbiAgLy8gTW9kZWwgZnVuY3Rpb25zXG4gIGVxdWFscyhvdGhlcjogT0RhdGFNb2RlbDxUPikge1xuICAgIGNvbnN0IHRoaXNLZXkgPSB0aGlzLmtleSgpO1xuICAgIGNvbnN0IG90aGVyS2V5ID0gb3RoZXIua2V5KCk7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMgPT09IG90aGVyIHx8XG4gICAgICAodHlwZW9mIHRoaXMgPT09IHR5cGVvZiBvdGhlciAmJlxuICAgICAgICAoKDxhbnk+dGhpcylbdGhpcy5fbWV0YS5jaWRdID09PSAoPGFueT5vdGhlcilbdGhpcy5fbWV0YS5jaWRdIHx8XG4gICAgICAgICAgKHRoaXNLZXkgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgb3RoZXJLZXkgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgVHlwZXMuaXNFcXVhbCh0aGlzS2V5LCBvdGhlcktleSkpKSlcbiAgICApO1xuICB9XG5cbiAgZ2V0IFtTeW1ib2wudG9TdHJpbmdUYWddKCkge1xuICAgIHJldHVybiAnTW9kZWwnO1xuICB9XG5cbiAgY29sbGVjdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5fcGFyZW50ICE9PSBudWxsICYmXG4gICAgICBPRGF0YU1vZGVsT3B0aW9ucy5pc0NvbGxlY3Rpb24odGhpcy5fcGFyZW50WzBdKVxuICAgICAgPyAodGhpcy5fcGFyZW50WzBdIGFzIE9EYXRhQ29sbGVjdGlvbjxULCBPRGF0YU1vZGVsPFQ+PilcbiAgICAgIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgbmV4dCgpOiBPRGF0YU1vZGVsPFQ+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5jb2xsZWN0aW9uKCk/Lm5leHQodGhpcyk7XG4gIH1cblxuICBwcmV2KCk6IE9EYXRhTW9kZWw8VD4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmNvbGxlY3Rpb24oKT8ucHJldih0aGlzKTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgUkVTRVJWRURfRklFTERfTkFNRVMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhcbiAgT0RhdGFNb2RlbC5wcm90b3R5cGVcbik7XG4iXX0=
|
|
464
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLW9kYXRhL3NyYy9saWIvbW9kZWxzL21vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQWMsRUFBRSxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuRSxPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFDLE9BQU8sRUFJTCxtQkFBbUIsRUFDbkIsK0JBQStCLEdBT2hDLE1BQU0sY0FBYyxDQUFDO0FBRXRCLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQy9DLE9BQU8sRUFDTCxZQUFZLEVBQ1osZUFBZSxFQUVmLGVBQWUsRUFFZixpQkFBaUIsR0FFbEIsTUFBTSxXQUFXLENBQUM7QUFFbkIsV0FBVztBQUNYLE1BQU0sT0FBTyxVQUFVO0lBc0RyQixZQUNFLE9BQTZDLEVBQUUsRUFDL0MsRUFDRSxNQUFNLEVBQ04sUUFBUSxFQUNSLE1BQU0sRUFDTixLQUFLLEdBQUcsS0FBSyxNQVNYLEVBQUU7UUFyQ1IsU0FBUztRQUNULFlBQU8sR0FLSSxJQUFJLENBQUM7UUFDaEIsZ0JBQVcsR0FBcUIsSUFBSSxHQUFHLEVBQWUsQ0FBQztRQUN2RCxhQUFRLEdBQXFCLElBQUksR0FBRyxFQUFlLENBQUM7UUFDcEQsZUFBVSxHQUF5QyxJQUFJLEdBQUcsRUFHdkQsQ0FBQztRQUNKLGNBQVMsR0FBNEIsSUFBSSxDQUFDO1FBRTFDLFdBQU0sR0FBWSxLQUFLLENBQUM7UUFDeEIsY0FBUyxHQUFZLEtBQUssQ0FBQztRQUMzQixZQUFP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QUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDL0MsQ0FBQyxDQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUF1QztZQUN4RCxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ2hCLENBQUM7SUFFRCxJQUFJO1FBQ0YsT0FBTyxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxJQUFJO1FBQ0YsT0FBTyxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7Q0FDRjtBQUVELE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FDNUQsVUFBVSxDQUFDLFNBQVMsQ0FDckIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZm9ya0pvaW4sIE5FVkVSLCBPYnNlcnZhYmxlLCBvZiwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICBFbnRpdHlLZXksXG4gIE9EYXRhRW50aXR5LFxuICBPRGF0YUVudGl0eUFubm90YXRpb25zLFxuICBPRGF0YUVudGl0eVJlc291cmNlLFxuICBPRGF0YU5hdmlnYXRpb25Qcm9wZXJ0eVJlc291cmNlLFxuICBPRGF0YU9wdGlvbnMsXG4gIE9EYXRhUHJvcGVydHlSZXNvdXJjZSxcbiAgT0RhdGFRdWVyeUFyZ3VtZW50c09wdGlvbnMsXG4gIE9EYXRhUXVlcnlPcHRpb25zSGFuZGxlcixcbiAgT0RhdGFSZXNvdXJjZSxcbiAgT0RhdGFTaW5nbGV0b25SZXNvdXJjZSxcbn0gZnJvbSAnLi4vcmVzb3VyY2VzJztcbmltcG9ydCB7IE9EYXRhU3RydWN0dXJlZFR5cGUgfSBmcm9tICcuLi9zY2hlbWEnO1xuaW1wb3J0IHsgT2JqZWN0cywgU3RyaW5ncywgVHlwZXMgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBPRGF0YUNvbGxlY3Rpb24gfSBmcm9tICcuL2NvbGxlY3Rpb24nO1xuaW1wb3J0IHtcbiAgSU5DTFVERV9ERUVQLFxuICBJTkNMVURFX1NIQUxMT1csXG4gIE1vZGVsT3B0aW9ucyxcbiAgT0RhdGFNb2RlbEV2ZW50LFxuICBPRGF0YU1vZGVsRmllbGQsXG4gIE9EYXRhTW9kZWxPcHRpb25zLFxuICBPRGF0YU1vZGVsUmVsYXRpb24sXG59IGZyb20gJy4vb3B0aW9ucyc7XG5cbi8vIEBkeW5hbWljXG5leHBvcnQgY2xhc3MgT0RhdGFNb2RlbDxUPiB7XG4gIC8vIFByb3BlcnRpZXNcbiAgc3RhdGljIG9wdGlvbnM6IE1vZGVsT3B0aW9ucztcbiAgc3RhdGljIG1ldGE6IE9EYXRhTW9kZWxPcHRpb25zPGFueT47XG4gIHN0YXRpYyBidWlsZE1ldGE8VD4oe1xuICAgIG9wdGlvbnMsXG4gICAgc2NoZW1hLFxuICB9OiB7XG4gICAgb3B0aW9ucz86IE1vZGVsT3B0aW9ucztcbiAgICBzY2hlbWE6IE9EYXRhU3RydWN0dXJlZFR5cGU8VD47XG4gIH0pIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBsZXQgZmllbGRzID0gc2NoZW1hXG4gICAgICAgIC5maWVsZHMoeyBpbmNsdWRlX25hdmlnYXRpb246IHRydWUsIGluY2x1ZGVfcGFyZW50czogdHJ1ZSB9KVxuICAgICAgICAucmVkdWNlKChhY2MsIGYpID0+IHtcbiAgICAgICAgICBsZXQgbmFtZSA9IGYubmFtZTtcbiAgICAgICAgICAvLyBQcmV2ZW50IGNvbGxpc2lvbiB3aXRoIHJlc2VydmVkIGtleXdvcmRzXG4gICAgICAgICAgd2hpbGUgKFJFU0VSVkVEX0ZJRUxEX05BTUVTLmluY2x1ZGVzKG5hbWUpKSB7XG4gICAgICAgICAgICBuYW1lID0gbmFtZSArICdfJztcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oYWNjLCB7XG4gICAgICAgICAgICBbbmFtZV06IHtcbiAgICAgICAgICAgICAgZmllbGQ6IGYubmFtZSxcbiAgICAgICAgICAgICAgZGVmYXVsdDogZi5kZWZhdWx0LFxuICAgICAgICAgICAgICByZXF1aXJlZDogIWYubnVsbGFibGUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9LCB7fSk7XG4gICAgICBvcHRpb25zID0geyBmaWVsZHMgfTtcbiAgICB9XG4gICAgdGhpcy5tZXRhID0gbmV3IE9EYXRhTW9kZWxPcHRpb25zPFQ+KHsgb3B0aW9ucywgc2NoZW1hIH0pO1xuICB9XG4gIC8vIFBhcmVudFxuICBfcGFyZW50OlxuICAgIHwgW1xuICAgICAgICBPRGF0YU1vZGVsPGFueT4gfCBPRGF0YUNvbGxlY3Rpb248YW55LCBPRGF0YU1vZGVsPGFueT4+LFxuICAgICAgICBPRGF0YU1vZGVsRmllbGQ8YW55PiB8IG51bGxcbiAgICAgIF1cbiAgICB8IG51bGwgPSBudWxsO1xuICBfYXR0cmlidXRlczogTWFwPHN0cmluZywgYW55PiA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XG4gIF9jaGFuZ2VzOiBNYXA8c3RyaW5nLCBhbnk+ID0gbmV3IE1hcDxzdHJpbmcsIGFueT4oKTtcbiAgX3JlbGF0aW9uczogTWFwPHN0cmluZywgT0RhdGFNb2RlbFJlbGF0aW9uPGFueT4+ID0gbmV3IE1hcDxcbiAgICBzdHJpbmcsXG4gICAgT0RhdGFNb2RlbFJlbGF0aW9uPGFueT5cbiAgPigpO1xuICBfcmVzb3VyY2U6IE9EYXRhUmVzb3VyY2U8VD4gfCBudWxsID0gbnVsbDtcbiAgX2Fubm90YXRpb25zITogT0RhdGFFbnRpdHlBbm5vdGF0aW9ucztcbiAgX3Jlc2V0OiBib29sZWFuID0gZmFsc2U7XG4gIF9yZXBhcmVudDogYm9vbGVhbiA9IGZhbHNlO1xuICBfc2lsZW50OiBib29sZWFuID0gZmFsc2U7XG4gIF9tZXRhOiBPRGF0YU1vZGVsT3B0aW9uczxUPjtcbiAgLy8gRXZlbnRzXG4gIGV2ZW50cyQgPSBuZXcgRXZlbnRFbWl0dGVyPE9EYXRhTW9kZWxFdmVudDxUPj4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBkYXRhOiBQYXJ0aWFsPFQ+IHwgeyBbbmFtZTogc3RyaW5nXTogYW55IH0gPSB7fSxcbiAgICB7XG4gICAgICBwYXJlbnQsXG4gICAgICByZXNvdXJjZSxcbiAgICAgIGFubm90cyxcbiAgICAgIHJlc2V0ID0gZmFsc2UsXG4gICAgfToge1xuICAgICAgcGFyZW50PzogW1xuICAgICAgICBPRGF0YU1vZGVsPGFueT4gfCBPRGF0YUNvbGxlY3Rpb248YW55LCBPRGF0YU1vZGVsPGFueT4+LFxuICAgICAgICBPRGF0YU1vZGVsRmllbGQ8YW55PiB8IG51bGxcbiAgICAgIF07XG4gICAgICByZXNvdXJjZT86IE9EYXRhUmVzb3VyY2U8VD47XG4gICAgICBhbm5vdHM/OiBPRGF0YUVudGl0eUFubm90YXRpb25zO1xuICAgICAgcmVzZXQ/OiBib29sZWFuO1xuICAgIH0gPSB7fVxuICApIHtcbiAgICBjb25zdCBLbGFzcyA9IHRoaXMuY29uc3RydWN0b3IgYXMgdHlwZW9mIE9EYXRhTW9kZWw7XG4gICAgaWYgKEtsYXNzLm1ldGEgPT09IHVuZGVmaW5lZClcbiAgICAgIHRocm93IG5ldyBFcnJvcihgT0RhdGFNb2RlbDogQ2FuJ3QgY3JlYXRlIG1vZGVsIHdpdGhvdXQgbWV0YWRhdGFgKTtcbiAgICB0aGlzLl9tZXRhID0gS2xhc3MubWV0YTtcbiAgICB0aGlzLl9tZXRhLmJpbmQodGhpcywgeyBwYXJlbnQsIHJlc291cmNlLCBhbm5vdHMgfSk7XG5cbiAgICAvLyBDbGllbnQgSWRcbiAgICAoPGFueT50aGlzKVt0aGlzLl9tZXRhLmNpZF0gPVxuICAgICAgKDxhbnk+ZGF0YSlbdGhpcy5fbWV0YS5jaWRdIHx8XG4gICAgICBTdHJpbmdzLnVuaXF1ZUlkKGAke0tsYXNzLm1ldGEuc2NoZW1hLm5hbWUudG9Mb3dlckNhc2UoKX0tYCk7XG5cbiAgICBsZXQgYXR0cnMgPSB0aGlzLmFubm90cygpLmF0dHJpYnV0ZXM8VD4oZGF0YSwgJ2Z1bGwnKTtcbiAgICBsZXQgZGVmYXVsdHMgPSB0aGlzLmRlZmF1bHRzKCk7XG5cbiAgICB0aGlzLmFzc2lnbihPYmplY3RzLm1lcmdlKGRlZmF1bHRzLCBhdHRycyksIHsgcmVzZXQgfSk7XG4gIH1cblxuICAvLyNyZWdpb24gUmVzb3VyY2VzXG4gIHJlc291cmNlKCk6XG4gICAgfCBPRGF0YUVudGl0eVJlc291cmNlPFQ+XG4gICAgfCBPRGF0YU5hdmlnYXRpb25Qcm9wZXJ0eVJlc291cmNlPFQ+XG4gICAgfCBPRGF0YVByb3BlcnR5UmVzb3VyY2U8VD5cbiAgICB8IE9EYXRhU2luZ2xldG9uUmVzb3VyY2U8VD4ge1xuICAgIHJldHVybiBPRGF0YU1vZGVsT3B0aW9ucy5yZXNvdXJjZTxUPih0aGlzKSBhc1xuICAgICAgfCBPRGF0YUVudGl0eVJlc291cmNlPFQ+XG4gICAgICB8IE9EYXRhTmF2aWdhdGlvblByb3BlcnR5UmVzb3VyY2U8VD5cbiAgICAgIHwgT0RhdGFQcm9wZXJ0eVJlc291cmNlPFQ+XG4gICAgICB8IE9EYXRhU2luZ2xldG9uUmVzb3VyY2U8VD47XG4gIH1cblxuICBuYXZpZ2F0aW9uUHJvcGVydHk8Tj4oXG4gICAgbmFtZToga2V5b2YgVCB8IHN0cmluZ1xuICApOiBPRGF0YU5hdmlnYXRpb25Qcm9wZXJ0eVJlc291cmNlPE4+IHtcbiAgICBjb25zdCBmaWVsZCA9IHRoaXMuX21ldGEuZmllbGQobmFtZSk7XG4gICAgaWYgKGZpZWxkID09PSB1bmRlZmluZWQgfHwgIWZpZWxkLm5hdmlnYXRpb24pXG4gICAgICB0aHJvdyBFcnJvcihgbmF2aWdhdGlvblByb3BlcnR5OiBDYW4ndCBmaW5kIG5hdmlnYXRpb24gcHJvcGVydHkgJHtuYW1lfWApO1xuXG4gICAgY29uc3QgcmVzb3VyY2UgPSB0aGlzLnJlc291cmNlKCk7XG4gICAgaWYgKCEocmVzb3VyY2UgaW5zdGFuY2VvZiBPRGF0YUVudGl0eVJlc291cmNlKSB8fCAhcmVzb3VyY2UuaGFzS2V5KCkpXG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgXCJuYXZpZ2F0aW9uUHJvcGVydHk6IENhbid0IGdldCBuYXZpZ2F0aW9uIHdpdGhvdXQgT0RhdGFFbnRpdHlSZXNvdXJjZSB3aXRoIGtleVwiXG4gICAgICApO1xuXG4gICAgcmV0dXJuIGZpZWxkLnJlc291cmNlRmFjdG9yeTxULCBOPihcbiAgICAgIHJlc291cmNlXG4gICAgKSBhcyBPRGF0YU5hdmlnYXRpb25Qcm9wZXJ0eVJlc291cmNlPE4+O1xuICB9XG5cbiAgcHJvcGVydHk8Tj4obmFtZTogc3RyaW5nKTogT0RhdGFQcm9wZXJ0eVJlc291cmNlPE4+IHtcbiAgICBjb25zdCBmaWVsZCA9IHRoaXMuX21ldGEuZmllbGQobmFtZSk7XG4gICAgaWYgKGZpZWxkID09PSB1bmRlZmluZWQgfHwgZmllbGQubmF2aWdhdGlvbilcbiAgICAgIHRocm93IEVycm9yKGBwcm9wZXJ0eTogQ2FuJ3QgZmluZCBwcm9wZXJ0eSAke25hbWV9YCk7XG5cbiAgICBjb25zdCByZXNvdXJjZSA9IHRoaXMucmVzb3VyY2UoKTtcbiAgICBpZiAoIShyZXNvdXJjZSBpbnN0YW5jZW9mIE9EYXRhRW50aXR5UmVzb3VyY2UpIHx8ICFyZXNvdXJjZS5oYXNLZXkoKSlcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICBcInByb3BlcnR5OiBDYW4ndCBnZXQgcHJvcGVydHkgd2l0aG91dCBPRGF0YUVudGl0eVJlc291cmNlIHdpdGgga2V5XCJcbiAgICAgICk7XG5cbiAgICByZXR1cm4gZmllbGQucmVzb3VyY2VGYWN0b3J5PFQsIE4+KHJlc291cmNlKSBhcyBPRGF0YVByb3BlcnR5UmVzb3VyY2U8Tj47XG4gIH1cblxuICBhdHRhY2g8Uj4oXG4gICAgcmVzb3VyY2U6XG4gICAgICB8IE9EYXRhRW50aXR5UmVzb3VyY2U8Uj5cbiAgICAgIHwgT0RhdGFOYXZpZ2F0aW9uUHJvcGVydHlSZXNvdXJjZTxSPlxuICAgICAgfCBPRGF0YVByb3BlcnR5UmVzb3VyY2U8Uj5cbiAgICAgIHwgT0RhdGFTaW5nbGV0b25SZXNvdXJjZTxSPlxuICApIHtcbiAgICByZXR1cm4gdGhpcy5fbWV0YS5hdHRhY2g8Uj4odGhpcywgcmVzb3VyY2UpO1xuICB9XG4gIC8vI2VuZHJlZ2lvblxuXG4gIHNjaGVtYSgpIHtcbiAgICByZXR1cm4gdGhpcy5fbWV0YS5zY2hlbWE7XG4gIH1cblxuICBhbm5vdHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Fubm90YXRpb25zO1xuICB9XG5cbiAga2V5KHtcbiAgICBmaWVsZF9tYXBwaW5nID0gZmFsc2UsXG4gICAgcmVzb2x2ZSA9IHRydWUsXG4gIH06IHsgZmllbGRfbWFwcGluZz86IGJvb2xlYW47IHJlc29sdmU/OiBib29sZWFuIH0gPSB7fSk6XG4gICAgfCBFbnRpdHlLZXk8VD5cbiAgICB8IHsgW25hbWU6IHN0cmluZ106IGFueSB9XG4gICAgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9tZXRhLnJlc29sdmVLZXkodGhpcywgeyBmaWVsZF9tYXBwaW5nLCByZXNvbHZlIH0pO1xuICB9XG5cbiAgaXNOZXcoKSB7XG4gICAgcmV0dXJuIHRoaXMua2V5KCkgPT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlzUGFyZW50T2YoXG4gICAgY2hpbGQ6IE9EYXRhTW9kZWw8YW55PiB8IE9EYXRhQ29sbGVjdGlvbjxhbnksIE9EYXRhTW9kZWw8YW55Pj5cbiAgKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIGNoaWxkICE9PSB0aGlzICYmXG4gICAgICBPRGF0YU1vZGVsT3B0aW9ucy5jaGFpbihjaGlsZCkuc29tZSgocCkgPT4gcFswXSA9PT0gdGhpcylcbiAgICApO1xuICB9XG5cbiAgcmVmZXJlbnRpYWwoXG4gICAgZmllbGQ6IE9EYXRhTW9kZWxGaWVsZDxhbnk+LFxuICAgIHtcbiAgICAgIGZpZWxkX21hcHBpbmcgPSBmYWxzZSxcbiAgICAgIHJlc29sdmUgPSB0cnVlLFxuICAgIH06IHsgZmllbGRfbWFwcGluZz86IGJvb2xlYW47IHJlc29sdmU/OiBib29sZWFuIH0gPSB7fVxuICApOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSB8IG51bGwgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9tZXRhLnJlc29sdmVSZWZlcmVudGlhbCh0aGlzLCBmaWVsZCwge1xuICAgICAgZmllbGRfbWFwcGluZyxcbiAgICAgIHJlc29sdmUsXG4gICAgfSk7XG4gIH1cblxuICByZWZlcmVuY2VkKFxuICAgIGZpZWxkOiBPRGF0YU1vZGVsRmllbGQ8YW55PixcbiAgICB7XG4gICAgICBmaWVsZF9tYXBwaW5nID0gZmFsc2UsXG4gICAgICByZXNvbHZlID0gdHJ1ZSxcbiAgICB9OiB7IGZpZWxkX21hcHBpbmc/OiBib29sZWFuOyByZXNvbHZlPzogYm9vbGVhbiB9ID0ge31cbiAgKTogeyBbbmFtZTogc3RyaW5nXTogYW55IH0gfCBudWxsIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fbWV0YS5yZXNvbHZlUmVmZXJlbmNlZCh0aGlzLCBmaWVsZCwge1xuICAgICAgZmllbGRfbWFwcGluZyxcbiAgICAgIHJlc29sdmUsXG4gICAgfSk7XG4gIH1cblxuICAvLyBWYWxpZGF0aW9uXG4gIF9lcnJvcnM/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9O1xuICB2YWxpZGF0ZSh7XG4gICAgbWV0aG9kLFxuICAgIG5hdmlnYXRpb24gPSBmYWxzZSxcbiAgfToge1xuICAgIG1ldGhvZD86ICdjcmVhdGUnIHwgJ3VwZGF0ZScgfCAnbW9kaWZ5JztcbiAgICBuYXZpZ2F0aW9uPzogYm9vbGVhbjtcbiAgfSA9IHt9KSB7XG4gICAgcmV0dXJuIHRoaXMuX21ldGEudmFsaWRhdGUodGhpcywgeyBtZXRob2QsIG5hdmlnYXRpb24gfSk7XG4gIH1cblxuICBpc1ZhbGlkKHtcbiAgICBtZXRob2QsXG4gICAgbmF2aWdhdGlvbiA9IGZhbHNlLFxuICB9OiB7XG4gICAgbWV0aG9kPzogJ2NyZWF0ZScgfCAndXBkYXRlJyB8ICdtb2RpZnknO1xuICAgIG5hdmlnYXRpb24/OiBib29sZWFuO1xuICB9ID0ge30pOiBib29sZWFuIHtcbiAgICB0aGlzLl9lcnJvcnMgPSB0aGlzLnZhbGlkYXRlKHsgbWV0aG9kLCBuYXZpZ2F0aW9uIH0pO1xuICAgIGlmICh0aGlzLl9lcnJvcnMgIT09IHVuZGVmaW5lZClcbiAgICAgIHRoaXMuZXZlbnRzJC5lbWl0KFxuICAgICAgICBuZXcgT0RhdGFNb2RlbEV2ZW50KCdpbnZhbGlkJywge1xuICAgICAgICAgIG1vZGVsOiB0aGlzLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLl9lcnJvcnMsXG4gICAgICAgICAgb3B0aW9uczogeyBtZXRob2QgfSxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgcmV0dXJuIHRoaXMuX2Vycm9ycyA9PT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgZGVmYXVsdHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX21ldGEuZGVmYXVsdHMoKSB8fCB7fTtcbiAgfVxuXG4gIHRvRW50aXR5KHtcbiAgICBjbGllbnRfaWQgPSBmYWxzZSxcbiAgICBpbmNsdWRlX25hdmlnYXRpb24gPSBmYWxzZSxcbiAgICBpbmNsdWRlX2NvbmN1cnJlbmN5ID0gZmFsc2UsXG4gICAgaW5jbHVkZV9jb21wdXRlZCA9IGZhbHNlLFxuICAgIGluY2x1ZGVfa2V5ID0gdHJ1ZSxcbiAgICBpbmNsdWRlX25vbl9maWVsZCA9IGZhbHNlLFxuICAgIGNoYW5nZXNfb25seSA9IGZhbHNlLFxuICAgIGZpZWxkX21hcHBpbmcgPSBmYWxzZSxcbiAgICBjaGFpbiA9IFtdLFxuICB9OiB7XG4gICAgY2xpZW50X2lkPzogYm9vbGVhbjtcbiAgICBpbmNsdWRlX25hdmlnYXRpb24/OiBib29sZWFuO1xuICAgIGluY2x1ZGVfY29uY3VycmVuY3k/OiBib29sZWFuO1xuICAgIGluY2x1ZGVfY29tcHV0ZWQ/OiBib29sZWFuO1xuICAgIGluY2x1ZGVfa2V5PzogYm9vbGVhbjtcbiAgICBpbmNsdWRlX25vbl9maWVsZD86IGJvb2xlYW47XG4gICAgY2hhbmdlc19vbmx5PzogYm9vbGVhbjtcbiAgICBmaWVsZF9tYXBwaW5nPzogYm9vbGVhbjtcbiAgICBjaGFpbj86IChPRGF0YU1vZGVsPGFueT4gfCBPRGF0YUNvbGxlY3Rpb248YW55LCBPRGF0YU1vZGVsPGFueT4+KVtdO1xuICB9ID0ge30pOiBUIHwgeyBbbmFtZTogc3RyaW5nXTogYW55IH0ge1xuICAgIHJldHVybiB0aGlzLl9tZXRhLnRvRW50aXR5KHRoaXMsIHtcbiAgICAgIGNsaWVudF9pZCxcbiAgICAgIGluY2x1ZGVfbmF2aWdhdGlvbixcbiAgICAgIGluY2x1ZGVfY29uY3VycmVuY3ksXG4gICAgICBpbmNsdWRlX2NvbXB1dGVkLFxuICAgICAgaW5jbHVkZV9rZXksXG4gICAgICBpbmNsdWRlX25vbl9maWVsZCxcbiAgICAgIGNoYW5nZXNfb25seSxcbiAgICAgIGZpZWxkX21hcHBpbmcsXG4gICAgICBjaGFpbixcbiAgICB9KTtcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4gdGhpcy50b0VudGl0eSgpO1xuICB9XG5cbiAgYXR0cmlidXRlcyh7XG4gICAgY2hhbmdlc19vbmx5ID0gZmFsc2UsXG4gICAgaW5jbHVkZV9jb25jdXJyZW5jeSA9IGZhbHNlLFxuICAgIGluY2x1ZGVfY29tcHV0ZWQgPSBmYWxzZSxcbiAgICBpbmNsdWRlX25vbl9maWVsZCA9IGZhbHNlLFxuICAgIGZpZWxkX21hcHBpbmcgPSBmYWxzZSxcbiAgfToge1xuICAgIGNoYW5nZXNfb25seT86IGJvb2xlYW47XG4gICAgaW5jbHVkZV9jb25jdXJyZW5jeT86IGJvb2xlYW47XG4gICAgaW5jbHVkZV9jb21wdXRlZD86IGJvb2xlYW47XG4gICAgaW5jbHVkZV9ub25fZmllbGQ/OiBib29sZWFuO1xuICAgIGZpZWxkX21hcHBpbmc/OiBib29sZWFuO1xuICB9ID0ge30pOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSB7XG4gICAgcmV0dXJuIHRoaXMuX21ldGEuYXR0cmlidXRlcyh0aGlzLCB7XG4gICAgICBjaGFuZ2VzX29ubHksXG4gICAgICBpbmNsdWRlX2NvbmN1cnJlbmN5LFxuICAgICAgaW5jbHVkZV9jb21wdXRlZCxcbiAgICAgIGluY2x1ZGVfbm9uX2ZpZWxkLFxuICAgICAgZmllbGRfbWFwcGluZyxcbiAgICB9KTtcbiAgfVxuXG4gIHNldChwYXRoOiBzdHJpbmcgfCBzdHJpbmdbXSwgdmFsdWU6IGFueSkge1xuICAgIGNvbnN0IHBhdGhBcnJheSA9IChcbiAgICAgIFR5cGVzLmlzQXJyYXkocGF0aCkgPyBwYXRoIDogKHBhdGggYXMgc3RyaW5nKS5tYXRjaCgvKFteWy5cXF1dKSsvZylcbiAgICApIGFzIGFueVtdO1xuICAgIGlmIChwYXRoQXJyYXkubGVuZ3RoID09PSAwKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGlmIChwYXRoQXJyYXkubGVuZ3RoID4gMSkge1xuICAgICAgY29uc3QgbW9kZWwgPSAoPGFueT50aGlzKVtwYXRoQXJyYXlbMF1dO1xuICAgICAgcmV0dXJuIG1vZGVsLnNldChwYXRoQXJyYXkuc2xpY2UoMSksIHZhbHVlKTtcbiAgICB9XG4gICAgaWYgKHBhdGhBcnJheS5sZW5ndGggPT09IDEpIHtcbiAgICAgIHJldHVybiAoKDxhbnk+dGhpcylbcGF0aEFycmF5WzBdXSA9IHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBnZXQocGF0aDogc3RyaW5nIHwgc3RyaW5nW10pOiBhbnkge1xuICAgIGNvbnN0IHBhdGhBcnJheSA9IChcbiAgICAgIFR5cGVzLmlzQXJyYXkocGF0aCkgPyBwYXRoIDogKHBhdGggYXMgc3RyaW5nKS5tYXRjaCgvKFteWy5cXF1dKSsvZylcbiAgICApIGFzIGFueVtdO1xuICAgIGlmIChwYXRoQXJyYXkubGVuZ3RoID09PSAwKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNvbnN0IHZhbHVlID0gKDxhbnk+dGhpcylbcGF0aEFycmF5WzBdXTtcbiAgICBpZiAoXG4gICAgICBwYXRoQXJyYXkubGVuZ3RoID4gMSAmJlxuICAgICAgKHZhbHVlIGluc3RhbmNlb2YgT0RhdGFNb2RlbCB8fCB2YWx1ZSBpbnN0YW5jZW9mIE9EYXRhQ29sbGVjdGlvbilcbiAgICApIHtcbiAgICAgIHJldHVybiB2YWx1ZS5nZXQocGF0aEFycmF5LnNsaWNlKDEpKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgcmVzZXQoe1xuICAgIHBhdGgsXG4gICAgc2lsZW50ID0gZmFsc2UsXG4gIH06IHsgcGF0aD86IHN0cmluZyB8IHN0cmluZ1tdOyBzaWxlbnQ/OiBib29sZWFuIH0gPSB7fSkge1xuICAgIGNvbnN0IHBhdGhBcnJheTogc3RyaW5nW10gPSAoXG4gICAgICBwYXRoID09PSB1bmRlZmluZWRcbiAgICAgICAgPyBbXVxuICAgICAgICA6IFR5cGVzLmlzQXJyYXkocGF0aClcbiAgICAgICAgPyBwYXRoXG4gICAgICAgIDogKHBhdGggYXMgc3RyaW5nKS5tYXRjaCgvKFteWy5cXF1dKSsvZylcbiAgICApIGFzIGFueVtdO1xuICAgIGNvbnN0IG5hbWUgPSBwYXRoQXJyYXlbMF07XG4gICAgY29uc3QgdmFsdWUgPSBuYW1lICE9PSB1bmRlZmluZWQgPyAoPGFueT50aGlzKVtuYW1lXSA6IHVuZGVmaW5lZDtcbiAgICBpZiAoXG4gICAgICBPRGF0YU1vZGVsT3B0aW9ucy5pc01vZGVsKHZhbHVlKSB8fFxuICAgICAgT0RhdGFNb2RlbE9wdGlvbnMuaXNDb2xsZWN0aW9uKHZhbHVlKVxuICAgICkge1xuICAgICAgdmFsdWUucmVzZXQoeyBwYXRoOiBwYXRoQXJyYXkuc2xpY2UoMSksIHNpbGVudCB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbWV0YS5yZXNldCh0aGlzLCB7IG5hbWU6IHBhdGhBcnJheVswXSwgc2lsZW50IH0pO1xuICAgIH1cbiAgfVxuXG4gIGNsZWFyKHsgc2lsZW50ID0gZmFsc2UgfTogeyBzaWxlbnQ/OiBib29sZWFuIH0gPSB7fSkge1xuICAgIHRoaXMuX2F0dHJpYnV0ZXMuY2xlYXIoKTtcbiAgICB0aGlzLl9jaGFuZ2VzLmNsZWFyKCk7XG4gICAgdGhpcy5fcmVsYXRpb25zLmNsZWFyKCk7XG4gICAgaWYgKCFzaWxlbnQpIHtcbiAgICAgIHRoaXMuZXZlbnRzJC5lbWl0KFxuICAgICAgICBuZXcgT0RhdGFNb2RlbEV2ZW50KCd1cGRhdGUnLCB7XG4gICAgICAgICAgbW9kZWw6IHRoaXMsXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGFzc2lnbihcbiAgICBlbnRpdHk6IFBhcnRpYWw8VD4gfCB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSxcbiAgICB7XG4gICAgICByZXNldCA9IGZhbHNlLFxuICAgICAgcmVwYXJlbnQgPSBmYWxzZSxcbiAgICAgIHNpbGVudCA9IGZhbHNlLFxuICAgIH06IHsgcmVzZXQ/OiBib29sZWFuOyByZXBhcmVudD86IGJvb2xlYW47IHNpbGVudD86IGJvb2xlYW4gfSA9IHt9XG4gICkge1xuICAgIHJldHVybiB0aGlzLl9tZXRhLmFzc2lnbih0aGlzLCBlbnRpdHksIHsgcmVzZXQsIHNpbGVudCwgcmVwYXJlbnQgfSk7XG4gIH1cblxuICBjbG9uZTxNIGV4dGVuZHMgT0RhdGFNb2RlbDxUPj4oKSB7XG4gICAgbGV0IEN0b3IgPSA8dHlwZW9mIE9EYXRhTW9kZWw+dGhpcy5jb25zdHJ1Y3RvcjtcbiAgICByZXR1cm4gbmV3IEN0b3IodGhpcy50b0VudGl0eShJTkNMVURFX1NIQUxMT1cpLCB7XG4gICAgICByZXNvdXJjZTogdGhpcy5yZXNvdXJjZSgpIGFzIE9EYXRhUmVzb3VyY2U8VD4sXG4gICAgICBhbm5vdHM6IHRoaXMuYW5ub3RzKCksXG4gICAgfSkgYXMgTTtcbiAgfVxuXG4gIHByaXZhdGUgX3JlcXVlc3Qob2JzJDogT2JzZXJ2YWJsZTxPRGF0YUVudGl0eTxhbnk+Pik6IE9ic2VydmFibGU8dGhpcz4ge1xuICAgIHRoaXMuZXZlbnRzJC5lbWl0KFxuICAgICAgbmV3IE9EYXRhTW9kZWxFdmVudCgncmVxdWVzdCcsIHtcbiAgICAgICAgbW9kZWw6IHRoaXMsXG4gICAgICAgIG9wdGlvbnM6IHsgb2JzZXJ2YWJsZTogb2JzJCB9LFxuICAgICAgfSlcbiAgICApO1xuICAgIHJldHVybiBvYnMkLnBpcGUoXG4gICAgICBtYXAoKHsgZW50aXR5LCBhbm5vdHMgfSkgPT4ge1xuICAgICAgICB0aGlzLl9hbm5vdGF0aW9ucyA9IGFubm90cztcbiAgICAgICAgdGhpcy5hc3NpZ24oYW5ub3RzLmF0dHJpYnV0ZXM8VD4oZW50aXR5IHx8IHt9LCAnZnVsbCcpLCB7XG4gICAgICAgICAgcmVzZXQ6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmV2ZW50cyQuZW1pdChcbiAgICAgICAgICBuZXcgT0RhdGFNb2RlbEV2ZW50KCdzeW5jJywge1xuICAgICAgICAgICAgbW9kZWw6IHRoaXMsXG4gICAgICAgICAgICBvcHRpb25zOiB7IGVudGl0eSwgYW5ub3RzIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBmZXRjaCh7XG4gICAgLi4ub3B0aW9uc1xuICB9OiBPRGF0YU9wdGlvbnMgJiB7XG4gICAgb3B0aW9ucz86IE9EYXRhT3B0aW9ucztcbiAgfSA9IHt9KTogT2JzZXJ2YWJsZTx0aGlzPiB7XG4gICAgbGV0IHJlc291cmNlID0gdGhpcy5yZXNvdXJjZSgpO1xuICAgIGlmIChyZXNvdXJjZSA9PT0gdW5kZWZpbmVkKVxuICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKCdmZXRjaDogUmVzb3VyY2UgaXMgdW5kZWZpbmVkJykpO1xuXG4gICAgbGV0IG9icyQ6IE9ic2VydmFibGU8T0RhdGFFbnRpdHk8VD4+O1xuICAgIGlmIChyZXNvdXJjZSBpbnN0YW5jZW9mIE9EYXRhRW50aXR5UmVzb3VyY2UpIHtcbiAgICAgIGlmICghcmVzb3VyY2UuaGFzS2V5KCkpXG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKFxuICAgICAgICAgICgpID0+IG5ldyBFcnJvcihcImZldGNoOiBDYW4ndCBmZXRjaCBtb2RlbCB3aXRob3V0IGtleVwiKVxuICAgICAgICApO1xuICAgICAgb2JzJCA9IHJlc291cmNlLmZldGNoKG9wdGlvbnMpO1xuICAgIH0gZWxzZSBpZiAocmVzb3VyY2UgaW5zdGFuY2VvZiBPRGF0YU5hdmlnYXRpb25Qcm9wZXJ0eVJlc291cmNlKSB7XG4gICAgICBvYnMkID0gcmVzb3VyY2UuZmV0Y2goeyByZXNwb25zZVR5cGU6ICdlbnRpdHknLCAuLi5vcHRpb25zIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBvYnMkID0gKHJlc291cmNlIGFzIE9EYXRhUHJvcGVydHlSZXNvdXJjZTxUPikuZmV0Y2goe1xuICAgICAgICByZXNwb25zZVR5cGU6ICdlbnRpdHknLFxuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9yZXF1ZXN0KG9icyQpO1xuICB9XG5cbiAgc2F2ZSh7XG4gICAgbWV0aG9kLFxuICAgIG5hdmlnYXRpb24gPSBmYWxzZSxcbiAgICB2YWxpZGF0ZSA9IHRydWUsXG4gICAgLi4ub3B0aW9uc1xuICB9OiBPRGF0YU9wdGlvbnMgJiB7XG4gICAgbWV0aG9kPzogJ2NyZWF0ZScgfCAndXBkYXRlJyB8ICdtb2RpZnknO1xuICAgIG5hdmlnYXRpb24/OiBib29sZWFuO1xuICAgIHZhbGlkYXRlPzogYm9vbGVhbjtcbiAgICBvcHRpb25zPzogT0RhdGFPcHRpb25zO1xuICB9ID0ge30pOiBPYnNlcnZhYmxlPHRoaXM+IHtcbiAgICBsZXQgcmVzb3VyY2UgPSB0aGlzLnJlc291cmNlKCk7XG4gICAgaWYgKHJlc291cmNlID09PSB1bmRlZmluZWQpXG4gICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IoJ3NhdmU6IFJlc291cmNlIGlzIHVuZGVmaW5lZCcpKTtcbiAgICBpZiAoXG4gICAgICAhKFxuICAgICAgICByZXNvdXJjZSBpbnN0YW5jZW9mIE9EYXRhRW50aXR5UmVzb3VyY2UgfHxcbiAgICAgICAgcmVzb3VyY2UgaW5zdGFuY2VvZiBPRGF0YU5hdmlnYXRpb25Qcm9wZXJ0eVJlc291cmNlXG4gICAgICApXG4gICAgKVxuICAgICAgcmV0dXJuIHRocm93RXJyb3IoXG4gICAgICAgICgpID0+XG4gICAgICAgICAgbmV3IEVycm9yKFxuICAgICAgICAgICAgJ3NhdmU6IFJlc291cmNlIHR5cGUgT0RhdGFFbnRpdHlSZXNvdXJjZS9PRGF0YU5hdmlnYXRpb25Qcm9wZXJ0eVJlc291cmNlIG5lZWRlZCdcbiAgICAgICAgICApXG4gICAgICApO1xuXG4gICAgLy8gUmVzb2x2ZSBtZXRob2QgYW5kIHJlc291cmNlIGtleVxuICAgIGlmIChtZXRob2QgPT09IHVuZGVmaW5lZCAmJiB0aGlzLnNjaGVtYSgpLmlzQ29tcG91bmRLZXkoKSlcbiAgICAgIHJldHVybiB0aHJvd0Vycm9yKFxuICAgICAgICAoKSA9PlxuICAgICAgICAgIG5ldyBFcnJvcihcbiAgICAgICAgICAgICdzYXZlOiBDb21wb3NpdGUga2V5IHJlcXVpcmUgYSBzcGVjaWZpYyBtZXRob2QsIHVzZSBjcmVhdGUvdXBkYXRlL21vZGlmeSdcbiAgICAgICAgICApXG4gICAgICApO1xuICAgIG1ldGhvZCA9IG1ldGhvZCB8fCAoIXJlc291cmNlLmhhc0tleSgpID8gJ2NyZWF0ZScgOiAndXBkYXRlJyk7XG4gICAgaWYgKFxuICAgICAgcmVzb3VyY2UgaW5zdGFuY2VvZiBPRGF0YUVudGl0eVJlc291cmNlICYmXG4gICAgICAobWV0aG9kID09PSAndXBkYXRlJyB8fCBtZXRob2QgPT09ICdtb2RpZnknKSAmJlxuICAgICAgIXJlc291cmNlLmhhc0tleSgpXG4gICAgKVxuICAgICAgcmV0dXJuIHRocm93RXJyb3IoXG4gICAgICAgICgpID0+IG5ldyBFcnJvcignc2F2ZTogVXBkYXRlL1BhdGNoIHJlcXVpcmUgZW50aXR5IGtleScpXG4gICAgICApO1xuICAgIGlmIChcbiAgICAgIHJlc291cmNlIGluc3RhbmNlb2YgT0RhdGFOYXZpZ2F0aW9uUHJvcGVydHlSZXNvdXJjZSB8fFxuICAgICAgbWV0aG9kID09PSAnY3JlYXRlJ1xuICAgIClcbiAgICAgIHJlc291cmNlLmNsZWFyS2V5KCk7XG5cbiAgICBpZiAodmFsaWRhdGUgJiYgIXRoaXMuaXNWYWxpZCh7IG1ldGhvZCwgbmF2aWdhdGlvbiB9KSkge1xuICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKCdzYXZlOiBWYWxpZGF0aW9uIGVycm9ycycpKTtcbiAgICB9XG4gICAgY29uc3QgX2VudGl0eSA9IHRoaXMudG9FbnRpdHkoe1xuICAgICAgY2hhbmdlc19vbmx5OiBtZXRob2QgPT09ICdtb2RpZnknLFxuICAgICAgZmllbGRfbWFwcGluZzogdHJ1ZSxcbiAgICAgIGluY2x1ZGVfY29uY3VycmVuY3k6IHRydWUsXG4gICAgICBpbmNsdWRlX25hdmlnYXRpb246IG5hdmlnYXRpb24sXG4gICAgfSkgYXMgVDtcbiAgICByZXR1cm4gdGhpcy5fcmVxdWVzdChcbiAgICAgIChtZXRob2QgPT09ICdjcmVhdGUnXG4gICAgICAgID8gcmVzb3VyY2UuY3JlYXRlKF9lbnRpdHksIG9wdGlvbnMpXG4gICAgICAgIDogbWV0aG9kID09PSAnbW9kaWZ5J1xuICAgICAgICA/IHJlc291cmNlLm1vZGlmeShfZW50aXR5LCB7IGV0YWc6IHRoaXMuYW5ub3RzKCkuZXRhZywgLi4ub3B0aW9ucyB9KVxuICAgICAgICA6IHJlc291cmNlLnVwZGF0ZShfZW50aXR5LCB7IGV0YWc6IHRoaXMuYW5ub3RzKCkuZXRhZywgLi4ub3B0aW9ucyB9KVxuICAgICAgKS5waXBlKFxuICAgICAgICBtYXAoKHsgZW50aXR5LCBhbm5vdHMgfSkgPT4gKHsgZW50aXR5OiBlbnRpdHkgfHwgX2VudGl0eSwgYW5ub3RzIH0pKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBkZXN0cm95KHtcbiAgICAuLi5vcHRpb25zXG4gIH06IE9EYXRhT3B0aW9ucyAmIHtcbiAgICBvcHRpb25zPzogT0RhdGFPcHRpb25zO1xuICB9ID0ge30pOiBPYnNlcnZhYmxlPHRoaXM+IHtcbiAgICBsZXQgcmVzb3VyY2UgPSB0aGlzLnJlc291cmNlKCk7XG4gICAgaWYgKHJlc291cmNlID09PSB1bmRlZmluZWQpXG4gICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IoJ2Rlc3Ryb3k6IFJlc291cmNlIGlzIHVuZGVmaW5lZCcpKTtcbiAgICBpZiAoXG4gICAgICAhKFxuICAgICAgICByZXNvdXJjZSBpbnN0YW5jZW9mIE9EYXRhRW50aXR5UmVzb3VyY2UgfHxcbiAgICAgICAgcmVzb3VyY2UgaW5zdGFuY2VvZiBPRGF0YU5hdmlnYXRpb25Qcm9wZXJ0eVJlc291cmNlXG4gICAgICApXG4gICAgKVxuICAgICAgcmV0dXJuIHRocm93RXJyb3IoXG4gICAgICAgICgpID0+XG4gICAgICAgICAgbmV3IEVycm9yKFxuICAgICAgICAgICAgJ2Rlc3Ryb3k6IFJlc291cmNlIHR5cGUgT0RhdGFFbnRpdHlSZXNvdXJjZS9PRGF0YU5hdmlnYXRpb25Qcm9wZXJ0eVJlc291cmNlIG5lZWRlZCdcbiAgICAgICAgICApXG4gICAgICApO1xuICAgIGlmICghcmVzb3VyY2UuaGFzS2V5KCkpXG4gICAgICByZXR1cm4gdGhyb3dFcnJvcihcbiAgICAgICAgKCkgPT4gbmV3IEVycm9yKFwiZGVzdHJveTogQ2FuJ3QgZGVzdHJveSBtb2RlbCB3aXRob3V0IGtleVwiKVxuICAgICAgKTtcblxuICAgIGNvbnN0IF9lbnRpdHkgPSB0aGlzLnRvRW50aXR5KHsgZmllbGRfbWFwcGluZzogdHJ1ZSB9KSBhcyBUO1xuICAgIGNvbnN0IG9icyQgPSByZXNvdXJjZVxuICAgICAgLmRlc3Ryb3koeyBldGFnOiB0aGlzLmFubm90cygpLmV0YWcsIC4uLm9wdGlvbnMgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHsgZW50aXR5LCBhbm5vdHMgfSkgPT4gKHsgZW50aXR5OiBlbnRpdHkgfHwgX2VudGl0eSwgYW5ub3RzIH0pKVxuICAgICAgKTtcbiAgICByZXR1cm4gdGhpcy5fcmVxdWVzdChvYnMkKS5waXBlKFxuICAgICAgdGFwKCgpID0+XG4gICAgICAgIHRoaXMuZXZlbnRzJC5lbWl0KG5ldyBPRGF0YU1vZGVsRXZlbnQoJ2Rlc3Ryb3knLCB7IG1vZGVsOiB0aGlzIH0pKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFuIGV4ZWN1dGlvbiBjb250ZXh0IGZvciBjaGFuZ2UgdGhlIGludGVybmFsIHF1ZXJ5IG9mIGEgcmVzb3VyY2VcbiAgICogQHBhcmFtIGZ1bmMgRnVuY3Rpb24gdG8gZXhlY3V0ZVxuICAgKi9cbiAgcXVlcnkoZnVuYzogKHE6IE9EYXRhUXVlcnlPcHRpb25zSGFuZGxlcjxUPikgPT4gdm9pZCkge1xuICAgIHJldHVybiB0aGlzLl9tZXRhLnF1ZXJ5KHRoaXMsIHRoaXMucmVzb3VyY2UoKSwgZnVuYykgYXMgdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBQZXJmb3JtIGEgY2hlY2sgb24gdGhlIGludGVybmFsIHN0YXRlIG9mIHRoZSBtb2RlbCBhbmQgcmV0dXJuIHRydWUgaWYgdGhlIG1vZGVsIGlzIGNoYW5nZWQuXG4gICAqIEBwYXJhbSBpbmNsdWRlX25hdmlnYXRpb24gQ2hlY2sgaW4gbmF2aWdhdGlvbiBwcm9wZXJ0aWVzXG4gICAqIEByZXR1cm5zIHRydWUgaWYgdGhlIG1vZGVsIGhhcyBjaGFuZ2VkLCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIGhhc0NoYW5nZWQoe1xuICAgIGluY2x1ZGVfbmF2aWdhdGlvbiA9IGZhbHNlLFxuICB9OiB7IGluY2x1ZGVfbmF2aWdhdGlvbj86IGJvb2xlYW4gfSA9IHt9KSB7XG4gICAgcmV0dXJuIHRoaXMuX21ldGEuaGFzQ2hhbmdlZCh0aGlzLCB7IGluY2x1ZGVfbmF2aWdhdGlvbiB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gZXhlY3V0aW9uIGNvbnRleHQgZm9yIGEgZ2l2ZW4gZnVuY3Rpb24sIHdoZXJlIHRoZSBtb2RlbCBpcyBib3VuZCB0byBpdHMgZW50aXR5IGVuZHBvaW50XG4gICAqIEBwYXJhbSBjdHggQ29udGV4dCBmdW5jdGlvblxuICAgKiBAcmV0dXJucyBUaGUgcmVzdWx0IG9mIHRoZSBjb250ZXh0XG4gICAqL1xuICBhc0VudGl0eTxSPihjdHg6IChtb2RlbDogdGhpcykgPT4gUik6IFIge1xuICAgIHJldHVybiB0aGlzLl9tZXRhLmFzRW50aXR5KHRoaXMsIGN0eCk7XG4gIH1cblxuICBjYWxsRnVuY3Rpb248UCwgUj4oXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHBhcmFtczogUCB8IG51bGwsXG4gICAgcmVzcG9uc2VUeXBlOiAncHJvcGVydHknIHwgJ21vZGVsJyB8ICdjb2xsZWN0aW9uJyB8ICdub25lJyxcbiAgICB7IC4uLm9wdGlvbnMgfToge30gJiBPRGF0YVF1ZXJ5QXJndW1lbnRzT3B0aW9uczxSPiA9IHt9XG4gICk6IE9ic2VydmFibGU8UiB8IE9EYXRhTW9kZWw8Uj4gfCBPRGF0YUNvbGxlY3Rpb248UiwgT0RhdGFNb2RlbDxSPj4gfCBudWxsPiB7XG4gICAgY29uc3QgcmVzb3VyY2UgPSB0aGlzLnJlc291cmNlKCk7XG4gICAgaWYgKCEocmVzb3VyY2UgaW5zdGFuY2VvZiBPRGF0YUVudGl0eVJlc291cmNlKSB8fCAhcmVzb3VyY2UuaGFzS2V5KCkpXG4gICAgICByZXR1cm4gdGhyb3dFcnJvcihcbiAgICAgICAgKCkgPT5cbiAgICAgICAgICBuZXcgRXJyb3IoXG4gICAgICAgICAgICBcImNhbGxGdW5jdGlvbjogQ2FuJ3QgY2FsbCBmdW5jdGlvbiB3aXRob3V0IE9EYXRhRW50aXR5UmVzb3VyY2Ugd2l0aCBrZXlcIlxuICAgICAgICAgIClcbiAgICAgICk7XG5cbiAgICBjb25zdCBmdW5jID0gcmVzb3VyY2UuZnVuY3Rpb248UCwgUj4obmFtZSkucXVlcnkoKHEpID0+IHEuYXBwbHkob3B0aW9ucykpO1xuICAgIHN3aXRjaCAocmVzcG9uc2VUeXBlKSB7XG4gICAgICBjYXNlICdwcm9wZXJ0eSc6XG4gICAgICAgIHJldHVybiBmdW5jLmNhbGxQcm9wZXJ0eShwYXJhbXMsIG9wdGlvbnMpO1xuICAgICAgY2FzZSAnbW9kZWwnOlxuICAgICAgICByZXR1cm4gZnVuYy5jYWxsTW9kZWwocGFyYW1zLCBvcHRpb25zKTtcbiAgICAgIGNhc2UgJ2NvbGxlY3Rpb24nOlxuICAgICAgICByZXR1cm4gZnVuYy5jYWxsQ29sbGVjdGlvbihwYXJhbXMsIG9wdGlvbnMpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbChwYXJhbXMsIHsgcmVzcG9uc2VUeXBlLCAuLi5vcHRpb25zIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNhbGxBY3Rpb248UCwgUj4oXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHBhcmFtczogUCB8IG51bGwsXG4gICAgcmVzcG9uc2VUeXBlOiAncHJvcGVydHknIHwgJ21vZGVsJyB8ICdjb2xsZWN0aW9uJyB8ICdub25lJyxcbiAgICB7IC4uLm9wdGlvbnMgfToge30gJiBPRGF0YVF1ZXJ5QXJndW1lbnRzT3B0aW9uczxSPiA9IHt9XG4gICk6IE9ic2VydmFibGU8UiB8IE9EYXRhTW9kZWw8Uj4gfCBPRGF0YUNvbGxlY3Rpb248UiwgT0RhdGFNb2RlbDxSPj4gfCBudWxsPiB7XG4gICAgY29uc3QgcmVzb3VyY2UgPSB0aGlzLnJlc291cmNlKCk7XG4gICAgaWYgKCEocmVzb3VyY2UgaW5zdGFuY2VvZiBPRGF0YUVudGl0eVJlc291cmNlKSB8fCAhcmVzb3VyY2UuaGFzS2V5KCkpXG4gICAgICByZXR1cm4gdGhyb3dFcnJvcihcbiAgICAgICAgKCkgPT5cbiAgICAgICAgICBuZXcgRXJyb3IoXG4gICAgICAgICAgICBcImNhbGxBY3Rpb246IENhbid0IGNhbGwgYWN0aW9uIHdpdGhvdXQgT0RhdGFFbnRpdHlSZXNvdXJjZSB3aXRoIGtleVwiXG4gICAgICAgICAgKVxuICAgICAgKTtcblxuICAgIGNvbnN0IGFjdGlvbiA9IHJlc291cmNlLmFjdGlvbjxQLCBSPihuYW1lKS5xdWVyeSgocSkgPT4gcS5hcHBseShvcHRpb25zKSk7XG4gICAgc3dpdGNoIChyZXNwb25zZVR5cGUpIHtcbiAgICAgIGNhc2UgJ3Byb3BlcnR5JzpcbiAgICAgICAgcmV0dXJuIGFjdGlvbi5jYWxsUHJvcGVydHkocGFyYW1zLCBvcHRpb25zKTtcbiAgICAgIGNhc2UgJ21vZGVsJzpcbiAgICAgICAgcmV0dXJuIGFjdGlvbi5jYWxsTW9kZWwocGFyYW1zLCBvcHRpb25zKTtcbiAgICAgIGNhc2UgJ2NvbGxlY3Rpb24nOlxuICAgICAgICByZXR1cm4gYWN0aW9uLmNhbGxDb2xsZWN0aW9uKHBhcmFtcywgb3B0aW9ucyk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gYWN0aW9uLmNhbGwocGFyYW1zLCB7IHJlc3BvbnNlVHlwZSwgLi4ub3B0aW9ucyB9KTtcbiAgICB9XG4gIH1cblxuICAvLyBDYXN0XG4gIGNhc3Q8Uz4odHlwZTogc3RyaW5nKTogT0RhdGFNb2RlbDxTPiB7XG4gICAgY29uc3QgcmVzb3VyY2UgPSB0aGlzLnJlc291cmNlKCk7XG4gICAgaWYgKCEocmVzb3VyY2UgaW5zdGFuY2VvZiBPRGF0YUVudGl0eVJlc291cmNlKSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYGNhc3Q6IENhbid0IGNhc3QgdG8gZGVyaXZlZCBtb2RlbCB3aXRob3V0IE9EYXRhRW50aXR5UmVzb3VyY2VgXG4gICAgICApO1xuXG4gICAgcmV0dXJuIHJlc291cmNlXG4gICAgICAuY2FzdDxTPih0eXBlKVxuICAgICAgLmFzTW9kZWwodGhpcy50b0VudGl0eShJTkNMVURFX0RFRVApLCB7IGFubm90czogdGhpcy5hbm5vdHMoKSB9KTtcbiAgfVxuXG4gIGZldGNoTmF2aWdhdGlvblByb3BlcnR5PFM+KFxuICAgIG5hbWU6IGtleW9mIFQgfCBzdHJpbmcsXG4gICAgcmVzcG9uc2VUeXBlOiAnbW9kZWwnIHwgJ2NvbGxlY3Rpb24nLFxuICAgIHsgLi4ub3B0aW9ucyB9OiB7fSAmIE9EYXRhUXVlcnlBcmd1bWVudHNPcHRpb25zPFM+ID0ge31cbiAgKTogT2JzZXJ2YWJsZTxPRGF0YU1vZGVsPFM+IHwgT0RhdGFDb2xsZWN0aW9uPFMsIE9EYXRhTW9kZWw8Uz4+IHwgbnVsbD4ge1xuICAgIGNvbnN0IG5hdiA9IHRoaXMubmF2aWdhdGlvblByb3BlcnR5PFM+KFxuICAgICAgbmFtZVxuICAgICkgYXMgT0RhdGFOYXZpZ2F0aW9uUHJvcGVydHlSZXNvdXJjZTxTPjtcbiAgICBuYXYucXVlcnkoKHEpID0+IHEuYXBwbHkob3B0aW9ucykpO1xuICAgIHN3aXRjaCAocmVzcG9uc2VUeXBlKSB7XG4gICAgICBjYXNlICdtb2RlbCc6XG4gICAgICAgIHJldHVybiBuYXYuZmV0Y2hNb2RlbChvcHRpb25zKTtcbiAgICAgIGNhc2UgJ2NvbGxlY3Rpb24nOlxuICAgICAgICByZXR1cm4gbmF2LmZldGNoQ29sbGVjdGlvbihvcHRpb25zKTtcbiAgICB9XG4gIH1cblxuICAvLyBHZXQgVmFsdWVcbiAgZ2V0VmFsdWU8UD4oXG4gICAgbmFtZToga2V5b2YgVCB8IHN0cmluZyxcbiAgICBvcHRpb25zPzogT0RhdGFPcHRpb25zXG4gICk6IE9ic2VydmFibGU8UCB8IE9EYXRhTW9kZWw8UD4gfCBPRGF0YUNvbGxlY3Rpb248UCwgT0RhdGFNb2RlbDxQPj4gfCBudWxsPiB7XG4gICAgY29uc3QgZmllbGQgPSB0aGlzLl9tZXRhLmZpZWxkKG5hbWUpO1xuICAgIGlmIChmaWVsZCA9PT0gdW5kZWZpbmVkIHx8IGZpZWxkLm5hdmlnYXRpb24pXG4gICAgICB0aHJvdyBFcnJvcihgZ2V0VmFsdWU6IENhbid0IGZpbmQgcHJvcGVydHkgJHtuYW1lfWApO1xuXG4gICAgbGV0IHZhbHVlID0gKHRoaXMgYXMgYW55KVtuYW1lXSBhc1xuICAgICAgfCBQXG4gICAgICB8IE9EYXRhTW9kZWw8UD5cbiAgICAgIHwgT0RhdGFDb2xsZWN0aW9uPFAsIE9EYXRhTW9kZWw8UD4+O1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBwcm9wID0gZmllbGQucmVzb3VyY2VGYWN0b3J5KFxuICAgICAgICB0aGlzLnJlc291cmNlKClcbiAgICAgICkgYXMgT0RhdGFQcm9wZXJ0eVJlc291cmNlPFA+O1xuICAgICAgcmV0dXJuIGZpZWxkLmNvbGxlY3Rpb25cbiAgICAgICAgPyBwcm9wXG4gICAgICAgICAgICAuZmV0Y2hDb2xsZWN0aW9uKG9wdGlvbnMpXG4gICAgICAgICAgICAucGlwZSh0YXAoKGMpID0+IHRoaXMuYXNzaWduKHsgW25hbWVdOiBjIH0sIHsgc2lsZW50OiB0cnVlIH0pKSlcbiAgICAgICAgOiBmaWVsZC5pc1N0cnVjdHVyZWRUeXBlKClcbiAgICAgICAgPyBwcm9wXG4gICAgICAgICAgICAuZmV0Y2hNb2RlbChvcHRpb25zKVxuICAgICAgICAgICAgLnBpcGUodGFwKChjKSA9PiB0aGlzLmFzc2lnbih7IFtuYW1lXTogYyB9LCB7IHNpbGVudDogdHJ1ZSB9KSkpXG4gICAgICAgIDogcHJvcFxuICAgICAgICAgICAgLmZldGNoUHJvcGVydHkob3B0aW9ucylcbiAgICAgICAgICAgIC5waXBlKHRhcCgoYykgPT4gdGhpcy5hc3NpZ24oeyBbbmFtZV06IGMgfSwgeyBzaWxlbnQ6IHRydWUgfSkpKTtcbiAgICB9XG4gICAgcmV0dXJuIG9mKHZhbHVlIGFzIFApO1xuICB9XG5cbiAgLy8gU2V0IFJlZmVyZW5jZVxuICBzZXRSZWZlcmVuY2U8Tj4oXG4gICAgbmFtZToga2V5b2YgVCB8IHN0cmluZyxcbiAgICBtb2RlbDogT0RhdGFNb2RlbDxOPiB8IE9EYXRhQ29sbGVjdGlvbjxOLCBPRGF0YU1vZGVsPE4+PiB8IG51bGwsXG4gICAgb3B0aW9ucz86IE9EYXRhT3B0aW9uc1xuICApOiBPYnNlcnZhYmxlPHRoaXM+IHtcbiAgICBjb25zdCByZWZlcmVuY2UgPSAoXG4gICAgICB0aGlzLm5hdmlnYXRpb25Qcm9wZXJ0eTxOPihuYW1lKSBhcyBPRGF0YU5hdmlnYXRpb25Qcm9wZXJ0eVJlc291cmNlPE4+XG4gICAgKS5yZWZlcmVuY2UoKTtcblxuICAgIGNvbnN0IGV0YWcgPSB0aGlzLmFubm90cygpLmV0YWc7XG4gICAgbGV0IG9icyQgPSBORVZFUiBhcyBPYnNlcnZhYmxlPGFueT47XG4gICAgaWYgKG1vZGVsIGluc3RhbmNlb2YgT0RhdGFNb2RlbCkge1xuICAgICAgb2JzJCA9IHJlZmVyZW5jZS5zZXQoXG4gICAgICAgIG1vZGVsLl9tZXRhLmVudGl0eVJlc291cmNlKG1vZGVsKSBhcyBPRGF0YUVudGl0eVJlc291cmNlPE4+LFxuICAgICAgICB7IGV0YWcsIC4uLm9wdGlvbnMgfVxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKG1vZGVsIGluc3RhbmNlb2YgT0RhdGFDb2xsZWN0aW9uKSB7XG4gICAgICBvYnMkID0gZm9ya0pvaW4oXG4gICAgICAgIG1vZGVsXG4gICAgICAgICAgLm1vZGVscygpXG4gICAgICAgICAgLm1hcCgobSkgPT5cbiAgICAgICAgICAgIHJlZmVyZW5jZS5hZGQoXG4gICAgICAgICAgICAgIG0uX21ldGEuZW50aXR5UmVzb3VyY2UobSkgYXMgT0RhdGFFbnRpdHlSZXNvdXJjZTxOPixcbiAgICAgICAgICAgICAgb3B0aW9uc1xuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChtb2RlbCA9PT0gbnVsbCkge1xuICAgICAgb2JzJCA9IHJlZmVyZW5jZS51bnNldCh7IGV0YWcsIC4uLm9wdGlvbnMgfSk7XG4gICAgfVxuICAgIHRoaXMuZXZlbnRzJC5lbWl0KFxuICAgICAgbmV3IE9EYXRhTW9kZWxFdmVudCgncmVxdWVzdCcsIHtcbiAgICAgICAgbW9kZWw6IHRoaXMsXG4gICAgICAgIG9wdGlvbnM6IHsgb2JzZXJ2YWJsZTogb2JzJCB9LFxuICAgICAgfSlcbiAgICApO1xuICAgIHJldHVybiBvYnMkLnBpcGUoXG4gICAgICBtYXAoKG1vZGVsKSA9PiB7XG4gICAgICAgIHRoaXMuYXNzaWduKHsgW25hbWVdOiBtb2RlbCB9KTtcbiAgICAgICAgdGhpcy5ldmVudHMkLmVtaXQobmV3IE9EYXRhTW9kZWxFdmVudCgnc3luYycsIHsgbW9kZWw6IHRoaXMgfSkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldFJlZmVyZW5jZTxQPihcbiAgICBuYW1lOiBrZXlvZiBUIHwgc3RyaW5nXG4gICk6IE9EYXRhTW9kZWw8UD4gfCBPRGF0YUNvbGxlY3Rpb248UCwgT0RhdGFNb2RlbDxQPj4gfCBudWxsIHtcbiAgICBjb25zdCBmaWVsZCA9IHRoaXMuX21ldGEuZmllbGQ8UD4obmFtZSk7XG4gICAgaWYgKGZpZWxkID09PSB1bmRlZmluZWQgfHwgIWZpZWxkLm5hdmlnYXRpb24pXG4gICAgICB0aHJvdyBFcnJvcihgZ2V0UmVmZXJlbmNlOiBDYW4ndCBmaW5kIG5hdmlnYXRpb24gcHJvcGVydHkgJHtuYW1lfWApO1xuXG4gICAgbGV0IG1vZGVsID0gKHRoaXMgYXMgYW55KVtuYW1lXSBhc1xuICAgICAgfCBPRGF0YU1vZGVsPFA+XG4gICAgICB8IE9EYXRhQ29sbGVjdGlvbjxQLCBPRGF0YU1vZGVsPFA+PlxuICAgICAgfCBudWxsO1xuICAgIGlmIChtb2RlbCA9PT0gbnVsbCkgcmV0dXJuIG51bGw7XG4gICAgaWYgKG1vZGVsID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gZmllbGQuY29sbGVjdGlvbiA/IFtdIDogKHRoaXMucmVmZXJlbmNlZChmaWVsZCkgYXMgUCk7XG4gICAgICBtb2RlbCA9XG4gICAgICAgIHZhbHVlICE9PSBudWxsXG4gICAgICAgICAgPyBmaWVsZC5tb2RlbENvbGxlY3Rpb25GYWN0b3J5PFQsIFA+KHsgcGFyZW50OiB0aGlzLCB2YWx1ZSB9KVxuICAgICAgICAgIDogbnVsbDtcbiAgICAgICh0aGlzIGFzIGFueSlbbmFtZV0gPSBtb2RlbDtcbiAgICB9XG4gICAgcmV0dXJuIG1vZGVsO1xuICB9XG5cbiAgLy8gTW9kZWwgZnVuY3Rpb25zXG4gIGVxdWFscyhvdGhlcjogT0RhdGFNb2RlbDxUPikge1xuICAgIGNvbnN0IHRoaXNLZXkgPSB0aGlzLmtleSgpO1xuICAgIGNvbnN0IG90aGVyS2V5ID0gb3RoZXIua2V5KCk7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMgPT09IG90aGVyIHx8XG4gICAgICAodHlwZW9mIHRoaXMgPT09IHR5cGVvZiBvdGhlciAmJlxuICAgICAgICAoKDxhbnk+dGhpcylbdGhpcy5fbWV0YS5jaWRdID09PSAoPGFueT5vdGhlcilbdGhpcy5fbWV0YS5jaWRdIHx8XG4gICAgICAgICAgKHRoaXNLZXkgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgb3RoZXJLZXkgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgVHlwZXMuaXNFcXVhbCh0aGlzS2V5LCBvdGhlcktleSkpKSlcbiAgICApO1xuICB9XG5cbiAgZ2V0IFtTeW1ib2wudG9TdHJpbmdUYWddKCkge1xuICAgIHJldHVybiAnTW9kZWwnO1xuICB9XG5cbiAgY29sbGVjdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5fcGFyZW50ICE9PSBudWxsICYmXG4gICAgICBPRGF0YU1vZGVsT3B0aW9ucy5pc0NvbGxlY3Rpb24odGhpcy5fcGFyZW50WzBdKVxuICAgICAgPyAodGhpcy5fcGFyZW50WzBdIGFzIE9EYXRhQ29sbGVjdGlvbjxULCBPRGF0YU1vZGVsPFQ+PilcbiAgICAgIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgbmV4dCgpOiBPRGF0YU1vZGVsPFQ+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5jb2xsZWN0aW9uKCk/Lm5leHQodGhpcyk7XG4gIH1cblxuICBwcmV2KCk6IE9EYXRhTW9kZWw8VD4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmNvbGxlY3Rpb24oKT8ucHJldih0aGlzKTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgUkVTRVJWRURfRklFTERfTkFNRVMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhcbiAgT0RhdGFNb2RlbC5wcm90b3R5cGVcbik7XG4iXX0=
|