@bitgo-beta/sdk-api 1.10.1-beta.180 → 1.10.1-beta.1801

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. package/dist/package.json +20 -27
  2. package/dist/src/api.d.ts +8 -5
  3. package/dist/src/api.d.ts.map +1 -1
  4. package/dist/src/api.js +130 -71
  5. package/dist/src/bitgoAPI.d.ts +132 -15
  6. package/dist/src/bitgoAPI.d.ts.map +1 -1
  7. package/dist/src/bitgoAPI.js +779 -299
  8. package/dist/src/encrypt.d.ts +23 -4
  9. package/dist/src/encrypt.d.ts.map +1 -1
  10. package/dist/src/encrypt.js +86 -13
  11. package/dist/src/encryptV2.d.ts +68 -0
  12. package/dist/src/encryptV2.d.ts.map +1 -0
  13. package/dist/src/encryptV2.js +202 -0
  14. package/dist/src/encryptionSession.d.ts +34 -0
  15. package/dist/src/encryptionSession.d.ts.map +1 -0
  16. package/dist/src/encryptionSession.js +95 -0
  17. package/dist/src/index.d.ts +2 -0
  18. package/dist/src/index.d.ts.map +1 -1
  19. package/dist/src/index.js +8 -2
  20. package/dist/src/types.d.ts +56 -43
  21. package/dist/src/types.d.ts.map +1 -1
  22. package/dist/src/types.js +4 -2
  23. package/dist/src/util.d.ts +12 -0
  24. package/dist/src/util.d.ts.map +1 -1
  25. package/dist/src/util.js +57 -4
  26. package/dist/src/v1/blockchain.js +25 -12
  27. package/dist/src/v1/keychains.js +34 -26
  28. package/dist/src/v1/markets.js +10 -5
  29. package/dist/src/v1/pendingapproval.d.ts.map +1 -1
  30. package/dist/src/v1/pendingapproval.js +57 -18
  31. package/dist/src/v1/pendingapprovals.d.ts.map +1 -1
  32. package/dist/src/v1/pendingapprovals.js +41 -7
  33. package/dist/src/v1/signPsbt.d.ts +14 -0
  34. package/dist/src/v1/signPsbt.d.ts.map +1 -0
  35. package/dist/src/v1/signPsbt.js +69 -0
  36. package/dist/src/v1/transactionBuilder.js +214 -90
  37. package/dist/src/v1/travelRule.js +162 -66
  38. package/dist/src/v1/verifyAddress.d.ts +6 -0
  39. package/dist/src/v1/verifyAddress.d.ts.map +1 -0
  40. package/dist/src/v1/verifyAddress.js +50 -0
  41. package/dist/src/v1/wallet.d.ts.map +1 -1
  42. package/dist/src/v1/wallet.js +494 -230
  43. package/dist/src/v1/wallets.js +113 -53
  44. package/dist/test/unit/api.d.ts +2 -0
  45. package/dist/test/unit/api.d.ts.map +1 -0
  46. package/dist/test/unit/api.js +307 -0
  47. package/dist/test/unit/bitgoAPI.d.ts +2 -0
  48. package/dist/test/unit/bitgoAPI.d.ts.map +1 -0
  49. package/dist/test/unit/bitgoAPI.js +896 -0
  50. package/dist/test/unit/encrypt.d.ts +2 -0
  51. package/dist/test/unit/encrypt.d.ts.map +1 -0
  52. package/dist/test/unit/encrypt.js +415 -0
  53. package/dist/test/unit/hmacStrategy.d.ts +2 -0
  54. package/dist/test/unit/hmacStrategy.d.ts.map +1 -0
  55. package/dist/test/unit/hmacStrategy.js +136 -0
  56. package/dist/test/unit/utils.d.ts +2 -0
  57. package/dist/test/unit/utils.d.ts.map +1 -0
  58. package/dist/test/unit/utils.js +65 -0
  59. package/dist/test/unit/v1/fixtures/accelerate-tx.d.ts +4 -0
  60. package/dist/test/unit/v1/fixtures/accelerate-tx.d.ts.map +1 -0
  61. package/dist/test/unit/v1/fixtures/accelerate-tx.js +53 -0
  62. package/dist/test/unit/v1/fixtures/index.d.ts +3 -0
  63. package/dist/test/unit/v1/fixtures/index.d.ts.map +1 -0
  64. package/dist/test/unit/v1/fixtures/index.js +24 -0
  65. package/dist/test/unit/v1/signPsbt.d.ts +2 -0
  66. package/dist/test/unit/v1/signPsbt.d.ts.map +1 -0
  67. package/dist/test/unit/v1/signPsbt.js +53 -0
  68. package/dist/test/unit/v1/travelRule.d.ts +2 -0
  69. package/dist/test/unit/v1/travelRule.d.ts.map +1 -0
  70. package/dist/test/unit/v1/travelRule.js +173 -0
  71. package/dist/test/unit/v1/wallet.d.ts +2 -0
  72. package/dist/test/unit/v1/wallet.d.ts.map +1 -0
  73. package/dist/test/unit/v1/wallet.js +1603 -0
  74. package/dist/tsconfig.tsbuildinfo +1 -0
  75. package/package.json +20 -27
  76. package/.eslintignore +0 -5
  77. package/CHANGELOG.md +0 -539
  78. package/dist/web/main.js +0 -2
  79. package/dist/web/main.js.LICENSE.txt +0 -110
@@ -2,6 +2,42 @@
2
2
  /**
3
3
  * @hidden
4
4
  */
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
17
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
18
+ }) : function(o, v) {
19
+ o["default"] = v;
20
+ });
21
+ var __importStar = (this && this.__importStar) || (function () {
22
+ var ownKeys = function(o) {
23
+ ownKeys = Object.getOwnPropertyNames || function (o) {
24
+ var ar = [];
25
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
26
+ return ar;
27
+ };
28
+ return ownKeys(o);
29
+ };
30
+ return function (mod) {
31
+ if (mod && mod.__esModule) return mod;
32
+ var result = {};
33
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
34
+ __setModuleDefault(result, mod);
35
+ return result;
36
+ };
37
+ })();
38
+ var __importDefault = (this && this.__importDefault) || function (mod) {
39
+ return (mod && mod.__esModule) ? mod : { "default": mod };
40
+ };
5
41
  Object.defineProperty(exports, "__esModule", { value: true });
6
42
  /**
7
43
  */
@@ -13,9 +49,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
13
49
  //
14
50
  const sdk_core_1 = require("@bitgo-beta/sdk-core");
15
51
  const utxo_lib_1 = require("@bitgo-beta/utxo-lib");
16
- const utxolib = require("@bitgo-beta/utxo-lib");
17
- const Bluebird = require("bluebird");
18
- const _ = require("lodash");
52
+ const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
53
+ const lodash_1 = __importDefault(require("lodash"));
19
54
  //
20
55
  // Constructor
21
56
  //
@@ -39,7 +74,7 @@ TravelRule.prototype.getRecipients = function (params, callback) {
39
74
  params.txid = params.txid || params.hash;
40
75
  sdk_core_1.common.validateParams(params, ['txid'], [], callback);
41
76
  const url = this.url(params.txid + '/recipients');
42
- return Bluebird.resolve(this.bitgo.get(url).result('recipients')).nodeify(callback);
77
+ return Promise.resolve(this.bitgo.get(url).result('recipients')).then(callback).catch(callback);
43
78
  };
