@lifeready/core 8.0.16 → 9.0.1
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/bundles/lifeready-core.umd.js +64 -44
- package/bundles/lifeready-core.umd.js.map +1 -1
- package/bundles/lifeready-core.umd.min.js +1 -1
- package/bundles/lifeready-core.umd.min.js.map +1 -1
- package/esm2015/lib/_common/utils.js +6 -9
- package/esm2015/lib/api/types/lr-graphql.types.js +7 -1
- package/esm2015/lib/item/item.gql.js +3 -1
- package/esm2015/lib/item/item.service.js +24 -18
- package/esm2015/lib/item/item.types.js +1 -1
- package/esm2015/lib/scenario/scenario.service.js +6 -6
- package/esm2015/lib/trusted-party/trusted-party.service.js +20 -12
- package/esm2015/lib/trusted-party/trusted-party.types.js +1 -1
- package/fesm2015/lifeready-core.js +57 -38
- package/fesm2015/lifeready-core.js.map +1 -1
- package/lib/_common/utils.d.ts +1 -1
- package/lib/api/types/lr-graphql.types.d.ts +2 -0
- package/lib/item/item.gql.d.ts +6 -18
- package/lib/item/item.types.d.ts +7 -4
- package/lib/trusted-party/trusted-party.types.d.ts +4 -1
- package/lifeready-core.metadata.json +1 -1
- package/package.json +1 -1
|
@@ -377,8 +377,7 @@ let ItemService = ItemService_1 = class ItemService extends LrService {
|
|
|
377
377
|
cipherMetaClearJson: options.cipherMetaClearJson,
|
|
378
378
|
parentDirectories: [
|
|
379
379
|
{
|
|
380
|
-
|
|
381
|
-
wrappingKeyId: tempDir.keyId,
|
|
380
|
+
directory: tempDir,
|
|
382
381
|
},
|
|
383
382
|
],
|
|
384
383
|
plainMetaJson: options.plainMetaJson,
|
|
@@ -419,8 +418,7 @@ let ItemService = ItemService_1 = class ItemService extends LrService {
|
|
|
419
418
|
// Create the file
|
|
420
419
|
const file = (yield this.createFile(Object.assign(Object.assign({}, options), { parentDirectories: [
|
|
421
420
|
{
|
|
422
|
-
|
|
423
|
-
wrappingKeyId: tempDir.keyId,
|
|
421
|
+
directory: tempDir,
|
|
424
422
|
},
|
|
425
423
|
] }))).createFile.file;
|
|
426
424
|
// Call back with item that's currently in staging.
|
|
@@ -432,8 +430,7 @@ let ItemService = ItemService_1 = class ItemService extends LrService {
|
|
|
432
430
|
// TODO return the server time where delete is scheduled. Expirable mutation
|
|
433
431
|
// Return the mutation that moves the directory into the dst directories
|
|
434
432
|
return this.changeFileParentsMutation({
|
|
435
|
-
|
|
436
|
-
fileKeyId: file.keyId,
|
|
433
|
+
file,
|
|
437
434
|
parentsToRemove: [tempDir.id],
|
|
438
435
|
parentsToAdd: options.parentDirectories,
|
|
439
436
|
});
|
|
@@ -482,22 +479,23 @@ let ItemService = ItemService_1 = class ItemService extends LrService {
|
|
|
482
479
|
// ------------------------------------------------------------------------------
|
|
483
480
|
prepareParentDirectory(options, newKey) {
|
|
484
481
|
return __awaiter(this, void 0, void 0, function* () {
|
|
485
|
-
const { directoryId, linkType,
|
|
482
|
+
const { directoryId: _directoryId, wrappingKeyId: _wrappingKeyId, linkType, } = options;
|
|
483
|
+
const directory = options.directory || {
|
|
484
|
+
id: _directoryId,
|
|
485
|
+
keyId: _wrappingKeyId,
|
|
486
|
+
};
|
|
486
487
|
if (linkType == LinkTypeField.REFERENCE) {
|
|
487
|
-
if (wrappingKeyId) {
|
|
488
|
-
throw new KcBadArgumentException('Do not specify wrappingKeyId when link type is REFERENCE.');
|
|
489
|
-
}
|
|
490
488
|
return {
|
|
491
|
-
directoryId,
|
|
489
|
+
directoryId: directory.id,
|
|
492
490
|
linkType,
|
|
493
491
|
};
|
|
494
492
|
}
|
|
495
493
|
else {
|
|
496
494
|
// If directory's key is not already in the key graph, then need to
|
|
497
495
|
// fetch the directory's key.
|
|
498
|
-
const wrappingKey = yield this.getDirectoryKey(
|
|
496
|
+
const wrappingKey = yield this.getDirectoryKey(directory.id, directory.keyId);
|
|
499
497
|
return {
|
|
500
|
-
directoryId,
|
|
498
|
+
directoryId: directory.id,
|
|
501
499
|
wrappingKeyId: wrappingKey.id,
|
|
502
500
|
wrappedKey: yield this.keyGraph.wrapKey(wrappingKey, newKey),
|
|
503
501
|
linkType,
|
|
@@ -606,16 +604,24 @@ let ItemService = ItemService_1 = class ItemService extends LrService {
|
|
|
606
604
|
}
|
|
607
605
|
prepareChangeDirectoryParents(options) {
|
|
608
606
|
return __awaiter(this, void 0, void 0, function* () {
|
|
609
|
-
const
|
|
607
|
+
const directory = options.directory || {
|
|
608
|
+
id: options.directoryId,
|
|
609
|
+
keyId: options.directoryKeyId,
|
|
610
|
+
};
|
|
611
|
+
const directoryKey = yield this.getDirectoryKey(directory.id, directory.keyId);
|
|
610
612
|
const input = yield this.prepareChangeItemParents(options, directoryKey.jwk);
|
|
611
|
-
return Object.assign(Object.assign({}, input), { directoryId:
|
|
613
|
+
return Object.assign(Object.assign({}, input), { directoryId: directory.id });
|
|
612
614
|
});
|
|
613
615
|
}
|
|
614
616
|
prepareChangeFileParents(options) {
|
|
615
617
|
return __awaiter(this, void 0, void 0, function* () {
|
|
616
|
-
const
|
|
618
|
+
const file = options.file || {
|
|
619
|
+
id: options.fileId,
|
|
620
|
+
keyId: options.fileKeyId,
|
|
621
|
+
};
|
|
622
|
+
const fileKey = yield this.getFileKey(file.id, file.keyId);
|
|
617
623
|
const input = yield this.prepareChangeItemParents(options, fileKey.jwk);
|
|
618
|
-
return Object.assign(Object.assign({}, input), { fileId:
|
|
624
|
+
return Object.assign(Object.assign({}, input), { fileId: file.id });
|
|
619
625
|
});
|
|
620
626
|
}
|
|
621
627
|
onLogout() {
|
|
@@ -653,4 +659,4 @@ ItemService = ItemService_1 = __decorate([
|
|
|
653
659
|
})
|
|
654
660
|
], ItemService);
|
|
655
661
|
export { ItemService };
|
|
656
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXRlbS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zcmMvbGliL2l0ZW0vaXRlbS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTdELE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDMUQsT0FBTyxFQUFrQixhQUFhLEVBQWtCLE1BQU0sY0FBYyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbkQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbkUsT0FBTyxFQUNMLHdCQUF3QixFQUN4QixtQkFBbUIsRUFDbkIsdUNBQXVDLEVBQ3ZDLDhCQUE4QixFQUM5Qix5QkFBeUIsRUFDekIsdUJBQXVCLEVBQ3ZCLGtCQUFrQixFQUNsQix1QkFBdUIsRUFDdkIsa0JBQWtCLEVBQ2xCLGtCQUFrQixFQUNsQixnQ0FBZ0MsRUFDaEMsMkJBQTJCLEVBQzNCLGtCQUFrQixFQUNsQiwwQkFBMEIsRUFD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LENBQUM7S0FBQTtJQUVPLFFBQVE7UUFDZCx5QkFBeUI7UUFDekIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7SUFDNUIsQ0FBQztDQUNGLENBQUE7QUE3dEJRLHFDQUF5QixHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDO0FBQy9DLDRDQUFnQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDdkQsTUFBTSxFQUFFO1FBQ047WUFDRSxRQUFRLEVBQUUsYUFBVyxDQUFDLHlCQUF5QjtTQUNoRDtLQUNGO0NBQ0YsQ0FBQyxDQUFDOzs7WUE1QkosVUFBVSxTQUFDO2dCQUNWLFVBQVUsRUFBRSxNQUFNO2FBQ25COzs7WUFuRThCLE1BQU07WUFBaEIsUUFBUTtZQUtwQixpQkFBaUI7WUFHakIsVUFBVTtZQUZWLGlCQUFpQjtZQUNqQixlQUFlO1lBR2YsV0FBVztZQU5YLFdBQVc7O0FBZ0VQLFdBQVc7SUFOdkIsaUJBQWlCLENBQUM7UUFDakIsVUFBVSxFQUFFLFFBQVE7S0FDckIsQ0FBQztHQUlXLFdBQVcsQ0ErdUJ2QjtTQS91QlksV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdG9yLCBOZ1pvbmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEpXSyB9IGZyb20gJ25vZGUtam9zZSc7XG5pbXBvcnQgeyBMck11dGF0aW9uLCBMclNlcnZpY2UgfSBmcm9tICcuLi9hcGkvbHItZ3JhcGhxbCc7XG5pbXBvcnQgeyBJRCwgSlNPTk9iamVjdCwgTGlua1R5cGVGaWVsZCwgTHJSZWxheUlkSW5wdXQgfSBmcm9tICcuLi9hcGkvdHlwZXMnO1xuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi9hdXRoL2F1dGguc2VydmljZSc7XG5pbXBvcnQgeyBGaWxlVXBsb2FkU2VydmljZSB9IGZyb20gJy4uL2ZpbGUtdXBsb2FkL2ZpbGUtdXBsb2FkLnNlcnZpY2UnO1xuaW1wb3J0IHsgS2V5RmFjdG9yeVNlcnZpY2UgfSBmcm9tICcuLi9rZXkva2V5LWZhY3Rvcnkuc2VydmljZSc7XG5pbXBvcnQgeyBLZXlHcmFwaFNlcnZpY2UgfSBmcm9tICcuLi9rZXkva2V5LWdyYXBoLnNlcnZpY2UnO1xuaW1wb3J0IHsgS2V5U2VydmljZSB9IGZyb20gJy4uL2tleS9rZXkuc2VydmljZSc7XG5pbXBvcnQgeyBQYXlsb2FkVHlwZSB9IGZyb20gJy4uL2tleS9rZXkudHlwZXMnO1xuaW1wb3J0IHsgTG9ja1NlcnZpY2UgfSBmcm9tICcuLi9sb2NrL2xvY2suc2VydmljZSc7XG5pbXBvcnQgeyBLY0JhZEFyZ3VtZW50RXhjZXB0aW9uIH0gZnJvbSAnLi4vX2NvbW1vbi9leGNlcHRpb25zJztcbmltcG9ydCB7IFJ1bk91dHNpZGVBbmd1bGFyIH0gZnJvbSAnLi4vX2NvbW1vbi9ydW4tb3V0c2lkZS1hbmd1bGFyJztcbmltcG9ydCB7XG4gIEFyY2hpdmVEaXJlY3RvcnlNdXRhdGlvbixcbiAgQXJjaGl2ZUZpbGVNdXRhdGlvbixcbiAgQmVnaW5EZWxldGVDaGlsZEl0ZW1MaW5rc1dpbmRvd011dGF0aW9uLFxuICBDaGFuZ2VEaXJlY3RvcnlQYXJlbnRzTXV0YXRpb24sXG4gIENoYW5nZUZpbGVQYXJlbnRzTXV0YXRpb24sXG4gIENyZWF0ZURpcmVjdG9yeU11dGF0aW9uLFxuICBDcmVhdGVGaWxlTXV0YXRpb24sXG4gIERlbGV0ZURpcmVjdG9yeU11dGF0aW9uLFxuICBEZWxldGVGaWxlTXV0YXRpb24sXG4gIFJldmVydEZpbGVNdXRhdGlvbixcbiAgU2V0RGlyZWN0b3J5Q29uZmlkZW50aWFsTXV0YXRpb24sXG4gIFNldEZpbGVDb25maWRlbnRpYWxNdXRhdGlvbixcbiAgVGVtcERpcmVjdG9yeVF1ZXJ5LFxuICBVbmFyY2hpdmVEaXJlY3RvcnlNdXRhdGlvbixcbiAgVW5hcmNoaXZlRmlsZU11dGF0aW9uLFxuICBVcGRhdGVEaXJlY3RvcnlNdXRhdGlvbixcbiAgVXBkYXRlRmlsZU11dGF0aW9uLFxufSBmcm9tICcuL2l0ZW0uZ3FsJztcbmltcG9ydCB7XG4gIERpcmVjdG9yeUtleUZyb21EaXJlY3RvcnlTaGFyZVF1ZXJ5LFxuICBEaXJlY3RvcnlLZXlRdWVyeSxcbiAgRmlsZUtleUZyb21GaWxlU2hhcmVRdWVyeSxcbiAgRmlsZUtleVF1ZXJ5LFxuICBGaWxlU3RhdGVLZXlRdWVyeSxcbn0gZnJvbSAnLi9pdGVtLmdxbC5wcml2YXRlJztcbmltcG9ydCB7XG4gIEFyY2hpdmVEaXJlY3RvcnlPcHRpb25zLFxuICBCZWdpbkRlbGV0ZUNoaWxkSXRlbUxpbmtzV2luZG93T3B0aW9ucyxcbiAgQ2hhbmdlRGlyZWN0b3J5UGFyZW50c09wdGlvbnMsXG4gIENoYW5nZUZpbGVQYXJlbnRzT3B0aW9ucyxcbiAgQ2hhbmdlSXRlbVBhcmVudHNPcHRpb25zLFxuICBDcmVhdGVEaXJlY3RvcnlPcHRpb25zLFxuICBDcmVhdGVEaXJlY3RvcnlXaXRoU3RhZ2luZ09wdGlvbnMsXG4gIENyZWF0ZUZpbGVPcHRpb25zLFxuICBDcmVhdGVGaWxlV2l0aFN0YWdpbmdPcHRpb25zLFxuICBEb3dubG9hZEZpbGVDb250ZW50T3B0aW9ucyxcbiAgSWRLZXlQYWlyLFxuICBQYXJlbnREaXJlY3RvcnlJbnB1dCxcbiAgUGFyZW50RGlyZWN0b3J5T3B0aW9ucyxcbiAgUGFyZW50Um9vdERpcmVjdG9yeUlucHV0LFxuICBSZXZlcnRGaWxlT3B0aW9ucyxcbiAgU2V0RGlyZWN0b3J5Q29uZmlkZW50aWFsT3B0aW9ucyxcbiAgU2V0RmlsZUNvbmZpZGVudGlhbE9wdGlvbnMsXG4gIFVuYXJjaGl2ZURpcmVjdG9yeU9wdGlvbnMsXG4gIFVwZGF0ZURpcmVjdG9yeU9wdGlvbnMsXG4gIFVwZGF0ZUZpbGVPcHRpb25zLFxufSBmcm9tICcuL2l0ZW0udHlwZXMnO1xuXG5AUnVuT3V0c2lkZUFuZ3VsYXIoe1xuICBuZ1pvbmVOYW1lOiAnbmdab25lJyxcbn0pXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgSXRlbVNlcnZpY2UgZXh0ZW5kcyBMclNlcnZpY2Uge1xuICAvLyBDYWNoaW5nIHRoZSB0ZW1wIGRpcmVjdG9yeS5cbiAgcHJpdmF0ZSB0ZW1wRGlyZWN0b3J5OiBJZEtleVBhaXIgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXG4gICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgcHJpdmF0ZSBmaWxlVXBsb2FkU2VydmljZTogRmlsZVVwbG9hZFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxuICAgIHByaXZhdGUga2V5RmFjdG9yeTogS2V5RmFjdG9yeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBrZXlHcmFwaDogS2V5R3JhcGhTZXJ2aWNlLFxuICAgIHByaXZhdGUgbG9ja1NlcnZpY2U6IExvY2tTZXJ2aWNlLFxuICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlXG4gICkge1xuICAgIHN1cGVyKGluamVjdG9yKTtcbiAgICB0aGlzLmF1dGhTZXJ2aWNlLmFkZExvZ291dExpc3RlbmVyKCgpID0+IHRoaXMub25Mb2dvdXQoKSk7XG4gIH1cblxuICBzdGF0aWMgVEVNUF9ESVJFQ1RPUllfUExBSU5fTUVUQSA9IHsga2NUeXBlOiAndGVtcCcgfTtcbiAgc3RhdGljIFRFTVBfRElSRUNUT1JZX1BMQUlOX01FVEFfRklMVEVSID0gSlNPTi5zdHJpbmdpZnkoe1xuICAgIGZpbHRlcjogW1xuICAgICAge1xuICAgICAgICBjb250YWluczogSXRlbVNlcnZpY2UuVEVNUF9ESVJFQ1RPUllfUExBSU5fTUVUQSxcbiAgICAgIH0sXG4gICAgXSxcbiAgfSk7XG5cbiAgYXN5bmMgZG93bmxvYWRGaWxlQ29udGVudChcbiAgICBvcHRpb25zOiBEb3dubG9hZEZpbGVDb250ZW50T3B0aW9uc1xuICApOiBQcm9taXNlPFVpbnQ4QXJyYXk+IHtcbiAgICBjb25zdCBmaWxlQ29udGVudCA9IGF3YWl0IHRoaXMuZmlsZVVwbG9hZFNlcnZpY2UuZG93bmxvYWRFbmNyeXB0ZWRGaWxlKFxuICAgICAgb3B0aW9ucy5maWxlU3RhdGVOb2RlSWRcbiAgICApO1xuXG4gICAgY29uc3QgZmlsZVN0YXRlS2V5ID0gYXdhaXQgdGhpcy5rZXlHcmFwaC5nZXRLZXkoXG4gICAgICBvcHRpb25zLmZpbGVTdGF0ZUtleUlkLFxuICAgICAgKCkgPT4gdGhpcy5nZXRGaWxlU3RhdGVLZXlJZChvcHRpb25zLmZpbGVTdGF0ZU5vZGVJZClcbiAgICApO1xuXG4gICAgcmV0dXJuIHRoaXMua2V5R3JhcGguZGVjcnlwdEZyb21TdHJpbmcoZmlsZVN0YXRlS2V5LCBmaWxlQ29udGVudCwge1xuICAgICAgcGF5bG9hZFR5cGU6IFBheWxvYWRUeXBlLlVJTlRfOF9BUlJBWSxcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGdldERpcmVjdG9yeUtleUlkKGRpcmVjdG9yeUlkOiBMclJlbGF5SWRJbnB1dCkge1xuICAgIHJldHVybiAoXG4gICAgICBhd2FpdCB0aGlzLnF1ZXJ5KHtcbiAgICAgICAgcXVlcnk6IERpcmVjdG9yeUtleVF1ZXJ5LFxuICAgICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgICBpZDogZGlyZWN0b3J5SWQsXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgICkuZGlyZWN0b3J5LmtleUlkO1xuICB9XG5cbiAgYXN5bmMgZ2V0RmlsZUtleUlkKGZpbGVJZDogTHJSZWxheUlkSW5wdXQpIHtcbiAgICByZXR1cm4gKFxuICAgICAgYXdhaXQgdGhpcy5xdWVyeSh7XG4gICAgICAgIHF1ZXJ5OiBGaWxlS2V5UXVlcnksXG4gICAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICAgIGlkOiBmaWxlSWQsXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgICkuZmlsZS5rZXlJZDtcbiAgfVxuXG4gIGFzeW5jIGdldERpcmVjdG9yeUtleUlkRnJvbURpcmVjdG9yeVNoYXJlKGRpcmVjdG9yeVNoYXJlSWQ6IExyUmVsYXlJZElucHV0KSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGF3YWl0IHRoaXMucXVlcnkoe1xuICAgICAgICBxdWVyeTogRGlyZWN0b3J5S2V5RnJvbURpcmVjdG9yeVNoYXJlUXVlcnksXG4gICAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICAgIGlkOiBkaXJlY3RvcnlTaGFyZUlkLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICApLmRpcmVjdG9yeVNoYXJlLml0ZW0ua2V5SWQ7XG4gIH1cblxuICBhc3luYyBnZXRGaWxlS2V5SWRGcm9tRmlsZVNoYXJlKGZpbGVTaGFyZUlkOiBMclJlbGF5SWRJbnB1dCkge1xuICAgIHJldHVybiAoXG4gICAgICBhd2FpdCB0aGlzLnF1ZXJ5KHtcbiAgICAgICAgcXVlcnk6IEZpbGVLZXlGcm9tRmlsZVNoYXJlUXVlcnksXG4gICAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICAgIGlkOiBmaWxlU2hhcmVJZCxcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgKS5maWxlU2hhcmUuaXRlbS5rZXlJZDtcbiAgfVxuXG4gIGFzeW5jIGdldERpcmVjdG9yeUtleShcbiAgICBkaXJlY3RvcnlJZDogTHJSZWxheUlkSW5wdXQsXG4gICAgZGlyZWN0b3J5S2V5SWQ/OiBMclJlbGF5SWRJbnB1dFxuICApIHtcbiAgICByZXR1cm4gdGhpcy5rZXlHcmFwaC5nZXRLZXkoZGlyZWN0b3J5S2V5SWQsICgpID0+XG4gICAgICB0aGlzLmdldERpcmVjdG9yeUtleUlkKGRpcmVjdG9yeUlkKVxuICAgICk7XG4gIH1cblxuICBhc3luYyBnZXRGaWxlS2V5KGZpbGVJZDogTHJSZWxheUlkSW5wdXQsIGZpbGVLZXlJZD86IExyUmVsYXlJZElucHV0KSB7XG4gICAgcmV0dXJuIHRoaXMua2V5R3JhcGguZ2V0S2V5KGZpbGVLZXlJZCwgKCkgPT4gdGhpcy5nZXRGaWxlS2V5SWQoZmlsZUlkKSk7XG4gIH1cblxuICBjcmVhdGVEaXJlY3Rvcnkob3B0aW9uczogQ3JlYXRlRGlyZWN0b3J5T3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLm11dGF0ZSh0aGlzLmNyZWF0ZURpcmVjdG9yeU11dGF0aW9uKG9wdGlvbnMpKTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZURpcmVjdG9yeU11dGF0aW9uKG9wdGlvbnM6IENyZWF0ZURpcmVjdG9yeU9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IExyTXV0YXRpb24oe1xuICAgICAgbXV0YXRpb246IENyZWF0ZURpcmVjdG9yeU11dGF0aW9uLFxuICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgIGlucHV0OiBhd2FpdCB0aGlzLnByZXBhcmVDcmVhdGVEaXJlY3Rvcnkob3B0aW9ucyksXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgdXBkYXRlRGlyZWN0b3J5KG9wdGlvbnM6IFVwZGF0ZURpcmVjdG9yeU9wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5tdXRhdGUodGhpcy51cGRhdGVEaXJlY3RvcnlNdXRhdGlvbihvcHRpb25zKSk7XG4gIH1cblxuICBhc3luYyB1cGRhdGVEaXJlY3RvcnlNdXRhdGlvbihvcHRpb25zOiBVcGRhdGVEaXJlY3RvcnlPcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBMck11dGF0aW9uKHtcbiAgICAgIG11dGF0aW9uOiBVcGRhdGVEaXJlY3RvcnlNdXRhdGlvbixcbiAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICBpbnB1dDogYXdhaXQgdGhpcy5wcmVwYXJlVXBkYXRlRGlyZWN0b3J5KG9wdGlvbnMpLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGRlbGV0ZURpcmVjdG9yeShpZDogSUQpIHtcbiAgICByZXR1cm4gdGhpcy5tdXRhdGUodGhpcy5kZWxldGVEaXJlY3RvcnlNdXRhdGlvbihpZCkpO1xuICB9XG5cbiAgZGVsZXRlRGlyZWN0b3J5TXV0YXRpb24oaWQ6IElEKSB7XG4gICAgcmV0dXJuIG5ldyBMck11dGF0aW9uKHtcbiAgICAgIG11dGF0aW9uOiBEZWxldGVEaXJlY3RvcnlNdXRhdGlvbixcbiAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICBpbnB1dDoge1xuICAgICAgICAgIGRpcmVjdG9yeUlkOiBpZCxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBjcmVhdGVGaWxlKG9wdGlvbnM6IENyZWF0ZUZpbGVPcHRpb25zKSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRlKHRoaXMuY3JlYXRlRmlsZU11dGF0aW9uKG9wdGlvbnMpKTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZUZpbGVNdXRhdGlvbihvcHRpb25zOiBDcmVhdGVGaWxlT3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgTHJNdXRhdGlvbih7XG4gICAgICBtdXRhdGlvbjogQ3JlYXRlRmlsZU11dGF0aW9uLFxuICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgIGlucHV0OiBhd2FpdCB0aGlzLnByZXBhcmVDcmVhdGVGaWxlKG9wdGlvbnMpLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHVwZGF0ZUZpbGUob3B0aW9uczogVXBkYXRlRmlsZU9wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5tdXRhdGUodGhpcy51cGRhdGVGaWxlTXV0YXRpb24ob3B0aW9ucykpO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlRmlsZU11dGF0aW9uKG9wdGlvbnM6IFVwZGF0ZUZpbGVPcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBMck11dGF0aW9uKHtcbiAgICAgIG11dGF0aW9uOiBVcGRhdGVGaWxlTXV0YXRpb24sXG4gICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgaW5wdXQ6IGF3YWl0IHRoaXMucHJlcGFyZVVwZGF0ZUZpbGUob3B0aW9ucyksXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcmV2ZXJ0RmlsZShvcHRpb25zOiBSZXZlcnRGaWxlT3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLm11dGF0ZSh0aGlzLnJldmVydEZpbGVNdXRhdGlvbihvcHRpb25zKSk7XG4gIH1cblxuICBhc3luYyByZXZlcnRGaWxlTXV0YXRpb24ob3B0aW9uczogUmV2ZXJ0RmlsZU9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IExyTXV0YXRpb24oe1xuICAgICAgbXV0YXRpb246IFJldmVydEZpbGVNdXRhdGlvbixcbiAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICBpbnB1dDogb3B0aW9ucyxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBkZWxldGVGaWxlKGlkOiBJRCkge1xuICAgIHJldHVybiB0aGlzLm11dGF0ZSh0aGlzLmRlbGV0ZUZpbGVNdXRhdGlvbihpZCkpO1xuICB9XG5cbiAgZGVsZXRlRmlsZU11dGF0aW9uKGlkOiBJRCkge1xuICAgIHJldHVybiBuZXcgTHJNdXRhdGlvbih7XG4gICAgICBtdXRhdGlvbjogRGVsZXRlRmlsZU11dGF0aW9uLFxuICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgIGlucHV0OiB7XG4gICAgICAgICAgZmlsZUlkOiBpZCxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBhcmNoaXZlRGlyZWN0b3J5KGRpcmVjdG9yeUlkOiBzdHJpbmcsIG9wdGlvbnM6IEFyY2hpdmVEaXJlY3RvcnlPcHRpb25zKSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRlKHRoaXMuYXJjaGl2ZURpcmVjdG9yeU11dGF0aW9uKGRpcmVjdG9yeUlkLCBvcHRpb25zKSk7XG4gIH1cblxuICBhcmNoaXZlRGlyZWN0b3J5TXV0YXRpb24oXG4gICAgZGlyZWN0b3J5SWQ6IHN0cmluZyxcbiAgICBvcHRpb25zOiBBcmNoaXZlRGlyZWN0b3J5T3B0aW9uc1xuICApIHtcbiAgICByZXR1cm4gbmV3IExyTXV0YXRpb24oe1xuICAgICAgbXV0YXRpb246IEFyY2hpdmVEaXJlY3RvcnlNdXRhdGlvbixcbiAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICBpbnB1dDoge1xuICAgICAgICAgIGRpcmVjdG9yeUlkLFxuICAgICAgICAgIHJlY3Vyc2l2ZTogb3B0aW9ucy5yZWN1cnNpdmUsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgYXJjaGl2ZUZpbGUoZmlsZUlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5tdXRhdGUodGhpcy5hcmNoaXZlRmlsZU11dGF0aW9uKGZpbGVJZCkpO1xuICB9XG5cbiAgYXJjaGl2ZUZpbGVNdXRhdGlvbihmaWxlSWQ6IHN0cmluZykge1xuICAgIHJldHVybiBuZXcgTHJNdXRhdGlvbih7XG4gICAgICBtdXRhdGlvbjogQXJjaGl2ZUZpbGVNdXRhdGlvbixcbiAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICBpbnB1dDoge1xuICAgICAgICAgIGZpbGVJZCxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICB1bmFyY2hpdmVEaXJlY3RvcnkoZGlyZWN0b3J5SWQ6IHN0cmluZywgb3B0aW9uczogVW5hcmNoaXZlRGlyZWN0b3J5T3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLm11dGF0ZSh0aGlzLnVuYXJjaGl2ZURpcmVjdG9yeU11dGF0aW9uKGRpcmVjdG9yeUlkLCBvcHRpb25zKSk7XG4gIH1cblxuICB1bmFyY2hpdmVEaXJlY3RvcnlNdXRhdGlvbihcbiAgICBkaXJlY3RvcnlJZDogc3RyaW5nLFxuICAgIG9wdGlvbnM6IFVuYXJjaGl2ZURpcmVjdG9yeU9wdGlvbnNcbiAgKSB7XG4gICAgcmV0dXJuIG5ldyBMck11dGF0aW9uKHtcbiAgICAgIG11dGF0aW9uOiBVbmFyY2hpdmVEaXJlY3RvcnlNdXRhdGlvbixcbiAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICBpbnB1dDoge1xuICAgICAgICAgIGRpcmVjdG9yeUlkLFxuICAgICAgICAgIHJlY3Vyc2l2ZTogb3B0aW9ucy5yZWN1cnNpdmUsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgdW5hcmNoaXZlRmlsZShmaWxlSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLm11dGF0ZSh0aGlzLnVuYXJjaGl2ZUZpbGVNdXRhdGlvbihmaWxlSWQpKTtcbiAgfVxuXG4gIHVuYXJjaGl2ZUZpbGVNdXRhdGlvbihmaWxlSWQ6IHN0cmluZykge1xuICAgIHJldHVybiBuZXcgTHJNdXRhdGlvbih7XG4gICAgICBtdXRhdGlvbjogVW5hcmNoaXZlRmlsZU11dGF0aW9uLFxuICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgIGlucHV0OiB7XG4gICAgICAgICAgZmlsZUlkLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGNoYW5nZURpcmVjdG9yeVBhcmVudHMob3B0aW9uczogQ2hhbmdlRGlyZWN0b3J5UGFyZW50c09wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5tdXRhdGUodGhpcy5jaGFuZ2VEaXJlY3RvcnlQYXJlbnRzTXV0YXRpb24ob3B0aW9ucykpO1xuICB9XG5cbiAgYXN5bmMgY2hhbmdlRGlyZWN0b3J5UGFyZW50c011dGF0aW9uKG9wdGlvbnM6IENoYW5nZURpcmVjdG9yeVBhcmVudHNPcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBMck11dGF0aW9uKHtcbiAgICAgIG11dGF0aW9uOiBDaGFuZ2VEaXJlY3RvcnlQYXJlbnRzTXV0YXRpb24sXG4gICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgaW5wdXQ6IGF3YWl0IHRoaXMucHJlcGFyZUNoYW5nZURpcmVjdG9yeVBhcmVudHMob3B0aW9ucyksXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgY2hhbmdlRmlsZVBhcmVudHMob3B0aW9uczogQ2hhbmdlRmlsZVBhcmVudHNPcHRpb25zKSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRlKHRoaXMuY2hhbmdlRmlsZVBhcmVudHNNdXRhdGlvbihvcHRpb25zKSk7XG4gIH1cblxuICBhc3luYyBjaGFuZ2VGaWxlUGFyZW50c011dGF0aW9uKG9wdGlvbnM6IENoYW5nZUZpbGVQYXJlbnRzT3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgTHJNdXRhdGlvbih7XG4gICAgICBtdXRhdGlvbjogQ2hhbmdlRmlsZVBhcmVudHNNdXRhdGlvbixcbiAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICBpbnB1dDogYXdhaXQgdGhpcy5wcmVwYXJlQ2hhbmdlRmlsZVBhcmVudHMob3B0aW9ucyksXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgYmVnaW5EZWxldGVDaGlsZEl0ZW1MaW5rc1dpbmRvdyhcbiAgICBvcHRpb25zOiBCZWdpbkRlbGV0ZUNoaWxkSXRlbUxpbmtzV2luZG93T3B0aW9uc1xuICApIHtcbiAgICByZXR1cm4gdGhpcy5tdXRhdGUodGhpcy5iZWdpbkRlbGV0ZUNoaWxkSXRlbUxpbmtzV2luZG93TXV0YXRpb24ob3B0aW9ucykpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNjaGVkdWxlIGNsZWFudXAgb2YgdGhlIGhhcmQgbGlua3MgaW4gYSBkaXJlY3RvcnkuXG4gICAqIFRoZSBzZXJ2ZXIgd2lsbCBkZWxldGUgYWxsIGhhcmQgbGluayB3aXRoaW4gdGhlIGRpcmVjdG9yeSB3aXRoaW4gYSB0aW1lIHdpbmRvdzogc3RhcnRpbmcgZnJvbSBub3cgYW5kXG4gICAqIGVuZGluZyBhdCByZXF1ZXN0V2luZG93TXMgYWZ0ZXIgbm93LlxuICAgKiBUaGUgc2VydmVyIGRlY2lkZXMgX3doZW5fIGl0IHdpbGwgcGVyZm9ybSB0aGUgZGVsZXRlLiBJdCdzIG5vdCBndWFyYW50ZWVkIHRoYXQgaXQgd2lsbCBwZXJmb3JtXG4gICAqIHRoZSBkZWxldGUgYXQgXCJub3cgKyByZXF1ZXN0V2luZG93TXNcIiwgYnV0IGl0IHdpbGwgaGFwcGVuIGF0IHNvbWUgdGltZSBhZnRlciBcIm5vdyArIHJlcXVlc3RXaW5kb3dNc1wiLlxuICAgKiBUaGlzIGFsbG93cyBtdWx0aXBsZSBvdmVybGFwcGluZyBjYWxscyB0byB0aGlzIGZ1bmN0aW9uIGFuZCB0aGUgc2VydmVyIGFsbG9jYXRlcyBlbm91Z2ggZm9yIGVhY2ggcmVxdWVzdC5cbiAgICogVGhlIHNlcnZlciBoYXMgYSBzZXR0aW5nIHRoYXQgYWxsb3dzIGZvciBhIG1heGltdW0gdmFsdWUgb24gcmVxdWVzdFdpbmRvd01zLiBJZiB0aGUgcmVxdWVzdGVkIHZhbHVlXG4gICAqIGlzIGxhcmdlciB0aGFuIHRoaXMgbWF4aW11bSwgdGhlIGNhbGwgd2lsbCBmYWlsLlxuICAgKi9cbiAgYXN5bmMgYmVnaW5EZWxldGVDaGlsZEl0ZW1MaW5rc1dpbmRvd011dGF0aW9uKFxuICAgIG9wdGlvbnM6IEJlZ2luRGVsZXRlQ2hpbGRJdGVtTGlua3NXaW5kb3dPcHRpb25zXG4gICkge1xuICAgIHJldHVybiBuZXcgTHJNdXRhdGlvbih7XG4gICAgICBtdXRhdGlvbjogQmVnaW5EZWxldGVDaGlsZEl0ZW1MaW5rc1dpbmRvd011dGF0aW9uLFxuICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgIGlucHV0OiBvcHRpb25zLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBtYXkgcmFpc2UgVkVSU0lPTl9NSVNNQVRDSCBleGNlcHRpb24gaWYgdGhlcmUgaXMgYSByYWNlIGNvbmRpdGlvblxuICAgKiB3aGVuIG11bHRpcGxlIGNsaWVudHMgdHJ5IHRvIGNyZWF0ZSB0aGUgdGVtcCBkaXJlY3RvcnkuXG4gICAqXG4gICAqIFRPRE8gVGhlcmUgaXMgYSByZXRyeSBtZWNoYW5pc20gaW4gZ3JhcGhxbCB3aXRoIGV4cG9uZW50aWFsIGJhY2sgb2ZmIGJ1dCB0aGF0J3MgaW50ZXJuYWwuXG4gICAqIEJ1dCBuZWVkIHRvIHVzZSBhbiBleHBvbmVudGlhbCBiYWNrIG9mZiBsaWIgaWYgd2Ugd2FudCB0byByZXRyeSBoZXJlLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgSUQgb2YgdGhlIHRlbXAgZGlyZWN0b3J5XG4gICAqXG4gICAqL1xuICBhc3luYyBlbnN1cmVUZW1wRGlyZWN0b3J5KCk6IFByb21pc2U8SWRLZXlQYWlyPiB7XG4gICAgaWYgKHRoaXMudGVtcERpcmVjdG9yeSkge1xuICAgICAgcmV0dXJuIHRoaXMudGVtcERpcmVjdG9yeTtcbiAgICB9XG5cbiAgICBjb25zdCBleGlzdGluZyA9IGF3YWl0IHRoaXMucXVlcnkoe1xuICAgICAgcXVlcnk6IFRlbXBEaXJlY3RvcnlRdWVyeSxcbiAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICBwbGFpbk1ldGE6IEl0ZW1TZXJ2aWNlLlRFTVBfRElSRUNUT1JZX1BMQUlOX01FVEFfRklMVEVSLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGlmIChleGlzdGluZy5yb290RGlyZWN0b3JpZXMuZWRnZXMubGVuZ3RoID4gMSkge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgYFRoZXJlIGlzIG1vcmUgdGhhbiAxIHRlbXAgZGlyZWN0b3J5IChwbGFpbk1ldGEgZmlsdGVyOiAke0l0ZW1TZXJ2aWNlLlRFTVBfRElSRUNUT1JZX1BMQUlOX01FVEFfRklMVEVSfSlgXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChleGlzdGluZy5yb290RGlyZWN0b3JpZXMuZWRnZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAvLyBEb2Vzbid0IGV4aXN0IHlldCwgY3JlYXRlIGl0XG4gICAgICBjb25zdCBjcmVhdGVEaXJlY3RvcnkgPSBhd2FpdCB0aGlzLmNyZWF0ZURpcmVjdG9yeU11dGF0aW9uKHtcbiAgICAgICAgYXNSb290RGlyZWN0b3J5OiB0cnVlLFxuICAgICAgICBwbGFpbk1ldGFKc29uOiBJdGVtU2VydmljZS5URU1QX0RJUkVDVE9SWV9QTEFJTl9NRVRBLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIE9wdGltaXN0aWMgbG9jayBvbiB0aGUgY3VycmVudCB1c2VyLlxuICAgICAgY29uc3QgdXBkYXRlTG9jayA9IHRoaXMubG9ja1NlcnZpY2UudXBkYXRlTG9ja011dGF0aW9uKHtcbiAgICAgICAgdmVyc2lvbjogZXhpc3RpbmcubG9jaz8udmVyc2lvbixcbiAgICAgIH0pO1xuXG4gICAgICAvLyBCZWNhdXNlIHRoaXMubXV0YXRlKCkgb25seSBoYW5kbGVzIHNpbXBsZSB0eXBlcyB3ZSBuZWVkIHRvIHVzZSB0aGUgbW9yZVxuICAgICAgLy8gYWR2YW5jZWQgdGhpcy5sckdyYXBoUUwubHJNdXRhdGUoKVxuICAgICAgY29uc3QgW2NyZWF0ZURpcmVjdG9yeVJlc3VsdF0gPSBhd2FpdCB0aGlzLmxyR3JhcGhRTC5sck11dGF0ZShbXG4gICAgICAgIGNyZWF0ZURpcmVjdG9yeSxcbiAgICAgICAgdXBkYXRlTG9jayxcbiAgICAgIF0pO1xuXG4gICAgICBjb25zdCB7IGlkLCBrZXlJZCB9ID0gY3JlYXRlRGlyZWN0b3J5UmVzdWx0LmNyZWF0ZURpcmVjdG9yeS5kaXJlY3Rvcnk7XG5cbiAgICAgIHRoaXMudGVtcERpcmVjdG9yeSA9IHtcbiAgICAgICAgaWQsXG4gICAgICAgIGtleUlkLFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUmV0dXJuIGV4aXN0aW5nIHRlbXBcbiAgICAgIGNvbnN0IHsgaWQsIGtleUlkIH0gPSBleGlzdGluZy5yb290RGlyZWN0b3JpZXMuZWRnZXNbMF0ubm9kZTtcblxuICAgICAgdGhpcy50ZW1wRGlyZWN0b3J5ID0ge1xuICAgICAgICBpZCxcbiAgICAgICAga2V5SWQsXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnRlbXBEaXJlY3Rvcnk7XG4gIH1cblxuICBhc3luYyBjcmVhdGVEaXJlY3RvcnlXaXRoU3RhZ2luZyhvcHRpb25zOiBDcmVhdGVEaXJlY3RvcnlXaXRoU3RhZ2luZ09wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5tdXRhdGUodGhpcy5jcmVhdGVEaXJlY3RvcnlXaXRoU3RhZ2luZ011dGF0aW9uKG9wdGlvbnMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBZb3UgbXVzdCBydW4gdGhpcyBtdXRhdGlvbiB3aXRoaW4gdGhlIHRlbXAgZGlyZWN0b3J5IGNsZWFudXAgd2luZG93IG9uIHRoZVxuICAgKiBzZXJ2ZXIsIG90aGVyd2lzZSB0aGUgdGVtcCBkaXJlY3Rvcnkgd2lsbCBnZXQgY2xlYW5lZCB1cC5cbiAgICpcbiAgICovXG4gIGFzeW5jIGNyZWF0ZURpcmVjdG9yeVdpdGhTdGFnaW5nTXV0YXRpb24oXG4gICAgb3B0aW9uczogQ3JlYXRlRGlyZWN0b3J5V2l0aFN0YWdpbmdPcHRpb25zXG4gICkge1xuICAgIGNvbnN0IHRlbXBEaXIgPSBhd2FpdCB0aGlzLmVuc3VyZVRlbXBEaXJlY3RvcnkoKTtcblxuICAgIC8vIENsZWFyIHRoZSB0ZW1wIGRpcmVjdG9yeSBvZiB0aGUgb25lcyB3ZSBhcmUgYWJvdXQgdG8gY3JlYXRlLlxuICAgIC8vIE5PVEU6IHRoaXMgbXV0YXRpb24gY2FuIG5vdCBiZSBtZXJnZWQgaW50byBhIHNpbmdsZSBtdXRhdGlvbiB3aXRoIHRoZVxuICAgIC8vIHRoZSBjcmVhdGVEaXJlY3RvcnkgbXV0YXRpb24gYmVjYXVzZSBpdCB1c2VzIHRoZSBjdXJyZW50IHNlcnZlciB0aW1lIHRvXG4gICAgLy8gY2xlYW4gdXAuIFNvIGl0IG11c3Qgc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlIGJlZm9yZSB0aGUgY3JlYXRpb24gb2YgdGhlXG4gICAgLy8gZGlyZWN0b3JpZXMuXG4gICAgYXdhaXQgdGhpcy5iZWdpbkRlbGV0ZUNoaWxkSXRlbUxpbmtzV2luZG93KHtcbiAgICAgIGRpcmVjdG9yeUlkOiB0ZW1wRGlyLmlkLFxuICAgICAgcmVxdWVzdFdpbmRvd01zOiBvcHRpb25zLnJlcXVlc3RXaW5kb3dNcyxcbiAgICB9KTtcblxuICAgIC8vIENyZWF0ZSB0aGUgZGlyZWN0b3J5IHRoYXQgaGFzIGNvbnRlbnRzXG4gICAgY29uc3QgZGlyZWN0b3J5ID0gKFxuICAgICAgYXdhaXQgdGhpcy5jcmVhdGVEaXJlY3Rvcnkoe1xuICAgICAgICBjaXBoZXJNZXRhQ2xlYXJKc29uOiBvcHRpb25zLmNpcGhlck1ldGFDbGVhckpzb24sXG4gICAgICAgIHBhcmVudERpcmVjdG9yaWVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgZGlyZWN0b3J5SWQ6IHRlbXBEaXIuaWQsXG4gICAgICAgICAgICB3cmFwcGluZ0tleUlkOiB0ZW1wRGlyLmtleUlkLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIHBsYWluTWV0YUpzb246IG9wdGlvbnMucGxhaW5NZXRhSnNvbixcbiAgICAgIH0pXG4gICAgKS5jcmVhdGVEaXJlY3RvcnkuZGlyZWN0b3J5O1xuXG4gICAgLy8gQ2FsbCBiYWNrIHdpdGggaXRlbSB0aGF0J3MgY3VycmVudGx5IGluIHN0YWdpbmcuXG4gICAgYXdhaXQgb3B0aW9ucy5vbkNyZWF0ZWRJblN0YWdpbmcoe1xuICAgICAgaWQ6IGRpcmVjdG9yeS5pZCxcbiAgICAgIGtleUlkOiBkaXJlY3Rvcnkua2V5SWQsXG4gICAgfSk7XG5cbiAgICAvLyBUT0RPIGNsaWVudC1zaWRlIGNoZWNrIGZvciB0aW1lb3V0IG9uIHJlcXVlc3RXaW5kb3dNc1xuICAgIC8vIFRPRE8gcmV0dXJuIHRoZSBzZXJ2ZXIgdGltZSB3aGVyZSBkZWxldGUgaXMgc2NoZWR1bGVkLiBFeHBpcmFibGUgbXV0YXRpb25cblxuICAgIC8vIFJldHVybiB0aGUgbXV0YXRpb24gdGhhdCBtb3ZlcyB0aGUgZGlyZWN0b3J5IGludG8gdGhlIGRzdCBkaXJlY3Rvcmllc1xuICAgIHJldHVybiB0aGlzLmNoYW5nZURpcmVjdG9yeVBhcmVudHNNdXRhdGlvbih7XG4gICAgICBkaXJlY3RvcnlJZDogZGlyZWN0b3J5LmlkLFxuICAgICAgZGlyZWN0b3J5S2V5SWQ6IGRpcmVjdG9yeS5rZXlJZCxcbiAgICAgIHBhcmVudHNUb1JlbW92ZTogW3RlbXBEaXIuaWRdLFxuICAgICAgcGFyZW50c1RvQWRkOiBvcHRpb25zLnBhcmVudERpcmVjdG9yaWVzLFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlRmlsZVdpdGhTdGFnaW5nKG9wdGlvbnM6IENyZWF0ZUZpbGVXaXRoU3RhZ2luZ09wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5tdXRhdGUodGhpcy5jcmVhdGVGaWxlV2l0aFN0YWdpbmdNdXRhdGlvbihvcHRpb25zKSk7XG4gIH1cblxuICBhc3luYyBjcmVhdGVGaWxlV2l0aFN0YWdpbmdNdXRhdGlvbihvcHRpb25zOiBDcmVhdGVGaWxlV2l0aFN0YWdpbmdPcHRpb25zKSB7XG4gICAgY29uc3QgdGVtcERpciA9IGF3YWl0IHRoaXMuZW5zdXJlVGVtcERpcmVjdG9yeSgpO1xuXG4gICAgLy8gQ2xlYXIgdGhlIHRlbXAgZGlyZWN0b3J5IG9mIHRoZSBvbmVzIHdlIGFyZSBhYm91dCB0byBjcmVhdGUuXG4gICAgLy8gTk9URTogdGhpcyBtdXRhdGlvbiBjYW4gbm90IGJlIG1lcmdlZCBpbnRvIGEgc2luZ2xlIG11dGF0aW9uIHdpdGggdGhlXG4gICAgLy8gdGhlIGNyZWF0ZURpcmVjdG9yeSBtdXRhdGlvbiBiZWNhdXNlIGl0IHVzZXMgdGhlIGN1cnJlbnQgc2VydmVyIHRpbWUgdG9cbiAgICAvLyBjbGVhbiB1cC4gU28gaXQgbXVzdCBzdWNjZXNzZnVsbHkgY29tcGxldGUgYmVmb3JlIHRoZSBjcmVhdGlvbiBvZiB0aGVcbiAgICAvLyBkaXJlY3Rvcmllcy5cbiAgICBhd2FpdCB0aGlzLmJlZ2luRGVsZXRlQ2hpbGRJdGVtTGlua3NXaW5kb3coe1xuICAgICAgZGlyZWN0b3J5SWQ6IHRlbXBEaXIuaWQsXG4gICAgICByZXF1ZXN0V2luZG93TXM6IG9wdGlvbnMucmVxdWVzdFdpbmRvd01zLFxuICAgIH0pO1xuXG4gICAgLy8gQ3JlYXRlIHRoZSBmaWxlXG4gICAgY29uc3QgZmlsZSA9IChcbiAgICAgIGF3YWl0IHRoaXMuY3JlYXRlRmlsZSh7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIHBhcmVudERpcmVjdG9yaWVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgZGlyZWN0b3J5SWQ6IHRlbXBEaXIuaWQsXG4gICAgICAgICAgICB3cmFwcGluZ0tleUlkOiB0ZW1wRGlyLmtleUlkLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9KVxuICAgICkuY3JlYXRlRmlsZS5maWxlO1xuXG4gICAgLy8gQ2FsbCBiYWNrIHdpdGggaXRlbSB0aGF0J3MgY3VycmVudGx5IGluIHN0YWdpbmcuXG4gICAgYXdhaXQgb3B0aW9ucy5vbkNyZWF0ZWRJblN0YWdpbmcoe1xuICAgICAgaWQ6IGZpbGUuaWQsXG4gICAgICBrZXlJZDogZmlsZS5rZXlJZCxcbiAgICB9KTtcblxuICAgIC8vIFRPRE8gY2xpZW50LXNpZGUgY2hlY2sgZm9yIHRpbWVvdXQgb24gcmVxdWVzdFdpbmRvd01zXG4gICAgLy8gVE9ETyByZXR1cm4gdGhlIHNlcnZlciB0aW1lIHdoZXJlIGRlbGV0ZSBpcyBzY2hlZHVsZWQuIEV4cGlyYWJsZSBtdXRhdGlvblxuXG4gICAgLy8gUmV0dXJuIHRoZSBtdXRhdGlvbiB0aGF0IG1vdmVzIHRoZSBkaXJlY3RvcnkgaW50byB0aGUgZHN0IGRpcmVjdG9yaWVzXG4gICAgcmV0dXJuIHRoaXMuY2hhbmdlRmlsZVBhcmVudHNNdXRhdGlvbih7XG4gICAgICBmaWxlSWQ6IGZpbGUuaWQsXG4gICAgICBmaWxlS2V5SWQ6IGZpbGUua2V5SWQsXG4gICAgICBwYXJlbnRzVG9SZW1vdmU6IFt0ZW1wRGlyLmlkXSxcbiAgICAgIHBhcmVudHNUb0FkZDogb3B0aW9ucy5wYXJlbnREaXJlY3RvcmllcyxcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHNldEZpbGVDb25maWRlbnRpYWwob3B0aW9uczogU2V0RmlsZUNvbmZpZGVudGlhbE9wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5tdXRhdGUodGhpcy5zZXRGaWxlQ29uZmlkZW50aWFsTXV0YXRpb24ob3B0aW9ucykpO1xuICB9XG5cbiAgYXN5bmMgc2V0RmlsZUNvbmZpZGVudGlhbE11dGF0aW9uKG9wdGlvbnM6IFNldEZpbGVDb25maWRlbnRpYWxPcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBMck11dGF0aW9uKHtcbiAgICAgIG11dGF0aW9uOiBTZXRGaWxlQ29uZmlkZW50aWFsTXV0YXRpb24sXG4gICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgaW5wdXQ6IHtcbiAgICAgICAgICBmaWxlSWQ6IG9wdGlvbnMuZmlsZUlkLFxuICAgICAgICAgIGNvbmZpZGVudGlhbDogb3B0aW9ucy5jb25maWRlbnRpYWwsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgc2V0RGlyZWN0b3J5Q29uZmlkZW50aWFsKG9wdGlvbnM6IFNldERpcmVjdG9yeUNvbmZpZGVudGlhbE9wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5tdXRhdGUodGhpcy5zZXREaXJlY3RvcnlDb25maWRlbnRpYWxNdXRhdGlvbihvcHRpb25zKSk7XG4gIH1cblxuICBhc3luYyBzZXREaXJlY3RvcnlDb25maWRlbnRpYWxNdXRhdGlvbihcbiAgICBvcHRpb25zOiBTZXREaXJlY3RvcnlDb25maWRlbnRpYWxPcHRpb25zXG4gICkge1xuICAgIHJldHVybiBuZXcgTHJNdXRhdGlvbih7XG4gICAgICBtdXRhdGlvbjogU2V0RGlyZWN0b3J5Q29uZmlkZW50aWFsTXV0YXRpb24sXG4gICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgaW5wdXQ6IHtcbiAgICAgICAgICBkaXJlY3RvcnlJZDogb3B0aW9ucy5kaXJlY3RvcnlJZCxcbiAgICAgICAgICBjb25maWRlbnRpYWw6IG9wdGlvbnMuY29uZmlkZW50aWFsLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gSGVscGVyc1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgcHJpdmF0ZSBhc3luYyBwcmVwYXJlUGFyZW50RGlyZWN0b3J5KFxuICAgIG9wdGlvbnM6IFBhcmVudERpcmVjdG9yeU9wdGlvbnMsXG4gICAgbmV3S2V5OiBKV0suS2V5XG4gICk6IFByb21pc2U8UGFyZW50RGlyZWN0b3J5SW5wdXQ+IHtcbiAgICBjb25zdCB7IGRpcmVjdG9yeUlkLCBsaW5rVHlwZSwgd3JhcHBpbmdLZXlJZCB9ID0gb3B0aW9ucztcblxuICAgIGlmIChsaW5rVHlwZSA9PSBMaW5rVHlwZUZpZWxkLlJFRkVSRU5DRSkge1xuICAgICAgaWYgKHdyYXBwaW5nS2V5SWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEtjQmFkQXJndW1lbnRFeGNlcHRpb24oXG4gICAgICAgICAgJ0RvIG5vdCBzcGVjaWZ5IHdyYXBwaW5nS2V5SWQgd2hlbiBsaW5rIHR5cGUgaXMgUkVGRVJFTkNFLidcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRpcmVjdG9yeUlkLFxuICAgICAgICBsaW5rVHlwZSxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIGRpcmVjdG9yeSdzIGtleSBpcyBub3QgYWxyZWFkeSBpbiB0aGUga2V5IGdyYXBoLCB0aGVuIG5lZWQgdG9cbiAgICAgIC8vIGZldGNoIHRoZSBkaXJlY3RvcnkncyBrZXkuXG4gICAgICBjb25zdCB3cmFwcGluZ0tleSA9IGF3YWl0IHRoaXMuZ2V0RGlyZWN0b3J5S2V5KFxuICAgICAgICBkaXJlY3RvcnlJZCxcbiAgICAgICAgd3JhcHBpbmdLZXlJZFxuICAgICAgKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGlyZWN0b3J5SWQsXG4gICAgICAgIHdyYXBwaW5nS2V5SWQ6IHdyYXBwaW5nS2V5LmlkLFxuICAgICAgICB3cmFwcGVkS2V5OiBhd2FpdCB0aGlzLmtleUdyYXBoLndyYXBLZXkod3JhcHBpbmdLZXksIG5ld0tleSksXG4gICAgICAgIGxpbmtUeXBlLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldEZpbGVTdGF0ZUtleUlkKGZpbGVTdGF0ZU5vZGVJZDogTHJSZWxheUlkSW5wdXQpIHtcbiAgICByZXR1cm4gKFxuICAgICAgYXdhaXQgdGhpcy5xdWVyeSh7XG4gICAgICAgIHF1ZXJ5OiBGaWxlU3RhdGVLZXlRdWVyeSxcbiAgICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgICAgaWQ6IGZpbGVTdGF0ZU5vZGVJZCxcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgKS5maWxlU3RhdGUua2V5SWQ7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByZXBhcmVDcmVhdGVGaWxlU3RhdGUoXG4gICAgZmlsZUtleTogSldLLktleSxcbiAgICBvcHRpb25zOiBDcmVhdGVGaWxlT3B0aW9ucyB8IFVwZGF0ZUZpbGVPcHRpb25zXG4gICkge1xuICAgIC8vIEVhY2ggdmVyc2lvbiBvZiB0aGUgZmlsZSBpcyBlbmNyeXB0ZWQgdXNpbmcgYSBuZXcga2V5LlxuICAgIGNvbnN0IGZpbGVTdGF0ZUtleSA9IGF3YWl0IHRoaXMua2V5RmFjdG9yeS5jcmVhdGVLZXkoKTtcblxuICAgIGNvbnN0IGZpbGVDb250ZW50ID1cbiAgICAgIG9wdGlvbnMuZmlsZSAmJiAoYXdhaXQgdGhpcy5maWxlVXBsb2FkU2VydmljZS5sb2FkRmlsZShvcHRpb25zLmZpbGUpKTtcblxuICAgIGxldCBjb250ZW50UmVzb3VyY2U6IHN0cmluZztcbiAgICBpZiAoZmlsZUNvbnRlbnQpIHtcbiAgICAgIGNvbnN0IGNpcGhlckZpbGVDb250ZW50ID0gYXdhaXQgdGhpcy5rZXlHcmFwaC5lbmNyeXB0VG9TdHJpbmcoXG4gICAgICAgIGZpbGVTdGF0ZUtleSxcbiAgICAgICAgZmlsZUNvbnRlbnRcbiAgICAgICk7XG4gICAgICBpZiAob3B0aW9ucy51cGxvYWQpIHtcbiAgICAgICAgY29udGVudFJlc291cmNlID0gYXdhaXQgb3B0aW9ucy51cGxvYWQoY2lwaGVyRmlsZUNvbnRlbnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29udGVudFJlc291cmNlID0gYXdhaXQgdGhpcy5maWxlVXBsb2FkU2VydmljZS51cGxvYWRFbmNyeXB0ZWRGaWxlKHtcbiAgICAgICAgICBlbmNyeXB0ZWRDb250ZW50OiBjaXBoZXJGaWxlQ29udGVudCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLihhd2FpdCB0aGlzLnByZXBhcmVJdGVtKGZpbGVTdGF0ZUtleSwgb3B0aW9ucykpLFxuICAgICAgd3JhcHBlZFN0YXRlS2V5OiBhd2FpdCB0aGlzLmtleUdyYXBoLndyYXBLZXkoZmlsZUtleSwgZmlsZVN0YXRlS2V5KSxcbiAgICAgIGNvbnRlbnRSZXNvdXJjZSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwcmVwYXJlQ2hhbmdlSXRlbVBhcmVudHMoXG4gICAgb3B0aW9uczogQ2hhbmdlSXRlbVBhcmVudHNPcHRpb25zLFxuICAgIGl0ZW1LZXk6IEpXSy5LZXlcbiAgKSB7XG4gICAgY29uc3QgcGFyZW50c1RvQWRkID0gb3B0aW9ucy5wYXJlbnRzVG9BZGRcbiAgICAgID8gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgb3B0aW9ucy5wYXJlbnRzVG9BZGQubWFwKCh0KSA9PlxuICAgICAgICAgICAgdGhpcy5wcmVwYXJlUGFyZW50RGlyZWN0b3J5KHQsIGl0ZW1LZXkpXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICA6IFtdO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRpcmVjdG9yaWVzVG9SZW1vdmU6IG9wdGlvbnMucGFyZW50c1RvUmVtb3ZlIHx8IFtdLFxuICAgICAgZGlyZWN0b3JpZXNUb0FkZDogcGFyZW50c1RvQWRkLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByZXBhcmVJdGVtKFxuICAgIGtleTogSldLLktleSxcbiAgICBvcHRpb25zOiB7IHBsYWluTWV0YUpzb24/OiBKU09OT2JqZWN0OyBjaXBoZXJNZXRhQ2xlYXJKc29uPzogSlNPTk9iamVjdCB9XG4gICkge1xuICAgIGNvbnN0IHsgcGxhaW5NZXRhSnNvbiwgY2lwaGVyTWV0YUNsZWFySnNvbiB9ID0gb3B0aW9ucztcblxuICAgIHJldHVybiB7XG4gICAgICBwbGFpbk1ldGE6IHBsYWluTWV0YUpzb24gJiYgSlNPTi5zdHJpbmdpZnkocGxhaW5NZXRhSnNvbiksXG4gICAgICBjaXBoZXJNZXRhOlxuICAgICAgICBjaXBoZXJNZXRhQ2xlYXJKc29uICYmXG4gICAgICAgIChhd2FpdCB0aGlzLmtleUdyYXBoLmVuY3J5cHRUb1N0cmluZyhrZXksIGNpcGhlck1ldGFDbGVhckpzb24pKSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwcmVwYXJlQ3JlYXRlRGlyZWN0b3J5KG9wdGlvbnM6IENyZWF0ZURpcmVjdG9yeU9wdGlvbnMpIHtcbiAgICBjb25zdCBkaXJlY3RvcnlLZXkgPSBhd2FpdCB0aGlzLmtleUZhY3RvcnkuY3JlYXRlS2V5KCk7XG4gICAgb3B0aW9ucy5wYXJlbnREaXJlY3RvcmllcyA9IG9wdGlvbnMucGFyZW50RGlyZWN0b3JpZXMgfHwgW107XG4gICAgaWYgKCFvcHRpb25zLmFzUm9vdERpcmVjdG9yeSAmJiAhb3B0aW9ucy5wYXJlbnREaXJlY3Rvcmllcz8ubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgS2NCYWRBcmd1bWVudEV4Y2VwdGlvbihcbiAgICAgICAgJ0EgbmV3IGRpcmVjdG9yeSBtdXN0IGJlIGVpdGhlciBhIHJvb3QgZGlyZWN0b3J5IG9yIGEgc3ViLWRpcmVjdG9yeS4gU28geW91IG11c3QgcHJvdmlkZSBlaXRoZXIgcGFyZW50RGlyZWN0b3JpZXMgb3IgYXNSb290RGlyZWN0b3J5IHBhcmFtZXRlci4nXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmFzUm9vdERpcmVjdG9yeSAmJiBvcHRpb25zLnBhcmVudERpcmVjdG9yaWVzPy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBLY0JhZEFyZ3VtZW50RXhjZXB0aW9uKFxuICAgICAgICAnQSBuZXcgZGlyZWN0b3J5IG11c3QgYmUgZWl0aGVyIGEgcm9vdCBkaXJlY3Rvcnkgb3IgYSBzdWItZGlyZWN0b3J5LiBTbyB5b3UgY2FuIG9ubHkgcHJvdmlkZSBlaXRoZXIgcGFyZW50RGlyZWN0b3JpZXMgb3IgYXNSb290RGlyZWN0b3J5IHBhcmFtZXRlci4nXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcmVudERpcmVjdG9yaWVzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBvcHRpb25zLnBhcmVudERpcmVjdG9yaWVzPy5tYXAoKHQpID0+XG4gICAgICAgIHRoaXMucHJlcGFyZVBhcmVudERpcmVjdG9yeSh0LCBkaXJlY3RvcnlLZXkpXG4gICAgICApXG4gICAgKTtcblxuICAgIC8vIFRPRE8gdGhpcyBpcyByYXRoZXIgYW4gdW5mb3J0dW5hdGUgbmFtZSwgY2hhbmdlIGl0IHRvIGFzUm9vdERpcmVjdG9yeS5cbiAgICBsZXQgcGFyZW50Um9vdERpcmVjdG9yeTogUGFyZW50Um9vdERpcmVjdG9yeUlucHV0O1xuICAgIGlmIChvcHRpb25zLmFzUm9vdERpcmVjdG9yeSkge1xuICAgICAgY29uc3Qgcm9vdEtleSA9IHRoaXMua2V5U2VydmljZS5jdXJyZW50Um9vdEtleTtcbiAgICAgIHBhcmVudFJvb3REaXJlY3RvcnkgPSB7XG4gICAgICAgIHdyYXBwaW5nS2V5SWQ6IHJvb3RLZXkuaWQsXG4gICAgICAgIHdyYXBwZWRLZXk6IGF3YWl0IHRoaXMua2V5R3JhcGgud3JhcEtleShyb290S2V5LCBkaXJlY3RvcnlLZXkpLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBpdGVtSW5wdXQgPSBhd2FpdCB0aGlzLnByZXBhcmVJdGVtKGRpcmVjdG9yeUtleSwgb3B0aW9ucyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uaXRlbUlucHV0LFxuICAgICAgcGFyZW50RGlyZWN0b3JpZXMsXG4gICAgICBwYXJlbnRSb290RGlyZWN0b3J5LFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByZXBhcmVVcGRhdGVEaXJlY3Rvcnkob3B0aW9uczogVXBkYXRlRGlyZWN0b3J5T3B0aW9ucykge1xuICAgIGNvbnN0IGRpcmVjdG9yeUtleSA9IGF3YWl0IHRoaXMuZ2V0RGlyZWN0b3J5S2V5KFxuICAgICAgb3B0aW9ucy5kaXJlY3RvcnlJZCxcbiAgICAgIG9wdGlvbnMuZGlyZWN0b3J5S2V5SWRcbiAgICApO1xuXG4gICAgY29uc3QgaXRlbUlucHV0ID0gYXdhaXQgdGhpcy5wcmVwYXJlSXRlbShkaXJlY3RvcnlLZXkuandrLCBvcHRpb25zKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5pdGVtSW5wdXQsXG4gICAgICBkaXJlY3RvcnlJZDogb3B0aW9ucy5kaXJlY3RvcnlJZCxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwcmVwYXJlQ3JlYXRlRmlsZShvcHRpb25zOiBDcmVhdGVGaWxlT3B0aW9ucykge1xuICAgIGNvbnN0IGZpbGVLZXkgPSBhd2FpdCB0aGlzLmtleUZhY3RvcnkuY3JlYXRlS2V5KCk7XG5cbiAgICBjb25zdCBwYXJlbnREaXJlY3RvcmllcyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgb3B0aW9ucy5wYXJlbnREaXJlY3Rvcmllcy5tYXAoKHQpID0+XG4gICAgICAgIHRoaXMucHJlcGFyZVBhcmVudERpcmVjdG9yeSh0LCBmaWxlS2V5KVxuICAgICAgKVxuICAgICk7XG5cbiAgICBjb25zdCBpbnB1dCA9IGF3YWl0IHRoaXMucHJlcGFyZUNyZWF0ZUZpbGVTdGF0ZShmaWxlS2V5LCBvcHRpb25zKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5pbnB1dCxcbiAgICAgIHBhcmVudERpcmVjdG9yaWVzLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByZXBhcmVVcGRhdGVGaWxlKG9wdGlvbnM6IFVwZGF0ZUZpbGVPcHRpb25zKSB7XG4gICAgY29uc3QgZmlsZUtleSA9IGF3YWl0IHRoaXMuZ2V0RmlsZUtleShvcHRpb25zLmZpbGVJZCwgb3B0aW9ucy5maWxlS2V5SWQpO1xuICAgIGNvbnN0IGlucHV0ID0gYXdhaXQgdGhpcy5wcmVwYXJlQ3JlYXRlRmlsZVN0YXRlKGZpbGVLZXkuandrLCBvcHRpb25zKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5pbnB1dCxcbiAgICAgIGZpbGVJZDogb3B0aW9ucy5maWxlSWQsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJlcGFyZUNoYW5nZURpcmVjdG9yeVBhcmVudHMoXG4gICAgb3B0aW9uczogQ2hhbmdlRGlyZWN0b3J5UGFyZW50c09wdGlvbnNcbiAgKSB7XG4gICAgY29uc3QgZGlyZWN0b3J5S2V5ID0gYXdhaXQgdGhpcy5nZXREaXJlY3RvcnlLZXkoXG4gICAgICBvcHRpb25zLmRpcmVjdG9yeUlkLFxuICAgICAgb3B0aW9ucy5kaXJlY3RvcnlLZXlJZFxuICAgICk7XG5cbiAgICBjb25zdCBpbnB1dCA9IGF3YWl0IHRoaXMucHJlcGFyZUNoYW5nZUl0ZW1QYXJlbnRzKFxuICAgICAgb3B0aW9ucyxcbiAgICAgIGRpcmVjdG9yeUtleS5qd2tcbiAgICApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmlucHV0LFxuICAgICAgZGlyZWN0b3J5SWQ6IG9wdGlvbnMuZGlyZWN0b3J5SWQsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJlcGFyZUNoYW5nZUZpbGVQYXJlbnRzKG9wdGlvbnM6IENoYW5nZUZpbGVQYXJlbnRzT3B0aW9ucykge1xuICAgIGNvbnN0IGZpbGVLZXkgPSBhd2FpdCB0aGlzLmdldEZpbGVLZXkob3B0aW9ucy5maWxlSWQsIG9wdGlvbnMuZmlsZUtleUlkKTtcblxuICAgIGNvbnN0IGlucHV0ID0gYXdhaXQgdGhpcy5wcmVwYXJlQ2hhbmdlSXRlbVBhcmVudHMob3B0aW9ucywgZmlsZUtleS5qd2spO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmlucHV0LFxuICAgICAgZmlsZUlkOiBvcHRpb25zLmZpbGVJZCxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBvbkxvZ291dCgpIHtcbiAgICAvLyBDbGVhciBhbGwgY2FjaGVkIGRhdGEuXG4gICAgdGhpcy50ZW1wRGlyZWN0b3J5ID0gbnVsbDtcbiAgfVxufVxuIl19
|
|
662
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXRlbS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zcmMvbGliL2l0ZW0vaXRlbS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTdELE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDMUQsT0FBTyxFQUFrQixhQUFhLEVBQWtCLE1BQU0sY0FBYyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbkQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbkUsT0FBTyxFQUNMLHdCQUF3QixFQUN4QixtQkFBbUIsRUFDbkIsdUNBQXVDLEVBQ3ZDLDhCQUE4QixFQUM5Qix5QkFBeUIsRUFDekIsdUJBQXVCLEVBQ3ZCLGtCQUFrQixFQUNsQix1QkFBdUIsRUFDdkIsa0JBQWtCLEVBQ2xCLGtCQUFrQixFQUNsQixnQ0FBZ0MsRUFDaEMsMkJBQTJCLEVBQzNCLGtCQUFrQixFQUNsQiwwQkFBMEIsRUFD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QyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFM0QsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsd0JBQXdCLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUV4RSx1Q0FDSyxLQUFLLEtBQ1IsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLElBQ2Y7UUFDSixDQUFDO0tBQUE7SUFFTyxRQUFRO1FBQ2QseUJBQXlCO1FBQ3pCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO0lBQzVCLENBQUM7Q0FDRixDQUFBO0FBeHVCUSxxQ0FBeUIsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQztBQUMvQyw0Q0FBZ0MsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3ZELE1BQU0sRUFBRTtRQUNOO1lBQ0UsUUFBUSxFQUFFLGFBQVcsQ0FBQyx5QkFBeUI7U0FDaEQ7S0FDRjtDQUNGLENBQUMsQ0FBQzs7O1lBNUJKLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7O1lBbkU4QixNQUFNO1lBQWhCLFFBQVE7WUFLcEIsaUJBQWlCO1lBR2pCLFVBQVU7WUFGVixpQkFBaUI7WUFDakIsZUFBZTtZQUdmLFdBQVc7WUFOWCxXQUFXOztBQWdFUCxXQUFXO0lBTnZCLGlCQUFpQixDQUFDO1FBQ2pCLFVBQVUsRUFBRSxRQUFRO0tBQ3JCLENBQUM7R0FJVyxXQUFXLENBMHZCdkI7U0ExdkJZLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciwgTmdab25lIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBKV0sgfSBmcm9tICdub2RlLWpvc2UnO1xuaW1wb3J0IHsgTHJNdXRhdGlvbiwgTHJTZXJ2aWNlIH0gZnJvbSAnLi4vYXBpL2xyLWdyYXBocWwnO1xuaW1wb3J0IHsgSUQsIEpTT05PYmplY3QsIExpbmtUeXBlRmllbGQsIExyUmVsYXlJZElucHV0IH0gZnJvbSAnLi4vYXBpL3R5cGVzJztcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vYXV0aC9hdXRoLnNlcnZpY2UnO1xuaW1wb3J0IHsgRmlsZVVwbG9hZFNlcnZpY2UgfSBmcm9tICcuLi9maWxlLXVwbG9hZC9maWxlLXVwbG9hZC5zZXJ2aWNlJztcbmltcG9ydCB7IEtleUZhY3RvcnlTZXJ2aWNlIH0gZnJvbSAnLi4va2V5L2tleS1mYWN0b3J5LnNlcnZpY2UnO1xuaW1wb3J0IHsgS2V5R3JhcGhTZXJ2aWNlIH0gZnJvbSAnLi4va2V5L2tleS1ncmFwaC5zZXJ2aWNlJztcbmltcG9ydCB7IEtleVNlcnZpY2UgfSBmcm9tICcuLi9rZXkva2V5LnNlcnZpY2UnO1xuaW1wb3J0IHsgUGF5bG9hZFR5cGUgfSBmcm9tICcuLi9rZXkva2V5LnR5cGVzJztcbmltcG9ydCB7IExvY2tTZXJ2aWNlIH0gZnJvbSAnLi4vbG9jay9sb2NrLnNlcnZpY2UnO1xuaW1wb3J0IHsgS2NCYWRBcmd1bWVudEV4Y2VwdGlvbiB9IGZyb20gJy4uL19jb21tb24vZXhjZXB0aW9ucyc7XG5pbXBvcnQgeyBSdW5PdXRzaWRlQW5ndWxhciB9IGZyb20gJy4uL19jb21tb24vcnVuLW91dHNpZGUtYW5ndWxhcic7XG5pbXBvcnQge1xuICBBcmNoaXZlRGlyZWN0b3J5TXV0YXRpb24sXG4gIEFyY2hpdmVGaWxlTXV0YXRpb24sXG4gIEJlZ2luRGVsZXRlQ2hpbGRJdGVtTGlua3NXaW5kb3dNdXRhdGlvbixcbiAgQ2hhbmdlRGlyZWN0b3J5UGFyZW50c011dGF0aW9uLFxuICBDaGFuZ2VGaWxlUGFyZW50c011dGF0aW9uLFxuICBDcmVhdGVEaXJlY3RvcnlNdXRhdGlvbixcbiAgQ3JlYXRlRmlsZU11dGF0aW9uLFxuICBEZWxldGVEaXJlY3RvcnlNdXRhdGlvbixcbiAgRGVsZXRlRmlsZU11dGF0aW9uLFxuICBSZXZlcnRGaWxlTXV0YXRpb24sXG4gIFNldERpcmVjdG9yeUNvbmZpZGVudGlhbE11dGF0aW9uLFxuICBTZXRGaWxlQ29uZmlkZW50aWFsTXV0YXRpb24sXG4gIFRlbXBEaXJlY3RvcnlRdWVyeSxcbiAgVW5hcmNoaXZlRGlyZWN0b3J5TXV0YXRpb24sXG4gIFVuYXJjaGl2ZUZpbGVNdXRhdGlvbixcbiAgVXBkYXRlRGlyZWN0b3J5TXV0YXRpb24sXG4gIFVwZGF0ZUZpbGVNdXRhdGlvbixcbn0gZnJvbSAnLi9pdGVtLmdxbCc7XG5pbXBvcnQge1xuICBEaXJlY3RvcnlLZXlGcm9tRGlyZWN0b3J5U2hhcmVRdWVyeSxcbiAgRGlyZWN0b3J5S2V5UXVlcnksXG4gIEZpbGVLZXlGcm9tRmlsZVNoYXJlUXVlcnksXG4gIEZpbGVLZXlRdWVyeSxcbiAgRmlsZVN0YXRlS2V5UXVlcnksXG59IGZyb20gJy4vaXRlbS5ncWwucHJpdmF0ZSc7XG5pbXBvcnQge1xuICBBcmNoaXZlRGlyZWN0b3J5T3B0aW9ucyxcbiAgQmVnaW5EZWxldGVDaGlsZEl0ZW1MaW5rc1dpbmRvd09wdGlvbnMsXG4gIENoYW5nZURpcmVjdG9yeVBhcmVudHNPcHRpb25zLFxuICBDaGFuZ2VGaWxlUGFyZW50c09wdGlvbnMsXG4gIENoYW5nZUl0ZW1QYXJlbnRzT3B0aW9ucyxcbiAgQ3JlYXRlRGlyZWN0b3J5T3B0aW9ucyxcbiAgQ3JlYXRlRGlyZWN0b3J5V2l0aFN0YWdpbmdPcHRpb25zLFxuICBDcmVhdGVGaWxlT3B0aW9ucyxcbiAgQ3JlYXRlRmlsZVdpdGhTdGFnaW5nT3B0aW9ucyxcbiAgRG93bmxvYWRGaWxlQ29udGVudE9wdGlvbnMsXG4gIElkS2V5UGFpcixcbiAgUGFyZW50RGlyZWN0b3J5SW5wdXQsXG4gIFBhcmVudERpcmVjdG9yeU9wdGlvbnMsXG4gIFBhcmVudFJvb3REaXJlY3RvcnlJbnB1dCxcbiAgUmV2ZXJ0RmlsZU9wdGlvbnMsXG4gIFNldERpcmVjdG9yeUNvbmZpZGVudGlhbE9wdGlvbnMsXG4gIFNldEZpbGVDb25maWRlbnRpYWxPcHRpb25zLFxuICBVbmFyY2hpdmVEaXJlY3RvcnlPcHRpb25zLFxuICBVcGRhdGVEaXJlY3RvcnlPcHRpb25zLFxuICBVcGRhdGVGaWxlT3B0aW9ucyxcbn0gZnJvbSAnLi9pdGVtLnR5cGVzJztcblxuQFJ1bk91dHNpZGVBbmd1bGFyKHtcbiAgbmdab25lTmFtZTogJ25nWm9uZScsXG59KVxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEl0ZW1TZXJ2aWNlIGV4dGVuZHMgTHJTZXJ2aWNlIHtcbiAgLy8gQ2FjaGluZyB0aGUgdGVtcCBkaXJlY3RvcnkuXG4gIHByaXZhdGUgdGVtcERpcmVjdG9yeTogSWRLZXlQYWlyID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxuICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIHByaXZhdGUgZmlsZVVwbG9hZFNlcnZpY2U6IEZpbGVVcGxvYWRTZXJ2aWNlLFxuICAgIHByaXZhdGUga2V5U2VydmljZTogS2V5U2VydmljZSxcbiAgICBwcml2YXRlIGtleUZhY3Rvcnk6IEtleUZhY3RvcnlTZXJ2aWNlLFxuICAgIHByaXZhdGUga2V5R3JhcGg6IEtleUdyYXBoU2VydmljZSxcbiAgICBwcml2YXRlIGxvY2tTZXJ2aWNlOiBMb2NrU2VydmljZSxcbiAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZVxuICApIHtcbiAgICBzdXBlcihpbmplY3Rvcik7XG4gICAgdGhpcy5hdXRoU2VydmljZS5hZGRMb2dvdXRMaXN0ZW5lcigoKSA9PiB0aGlzLm9uTG9nb3V0KCkpO1xuICB9XG5cbiAgc3RhdGljIFRFTVBfRElSRUNUT1JZX1BMQUlOX01FVEEgPSB7IGtjVHlwZTogJ3RlbXAnIH07XG4gIHN0YXRpYyBURU1QX0RJUkVDVE9SWV9QTEFJTl9NRVRBX0ZJTFRFUiA9IEpTT04uc3RyaW5naWZ5KHtcbiAgICBmaWx0ZXI6IFtcbiAgICAgIHtcbiAgICAgICAgY29udGFpbnM6IEl0ZW1TZXJ2aWNlLlRFTVBfRElSRUNUT1JZX1BMQUlOX01FVEEsXG4gICAgICB9LFxuICAgIF0sXG4gIH0pO1xuXG4gIGFzeW5jIGRvd25sb2FkRmlsZUNvbnRlbnQoXG4gICAgb3B0aW9uczogRG93bmxvYWRGaWxlQ29udGVudE9wdGlvbnNcbiAgKTogUHJvbWlzZTxVaW50OEFycmF5PiB7XG4gICAgY29uc3QgZmlsZUNvbnRlbnQgPSBhd2FpdCB0aGlzLmZpbGVVcGxvYWRTZXJ2aWNlLmRvd25sb2FkRW5jcnlwdGVkRmlsZShcbiAgICAgIG9wdGlvbnMuZmlsZVN0YXRlTm9kZUlkXG4gICAgKTtcblxuICAgIGNvbnN0IGZpbGVTdGF0ZUtleSA9IGF3YWl0IHRoaXMua2V5R3JhcGguZ2V0S2V5KFxuICAgICAgb3B0aW9ucy5maWxlU3RhdGVLZXlJZCxcbiAgICAgICgpID0+IHRoaXMuZ2V0RmlsZVN0YXRlS2V5SWQob3B0aW9ucy5maWxlU3RhdGVOb2RlSWQpXG4gICAgKTtcblxuICAgIHJldHVybiB0aGlzLmtleUdyYXBoLmRlY3J5cHRGcm9tU3RyaW5nKGZpbGVTdGF0ZUtleSwgZmlsZUNvbnRlbnQsIHtcbiAgICAgIHBheWxvYWRUeXBlOiBQYXlsb2FkVHlwZS5VSU5UXzhfQVJSQVksXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBnZXREaXJlY3RvcnlLZXlJZChkaXJlY3RvcnlJZDogTHJSZWxheUlkSW5wdXQpIHtcbiAgICByZXR1cm4gKFxuICAgICAgYXdhaXQgdGhpcy5xdWVyeSh7XG4gICAgICAgIHF1ZXJ5OiBEaXJlY3RvcnlLZXlRdWVyeSxcbiAgICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgICAgaWQ6IGRpcmVjdG9yeUlkLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICApLmRpcmVjdG9yeS5rZXlJZDtcbiAgfVxuXG4gIGFzeW5jIGdldEZpbGVLZXlJZChmaWxlSWQ6IExyUmVsYXlJZElucHV0KSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGF3YWl0IHRoaXMucXVlcnkoe1xuICAgICAgICBxdWVyeTogRmlsZUtleVF1ZXJ5LFxuICAgICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgICBpZDogZmlsZUlkLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICApLmZpbGUua2V5SWQ7XG4gIH1cblxuICBhc3luYyBnZXREaXJlY3RvcnlLZXlJZEZyb21EaXJlY3RvcnlTaGFyZShkaXJlY3RvcnlTaGFyZUlkOiBMclJlbGF5SWRJbnB1dCkge1xuICAgIHJldHVybiAoXG4gICAgICBhd2FpdCB0aGlzLnF1ZXJ5KHtcbiAgICAgICAgcXVlcnk6IERpcmVjdG9yeUtleUZyb21EaXJlY3RvcnlTaGFyZVF1ZXJ5LFxuICAgICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgICBpZDogZGlyZWN0b3J5U2hhcmVJZCxcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgKS5kaXJlY3RvcnlTaGFyZS5pdGVtLmtleUlkO1xuICB9XG5cbiAgYXN5bmMgZ2V0RmlsZUtleUlkRnJvbUZpbGVTaGFyZShmaWxlU2hhcmVJZDogTHJSZWxheUlkSW5wdXQpIHtcbiAgICByZXR1cm4gKFxuICAgICAgYXdhaXQgdGhpcy5xdWVyeSh7XG4gICAgICAgIHF1ZXJ5OiBGaWxlS2V5RnJvbUZpbGVTaGFyZVF1ZXJ5LFxuICAgICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgICBpZDogZmlsZVNoYXJlSWQsXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgICkuZmlsZVNoYXJlLml0ZW0ua2V5SWQ7XG4gIH1cblxuICBhc3luYyBnZXREaXJlY3RvcnlLZXkoXG4gICAgZGlyZWN0b3J5SWQ6IExyUmVsYXlJZElucHV0LFxuICAgIGRpcmVjdG9yeUtleUlkPzogTHJSZWxheUlkSW5wdXRcbiAgKSB7XG4gICAgcmV0dXJuIHRoaXMua2V5R3JhcGguZ2V0S2V5KGRpcmVjdG9yeUtleUlkLCAoKSA9PlxuICAgICAgdGhpcy5nZXREaXJlY3RvcnlLZXlJZChkaXJlY3RvcnlJZClcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgZ2V0RmlsZUtleShmaWxlSWQ6IExyUmVsYXlJZElucHV0LCBmaWxlS2V5SWQ/OiBMclJlbGF5SWRJbnB1dCkge1xuICAgIHJldHVybiB0aGlzLmtleUdyYXBoLmdldEtleShmaWxlS2V5SWQsICgpID0+IHRoaXMuZ2V0RmlsZUtleUlkKGZpbGVJZCkpO1xuICB9XG5cbiAgY3JlYXRlRGlyZWN0b3J5KG9wdGlvbnM6IENyZWF0ZURpcmVjdG9yeU9wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5tdXRhdGUodGhpcy5jcmVhdGVEaXJlY3RvcnlNdXRhdGlvbihvcHRpb25zKSk7XG4gIH1cblxuICBhc3luYyBjcmVhdGVEaXJlY3RvcnlNdXRhdGlvbihvcHRpb25zOiBDcmVhdGVEaXJlY3RvcnlPcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBMck11dGF0aW9uKHtcbiAgICAgIG11dGF0aW9uOiBDcmVhdGVEaXJlY3RvcnlNdXRhdGlvbixcbiAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICBpbnB1dDogYXdhaXQgdGhpcy5wcmVwYXJlQ3JlYXRlRGlyZWN0b3J5KG9wdGlvbnMpLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHVwZGF0ZURpcmVjdG9yeShvcHRpb25zOiBVcGRhdGVEaXJlY3RvcnlPcHRpb25zKSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRlKHRoaXMudXBkYXRlRGlyZWN0b3J5TXV0YXRpb24ob3B0aW9ucykpO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlRGlyZWN0b3J5TXV0YXRpb24ob3B0aW9uczogVXBkYXRlRGlyZWN0b3J5T3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgTHJNdXRhdGlvbih7XG4gICAgICBtdXRhdGlvbjogVXBkYXRlRGlyZWN0b3J5TXV0YXRpb24sXG4gICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgaW5wdXQ6IGF3YWl0IHRoaXMucHJlcGFyZVVwZGF0ZURpcmVjdG9yeShvcHRpb25zKSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBkZWxldGVEaXJlY3RvcnkoaWQ6IElEKSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRlKHRoaXMuZGVsZXRlRGlyZWN0b3J5TXV0YXRpb24oaWQpKTtcbiAgfVxuXG4gIGRlbGV0ZURpcmVjdG9yeU11dGF0aW9uKGlkOiBJRCkge1xuICAgIHJldHVybiBuZXcgTHJNdXRhdGlvbih7XG4gICAgICBtdXRhdGlvbjogRGVsZXRlRGlyZWN0b3J5TXV0YXRpb24sXG4gICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgaW5wdXQ6IHtcbiAgICAgICAgICBkaXJlY3RvcnlJZDogaWQsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgY3JlYXRlRmlsZShvcHRpb25zOiBDcmVhdGVGaWxlT3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLm11dGF0ZSh0aGlzLmNyZWF0ZUZpbGVNdXRhdGlvbihvcHRpb25zKSk7XG4gIH1cblxuICBhc3luYyBjcmVhdGVGaWxlTXV0YXRpb24ob3B0aW9uczogQ3JlYXRlRmlsZU9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IExyTXV0YXRpb24oe1xuICAgICAgbXV0YXRpb246IENyZWF0ZUZpbGVNdXRhdGlvbixcbiAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICBpbnB1dDogYXdhaXQgdGhpcy5wcmVwYXJlQ3JlYXRlRmlsZShvcHRpb25zKSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICB1cGRhdGVGaWxlKG9wdGlvbnM6IFVwZGF0ZUZpbGVPcHRpb25zKSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRlKHRoaXMudXBkYXRlRmlsZU11dGF0aW9uKG9wdGlvbnMpKTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZUZpbGVNdXRhdGlvbihvcHRpb25zOiBVcGRhdGVGaWxlT3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgTHJNdXRhdGlvbih7XG4gICAgICBtdXRhdGlvbjogVXBkYXRlRmlsZU11dGF0aW9uLFxuICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgIGlucHV0OiBhd2FpdCB0aGlzLnByZXBhcmVVcGRhdGVGaWxlKG9wdGlvbnMpLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHJldmVydEZpbGUob3B0aW9uczogUmV2ZXJ0RmlsZU9wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5tdXRhdGUodGhpcy5yZXZlcnRGaWxlTXV0YXRpb24ob3B0aW9ucykpO1xuICB9XG5cbiAgYXN5bmMgcmV2ZXJ0RmlsZU11dGF0aW9uKG9wdGlvbnM6IFJldmVydEZpbGVPcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBMck11dGF0aW9uKHtcbiAgICAgIG11dGF0aW9uOiBSZXZlcnRGaWxlTXV0YXRpb24sXG4gICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgaW5wdXQ6IG9wdGlvbnMsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgZGVsZXRlRmlsZShpZDogSUQpIHtcbiAgICByZXR1cm4gdGhpcy5tdXRhdGUodGhpcy5kZWxldGVGaWxlTXV0YXRpb24oaWQpKTtcbiAgfVxuXG4gIGRlbGV0ZUZpbGVNdXRhdGlvbihpZDogSUQpIHtcbiAgICByZXR1cm4gbmV3IExyTXV0YXRpb24oe1xuICAgICAgbXV0YXRpb246IERlbGV0ZUZpbGVNdXRhdGlvbixcbiAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICBpbnB1dDoge1xuICAgICAgICAgIGZpbGVJZDogaWQsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgYXJjaGl2ZURpcmVjdG9yeShkaXJlY3RvcnlJZDogc3RyaW5nLCBvcHRpb25zOiBBcmNoaXZlRGlyZWN0b3J5T3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLm11dGF0ZSh0aGlzLmFyY2hpdmVEaXJlY3RvcnlNdXRhdGlvbihkaXJlY3RvcnlJZCwgb3B0aW9ucykpO1xuICB9XG5cbiAgYXJjaGl2ZURpcmVjdG9yeU11dGF0aW9uKFxuICAgIGRpcmVjdG9yeUlkOiBzdHJpbmcsXG4gICAgb3B0aW9uczogQXJjaGl2ZURpcmVjdG9yeU9wdGlvbnNcbiAgKSB7XG4gICAgcmV0dXJuIG5ldyBMck11dGF0aW9uKHtcbiAgICAgIG11dGF0aW9uOiBBcmNoaXZlRGlyZWN0b3J5TXV0YXRpb24sXG4gICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgaW5wdXQ6IHtcbiAgICAgICAgICBkaXJlY3RvcnlJZCxcbiAgICAgICAgICByZWN1cnNpdmU6IG9wdGlvbnMucmVjdXJzaXZlLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGFyY2hpdmVGaWxlKGZpbGVJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRlKHRoaXMuYXJjaGl2ZUZpbGVNdXRhdGlvbihmaWxlSWQpKTtcbiAgfVxuXG4gIGFyY2hpdmVGaWxlTXV0YXRpb24oZmlsZUlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IExyTXV0YXRpb24oe1xuICAgICAgbXV0YXRpb246IEFyY2hpdmVGaWxlTXV0YXRpb24sXG4gICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgaW5wdXQ6IHtcbiAgICAgICAgICBmaWxlSWQsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgdW5hcmNoaXZlRGlyZWN0b3J5KGRpcmVjdG9yeUlkOiBzdHJpbmcsIG9wdGlvbnM6IFVuYXJjaGl2ZURpcmVjdG9yeU9wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5tdXRhdGUodGhpcy51bmFyY2hpdmVEaXJlY3RvcnlNdXRhdGlvbihkaXJlY3RvcnlJZCwgb3B0aW9ucykpO1xuICB9XG5cbiAgdW5hcmNoaXZlRGlyZWN0b3J5TXV0YXRpb24oXG4gICAgZGlyZWN0b3J5SWQ6IHN0cmluZyxcbiAgICBvcHRpb25zOiBVbmFyY2hpdmVEaXJlY3RvcnlPcHRpb25zXG4gICkge1xuICAgIHJldHVybiBuZXcgTHJNdXRhdGlvbih7XG4gICAgICBtdXRhdGlvbjogVW5hcmNoaXZlRGlyZWN0b3J5TXV0YXRpb24sXG4gICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgaW5wdXQ6IHtcbiAgICAgICAgICBkaXJlY3RvcnlJZCxcbiAgICAgICAgICByZWN1cnNpdmU6IG9wdGlvbnMucmVjdXJzaXZlLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHVuYXJjaGl2ZUZpbGUoZmlsZUlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5tdXRhdGUodGhpcy51bmFyY2hpdmVGaWxlTXV0YXRpb24oZmlsZUlkKSk7XG4gIH1cblxuICB1bmFyY2hpdmVGaWxlTXV0YXRpb24oZmlsZUlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IExyTXV0YXRpb24oe1xuICAgICAgbXV0YXRpb246IFVuYXJjaGl2ZUZpbGVNdXRhdGlvbixcbiAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICBpbnB1dDoge1xuICAgICAgICAgIGZpbGVJZCxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBjaGFuZ2VEaXJlY3RvcnlQYXJlbnRzKG9wdGlvbnM6IENoYW5nZURpcmVjdG9yeVBhcmVudHNPcHRpb25zKSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRlKHRoaXMuY2hhbmdlRGlyZWN0b3J5UGFyZW50c011dGF0aW9uKG9wdGlvbnMpKTtcbiAgfVxuXG4gIGFzeW5jIGNoYW5nZURpcmVjdG9yeVBhcmVudHNNdXRhdGlvbihvcHRpb25zOiBDaGFuZ2VEaXJlY3RvcnlQYXJlbnRzT3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgTHJNdXRhdGlvbih7XG4gICAgICBtdXRhdGlvbjogQ2hhbmdlRGlyZWN0b3J5UGFyZW50c011dGF0aW9uLFxuICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgIGlucHV0OiBhd2FpdCB0aGlzLnByZXBhcmVDaGFuZ2VEaXJlY3RvcnlQYXJlbnRzKG9wdGlvbnMpLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGNoYW5nZUZpbGVQYXJlbnRzKG9wdGlvbnM6IENoYW5nZUZpbGVQYXJlbnRzT3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLm11dGF0ZSh0aGlzLmNoYW5nZUZpbGVQYXJlbnRzTXV0YXRpb24ob3B0aW9ucykpO1xuICB9XG5cbiAgYXN5bmMgY2hhbmdlRmlsZVBhcmVudHNNdXRhdGlvbihvcHRpb25zOiBDaGFuZ2VGaWxlUGFyZW50c09wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IExyTXV0YXRpb24oe1xuICAgICAgbXV0YXRpb246IENoYW5nZUZpbGVQYXJlbnRzTXV0YXRpb24sXG4gICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgaW5wdXQ6IGF3YWl0IHRoaXMucHJlcGFyZUNoYW5nZUZpbGVQYXJlbnRzKG9wdGlvbnMpLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGJlZ2luRGVsZXRlQ2hpbGRJdGVtTGlua3NXaW5kb3coXG4gICAgb3B0aW9uczogQmVnaW5EZWxldGVDaGlsZEl0ZW1MaW5rc1dpbmRvd09wdGlvbnNcbiAgKSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRlKHRoaXMuYmVnaW5EZWxldGVDaGlsZEl0ZW1MaW5rc1dpbmRvd011dGF0aW9uKG9wdGlvbnMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTY2hlZHVsZSBjbGVhbnVwIG9mIHRoZSBoYXJkIGxpbmtzIGluIGEgZGlyZWN0b3J5LlxuICAgKiBUaGUgc2VydmVyIHdpbGwgZGVsZXRlIGFsbCBoYXJkIGxpbmsgd2l0aGluIHRoZSBkaXJlY3Rvcnkgd2l0aGluIGEgdGltZSB3aW5kb3c6IHN0YXJ0aW5nIGZyb20gbm93IGFuZFxuICAgKiBlbmRpbmcgYXQgcmVxdWVzdFdpbmRvd01zIGFmdGVyIG5vdy5cbiAgICogVGhlIHNlcnZlciBkZWNpZGVzIF93aGVuXyBpdCB3aWxsIHBlcmZvcm0gdGhlIGRlbGV0ZS4gSXQncyBub3QgZ3VhcmFudGVlZCB0aGF0IGl0IHdpbGwgcGVyZm9ybVxuICAgKiB0aGUgZGVsZXRlIGF0IFwibm93ICsgcmVxdWVzdFdpbmRvd01zXCIsIGJ1dCBpdCB3aWxsIGhhcHBlbiBhdCBzb21lIHRpbWUgYWZ0ZXIgXCJub3cgKyByZXF1ZXN0V2luZG93TXNcIi5cbiAgICogVGhpcyBhbGxvd3MgbXVsdGlwbGUgb3ZlcmxhcHBpbmcgY2FsbHMgdG8gdGhpcyBmdW5jdGlvbiBhbmQgdGhlIHNlcnZlciBhbGxvY2F0ZXMgZW5vdWdoIGZvciBlYWNoIHJlcXVlc3QuXG4gICAqIFRoZSBzZXJ2ZXIgaGFzIGEgc2V0dGluZyB0aGF0IGFsbG93cyBmb3IgYSBtYXhpbXVtIHZhbHVlIG9uIHJlcXVlc3RXaW5kb3dNcy4gSWYgdGhlIHJlcXVlc3RlZCB2YWx1ZVxuICAgKiBpcyBsYXJnZXIgdGhhbiB0aGlzIG1heGltdW0sIHRoZSBjYWxsIHdpbGwgZmFpbC5cbiAgICovXG4gIGFzeW5jIGJlZ2luRGVsZXRlQ2hpbGRJdGVtTGlua3NXaW5kb3dNdXRhdGlvbihcbiAgICBvcHRpb25zOiBCZWdpbkRlbGV0ZUNoaWxkSXRlbUxpbmtzV2luZG93T3B0aW9uc1xuICApIHtcbiAgICByZXR1cm4gbmV3IExyTXV0YXRpb24oe1xuICAgICAgbXV0YXRpb246IEJlZ2luRGVsZXRlQ2hpbGRJdGVtTGlua3NXaW5kb3dNdXRhdGlvbixcbiAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICBpbnB1dDogb3B0aW9ucyxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogVGhpcyBtZXRob2QgbWF5IHJhaXNlIFZFUlNJT05fTUlTTUFUQ0ggZXhjZXB0aW9uIGlmIHRoZXJlIGlzIGEgcmFjZSBjb25kaXRpb25cbiAgICogd2hlbiBtdWx0aXBsZSBjbGllbnRzIHRyeSB0byBjcmVhdGUgdGhlIHRlbXAgZGlyZWN0b3J5LlxuICAgKlxuICAgKiBUT0RPIFRoZXJlIGlzIGEgcmV0cnkgbWVjaGFuaXNtIGluIGdyYXBocWwgd2l0aCBleHBvbmVudGlhbCBiYWNrIG9mZiBidXQgdGhhdCdzIGludGVybmFsLlxuICAgKiBCdXQgbmVlZCB0byB1c2UgYW4gZXhwb25lbnRpYWwgYmFjayBvZmYgbGliIGlmIHdlIHdhbnQgdG8gcmV0cnkgaGVyZS5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIElEIG9mIHRoZSB0ZW1wIGRpcmVjdG9yeVxuICAgKlxuICAgKi9cbiAgYXN5bmMgZW5zdXJlVGVtcERpcmVjdG9yeSgpOiBQcm9taXNlPElkS2V5UGFpcj4ge1xuICAgIGlmICh0aGlzLnRlbXBEaXJlY3RvcnkpIHtcbiAgICAgIHJldHVybiB0aGlzLnRlbXBEaXJlY3Rvcnk7XG4gICAgfVxuXG4gICAgY29uc3QgZXhpc3RpbmcgPSBhd2FpdCB0aGlzLnF1ZXJ5KHtcbiAgICAgIHF1ZXJ5OiBUZW1wRGlyZWN0b3J5UXVlcnksXG4gICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgcGxhaW5NZXRhOiBJdGVtU2VydmljZS5URU1QX0RJUkVDVE9SWV9QTEFJTl9NRVRBX0ZJTFRFUixcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBpZiAoZXhpc3Rpbmcucm9vdERpcmVjdG9yaWVzLmVkZ2VzLmxlbmd0aCA+IDEpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgIGBUaGVyZSBpcyBtb3JlIHRoYW4gMSB0ZW1wIGRpcmVjdG9yeSAocGxhaW5NZXRhIGZpbHRlcjogJHtJdGVtU2VydmljZS5URU1QX0RJUkVDVE9SWV9QTEFJTl9NRVRBX0ZJTFRFUn0pYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoZXhpc3Rpbmcucm9vdERpcmVjdG9yaWVzLmVkZ2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy8gRG9lc24ndCBleGlzdCB5ZXQsIGNyZWF0ZSBpdFxuICAgICAgY29uc3QgY3JlYXRlRGlyZWN0b3J5ID0gYXdhaXQgdGhpcy5jcmVhdGVEaXJlY3RvcnlNdXRhdGlvbih7XG4gICAgICAgIGFzUm9vdERpcmVjdG9yeTogdHJ1ZSxcbiAgICAgICAgcGxhaW5NZXRhSnNvbjogSXRlbVNlcnZpY2UuVEVNUF9ESVJFQ1RPUllfUExBSU5fTUVUQSxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBPcHRpbWlzdGljIGxvY2sgb24gdGhlIGN1cnJlbnQgdXNlci5cbiAgICAgIGNvbnN0IHVwZGF0ZUxvY2sgPSB0aGlzLmxvY2tTZXJ2aWNlLnVwZGF0ZUxvY2tNdXRhdGlvbih7XG4gICAgICAgIHZlcnNpb246IGV4aXN0aW5nLmxvY2s/LnZlcnNpb24sXG4gICAgICB9KTtcblxuICAgICAgLy8gQmVjYXVzZSB0aGlzLm11dGF0ZSgpIG9ubHkgaGFuZGxlcyBzaW1wbGUgdHlwZXMgd2UgbmVlZCB0byB1c2UgdGhlIG1vcmVcbiAgICAgIC8vIGFkdmFuY2VkIHRoaXMubHJHcmFwaFFMLmxyTXV0YXRlKClcbiAgICAgIGNvbnN0IFtjcmVhdGVEaXJlY3RvcnlSZXN1bHRdID0gYXdhaXQgdGhpcy5sckdyYXBoUUwubHJNdXRhdGUoW1xuICAgICAgICBjcmVhdGVEaXJlY3RvcnksXG4gICAgICAgIHVwZGF0ZUxvY2ssXG4gICAgICBdKTtcblxuICAgICAgY29uc3QgeyBpZCwga2V5SWQgfSA9IGNyZWF0ZURpcmVjdG9yeVJlc3VsdC5jcmVhdGVEaXJlY3RvcnkuZGlyZWN0b3J5O1xuXG4gICAgICB0aGlzLnRlbXBEaXJlY3RvcnkgPSB7XG4gICAgICAgIGlkLFxuICAgICAgICBrZXlJZCxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJldHVybiBleGlzdGluZyB0ZW1wXG4gICAgICBjb25zdCB7IGlkLCBrZXlJZCB9ID0gZXhpc3Rpbmcucm9vdERpcmVjdG9yaWVzLmVkZ2VzWzBdLm5vZGU7XG5cbiAgICAgIHRoaXMudGVtcERpcmVjdG9yeSA9IHtcbiAgICAgICAgaWQsXG4gICAgICAgIGtleUlkLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy50ZW1wRGlyZWN0b3J5O1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlRGlyZWN0b3J5V2l0aFN0YWdpbmcob3B0aW9uczogQ3JlYXRlRGlyZWN0b3J5V2l0aFN0YWdpbmdPcHRpb25zKSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRlKHRoaXMuY3JlYXRlRGlyZWN0b3J5V2l0aFN0YWdpbmdNdXRhdGlvbihvcHRpb25zKSk7XG4gIH1cblxuICAvKipcbiAgICogWW91IG11c3QgcnVuIHRoaXMgbXV0YXRpb24gd2l0aGluIHRoZSB0ZW1wIGRpcmVjdG9yeSBjbGVhbnVwIHdpbmRvdyBvbiB0aGVcbiAgICogc2VydmVyLCBvdGhlcndpc2UgdGhlIHRlbXAgZGlyZWN0b3J5IHdpbGwgZ2V0IGNsZWFuZWQgdXAuXG4gICAqXG4gICAqL1xuICBhc3luYyBjcmVhdGVEaXJlY3RvcnlXaXRoU3RhZ2luZ011dGF0aW9uKFxuICAgIG9wdGlvbnM6IENyZWF0ZURpcmVjdG9yeVdpdGhTdGFnaW5nT3B0aW9uc1xuICApIHtcbiAgICBjb25zdCB0ZW1wRGlyID0gYXdhaXQgdGhpcy5lbnN1cmVUZW1wRGlyZWN0b3J5KCk7XG5cbiAgICAvLyBDbGVhciB0aGUgdGVtcCBkaXJlY3Rvcnkgb2YgdGhlIG9uZXMgd2UgYXJlIGFib3V0IHRvIGNyZWF0ZS5cbiAgICAvLyBOT1RFOiB0aGlzIG11dGF0aW9uIGNhbiBub3QgYmUgbWVyZ2VkIGludG8gYSBzaW5nbGUgbXV0YXRpb24gd2l0aCB0aGVcbiAgICAvLyB0aGUgY3JlYXRlRGlyZWN0b3J5IG11dGF0aW9uIGJlY2F1c2UgaXQgdXNlcyB0aGUgY3VycmVudCBzZXJ2ZXIgdGltZSB0b1xuICAgIC8vIGNsZWFuIHVwLiBTbyBpdCBtdXN0IHN1Y2Nlc3NmdWxseSBjb21wbGV0ZSBiZWZvcmUgdGhlIGNyZWF0aW9uIG9mIHRoZVxuICAgIC8vIGRpcmVjdG9yaWVzLlxuICAgIGF3YWl0IHRoaXMuYmVnaW5EZWxldGVDaGlsZEl0ZW1MaW5rc1dpbmRvdyh7XG4gICAgICBkaXJlY3RvcnlJZDogdGVtcERpci5pZCxcbiAgICAgIHJlcXVlc3RXaW5kb3dNczogb3B0aW9ucy5yZXF1ZXN0V2luZG93TXMsXG4gICAgfSk7XG5cbiAgICAvLyBDcmVhdGUgdGhlIGRpcmVjdG9yeSB0aGF0IGhhcyBjb250ZW50c1xuICAgIGNvbnN0IGRpcmVjdG9yeSA9IChcbiAgICAgIGF3YWl0IHRoaXMuY3JlYXRlRGlyZWN0b3J5KHtcbiAgICAgICAgY2lwaGVyTWV0YUNsZWFySnNvbjogb3B0aW9ucy5jaXBoZXJNZXRhQ2xlYXJKc29uLFxuICAgICAgICBwYXJlbnREaXJlY3RvcmllczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGRpcmVjdG9yeTogdGVtcERpcixcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBwbGFpbk1ldGFKc29uOiBvcHRpb25zLnBsYWluTWV0YUpzb24sXG4gICAgICB9KVxuICAgICkuY3JlYXRlRGlyZWN0b3J5LmRpcmVjdG9yeTtcblxuICAgIC8vIENhbGwgYmFjayB3aXRoIGl0ZW0gdGhhdCdzIGN1cnJlbnRseSBpbiBzdGFnaW5nLlxuICAgIGF3YWl0IG9wdGlvbnMub25DcmVhdGVkSW5TdGFnaW5nKHtcbiAgICAgIGlkOiBkaXJlY3RvcnkuaWQsXG4gICAgICBrZXlJZDogZGlyZWN0b3J5LmtleUlkLFxuICAgIH0pO1xuXG4gICAgLy8gVE9ETyBjbGllbnQtc2lkZSBjaGVjayBmb3IgdGltZW91dCBvbiByZXF1ZXN0V2luZG93TXNcbiAgICAvLyBUT0RPIHJldHVybiB0aGUgc2VydmVyIHRpbWUgd2hlcmUgZGVsZXRlIGlzIHNjaGVkdWxlZC4gRXhwaXJhYmxlIG11dGF0aW9uXG5cbiAgICAvLyBSZXR1cm4gdGhlIG11dGF0aW9uIHRoYXQgbW92ZXMgdGhlIGRpcmVjdG9yeSBpbnRvIHRoZSBkc3QgZGlyZWN0b3JpZXNcbiAgICByZXR1cm4gdGhpcy5jaGFuZ2VEaXJlY3RvcnlQYXJlbnRzTXV0YXRpb24oe1xuICAgICAgZGlyZWN0b3J5SWQ6IGRpcmVjdG9yeS5pZCxcbiAgICAgIGRpcmVjdG9yeUtleUlkOiBkaXJlY3Rvcnkua2V5SWQsXG4gICAgICBwYXJlbnRzVG9SZW1vdmU6IFt0ZW1wRGlyLmlkXSxcbiAgICAgIHBhcmVudHNUb0FkZDogb3B0aW9ucy5wYXJlbnREaXJlY3RvcmllcyxcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZUZpbGVXaXRoU3RhZ2luZyhvcHRpb25zOiBDcmVhdGVGaWxlV2l0aFN0YWdpbmdPcHRpb25zKSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRlKHRoaXMuY3JlYXRlRmlsZVdpdGhTdGFnaW5nTXV0YXRpb24ob3B0aW9ucykpO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlRmlsZVdpdGhTdGFnaW5nTXV0YXRpb24ob3B0aW9uczogQ3JlYXRlRmlsZVdpdGhTdGFnaW5nT3B0aW9ucykge1xuICAgIGNvbnN0IHRlbXBEaXIgPSBhd2FpdCB0aGlzLmVuc3VyZVRlbXBEaXJlY3RvcnkoKTtcblxuICAgIC8vIENsZWFyIHRoZSB0ZW1wIGRpcmVjdG9yeSBvZiB0aGUgb25lcyB3ZSBhcmUgYWJvdXQgdG8gY3JlYXRlLlxuICAgIC8vIE5PVEU6IHRoaXMgbXV0YXRpb24gY2FuIG5vdCBiZSBtZXJnZWQgaW50byBhIHNpbmdsZSBtdXRhdGlvbiB3aXRoIHRoZVxuICAgIC8vIHRoZSBjcmVhdGVEaXJlY3RvcnkgbXV0YXRpb24gYmVjYXVzZSBpdCB1c2VzIHRoZSBjdXJyZW50IHNlcnZlciB0aW1lIHRvXG4gICAgLy8gY2xlYW4gdXAuIFNvIGl0IG11c3Qgc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlIGJlZm9yZSB0aGUgY3JlYXRpb24gb2YgdGhlXG4gICAgLy8gZGlyZWN0b3JpZXMuXG4gICAgYXdhaXQgdGhpcy5iZWdpbkRlbGV0ZUNoaWxkSXRlbUxpbmtzV2luZG93KHtcbiAgICAgIGRpcmVjdG9yeUlkOiB0ZW1wRGlyLmlkLFxuICAgICAgcmVxdWVzdFdpbmRvd01zOiBvcHRpb25zLnJlcXVlc3RXaW5kb3dNcyxcbiAgICB9KTtcblxuICAgIC8vIENyZWF0ZSB0aGUgZmlsZVxuICAgIGNvbnN0IGZpbGUgPSAoXG4gICAgICBhd2FpdCB0aGlzLmNyZWF0ZUZpbGUoe1xuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICBwYXJlbnREaXJlY3RvcmllczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGRpcmVjdG9yeTogdGVtcERpcixcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSlcbiAgICApLmNyZWF0ZUZpbGUuZmlsZTtcblxuICAgIC8vIENhbGwgYmFjayB3aXRoIGl0ZW0gdGhhdCdzIGN1cnJlbnRseSBpbiBzdGFnaW5nLlxuICAgIGF3YWl0IG9wdGlvbnMub25DcmVhdGVkSW5TdGFnaW5nKHtcbiAgICAgIGlkOiBmaWxlLmlkLFxuICAgICAga2V5SWQ6IGZpbGUua2V5SWQsXG4gICAgfSk7XG5cbiAgICAvLyBUT0RPIGNsaWVudC1zaWRlIGNoZWNrIGZvciB0aW1lb3V0IG9uIHJlcXVlc3RXaW5kb3dNc1xuICAgIC8vIFRPRE8gcmV0dXJuIHRoZSBzZXJ2ZXIgdGltZSB3aGVyZSBkZWxldGUgaXMgc2NoZWR1bGVkLiBFeHBpcmFibGUgbXV0YXRpb25cblxuICAgIC8vIFJldHVybiB0aGUgbXV0YXRpb24gdGhhdCBtb3ZlcyB0aGUgZGlyZWN0b3J5IGludG8gdGhlIGRzdCBkaXJlY3Rvcmllc1xuICAgIHJldHVybiB0aGlzLmNoYW5nZUZpbGVQYXJlbnRzTXV0YXRpb24oe1xuICAgICAgZmlsZSxcbiAgICAgIHBhcmVudHNUb1JlbW92ZTogW3RlbXBEaXIuaWRdLFxuICAgICAgcGFyZW50c1RvQWRkOiBvcHRpb25zLnBhcmVudERpcmVjdG9yaWVzLFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgc2V0RmlsZUNvbmZpZGVudGlhbChvcHRpb25zOiBTZXRGaWxlQ29uZmlkZW50aWFsT3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLm11dGF0ZSh0aGlzLnNldEZpbGVDb25maWRlbnRpYWxNdXRhdGlvbihvcHRpb25zKSk7XG4gIH1cblxuICBhc3luYyBzZXRGaWxlQ29uZmlkZW50aWFsTXV0YXRpb24ob3B0aW9uczogU2V0RmlsZUNvbmZpZGVudGlhbE9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IExyTXV0YXRpb24oe1xuICAgICAgbXV0YXRpb246IFNldEZpbGVDb25maWRlbnRpYWxNdXRhdGlvbixcbiAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICBpbnB1dDoge1xuICAgICAgICAgIGZpbGVJZDogb3B0aW9ucy5maWxlSWQsXG4gICAgICAgICAgY29uZmlkZW50aWFsOiBvcHRpb25zLmNvbmZpZGVudGlhbCxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBzZXREaXJlY3RvcnlDb25maWRlbnRpYWwob3B0aW9uczogU2V0RGlyZWN0b3J5Q29uZmlkZW50aWFsT3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLm11dGF0ZSh0aGlzLnNldERpcmVjdG9yeUNvbmZpZGVudGlhbE11dGF0aW9uKG9wdGlvbnMpKTtcbiAgfVxuXG4gIGFzeW5jIHNldERpcmVjdG9yeUNvbmZpZGVudGlhbE11dGF0aW9uKFxuICAgIG9wdGlvbnM6IFNldERpcmVjdG9yeUNvbmZpZGVudGlhbE9wdGlvbnNcbiAgKSB7XG4gICAgcmV0dXJuIG5ldyBMck11dGF0aW9uKHtcbiAgICAgIG11dGF0aW9uOiBTZXREaXJlY3RvcnlDb25maWRlbnRpYWxNdXRhdGlvbixcbiAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICBpbnB1dDoge1xuICAgICAgICAgIGRpcmVjdG9yeUlkOiBvcHRpb25zLmRpcmVjdG9yeUlkLFxuICAgICAgICAgIGNvbmZpZGVudGlhbDogb3B0aW9ucy5jb25maWRlbnRpYWwsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBIZWxwZXJzXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBwcml2YXRlIGFzeW5jIHByZXBhcmVQYXJlbnREaXJlY3RvcnkoXG4gICAgb3B0aW9uczogUGFyZW50RGlyZWN0b3J5T3B0aW9ucyxcbiAgICBuZXdLZXk6IEpXSy5LZXlcbiAgKTogUHJvbWlzZTxQYXJlbnREaXJlY3RvcnlJbnB1dD4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGRpcmVjdG9yeUlkOiBfZGlyZWN0b3J5SWQsXG4gICAgICB3cmFwcGluZ0tleUlkOiBfd3JhcHBpbmdLZXlJZCxcbiAgICAgIGxpbmtUeXBlLFxuICAgIH0gPSBvcHRpb25zO1xuXG4gICAgY29uc3QgZGlyZWN0b3J5OiBJZEtleVBhaXIgPSBvcHRpb25zLmRpcmVjdG9yeSB8fCB7XG4gICAgICBpZDogX2RpcmVjdG9yeUlkLFxuICAgICAga2V5SWQ6IF93cmFwcGluZ0tleUlkLFxuICAgIH07XG5cbiAgICBpZiAobGlua1R5cGUgPT0gTGlua1R5cGVGaWVsZC5SRUZFUkVOQ0UpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRpcmVjdG9yeUlkOiBkaXJlY3RvcnkuaWQsXG4gICAgICAgIGxpbmtUeXBlLFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSWYgZGlyZWN0b3J5J3Mga2V5IGlzIG5vdCBhbHJlYWR5IGluIHRoZSBrZXkgZ3JhcGgsIHRoZW4gbmVlZCB0b1xuICAgICAgLy8gZmV0Y2ggdGhlIGRpcmVjdG9yeSdzIGtleS5cbiAgICAgIGNvbnN0IHdyYXBwaW5nS2V5ID0gYXdhaXQgdGhpcy5nZXREaXJlY3RvcnlLZXkoXG4gICAgICAgIGRpcmVjdG9yeS5pZCxcbiAgICAgICAgZGlyZWN0b3J5LmtleUlkXG4gICAgICApO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBkaXJlY3RvcnlJZDogZGlyZWN0b3J5LmlkLFxuICAgICAgICB3cmFwcGluZ0tleUlkOiB3cmFwcGluZ0tleS5pZCxcbiAgICAgICAgd3JhcHBlZEtleTogYXdhaXQgdGhpcy5rZXlHcmFwaC53cmFwS2V5KHdyYXBwaW5nS2V5LCBuZXdLZXkpLFxuICAgICAgICBsaW5rVHlwZSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRGaWxlU3RhdGVLZXlJZChmaWxlU3RhdGVOb2RlSWQ6IExyUmVsYXlJZElucHV0KSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGF3YWl0IHRoaXMucXVlcnkoe1xuICAgICAgICBxdWVyeTogRmlsZVN0YXRlS2V5UXVlcnksXG4gICAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICAgIGlkOiBmaWxlU3RhdGVOb2RlSWQsXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgICkuZmlsZVN0YXRlLmtleUlkO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwcmVwYXJlQ3JlYXRlRmlsZVN0YXRlKFxuICAgIGZpbGVLZXk6IEpXSy5LZXksXG4gICAgb3B0aW9uczogQ3JlYXRlRmlsZU9wdGlvbnMgfCBVcGRhdGVGaWxlT3B0aW9uc1xuICApIHtcbiAgICAvLyBFYWNoIHZlcnNpb24gb2YgdGhlIGZpbGUgaXMgZW5jcnlwdGVkIHVzaW5nIGEgbmV3IGtleS5cbiAgICBjb25zdCBmaWxlU3RhdGVLZXkgPSBhd2FpdCB0aGlzLmtleUZhY3RvcnkuY3JlYXRlS2V5KCk7XG5cbiAgICBjb25zdCBmaWxlQ29udGVudCA9XG4gICAgICBvcHRpb25zLmZpbGUgJiYgKGF3YWl0IHRoaXMuZmlsZVVwbG9hZFNlcnZpY2UubG9hZEZpbGUob3B0aW9ucy5maWxlKSk7XG5cbiAgICBsZXQgY29udGVudFJlc291cmNlOiBzdHJpbmc7XG4gICAgaWYgKGZpbGVDb250ZW50KSB7XG4gICAgICBjb25zdCBjaXBoZXJGaWxlQ29udGVudCA9IGF3YWl0IHRoaXMua2V5R3JhcGguZW5jcnlwdFRvU3RyaW5nKFxuICAgICAgICBmaWxlU3RhdGVLZXksXG4gICAgICAgIGZpbGVDb250ZW50XG4gICAgICApO1xuICAgICAgaWYgKG9wdGlvbnMudXBsb2FkKSB7XG4gICAgICAgIGNvbnRlbnRSZXNvdXJjZSA9IGF3YWl0IG9wdGlvbnMudXBsb2FkKGNpcGhlckZpbGVDb250ZW50KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnRlbnRSZXNvdXJjZSA9IGF3YWl0IHRoaXMuZmlsZVVwbG9hZFNlcnZpY2UudXBsb2FkRW5jcnlwdGVkRmlsZSh7XG4gICAgICAgICAgZW5jcnlwdGVkQ29udGVudDogY2lwaGVyRmlsZUNvbnRlbnQsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi4oYXdhaXQgdGhpcy5wcmVwYXJlSXRlbShmaWxlU3RhdGVLZXksIG9wdGlvbnMpKSxcbiAgICAgIHdyYXBwZWRTdGF0ZUtleTogYXdhaXQgdGhpcy5rZXlHcmFwaC53cmFwS2V5KGZpbGVLZXksIGZpbGVTdGF0ZUtleSksXG4gICAgICBjb250ZW50UmVzb3VyY2UsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJlcGFyZUNoYW5nZUl0ZW1QYXJlbnRzKFxuICAgIG9wdGlvbnM6IENoYW5nZUl0ZW1QYXJlbnRzT3B0aW9ucyxcbiAgICBpdGVtS2V5OiBKV0suS2V5XG4gICkge1xuICAgIGNvbnN0IHBhcmVudHNUb0FkZCA9IG9wdGlvbnMucGFyZW50c1RvQWRkXG4gICAgICA/IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgIG9wdGlvbnMucGFyZW50c1RvQWRkLm1hcCgodCkgPT5cbiAgICAgICAgICAgIHRoaXMucHJlcGFyZVBhcmVudERpcmVjdG9yeSh0LCBpdGVtS2V5KVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgOiBbXTtcblxuICAgIHJldHVybiB7XG4gICAgICBkaXJlY3Rvcmllc1RvUmVtb3ZlOiBvcHRpb25zLnBhcmVudHNUb1JlbW92ZSB8fCBbXSxcbiAgICAgIGRpcmVjdG9yaWVzVG9BZGQ6IHBhcmVudHNUb0FkZCxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwcmVwYXJlSXRlbShcbiAgICBrZXk6IEpXSy5LZXksXG4gICAgb3B0aW9uczogeyBwbGFpbk1ldGFKc29uPzogSlNPTk9iamVjdDsgY2lwaGVyTWV0YUNsZWFySnNvbj86IEpTT05PYmplY3QgfVxuICApIHtcbiAgICBjb25zdCB7IHBsYWluTWV0YUpzb24sIGNpcGhlck1ldGFDbGVhckpzb24gfSA9IG9wdGlvbnM7XG5cbiAgICByZXR1cm4ge1xuICAgICAgcGxhaW5NZXRhOiBwbGFpbk1ldGFKc29uICYmIEpTT04uc3RyaW5naWZ5KHBsYWluTWV0YUpzb24pLFxuICAgICAgY2lwaGVyTWV0YTpcbiAgICAgICAgY2lwaGVyTWV0YUNsZWFySnNvbiAmJlxuICAgICAgICAoYXdhaXQgdGhpcy5rZXlHcmFwaC5lbmNyeXB0VG9TdHJpbmcoa2V5LCBjaXBoZXJNZXRhQ2xlYXJKc29uKSksXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJlcGFyZUNyZWF0ZURpcmVjdG9yeShvcHRpb25zOiBDcmVhdGVEaXJlY3RvcnlPcHRpb25zKSB7XG4gICAgY29uc3QgZGlyZWN0b3J5S2V5ID0gYXdhaXQgdGhpcy5rZXlGYWN0b3J5LmNyZWF0ZUtleSgpO1xuICAgIG9wdGlvbnMucGFyZW50RGlyZWN0b3JpZXMgPSBvcHRpb25zLnBhcmVudERpcmVjdG9yaWVzIHx8IFtdO1xuICAgIGlmICghb3B0aW9ucy5hc1Jvb3REaXJlY3RvcnkgJiYgIW9wdGlvbnMucGFyZW50RGlyZWN0b3JpZXM/Lmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEtjQmFkQXJndW1lbnRFeGNlcHRpb24oXG4gICAgICAgICdBIG5ldyBkaXJlY3RvcnkgbXVzdCBiZSBlaXRoZXIgYSByb290IGRpcmVjdG9yeSBvciBhIHN1Yi1kaXJlY3RvcnkuIFNvIHlvdSBtdXN0IHByb3ZpZGUgZWl0aGVyIHBhcmVudERpcmVjdG9yaWVzIG9yIGFzUm9vdERpcmVjdG9yeSBwYXJhbWV0ZXIuJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5hc1Jvb3REaXJlY3RvcnkgJiYgb3B0aW9ucy5wYXJlbnREaXJlY3Rvcmllcz8ubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgS2NCYWRBcmd1bWVudEV4Y2VwdGlvbihcbiAgICAgICAgJ0EgbmV3IGRpcmVjdG9yeSBtdXN0IGJlIGVpdGhlciBhIHJvb3QgZGlyZWN0b3J5IG9yIGEgc3ViLWRpcmVjdG9yeS4gU28geW91IGNhbiBvbmx5IHByb3ZpZGUgZWl0aGVyIHBhcmVudERpcmVjdG9yaWVzIG9yIGFzUm9vdERpcmVjdG9yeSBwYXJhbWV0ZXIuJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJlbnREaXJlY3RvcmllcyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgb3B0aW9ucy5wYXJlbnREaXJlY3Rvcmllcz8ubWFwKCh0KSA9PlxuICAgICAgICB0aGlzLnByZXBhcmVQYXJlbnREaXJlY3RvcnkodCwgZGlyZWN0b3J5S2V5KVxuICAgICAgKVxuICAgICk7XG5cbiAgICAvLyBUT0RPIHRoaXMgaXMgcmF0aGVyIGFuIHVuZm9ydHVuYXRlIG5hbWUsIGNoYW5nZSBpdCB0byBhc1Jvb3REaXJlY3RvcnkuXG4gICAgbGV0IHBhcmVudFJvb3REaXJlY3Rvcnk6IFBhcmVudFJvb3REaXJlY3RvcnlJbnB1dDtcbiAgICBpZiAob3B0aW9ucy5hc1Jvb3REaXJlY3RvcnkpIHtcbiAgICAgIGNvbnN0IHJvb3RLZXkgPSB0aGlzLmtleVNlcnZpY2UuY3VycmVudFJvb3RLZXk7XG4gICAgICBwYXJlbnRSb290RGlyZWN0b3J5ID0ge1xuICAgICAgICB3cmFwcGluZ0tleUlkOiByb290S2V5LmlkLFxuICAgICAgICB3cmFwcGVkS2V5OiBhd2FpdCB0aGlzLmtleUdyYXBoLndyYXBLZXkocm9vdEtleSwgZGlyZWN0b3J5S2V5KSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgaXRlbUlucHV0ID0gYXdhaXQgdGhpcy5wcmVwYXJlSXRlbShkaXJlY3RvcnlLZXksIG9wdGlvbnMpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLml0ZW1JbnB1dCxcbiAgICAgIHBhcmVudERpcmVjdG9yaWVzLFxuICAgICAgcGFyZW50Um9vdERpcmVjdG9yeSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwcmVwYXJlVXBkYXRlRGlyZWN0b3J5KG9wdGlvbnM6IFVwZGF0ZURpcmVjdG9yeU9wdGlvbnMpIHtcbiAgICBjb25zdCBkaXJlY3RvcnlLZXkgPSBhd2FpdCB0aGlzLmdldERpcmVjdG9yeUtleShcbiAgICAgIG9wdGlvbnMuZGlyZWN0b3J5SWQsXG4gICAgICBvcHRpb25zLmRpcmVjdG9yeUtleUlkXG4gICAgKTtcblxuICAgIGNvbnN0IGl0ZW1JbnB1dCA9IGF3YWl0IHRoaXMucHJlcGFyZUl0ZW0oZGlyZWN0b3J5S2V5Lmp3aywgb3B0aW9ucyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uaXRlbUlucHV0LFxuICAgICAgZGlyZWN0b3J5SWQ6IG9wdGlvbnMuZGlyZWN0b3J5SWQsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJlcGFyZUNyZWF0ZUZpbGUob3B0aW9uczogQ3JlYXRlRmlsZU9wdGlvbnMpIHtcbiAgICBjb25zdCBmaWxlS2V5ID0gYXdhaXQgdGhpcy5rZXlGYWN0b3J5LmNyZWF0ZUtleSgpO1xuXG4gICAgY29uc3QgcGFyZW50RGlyZWN0b3JpZXMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIG9wdGlvbnMucGFyZW50RGlyZWN0b3JpZXMubWFwKCh0KSA9PlxuICAgICAgICB0aGlzLnByZXBhcmVQYXJlbnREaXJlY3RvcnkodCwgZmlsZUtleSlcbiAgICAgIClcbiAgICApO1xuXG4gICAgY29uc3QgaW5wdXQgPSBhd2FpdCB0aGlzLnByZXBhcmVDcmVhdGVGaWxlU3RhdGUoZmlsZUtleSwgb3B0aW9ucyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uaW5wdXQsXG4gICAgICBwYXJlbnREaXJlY3RvcmllcyxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwcmVwYXJlVXBkYXRlRmlsZShvcHRpb25zOiBVcGRhdGVGaWxlT3B0aW9ucykge1xuICAgIGNvbnN0IGZpbGVLZXkgPSBhd2FpdCB0aGlzLmdldEZpbGVLZXkob3B0aW9ucy5maWxlSWQsIG9wdGlvbnMuZmlsZUtleUlkKTtcbiAgICBjb25zdCBpbnB1dCA9IGF3YWl0IHRoaXMucHJlcGFyZUNyZWF0ZUZpbGVTdGF0ZShmaWxlS2V5Lmp3aywgb3B0aW9ucyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uaW5wdXQsXG4gICAgICBmaWxlSWQ6IG9wdGlvbnMuZmlsZUlkLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByZXBhcmVDaGFuZ2VEaXJlY3RvcnlQYXJlbnRzKFxuICAgIG9wdGlvbnM6IENoYW5nZURpcmVjdG9yeVBhcmVudHNPcHRpb25zXG4gICkge1xuICAgIGNvbnN0IGRpcmVjdG9yeTogSWRLZXlQYWlyID0gb3B0aW9ucy5kaXJlY3RvcnkgfHwge1xuICAgICAgaWQ6IG9wdGlvbnMuZGlyZWN0b3J5SWQsXG4gICAgICBrZXlJZDogb3B0aW9ucy5kaXJlY3RvcnlLZXlJZCxcbiAgICB9O1xuXG4gICAgY29uc3QgZGlyZWN0b3J5S2V5ID0gYXdhaXQgdGhpcy5nZXREaXJlY3RvcnlLZXkoXG4gICAgICBkaXJlY3RvcnkuaWQsXG4gICAgICBkaXJlY3Rvcnkua2V5SWRcbiAgICApO1xuXG4gICAgY29uc3QgaW5wdXQgPSBhd2FpdCB0aGlzLnByZXBhcmVDaGFuZ2VJdGVtUGFyZW50cyhcbiAgICAgIG9wdGlvbnMsXG4gICAgICBkaXJlY3RvcnlLZXkuandrXG4gICAgKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5pbnB1dCxcbiAgICAgIGRpcmVjdG9yeUlkOiBkaXJlY3RvcnkuaWQsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJlcGFyZUNoYW5nZUZpbGVQYXJlbnRzKG9wdGlvbnM6IENoYW5nZUZpbGVQYXJlbnRzT3B0aW9ucykge1xuICAgIGNvbnN0IGZpbGU6IElkS2V5UGFpciA9IG9wdGlvbnMuZmlsZSB8fCB7XG4gICAgICBpZDogb3B0aW9ucy5maWxlSWQsXG4gICAgICBrZXlJZDogb3B0aW9ucy5maWxlS2V5SWQsXG4gICAgfTtcblxuICAgIGNvbnN0IGZpbGVLZXkgPSBhd2FpdCB0aGlzLmdldEZpbGVLZXkoZmlsZS5pZCwgZmlsZS5rZXlJZCk7XG5cbiAgICBjb25zdCBpbnB1dCA9IGF3YWl0IHRoaXMucHJlcGFyZUNoYW5nZUl0ZW1QYXJlbnRzKG9wdGlvbnMsIGZpbGVLZXkuandrKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5pbnB1dCxcbiAgICAgIGZpbGVJZDogZmlsZS5pZCxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBvbkxvZ291dCgpIHtcbiAgICAvLyBDbGVhciBhbGwgY2FjaGVkIGRhdGEuXG4gICAgdGhpcy50ZW1wRGlyZWN0b3J5ID0gbnVsbDtcbiAgfVxufVxuIl19
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXRlbS50eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvc3JjL2xpYi9pdGVtL2l0ZW0udHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEpTT05PYmplY3QsIExpbmtUeXBlRmllbGQsIExyUmVsYXlJZElucHV0IH0gZnJvbSAnLi4vYXBpL3R5cGVzJztcbmltcG9ydCB7IFNvbWVSZXF1aXJlZCB9IGZyb20gJy4uL19jb21tb24vdHlwZXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElkS2V5UGFpciB7XG4gIGlkOiBzdHJpbmc7XG4gIGtleUlkOiBzdHJpbmc7XG59XG5cbi8vIFN1ZmZpeCBcIk9wdGlvbnNcIiBhcmUgd2hhdCdzIG5lZWQgYnkgdGhlIEtDIGNsaWVudC5cbmV4cG9ydCBpbnRlcmZhY2UgUGFyZW50RGlyZWN0b3J5T3B0aW9ucyB7XG4gIGRpcmVjdG9yeT86IElkS2V5UGFpcjtcbiAgbGlua1R5cGU/OiBMaW5rVHlwZUZpZWxkO1xuXG4gIC8vIFRoZXNlIHdpbGwgYmUgZGVwcmVjYXRlZFxuICBkaXJlY3RvcnlJZD86IExyUmVsYXlJZElucHV0O1xuICAvLyBJZiB3cmFwcGluZyBrZXkgcHJvdmlkZWQsIHRoZW4gd2UgY2FuIHRyeSBmZXRjaGluZyBpdCBmcm9tIHRoZVxuICAvLyBrZXkgZ3JhcGguIElmIG5vdCBmb3VuZCBpbiBrZXkgZ3JhcGgsIHRoZW4gZmV0Y2ggdGhlIGRpcmVjdG9yeS5cbiAgd3JhcHBpbmdLZXlJZD86IExyUmVsYXlJZElucHV0O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhcmVudFJvb3REaXJlY3RvcnlJbnB1dCB7XG4gIHdyYXBwZWRLZXk6IHN0cmluZztcbiAgd3JhcHBpbmdLZXlJZDogTHJSZWxheUlkSW5wdXQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFyZW50RGlyZWN0b3J5SW5wdXQge1xuICBkaXJlY3RvcnlJZDogTHJSZWxheUlkSW5wdXQ7XG4gIHdyYXBwaW5nS2V5SWQ/OiBMclJlbGF5SWRJbnB1dDtcbiAgd3JhcHBlZEtleT86IHN0cmluZztcbiAgbGlua1R5cGU/OiBMaW5rVHlwZUZpZWxkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERvd25sb2FkRmlsZUNvbnRlbnRPcHRpb25zIHtcbiAgZmlsZVN0YXRlTm9kZUlkOiBMclJlbGF5SWRJbnB1dDtcbiAgZmlsZVN0YXRlS2V5SWQ/OiBMclJlbGF5SWRJbnB1dDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21tb25EaXJlY3RvcnlPcHRpb25zIHtcbiAgcGxhaW5NZXRhSnNvbj86IEpTT05PYmplY3Q7XG4gIGNpcGhlck1ldGFDbGVhckpzb24/OiBKU09OT2JqZWN0O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZURpcmVjdG9yeU9wdGlvbnMgZXh0ZW5kcyBDb21tb25EaXJlY3RvcnlPcHRpb25zIHtcbiAgYXNSb290RGlyZWN0b3J5PzogYm9vbGVhbjtcbiAgcGFyZW50RGlyZWN0b3JpZXM/OiBQYXJlbnREaXJlY3RvcnlPcHRpb25zW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXBkYXRlRGlyZWN0b3J5T3B0aW9ucyBleHRlbmRzIENvbW1vbkRpcmVjdG9yeU9wdGlvbnMge1xuICBkaXJlY3RvcnlJZDogTHJSZWxheUlkSW5wdXQ7XG4gIGRpcmVjdG9yeUtleUlkPzogTHJSZWxheUlkSW5wdXQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbW9uRmlsZU9wdGlvbnMge1xuICBwbGFpbk1ldGFKc29uPzogSlNPTk9iamVjdDtcbiAgY2lwaGVyTWV0YUNsZWFySnNvbj86IEpTT05PYmplY3Q7XG4gIGZpbGU/OiBGaWxlIHwgQXJyYXlCdWZmZXI7XG4gIC8vIGN1c3RvbSB1cGxvYWRlclxuICB1cGxvYWQ/OiAoY2lwaGVyRmlsZUNvbnRlbnQ6IHN0cmluZykgPT4gUHJvbWlzZTxzdHJpbmc+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZUZpbGVPcHRpb25zIGV4dGVuZHMgQ29tbW9uRmlsZU9wdGlvbnMge1xuICBwYXJlbnREaXJlY3RvcmllczogUGFyZW50RGlyZWN0b3J5T3B0aW9uc1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVwZGF0ZUZpbGVPcHRpb25zIGV4dGVuZHMgQ29tbW9uRmlsZU9wdGlvbnMge1xuICBmaWxlSWQ6IExyUmVsYXlJZElucHV0O1xuICBmaWxlS2V5SWQ/OiBMclJlbGF5SWRJbnB1dDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXZlcnRGaWxlT3B0aW9ucyB7XG4gIGZpbGVJZDogTHJSZWxheUlkSW5wdXQ7XG4gIHZlcnNpb25JZDogTHJSZWxheUlkSW5wdXQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhbmdlSXRlbVBhcmVudHNPcHRpb25zIHtcbiAgcGFyZW50c1RvUmVtb3ZlPzogTHJSZWxheUlkSW5wdXRbXTtcbiAgcGFyZW50c1RvQWRkPzogUGFyZW50RGlyZWN0b3J5T3B0aW9uc1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENoYW5nZURpcmVjdG9yeVBhcmVudHNPcHRpb25zXG4gIGV4dGVuZHMgQ2hhbmdlSXRlbVBhcmVudHNPcHRpb25zIHtcbiAgZGlyZWN0b3J5PzogSWRLZXlQYWlyO1xuICAvLyBUaGVzZSB3aWxsIGJlIGRlcHJlY2F0ZWRcbiAgZGlyZWN0b3J5SWQ/OiBMclJlbGF5SWRJbnB1dDtcbiAgZGlyZWN0b3J5S2V5SWQ/OiBMclJlbGF5SWRJbnB1dDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDaGFuZ2VGaWxlUGFyZW50c09wdGlvbnMgZXh0ZW5kcyBDaGFuZ2VJdGVtUGFyZW50c09wdGlvbnMge1xuICBmaWxlPzogSWRLZXlQYWlyO1xuICAvLyBUaGVzZSB3aWxsIGJlIGRlcHJlY2F0ZWRcbiAgZmlsZUlkPzogTHJSZWxheUlkSW5wdXQ7XG4gIGZpbGVLZXlJZD86IExyUmVsYXlJZElucHV0O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJlZ2luRGVsZXRlQ2hpbGRJdGVtTGlua3NXaW5kb3dPcHRpb25zIHtcbiAgZGlyZWN0b3J5SWQ6IExyUmVsYXlJZElucHV0O1xuICByZXF1ZXN0V2luZG93TXM6IG51bWJlcjtcbn1cblxuLy8gQ3JlYXRpbmcgZGlyZWN0b3J5IHdpdGggc3RhZ2luZyBhcyByb290IGRpcmVjdG9yeSBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZCwgaGVuY2Ugb21pdHRpbmcgYXNSb290RGlyZWN0b3J5XG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZURpcmVjdG9yeVdpdGhTdGFnaW5nT3B0aW9uc1xuICBleHRlbmRzIE9taXQ8XG4gICAgU29tZVJlcXVpcmVkPENyZWF0ZURpcmVjdG9yeU9wdGlvbnMsICdwYXJlbnREaXJlY3Rvcmllcyc+LFxuICAgICdhc1Jvb3REaXJlY3RvcnknXG4gID4ge1xuICByZXF1ZXN0V2luZG93TXM6IG51bWJlcjtcbiAgb25DcmVhdGVkSW5TdGFnaW5nOiAoZGlyZWN0b3J5OiBJZEtleVBhaXIpID0+IFByb21pc2U8dm9pZD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlRmlsZVdpdGhTdGFnaW5nT3B0aW9ucyBleHRlbmRzIENyZWF0ZUZpbGVPcHRpb25zIHtcbiAgcmVxdWVzdFdpbmRvd01zOiBudW1iZXI7XG4gIG9uQ3JlYXRlZEluU3RhZ2luZzogKGZpbGU6IElkS2V5UGFpcikgPT4gUHJvbWlzZTx2b2lkPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZXRGaWxlQ29uZmlkZW50aWFsT3B0aW9ucyB7XG4gIGZpbGVJZDogTHJSZWxheUlkSW5wdXQ7XG4gIGNvbmZpZGVudGlhbDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZXREaXJlY3RvcnlDb25maWRlbnRpYWxPcHRpb25zIHtcbiAgZGlyZWN0b3J5SWQ6IExyUmVsYXlJZElucHV0O1xuICBjb25maWRlbnRpYWw6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXJjaGl2ZURpcmVjdG9yeU9wdGlvbnMge1xuICByZWN1cnNpdmU6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVW5hcmNoaXZlRGlyZWN0b3J5T3B0aW9ucyB7XG4gIHJlY3Vyc2l2ZTogYm9vbGVhbjtcbn1cbiJdfQ==
|