@bitgo/sdk-core 28.22.0 → 28.23.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.
@@ -14,10 +14,21 @@ const utils_1 = require("../../utils");
14
14
  const sdk_lib_mpc_1 = require("@bitgo/sdk-lib-mpc");
15
15
  const public_types_1 = require("@bitgo/public-types");
16
16
  const assert_1 = __importDefault(require("assert"));
17
+ function partyIdToSignatureShareType(partyId) {
18
+ (0, assert_1.default)(partyId === 0 || partyId === 1 || partyId === 2, 'Invalid partyId for MPCv2 signing');
19
+ switch (partyId) {
20
+ case 0:
21
+ return utils_1.SignatureShareType.USER;
22
+ case 1:
23
+ return utils_1.SignatureShareType.BACKUP;
24
+ case 2:
25
+ return utils_1.SignatureShareType.BITGO;
26
+ }
27
+ }
17
28
  /**
18
29
  Helpers in this take care of all interaction with WP API's
19
30
  **/
20
- async function getSignatureShareRoundOne(round1Message, userGpgKey, partyId = 0) {
31
+ async function getSignatureShareRoundOne(round1Message, userGpgKey, partyId = 0, otherSignerPartyId = 2) {
21
32
  const serializedMessages = sdk_lib_mpc_1.DklsTypes.serializeMessages({
22
33
  broadcastMessages: [round1Message],
23
34
  p2pMessages: [],
@@ -38,14 +49,14 @@ async function getSignatureShareRoundOne(round1Message, userGpgKey, partyId = 0)
38
49
  };
39
50
  const serializedShare = JSON.stringify(share);
40
51
  return {
41
- from: partyId === 0 ? utils_1.SignatureShareType.USER : utils_1.SignatureShareType.BACKUP,
42
- to: utils_1.SignatureShareType.BITGO,
52
+ from: partyIdToSignatureShareType(partyId),
53
+ to: partyIdToSignatureShareType(otherSignerPartyId),
43
54
  share: serializedShare,
44
55
  };
45
56
  }
46
- async function getSignatureShareRoundTwo(userToBitGoMessages2, userToBitGoMessages3, userGpgKey, bitgoGpgKey, partyId = 0) {
47
- const userToBitGoEncryptedMsg2 = await sdk_lib_mpc_1.DklsComms.encryptAndAuthOutgoingMessages(sdk_lib_mpc_1.DklsTypes.serializeMessages(userToBitGoMessages2), [getBitGoPartyGpgKey(bitgoGpgKey)], [getUserPartyGpgKey(userGpgKey, partyId)]);
48
- const userToBitGoEncryptedMsg3 = await sdk_lib_mpc_1.DklsComms.encryptAndAuthOutgoingMessages(sdk_lib_mpc_1.DklsTypes.serializeMessages(userToBitGoMessages3), [getBitGoPartyGpgKey(bitgoGpgKey)], [getUserPartyGpgKey(userGpgKey, partyId)]);
57
+ async function getSignatureShareRoundTwo(userToBitGoMessages2, userToBitGoMessages3, userGpgKey, otherPartyGpgKey, partyId = 0, otherSignerPartyId = 2) {
58
+ const userToBitGoEncryptedMsg2 = await sdk_lib_mpc_1.DklsComms.encryptAndAuthOutgoingMessages(sdk_lib_mpc_1.DklsTypes.serializeMessages(userToBitGoMessages2), [getBitGoPartyGpgKey(otherPartyGpgKey, otherSignerPartyId)], [getUserPartyGpgKey(userGpgKey, partyId)]);
59
+ const userToBitGoEncryptedMsg3 = await sdk_lib_mpc_1.DklsComms.encryptAndAuthOutgoingMessages(sdk_lib_mpc_1.DklsTypes.serializeMessages(userToBitGoMessages3), [getBitGoPartyGpgKey(otherPartyGpgKey, otherSignerPartyId)], [getUserPartyGpgKey(userGpgKey, partyId)]);
49
60
  (0, assert_1.default)(userToBitGoEncryptedMsg2.p2pMessages.length, 'User to BitGo messages 2 not present.');
50
61
  (0, assert_1.default)(userToBitGoEncryptedMsg3.p2pMessages.length, 'User to BitGo messages 3 not present.');
51
62
  (0, assert_1.default)(public_types_1.MPCv2PartyFromStringOrNumber.is(userToBitGoEncryptedMsg2.p2pMessages[0].from));
@@ -70,13 +81,13 @@ async function getSignatureShareRoundTwo(userToBitGoMessages2, userToBitGoMessag
70
81
  },
71
82
  };
72
83
  return {
73
- from: partyId === 0 ? utils_1.SignatureShareType.USER : utils_1.SignatureShareType.BACKUP,
74
- to: utils_1.SignatureShareType.BITGO,
84
+ from: partyIdToSignatureShareType(partyId),
85
+ to: partyIdToSignatureShareType(otherSignerPartyId),
75
86
  share: JSON.stringify(share),
76
87
  };
77
88
  }
78
- async function getSignatureShareRoundThree(userToBitGoMessages4, userGpgKey, bitgoGpgKey, partyId = 0) {
79
- const userToBitGoEncryptedMsg4 = await sdk_lib_mpc_1.DklsComms.encryptAndAuthOutgoingMessages(sdk_lib_mpc_1.DklsTypes.serializeMessages(userToBitGoMessages4), [getBitGoPartyGpgKey(bitgoGpgKey)], [getUserPartyGpgKey(userGpgKey, partyId)]);
89
+ async function getSignatureShareRoundThree(userToBitGoMessages4, userGpgKey, bitgoGpgKey, partyId = 0, otherSignerPartyId = 2) {
90
+ const userToBitGoEncryptedMsg4 = await sdk_lib_mpc_1.DklsComms.encryptAndAuthOutgoingMessages(sdk_lib_mpc_1.DklsTypes.serializeMessages(userToBitGoMessages4), [getBitGoPartyGpgKey(bitgoGpgKey, otherSignerPartyId)], [getUserPartyGpgKey(userGpgKey, partyId)]);
80
91
  (0, assert_1.default)(public_types_1.MPCv2PartyFromStringOrNumber.is(userToBitGoEncryptedMsg4.broadcastMessages[0].from));
81
92
  if (!userToBitGoEncryptedMsg4.broadcastMessages[0].signatureR?.message) {
82
93
  throw Error('signatureR should be defined');
@@ -93,8 +104,8 @@ async function getSignatureShareRoundThree(userToBitGoMessages4, userGpgKey, bit
93
104
  },
94
105
  };
95
106
  return {
96
- from: partyId === 0 ? utils_1.SignatureShareType.USER : utils_1.SignatureShareType.BACKUP,
97
- to: utils_1.SignatureShareType.BITGO,
107
+ from: partyIdToSignatureShareType(partyId),
108
+ to: partyIdToSignatureShareType(otherSignerPartyId),
98
109
  share: JSON.stringify(share),
99
110
  };
100
111
  }
@@ -136,9 +147,9 @@ async function verifyBitGoMessagesAndSignaturesRoundTwo(parsedSignatureShare, us
136
147
  broadcastMessages: [],
137
148
  }, [getBitGoPartyGpgKey(bitgoGpgKey)], [getUserPartyGpgKey(userGpgKey, partyId)]);
138
149
  }
139
- function getBitGoPartyGpgKey(key) {
150
+ function getBitGoPartyGpgKey(key, partyId = 2) {
140
151
  return {
141
- partyId: 2,
152
+ partyId: partyId,
142
153
  gpgKey: key.armor(),
143
154
  };
144
155
  }
@@ -148,4 +159,4 @@ function getUserPartyGpgKey(key, partyId = 0) {
148
159
  gpgKey: key.privateKey,
149
160
  };
150
161
  }
151
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNkc2FNUEN2Mi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9iaXRnby90c3MvZWNkc2EvZWNkc2FNUEN2Mi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQWlCQSw4REFrQ0M7QUFFRCw4REE4Q0M7QUFFRCxrRUErQkM7QUFFRCw0RkErQkM7QUFFRCw0RkF1QkM7QUFFRCxrREFLQztBQUVELGdEQUtDO0FBNU1ELHVDQUF1RTtBQUV2RSxvREFBMEQ7QUFDMUQsc0RBTzZCO0FBQzdCLG9EQUE0QjtBQUU1Qjs7R0FFRztBQUVJLEtBQUssVUFBVSx5QkFBeUIsQ0FDN0MsYUFBcUQsRUFDckQsVUFBNkMsRUFDN0MsVUFBaUIsQ0FBQztJQUVsQixNQUFNLGtCQUFrQixHQUFHLHVCQUFTLENBQUMsaUJBQWlCLENBQUM7UUFDckQsaUJBQWlCLEVBQUUsQ0FBQyxhQUFhLENBQUM7UUFDbEMsV0FBVyxFQUFFLEVBQUU7S0FDaEIsQ0FBQyxDQUFDO0lBQ0gsTUFBTSx1QkFBdUIsR0FBRyxDQUM5QixNQUFNLHVCQUFTLENBQUMsOEJBQThCLENBQzVDLGtCQUFrQixFQUNsQixFQUFFLEVBQUUsa0VBQWtFO0lBQ3RFLENBQUMsa0JBQWtCLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQzFDLENBQ0YsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2QiwrQ0FBK0M7SUFDL0MsSUFBQSxnQkFBTSxFQUFDLDJDQUE0QixDQUFDLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3RFLE1BQU0sS0FBSyxHQUFtQztRQUM1QyxJQUFJLEVBQUUsYUFBYTtRQUNuQixJQUFJLEVBQUU7WUFDSixJQUFJLEVBQUU7Z0JBQ0osSUFBSSxFQUFFLHVCQUF1QixDQUFDLElBQUk7Z0JBQ2xDLE9BQU8sRUFBRSx1QkFBdUIsQ0FBQyxPQUFPLENBQUMsT0FBTztnQkFDaEQsU0FBUyxF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LEdBQUcsQ0FBQyxLQUFLLEVBQUU7S0FDcEIsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFnQixrQkFBa0IsQ0FBQyxHQUFzQyxFQUFFLFVBQWlCLENBQUM7SUFDM0YsT0FBTztRQUNMLE9BQU8sRUFBRSxPQUFPO1FBQ2hCLE1BQU0sRUFBRSxHQUFHLENBQUMsVUFBVTtLQUN2QixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNpZ25hdHVyZVNoYXJlUmVjb3JkLCBTaWduYXR1cmVTaGFyZVR5cGUgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgb3BlbnBncCBmcm9tICdvcGVucGdwJztcbmltcG9ydCB7IERrbHNDb21tcywgRGtsc1R5cGVzIH0gZnJvbSAnQGJpdGdvL3Nkay1saWItbXBjJztcbmltcG9ydCB7XG4gIE1QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDFJbnB1dCxcbiAgTVBDdjJTaWduYXR1cmVTaGFyZVJvdW5kMU91dHB1dCxcbiAgTVBDdjJTaWduYXR1cmVTaGFyZVJvdW5kMklucHV0LFxuICBNUEN2MlNpZ25hdHVyZVNoYXJlUm91bmQyT3V0cHV0LFxuICBNUEN2MlNpZ25hdHVyZVNoYXJlUm91bmQzSW5wdXQsXG4gIE1QQ3YyUGFydHlGcm9tU3RyaW5nT3JOdW1iZXIsXG59IGZyb20gJ0BiaXRnby9wdWJsaWMtdHlwZXMnO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG4vKipcbiBIZWxwZXJzIGluIHRoaXMgdGFrZSBjYXJlIG9mIGFsbCBpbnRlcmFjdGlvbiB3aXRoIFdQIEFQSSdzXG4qKi9cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFNpZ25hdHVyZVNoYXJlUm91bmRPbmUoXG4gIHJvdW5kMU1lc3NhZ2U6IERrbHNUeXBlcy5EZXNlcmlhbGl6ZWRCcm9hZGNhc3RNZXNzYWdlLFxuICB1c2VyR3BnS2V5OiBvcGVucGdwLlNlcmlhbGl6ZWRLZXlQYWlyPHN0cmluZz4sXG4gIHBhcnR5SWQ6IDAgfCAxID0gMFxuKTogUHJvbWlzZTxTaWduYXR1cmVTaGFyZVJlY29yZD4ge1xuICBjb25zdCBzZXJpYWxpemVkTWVzc2FnZXMgPSBEa2xzVHlwZXMuc2VyaWFsaXplTWVzc2FnZXMoe1xuICAgIGJyb2FkY2FzdE1lc3NhZ2VzOiBbcm91bmQxTWVzc2FnZV0sXG4gICAgcDJwTWVzc2FnZXM6IFtdLFxuICB9KTtcbiAgY29uc3QgYXV0aEVuY0Jyb2FkY2FzdE1lc3NhZ2UgPSAoXG4gICAgYXdhaXQgRGtsc0NvbW1zLmVuY3J5cHRBbmRBdXRoT3V0Z29pbmdNZXNzYWdlcyhcbiAgICAgIHNlcmlhbGl6ZWRNZXNzYWdlcyxcbiAgICAgIFtdLCAvLyBCcm9hZGNhc3QgbWVzc2FnZSBzbyBkb2Vzbid0IG5lZWQgdG8gZW5jcnlwdCB0byBCaXRHbydzIEdQRyBrZXlcbiAgICAgIFtnZXRVc2VyUGFydHlHcGdLZXkodXNlckdwZ0tleSwgcGFydHlJZCldXG4gICAgKVxuICApLmJyb2FkY2FzdE1lc3NhZ2VzWzBdO1xuICAvLyBTaGFyZSB0eXBlIGV4cGVjdGVkIGJ5IFdhbGxldCBQbGF0Zm9ybSdzIEFQSVxuICBhc3NlcnQoTVBDdjJQYXJ0eUZyb21TdHJpbmdPck51bWJlci5pcyhhdXRoRW5jQnJvYWRjYXN0TWVzc2FnZS5mcm9tKSk7XG4gIGNvbnN0IHNoYXJlOiBNUEN2MlNpZ25hdHVyZVNoYXJlUm91bmQxSW5wdXQgPSB7XG4gICAgdHlwZTogJ3JvdW5kMUlucHV0JyxcbiAgICBkYXRhOiB7XG4gICAgICBtc2cxOiB7XG4gICAgICAgIGZyb206IGF1dGhFbmNCcm9hZGNhc3RNZXNzYWdlLmZyb20sXG4gICAgICAgIG1lc3NhZ2U6IGF1dGhFbmNCcm9hZGNhc3RNZXNzYWdlLnBheWxvYWQubWVzc2FnZSxcbiAgICAgICAgc2lnbmF0dXJlOiBhdXRoRW5jQnJvYWRjYXN0TWVzc2FnZS5wYXlsb2FkLnNpZ25hdHVyZSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcbiAgY29uc3Qgc2VyaWFsaXplZFNoYXJlID0gSlNPTi5zdHJpbmdpZnkoc2hhcmUpO1xuICByZXR1cm4ge1xuICAgIGZyb206IHBhcnR5SWQgPT09IDAgPyBTaWduYXR1cmVTaGFyZVR5cGUuVVNFUiA6IFNpZ25hdHVyZVNoYXJlVHlwZS5CQUNLVVAsXG4gICAgdG86IFNpZ25hdHVyZVNoYXJlVHlwZS5CSVRHTyxcbiAgICBzaGFyZTogc2VyaWFsaXplZFNoYXJlLFxuICB9O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0U2lnbmF0dXJlU2hhcmVSb3VuZFR3byhcbiAgdXNlclRvQml0R29NZXNzYWdlczI6IERrbHNUeXBlcy5EZXNlcmlhbGl6ZWRNZXNzYWdlcyxcbiAgdXNlclRvQml0R29NZXNzYWdlczM6IERrbHNUeXBlcy5EZXNlcmlhbGl6ZWRNZXNzYWdlcyxcbiAgdXNlckdwZ0tleTogb3BlbnBncC5TZXJpYWxpemVkS2V5UGFpcjxzdHJpbmc+LFxuICBiaXRnb0dwZ0tleTogb3BlbnBncC5LZXksXG4gIHBhcnR5SWQ6IDAgfCAxID0gMFxuKTogUHJvbWlzZTxTaWduYXR1cmVTaGFyZVJlY29yZD4ge1xuICBjb25zdCB1c2VyVG9CaXRHb0VuY3J5cHRlZE1zZzIgPSBhd2FpdCBEa2xzQ29tbXMuZW5jcnlwdEFuZEF1dGhPdXRnb2luZ01lc3NhZ2VzKFxuICAgIERrbHNUeXBlcy5zZXJpYWxpemVNZXNzYWdlcyh1c2VyVG9CaXRHb01lc3NhZ2VzMiksXG4gICAgW2dldEJpdEdvUGFydHlHcGdLZXkoYml0Z29HcGdLZXkpXSxcbiAgICBbZ2V0VXNlclBhcnR5R3BnS2V5KHVzZXJHcGdLZXksIHBhcnR5SWQpXVxuICApO1xuXG4gIGNvbnN0IHVzZXJUb0JpdEdvRW5jcnlwdGVkTXNnMyA9IGF3YWl0IERrbHNDb21tcy5lbmNyeXB0QW5kQXV0aE91dGdvaW5nTWVzc2FnZXMoXG4gICAgRGtsc1R5cGVzLnNlcmlhbGl6ZU1lc3NhZ2VzKHVzZXJUb0JpdEdvTWVzc2FnZXMzKSxcbiAgICBbZ2V0Qml0R29QYXJ0eUdwZ0tleShiaXRnb0dwZ0tleSldLFxuICAgIFtnZXRVc2VyUGFydHlHcGdLZXkodXNlckdwZ0tleSwgcGFydHlJZCldXG4gICk7XG4gIGFzc2VydCh1c2VyVG9CaXRHb0VuY3J5cHRlZE1zZzIucDJwTWVzc2FnZXMubGVuZ3RoLCAnVXNlciB0byBCaXRHbyBtZXNzYWdlcyAyIG5vdCBwcmVzZW50LicpO1xuICBhc3NlcnQodXNlclRvQml0R29FbmNyeXB0ZWRNc2czLnAycE1lc3NhZ2VzLmxlbmd0aCwgJ1VzZXIgdG8gQml0R28gbWVzc2FnZXMgMyBub3QgcHJlc2VudC4nKTtcbiAgYXNzZXJ0KE1QQ3YyUGFydHlGcm9tU3RyaW5nT3JOdW1iZXIuaXModXNlclRvQml0R29FbmNyeXB0ZWRNc2cyLnAycE1lc3NhZ2VzWzBdLmZyb20pKTtcbiAgYXNzZXJ0KE1QQ3YyUGFydHlGcm9tU3RyaW5nT3JOdW1iZXIuaXModXNlclRvQml0R29FbmNyeXB0ZWRNc2cyLnAycE1lc3NhZ2VzWzBdLnRvKSk7XG4gIGFzc2VydChNUEN2MlBhcnR5RnJvbVN0cmluZ09yTnVtYmVyLmlzKHVzZXJUb0JpdEdvRW5jcnlwdGVkTXNnMy5wMnBNZXNzYWdlc1swXS5mcm9tKSk7XG4gIGFzc2VydChNUEN2MlBhcnR5RnJvbVN0cmluZ09yTnVtYmVyLmlzKHVzZXJUb0JpdEdvRW5jcnlwdGVkTXNnMy5wMnBNZXNzYWdlc1swXS50bykpO1xuICBjb25zdCBzaGFyZTogTVBDdjJTaWduYXR1cmVTaGFyZVJvdW5kMklucHV0ID0ge1xuICAgIHR5cGU6ICdyb3VuZDJJbnB1dCcsXG4gICAgZGF0YToge1xuICAgICAgbXNnMjoge1xuICAgICAgICBmcm9tOiB1c2VyVG9CaXRHb0VuY3J5cHRlZE1zZzIucDJwTWVzc2FnZXNbMF0uZnJvbSxcbiAgICAgICAgdG86IHVzZXJUb0JpdEdvRW5jcnlwdGVkTXNnMi5wMnBNZXNzYWdlc1swXS50byxcbiAgICAgICAgZW5jcnlwdGVkTWVzc2FnZTogdXNlclRvQml0R29FbmNyeXB0ZWRNc2cyLnAycE1lc3NhZ2VzWzBdLnBheWxvYWQuZW5jcnlwdGVkTWVzc2FnZSxcbiAgICAgICAgc2lnbmF0dXJlOiB1c2VyVG9CaXRHb0VuY3J5cHRlZE1zZzIucDJwTWVzc2FnZXNbMF0ucGF5bG9hZC5zaWduYXR1cmUsXG4gICAgICB9LFxuICAgICAgbXNnMzoge1xuICAgICAgICBmcm9tOiB1c2VyVG9CaXRHb0VuY3J5cHRlZE1zZzMucDJwTWVzc2FnZXNbMF0uZnJvbSxcbiAgICAgICAgdG86IHVzZXJUb0JpdEdvRW5jcnlwdGVkTXNnMy5wMnBNZXNzYWdlc1swXS50byxcbiAgICAgICAgZW5jcnlwdGVkTWVzc2FnZTogdXNlclRvQml0R29FbmNyeXB0ZWRNc2czLnAycE1lc3NhZ2VzWzBdLnBheWxvYWQuZW5jcnlwdGVkTWVzc2FnZSxcbiAgICAgICAgc2lnbmF0dXJlOiB1c2VyVG9CaXRHb0VuY3J5cHRlZE1zZzMucDJwTWVzc2FnZXNbMF0ucGF5bG9hZC5zaWduYXR1cmUsXG4gICAgICB9LFxuICAgIH0sXG4gIH07XG4gIHJldHVybiB7XG4gICAgZnJvbTogcGFydHlJZCA9PT0gMCA/IFNpZ25hdHVyZVNoYXJlVHlwZS5VU0VSIDogU2lnbmF0dXJlU2hhcmVUeXBlLkJBQ0tVUCxcbiAgICB0bzogU2lnbmF0dXJlU2hhcmVUeXBlLkJJVEdPLFxuICAgIHNoYXJlOiBKU09OLnN0cmluZ2lmeShzaGFyZSksXG4gIH07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRTaWduYXR1cmVTaGFyZVJvdW5kVGhyZWUoXG4gIHVzZXJUb0JpdEdvTWVzc2FnZXM0OiBEa2xzVHlwZXMuRGVzZXJpYWxpemVkTWVzc2FnZXMsXG4gIHVzZXJHcGdLZXk6IG9wZW5wZ3AuU2VyaWFsaXplZEtleVBhaXI8c3RyaW5nPixcbiAgYml0Z29HcGdLZXk6IG9wZW5wZ3AuS2V5LFxuICBwYXJ0eUlkOiAwIHwgMSA9IDBcbik6IFByb21pc2U8U2lnbmF0dXJlU2hhcmVSZWNvcmQ+IHtcbiAgY29uc3QgdXNlclRvQml0R29FbmNyeXB0ZWRNc2c0ID0gYXdhaXQgRGtsc0NvbW1zLmVuY3J5cHRBbmRBdXRoT3V0Z29pbmdNZXNzYWdlcyhcbiAgICBEa2xzVHlwZXMuc2VyaWFsaXplTWVzc2FnZXModXNlclRvQml0R29NZXNzYWdlczQpLFxuICAgIFtnZXRCaXRHb1BhcnR5R3BnS2V5KGJpdGdvR3BnS2V5KV0sXG4gICAgW2dldFVzZXJQYXJ0eUdwZ0tleSh1c2VyR3BnS2V5LCBwYXJ0eUlkKV1cbiAgKTtcbiAgYXNzZXJ0KE1QQ3YyUGFydHlGcm9tU3RyaW5nT3JOdW1iZXIuaXModXNlclRvQml0R29FbmNyeXB0ZWRNc2c0LmJyb2FkY2FzdE1lc3NhZ2VzWzBdLmZyb20pKTtcbiAgaWYgKCF1c2VyVG9CaXRHb0VuY3J5cHRlZE1zZzQuYnJvYWRjYXN0TWVzc2FnZXNbMF0uc2lnbmF0dXJlUj8ubWVzc2FnZSkge1xuICAgIHRocm93IEVycm9yKCdzaWduYXR1cmVSIHNob3VsZCBiZSBkZWZpbmVkJyk7XG4gIH1cbiAgY29uc3Qgc2hhcmU6IE1QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDNJbnB1dCA9IHtcbiAgICB0eXBlOiAncm91bmQzSW5wdXQnLFxuICAgIGRhdGE6IHtcbiAgICAgIG1zZzQ6IHtcbiAgICAgICAgZnJvbTogdXNlclRvQml0R29FbmNyeXB0ZWRNc2c0LmJyb2FkY2FzdE1lc3NhZ2VzWzBdLmZyb20sXG4gICAgICAgIG1lc3NhZ2U6IHVzZXJUb0JpdEdvRW5jcnlwdGVkTXNnNC5icm9hZGNhc3RNZXNzYWdlc1swXS5wYXlsb2FkLm1lc3NhZ2UsXG4gICAgICAgIHNpZ25hdHVyZTogdXNlclRvQml0R29FbmNyeXB0ZWRNc2c0LmJyb2FkY2FzdE1lc3NhZ2VzWzBdLnBheWxvYWQuc2lnbmF0dXJlLFxuICAgICAgICBzaWduYXR1cmVSOiB1c2VyVG9CaXRHb0VuY3J5cHRlZE1zZzQuYnJvYWRjYXN0TWVzc2FnZXNbMF0uc2lnbmF0dXJlUi5tZXNzYWdlLFxuICAgICAgfSxcbiAgICB9LFxuICB9O1xuICByZXR1cm4ge1xuICAgIGZyb206IHBhcnR5SWQgPT09IDAgPyBTaWduYXR1cmVTaGFyZVR5cGUuVVNFUiA6IFNpZ25hdHVyZVNoYXJlVHlwZS5CQUNLVVAsXG4gICAgdG86IFNpZ25hdHVyZVNoYXJlVHlwZS5CSVRHTyxcbiAgICBzaGFyZTogSlNPTi5zdHJpbmdpZnkoc2hhcmUpLFxuICB9O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdmVyaWZ5Qml0R29NZXNzYWdlc0FuZFNpZ25hdHVyZXNSb3VuZE9uZShcbiAgcGFyc2VkU2lnbmF0dXJlU2hhcmU6IE1QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDFPdXRwdXQsXG4gIHVzZXJHcGdLZXk6IG9wZW5wZ3AuU2VyaWFsaXplZEtleVBhaXI8c3RyaW5nPixcbiAgYml0Z29HcGdLZXk6IG9wZW5wZ3AuS2V5LFxuICBwYXJ0eUlkOiAwIHwgMSA9IDBcbik6IFByb21pc2U8RGtsc1R5cGVzLlNlcmlhbGl6ZWRNZXNzYWdlcz4ge1xuICByZXR1cm4gYXdhaXQgRGtsc0NvbW1zLmRlY3J5cHRBbmRWZXJpZnlJbmNvbWluZ01lc3NhZ2VzKFxuICAgIHtcbiAgICAgIHAycE1lc3NhZ2VzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBmcm9tOiBwYXJzZWRTaWduYXR1cmVTaGFyZS5kYXRhLm1zZzIuZnJvbSxcbiAgICAgICAgICB0bzogcGFyc2VkU2lnbmF0dXJlU2hhcmUuZGF0YS5tc2cyLnRvLFxuICAgICAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgICAgIGVuY3J5cHRlZE1lc3NhZ2U6IHBhcnNlZFNpZ25hdHVyZVNoYXJlLmRhdGEubXNnMi5lbmNyeXB0ZWRNZXNzYWdlLFxuICAgICAgICAgICAgc2lnbmF0dXJlOiBwYXJzZWRTaWduYXR1cmVTaGFyZS5kYXRhLm1zZzIuc2lnbmF0dXJlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgYnJvYWRjYXN0TWVzc2FnZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZyb206IHBhcnNlZFNpZ25hdHVyZVNoYXJlLmRhdGEubXNnMS5mcm9tLFxuICAgICAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IHBhcnNlZFNpZ25hdHVyZVNoYXJlLmRhdGEubXNnMS5tZXNzYWdlLFxuICAgICAgICAgICAgc2lnbmF0dXJlOiBwYXJzZWRTaWduYXR1cmVTaGFyZS5kYXRhLm1zZzEuc2lnbmF0dXJlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0sXG4gICAgW2dldEJpdEdvUGFydHlHcGdLZXkoYml0Z29HcGdLZXkpXSxcbiAgICBbZ2V0VXNlclBhcnR5R3BnS2V5KHVzZXJHcGdLZXksIHBhcnR5SWQpXVxuICApO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdmVyaWZ5Qml0R29NZXNzYWdlc0FuZFNpZ25hdHVyZXNSb3VuZFR3byhcbiAgcGFyc2VkU2lnbmF0dXJlU2hhcmU6IE1QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDJPdXRwdXQsXG4gIHVzZXJHcGdLZXk6IG9wZW5wZ3AuU2VyaWFsaXplZEtleVBhaXI8c3RyaW5nPixcbiAgYml0Z29HcGdLZXk6IG9wZW5wZ3AuS2V5LFxuICBwYXJ0eUlkOiAwIHwgMSA9IDBcbik6IFByb21pc2U8RGtsc1R5cGVzLlNlcmlhbGl6ZWRNZXNzYWdlcz4ge1xuICByZXR1cm4gYXdhaXQgRGtsc0NvbW1zLmRlY3J5cHRBbmRWZXJpZnlJbmNvbWluZ01lc3NhZ2VzKFxuICAgIHtcbiAgICAgIHAycE1lc3NhZ2VzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBmcm9tOiBwYXJzZWRTaWduYXR1cmVTaGFyZS5kYXRhLm1zZzMuZnJvbSxcbiAgICAgICAgICB0bzogcGFyc2VkU2lnbmF0dXJlU2hhcmUuZGF0YS5tc2czLnRvLFxuICAgICAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgICAgIGVuY3J5cHRlZE1lc3NhZ2U6IHBhcnNlZFNpZ25hdHVyZVNoYXJlLmRhdGEubXNnMy5lbmNyeXB0ZWRNZXNzYWdlLFxuICAgICAgICAgICAgc2lnbmF0dXJlOiBwYXJzZWRTaWduYXR1cmVTaGFyZS5kYXRhLm1zZzMuc2lnbmF0dXJlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgYnJvYWRjYXN0TWVzc2FnZXM6IFtdLFxuICAgIH0sXG4gICAgW2dldEJpdEdvUGFydHlHcGdLZXkoYml0Z29HcGdLZXkpXSxcbiAgICBbZ2V0VXNlclBhcnR5R3BnS2V5KHVzZXJHcGdLZXksIHBhcnR5SWQpXVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Qml0R29QYXJ0eUdwZ0tleShrZXk6IG9wZW5wZ3AuS2V5KTogRGtsc1R5cGVzLlBhcnR5R3BnS2V5IHtcbiAgcmV0dXJuIHtcbiAgICBwYXJ0eUlkOiAyLFxuICAgIGdwZ0tleToga2V5LmFybW9yKCksXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRVc2VyUGFydHlHcGdLZXkoa2V5OiBvcGVucGdwLlNlcmlhbGl6ZWRLZXlQYWlyPHN0cmluZz4sIHBhcnR5SWQ6IDAgfCAxID0gMCk6IERrbHNUeXBlcy5QYXJ0eUdwZ0tleSB7XG4gIHJldHVybiB7XG4gICAgcGFydHlJZDogcGFydHlJZCxcbiAgICBncGdLZXk6IGtleS5wcml2YXRlS2V5LFxuICB9O1xufVxuIl19
162
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNkc2FNUEN2Mi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9iaXRnby90c3MvZWNkc2EvZWNkc2FNUEN2Mi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQTZCQSw4REFtQ0M7QUFFRCw4REErQ0M7QUFFRCxrRUFnQ0M7QUFFRCw0RkErQkM7QUFFRCw0RkF1QkM7QUFFRCxrREFLQztBQUVELGdEQUtDO0FBM05ELHVDQUF1RTtBQUV2RSxvREFBMEQ7QUFDMUQsc0RBTzZCO0FBQzdCLG9EQUE0QjtBQUU1QixTQUFTLDJCQUEyQixDQUFDLE9BQWtCO0lBQ3JELElBQUEsZ0JBQU0sRUFBQyxPQUFPLEtBQUssQ0FBQyxJQUFJLE9BQU8sS0FBSyxDQUFDLElBQUksT0FBTyxLQUFLLENBQUMsRUFBRSxtQ0FBbUMsQ0FBQyxDQUFDO0lBQzdGLFFBQVEsT0FBTyxFQUFFLENBQUM7UUFDaEIsS0FBSyxDQUFDO1lBQ0osT0FBTywwQkFBa0IsQ0FBQyxJQUFJLENBQUM7UUFDakMsS0FBSyxDQUFDO1lBQ0osT0FBTywwQkFBa0IsQ0FBQyxNQUFNLENBQUM7UUFDbkMsS0FBSyxDQUFDO1lBQ0osT0FBTywwQkFBa0IsQ0FBQyxLQUFLLENBQUM7SUFDcEMsQ0FBQztBQUNILENBQUM7QUFFRDs7R0FFRztBQUVJLEtBQUssVUFBVSx5QkFBeUIsQ0FDN0MsYUFBcUQsRUFDckQsVUFBNkMsRUFDN0MsVUFBaUIsQ0FBQyxFQUNsQixxQkFBZ0MsQ0FBQztJQUVqQyxNQUFNLGtCQUFrQixHQUFHLHVCQUFTLENBQUMsaUJBQWlCLENBQUM7UUFDckQsaUJBQWlCLEVBQUUsQ0FBQyxhQUFhLENBQUM7UUFDbEMsV0FBVyxFQUFFLEVBQUU7S0FDaEIsQ0FBQyxDQUFDO0lBQ0gsTUFBTSx1QkFBdUIsR0FBRyxDQUM5QixNQUFNLHVCQUFTLENBQUMsOEJBQThCLENBQzVDLGtCQUFrQixFQUNsQixFQUFFLEVBQUUsa0VBQWtFO0lBQ3RFLENB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LG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUztpQkFDcEQ7YUFDRjtTQUNGO1FBQ0QsaUJBQWlCLEVBQUUsRUFBRTtLQUN0QixFQUNELENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLENBQUMsRUFDbEMsQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FDMUMsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFnQixtQkFBbUIsQ0FBQyxHQUFnQixFQUFFLFVBQXFCLENBQUM7SUFDMUUsT0FBTztRQUNMLE9BQU8sRUFBRSxPQUFPO1FBQ2hCLE1BQU0sRUFBRSxHQUFHLENBQUMsS0FBSyxFQUFFO0tBQ3BCLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBZ0Isa0JBQWtCLENBQUMsR0FBc0MsRUFBRSxVQUFpQixDQUFDO0lBQzNGLE9BQU87UUFDTCxPQUFPLEVBQUUsT0FBTztRQUNoQixNQUFNLEVBQUUsR0FBRyxDQUFDLFVBQVU7S0FDdkIsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTaWduYXR1cmVTaGFyZVJlY29yZCwgU2lnbmF0dXJlU2hhcmVUeXBlIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IG9wZW5wZ3AgZnJvbSAnb3BlbnBncCc7XG5pbXBvcnQgeyBEa2xzQ29tbXMsIERrbHNUeXBlcyB9IGZyb20gJ0BiaXRnby9zZGstbGliLW1wYyc7XG5pbXBvcnQge1xuICBNUEN2MlNpZ25hdHVyZVNoYXJlUm91bmQxSW5wdXQsXG4gIE1QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDFPdXRwdXQsXG4gIE1QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDJJbnB1dCxcbiAgTVBDdjJTaWduYXR1cmVTaGFyZVJvdW5kMk91dHB1dCxcbiAgTVBDdjJTaWduYXR1cmVTaGFyZVJvdW5kM0lucHV0LFxuICBNUEN2MlBhcnR5RnJvbVN0cmluZ09yTnVtYmVyLFxufSBmcm9tICdAYml0Z28vcHVibGljLXR5cGVzJztcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuZnVuY3Rpb24gcGFydHlJZFRvU2lnbmF0dXJlU2hhcmVUeXBlKHBhcnR5SWQ6IDAgfCAxIHwgMik6IFNpZ25hdHVyZVNoYXJlVHlwZSB7XG4gIGFzc2VydChwYXJ0eUlkID09PSAwIHx8IHBhcnR5SWQgPT09IDEgfHwgcGFydHlJZCA9PT0gMiwgJ0ludmFsaWQgcGFydHlJZCBmb3IgTVBDdjIgc2lnbmluZycpO1xuICBzd2l0Y2ggKHBhcnR5SWQpIHtcbiAgICBjYXNlIDA6XG4gICAgICByZXR1cm4gU2lnbmF0dXJlU2hhcmVUeXBlLlVTRVI7XG4gICAgY2FzZSAxOlxuICAgICAgcmV0dXJuIFNpZ25hdHVyZVNoYXJlVHlwZS5CQUNLVVA7XG4gICAgY2FzZSAyOlxuICAgICAgcmV0dXJuIFNpZ25hdHVyZVNoYXJlVHlwZS5CSVRHTztcbiAgfVxufVxuXG4vKipcbiBIZWxwZXJzIGluIHRoaXMgdGFrZSBjYXJlIG9mIGFsbCBpbnRlcmFjdGlvbiB3aXRoIFdQIEFQSSdzXG4qKi9cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFNpZ25hdHVyZVNoYXJlUm91bmRPbmUoXG4gIHJvdW5kMU1lc3NhZ2U6IERrbHNUeXBlcy5EZXNlcmlhbGl6ZWRCcm9hZGNhc3RNZXNzYWdlLFxuICB1c2VyR3BnS2V5OiBvcGVucGdwLlNlcmlhbGl6ZWRLZXlQYWlyPHN0cmluZz4sXG4gIHBhcnR5SWQ6IDAgfCAxID0gMCxcbiAgb3RoZXJTaWduZXJQYXJ0eUlkOiAwIHwgMSB8IDIgPSAyXG4pOiBQcm9taXNlPFNpZ25hdHVyZVNoYXJlUmVjb3JkPiB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRNZXNzYWdlcyA9IERrbHNUeXBlcy5zZXJpYWxpemVNZXNzYWdlcyh7XG4gICAgYnJvYWRjYXN0TWVzc2FnZXM6IFtyb3VuZDFNZXNzYWdlXSxcbiAgICBwMnBNZXNzYWdlczogW10sXG4gIH0pO1xuICBjb25zdCBhdXRoRW5jQnJvYWRjYXN0TWVzc2FnZSA9IChcbiAgICBhd2FpdCBEa2xzQ29tbXMuZW5jcnlwdEFuZEF1dGhPdXRnb2luZ01lc3NhZ2VzKFxuICAgICAgc2VyaWFsaXplZE1lc3NhZ2VzLFxuICAgICAgW10sIC8vIEJyb2FkY2FzdCBtZXNzYWdlIHNvIGRvZXNuJ3QgbmVlZCB0byBlbmNyeXB0IHRvIEJpdEdvJ3MgR1BHIGtleVxuICAgICAgW2dldFVzZXJQYXJ0eUdwZ0tleSh1c2VyR3BnS2V5LCBwYXJ0eUlkKV1cbiAgICApXG4gICkuYnJvYWRjYXN0TWVzc2FnZXNbMF07XG4gIC8vIFNoYXJlIHR5cGUgZXhwZWN0ZWQgYnkgV2FsbGV0IFBsYXRmb3JtJ3MgQVBJXG4gIGFzc2VydChNUEN2MlBhcnR5RnJvbVN0cmluZ09yTnVtYmVyLmlzKGF1dGhFbmNCcm9hZGNhc3RNZXNzYWdlLmZyb20pKTtcbiAgY29uc3Qgc2hhcmU6IE1QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDFJbnB1dCA9IHtcbiAgICB0eXBlOiAncm91bmQxSW5wdXQnLFxuICAgIGRhdGE6IHtcbiAgICAgIG1zZzE6IHtcbiAgICAgICAgZnJvbTogYXV0aEVuY0Jyb2FkY2FzdE1lc3NhZ2UuZnJvbSxcbiAgICAgICAgbWVzc2FnZTogYXV0aEVuY0Jyb2FkY2FzdE1lc3NhZ2UucGF5bG9hZC5tZXNzYWdlLFxuICAgICAgICBzaWduYXR1cmU6IGF1dGhFbmNCcm9hZGNhc3RNZXNzYWdlLnBheWxvYWQuc2lnbmF0dXJlLFxuICAgICAgfSxcbiAgICB9LFxuICB9O1xuICBjb25zdCBzZXJpYWxpemVkU2hhcmUgPSBKU09OLnN0cmluZ2lmeShzaGFyZSk7XG4gIHJldHVybiB7XG4gICAgZnJvbTogcGFydHlJZFRvU2lnbmF0dXJlU2hhcmVUeXBlKHBhcnR5SWQpLFxuICAgIHRvOiBwYXJ0eUlkVG9TaWduYXR1cmVTaGFyZVR5cGUob3RoZXJTaWduZXJQYXJ0eUlkKSxcbiAgICBzaGFyZTogc2VyaWFsaXplZFNoYXJlLFxuICB9O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0U2lnbmF0dXJlU2hhcmVSb3VuZFR3byhcbiAgdXNlclRvQml0R29NZXNzYWdlczI6IERrbHNUeXBlcy5EZXNlcmlhbGl6ZWRNZXNzYWdlcyxcbiAgdXNlclRvQml0R29NZXNzYWdlczM6IERrbHNUeXBlcy5EZXNlcmlhbGl6ZWRNZXNzYWdlcyxcbiAgdXNlckdwZ0tleTogb3BlbnBncC5TZXJpYWxpemVkS2V5UGFpcjxzdHJpbmc+LFxuICBvdGhlclBhcnR5R3BnS2V5OiBvcGVucGdwLktleSxcbiAgcGFydHlJZDogMCB8IDEgPSAwLFxuICBvdGhlclNpZ25lclBhcnR5SWQ6IDAgfCAxIHwgMiA9IDJcbik6IFByb21pc2U8U2lnbmF0dXJlU2hhcmVSZWNvcmQ+IHtcbiAgY29uc3QgdXNlclRvQml0R29FbmNyeXB0ZWRNc2cyID0gYXdhaXQgRGtsc0NvbW1zLmVuY3J5cHRBbmRBdXRoT3V0Z29pbmdNZXNzYWdlcyhcbiAgICBEa2xzVHlwZXMuc2VyaWFsaXplTWVzc2FnZXModXNlclRvQml0R29NZXNzYWdlczIpLFxuICAgIFtnZXRCaXRHb1BhcnR5R3BnS2V5KG90aGVyUGFydHlHcGdLZXksIG90aGVyU2lnbmVyUGFydHlJZCldLFxuICAgIFtnZXRVc2VyUGFydHlHcGdLZXkodXNlckdwZ0tleSwgcGFydHlJZCldXG4gICk7XG5cbiAgY29uc3QgdXNlclRvQml0R29FbmNyeXB0ZWRNc2czID0gYXdhaXQgRGtsc0NvbW1zLmVuY3J5cHRBbmRBdXRoT3V0Z29pbmdNZXNzYWdlcyhcbiAgICBEa2xzVHlwZXMuc2VyaWFsaXplTWVzc2FnZXModXNlclRvQml0R29NZXNzYWdlczMpLFxuICAgIFtnZXRCaXRHb1BhcnR5R3BnS2V5KG90aGVyUGFydHlHcGdLZXksIG90aGVyU2lnbmVyUGFydHlJZCldLFxuICAgIFtnZXRVc2VyUGFydHlHcGdLZXkodXNlckdwZ0tleSwgcGFydHlJZCldXG4gICk7XG4gIGFzc2VydCh1c2VyVG9CaXRHb0VuY3J5cHRlZE1zZzIucDJwTWVzc2FnZXMubGVuZ3RoLCAnVXNlciB0byBCaXRHbyBtZXNzYWdlcyAyIG5vdCBwcmVzZW50LicpO1xuICBhc3NlcnQodXNlclRvQml0R29FbmNyeXB0ZWRNc2czLnAycE1lc3NhZ2VzLmxlbmd0aCwgJ1VzZXIgdG8gQml0R28gbWVzc2FnZXMgMyBub3QgcHJlc2VudC4nKTtcbiAgYXNzZXJ0KE1QQ3YyUGFydHlGcm9tU3RyaW5nT3JOdW1iZXIuaXModXNlclRvQml0R29FbmNyeXB0ZWRNc2cyLnAycE1lc3NhZ2VzWzBdLmZyb20pKTtcbiAgYXNzZXJ0KE1QQ3YyUGFydHlGcm9tU3RyaW5nT3JOdW1iZXIuaXModXNlclRvQml0R29FbmNyeXB0ZWRNc2cyLnAycE1lc3NhZ2VzWzBdLnRvKSk7XG4gIGFzc2VydChNUEN2MlBhcnR5RnJvbVN0cmluZ09yTnVtYmVyLmlzKHVzZXJUb0JpdEdvRW5jcnlwdGVkTXNnMy5wMnBNZXNzYWdlc1swXS5mcm9tKSk7XG4gIGFzc2VydChNUEN2MlBhcnR5RnJvbVN0cmluZ09yTnVtYmVyLmlzKHVzZXJUb0JpdEdvRW5jcnlwdGVkTXNnMy5wMnBNZXNzYWdlc1swXS50bykpO1xuICBjb25zdCBzaGFyZTogTVBDdjJTaWduYXR1cmVTaGFyZVJvdW5kMklucHV0ID0ge1xuICAgIHR5cGU6ICdyb3VuZDJJbnB1dCcsXG4gICAgZGF0YToge1xuICAgICAgbXNnMjoge1xuICAgICAgICBmcm9tOiB1c2VyVG9CaXRHb0VuY3J5cHRlZE1zZzIucDJwTWVzc2FnZXNbMF0uZnJvbSxcbiAgICAgICAgdG86IHVzZXJUb0JpdEdvRW5jcnlwdGVkTXNnMi5wMnBNZXNzYWdlc1swXS50byxcbiAgICAgICAgZW5jcnlwdGVkTWVzc2FnZTogdXNlclRvQml0R29FbmNyeXB0ZWRNc2cyLnAycE1lc3NhZ2VzWzBdLnBheWxvYWQuZW5jcnlwdGVkTWVzc2FnZSxcbiAgICAgICAgc2lnbmF0dXJlOiB1c2VyVG9CaXRHb0VuY3J5cHRlZE1zZzIucDJwTWVzc2FnZXNbMF0ucGF5bG9hZC5zaWduYXR1cmUsXG4gICAgICB9LFxuICAgICAgbXNnMzoge1xuICAgICAgICBmcm9tOiB1c2VyVG9CaXRHb0VuY3J5cHRlZE1zZzMucDJwTWVzc2FnZXNbMF0uZnJvbSxcbiAgICAgICAgdG86IHVzZXJUb0JpdEdvRW5jcnlwdGVkTXNnMy5wMnBNZXNzYWdlc1swXS50byxcbiAgICAgICAgZW5jcnlwdGVkTWVzc2FnZTogdXNlclRvQml0R29FbmNyeXB0ZWRNc2czLnAycE1lc3NhZ2VzWzBdLnBheWxvYWQuZW5jcnlwdGVkTWVzc2FnZSxcbiAgICAgICAgc2lnbmF0dXJlOiB1c2VyVG9CaXRHb0VuY3J5cHRlZE1zZzMucDJwTWVzc2FnZXNbMF0ucGF5bG9hZC5zaWduYXR1cmUsXG4gICAgICB9LFxuICAgIH0sXG4gIH07XG4gIHJldHVybiB7XG4gICAgZnJvbTogcGFydHlJZFRvU2lnbmF0dXJlU2hhcmVUeXBlKHBhcnR5SWQpLFxuICAgIHRvOiBwYXJ0eUlkVG9TaWduYXR1cmVTaGFyZVR5cGUob3RoZXJTaWduZXJQYXJ0eUlkKSxcbiAgICBzaGFyZTogSlNPTi5zdHJpbmdpZnkoc2hhcmUpLFxuICB9O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0U2lnbmF0dXJlU2hhcmVSb3VuZFRocmVlKFxuICB1c2VyVG9CaXRHb01lc3NhZ2VzNDogRGtsc1R5cGVzLkRlc2VyaWFsaXplZE1lc3NhZ2VzLFxuICB1c2VyR3BnS2V5OiBvcGVucGdwLlNlcmlhbGl6ZWRLZXlQYWlyPHN0cmluZz4sXG4gIGJpdGdvR3BnS2V5OiBvcGVucGdwLktleSxcbiAgcGFydHlJZDogMCB8IDEgPSAwLFxuICBvdGhlclNpZ25lclBhcnR5SWQ6IDAgfCAxIHwgMiA9IDJcbik6IFByb21pc2U8U2lnbmF0dXJlU2hhcmVSZWNvcmQ+IHtcbiAgY29uc3QgdXNlclRvQml0R29FbmNyeXB0ZWRNc2c0ID0gYXdhaXQgRGtsc0NvbW1zLmVuY3J5cHRBbmRBdXRoT3V0Z29pbmdNZXNzYWdlcyhcbiAgICBEa2xzVHlwZXMuc2VyaWFsaXplTWVzc2FnZXModXNlclRvQml0R29NZXNzYWdlczQpLFxuICAgIFtnZXRCaXRHb1BhcnR5R3BnS2V5KGJpdGdvR3BnS2V5LCBvdGhlclNpZ25lclBhcnR5SWQpXSxcbiAgICBbZ2V0VXNlclBhcnR5R3BnS2V5KHVzZXJHcGdLZXksIHBhcnR5SWQpXVxuICApO1xuICBhc3NlcnQoTVBDdjJQYXJ0eUZyb21TdHJpbmdPck51bWJlci5pcyh1c2VyVG9CaXRHb0VuY3J5cHRlZE1zZzQuYnJvYWRjYXN0TWVzc2FnZXNbMF0uZnJvbSkpO1xuICBpZiAoIXVzZXJUb0JpdEdvRW5jcnlwdGVkTXNnNC5icm9hZGNhc3RNZXNzYWdlc1swXS5zaWduYXR1cmVSPy5tZXNzYWdlKSB7XG4gICAgdGhyb3cgRXJyb3IoJ3NpZ25hdHVyZVIgc2hvdWxkIGJlIGRlZmluZWQnKTtcbiAgfVxuICBjb25zdCBzaGFyZTogTVBDdjJTaWduYXR1cmVTaGFyZVJvdW5kM0lucHV0ID0ge1xuICAgIHR5cGU6ICdyb3VuZDNJbnB1dCcsXG4gICAgZGF0YToge1xuICAgICAgbXNnNDoge1xuICAgICAgICBmcm9tOiB1c2VyVG9CaXRHb0VuY3J5cHRlZE1zZzQuYnJvYWRjYXN0TWVzc2FnZXNbMF0uZnJvbSxcbiAgICAgICAgbWVzc2FnZTogdXNlclRvQml0R29FbmNyeXB0ZWRNc2c0LmJyb2FkY2FzdE1lc3NhZ2VzWzBdLnBheWxvYWQubWVzc2FnZSxcbiAgICAgICAgc2lnbmF0dXJlOiB1c2VyVG9CaXRHb0VuY3J5cHRlZE1zZzQuYnJvYWRjYXN0TWVzc2FnZXNbMF0ucGF5bG9hZC5zaWduYXR1cmUsXG4gICAgICAgIHNpZ25hdHVyZVI6IHVzZXJUb0JpdEdvRW5jcnlwdGVkTXNnNC5icm9hZGNhc3RNZXNzYWdlc1swXS5zaWduYXR1cmVSLm1lc3NhZ2UsXG4gICAgICB9LFxuICAgIH0sXG4gIH07XG4gIHJldHVybiB7XG4gICAgZnJvbTogcGFydHlJZFRvU2lnbmF0dXJlU2hhcmVUeXBlKHBhcnR5SWQpLFxuICAgIHRvOiBwYXJ0eUlkVG9TaWduYXR1cmVTaGFyZVR5cGUob3RoZXJTaWduZXJQYXJ0eUlkKSxcbiAgICBzaGFyZTogSlNPTi5zdHJpbmdpZnkoc2hhcmUpLFxuICB9O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdmVyaWZ5Qml0R29NZXNzYWdlc0FuZFNpZ25hdHVyZXNSb3VuZE9uZShcbiAgcGFyc2VkU2lnbmF0dXJlU2hhcmU6IE1QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDFPdXRwdXQsXG4gIHVzZXJHcGdLZXk6IG9wZW5wZ3AuU2VyaWFsaXplZEtleVBhaXI8c3RyaW5nPixcbiAgYml0Z29HcGdLZXk6IG9wZW5wZ3AuS2V5LFxuICBwYXJ0eUlkOiAwIHwgMSA9IDBcbik6IFByb21pc2U8RGtsc1R5cGVzLlNlcmlhbGl6ZWRNZXNzYWdlcz4ge1xuICByZXR1cm4gYXdhaXQgRGtsc0NvbW1zLmRlY3J5cHRBbmRWZXJpZnlJbmNvbWluZ01lc3NhZ2VzKFxuICAgIHtcbiAgICAgIHAycE1lc3NhZ2VzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBmcm9tOiBwYXJzZWRTaWduYXR1cmVTaGFyZS5kYXRhLm1zZzIuZnJvbSxcbiAgICAgICAgICB0bzogcGFyc2VkU2lnbmF0dXJlU2hhcmUuZGF0YS5tc2cyLnRvLFxuICAgICAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgICAgIGVuY3J5cHRlZE1lc3NhZ2U6IHBhcnNlZFNpZ25hdHVyZVNoYXJlLmRhdGEubXNnMi5lbmNyeXB0ZWRNZXNzYWdlLFxuICAgICAgICAgICAgc2lnbmF0dXJlOiBwYXJzZWRTaWduYXR1cmVTaGFyZS5kYXRhLm1zZzIuc2lnbmF0dXJlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgYnJvYWRjYXN0TWVzc2FnZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZyb206IHBhcnNlZFNpZ25hdHVyZVNoYXJlLmRhdGEubXNnMS5mcm9tLFxuICAgICAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IHBhcnNlZFNpZ25hdHVyZVNoYXJlLmRhdGEubXNnMS5tZXNzYWdlLFxuICAgICAgICAgICAgc2lnbmF0dXJlOiBwYXJzZWRTaWduYXR1cmVTaGFyZS5kYXRhLm1zZzEuc2lnbmF0dXJlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0sXG4gICAgW2dldEJpdEdvUGFydHlHcGdLZXkoYml0Z29HcGdLZXkpXSxcbiAgICBbZ2V0VXNlclBhcnR5R3BnS2V5KHVzZXJHcGdLZXksIHBhcnR5SWQpXVxuICApO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdmVyaWZ5Qml0R29NZXNzYWdlc0FuZFNpZ25hdHVyZXNSb3VuZFR3byhcbiAgcGFyc2VkU2lnbmF0dXJlU2hhcmU6IE1QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDJPdXRwdXQsXG4gIHVzZXJHcGdLZXk6IG9wZW5wZ3AuU2VyaWFsaXplZEtleVBhaXI8c3RyaW5nPixcbiAgYml0Z29HcGdLZXk6IG9wZW5wZ3AuS2V5LFxuICBwYXJ0eUlkOiAwIHwgMSA9IDBcbik6IFByb21pc2U8RGtsc1R5cGVzLlNlcmlhbGl6ZWRNZXNzYWdlcz4ge1xuICByZXR1cm4gYXdhaXQgRGtsc0NvbW1zLmRlY3J5cHRBbmRWZXJpZnlJbmNvbWluZ01lc3NhZ2VzKFxuICAgIHtcbiAgICAgIHAycE1lc3NhZ2VzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBmcm9tOiBwYXJzZWRTaWduYXR1cmVTaGFyZS5kYXRhLm1zZzMuZnJvbSxcbiAgICAgICAgICB0bzogcGFyc2VkU2lnbmF0dXJlU2hhcmUuZGF0YS5tc2czLnRvLFxuICAgICAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgICAgIGVuY3J5cHRlZE1lc3NhZ2U6IHBhcnNlZFNpZ25hdHVyZVNoYXJlLmRhdGEubXNnMy5lbmNyeXB0ZWRNZXNzYWdlLFxuICAgICAgICAgICAgc2lnbmF0dXJlOiBwYXJzZWRTaWduYXR1cmVTaGFyZS5kYXRhLm1zZzMuc2lnbmF0dXJlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgYnJvYWRjYXN0TWVzc2FnZXM6IFtdLFxuICAgIH0sXG4gICAgW2dldEJpdEdvUGFydHlHcGdLZXkoYml0Z29HcGdLZXkpXSxcbiAgICBbZ2V0VXNlclBhcnR5R3BnS2V5KHVzZXJHcGdLZXksIHBhcnR5SWQpXVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Qml0R29QYXJ0eUdwZ0tleShrZXk6IG9wZW5wZ3AuS2V5LCBwYXJ0eUlkOiAwIHwgMSB8IDIgPSAyKTogRGtsc1R5cGVzLlBhcnR5R3BnS2V5IHtcbiAgcmV0dXJuIHtcbiAgICBwYXJ0eUlkOiBwYXJ0eUlkLFxuICAgIGdwZ0tleToga2V5LmFybW9yKCksXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRVc2VyUGFydHlHcGdLZXkoa2V5OiBvcGVucGdwLlNlcmlhbGl6ZWRLZXlQYWlyPHN0cmluZz4sIHBhcnR5SWQ6IDAgfCAxID0gMCk6IERrbHNUeXBlcy5QYXJ0eUdwZ0tleSB7XG4gIHJldHVybiB7XG4gICAgcGFydHlJZDogcGFydHlJZCxcbiAgICBncGdLZXk6IGtleS5wcml2YXRlS2V5LFxuICB9O1xufVxuIl19