44
79
  TravelRule.prototype.validateTravelInfo = function (info) {
45
80
  const fields = {
@@ -54,7 +89,7 @@ TravelRule.prototype.validateTravelInfo = function (info) {
54
89
  toUserAddress: { type: 'string' },
55
90
  extra: { type: 'object' },
56
91
  };
57
- _.forEach(fields, function (field, fieldName) {
92
+ lodash_1.default.forEach(fields, function (field, fieldName) {
58
93
  // No required fields yet -- should there be?
59
94
  if (field.required) {
60
95
  if (info[fieldName] === undefined) {
@@ -66,96 +101,155 @@ TravelRule.prototype.validateTravelInfo = function (info) {
66
101
  }
67
102
  });
68
103
  // Strip out any other fields we don't know about
69
- const result = _.pick(info, _.keys(fields));
70
- if (_.isEmpty(result)) {
104
+ const result = lodash_1.default.pick(info, lodash_1.default.keys(fields));
105
+ if (lodash_1.default.isEmpty(result)) {
71
106
  throw new Error('empty travel data');
72
107
  }
73
108
  return result;
74
109
  };
75
- /**
76
- * Takes a transaction object as returned by getTransaction or listTransactions, along
77
- * with a keychain (or hdnode object), and attempts to decrypt any encrypted travel
78
- * info included in the transaction's receivedTravelInfo field.
79
- * Parameters:
80
- * tx: a transaction object
81
- * keychain: keychain object (with xprv)
82
- * Returns:
83
- * the tx object, augmented with decrypted travelInfo fields
84
- */
85
- TravelRule.prototype.decryptReceivedTravelInfo = function (params = {}) {
110
+ function validateTravelRuleDecryptParams(params = {}) {
86
111
  const tx = params.tx;
87
- if (!_.isObject(tx)) {
112
+ if (!lodash_1.default.isObject(tx)) {
88
113
  throw new Error('expecting tx param to be object');
89
114
  }
90
115
  if (!tx.receivedTravelInfo || !tx.receivedTravelInfo.length) {
91
- return tx;
116
+ return { tx, hdNode: undefined };
92
117
  }
93
118
  const keychain = params.keychain;
94
- if (!_.isObject(keychain) || !_.isString(keychain.xprv)) {
119
+ if (!lodash_1.default.isObject(keychain) || !lodash_1.default.isString(keychain.xprv)) {
95
120
  throw new Error('expecting keychain param with xprv');
96
121
  }
97
122
  const hdNode = utxo_lib_1.bip32.fromBase58(keychain.xprv);
98
- tx.receivedTravelInfo.forEach((info) => {
99
- const key = hdNode.derivePath(sdk_core_1.sanitizeLegacyPath(info.toPubKeyPath));
100
- const secret = sdk_core_1.getSharedSecret(key, Buffer.from(info.fromPubKey, 'hex')).toString('hex');
101
- try {
102
- const decrypted = this.bitgo.decrypt({
103
- input: info.encryptedTravelInfo,
104
- password: secret,
105
- });
106
- info.travelInfo = JSON.parse(decrypted);
107
- }
108
- catch (err) {
109
- console.error('failed to decrypt or parse travel info for ', info.transactionId + ':' + info.outputIndex);
110
- }
111
- });
112
- return tx;
113
- };
114
- TravelRule.prototype.prepareParams = function (params) {
123
+ return { tx, hdNode };
124
+ }
125
+ function prepareTravelRuleParamsCommon(self, params) {
115
126
  params = params || {};
116
127
  params.txid = params.txid || params.hash;
117
128
  sdk_core_1.common.validateParams(params, ['txid'], ['fromPrivateInfo']);
118
129
  const txid = params.txid;
119
130
  const recipient = params.recipient;
120
131
  let travelInfo = params.travelInfo;
121
- if (!recipient || !_.isObject(recipient)) {
132
+ if (!recipient || !lodash_1.default.isObject(recipient)) {
122
133
  throw new Error('invalid or missing recipient');
123
134
  }
124
- if (!travelInfo || !_.isObject(travelInfo)) {
135
+ if (!travelInfo || !lodash_1.default.isObject(travelInfo)) {
125
136
  throw new Error('invalid or missing travelInfo');
126
137
  }
127
138
  if (!params.noValidate) {
128
- travelInfo = this.validateTravelInfo(travelInfo);
139
+ travelInfo = self.validateTravelInfo(travelInfo);
129
140
  }
130
- // Fill in toEnterprise if not already filled
131
141
  if (!travelInfo.toEnterprise && recipient.enterprise) {
132
142
  travelInfo.toEnterprise = recipient.enterprise;
133
143
  }
134
144
  // If a key was not provided, create a new random key
135
- let fromKey = params.fromKey && utxolib.ECPair.fromWIF(params.fromKey, sdk_core_1.getNetwork());
145
+ let fromKey = params.fromKey && utxolib.ECPair.fromWIF(params.fromKey, (0, sdk_core_1.getNetwork)());
136
146
  if (!fromKey) {
137
- fromKey = sdk_core_1.makeRandomKey();
147
+ fromKey = (0, sdk_core_1.makeRandomKey)();
138
148
  }
139
149
  // Compute the shared key for encryption
140
- const sharedSecret = sdk_core_1.getSharedSecret(fromKey, Buffer.from(recipient.pubKey, 'hex')).toString('hex');
150
+ const sharedSecret = (0, sdk_core_1.getSharedSecret)(fromKey, Buffer.from(recipient.pubKey, 'hex')).toString('hex');
141
151
  // JSON-ify and encrypt the payload
142
152
  const travelInfoJSON = JSON.stringify(travelInfo);
143
- const encryptedTravelInfo = this.bitgo.encrypt({
144
- input: travelInfoJSON,
145
- password: sharedSecret,
146
- });
153
+ return {
154
+ txid,
155
+ recipient,
156
+ travelInfoJSON,
157
+ fromKey,
158
+ sharedSecret,
159
+ fromPrivateInfo: params.fromPrivateInfo,
160
+ };
161
+ }
162
+ function buildTravelRuleSendParams(prepared, encryptedTravelInfo) {
147
163
  const result = {
148
- txid: txid,
149
- outputIndex: recipient.outputIndex,
150
- toPubKey: recipient.pubKey,
151
- fromPubKey: fromKey.publicKey.toString('hex'),
164
+ txid: prepared.txid,
165
+ outputIndex: prepared.recipient.outputIndex,
166
+ toPubKey: prepared.recipient.pubKey,
167
+ fromPubKey: prepared.fromKey.publicKey.toString('hex'),
152
168
  encryptedTravelInfo: encryptedTravelInfo,
153
169
  fromPrivateInfo: undefined,
154
170
  };
155
- if (params.fromPrivateInfo) {
156
- result.fromPrivateInfo = params.fromPrivateInfo;
171
+ if (prepared.fromPrivateInfo) {
172
+ result.fromPrivateInfo = prepared.fromPrivateInfo;
157
173
  }
158
174
  return result;
175
+ }
176
+ /**
177
+ * Takes a transaction object as returned by getTransaction or listTransactions, along
178
+ * with a keychain (or hdnode object), and attempts to decrypt any encrypted travel
179
+ * info included in the transaction's receivedTravelInfo field.
180
+ * Parameters:
181
+ * tx: a transaction object
182
+ * keychain: keychain object (with xprv)
183
+ * Returns:
184
+ * the tx object, augmented with decrypted travelInfo fields
185
+ * TODO: Deprecate in favor of decryptReceivedTravelInfoAsync once v2 encryption is default.
186
+ */
187
+ TravelRule.prototype.decryptReceivedTravelInfo = function (params = {}) {
188
+ const { tx, hdNode } = validateTravelRuleDecryptParams(params);
189
+ if (!hdNode) {
190
+ return tx;
191
+ }
192
+ tx.receivedTravelInfo.forEach((info) => {
193
+ const key = hdNode.derivePath((0, sdk_core_1.sanitizeLegacyPath)(info.toPubKeyPath));
194
+ const secret = (0, sdk_core_1.getSharedSecret)(key, Buffer.from(info.fromPubKey, 'hex')).toString('hex');
195
+ try {
196
+ const decrypted = this.bitgo.decrypt({
197
+ input: info.encryptedTravelInfo,
198
+ password: secret,
199
+ });
200
+ info.travelInfo = JSON.parse(decrypted);
201
+ }
202
+ catch (err) {
203
+ console.error('failed to decrypt or parse travel info for ', info.transactionId + ':' + info.outputIndex);
204
+ }
205
+ });
206
+ return tx;
207
+ };
208
+ /**
209
+ * Async version of decryptReceivedTravelInfo with v2 encrypt/decrypt support.
210
+ */
211
+ TravelRule.prototype.decryptReceivedTravelInfoAsync = async function (params = {}) {
212
+ const { tx, hdNode } = validateTravelRuleDecryptParams(params);
213
+ if (!hdNode) {
214
+ return tx;
215
+ }
216
+ for (const info of tx.receivedTravelInfo) {
217
+ const key = hdNode.derivePath((0, sdk_core_1.sanitizeLegacyPath)(info.toPubKeyPath));
218
+ const secret = (0, sdk_core_1.getSharedSecret)(key, Buffer.from(info.fromPubKey, 'hex')).toString('hex');
219
+ try {
220
+ const decrypted = await this.bitgo.decryptAsync({
221
+ input: info.encryptedTravelInfo,
222
+ password: secret,
223
+ });
224
+ info.travelInfo = JSON.parse(decrypted);
225
+ }
226
+ catch (err) {
227
+ console.error('failed to decrypt or parse travel info for ', info.transactionId + ':' + info.outputIndex);
228
+ }
229
+ }
230
+ return tx;
231
+ };
232
+ /**
233
+ * TODO: Deprecate in favor of prepareParamsAsync once v2 encryption is default.
234
+ */
235
+ TravelRule.prototype.prepareParams = function (params) {
236
+ const prepared = prepareTravelRuleParamsCommon(this, params);
237
+ const encryptedTravelInfo = this.bitgo.encrypt({
238
+ input: prepared.travelInfoJSON,
239
+ password: prepared.sharedSecret,
240
+ });
241
+ return buildTravelRuleSendParams(prepared, encryptedTravelInfo);
242
+ };
243
+ /**
244
+ * Async version of prepareParams with v2 encrypt/decrypt support.
245
+ */
246
+ TravelRule.prototype.prepareParamsAsync = async function (params) {
247
+ const prepared = prepareTravelRuleParamsCommon(this, params);
248
+ const encryptedTravelInfo = await this.bitgo.encryptAsync({
249
+ input: prepared.travelInfoJSON,
250
+ password: prepared.sharedSecret,
251
+ });
252
+ return buildTravelRuleSendParams(prepared, encryptedTravelInfo);
159
253
  };
160
254
  /**
161
255
  * Send travel data to the server for a transaction
@@ -164,13 +258,15 @@ TravelRule.prototype.send = function (params, callback) {
164
258
  params = params || {};
165
259
  params.txid = params.txid || params.hash;
166
260
  sdk_core_1.common.validateParams(params, ['txid', 'toPubKey', 'encryptedTravelInfo'], ['fromPubKey', 'fromPrivateInfo'], callback);
167
- if (!_.isNumber(params.outputIndex)) {
261
+ if (!lodash_1.default.isNumber(params.outputIndex)) {
168
262
  throw new Error('invalid outputIndex');
169
263
  }
170
- return Bluebird.resolve(this.bitgo
264
+ return Promise.resolve(this.bitgo
171
265
  .post(this.url(params.txid + '/' + params.outputIndex))
172
266
  .send(params)
173
- .result()).nodeify(callback);
267
+ .result())
268
+ .then(callback)
269
+ .catch(callback);
174
270
  };
175
271
  /**
176
272
  * Send multiple travel rule infos for the outputs of a single transaction.
@@ -198,29 +294,29 @@ TravelRule.prototype.sendMany = function (params, callback) {
198
294
  params.txid = params.txid || params.hash;
199
295
  sdk_core_1.common.validateParams(params, ['txid'], callback);
200
296
  const travelInfos = params.travelInfos;
201
- if (!_.isArray(travelInfos)) {
297
+ if (!lodash_1.default.isArray(travelInfos)) {
202
298
  throw new Error('expected parameter travelInfos to be array');
203
299
  }
204
300
  const self = this;
205
- const travelInfoMap = _(travelInfos)
301
+ const travelInfoMap = (0, lodash_1.default)(travelInfos)
206
302
  .keyBy('outputIndex')
207
303
  .mapValues(function (travelInfo) {
208
304
  return self.validateTravelInfo(travelInfo);
209
305
  })
210
306
  .value();
211
- return self.getRecipients({ txid: params.txid }).then(function (recipients) {
307
+ return self.getRecipients({ txid: params.txid }).then(async function (recipients) {
212
308
  // Build up data to post
213
309
  const sendParamsList = [];
214
310
  // don't regenerate a new random key for each recipient
215
- const fromKey = params.fromKey || sdk_core_1.makeRandomKey().toWIF();
216
- recipients.forEach(function (recipient) {
311
+ const fromKey = params.fromKey || (0, sdk_core_1.makeRandomKey)().toWIF();
312
+ for (const recipient of recipients) {
217
313
  const outputIndex = recipient.outputIndex;
218
314
  const info = travelInfoMap[outputIndex];
219
315
  if (info) {
220
316
  if (info.amount && info.amount !== recipient.amount) {
221
317
  throw new Error('amount did not match for output index ' + outputIndex);
222
318
  }
223
- const sendParams = self.prepareParams({
319
+ const sendParams = await self.prepareParamsAsync({
224
320
  txid: params.txid,
225
321
  recipient: recipient,
226
322
  travelInfo: info,
@@ -229,7 +325,7 @@ TravelRule.prototype.sendMany = function (params, callback) {
229
325
  });
230
326
  sendParamsList.push(sendParams);
231
327
  }
232
- });
328
+ }
233
329
  const result = {
234
330
  matched: sendParamsList.length,
235
331
  results: [],
@@ -254,4 +350,4 @@ TravelRule.prototype.sendMany = function (params, callback) {
254
350
  });
255
351
  };
256
352
  module.exports = TravelRule;
257
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhdmVsUnVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy92MS90cmF2ZWxSdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7R0FFRzs7QUFFSDtHQUNHO0FBQ0gsRUFBRTtBQUNGLG9CQUFvQjtBQUNwQiwyQ0FBMkM7QUFDM0MsRUFBRTtBQUNGLG9EQUFvRDtBQUNwRCxFQUFFO0FBQ0YsbURBQThHO0FBQzlHLG1EQUE2RDtBQUM3RCxnREFBZ0Q7QUFDaEQscUNBQXFDO0FBQ3JDLDRCQUE0QjtBQXlCNUIsRUFBRTtBQUNGLGNBQWM7QUFDZCxFQUFFO0FBQ0YsTUFBTSxVQUFVLEdBQUcsVUFBVSxLQUFLO0lBQ2hDLHNDQUFzQztJQUN0QyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUNyQixDQUFDLENBQUM7QUFFRixVQUFVLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxVQUFVLEtBQUs7SUFDeEMsS0FBSyxHQUFHLEtBQUssSUFBSSxFQUFFLENBQUM7SUFDcEIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLENBQUM7QUFDNUMsQ0FBQyxDQUFDO0FBRUY7Ozs7OztHQU1HO0FBQ0gsVUFBVSxDQUFDLFNBQVMsQ0FBQyxhQUFhLEdBQUcsVUFBVSxNQUFNLEVBQUUsUUFBUTtJQUM3RCxNQUFNLEdBQUcsTUFBTSxJQUFJLEVBQUUsQ0FBQztJQUN0QixNQUFNLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQztJQUN6QyxpQkFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFFdEQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxHQUFHLGFBQWEsQ0FBQyxDQUFDO0lBQ2xE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QUNmLE9BQU8sTUFBTSxDQUFDO2FBQ2Y7WUFDRCxPQUFPLElBQUk7aUJBQ1IsSUFBSSxDQUFDLFVBQVUsQ0FBQztpQkFDaEIsSUFBSSxDQUFDLFVBQVUsR0FBRztnQkFDakIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztnQkFDckMsT0FBTyxVQUFVLEVBQUUsQ0FBQztZQUN0QixDQUFDLENBQUM7aUJBQ0QsS0FBSyxDQUFDLFVBQVUsR0FBRztnQkFDbEIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDL0MsT0FBTyxVQUFVLEVBQUUsQ0FBQztZQUN0QixDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQztRQUVGLE9BQU8sVUFBVSxFQUFFLENBQUM7SUFDdEIsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGhpZGRlblxuICovXG5cbi8qKlxuICovXG4vL1xuLy8gVHJhdmVsUnVsZSBPYmplY3Rcbi8vIEJpdEdvIGFjY2Vzc29yIGZvciBhIHNwZWNpZmljIGVudGVycHJpc2Vcbi8vXG4vLyBDb3B5cmlnaHQgMjAxNCwgQml0R28sIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vL1xuaW1wb3J0IHsgY29tbW9uLCBnZXROZXR3b3JrLCBnZXRTaGFyZWRTZWNyZXQsIG1ha2VSYW5kb21LZXksIHNhbml0aXplTGVnYWN5UGF0aCB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IGJpcDMyLCBCSVAzMkludGVyZmFjZSB9IGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcbmltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuaW1wb3J0ICogYXMgQmx1ZWJpcmQgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xuXG5pbnRlcmZhY2UgRGVjcnlwdFJlY2VpdmVkVHJhdmVsUnVsZU9wdGlvbnMge1xuICB0eD86IHtcbiAgICByZWNlaXZlZFRyYXZlbEluZm8/OiB7XG4gICAgICB0b1B1YktleVBhdGg6IHN0cmluZztcbiAgICAgIGZyb21QdWJLZXk6IHN0cmluZztcbiAgICAgIGVuY3J5cHRlZFRyYXZlbEluZm86IHN0cmluZztcbiAgICAgIHRyYXZlbEluZm86IHN0cmluZztcbiAgICAgIHRyYW5zYWN0aW9uSWQ6IHN0cmluZztcbiAgICAgIG91dHB1dEluZGV4OiBudW1iZXI7XG4gICAgfVtdO1xuICB9O1xuICBrZXljaGFpbj86IHtcbiAgICB4cHJ2Pzogc3RyaW5nO1xuICB9O1xuICBoZG5vZGU/OiBCSVAzMkludGVyZmFjZTtcbn1cblxuaW50ZXJmYWNlIFJlY2lwaWVudCB7XG4gIGVudGVycHJpc2U6IHN0cmluZztcbiAgcHViS2V5OiBzdHJpbmc7XG4gIG91dHB1dEluZGV4OiBzdHJpbmc7XG59XG5cbi8vXG4vLyBDb25zdHJ1Y3RvclxuLy9cbmNvbnN0IFRyYXZlbFJ1bGUgPSBmdW5jdGlvbiAoYml0Z28pIHtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIG5vIGltcGxpY2l0IHRoaXNcbiAgdGhpcy5iaXRnbyA9IGJpdGdvO1xufTtcblxuVHJhdmVsUnVsZS5wcm90b3R5cGUudXJsID0gZnVuY3Rpb24gKGV4dHJhKSB7XG4gIGV4dHJhID0gZXh0cmEgfHwgJyc7XG4gIHJldHVybiB0aGlzLmJpdGdvLnVybCgnL3RyYXZlbC8nICsgZXh0cmEpO1xufTtcblxuLyoqXG4gKiBHZXQgYXZhaWxhYmxlIHRyYXZlbC1ydWxlIGluZm8gcmVjaXBpZW50cyBmb3IgYSB0cmFuc2FjdGlvblxuICogQHBhcmFtIHBhcmFtc1xuICogIHR4aWQ6IHRyYW5zYWN0aW9uIGlkXG4gKiBAcGFyYW0gY2FsbGJhY2tcbiAqIEByZXR1cm5zIHsqfVxuICovXG5UcmF2ZWxSdWxlLnByb3RvdHlwZS5nZXRSZWNpcGllbnRzID0gZnVuY3Rpb24gKHBhcmFtcywgY2FsbGJhY2spIHtcbiAgcGFyYW1zID0gcGFyYW1zIHx8IHt9O1xuICBwYXJhbXMudHhpZCA9IHBhcmFtcy50eGlkIHx8IHBhcmFtcy5oYXNoO1xuICBjb21tb24udmFsaWRhdGVQYXJhbXMocGFyYW1zLCBbJ3R4aWQnXSwgW10sIGNhbGxiYWNrKTtcblxuICBjb25zdCB1cmwgPSB0aGlzLnVybChwYXJhbXMudHhpZCArICcvcmVjaXBpZW50cycpO1xuICByZXR1cm4gQmx1ZWJpcmQucmVzb2x2ZSh0aGlzLmJpdGdvLmdldCh1cmwpLnJlc3VsdCgncmVjaXBpZW50cycpKS5ub2RlaWZ5KGNhbGxiYWNrKTtcbn07XG5cblRyYXZlbFJ1bGUucHJvdG90eXBlLnZhbGlkYXRlVHJhdmVsSW5mbyA9IGZ1bmN0aW9uIChpbmZvKSB7XG4gIGNvbnN0IGZpZWxkcyA9IHtcbiAgICBhbW91bnQ6IHsgdHlwZTogJ251bWJlcicgfSxcbiAgICB0b0FkZHJlc3M6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICB0b0VudGVycHJpc2U6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICBmcm9tVXNlck5hbWU6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICBmcm9tVXNlckFjY291bnQ6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICBmcm9tVXNlckFkZHJlc3M6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICB0b1VzZXJOYW1lOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgdG9Vc2VyQWNjb3VudDogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgIHRvVXNlckFkZHJlc3M6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICBleHRyYTogeyB0eXBlOiAnb2JqZWN0JyB9LFxuICB9O1xuXG4gIF8uZm9yRWFjaChmaWVsZHMsIGZ1bmN0aW9uIChmaWVsZDogYW55LCBmaWVsZE5hbWUpIHtcbiAgICAvLyBObyByZXF1aXJlZCBmaWVsZHMgeWV0IC0tIHNob3VsZCB0aGVyZSBiZT9cbiAgICBpZiAoZmllbGQucmVxdWlyZWQpIHtcbiAgICAgIGlmIChpbmZvW2ZpZWxkTmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgcmVxdWlyZWQgZmllbGQgJyArIGZpZWxkTmFtZSArICcgaW4gdHJhdmVsIGluZm8nKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGluZm9bZmllbGROYW1lXSAmJiB0eXBlb2YgaW5mb1tmaWVsZE5hbWVdICE9PSBmaWVsZC50eXBlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2luY29ycmVjdCB0eXBlIGZvciBmaWVsZCAnICsgZmllbGROYW1lICsgJyBpbiB0cmF2ZWwgaW5mbywgZXhwZWN0ZWQgJyArIGZpZWxkLnR5cGUpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gU3RyaXAgb3V0IGFueSBvdGhlciBmaWVsZHMgd2UgZG9uJ3Qga25vdyBhYm91dFxuICBjb25zdCByZXN1bHQgPSBfLnBpY2soaW5mbywgXy5rZXlzKGZpZWxkcykpO1xuICBpZiAoXy5pc0VtcHR5KHJlc3VsdCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2VtcHR5IHRyYXZlbCBkYXRhJyk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8qKlxuICogVGFrZXMgYSB0cmFuc2FjdGlvbiBvYmplY3QgYXMgcmV0dXJuZWQgYnkgZ2V0VHJhbnNhY3Rpb24gb3IgbGlzdFRyYW5zYWN0aW9ucywgYWxvbmdcbiAqIHdpdGggYSBrZXljaGFpbiAob3IgaGRub2RlIG9iamVjdCksIGFuZCBhdHRlbXB0cyB0byBkZWNyeXB0IGFueSBlbmNyeXB0ZWQgdHJhdmVsXG4gKiBpbmZvIGluY2x1ZGVkIGluIHRoZSB0cmFuc2FjdGlvbidzIHJlY2VpdmVkVHJhdmVsSW5mbyBmaWVsZC5cbiAqIFBhcmFtZXRlcnM6XG4gKiAgIHR4OiBhIHRyYW5zYWN0aW9uIG9iamVjdFxuICogICBrZXljaGFpbjoga2V5Y2hhaW4gb2JqZWN0ICh3aXRoIHhwcnYpXG4gKiBSZXR1cm5zOlxuICogICB0aGUgdHggb2JqZWN0LCBhdWdtZW50ZWQgd2l0aCBkZWNyeXB0ZWQgdHJhdmVsSW5mbyBmaWVsZHNcbiAqL1xuVHJhdmVsUnVsZS5wcm90b3R5cGUuZGVjcnlwdFJlY2VpdmVkVHJhdmVsSW5mbyA9IGZ1bmN0aW9uIChwYXJhbXM6IERlY3J5cHRSZWNlaXZlZFRyYXZlbFJ1bGVPcHRpb25zID0ge30pIHtcbiAgY29uc3QgdHggPSBwYXJhbXMudHg7XG4gIGlmICghXy5pc09iamVjdCh0eCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2V4cGVjdGluZyB0eCBwYXJhbSB0byBiZSBvYmplY3QnKTtcbiAgfVxuXG4gIGlmICghdHgucmVjZWl2ZWRUcmF2ZWxJbmZvIHx8ICF0eC5yZWNlaXZlZFRyYXZlbEluZm8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHR4O1xuICB9XG5cbiAgY29uc3Qga2V5Y2hhaW4gPSBwYXJhbXMua2V5Y2hhaW47XG4gIGlmICghXy5pc09iamVjdChrZXljaGFpbikgfHwgIV8uaXNTdHJpbmcoa2V5Y2hhaW4ueHBydikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2V4cGVjdGluZyBrZXljaGFpbiBwYXJhbSB3aXRoIHhwcnYnKTtcbiAgfVxuICBjb25zdCBoZE5vZGUgPSBiaXAzMi5mcm9tQmFzZTU4KGtleWNoYWluLnhwcnYpO1xuXG4gIHR4LnJlY2VpdmVkVHJhdmVsSW5mby5mb3JFYWNoKChpbmZvKSA9PiB7XG4gICAgY29uc3Qga2V5ID0gaGROb2RlLmRlcml2ZVBhdGgoc2FuaXRpemVMZWdhY3lQYXRoKGluZm8udG9QdWJLZXlQYXRoKSk7XG4gICAgY29uc3Qgc2VjcmV0ID0gZ2V0U2hhcmVkU2VjcmV0KGtleSwgQnVmZmVyLmZyb20oaW5mby5mcm9tUHViS2V5LCAnaGV4JykpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZGVjcnlwdGVkID0gdGhpcy5iaXRnby5kZWNyeXB0KHtcbiAgICAgICAgaW5wdXQ6IGluZm8uZW5jcnlwdGVkVHJhdmVsSW5mbyxcbiAgICAgICAgcGFzc3dvcmQ6IHNlY3JldCxcbiAgICAgIH0pO1xuICAgICAgaW5mby50cmF2ZWxJbmZvID0gSlNPTi5wYXJzZShkZWNyeXB0ZWQpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcignZmFpbGVkIHRvIGRlY3J5cHQgb3IgcGFyc2UgdHJhdmVsIGluZm8gZm9yICcsIGluZm8udHJhbnNhY3Rpb25JZCArICc6JyArIGluZm8ub3V0cHV0SW5kZXgpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHR4O1xufTtcblxuVHJhdmVsUnVsZS5wcm90b3R5cGUucHJlcGFyZVBhcmFtcyA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgcGFyYW1zID0gcGFyYW1zIHx8IHt9O1xuICBwYXJhbXMudHhpZCA9IHBhcmFtcy50eGlkIHx8IHBhcmFtcy5oYXNoO1xuICBjb21tb24udmFsaWRhdGVQYXJhbXMocGFyYW1zLCBbJ3R4aWQnXSwgWydmcm9tUHJpdmF0ZUluZm8nXSk7XG4gIGNvbnN0IHR4aWQgPSBwYXJhbXMudHhpZDtcbiAgY29uc3QgcmVjaXBpZW50OiBSZWNpcGllbnQgfCB1bmRlZmluZWQgPSBwYXJhbXMucmVjaXBpZW50O1xuICBsZXQgdHJhdmVsSW5mbyA9IHBhcmFtcy50cmF2ZWxJbmZvO1xuICBpZiAoIXJlY2lwaWVudCB8fCAhXy5pc09iamVjdChyZWNpcGllbnQpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIG9yIG1pc3NpbmcgcmVjaXBpZW50Jyk7XG4gIH1cbiAgaWYgKCF0cmF2ZWxJbmZvIHx8ICFfLmlzT2JqZWN0KHRyYXZlbEluZm8pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIG9yIG1pc3NpbmcgdHJhdmVsSW5mbycpO1xuICB9XG4gIGlmICghcGFyYW1zLm5vVmFsaWRhdGUpIHtcbiAgICB0cmF2ZWxJbmZvID0gdGhpcy52YWxpZGF0ZVRyYXZlbEluZm8odHJhdmVsSW5mbyk7XG4gIH1cblxuICAvLyBGaWxsIGluIHRvRW50ZXJwcmlzZSBpZiBub3QgYWxyZWFkeSBmaWxsZWRcbiAgaWYgKCF0cmF2ZWxJbmZvLnRvRW50ZXJwcmlzZSAmJiByZWNpcGllbnQuZW50ZXJwcmlzZSkge1xuICAgIHRyYXZlbEluZm8udG9FbnRlcnByaXNlID0gcmVjaXBpZW50LmVudGVycHJpc2U7XG4gIH1cblxuICAvLyBJZiBhIGtleSB3YXMgbm90IHByb3ZpZGVkLCBjcmVhdGUgYSBuZXcgcmFuZG9tIGtleVxuICBsZXQgZnJvbUtleSA9IHBhcmFtcy5mcm9tS2V5ICYmIHV0eG9saWIuRUNQYWlyLmZyb21XSUYocGFyYW1zLmZyb21LZXksIGdldE5ldHdvcmsoKSBhcyB1dHhvbGliLkJpdGNvaW5KU05ldHdvcmspO1xuICBpZiAoIWZyb21LZXkpIHtcbiAgICBmcm9tS2V5ID0gbWFrZVJhbmRvbUtleSgpO1xuICB9XG5cbiAgLy8gQ29tcHV0ZSB0aGUgc2hhcmVkIGtleSBmb3IgZW5jcnlwdGlvblxuICBjb25zdCBzaGFyZWRTZWNyZXQgPSBnZXRTaGFyZWRTZWNyZXQoZnJvbUtleSwgQnVmZmVyLmZyb20ocmVjaXBpZW50LnB1YktleSwgJ2hleCcpKS50b1N0cmluZygnaGV4Jyk7XG5cbiAgLy8gSlNPTi1pZnkgYW5kIGVuY3J5cHQgdGhlIHBheWxvYWRcbiAgY29uc3QgdHJhdmVsSW5mb0pTT04gPSBKU09OLnN0cmluZ2lmeSh0cmF2ZWxJbmZvKTtcbiAgY29uc3QgZW5jcnlwdGVkVHJhdmVsSW5mbyA9IHRoaXMuYml0Z28uZW5jcnlwdCh7XG4gICAgaW5wdXQ6IHRyYXZlbEluZm9KU09OLFxuICAgIHBhc3N3b3JkOiBzaGFyZWRTZWNyZXQsXG4gIH0pO1xuXG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICB0eGlkOiB0eGlkLFxuICAgIG91dHB1dEluZGV4OiByZWNpcGllbnQub3V0cHV0SW5kZXgsXG4gICAgdG9QdWJLZXk6IHJlY2lwaWVudC5wdWJLZXksXG4gICAgZnJvbVB1YktleTogZnJvbUtleS5wdWJsaWNLZXkudG9TdHJpbmcoJ2hleCcpLFxuICAgIGVuY3J5cHRlZFRyYXZlbEluZm86IGVuY3J5cHRlZFRyYXZlbEluZm8sXG4gICAgZnJvbVByaXZhdGVJbmZvOiB1bmRlZmluZWQsXG4gIH07XG5cbiAgaWYgKHBhcmFtcy5mcm9tUHJpdmF0ZUluZm8pIHtcbiAgICByZXN1bHQuZnJvbVByaXZhdGVJbmZvID0gcGFyYW1zLmZyb21Qcml2YXRlSW5mbztcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG4vKipcbiAqIFNlbmQgdHJhdmVsIGRhdGEgdG8gdGhlIHNlcnZlciBmb3IgYSB0cmFuc2FjdGlvblxuICovXG5UcmF2ZWxSdWxlLnByb3RvdHlwZS5zZW5kID0gZnVuY3Rpb24gKHBhcmFtcywgY2FsbGJhY2spIHtcbiAgcGFyYW1zID0gcGFyYW1zIHx8IHt9O1xuICBwYXJhbXMudHhpZCA9IHBhcmFtcy50eGlkIHx8IHBhcmFtcy5oYXNoO1xuICBjb21tb24udmFsaWRhdGVQYXJhbXMoXG4gICAgcGFyYW1zLFxuICAgIFsndHhpZCcsICd0b1B1YktleScsICdlbmNyeXB0ZWRUcmF2ZWxJbmZvJ10sXG4gICAgWydmcm9tUHViS2V5JywgJ2Zyb21Qcml2YXRlSW5mbyddLFxuICAgIGNhbGxiYWNrXG4gICk7XG5cbiAgaWYgKCFfLmlzTnVtYmVyKHBhcmFtcy5vdXRwdXRJbmRleCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgb3V0cHV0SW5kZXgnKTtcbiAgfVxuXG4gIHJldHVybiBCbHVlYmlyZC5yZXNvbHZlKFxuICAgIHRoaXMuYml0Z29cbiAgICAgIC5wb3N0KHRoaXMudXJsKHBhcmFtcy50eGlkICsgJy8nICsgcGFyYW1zLm91dHB1dEluZGV4KSlcbiAgICAgIC5zZW5kKHBhcmFtcylcbiAgICAgIC5yZXN1bHQoKVxuICApLm5vZGVpZnkoY2FsbGJhY2spO1xufTtcblxuLyoqXG4gKiBTZW5kIG11bHRpcGxlIHRyYXZlbCBydWxlIGluZm9zIGZvciB0aGUgb3V0cHV0cyBvZiBhIHNpbmdsZSB0cmFuc2FjdGlvbi5cbiAqIFBhcmFtZXRlcnM6XG4gKiAgIC0gdHhpZCAob3IgaGFzaCk6IHR4aWQgb2YgdGhlIHRyYW5zYWN0aW9uIChtdXN0IGJlIGEgc2VuZGVyIG9mIHRoZSB0eClcbiAqICAgLSB0cmF2ZWxJbmZvczogYXJyYXkgb2YgdHJhdmVsSW5mbyBvYmplY3RzIHdoaWNoIGxvb2sgbGlrZSB0aGUgZm9sbG93aW5nOlxuICogICAgIHtcbiAqICAgICAgIG91dHB1dEluZGV4OiBudW1iZXIsICAgICAvLyB0eCBvdXRwdXQgaW5kZXhcbiAqICAgICAgIGZyb21Vc2VyTmFtZTogc3RyaW5nLCAgICAvLyBuYW1lIG9mIHRoZSBzZW5kaW5nIHVzZXJcbiAqICAgICAgIGZyb21Vc2VyQWNjb3VudDogc3RyaW5nLCAvLyBhY2NvdW50IGlkIG9mIHRoZSBzZW5kaW5nIHVzZXJcbiAqICAgICAgIGZyb21Vc2VyQWRkcmVzczogc3RyaW5nLCAvLyBtYWlsaW5nIGFkZHJlc3Mgb2YgdGhlIHNlbmRpbmcgdXNlclxuICogICAgICAgdG9Vc2VyTmFtZTogc3RyaW5nLCAgICAgIC8vIG5hbWUgb2YgdGhlIHJlY2VpdmluZyB1c2VyXG4gKiAgICAgICB0b1VzZXJBY2NvdW50OiBzdHJpbmcsICAgLy8gYWNjb3VudCBpZCBvZiB0aGUgcmVjZWl2aW5nIHVzZXJcbiAqICAgICAgIHRvVXNlckFkZHJlc3M6IHN0cmluZyAgICAvLyBtYWlsaW5nIGFkZHJlc3Mgb2YgdGhlIHJlY2VpdmluZyB1c2VyXG4gKiAgICAgfVxuICogICAgIEFsbCBmaWVsZHMgYXNpZGUgZnJvbSBvdXRwdXRJbmRleCBhcmUgb3B0aW9uYWwsIGJ1dCBhdCBsZWFzdCBvbmUgbXVzdFxuICogICAgIGJlIGRlZmluZWQuXG4gKlxuICogIEl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gcHJvdmlkZSB0cmF2ZWxJbmZvIGZvciBhbGwgb3V0cHV0IGluZGljZXMuXG4gKiAgRW5kLXRvLWVuZCBlbmNyeXB0aW9uIG9mIHRoZSB0cmF2ZWwgaW5mbyBpcyBoYW5kbGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhpcyBtZXRob2QuXG4gKlxuICovXG5UcmF2ZWxSdWxlLnByb3RvdHlwZS5zZW5kTWFueSA9IGZ1bmN0aW9uIChwYXJhbXMsIGNhbGxiYWNrKSB7XG4gIHBhcmFtcyA9IHBhcmFtcyB8fCB7fTtcbiAgcGFyYW1zLnR4aWQgPSBwYXJhbXMudHhpZCB8fCBwYXJhbXMuaGFzaDtcbiAgY29tbW9uLnZhbGlkYXRlUGFyYW1zKHBhcmFtcywgWyd0eGlkJ10sIGNhbGxiYWNrKTtcblxuICBjb25zdCB0cmF2ZWxJbmZvcyA9IHBhcmFtcy50cmF2ZWxJbmZvcztcbiAgaWYgKCFfLmlzQXJyYXkodHJhdmVsSW5mb3MpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdleHBlY3RlZCBwYXJhbWV0ZXIgdHJhdmVsSW5mb3MgdG8gYmUgYXJyYXknKTtcbiAgfVxuXG4gIGNvbnN0IHNlbGYgPSB0aGlzO1xuICBjb25zdCB0cmF2ZWxJbmZvTWFwID0gXyh0cmF2ZWxJbmZvcylcbiAgICAua2V5QnkoJ291dHB1dEluZGV4JylcbiAgICAubWFwVmFsdWVzKGZ1bmN0aW9uICh0cmF2ZWxJbmZvKSB7XG4gICAgICByZXR1cm4gc2VsZi52YWxpZGF0ZVRyYXZlbEluZm8odHJhdmVsSW5mbyk7XG4gICAgfSlcbiAgICAudmFsdWUoKTtcblxuICByZXR1cm4gc2VsZi5nZXRSZWNpcGllbnRzKHsgdHhpZDogcGFyYW1zLnR4aWQgfSkudGhlbihmdW5jdGlvbiAocmVjaXBpZW50cykge1xuICAgIC8vIEJ1aWxkIHVwIGRhdGEgdG8gcG9zdFxuICAgIGNvbnN0IHNlbmRQYXJhbXNMaXN0OiBhbnlbXSA9IFtdO1xuICAgIC8vIGRvbid0IHJlZ2VuZXJhdGUgYSBuZXcgcmFuZG9tIGtleSBmb3IgZWFjaCByZWNpcGllbnRcbiAgICBjb25zdCBmcm9tS2V5ID0gcGFyYW1zLmZyb21LZXkgfHwgbWFrZVJhbmRvbUtleSgpLnRvV0lGKCk7XG5cbiAgICByZWNpcGllbnRzLmZvckVhY2goZnVuY3Rpb24gKHJlY2lwaWVudCkge1xuICAgICAgY29uc3Qgb3V0cHV0SW5kZXggPSByZWNpcGllbnQub3V0cHV0SW5kZXg7XG4gICAgICBjb25zdCBpbmZvID0gdHJhdmVsSW5mb01hcFtvdXRwdXRJbmRleF07XG4gICAgICBpZiAoaW5mbykge1xuICAgICAgICBpZiAoaW5mby5hbW91bnQgJiYgaW5mby5hbW91bnQgIT09IHJlY2lwaWVudC5hbW91bnQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Ftb3VudCBkaWQgbm90IG1hdGNoIGZvciBvdXRwdXQgaW5kZXggJyArIG91dHB1dEluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzZW5kUGFyYW1zID0gc2VsZi5wcmVwYXJlUGFyYW1zKHtcbiAgICAgICAgICB0eGlkOiBwYXJhbXMudHhpZCxcbiAgICAgICAgICByZWNpcGllbnQ6IHJlY2lwaWVudCxcbiAgICAgICAgICB0cmF2ZWxJbmZvOiBpbmZvLFxuICAgICAgICAgIGZyb21LZXk6IGZyb21LZXksXG4gICAgICAgICAgbm9WYWxpZGF0ZTogdHJ1ZSwgLy8gZG9uJ3QgcmUtdmFsaWRhdGVcbiAgICAgICAgfSk7XG4gICAgICAgIHNlbmRQYXJhbXNMaXN0LnB1c2goc2VuZFBhcmFtcyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCByZXN1bHQ6IHtcbiAgICAgIG1hdGNoZWQ6IG51bWJlcjtcbiAgICAgIHJlc3VsdHM6IHtcbiAgICAgICAgcmVzdWx0PzogYW55O1xuICAgICAgICBlcnJvcj86IHN0cmluZztcbiAgICAgIH1bXTtcbiAgICB9ID0ge1xuICAgICAgbWF0Y2hlZDogc2VuZFBhcmFtc0xpc3QubGVuZ3RoLFxuICAgICAgcmVzdWx0czogW10sXG4gICAgfTtcblxuICAgIGNvbnN0IHNlbmRTZXJpYWwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBzZW5kUGFyYW1zID0gc2VuZFBhcmFtc0xpc3Quc2hpZnQoKTtcbiAgICAgIGlmICghc2VuZFBhcmFtcykge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNlbGZcbiAgICAgICAgLnNlbmQoc2VuZFBhcmFtcylcbiAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgIHJlc3VsdC5yZXN1bHRzLnB1c2goeyByZXN1bHQ6IHJlcyB9KTtcbiAgICAgICAgICByZXR1cm4gc2VuZFNlcmlhbCgpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgIHJlc3VsdC5yZXN1bHRzLnB1c2goeyBlcnJvcjogZXJyLnRvU3RyaW5nKCkgfSk7XG4gICAgICAgICAgcmV0dXJuIHNlbmRTZXJpYWwoKTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIHJldHVybiBzZW5kU2VyaWFsKCk7XG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBUcmF2ZWxSdWxlO1xuIl19
353
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhdmVsUnVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy92MS90cmF2ZWxSdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7R0FFRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFSDtHQUNHO0FBQ0gsRUFBRTtBQUNGLG9CQUFvQjtBQUNwQiwyQ0FBMkM7QUFDM0MsRUFBRTtBQUNGLG9EQUFvRDtBQUNwRCxFQUFFO0FBQ0YsbURBQThHO0FBQzlHLG1EQUE2RDtBQUM3RCw4REFBZ0Q7QUFDaEQsb0RBQXVCO0FBMkJ2QixFQUFFO0FBQ0YsY0FBYztBQUNkLEVBQUU7QUFDRixNQUFNLFVBQVUsR0FBRyxVQUFVLEtBQUs7SUFDaEMsc0NBQXNDO0lBQ3RDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQ3JCLENBQUMsQ0FBQztBQUVGLFVBQVUsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLFVBQVUsS0FBSztJQUN4QyxLQUFLLEdBQUcsS0FBSyxJQUFJLEVBQUUsQ0FBQztJQUNwQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsQ0FBQztBQUM1QyxDQUFDLENBQUM7QUFFRjs7Ozs7O0dBTUc7QUFDSCxVQUFVLENBQUMsU0FBUyxDQUFDLGFBQWEsR0FBRyxVQUFVLE1BQU0sRUFBRSxRQUFRO0lBQzdELE1BQU0sR0FBRyxNQUFNLElBQUksRUFBRSxDQUFDO0lBQ3RCLE1BQU0sQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDO0lBQ3pDLGlCQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUV0RCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEdB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O29CQUNoQixPQUFPLEVBQUUsT0FBTztvQkFDaEIsVUFBVSxFQUFFLElBQUksRUFBRSxvQkFBb0I7aUJBQ3ZDLENBQUMsQ0FBQztnQkFDSCxjQUFjLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ2xDLENBQUM7UUFDSCxDQUFDO1FBRUQsTUFBTSxNQUFNLEdBTVI7WUFDRixPQUFPLEVBQUUsY0FBYyxDQUFDLE1BQU07WUFDOUIsT0FBTyxFQUFFLEVBQUU7U0FDWixDQUFDO1FBRUYsTUFBTSxVQUFVLEdBQUc7WUFDakIsTUFBTSxVQUFVLEdBQUcsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDaEIsT0FBTyxNQUFNLENBQUM7WUFDaEIsQ0FBQztZQUNELE9BQU8sSUFBSTtpQkFDUixJQUFJLENBQUMsVUFBVSxDQUFDO2lCQUNoQixJQUFJLENBQUMsVUFBVSxHQUFHO2dCQUNqQixNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO2dCQUNyQyxPQUFPLFVBQVUsRUFBRSxDQUFDO1lBQ3RCLENBQUMsQ0FBQztpQkFDRCxLQUFLLENBQUMsVUFBVSxHQUFHO2dCQUNsQixNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUMvQyxPQUFPLFVBQVUsRUFBRSxDQUFDO1lBQ3RCLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDO1FBRUYsT0FBTyxVQUFVLEVBQUUsQ0FBQztJQUN0QixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxPQUFPLEdBQUcsVUFBVSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAaGlkZGVuXG4gKi9cblxuLyoqXG4gKi9cbi8vXG4vLyBUcmF2ZWxSdWxlIE9iamVjdFxuLy8gQml0R28gYWNjZXNzb3IgZm9yIGEgc3BlY2lmaWMgZW50ZXJwcmlzZVxuLy9cbi8vIENvcHlyaWdodCAyMDE0LCBCaXRHbywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vXG5pbXBvcnQgeyBjb21tb24sIGdldE5ldHdvcmssIGdldFNoYXJlZFNlY3JldCwgbWFrZVJhbmRvbUtleSwgc2FuaXRpemVMZWdhY3lQYXRoIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgYmlwMzIsIEJJUDMySW50ZXJmYWNlIH0gZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuXG5pbnRlcmZhY2UgUmVjZWl2ZWRUcmF2ZWxJbmZvRW50cnkge1xuICB0b1B1YktleVBhdGg6IHN0cmluZztcbiAgZnJvbVB1YktleTogc3RyaW5nO1xuICBlbmNyeXB0ZWRUcmF2ZWxJbmZvOiBzdHJpbmc7XG4gIHRyYXZlbEluZm86IHN0cmluZztcbiAgdHJhbnNhY3Rpb25JZDogc3RyaW5nO1xuICBvdXRwdXRJbmRleDogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgRGVjcnlwdFJlY2VpdmVkVHJhdmVsUnVsZU9wdGlvbnMge1xuICB0eD86IHtcbiAgICByZWNlaXZlZFRyYXZlbEluZm8/OiBSZWNlaXZlZFRyYXZlbEluZm9FbnRyeVtdO1xuICB9O1xuICBrZXljaGFpbj86IHtcbiAgICB4cHJ2Pzogc3RyaW5nO1xuICB9O1xuICBoZG5vZGU/OiBCSVAzMkludGVyZmFjZTtcbn1cblxuaW50ZXJmYWNlIFJlY2lwaWVudCB7XG4gIGVudGVycHJpc2U6IHN0cmluZztcbiAgcHViS2V5OiBzdHJpbmc7XG4gIG91dHB1dEluZGV4OiBzdHJpbmc7XG59XG5cbi8vXG4vLyBDb25zdHJ1Y3RvclxuLy9cbmNvbnN0IFRyYXZlbFJ1bGUgPSBmdW5jdGlvbiAoYml0Z28pIHtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIG5vIGltcGxpY2l0IHRoaXNcbiAgdGhpcy5iaXRnbyA9IGJpdGdvO1xufTtcblxuVHJhdmVsUnVsZS5wcm90b3R5cGUudXJsID0gZnVuY3Rpb24gKGV4dHJhKSB7XG4gIGV4dHJhID0gZXh0cmEgfHwgJyc7XG4gIHJldHVybiB0aGlzLmJpdGdvLnVybCgnL3RyYXZlbC8nICsgZXh0cmEpO1xufTtcblxuLyoqXG4gKiBHZXQgYXZhaWxhYmxlIHRyYXZlbC1ydWxlIGluZm8gcmVjaXBpZW50cyBmb3IgYSB0cmFuc2FjdGlvblxuICogQHBhcmFtIHBhcmFtc1xuICogIHR4aWQ6IHRyYW5zYWN0aW9uIGlkXG4gKiBAcGFyYW0gY2FsbGJhY2tcbiAqIEByZXR1cm5zIHsqfVxuICovXG5UcmF2ZWxSdWxlLnByb3RvdHlwZS5nZXRSZWNpcGllbnRzID0gZnVuY3Rpb24gKHBhcmFtcywgY2FsbGJhY2spIHtcbiAgcGFyYW1zID0gcGFyYW1zIHx8IHt9O1xuICBwYXJhbXMudHhpZCA9IHBhcmFtcy50eGlkIHx8IHBhcmFtcy5oYXNoO1xuICBjb21tb24udmFsaWRhdGVQYXJhbXMocGFyYW1zLCBbJ3R4aWQnXSwgW10sIGNhbGxiYWNrKTtcblxuICBjb25zdCB1cmwgPSB0aGlzLnVybChwYXJhbXMudHhpZCArICcvcmVjaXBpZW50cycpO1xuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuYml0Z28uZ2V0KHVybCkucmVzdWx0KCdyZWNpcGllbnRzJykpLnRoZW4oY2FsbGJhY2spLmNhdGNoKGNhbGxiYWNrKTtcbn07XG5cblRyYXZlbFJ1bGUucHJvdG90eXBlLnZhbGlkYXRlVHJhdmVsSW5mbyA9IGZ1bmN0aW9uIChpbmZvKSB7XG4gIGNvbnN0IGZpZWxkcyA9IHtcbiAgICBhbW91bnQ6IHsgdHlwZTogJ251bWJlcicgfSxcbiAgICB0b0FkZHJlc3M6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICB0b0VudGVycHJpc2U6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICBmcm9tVXNlck5hbWU6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICBmcm9tVXNlckFjY291bnQ6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICBmcm9tVXNlckFkZHJlc3M6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICB0b1VzZXJOYW1lOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgdG9Vc2VyQWNjb3VudDogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgIHRvVXNlckFkZHJlc3M6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICBleHRyYTogeyB0eXBlOiAnb2JqZWN0JyB9LFxuICB9O1xuXG4gIF8uZm9yRWFjaChmaWVsZHMsIGZ1bmN0aW9uIChmaWVsZDogYW55LCBmaWVsZE5hbWUpIHtcbiAgICAvLyBObyByZXF1aXJlZCBmaWVsZHMgeWV0IC0tIHNob3VsZCB0aGVyZSBiZT9cbiAgICBpZiAoZmllbGQucmVxdWlyZWQpIHtcbiAgICAgIGlmIChpbmZvW2ZpZWxkTmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgcmVxdWlyZWQgZmllbGQgJyArIGZpZWxkTmFtZSArICcgaW4gdHJhdmVsIGluZm8nKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGluZm9bZmllbGROYW1lXSAmJiB0eXBlb2YgaW5mb1tmaWVsZE5hbWVdICE9PSBmaWVsZC50eXBlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2luY29ycmVjdCB0eXBlIGZvciBmaWVsZCAnICsgZmllbGROYW1lICsgJyBpbiB0cmF2ZWwgaW5mbywgZXhwZWN0ZWQgJyArIGZpZWxkLnR5cGUpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gU3RyaXAgb3V0IGFueSBvdGhlciBmaWVsZHMgd2UgZG9uJ3Qga25vdyBhYm91dFxuICBjb25zdCByZXN1bHQgPSBfLnBpY2soaW5mbywgXy5rZXlzKGZpZWxkcykpO1xuICBpZiAoXy5pc0VtcHR5KHJlc3VsdCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2VtcHR5IHRyYXZlbCBkYXRhJyk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbmZ1bmN0aW9uIHZhbGlkYXRlVHJhdmVsUnVsZURlY3J5cHRQYXJhbXMocGFyYW1zOiBEZWNyeXB0UmVjZWl2ZWRUcmF2ZWxSdWxlT3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IHR4ID0gcGFyYW1zLnR4O1xuICBpZiAoIV8uaXNPYmplY3QodHgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdleHBlY3RpbmcgdHggcGFyYW0gdG8gYmUgb2JqZWN0Jyk7XG4gIH1cblxuICBpZiAoIXR4LnJlY2VpdmVkVHJhdmVsSW5mbyB8fCAhdHgucmVjZWl2ZWRUcmF2ZWxJbmZvLmxlbmd0aCkge1xuICAgIHJldHVybiB7IHR4LCBoZE5vZGU6IHVuZGVmaW5lZCBhcyBCSVAzMkludGVyZmFjZSB8IHVuZGVmaW5lZCB9O1xuICB9XG5cbiAgY29uc3Qga2V5Y2hhaW4gPSBwYXJhbXMua2V5Y2hhaW47XG4gIGlmICghXy5pc09iamVjdChrZXljaGFpbikgfHwgIV8uaXNTdHJpbmcoa2V5Y2hhaW4ueHBydikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2V4cGVjdGluZyBrZXljaGFpbiBwYXJhbSB3aXRoIHhwcnYnKTtcbiAgfVxuICBjb25zdCBoZE5vZGUgPSBiaXAzMi5mcm9tQmFzZTU4KGtleWNoYWluLnhwcnYpO1xuICByZXR1cm4geyB0eCwgaGROb2RlIH07XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVUcmF2ZWxSdWxlUGFyYW1zQ29tbW9uKHNlbGY6IHsgdmFsaWRhdGVUcmF2ZWxJbmZvOiAoaW5mbzogYW55KSA9PiBhbnkgfSwgcGFyYW1zOiBhbnkpIHtcbiAgcGFyYW1zID0gcGFyYW1zIHx8IHt9O1xuICBwYXJhbXMudHhpZCA9IHBhcmFtcy50eGlkIHx8IHBhcmFtcy5oYXNoO1xuICBjb21tb24udmFsaWRhdGVQYXJhbXMocGFyYW1zLCBbJ3R4aWQnXSwgWydmcm9tUHJpdmF0ZUluZm8nXSk7XG4gIGNvbnN0IHR4aWQgPSBwYXJhbXMudHhpZDtcbiAgY29uc3QgcmVjaXBpZW50OiBSZWNpcGllbnQgfCB1bmRlZmluZWQgPSBwYXJhbXMucmVjaXBpZW50O1xuICBsZXQgdHJhdmVsSW5mbyA9IHBhcmFtcy50cmF2ZWxJbmZvO1xuICBpZiAoIXJlY2lwaWVudCB8fCAhXy5pc09iamVjdChyZWNpcGllbnQpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIG9yIG1pc3NpbmcgcmVjaXBpZW50Jyk7XG4gIH1cbiAgaWYgKCF0cmF2ZWxJbmZvIHx8ICFfLmlzT2JqZWN0KHRyYXZlbEluZm8pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIG9yIG1pc3NpbmcgdHJhdmVsSW5mbycpO1xuICB9XG4gIGlmICghcGFyYW1zLm5vVmFsaWRhdGUpIHtcbiAgICB0cmF2ZWxJbmZvID0gc2VsZi52YWxpZGF0ZVRyYXZlbEluZm8odHJhdmVsSW5mbyk7XG4gIH1cblxuICBpZiAoIXRyYXZlbEluZm8udG9FbnRlcnByaXNlICYmIHJlY2lwaWVudC5lbnRlcnByaXNlKSB7XG4gICAgdHJhdmVsSW5mby50b0VudGVycHJpc2UgPSByZWNpcGllbnQuZW50ZXJwcmlzZTtcbiAgfVxuXG4gIC8vIElmIGEga2V5IHdhcyBub3QgcHJvdmlkZWQsIGNyZWF0ZSBhIG5ldyByYW5kb20ga2V5XG4gIGxldCBmcm9tS2V5ID0gcGFyYW1zLmZyb21LZXkgJiYgdXR4b2xpYi5FQ1BhaXIuZnJvbVdJRihwYXJhbXMuZnJvbUtleSwgZ2V0TmV0d29yaygpIGFzIHV0eG9saWIuQml0Y29pbkpTTmV0d29yayk7XG4gIGlmICghZnJvbUtleSkge1xuICAgIGZyb21LZXkgPSBtYWtlUmFuZG9tS2V5KCk7XG4gIH1cblxuICAvLyBDb21wdXRlIHRoZSBzaGFyZWQga2V5IGZvciBlbmNyeXB0aW9uXG4gIGNvbnN0IHNoYXJlZFNlY3JldCA9IGdldFNoYXJlZFNlY3JldChmcm9tS2V5LCBCdWZmZXIuZnJvbShyZWNpcGllbnQucHViS2V5LCAnaGV4JykpLnRvU3RyaW5nKCdoZXgnKTtcblxuICAvLyBKU09OLWlmeSBhbmQgZW5jcnlwdCB0aGUgcGF5bG9hZFxuICBjb25zdCB0cmF2ZWxJbmZvSlNPTiA9IEpTT04uc3RyaW5naWZ5KHRyYXZlbEluZm8pO1xuXG4gIHJldHVybiB7XG4gICAgdHhpZCxcbiAgICByZWNpcGllbnQsXG4gICAgdHJhdmVsSW5mb0pTT04sXG4gICAgZnJvbUtleSxcbiAgICBzaGFyZWRTZWNyZXQsXG4gICAgZnJvbVByaXZhdGVJbmZvOiBwYXJhbXMuZnJvbVByaXZhdGVJbmZvLFxuICB9O1xufVxuXG5mdW5jdGlvbiBidWlsZFRyYXZlbFJ1bGVTZW5kUGFyYW1zKFxuICBwcmVwYXJlZDoge1xuICAgIHR4aWQ6IHN0cmluZztcbiAgICByZWNpcGllbnQ6IFJlY2lwaWVudDtcbiAgICBmcm9tS2V5OiB1dHhvbGliLkVDUGFpckludGVyZmFjZTtcbiAgICBmcm9tUHJpdmF0ZUluZm8/OiBzdHJpbmc7XG4gIH0sXG4gIGVuY3J5cHRlZFRyYXZlbEluZm86IHN0cmluZ1xuKSB7XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICB0eGlkOiBwcmVwYXJlZC50eGlkLFxuICAgIG91dHB1dEluZGV4OiBwcmVwYXJlZC5yZWNpcGllbnQub3V0cHV0SW5kZXgsXG4gICAgdG9QdWJLZXk6IHByZXBhcmVkLnJlY2lwaWVudC5wdWJLZXksXG4gICAgZnJvbVB1YktleTogcHJlcGFyZWQuZnJvbUtleS5wdWJsaWNLZXkudG9TdHJpbmcoJ2hleCcpLFxuICAgIGVuY3J5cHRlZFRyYXZlbEluZm86IGVuY3J5cHRlZFRyYXZlbEluZm8sXG4gICAgZnJvbVByaXZhdGVJbmZvOiB1bmRlZmluZWQgYXMgc3RyaW5nIHwgdW5kZWZpbmVkLFxuICB9O1xuXG4gIGlmIChwcmVwYXJlZC5mcm9tUHJpdmF0ZUluZm8pIHtcbiAgICByZXN1bHQuZnJvbVByaXZhdGVJbmZvID0gcHJlcGFyZWQuZnJvbVByaXZhdGVJbmZvO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBUYWtlcyBhIHRyYW5zYWN0aW9uIG9iamVjdCBhcyByZXR1cm5lZCBieSBnZXRUcmFuc2FjdGlvbiBvciBsaXN0VHJhbnNhY3Rpb25zLCBhbG9uZ1xuICogd2l0aCBhIGtleWNoYWluIChvciBoZG5vZGUgb2JqZWN0KSwgYW5kIGF0dGVtcHRzIHRvIGRlY3J5cHQgYW55IGVuY3J5cHRlZCB0cmF2ZWxcbiAqIGluZm8gaW5jbHVkZWQgaW4gdGhlIHRyYW5zYWN0aW9uJ3MgcmVjZWl2ZWRUcmF2ZWxJbmZvIGZpZWxkLlxuICogUGFyYW1ldGVyczpcbiAqICAgdHg6IGEgdHJhbnNhY3Rpb24gb2JqZWN0XG4gKiAgIGtleWNoYWluOiBrZXljaGFpbiBvYmplY3QgKHdpdGggeHBydilcbiAqIFJldHVybnM6XG4gKiAgIHRoZSB0eCBvYmplY3QsIGF1Z21lbnRlZCB3aXRoIGRlY3J5cHRlZCB0cmF2ZWxJbmZvIGZpZWxkc1xuICogVE9ETzogRGVwcmVjYXRlIGluIGZhdm9yIG9mIGRlY3J5cHRSZWNlaXZlZFRyYXZlbEluZm9Bc3luYyBvbmNlIHYyIGVuY3J5cHRpb24gaXMgZGVmYXVsdC5cbiAqL1xuVHJhdmVsUnVsZS5wcm90b3R5cGUuZGVjcnlwdFJlY2VpdmVkVHJhdmVsSW5mbyA9IGZ1bmN0aW9uIChwYXJhbXM6IERlY3J5cHRSZWNlaXZlZFRyYXZlbFJ1bGVPcHRpb25zID0ge30pIHtcbiAgY29uc3QgeyB0eCwgaGROb2RlIH0gPSB2YWxpZGF0ZVRyYXZlbFJ1bGVEZWNyeXB0UGFyYW1zKHBhcmFtcyk7XG4gIGlmICghaGROb2RlKSB7XG4gICAgcmV0dXJuIHR4O1xuICB9XG5cbiAgdHghLnJlY2VpdmVkVHJhdmVsSW5mbyEuZm9yRWFjaCgoaW5mbykgPT4ge1xuICAgIGNvbnN0IGtleSA9IGhkTm9kZS5kZXJpdmVQYXRoKHNhbml0aXplTGVnYWN5UGF0aChpbmZvLnRvUHViS2V5UGF0aCkpO1xuICAgIGNvbnN0IHNlY3JldCA9IGdldFNoYXJlZFNlY3JldChrZXksIEJ1ZmZlci5mcm9tKGluZm8uZnJvbVB1YktleSwgJ2hleCcpKS50b1N0cmluZygnaGV4Jyk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRlY3J5cHRlZCA9IHRoaXMuYml0Z28uZGVjcnlwdCh7XG4gICAgICAgIGlucHV0OiBpbmZvLmVuY3J5cHRlZFRyYXZlbEluZm8sXG4gICAgICAgIHBhc3N3b3JkOiBzZWNyZXQsXG4gICAgICB9KTtcbiAgICAgIGluZm8udHJhdmVsSW5mbyA9IEpTT04ucGFyc2UoZGVjcnlwdGVkKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ2ZhaWxlZCB0byBkZWNyeXB0IG9yIHBhcnNlIHRyYXZlbCBpbmZvIGZvciAnLCBpbmZvLnRyYW5zYWN0aW9uSWQgKyAnOicgKyBpbmZvLm91dHB1dEluZGV4KTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB0eDtcbn07XG5cbi8qKlxuICogQXN5bmMgdmVyc2lvbiBvZiBkZWNyeXB0UmVjZWl2ZWRUcmF2ZWxJbmZvIHdpdGggdjIgZW5jcnlwdC9kZWNyeXB0IHN1cHBvcnQuXG4gKi9cblRyYXZlbFJ1bGUucHJvdG90eXBlLmRlY3J5cHRSZWNlaXZlZFRyYXZlbEluZm9Bc3luYyA9IGFzeW5jIGZ1bmN0aW9uIChwYXJhbXM6IERlY3J5cHRSZWNlaXZlZFRyYXZlbFJ1bGVPcHRpb25zID0ge30pIHtcbiAgY29uc3QgeyB0eCwgaGROb2RlIH0gPSB2YWxpZGF0ZVRyYXZlbFJ1bGVEZWNyeXB0UGFyYW1zKHBhcmFtcyk7XG4gIGlmICghaGROb2RlKSB7XG4gICAgcmV0dXJuIHR4O1xuICB9XG5cbiAgZm9yIChjb25zdCBpbmZvIG9mIHR4IS5yZWNlaXZlZFRyYXZlbEluZm8hKSB7XG4gICAgY29uc3Qga2V5ID0gaGROb2RlLmRlcml2ZVBhdGgoc2FuaXRpemVMZWdhY3lQYXRoKGluZm8udG9QdWJLZXlQYXRoKSk7XG4gICAgY29uc3Qgc2VjcmV0ID0gZ2V0U2hhcmVkU2VjcmV0KGtleSwgQnVmZmVyLmZyb20oaW5mby5mcm9tUHViS2V5LCAnaGV4JykpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZGVjcnlwdGVkID0gYXdhaXQgdGhpcy5iaXRnby5kZWNyeXB0QXN5bmMoe1xuICAgICAgICBpbnB1dDogaW5mby5lbmNyeXB0ZWRUcmF2ZWxJbmZvLFxuICAgICAgICBwYXNzd29yZDogc2VjcmV0LFxuICAgICAgfSk7XG4gICAgICBpbmZvLnRyYXZlbEluZm8gPSBKU09OLnBhcnNlKGRlY3J5cHRlZCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdmYWlsZWQgdG8gZGVjcnlwdCBvciBwYXJzZSB0cmF2ZWwgaW5mbyBmb3IgJywgaW5mby50cmFuc2FjdGlvbklkICsgJzonICsgaW5mby5vdXRwdXRJbmRleCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHR4O1xufTtcblxuLyoqXG4gKiBUT0RPOiBEZXByZWNhdGUgaW4gZmF2b3Igb2YgcHJlcGFyZVBhcmFtc0FzeW5jIG9uY2UgdjIgZW5jcnlwdGlvbiBpcyBkZWZhdWx0LlxuICovXG5UcmF2ZWxSdWxlLnByb3RvdHlwZS5wcmVwYXJlUGFyYW1zID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICBjb25zdCBwcmVwYXJlZCA9IHByZXBhcmVUcmF2ZWxSdWxlUGFyYW1zQ29tbW9uKHRoaXMsIHBhcmFtcyk7XG4gIGNvbnN0IGVuY3J5cHRlZFRyYXZlbEluZm8gPSB0aGlzLmJpdGdvLmVuY3J5cHQoe1xuICAgIGlucHV0OiBwcmVwYXJlZC50cmF2ZWxJbmZvSlNPTixcbiAgICBwYXNzd29yZDogcHJlcGFyZWQuc2hhcmVkU2VjcmV0LFxuICB9KTtcblxuICByZXR1cm4gYnVpbGRUcmF2ZWxSdWxlU2VuZFBhcmFtcyhwcmVwYXJlZCwgZW5jcnlwdGVkVHJhdmVsSW5mbyk7XG59O1xuXG4vKipcbiAqIEFzeW5jIHZlcnNpb24gb2YgcHJlcGFyZVBhcmFtcyB3aXRoIHYyIGVuY3J5cHQvZGVjcnlwdCBzdXBwb3J0LlxuICovXG5UcmF2ZWxSdWxlLnByb3RvdHlwZS5wcmVwYXJlUGFyYW1zQXN5bmMgPSBhc3luYyBmdW5jdGlvbiAocGFyYW1zKSB7XG4gIGNvbnN0IHByZXBhcmVkID0gcHJlcGFyZVRyYXZlbFJ1bGVQYXJhbXNDb21tb24odGhpcywgcGFyYW1zKTtcbiAgY29uc3QgZW5jcnlwdGVkVHJhdmVsSW5mbyA9IGF3YWl0IHRoaXMuYml0Z28uZW5jcnlwdEFzeW5jKHtcbiAgICBpbnB1dDogcHJlcGFyZWQudHJhdmVsSW5mb0pTT04sXG4gICAgcGFzc3dvcmQ6IHByZXBhcmVkLnNoYXJlZFNlY3JldCxcbiAgfSk7XG5cbiAgcmV0dXJuIGJ1aWxkVHJhdmVsUnVsZVNlbmRQYXJhbXMocHJlcGFyZWQsIGVuY3J5cHRlZFRyYXZlbEluZm8pO1xufTtcblxuLyoqXG4gKiBTZW5kIHRyYXZlbCBkYXRhIHRvIHRoZSBzZXJ2ZXIgZm9yIGEgdHJhbnNhY3Rpb25cbiAqL1xuVHJhdmVsUnVsZS5wcm90b3R5cGUuc2VuZCA9IGZ1bmN0aW9uIChwYXJhbXMsIGNhbGxiYWNrKSB7XG4gIHBhcmFtcyA9IHBhcmFtcyB8fCB7fTtcbiAgcGFyYW1zLnR4aWQgPSBwYXJhbXMudHhpZCB8fCBwYXJhbXMuaGFzaDtcbiAgY29tbW9uLnZhbGlkYXRlUGFyYW1zKFxuICAgIHBhcmFtcyxcbiAgICBbJ3R4aWQnLCAndG9QdWJLZXknLCAnZW5jcnlwdGVkVHJhdmVsSW5mbyddLFxuICAgIFsnZnJvbVB1YktleScsICdmcm9tUHJpdmF0ZUluZm8nXSxcbiAgICBjYWxsYmFja1xuICApO1xuXG4gIGlmICghXy5pc051bWJlcihwYXJhbXMub3V0cHV0SW5kZXgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIG91dHB1dEluZGV4Jyk7XG4gIH1cblxuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFxuICAgIHRoaXMuYml0Z29cbiAgICAgIC5wb3N0KHRoaXMudXJsKHBhcmFtcy50eGlkICsgJy8nICsgcGFyYW1zLm91dHB1dEluZGV4KSlcbiAgICAgIC5zZW5kKHBhcmFtcylcbiAgICAgIC5yZXN1bHQoKVxuICApXG4gICAgLnRoZW4oY2FsbGJhY2spXG4gICAgLmNhdGNoKGNhbGxiYWNrKTtcbn07XG5cbi8qKlxuICogU2VuZCBtdWx0aXBsZSB0cmF2ZWwgcnVsZSBpbmZvcyBmb3IgdGhlIG91dHB1dHMgb2YgYSBzaW5nbGUgdHJhbnNhY3Rpb24uXG4gKiBQYXJhbWV0ZXJzOlxuICogICAtIHR4aWQgKG9yIGhhc2gpOiB0eGlkIG9mIHRoZSB0cmFuc2FjdGlvbiAobXVzdCBiZSBhIHNlbmRlciBvZiB0aGUgdHgpXG4gKiAgIC0gdHJhdmVsSW5mb3M6IGFycmF5IG9mIHRyYXZlbEluZm8gb2JqZWN0cyB3aGljaCBsb29rIGxpa2UgdGhlIGZvbGxvd2luZzpcbiAqICAgICB7XG4gKiAgICAgICBvdXRwdXRJbmRleDogbnVtYmVyLCAgICAgLy8gdHggb3V0cHV0IGluZGV4XG4gKiAgICAgICBmcm9tVXNlck5hbWU6IHN0cmluZywgICAgLy8gbmFtZSBvZiB0aGUgc2VuZGluZyB1c2VyXG4gKiAgICAgICBmcm9tVXNlckFjY291bnQ6IHN0cmluZywgLy8gYWNjb3VudCBpZCBvZiB0aGUgc2VuZGluZyB1c2VyXG4gKiAgICAgICBmcm9tVXNlckFkZHJlc3M6IHN0cmluZywgLy8gbWFpbGluZyBhZGRyZXNzIG9mIHRoZSBzZW5kaW5nIHVzZXJcbiAqICAgICAgIHRvVXNlck5hbWU6IHN0cmluZywgICAgICAvLyBuYW1lIG9mIHRoZSByZWNlaXZpbmcgdXNlclxuICogICAgICAgdG9Vc2VyQWNjb3VudDogc3RyaW5nLCAgIC8vIGFjY291bnQgaWQgb2YgdGhlIHJlY2VpdmluZyB1c2VyXG4gKiAgICAgICB0b1VzZXJBZGRyZXNzOiBzdHJpbmcgICAgLy8gbWFpbGluZyBhZGRyZXNzIG9mIHRoZSByZWNlaXZpbmcgdXNlclxuICogICAgIH1cbiAqICAgICBBbGwgZmllbGRzIGFzaWRlIGZyb20gb3V0cHV0SW5kZXggYXJlIG9wdGlvbmFsLCBidXQgYXQgbGVhc3Qgb25lIG11c3RcbiAqICAgICBiZSBkZWZpbmVkLlxuICpcbiAqICBJdCBpcyBub3QgbmVjZXNzYXJ5IHRvIHByb3ZpZGUgdHJhdmVsSW5mbyBmb3IgYWxsIG91dHB1dCBpbmRpY2VzLlxuICogIEVuZC10by1lbmQgZW5jcnlwdGlvbiBvZiB0aGUgdHJhdmVsIGluZm8gaXMgaGFuZGxlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoaXMgbWV0aG9kLlxuICpcbiAqL1xuVHJhdmVsUnVsZS5wcm90b3R5cGUuc2VuZE1hbnkgPSBmdW5jdGlvbiAocGFyYW1zLCBjYWxsYmFjaykge1xuICBwYXJhbXMgPSBwYXJhbXMgfHwge307XG4gIHBhcmFtcy50eGlkID0gcGFyYW1zLnR4aWQgfHwgcGFyYW1zLmhhc2g7XG4gIGNvbW1vbi52YWxpZGF0ZVBhcmFtcyhwYXJhbXMsIFsndHhpZCddLCBjYWxsYmFjayk7XG5cbiAgY29uc3QgdHJhdmVsSW5mb3MgPSBwYXJhbXMudHJhdmVsSW5mb3M7XG4gIGlmICghXy5pc0FycmF5KHRyYXZlbEluZm9zKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignZXhwZWN0ZWQgcGFyYW1ldGVyIHRyYXZlbEluZm9zIHRvIGJlIGFycmF5Jyk7XG4gIH1cblxuICBjb25zdCBzZWxmID0gdGhpcztcbiAgY29uc3QgdHJhdmVsSW5mb01hcCA9IF8odHJhdmVsSW5mb3MpXG4gICAgLmtleUJ5KCdvdXRwdXRJbmRleCcpXG4gICAgLm1hcFZhbHVlcyhmdW5jdGlvbiAodHJhdmVsSW5mbykge1xuICAgICAgcmV0dXJuIHNlbGYudmFsaWRhdGVUcmF2ZWxJbmZvKHRyYXZlbEluZm8pO1xuICAgIH0pXG4gICAgLnZhbHVlKCk7XG5cbiAgcmV0dXJuIHNlbGYuZ2V0UmVjaXBpZW50cyh7IHR4aWQ6IHBhcmFtcy50eGlkIH0pLnRoZW4oYXN5bmMgZnVuY3Rpb24gKHJlY2lwaWVudHMpIHtcbiAgICAvLyBCdWlsZCB1cCBkYXRhIHRvIHBvc3RcbiAgICBjb25zdCBzZW5kUGFyYW1zTGlzdDogYW55W10gPSBbXTtcbiAgICAvLyBkb24ndCByZWdlbmVyYXRlIGEgbmV3IHJhbmRvbSBrZXkgZm9yIGVhY2ggcmVjaXBpZW50XG4gICAgY29uc3QgZnJvbUtleSA9IHBhcmFtcy5mcm9tS2V5IHx8IG1ha2VSYW5kb21LZXkoKS50b1dJRigpO1xuXG4gICAgZm9yIChjb25zdCByZWNpcGllbnQgb2YgcmVjaXBpZW50cykge1xuICAgICAgY29uc3Qgb3V0cHV0SW5kZXggPSByZWNpcGllbnQub3V0cHV0SW5kZXg7XG4gICAgICBjb25zdCBpbmZvID0gdHJhdmVsSW5mb01hcFtvdXRwdXRJbmRleF07XG4gICAgICBpZiAoaW5mbykge1xuICAgICAgICBpZiAoaW5mby5hbW91bnQgJiYgaW5mby5hbW91bnQgIT09IHJlY2lwaWVudC5hbW91bnQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Ftb3VudCBkaWQgbm90IG1hdGNoIGZvciBvdXRwdXQgaW5kZXggJyArIG91dHB1dEluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzZW5kUGFyYW1zID0gYXdhaXQgc2VsZi5wcmVwYXJlUGFyYW1zQXN5bmMoe1xuICAgICAgICAgIHR4aWQ6IHBhcmFtcy50eGlkLFxuICAgICAgICAgIHJlY2lwaWVudDogcmVjaXBpZW50LFxuICAgICAgICAgIHRyYXZlbEluZm86IGluZm8sXG4gICAgICAgICAgZnJvbUtleTogZnJvbUtleSxcbiAgICAgICAgICBub1ZhbGlkYXRlOiB0cnVlLCAvLyBkb24ndCByZS12YWxpZGF0ZVxuICAgICAgICB9KTtcbiAgICAgICAgc2VuZFBhcmFtc0xpc3QucHVzaChzZW5kUGFyYW1zKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQ6IHtcbiAgICAgIG1hdGNoZWQ6IG51bWJlcjtcbiAgICAgIHJlc3VsdHM6IHtcbiAgICAgICAgcmVzdWx0PzogYW55O1xuICAgICAgICBlcnJvcj86IHN0cmluZztcbiAgICAgIH1bXTtcbiAgICB9ID0ge1xuICAgICAgbWF0Y2hlZDogc2VuZFBhcmFtc0xpc3QubGVuZ3RoLFxuICAgICAgcmVzdWx0czogW10sXG4gICAgfTtcblxuICAgIGNvbnN0IHNlbmRTZXJpYWwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBzZW5kUGFyYW1zID0gc2VuZFBhcmFtc0xpc3Quc2hpZnQoKTtcbiAgICAgIGlmICghc2VuZFBhcmFtcykge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNlbGZcbiAgICAgICAgLnNlbmQoc2VuZFBhcmFtcylcbiAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgIHJlc3VsdC5yZXN1bHRzLnB1c2goeyByZXN1bHQ6IHJlcyB9KTtcbiAgICAgICAgICByZXR1cm4gc2VuZFNlcmlhbCgpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgIHJlc3VsdC5yZXN1bHRzLnB1c2goeyBlcnJvcjogZXJyLnRvU3RyaW5nKCkgfSk7XG4gICAgICAgICAgcmV0dXJuIHNlbmRTZXJpYWwoKTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIHJldHVybiBzZW5kU2VyaWFsKCk7XG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBUcmF2ZWxSdWxlO1xuIl19
@@ -0,0 +1,6 @@
1
+ import { Network } from '@bitgo-beta/utxo-lib';
2
+ /**
3
+ * Verify a Bitcoin address is a valid address
4
+ */
5
+ export declare function verifyAddress(address: any, network: Network): boolean;
6
+ //# sourceMappingURL=verifyAddress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verifyAddress.d.ts","sourceRoot":"","sources":["../../../src/v1/verifyAddress.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAE/C;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,KAAA,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAOhE"}
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.verifyAddress = verifyAddress;
37
+ const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
38
+ /**
39
+ * Verify a Bitcoin address is a valid address
40
+ */
41
+ function verifyAddress(address, network) {
42
+ try {
43
+ const script = utxolib.addressFormat.toOutputScriptTryFormats(address, network, undefined);
44
+ return address === utxolib.address.fromOutputScript(script, network);
45
+ }
46
+ catch (e) {
47
+ return false;
48
+ }
49
+ }
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyaWZ5QWRkcmVzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy92MS92ZXJpZnlBZGRyZXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBTUEsc0NBT0M7QUFiRCw4REFBZ0Q7QUFHaEQ7O0dBRUc7QUFDSCxTQUFnQixhQUFhLENBQUMsT0FBTyxFQUFFLE9BQWdCO0lBQ3JELElBQUksQ0FBQztRQUNILE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUMsd0JBQXdCLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQztRQUMzRixPQUFPLE9BQU8sS0FBSyxPQUFPLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNYLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcbmltcG9ydCB7IE5ldHdvcmsgfSBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG5cbi8qKlxuICogVmVyaWZ5IGEgQml0Y29pbiBhZGRyZXNzIGlzIGEgdmFsaWQgYWRkcmVzc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdmVyaWZ5QWRkcmVzcyhhZGRyZXNzLCBuZXR3b3JrOiBOZXR3b3JrKTogYm9vbGVhbiB7XG4gIHRyeSB7XG4gICAgY29uc3Qgc2NyaXB0ID0gdXR4b2xpYi5hZGRyZXNzRm9ybWF0LnRvT3V0cHV0U2NyaXB0VHJ5Rm9ybWF0cyhhZGRyZXNzLCBuZXR3b3JrLCB1bmRlZmluZWQpO1xuICAgIHJldHVybiBhZGRyZXNzID09PSB1dHhvbGliLmFkZHJlc3MuZnJvbU91dHB1dFNjcmlwdChzY3JpcHQsIG5ldHdvcmspO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4iXX0=
@@ -1 +1 @@
1
- {"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../../../src/v1/wallet.ts"],"names":[],"mappings":"AAAA;;GAEG;AA4BH,QAAA,MAAM,MAAM,mCAYX,CAAC;AA00EF,SAAS,MAAM,CAAC"}
1
+ {"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../../../src/v1/wallet.ts"],"names":[],"mappings":"AAAA;;GAEG;AAwDH,QAAA,MAAM,MAAM,mCAYX,CAAC;AAkjFF,SAAS,MAAM,CAAC"}