@bitgo-beta/sdk-coin-apt 1.0.0-alpha.179 → 1.0.0-alpha.180

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 (47) hide show
  1. package/dist/src/lib/transaction/customTransaction.d.ts +27 -1
  2. package/dist/src/lib/transaction/customTransaction.d.ts.map +1 -1
  3. package/dist/src/lib/transaction/customTransaction.js +96 -71
  4. package/dist/src/lib/utils.d.ts +9 -1
  5. package/dist/src/lib/utils.d.ts.map +1 -1
  6. package/dist/src/lib/utils.js +18 -1
  7. package/dist/test/integration/index.d.ts +1 -0
  8. package/dist/test/integration/index.d.ts.map +1 -0
  9. package/dist/test/integration/index.js +1 -0
  10. package/dist/test/resources/apt.d.ts +46 -0
  11. package/dist/test/resources/apt.d.ts.map +1 -0
  12. package/dist/test/resources/apt.js +105 -0
  13. package/dist/test/unit/apt.d.ts +2 -0
  14. package/dist/test/unit/apt.d.ts.map +1 -0
  15. package/dist/test/unit/apt.js +342 -0
  16. package/dist/test/unit/aptToken.d.ts +2 -0
  17. package/dist/test/unit/aptToken.d.ts.map +1 -0
  18. package/dist/test/unit/aptToken.js +92 -0
  19. package/dist/test/unit/customTransaction.test.d.ts +2 -0
  20. package/dist/test/unit/customTransaction.test.d.ts.map +1 -0
  21. package/dist/test/unit/customTransaction.test.js +264 -0
  22. package/dist/test/unit/getBuilderFactory.d.ts +3 -0
  23. package/dist/test/unit/getBuilderFactory.d.ts.map +1 -0
  24. package/dist/test/unit/getBuilderFactory.js +10 -0
  25. package/dist/test/unit/keyPair.d.ts +2 -0
  26. package/dist/test/unit/keyPair.d.ts.map +1 -0
  27. package/dist/test/unit/keyPair.js +71 -0
  28. package/dist/test/unit/transactionBuilder/customTransactionBuilder.d.ts +2 -0
  29. package/dist/test/unit/transactionBuilder/customTransactionBuilder.d.ts.map +1 -0
  30. package/dist/test/unit/transactionBuilder/customTransactionBuilder.js +743 -0
  31. package/dist/test/unit/transactionBuilder/digitalAssetTransferBuilder.d.ts +2 -0
  32. package/dist/test/unit/transactionBuilder/digitalAssetTransferBuilder.d.ts.map +1 -0
  33. package/dist/test/unit/transactionBuilder/digitalAssetTransferBuilder.js +276 -0
  34. package/dist/test/unit/transactionBuilder/fungibleAssetTransferBuilder.d.ts +2 -0
  35. package/dist/test/unit/transactionBuilder/fungibleAssetTransferBuilder.d.ts.map +1 -0
  36. package/dist/test/unit/transactionBuilder/fungibleAssetTransferBuilder.js +449 -0
  37. package/dist/test/unit/transactionBuilder/transferBuilder.d.ts +2 -0
  38. package/dist/test/unit/transactionBuilder/transferBuilder.d.ts.map +1 -0
  39. package/dist/test/unit/transactionBuilder/transferBuilder.js +529 -0
  40. package/dist/test/unit/utils.d.ts +2 -0
  41. package/dist/test/unit/utils.d.ts.map +1 -0
  42. package/dist/test/unit/utils.js +108 -0
  43. package/dist/tsconfig.tsbuildinfo +1 -0
  44. package/package.json +12 -9
  45. package/.eslintignore +0 -4
  46. package/.mocharc.yml +0 -8
  47. package/CHANGELOG.md +0 -344
@@ -39,6 +39,29 @@ export declare class CustomTransaction extends Transaction {
39
39
  * Convert argument based on ABI type information
40
40
  */
41
41
  private convertArgumentByABI;
42
+ /**
43
+ * Convert primitive argument values based on parameter type
44
+ */
45
+ private convertPrimitiveArgument;
46
+ /**
47
+ * Convert primitive numeric arguments to string
48
+ * - Big numbers break JavaScript (precision loss)
49
+ * - String safer for large U64/U128/U256 values
50
+ * - Aptos SDK converts string to correct type automatically
51
+ */
52
+ private convertPrimitiveNumericArgument;
53
+ /**
54
+ * Convert BCS data argument with 'data' property
55
+ */
56
+ private convertBcsDataArgument;
57
+ /**
58
+ * Convert nested BCS argument with 'value' property
59
+ */
60
+ private convertNestedBcsArgument;
61
+ /**
62
+ * Extract bytes from BCS object with numeric keys
63
+ */
64
+ private extractBytesFromBcsObject;
42
65
  /**
43
66
  * Get custom transaction parameters
44
67
  */
@@ -56,7 +79,10 @@ export declare class CustomTransaction extends Transaction {
56
79
  */
57
80
  private isNumericType;
58
81
  /**
59
- * Convert numeric argument using consistent little-endian byte handling
82
+ * Convert byte arrays to string numbers
83
+ * - Small types (U8/U16/U32): 1-4 bytes, parse manually
84
+ * - Large types (U64/U128/U256): 8+ bytes, use existing utility
85
+ * - Both return string for consistency
60
86
  */
61
87
  private convertNumericArgument;
62
88
  }
@@ -1 +1 @@
1
- {"version":3,"file":"customTransaction.d.ts","sourceRoot":"","sources":["../../../../src/lib/transaction/customTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAE7D,OAAO,EACL,gBAAgB,EAGhB,mCAAmC,EACnC,kBAAkB,EAWnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AAInD;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,WAAW;IAChD,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,kBAAkB,CAA4E;IACtG,OAAO,CAAC,iBAAiB,CAAC,CAAmB;gBAEjC,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC;IAK5C;;OAEG;IACH,0BAA0B,CAAC,MAAM,EAAE,uBAAuB,GAAG,IAAI;IAWjE;;OAEG;IACH,mBAAmB,CAAC,GAAG,EAAE,gBAAgB,GAAG,IAAI;IAIhD;;OAEG;IACH,IAAI,gBAAgB,IAAI,MAAM,CAK7B;IAED;;;;;OAKG;IACH,SAAS,CAAC,uBAAuB,CAAC,OAAO,EAAE,kBAAkB,GAAG,IAAI;IAyCpE;;OAEG;IACH,SAAS,CAAC,yBAAyB,IAAI,mCAAmC;IAc1E;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAsF5B;;OAEG;IACH,0BAA0B,IAAI,uBAAuB;IAUrD;;OAEG;IACH,IAAI,SAAS,IAAI,GAAG,CAQnB;IAED;;OAEG;IACH,OAAO,CAAC,4BAA4B;IAiBpC;;OAEG;IACH,OAAO,CAAC,aAAa;IAWrB;;OAEG;IACH,OAAO,CAAC,sBAAsB;CAkB/B"}
1
+ {"version":3,"file":"customTransaction.d.ts","sourceRoot":"","sources":["../../../../src/lib/transaction/customTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAE7D,OAAO,EAEL,gBAAgB,EAGhB,mCAAmC,EACnC,kBAAkB,EAUnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AAInD;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,WAAW;IAChD,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,kBAAkB,CAA4E;IACtG,OAAO,CAAC,iBAAiB,CAAC,CAAmB;gBAEjC,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC;IAK5C;;OAEG;IACH,0BAA0B,CAAC,MAAM,EAAE,uBAAuB,GAAG,IAAI;IAWjE;;OAEG;IACH,mBAAmB,CAAC,GAAG,EAAE,gBAAgB,GAAG,IAAI;IAIhD;;OAEG;IACH,IAAI,gBAAgB,IAAI,MAAM,CAK7B;IAED;;;;;OAKG;IACH,SAAS,CAAC,uBAAuB,CAAC,OAAO,EAAE,kBAAkB,GAAG,IAAI;IAyCpE;;OAEG;IACH,SAAS,CAAC,yBAAyB,IAAI,mCAAmC;IAc1E;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAoB5B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAoBhC;;;;;OAKG;IACH,OAAO,CAAC,+BAA+B;IAKvC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAO9B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAoChC;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAUjC;;OAEG;IACH,0BAA0B,IAAI,uBAAuB;IAUrD;;OAEG;IACH,IAAI,SAAS,IAAI,GAAG,CAQnB;IAED;;OAEG;IACH,OAAO,CAAC,4BAA4B;IAiBpC;;OAEG;IACH,OAAO,CAAC,aAAa;IAWrB;;;;;OAKG;IACH,OAAO,CAAC,sBAAsB;CAkB/B"}
@@ -103,82 +103,104 @@ class CustomTransaction extends transaction_1.Transaction {
103
103
  * Convert argument based on ABI type information
104
104
  */
105
105
  convertArgumentByABI(arg, paramType) {
106
- // Helper function to convert bytes to hex string
107
- const bytesToHex = (bytes) => {
108
- return '0x' + bytes.map((b) => b.toString(16).padStart(2, '0')).join('');
109
- };
110
- // Helper function to try converting a hex string to an AccountAddress
111
- const tryToAddress = (hexStr) => {
112
- try {
113
- return ts_sdk_1.AccountAddress.fromString(hexStr);
114
- }
115
- catch {
116
- return hexStr;
117
- }
118
- };
119
106
  // Handle primitive values (string, number, boolean)
120
107
  if (typeof arg === 'string' || typeof arg === 'number' || typeof arg === 'boolean') {
121
- // Address conversion for hex strings
122
- if (paramType instanceof ts_sdk_1.TypeTagAddress && typeof arg === 'string' && arg.startsWith('0x')) {
123
- return tryToAddress(arg);
124
- }
125
- // Type conversions based on parameter type
126
- if (paramType instanceof ts_sdk_1.TypeTagBool)
127
- return Boolean(arg);
128
- if (paramType instanceof ts_sdk_1.TypeTagU8 || paramType instanceof ts_sdk_1.TypeTagU16 || paramType instanceof ts_sdk_1.TypeTagU32)
129
- return Number(arg);
130
- if (paramType instanceof ts_sdk_1.TypeTagU64 || paramType instanceof ts_sdk_1.TypeTagU128 || paramType instanceof ts_sdk_1.TypeTagU256)
131
- return String(arg);
132
- return arg;
108
+ return this.convertPrimitiveArgument(arg, paramType);
133
109
  }
134
110
  // Handle BCS-encoded data with 'data' property
135
111
  if (arg && typeof arg === 'object' && 'data' in arg && arg.data) {
136
- const bytes = Array.from(arg.data);
137
- const hexString = bytesToHex(bytes);
138
- return paramType instanceof ts_sdk_1.TypeTagAddress ? tryToAddress(hexString) : hexString;
112
+ return this.convertBcsDataArgument(arg, paramType);
139
113
  }
140
114
  // Handle nested BCS structures with 'value' property
141
115
  if (arg && typeof arg === 'object' && 'value' in arg && arg.value) {
142
- // Check if inner value is a Uint8Array (common for U64 arguments)
143
- if (arg.value.value && arg.value.value instanceof Uint8Array) {
144
- const bytes = Array.from(arg.value.value);
145
- if (this.isNumericType(paramType)) {
146
- return this.convertNumericArgument(bytes, paramType);
147
- }
148
- // For non-numeric types, convert to hex string
149
- return bytesToHex(bytes);
150
- }
151
- // Simple value wrapper
152
- if (!('value' in arg.value) || typeof arg.value.value !== 'object') {
153
- return this.convertArgumentByABI(arg.value, paramType);
154
- }
155
- // Double nested structure with numeric keys
156
- const bytesObj = arg.value.value;
157
- const keys = Object.keys(bytesObj)
158
- .filter((k) => !isNaN(parseInt(k, 10)))
159
- .sort((a, b) => parseInt(a, 10) - parseInt(b, 10));
160
- if (keys.length === 0)
161
- return arg;
162
- const bytes = keys.map((k) => bytesObj[k]);
163
- let extractedValue;
164
- // Convert bytes based on parameter type using unified approach
165
- if (this.isNumericType(paramType)) {
166
- extractedValue = this.convertNumericArgument(bytes, paramType);
167
- }
168
- else if (paramType instanceof ts_sdk_1.TypeTagAddress) {
169
- extractedValue = bytesToHex(bytes);
170
- }
171
- else if (paramType instanceof ts_sdk_1.TypeTagBool) {
172
- extractedValue = bytes[0] === 1;
173
- }
174
- else {
175
- extractedValue = bytesToHex(bytes);
176
- }
177
- return this.convertArgumentByABI(extractedValue, paramType);
116
+ return this.convertNestedBcsArgument(arg, paramType);
178
117
  }
179
118
  // For anything else, return as-is
180
119
  return arg;
181
120
  }
121
+ /**
122
+ * Convert primitive argument values based on parameter type
123
+ */
124
+ convertPrimitiveArgument(arg, paramType) {
125
+ // Address conversion for hex strings
126
+ if (paramType instanceof ts_sdk_1.TypeTagAddress && typeof arg === 'string' && arg.startsWith('0x')) {
127
+ return utils_1.default.tryParseAccountAddress(arg);
128
+ }
129
+ // Type conversions based on parameter type
130
+ if (paramType instanceof ts_sdk_1.TypeTagBool)
131
+ return Boolean(arg);
132
+ // Use unified numeric type handling
133
+ if (this.isNumericType(paramType)) {
134
+ return this.convertPrimitiveNumericArgument(arg);
135
+ }
136
+ return arg;
137
+ }
138
+ /**
139
+ * Convert primitive numeric arguments to string
140
+ * - Big numbers break JavaScript (precision loss)
141
+ * - String safer for large U64/U128/U256 values
142
+ * - Aptos SDK converts string to correct type automatically
143
+ */
144
+ convertPrimitiveNumericArgument(arg) {
145
+ // Always string - safer for big numbers
146
+ return String(arg);
147
+ }
148
+ /**
149
+ * Convert BCS data argument with 'data' property
150
+ */
151
+ convertBcsDataArgument(arg, paramType) {
152
+ const bytes = Array.from(arg.data);
153
+ const hexString = utils_1.default.bytesToHex(bytes);
154
+ return paramType instanceof ts_sdk_1.TypeTagAddress ? utils_1.default.tryParseAccountAddress(hexString) : hexString;
155
+ }
156
+ /**
157
+ * Convert nested BCS argument with 'value' property
158
+ */
159
+ convertNestedBcsArgument(arg, paramType) {
160
+ // Check if inner value is a Uint8Array (common for U64 arguments)
161
+ if (arg.value.value && arg.value.value instanceof Uint8Array) {
162
+ const bytes = Array.from(arg.value.value);
163
+ if (this.isNumericType(paramType)) {
164
+ return this.convertNumericArgument(bytes, paramType);
165
+ }
166
+ // For non-numeric types, convert to hex string
167
+ return utils_1.default.bytesToHex(bytes);
168
+ }
169
+ // Simple value wrapper - fix the bug in original implementation
170
+ if (typeof arg.value !== 'object' || !('value' in arg.value)) {
171
+ return this.convertArgumentByABI(arg.value, paramType);
172
+ }
173
+ // Double nested structure with numeric keys
174
+ const bytes = this.extractBytesFromBcsObject(arg.value.value);
175
+ if (bytes.length === 0)
176
+ return arg;
177
+ let extractedValue;
178
+ // Convert bytes based on parameter type using unified approach
179
+ if (this.isNumericType(paramType)) {
180
+ extractedValue = this.convertNumericArgument(bytes, paramType);
181
+ }
182
+ else if (paramType instanceof ts_sdk_1.TypeTagAddress) {
183
+ extractedValue = utils_1.default.bytesToHex(bytes);
184
+ }
185
+ else if (paramType instanceof ts_sdk_1.TypeTagBool) {
186
+ extractedValue = bytes[0] === 1;
187
+ }
188
+ else {
189
+ extractedValue = utils_1.default.bytesToHex(bytes);
190
+ }
191
+ return this.convertArgumentByABI(extractedValue, paramType);
192
+ }
193
+ /**
194
+ * Extract bytes from BCS object with numeric keys
195
+ */
196
+ extractBytesFromBcsObject(bcsObject) {
197
+ const keys = Object.keys(bcsObject)
198
+ .filter((k) => !isNaN(parseInt(k, 10)))
199
+ .sort((a, b) => parseInt(a, 10) - parseInt(b, 10));
200
+ if (keys.length === 0)
201
+ return [];
202
+ return keys.map((k) => bcsObject[k]);
203
+ }
182
204
  /**
183
205
  * Get custom transaction parameters
184
206
  */
@@ -230,24 +252,27 @@ class CustomTransaction extends transaction_1.Transaction {
230
252
  paramType instanceof ts_sdk_1.TypeTagU256);
231
253
  }
232
254
  /**
233
- * Convert numeric argument using consistent little-endian byte handling
255
+ * Convert byte arrays to string numbers
256
+ * - Small types (U8/U16/U32): 1-4 bytes, parse manually
257
+ * - Large types (U64/U128/U256): 8+ bytes, use existing utility
258
+ * - Both return string for consistency
234
259
  */
235
260
  convertNumericArgument(bytes, paramType) {
236
261
  if (paramType instanceof ts_sdk_1.TypeTagU8 || paramType instanceof ts_sdk_1.TypeTagU16 || paramType instanceof ts_sdk_1.TypeTagU32) {
237
- // Small integers: use Number for compatibility
262
+ // Small types: parse bytes manually (1-4 bytes)
238
263
  let result = 0;
239
264
  for (let i = bytes.length - 1; i >= 0; i--) {
240
265
  result = result * 256 + bytes[i];
241
266
  }
242
- return result;
267
+ return result.toString();
243
268
  }
244
269
  if (paramType instanceof ts_sdk_1.TypeTagU64 || paramType instanceof ts_sdk_1.TypeTagU128 || paramType instanceof ts_sdk_1.TypeTagU256) {
245
- // Large integers: reuse the existing utility method
270
+ // Large types: use existing method (needs 8+ bytes)
246
271
  return utils_1.default.getAmountFromPayloadArgs(new Uint8Array(bytes));
247
272
  }
248
- // Fallback for unexpected numeric types
249
- return '0x' + bytes.map((b) => b.toString(16).padStart(2, '0')).join('');
273
+ // Unknown type: convert to hex
274
+ return utils_1.default.bytesToHex(bytes);
250
275
  }
251
276
  }
252
277
  exports.CustomTransaction = CustomTransaction;
253
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tVHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uL2N1c3RvbVRyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLCtDQUE0QztBQUU1QyxtREFBZ0Y7QUFDaEYsK0NBZ0I0QjtBQUU1QixvREFBK0U7QUFDL0UscURBQTZCO0FBRTdCOztHQUVHO0FBQ0gsTUFBYSxpQkFBa0IsU0FBUSx5QkFBVztJQU9oRCxZQUFZLFVBQWdDO1FBQzFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUxaLG1CQUFjLEdBQWEsRUFBRSxDQUFDO1FBQzlCLHVCQUFrQixHQUF5RSxFQUFFLENBQUM7UUFLcEcsSUFBSSxDQUFDLEtBQUssR0FBRywwQkFBZSxDQUFDLFFBQVEsQ0FBQztJQUN4QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCwwQkFBMEIsQ0FBQyxNQUErQjtRQUN4RCxJQUFBLCtCQUFrQixFQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN0QyxJQUFBLGlDQUFvQixFQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUUxQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUM7UUFDckMsSUFBSSxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxjQUFjLEdBQUcsTUFBTSxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUM7UUFDakQsSUFBSSxDQUFDLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsSUFBSSxFQUFFLENBQUM7UUFDekQsSUFBSSxDQUFDLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUM7SUFDdEMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsbUJBQW1CLENBQUMsR0FBcUI7UUFDdkMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEdBQUcsQ0FBQztJQUMvQixDQUFD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SUFBSSxTQUFTLFlBQVksb0JBQVcsRUFBRSxDQUFDO1lBQzVHLG9EQUFvRDtZQUNwRCxPQUFPLGVBQUssQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQy9ELENBQUM7UUFFRCx3Q0FBd0M7UUFDeEMsT0FBTyxJQUFJLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzNFLENBQUM7Q0FDRjtBQXJSRCw4Q0FxUkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IsIFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7XG4gIEVudHJ5RnVuY3Rpb25BQkksXG4gIEVudHJ5RnVuY3Rpb25Bcmd1bWVudFR5cGVzLFxuICBTaW1wbGVFbnRyeUZ1bmN0aW9uQXJndW1lbnRUeXBlcyxcbiAgSW5wdXRHZW5lcmF0ZVRyYW5zYWN0aW9uUGF5bG9hZERhdGEsXG4gIFRyYW5zYWN0aW9uUGF5bG9hZCxcbiAgVHJhbnNhY3Rpb25QYXlsb2FkRW50cnlGdW5jdGlvbixcbiAgQWNjb3VudEFkZHJlc3MsXG4gIFR5cGVUYWdBZGRyZXNzLFxuICBUeXBlVGFnQm9vbCxcbiAgVHlwZVRhZ1U4LFxuICBUeXBlVGFnVTE2LFxuICBUeXBlVGFnVTMyLFxuICBUeXBlVGFnVTY0LFxuICBUeXBlVGFnVTEyOCxcbiAgVHlwZVRhZ1UyNTYsXG59IGZyb20gJ0BhcHRvcy1sYWJzL3RzLXNkayc7XG5pbXBvcnQgeyBDdXN0b21UcmFuc2FjdGlvblBhcmFtcyB9IGZyb20gJy4uL2lmYWNlJztcbmltcG9ydCB7IHZhbGlkYXRlTW9kdWxlTmFtZSwgdmFsaWRhdGVGdW5jdGlvbk5hbWUgfSBmcm9tICcuLi91dGlscy92YWxpZGF0aW9uJztcbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscyc7XG5cbi8qKlxuICogVHJhbnNhY3Rpb24gY2xhc3MgZm9yIGN1c3RvbSBBcHRvcyB0cmFuc2FjdGlvbnMuXG4gKi9cbmV4cG9ydCBjbGFzcyBDdXN0b21UcmFuc2FjdGlvbiBleHRlbmRzIFRyYW5zYWN0aW9uIHtcbiAgcHJpdmF0ZSBfbW9kdWxlTmFtZTogc3RyaW5nO1xuICBwcml2YXRlIF9mdW5jdGlvbk5hbWU6IHN0cmluZztcbiAgcHJpdmF0ZSBfdHlwZUFyZ3VtZW50czogc3RyaW5nW10gPSBbXTtcbiAgcHJpdmF0ZSBfZnVuY3Rpb25Bcmd1bWVudHM6IEFycmF5PEVudHJ5RnVuY3Rpb25Bcmd1bWVudFR5cGVzIHwgU2ltcGxlRW50cnlGdW5jdGlvbkFyZ3VtZW50VHlwZXM+ID0gW107XG4gIHByaXZhdGUgX2VudHJ5RnVuY3Rpb25BYmk/OiBFbnRyeUZ1bmN0aW9uQUJJO1xuXG4gIGNvbnN0cnVjdG9yKGNvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoY29pbkNvbmZpZyk7XG4gICAgdGhpcy5fdHlwZSA9IFRyYW5zYWN0aW9uVHlwZS5DdXN0b21UeDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGN1c3RvbSB0cmFuc2FjdGlvbiBwYXJhbWV0ZXJzXG4gICAqL1xuICBzZXRDdXN0b21UcmFuc2FjdGlvblBhcmFtcyhwYXJhbXM6IEN1c3RvbVRyYW5zYWN0aW9uUGFyYW1zKTogdm9pZCB7XG4gICAgdmFsaWRhdGVNb2R1bGVOYW1lKHBhcmFtcy5tb2R1bGVOYW1lKTtcbiAgICB2YWxpZGF0ZUZ1bmN0aW9uTmFtZShwYXJhbXMuZnVuY3Rpb25OYW1lKTtcblxuICAgIHRoaXMuX21vZHVsZU5hbWUgPSBwYXJhbXMubW9kdWxlTmFtZTtcbiAgICB0aGlzLl9mdW5jdGlvbk5hbWUgPSBwYXJhbXMuZnVuY3Rpb25OYW1lO1xuICAgIHRoaXMuX3R5cGVBcmd1bWVudHMgPSBwYXJhbXMudHlwZUFyZ3VtZW50cyB8fCBbXTtcbiAgICB0aGlzLl9mdW5jdGlvbkFyZ3VtZW50cyA9IHBhcmFtcy5mdW5jdGlvbkFyZ3VtZW50cyB8fCBbXTtcbiAgICB0aGlzLl9lbnRyeUZ1bmN0aW9uQWJpID0gcGFyYW1zLmFiaTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGVudHJ5IGZ1bmN0aW9uIEFCSVxuICAgKi9cbiAgc2V0RW50cnlGdW5jdGlvbkFiaShhYmk6IEVudHJ5RnVuY3Rpb25BQkkpOiB2b2lkIHtcbiAgICB0aGlzLl9lbnRyeUZ1bmN0aW9uQWJpID0gYWJpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZnVsbCBmdW5jdGlvbiBuYW1lXG4gICAqL1xuICBnZXQgZnVsbEZ1bmN0aW9uTmFtZSgpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5fbW9kdWxlTmFtZSB8fCAhdGhpcy5fZnVuY3Rpb25OYW1lKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIHJldHVybiBgJHt0aGlzLl9tb2R1bGVOYW1lfTo6JHt0aGlzLl9mdW5jdGlvbk5hbWV9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZSBhIHRyYW5zYWN0aW9uIHBheWxvYWQgdG8gZXh0cmFjdCB0aGUgY3VzdG9tIHRyYW5zYWN0aW9uIGRhdGFcbiAgICogUmVxdWlyZXMgQUJJIGluZm9ybWF0aW9uIGZvciBwcm9wZXIgdHlwZS1hd2FyZSBjb252ZXJzaW9uXG4gICAqXG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb25QYXlsb2FkfSBwYXlsb2FkIC0gVGhlIHRyYW5zYWN0aW9uIHBheWxvYWQgdG8gcGFyc2VcbiAgICovXG4gIHByb3RlY3RlZCBwYXJzZVRyYW5zYWN0aW9uUGF5bG9hZChwYXlsb2FkOiBUcmFuc2FjdGlvblBheWxvYWQpOiB2b2lkIHtcbiAgICBpZiAoIShwYXlsb2FkIGluc3RhbmNlb2YgVHJhbnNhY3Rpb25QYXlsb2FkRW50cnlGdW5jdGlvbikpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignRXhwZWN0ZWQgZW50cnkgZnVuY3Rpb24gcGF5bG9hZCBmb3IgY3VzdG9tIHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuXG4gICAgY29uc3QgZW50cnlGdW5jdGlvbiA9IHBheWxvYWQuZW50cnlGdW5jdGlvbjtcblxuICAgIC8vIEV4dHJhY3QgZnVuY3Rpb24gZGF0YVxuICAgIGNvbnN0IG1vZHVsZUFkZHJlc3MgPSBlbnRyeUZ1bmN0aW9uLm1vZHVsZV9uYW1lLmFkZHJlc3MudG9TdHJpbmcoKTtcbiAgICBjb25zdCBtb2R1bGVJZGVudGlmaWVyID0gZW50cnlGdW5jdGlvbi5tb2R1bGVfbmFtZS5uYW1lLmlkZW50aWZpZXI7XG4gICAgY29uc3QgZnVuY3Rpb25JZGVudGlmaWVyID0gZW50cnlGdW5jdGlvbi5mdW5jdGlvbl9uYW1lLmlkZW50aWZpZXI7XG5cbiAgICBjb25zdCBtb2R1bGVOYW1lID0gYCR7bW9kdWxlQWRkcmVzc306OiR7bW9kdWxlSWRlbnRpZmllcn1gO1xuXG4gICAgLy8gVmFsaWRhdGVcbiAgICB2YWxpZGF0ZU1vZHVsZU5hbWUobW9kdWxlTmFtZSk7XG4gICAgdmFsaWRhdGVGdW5jdGlvbk5hbWUoZnVuY3Rpb25JZGVudGlmaWVyKTtcblxuICAgIHRoaXMuX21vZHVsZU5hbWUgPSBtb2R1bGVOYW1lO1xuICAgIHRoaXMuX2Z1bmN0aW9uTmFtZSA9IGZ1bmN0aW9uSWRlbnRpZmllcjtcbiAgICB0aGlzLl90eXBlQXJndW1lbnRzID0gZW50cnlGdW5jdGlvbi50eXBlX2FyZ3MubWFwKCh0eXBlQXJnKSA9PiB0eXBlQXJnLnRvU3RyaW5nKCkpO1xuXG4gICAgLy8gUGFyc2UgYXJndW1lbnRzIHVzaW5nIEFCSSBpbmZvcm1hdGlvblxuICAgIC8vIElmIEFCSSBpcyBhdmFpbGFibGUsIHBhcnNlIHdpdGggdHlwZSBhd2FyZW5lc3M7IG90aGVyd2lzZSBzdG9yZSByYXcgYXJncyBmb3IgbGF0ZXIgcHJvY2Vzc2luZ1xuICAgIGlmICh0aGlzLl9lbnRyeUZ1bmN0aW9uQWJpPy5wYXJhbWV0ZXJzKSB7XG4gICAgICB0aGlzLl9mdW5jdGlvbkFyZ3VtZW50cyA9IGVudHJ5RnVuY3Rpb24uYXJncy5tYXAoKGFyZzogYW55LCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgIGNvbnN0IHBhcmFtVHlwZSA9IHRoaXMuX2VudHJ5RnVuY3Rpb25BYmk/LnBhcmFtZXRlcnM/LltpbmRleF07XG4gICAgICAgIGlmICghcGFyYW1UeXBlKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKFxuICAgICAgICAgICAgYE1pc3NpbmcgQUJJIHBhcmFtZXRlciB0eXBlIGZvciBhcmd1bWVudCAke2luZGV4fSBpbiAke3RoaXMuX21vZHVsZU5hbWV9Ojoke3RoaXMuX2Z1bmN0aW9uTmFtZX0uIGAgK1xuICAgICAgICAgICAgICAnQUJJIHBhcmFtZXRlciBjb3VudCBtaXNtYXRjaC4nXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5jb252ZXJ0QXJndW1lbnRCeUFCSShhcmcsIHBhcmFtVHlwZSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU3RvcmUgcmF3IGFyZ3VtZW50cyB0ZW1wb3JhcmlseSAtIHRyYW5zYWN0aW9uIHdpbGwgYmUgcmUtcGFyc2VkIHdoZW4gQUJJIGlzIHByb3ZpZGVkXG4gICAgICB0aGlzLl9mdW5jdGlvbkFyZ3VtZW50cyA9IGVudHJ5RnVuY3Rpb24uYXJncy5tYXAoKGFyZzogYW55KSA9PiBhcmcpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSB0cmFuc2FjdGlvbiBwYXlsb2FkIGRhdGFcbiAgICovXG4gIHByb3RlY3RlZCBnZXRUcmFuc2FjdGlvblBheWxvYWREYXRhKCk6IElucHV0R2VuZXJhdGVUcmFuc2FjdGlvblBheWxvYWREYXRhIHtcbiAgICBjb25zdCBmdW5jdGlvbk5hbWUgPSB0aGlzLmdldFZhbGlkYXRlZEZ1bGxGdW5jdGlvbk5hbWUoKTtcblxuICAgIC8vIEFyZ3VtZW50cyBhcmUgcHJlLXByb2Nlc3NlZCBkdXJpbmcgcGFyc2luZyBwaGFzZVxuICAgIGNvbnN0IHByb2Nlc3NlZEFyZ3VtZW50cyA9IHRoaXMuX2Z1bmN0aW9uQXJndW1lbnRzO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGZ1bmN0aW9uOiBmdW5jdGlvbk5hbWUsXG4gICAgICB0eXBlQXJndW1lbnRzOiB0aGlzLl90eXBlQXJndW1lbnRzLFxuICAgICAgZnVuY3Rpb25Bcmd1bWVudHM6IHByb2Nlc3NlZEFyZ3VtZW50cyxcbiAgICAgIGFiaTogdGhpcy5fZW50cnlGdW5jdGlvbkFiaSxcbiAgICB9IGFzIElucHV0R2VuZXJhdGVUcmFuc2FjdGlvblBheWxvYWREYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgYXJndW1lbnQgYmFzZWQgb24gQUJJIHR5cGUgaW5mb3JtYXRpb25cbiAgICovXG4gIHByaXZhdGUgY29udmVydEFyZ3VtZW50QnlBQkkoYXJnOiBhbnksIHBhcmFtVHlwZTogYW55KTogYW55IHtcbiAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY29udmVydCBieXRlcyB0byBoZXggc3RyaW5nXG4gICAgY29uc3QgYnl0ZXNUb0hleCA9IChieXRlczogbnVtYmVyW10pOiBzdHJpbmcgPT4ge1xuICAgICAgcmV0dXJuICcweCcgKyBieXRlcy5tYXAoKGIpID0+IGIudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsICcwJykpLmpvaW4oJycpO1xuICAgIH07XG5cbiAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdHJ5IGNvbnZlcnRpbmcgYSBoZXggc3RyaW5nIHRvIGFuIEFjY291bnRBZGRyZXNzXG4gICAgY29uc3QgdHJ5VG9BZGRyZXNzID0gKGhleFN0cjogc3RyaW5nKTogYW55ID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBBY2NvdW50QWRkcmVzcy5mcm9tU3RyaW5nKGhleFN0cik7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIGhleFN0cjtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gSGFuZGxlIHByaW1pdGl2ZSB2YWx1ZXMgKHN0cmluZywgbnVtYmVyLCBib29sZWFuKVxuICAgIGlmICh0eXBlb2YgYXJnID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgYXJnID09PSAnbnVtYmVyJyB8fCB0eXBlb2YgYXJnID09PSAnYm9vbGVhbicpIHtcbiAgICAgIC8vIEFkZHJlc3MgY29udmVyc2lvbiBmb3IgaGV4IHN0cmluZ3NcbiAgICAgIGlmIChwYXJhbVR5cGUgaW5zdGFuY2VvZiBUeXBlVGFnQWRkcmVzcyAmJiB0eXBlb2YgYXJnID09PSAnc3RyaW5nJyAmJiBhcmcuc3RhcnRzV2l0aCgnMHgnKSkge1xuICAgICAgICByZXR1cm4gdHJ5VG9BZGRyZXNzKGFyZyk7XG4gICAgICB9XG5cbiAgICAgIC8vIFR5cGUgY29udmVyc2lvbnMgYmFzZWQgb24gcGFyYW1ldGVyIHR5cGVcbiAgICAgIGlmIChwYXJhbVR5cGUgaW5zdGFuY2VvZiBUeXBlVGFnQm9vbCkgcmV0dXJuIEJvb2xlYW4oYXJnKTtcbiAgICAgIGlmIChwYXJhbVR5cGUgaW5zdGFuY2VvZiBUeXBlVGFnVTggfHwgcGFyYW1UeXBlIGluc3RhbmNlb2YgVHlwZVRhZ1UxNiB8fCBwYXJhbVR5cGUgaW5zdGFuY2VvZiBUeXBlVGFnVTMyKVxuICAgICAgICByZXR1cm4gTnVtYmVyKGFyZyk7XG4gICAgICBpZiAocGFyYW1UeXBlIGluc3RhbmNlb2YgVHlwZVRhZ1U2NCB8fCBwYXJhbVR5cGUgaW5zdGFuY2VvZiBUeXBlVGFnVTEyOCB8fCBwYXJhbVR5cGUgaW5zdGFuY2VvZiBUeXBlVGFnVTI1NilcbiAgICAgICAgcmV0dXJuIFN0cmluZyhhcmcpO1xuXG4gICAgICByZXR1cm4gYXJnO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBCQ1MtZW5jb2RlZCBkYXRhIHdpdGggJ2RhdGEnIHByb3BlcnR5XG4gICAgaWYgKGFyZyAmJiB0eXBlb2YgYXJnID09PSAnb2JqZWN0JyAmJiAnZGF0YScgaW4gYXJnICYmIGFyZy5kYXRhKSB7XG4gICAgICBjb25zdCBieXRlcyA9IEFycmF5LmZyb20oYXJnLmRhdGEpIGFzIG51bWJlcltdO1xuICAgICAgY29uc3QgaGV4U3RyaW5nID0gYnl0ZXNUb0hleChieXRlcyk7XG5cbiAgICAgIHJldHVybiBwYXJhbVR5cGUgaW5zdGFuY2VvZiBUeXBlVGFnQWRkcmVzcyA/IHRyeVRvQWRkcmVzcyhoZXhTdHJpbmcpIDogaGV4U3RyaW5nO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBuZXN0ZWQgQkNTIHN0cnVjdHVyZXMgd2l0aCAndmFsdWUnIHByb3BlcnR5XG4gICAgaWYgKGFyZyAmJiB0eXBlb2YgYXJnID09PSAnb2JqZWN0JyAmJiAndmFsdWUnIGluIGFyZyAmJiBhcmcudmFsdWUpIHtcbiAgICAgIC8vIENoZWNrIGlmIGlubmVyIHZhbHVlIGlzIGEgVWludDhBcnJheSAoY29tbW9uIGZvciBVNjQgYXJndW1lbnRzKVxuICAgICAgaWYgKGFyZy52YWx1ZS52YWx1ZSAmJiBhcmcudmFsdWUudmFsdWUgaW5zdGFuY2VvZiBVaW50OEFycmF5KSB7XG4gICAgICAgIGNvbnN0IGJ5dGVzID0gQXJyYXkuZnJvbShhcmcudmFsdWUudmFsdWUpIGFzIG51bWJlcltdO1xuICAgICAgICBpZiAodGhpcy5pc051bWVyaWNUeXBlKHBhcmFtVHlwZSkpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb252ZXJ0TnVtZXJpY0FyZ3VtZW50KGJ5dGVzLCBwYXJhbVR5cGUpO1xuICAgICAgICB9XG4gICAgICAgIC8vIEZvciBub24tbnVtZXJpYyB0eXBlcywgY29udmVydCB0byBoZXggc3RyaW5nXG4gICAgICAgIHJldHVybiBieXRlc1RvSGV4KGJ5dGVzKTtcbiAgICAgIH1cblxuICAgICAgLy8gU2ltcGxlIHZhbHVlIHdyYXBwZXJcbiAgICAgIGlmICghKCd2YWx1ZScgaW4gYXJnLnZhbHVlKSB8fCB0eXBlb2YgYXJnLnZhbHVlLnZhbHVlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gdGhpcy5jb252ZXJ0QXJndW1lbnRCeUFCSShhcmcudmFsdWUsIHBhcmFtVHlwZSk7XG4gICAgICB9XG5cbiAgICAgIC8vIERvdWJsZSBuZXN0ZWQgc3RydWN0dXJlIHdpdGggbnVtZXJpYyBrZXlzXG4gICAgICBjb25zdCBieXRlc09iaiA9IGFyZy52YWx1ZS52YWx1ZTtcbiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhieXRlc09iailcbiAgICAgICAgLmZpbHRlcigoaykgPT4gIWlzTmFOKHBhcnNlSW50KGssIDEwKSkpXG4gICAgICAgIC5zb3J0KChhLCBiKSA9PiBwYXJzZUludChhLCAxMCkgLSBwYXJzZUludChiLCAxMCkpO1xuXG4gICAgICBpZiAoa2V5cy5sZW5ndGggPT09IDApIHJldHVybiBhcmc7XG5cbiAgICAgIGNvbnN0IGJ5dGVzID0ga2V5cy5tYXAoKGspID0+IGJ5dGVzT2JqW2tdKTtcbiAgICAgIGxldCBleHRyYWN0ZWRWYWx1ZTogYW55O1xuXG4gICAgICAvLyBDb252ZXJ0IGJ5dGVzIGJhc2VkIG9uIHBhcmFtZXRlciB0eXBlIHVzaW5nIHVuaWZpZWQgYXBwcm9hY2hcbiAgICAgIGlmICh0aGlzLmlzTnVtZXJpY1R5cGUocGFyYW1UeXBlKSkge1xuICAgICAgICBleHRyYWN0ZWRWYWx1ZSA9IHRoaXMuY29udmVydE51bWVyaWNBcmd1bWVudChieXRlcywgcGFyYW1UeXBlKTtcbiAgICAgIH0gZWxzZSBpZiAocGFyYW1UeXBlIGluc3RhbmNlb2YgVHlwZVRhZ0FkZHJlc3MpIHtcbiAgICAgICAgZXh0cmFjdGVkVmFsdWUgPSBieXRlc1RvSGV4KGJ5dGVzKTtcbiAgICAgIH0gZWxzZSBpZiAocGFyYW1UeXBlIGluc3RhbmNlb2YgVHlwZVRhZ0Jvb2wpIHtcbiAgICAgICAgZXh0cmFjdGVkVmFsdWUgPSBieXRlc1swXSA9PT0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGV4dHJhY3RlZFZhbHVlID0gYnl0ZXNUb0hleChieXRlcyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRBcmd1bWVudEJ5QUJJKGV4dHJhY3RlZFZhbHVlLCBwYXJhbVR5cGUpO1xuICAgIH1cblxuICAgIC8vIEZvciBhbnl0aGluZyBlbHNlLCByZXR1cm4gYXMtaXNcbiAgICByZXR1cm4gYXJnO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjdXN0b20gdHJhbnNhY3Rpb24gcGFyYW1ldGVyc1xuICAgKi9cbiAgZ2V0Q3VzdG9tVHJhbnNhY3Rpb25QYXJhbXMoKTogQ3VzdG9tVHJhbnNhY3Rpb25QYXJhbXMge1xuICAgIHJldHVybiB7XG4gICAgICBtb2R1bGVOYW1lOiB0aGlzLl9tb2R1bGVOYW1lIHx8ICcnLFxuICAgICAgZnVuY3Rpb25OYW1lOiB0aGlzLl9mdW5jdGlvbk5hbWUgfHwgJycsXG4gICAgICB0eXBlQXJndW1lbnRzOiB0aGlzLl90eXBlQXJndW1lbnRzLFxuICAgICAgZnVuY3Rpb25Bcmd1bWVudHM6IHRoaXMuX2Z1bmN0aW9uQXJndW1lbnRzLFxuICAgICAgYWJpOiB0aGlzLl9lbnRyeUZ1bmN0aW9uQWJpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogT3ZlcnJpZGUgcmVjaXBpZW50IGdldHRlciBmb3IgY3VzdG9tIHRyYW5zYWN0aW9uc1xuICAgKi9cbiAgZ2V0IHJlY2lwaWVudCgpOiBhbnkge1xuICAgIGlmICh0aGlzLl9yZWNpcGllbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYWRkcmVzczogJycsXG4gICAgICAgIGFtb3VudDogJzAnLFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3JlY2lwaWVudHNbMF07XG4gIH1cblxuICAvKipcbiAgICogR2V0IHZhbGlkYXRlZCBmdWxsIGZ1bmN0aW9uIG5hbWVcbiAgICovXG4gIHByaXZhdGUgZ2V0VmFsaWRhdGVkRnVsbEZ1bmN0aW9uTmFtZSgpOiBgJHtzdHJpbmd9Ojoke3N0cmluZ306OiR7c3RyaW5nfWAge1xuICAgIGlmICghdGhpcy5fbW9kdWxlTmFtZSB8fCAhdGhpcy5fZnVuY3Rpb25OYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01vZHVsZSBuYW1lIGFuZCBmdW5jdGlvbiBuYW1lIG11c3QgYmUgc2V0IGJlZm9yZSBidWlsZGluZyB0cmFuc2FjdGlvbicpO1xuICAgIH1cblxuICAgIGNvbnN0IGZ1bGxOYW1lID0gYCR7dGhpcy5fbW9kdWxlTmFtZX06OiR7dGhpcy5fZnVuY3Rpb25OYW1lfWA7XG5cbiAgICAvLyBCYXNpYyB2YWxpZGF0aW9uXG4gICAgY29uc3QgZnVsbEZ1bmN0aW9uUGF0dGVybiA9XG4gICAgICAvXigweFthLWZBLUYwLTldezEsNjR9fFthLXpBLVpfXVthLXpBLVowLTlfXSopOjpbYS16QS1aX11bYS16QS1aMC05X10qOjpbYS16QS1aX11bYS16QS1aMC05X10qJC87XG4gICAgaWYgKCFmdWxsRnVuY3Rpb25QYXR0ZXJuLnRlc3QoZnVsbE5hbWUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZnVsbCBmdW5jdGlvbiBuYW1lIGZvcm1hdDogXCIke2Z1bGxOYW1lfVwiLiBFeHBlY3RlZCBmb3JtYXQ6IFwiYWRkcmVzczo6bW9kdWxlOjpmdW5jdGlvblwiYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1bGxOYW1lIGFzIGAke3N0cmluZ306OiR7c3RyaW5nfTo6JHtzdHJpbmd9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhIHBhcmFtZXRlciB0eXBlIGlzIGEgbnVtZXJpYyB0eXBlXG4gICAqL1xuICBwcml2YXRlIGlzTnVtZXJpY1R5cGUocGFyYW1UeXBlOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgcGFyYW1UeXBlIGluc3RhbmNlb2YgVHlwZVRhZ1U4IHx8XG4gICAgICBwYXJhbVR5cGUgaW5zdGFuY2VvZiBUeXBlVGFnVTE2IHx8XG4gICAgICBwYXJhbVR5cGUgaW5zdGFuY2VvZiBUeXBlVGFnVTMyIHx8XG4gICAgICBwYXJhbVR5cGUgaW5zdGFuY2VvZiBUeXBlVGFnVTY0IHx8XG4gICAgICBwYXJhbVR5cGUgaW5zdGFuY2VvZiBUeXBlVGFnVTEyOCB8fFxuICAgICAgcGFyYW1UeXBlIGluc3RhbmNlb2YgVHlwZVRhZ1UyNTZcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgbnVtZXJpYyBhcmd1bWVudCB1c2luZyBjb25zaXN0ZW50IGxpdHRsZS1lbmRpYW4gYnl0ZSBoYW5kbGluZ1xuICAgKi9cbiAgcHJpdmF0ZSBjb252ZXJ0TnVtZXJpY0FyZ3VtZW50KGJ5dGVzOiBudW1iZXJbXSwgcGFyYW1UeXBlOiBhbnkpOiBhbnkge1xuICAgIGlmIChwYXJhbVR5cGUgaW5zdGFuY2VvZiBUeXBlVGFnVTggfHwgcGFyYW1UeXBlIGluc3RhbmNlb2YgVHlwZVRhZ1UxNiB8fCBwYXJhbVR5cGUgaW5zdGFuY2VvZiBUeXBlVGFnVTMyKSB7XG4gICAgICAvLyBTbWFsbCBpbnRlZ2VyczogdXNlIE51bWJlciBmb3IgY29tcGF0aWJpbGl0eVxuICAgICAgbGV0IHJlc3VsdCA9IDA7XG4gICAgICBmb3IgKGxldCBpID0gYnl0ZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICogMjU2ICsgYnl0ZXNbaV07XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGlmIChwYXJhbVR5cGUgaW5zdGFuY2VvZiBUeXBlVGFnVTY0IHx8IHBhcmFtVHlwZSBpbnN0YW5jZW9mIFR5cGVUYWdVMTI4IHx8IHBhcmFtVHlwZSBpbnN0YW5jZW9mIFR5cGVUYWdVMjU2KSB7XG4gICAgICAvLyBMYXJnZSBpbnRlZ2VyczogcmV1c2UgdGhlIGV4aXN0aW5nIHV0aWxpdHkgbWV0aG9kXG4gICAgICByZXR1cm4gdXRpbHMuZ2V0QW1vdW50RnJvbVBheWxvYWRBcmdzKG5ldyBVaW50OEFycmF5KGJ5dGVzKSk7XG4gICAgfVxuXG4gICAgLy8gRmFsbGJhY2sgZm9yIHVuZXhwZWN0ZWQgbnVtZXJpYyB0eXBlc1xuICAgIHJldHVybiAnMHgnICsgYnl0ZXMubWFwKChiKSA9PiBiLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCAnMCcpKS5qb2luKCcnKTtcbiAgfVxufVxuIl19
278
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tVHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uL2N1c3RvbVRyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLCtDQUE0QztBQUU1QyxtREFBZ0Y7QUFDaEYsK0NBZ0I0QjtBQUU1QixvREFBK0U7QUFDL0UscURBQTZCO0FBRTdCOztHQUVHO0FBQ0gsTUFBYSxpQkFBa0IsU0FBUSx5QkFBVztJQU9oRCxZQUFZLFVBQWdDO1FBQzFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUxaLG1CQUFjLEdBQWEsRUFBRSxDQUFDO1FBQzlCLHVCQUFrQixHQUF5RSxFQUFFLENBQUM7UUFLcEcsSUFBSSxDQUFDLEtBQUssR0FBRywwQkFBZSxDQUFDLFFBQVEsQ0FBQztJQUN4QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCwwQkFBMEIsQ0FBQyxNQUErQjtRQUN4RCxJQUFBLCtCQUFrQixFQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN0QyxJQUFBLGlDQUFvQixFQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUUxQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUM7UUFDckMsSUFBSSxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxjQUFjLEdBQUcsTUFBTSxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUM7UUFDakQsSUFBSSxDQUFDLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsSUFBSSxFQUFFLENBQUM7UUFDekQsSUFBSSxDQUFDLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUM7SUFDdEMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsbUJBQW1CLENBQUMsR0FBcUI7UUFDdkMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEdBQUcsQ0FBQztJQUMvQixDQUFD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QUNELE9BQU8sTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzNCLENBQUM7UUFFRCxJQUFJLFNBQVMsWUFBWSxtQkFBVSxJQUFJLFNBQVMsWUFBWSxvQkFBVyxJQUFJLFNBQVMsWUFBWSxvQkFBVyxFQUFFLENBQUM7WUFDNUcsb0RBQW9EO1lBQ3BELE9BQU8sZUFBSyxDQUFDLHdCQUF3QixDQUFDLElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDL0QsQ0FBQztRQUVELCtCQUErQjtRQUMvQixPQUFPLGVBQUssQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakMsQ0FBQztDQUNGO0FBdFRELDhDQXNUQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbic7XG5pbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgeyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvciwgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHtcbiAgQWNjb3VudEFkZHJlc3MsXG4gIEVudHJ5RnVuY3Rpb25BQkksXG4gIEVudHJ5RnVuY3Rpb25Bcmd1bWVudFR5cGVzLFxuICBTaW1wbGVFbnRyeUZ1bmN0aW9uQXJndW1lbnRUeXBlcyxcbiAgSW5wdXRHZW5lcmF0ZVRyYW5zYWN0aW9uUGF5bG9hZERhdGEsXG4gIFRyYW5zYWN0aW9uUGF5bG9hZCxcbiAgVHJhbnNhY3Rpb25QYXlsb2FkRW50cnlGdW5jdGlvbixcbiAgVHlwZVRhZ0FkZHJlc3MsXG4gIFR5cGVUYWdCb29sLFxuICBUeXBlVGFnVTgsXG4gIFR5cGVUYWdVMTYsXG4gIFR5cGVUYWdVMzIsXG4gIFR5cGVUYWdVNjQsXG4gIFR5cGVUYWdVMTI4LFxuICBUeXBlVGFnVTI1Nixcbn0gZnJvbSAnQGFwdG9zLWxhYnMvdHMtc2RrJztcbmltcG9ydCB7IEN1c3RvbVRyYW5zYWN0aW9uUGFyYW1zIH0gZnJvbSAnLi4vaWZhY2UnO1xuaW1wb3J0IHsgdmFsaWRhdGVNb2R1bGVOYW1lLCB2YWxpZGF0ZUZ1bmN0aW9uTmFtZSB9IGZyb20gJy4uL3V0aWxzL3ZhbGlkYXRpb24nO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzJztcblxuLyoqXG4gKiBUcmFuc2FjdGlvbiBjbGFzcyBmb3IgY3VzdG9tIEFwdG9zIHRyYW5zYWN0aW9ucy5cbiAqL1xuZXhwb3J0IGNsYXNzIEN1c3RvbVRyYW5zYWN0aW9uIGV4dGVuZHMgVHJhbnNhY3Rpb24ge1xuICBwcml2YXRlIF9tb2R1bGVOYW1lOiBzdHJpbmc7XG4gIHByaXZhdGUgX2Z1bmN0aW9uTmFtZTogc3RyaW5nO1xuICBwcml2YXRlIF90eXBlQXJndW1lbnRzOiBzdHJpbmdbXSA9IFtdO1xuICBwcml2YXRlIF9mdW5jdGlvbkFyZ3VtZW50czogQXJyYXk8RW50cnlGdW5jdGlvbkFyZ3VtZW50VHlwZXMgfCBTaW1wbGVFbnRyeUZ1bmN0aW9uQXJndW1lbnRUeXBlcz4gPSBbXTtcbiAgcHJpdmF0ZSBfZW50cnlGdW5jdGlvbkFiaT86IEVudHJ5RnVuY3Rpb25BQkk7XG5cbiAgY29uc3RydWN0b3IoY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihjb2luQ29uZmlnKTtcbiAgICB0aGlzLl90eXBlID0gVHJhbnNhY3Rpb25UeXBlLkN1c3RvbVR4O1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgY3VzdG9tIHRyYW5zYWN0aW9uIHBhcmFtZXRlcnNcbiAgICovXG4gIHNldEN1c3RvbVRyYW5zYWN0aW9uUGFyYW1zKHBhcmFtczogQ3VzdG9tVHJhbnNhY3Rpb25QYXJhbXMpOiB2b2lkIHtcbiAgICB2YWxpZGF0ZU1vZHVsZU5hbWUocGFyYW1zLm1vZHVsZU5hbWUpO1xuICAgIHZhbGlkYXRlRnVuY3Rpb25OYW1lKHBhcmFtcy5mdW5jdGlvbk5hbWUpO1xuXG4gICAgdGhpcy5fbW9kdWxlTmFtZSA9IHBhcmFtcy5tb2R1bGVOYW1lO1xuICAgIHRoaXMuX2Z1bmN0aW9uTmFtZSA9IHBhcmFtcy5mdW5jdGlvbk5hbWU7XG4gICAgdGhpcy5fdHlwZUFyZ3VtZW50cyA9IHBhcmFtcy50eXBlQXJndW1lbnRzIHx8IFtdO1xuICAgIHRoaXMuX2Z1bmN0aW9uQXJndW1lbnRzID0gcGFyYW1zLmZ1bmN0aW9uQXJndW1lbnRzIHx8IFtdO1xuICAgIHRoaXMuX2VudHJ5RnVuY3Rpb25BYmkgPSBwYXJhbXMuYWJpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgZW50cnkgZnVuY3Rpb24gQUJJXG4gICAqL1xuICBzZXRFbnRyeUZ1bmN0aW9uQWJpKGFiaTogRW50cnlGdW5jdGlvbkFCSSk6IHZvaWQge1xuICAgIHRoaXMuX2VudHJ5RnVuY3Rpb25BYmkgPSBhYmk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBmdWxsIGZ1bmN0aW9uIG5hbWVcbiAgICovXG4gIGdldCBmdWxsRnVuY3Rpb25OYW1lKCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLl9tb2R1bGVOYW1lIHx8ICF0aGlzLl9mdW5jdGlvbk5hbWUpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgcmV0dXJuIGAke3RoaXMuX21vZHVsZU5hbWV9Ojoke3RoaXMuX2Z1bmN0aW9uTmFtZX1gO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlIGEgdHJhbnNhY3Rpb24gcGF5bG9hZCB0byBleHRyYWN0IHRoZSBjdXN0b20gdHJhbnNhY3Rpb24gZGF0YVxuICAgKiBSZXF1aXJlcyBBQkkgaW5mb3JtYXRpb24gZm9yIHByb3BlciB0eXBlLWF3YXJlIGNvbnZlcnNpb25cbiAgICpcbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvblBheWxvYWR9IHBheWxvYWQgLSBUaGUgdHJhbnNhY3Rpb24gcGF5bG9hZCB0byBwYXJzZVxuICAgKi9cbiAgcHJvdGVjdGVkIHBhcnNlVHJhbnNhY3Rpb25QYXlsb2FkKHBheWxvYWQ6IFRyYW5zYWN0aW9uUGF5bG9hZCk6IHZvaWQge1xuICAgIGlmICghKHBheWxvYWQgaW5zdGFuY2VvZiBUcmFuc2FjdGlvblBheWxvYWRFbnRyeUZ1bmN0aW9uKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdFeHBlY3RlZCBlbnRyeSBmdW5jdGlvbiBwYXlsb2FkIGZvciBjdXN0b20gdHJhbnNhY3Rpb24nKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbnRyeUZ1bmN0aW9uID0gcGF5bG9hZC5lbnRyeUZ1bmN0aW9uO1xuXG4gICAgLy8gRXh0cmFjdCBmdW5jdGlvbiBkYXRhXG4gICAgY29uc3QgbW9kdWxlQWRkcmVzcyA9IGVudHJ5RnVuY3Rpb24ubW9kdWxlX25hbWUuYWRkcmVzcy50b1N0cmluZygpO1xuICAgIGNvbnN0IG1vZHVsZUlkZW50aWZpZXIgPSBlbnRyeUZ1bmN0aW9uLm1vZHVsZV9uYW1lLm5hbWUuaWRlbnRpZmllcjtcbiAgICBjb25zdCBmdW5jdGlvbklkZW50aWZpZXIgPSBlbnRyeUZ1bmN0aW9uLmZ1bmN0aW9uX25hbWUuaWRlbnRpZmllcjtcblxuICAgIGNvbnN0IG1vZHVsZU5hbWUgPSBgJHttb2R1bGVBZGRyZXNzfTo6JHttb2R1bGVJZGVudGlmaWVyfWA7XG5cbiAgICAvLyBWYWxpZGF0ZVxuICAgIHZhbGlkYXRlTW9kdWxlTmFtZShtb2R1bGVOYW1lKTtcbiAgICB2YWxpZGF0ZUZ1bmN0aW9uTmFtZShmdW5jdGlvbklkZW50aWZpZXIpO1xuXG4gICAgdGhpcy5fbW9kdWxlTmFtZSA9IG1vZHVsZU5hbWU7XG4gICAgdGhpcy5fZnVuY3Rpb25OYW1lID0gZnVuY3Rpb25JZGVudGlmaWVyO1xuICAgIHRoaXMuX3R5cGVBcmd1bWVudHMgPSBlbnRyeUZ1bmN0aW9uLnR5cGVfYXJncy5tYXAoKHR5cGVBcmcpID0+IHR5cGVBcmcudG9TdHJpbmcoKSk7XG5cbiAgICAvLyBQYXJzZSBhcmd1bWVudHMgdXNpbmcgQUJJIGluZm9ybWF0aW9uXG4gICAgLy8gSWYgQUJJIGlzIGF2YWlsYWJsZSwgcGFyc2Ugd2l0aCB0eXBlIGF3YXJlbmVzczsgb3RoZXJ3aXNlIHN0b3JlIHJhdyBhcmdzIGZvciBsYXRlciBwcm9jZXNzaW5nXG4gICAgaWYgKHRoaXMuX2VudHJ5RnVuY3Rpb25BYmk/LnBhcmFtZXRlcnMpIHtcbiAgICAgIHRoaXMuX2Z1bmN0aW9uQXJndW1lbnRzID0gZW50cnlGdW5jdGlvbi5hcmdzLm1hcCgoYXJnOiBhbnksIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgY29uc3QgcGFyYW1UeXBlID0gdGhpcy5fZW50cnlGdW5jdGlvbkFiaT8ucGFyYW1ldGVycz8uW2luZGV4XTtcbiAgICAgICAgaWYgKCFwYXJhbVR5cGUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoXG4gICAgICAgICAgICBgTWlzc2luZyBBQkkgcGFyYW1ldGVyIHR5cGUgZm9yIGFyZ3VtZW50ICR7aW5kZXh9IGluICR7dGhpcy5fbW9kdWxlTmFtZX06OiR7dGhpcy5fZnVuY3Rpb25OYW1lfS4gYCArXG4gICAgICAgICAgICAgICdBQkkgcGFyYW1ldGVyIGNvdW50IG1pc21hdGNoLidcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRBcmd1bWVudEJ5QUJJKGFyZywgcGFyYW1UeXBlKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTdG9yZSByYXcgYXJndW1lbnRzIHRlbXBvcmFyaWx5IC0gdHJhbnNhY3Rpb24gd2lsbCBiZSByZS1wYXJzZWQgd2hlbiBBQkkgaXMgcHJvdmlkZWRcbiAgICAgIHRoaXMuX2Z1bmN0aW9uQXJndW1lbnRzID0gZW50cnlGdW5jdGlvbi5hcmdzLm1hcCgoYXJnOiBhbnkpID0+IGFyZyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIHRyYW5zYWN0aW9uIHBheWxvYWQgZGF0YVxuICAgKi9cbiAgcHJvdGVjdGVkIGdldFRyYW5zYWN0aW9uUGF5bG9hZERhdGEoKTogSW5wdXRHZW5lcmF0ZVRyYW5zYWN0aW9uUGF5bG9hZERhdGEge1xuICAgIGNvbnN0IGZ1bmN0aW9uTmFtZSA9IHRoaXMuZ2V0VmFsaWRhdGVkRnVsbEZ1bmN0aW9uTmFtZSgpO1xuXG4gICAgLy8gQXJndW1lbnRzIGFyZSBwcmUtcHJvY2Vzc2VkIGR1cmluZyBwYXJzaW5nIHBoYXNlXG4gICAgY29uc3QgcHJvY2Vzc2VkQXJndW1lbnRzID0gdGhpcy5fZnVuY3Rpb25Bcmd1bWVudHM7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZnVuY3Rpb246IGZ1bmN0aW9uTmFtZSxcbiAgICAgIHR5cGVBcmd1bWVudHM6IHRoaXMuX3R5cGVBcmd1bWVudHMsXG4gICAgICBmdW5jdGlvbkFyZ3VtZW50czogcHJvY2Vzc2VkQXJndW1lbnRzLFxuICAgICAgYWJpOiB0aGlzLl9lbnRyeUZ1bmN0aW9uQWJpLFxuICAgIH0gYXMgSW5wdXRHZW5lcmF0ZVRyYW5zYWN0aW9uUGF5bG9hZERhdGE7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCBhcmd1bWVudCBiYXNlZCBvbiBBQkkgdHlwZSBpbmZvcm1hdGlvblxuICAgKi9cbiAgcHJpdmF0ZSBjb252ZXJ0QXJndW1lbnRCeUFCSShhcmc6IGFueSwgcGFyYW1UeXBlOiBhbnkpOiBhbnkge1xuICAgIC8vIEhhbmRsZSBwcmltaXRpdmUgdmFsdWVzIChzdHJpbmcsIG51bWJlciwgYm9vbGVhbilcbiAgICBpZiAodHlwZW9mIGFyZyA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIGFyZyA9PT0gJ251bWJlcicgfHwgdHlwZW9mIGFyZyA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb252ZXJ0UHJpbWl0aXZlQXJndW1lbnQoYXJnLCBwYXJhbVR5cGUpO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBCQ1MtZW5jb2RlZCBkYXRhIHdpdGggJ2RhdGEnIHByb3BlcnR5XG4gICAgaWYgKGFyZyAmJiB0eXBlb2YgYXJnID09PSAnb2JqZWN0JyAmJiAnZGF0YScgaW4gYXJnICYmIGFyZy5kYXRhKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb252ZXJ0QmNzRGF0YUFyZ3VtZW50KGFyZywgcGFyYW1UeXBlKTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgbmVzdGVkIEJDUyBzdHJ1Y3R1cmVzIHdpdGggJ3ZhbHVlJyBwcm9wZXJ0eVxuICAgIGlmIChhcmcgJiYgdHlwZW9mIGFyZyA9PT0gJ29iamVjdCcgJiYgJ3ZhbHVlJyBpbiBhcmcgJiYgYXJnLnZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb252ZXJ0TmVzdGVkQmNzQXJndW1lbnQoYXJnLCBwYXJhbVR5cGUpO1xuICAgIH1cblxuICAgIC8vIEZvciBhbnl0aGluZyBlbHNlLCByZXR1cm4gYXMtaXNcbiAgICByZXR1cm4gYXJnO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgcHJpbWl0aXZlIGFyZ3VtZW50IHZhbHVlcyBiYXNlZCBvbiBwYXJhbWV0ZXIgdHlwZVxuICAgKi9cbiAgcHJpdmF0ZSBjb252ZXJ0UHJpbWl0aXZlQXJndW1lbnQoXG4gICAgYXJnOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuLFxuICAgIHBhcmFtVHlwZTogYW55XG4gICk6IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBBY2NvdW50QWRkcmVzcyB7XG4gICAgLy8gQWRkcmVzcyBjb252ZXJzaW9uIGZvciBoZXggc3RyaW5nc1xuICAgIGlmIChwYXJhbVR5cGUgaW5zdGFuY2VvZiBUeXBlVGFnQWRkcmVzcyAmJiB0eXBlb2YgYXJnID09PSAnc3RyaW5nJyAmJiBhcmcuc3RhcnRzV2l0aCgnMHgnKSkge1xuICAgICAgcmV0dXJuIHV0aWxzLnRyeVBhcnNlQWNjb3VudEFkZHJlc3MoYXJnKTtcbiAgICB9XG5cbiAgICAvLyBUeXBlIGNvbnZlcnNpb25zIGJhc2VkIG9uIHBhcmFtZXRlciB0eXBlXG4gICAgaWYgKHBhcmFtVHlwZSBpbnN0YW5jZW9mIFR5cGVUYWdCb29sKSByZXR1cm4gQm9vbGVhbihhcmcpO1xuXG4gICAgLy8gVXNlIHVuaWZpZWQgbnVtZXJpYyB0eXBlIGhhbmRsaW5nXG4gICAgaWYgKHRoaXMuaXNOdW1lcmljVHlwZShwYXJhbVR5cGUpKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb252ZXJ0UHJpbWl0aXZlTnVtZXJpY0FyZ3VtZW50KGFyZyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFyZztcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IHByaW1pdGl2ZSBudW1lcmljIGFyZ3VtZW50cyB0byBzdHJpbmdcbiAgICogLSBCaWcgbnVtYmVycyBicmVhayBKYXZhU2NyaXB0IChwcmVjaXNpb24gbG9zcylcbiAgICogLSBTdHJpbmcgc2FmZXIgZm9yIGxhcmdlIFU2NC9VMTI4L1UyNTYgdmFsdWVzXG4gICAqIC0gQXB0b3MgU0RLIGNvbnZlcnRzIHN0cmluZyB0byBjb3JyZWN0IHR5cGUgYXV0b21hdGljYWxseVxuICAgKi9cbiAgcHJpdmF0ZSBjb252ZXJ0UHJpbWl0aXZlTnVtZXJpY0FyZ3VtZW50KGFyZzogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbik6IHN0cmluZyB7XG4gICAgLy8gQWx3YXlzIHN0cmluZyAtIHNhZmVyIGZvciBiaWcgbnVtYmVyc1xuICAgIHJldHVybiBTdHJpbmcoYXJnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IEJDUyBkYXRhIGFyZ3VtZW50IHdpdGggJ2RhdGEnIHByb3BlcnR5XG4gICAqL1xuICBwcml2YXRlIGNvbnZlcnRCY3NEYXRhQXJndW1lbnQoYXJnOiBhbnksIHBhcmFtVHlwZTogYW55KTogc3RyaW5nIHwgQWNjb3VudEFkZHJlc3Mge1xuICAgIGNvbnN0IGJ5dGVzID0gQXJyYXkuZnJvbShhcmcuZGF0YSkgYXMgbnVtYmVyW107XG4gICAgY29uc3QgaGV4U3RyaW5nID0gdXRpbHMuYnl0ZXNUb0hleChieXRlcyk7XG5cbiAgICByZXR1cm4gcGFyYW1UeXBlIGluc3RhbmNlb2YgVHlwZVRhZ0FkZHJlc3MgPyB1dGlscy50cnlQYXJzZUFjY291bnRBZGRyZXNzKGhleFN0cmluZykgOiBoZXhTdHJpbmc7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCBuZXN0ZWQgQkNTIGFyZ3VtZW50IHdpdGggJ3ZhbHVlJyBwcm9wZXJ0eVxuICAgKi9cbiAgcHJpdmF0ZSBjb252ZXJ0TmVzdGVkQmNzQXJndW1lbnQoYXJnOiBhbnksIHBhcmFtVHlwZTogYW55KTogYW55IHtcbiAgICAvLyBDaGVjayBpZiBpbm5lciB2YWx1ZSBpcyBhIFVpbnQ4QXJyYXkgKGNvbW1vbiBmb3IgVTY0IGFyZ3VtZW50cylcbiAgICBpZiAoYXJnLnZhbHVlLnZhbHVlICYmIGFyZy52YWx1ZS52YWx1ZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHtcbiAgICAgIGNvbnN0IGJ5dGVzID0gQXJyYXkuZnJvbShhcmcudmFsdWUudmFsdWUpIGFzIG51bWJlcltdO1xuICAgICAgaWYgKHRoaXMuaXNOdW1lcmljVHlwZShwYXJhbVR5cGUpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnZlcnROdW1lcmljQXJndW1lbnQoYnl0ZXMsIHBhcmFtVHlwZSk7XG4gICAgICB9XG4gICAgICAvLyBGb3Igbm9uLW51bWVyaWMgdHlwZXMsIGNvbnZlcnQgdG8gaGV4IHN0cmluZ1xuICAgICAgcmV0dXJuIHV0aWxzLmJ5dGVzVG9IZXgoYnl0ZXMpO1xuICAgIH1cblxuICAgIC8vIFNpbXBsZSB2YWx1ZSB3cmFwcGVyIC0gZml4IHRoZSBidWcgaW4gb3JpZ2luYWwgaW1wbGVtZW50YXRpb25cbiAgICBpZiAodHlwZW9mIGFyZy52YWx1ZSAhPT0gJ29iamVjdCcgfHwgISgndmFsdWUnIGluIGFyZy52YWx1ZSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRBcmd1bWVudEJ5QUJJKGFyZy52YWx1ZSwgcGFyYW1UeXBlKTtcbiAgICB9XG5cbiAgICAvLyBEb3VibGUgbmVzdGVkIHN0cnVjdHVyZSB3aXRoIG51bWVyaWMga2V5c1xuICAgIGNvbnN0IGJ5dGVzID0gdGhpcy5leHRyYWN0Qnl0ZXNGcm9tQmNzT2JqZWN0KGFyZy52YWx1ZS52YWx1ZSk7XG4gICAgaWYgKGJ5dGVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGFyZztcblxuICAgIGxldCBleHRyYWN0ZWRWYWx1ZTogYW55O1xuXG4gICAgLy8gQ29udmVydCBieXRlcyBiYXNlZCBvbiBwYXJhbWV0ZXIgdHlwZSB1c2luZyB1bmlmaWVkIGFwcHJvYWNoXG4gICAgaWYgKHRoaXMuaXNOdW1lcmljVHlwZShwYXJhbVR5cGUpKSB7XG4gICAgICBleHRyYWN0ZWRWYWx1ZSA9IHRoaXMuY29udmVydE51bWVyaWNBcmd1bWVudChieXRlcywgcGFyYW1UeXBlKTtcbiAgICB9IGVsc2UgaWYgKHBhcmFtVHlwZSBpbnN0YW5jZW9mIFR5cGVUYWdBZGRyZXNzKSB7XG4gICAgICBleHRyYWN0ZWRWYWx1ZSA9IHV0aWxzLmJ5dGVzVG9IZXgoYnl0ZXMpO1xuICAgIH0gZWxzZSBpZiAocGFyYW1UeXBlIGluc3RhbmNlb2YgVHlwZVRhZ0Jvb2wpIHtcbiAgICAgIGV4dHJhY3RlZFZhbHVlID0gYnl0ZXNbMF0gPT09IDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIGV4dHJhY3RlZFZhbHVlID0gdXRpbHMuYnl0ZXNUb0hleChieXRlcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY29udmVydEFyZ3VtZW50QnlBQkkoZXh0cmFjdGVkVmFsdWUsIHBhcmFtVHlwZSk7XG4gIH1cblxuICAvKipcbiAgICogRXh0cmFjdCBieXRlcyBmcm9tIEJDUyBvYmplY3Qgd2l0aCBudW1lcmljIGtleXNcbiAgICovXG4gIHByaXZhdGUgZXh0cmFjdEJ5dGVzRnJvbUJjc09iamVjdChiY3NPYmplY3Q6IGFueSk6IG51bWJlcltdIHtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoYmNzT2JqZWN0KVxuICAgICAgLmZpbHRlcigoaykgPT4gIWlzTmFOKHBhcnNlSW50KGssIDEwKSkpXG4gICAgICAuc29ydCgoYSwgYikgPT4gcGFyc2VJbnQoYSwgMTApIC0gcGFyc2VJbnQoYiwgMTApKTtcblxuICAgIGlmIChrZXlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIFtdO1xuXG4gICAgcmV0dXJuIGtleXMubWFwKChrKSA9PiBiY3NPYmplY3Rba10pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjdXN0b20gdHJhbnNhY3Rpb24gcGFyYW1ldGVyc1xuICAgKi9cbiAgZ2V0Q3VzdG9tVHJhbnNhY3Rpb25QYXJhbXMoKTogQ3VzdG9tVHJhbnNhY3Rpb25QYXJhbXMge1xuICAgIHJldHVybiB7XG4gICAgICBtb2R1bGVOYW1lOiB0aGlzLl9tb2R1bGVOYW1lIHx8ICcnLFxuICAgICAgZnVuY3Rpb25OYW1lOiB0aGlzLl9mdW5jdGlvbk5hbWUgfHwgJycsXG4gICAgICB0eXBlQXJndW1lbnRzOiB0aGlzLl90eXBlQXJndW1lbnRzLFxuICAgICAgZnVuY3Rpb25Bcmd1bWVudHM6IHRoaXMuX2Z1bmN0aW9uQXJndW1lbnRzLFxuICAgICAgYWJpOiB0aGlzLl9lbnRyeUZ1bmN0aW9uQWJpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogT3ZlcnJpZGUgcmVjaXBpZW50IGdldHRlciBmb3IgY3VzdG9tIHRyYW5zYWN0aW9uc1xuICAgKi9cbiAgZ2V0IHJlY2lwaWVudCgpOiBhbnkge1xuICAgIGlmICh0aGlzLl9yZWNpcGllbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYWRkcmVzczogJycsXG4gICAgICAgIGFtb3VudDogJzAnLFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3JlY2lwaWVudHNbMF07XG4gIH1cblxuICAvKipcbiAgICogR2V0IHZhbGlkYXRlZCBmdWxsIGZ1bmN0aW9uIG5hbWVcbiAgICovXG4gIHByaXZhdGUgZ2V0VmFsaWRhdGVkRnVsbEZ1bmN0aW9uTmFtZSgpOiBgJHtzdHJpbmd9Ojoke3N0cmluZ306OiR7c3RyaW5nfWAge1xuICAgIGlmICghdGhpcy5fbW9kdWxlTmFtZSB8fCAhdGhpcy5fZnVuY3Rpb25OYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01vZHVsZSBuYW1lIGFuZCBmdW5jdGlvbiBuYW1lIG11c3QgYmUgc2V0IGJlZm9yZSBidWlsZGluZyB0cmFuc2FjdGlvbicpO1xuICAgIH1cblxuICAgIGNvbnN0IGZ1bGxOYW1lID0gYCR7dGhpcy5fbW9kdWxlTmFtZX06OiR7dGhpcy5fZnVuY3Rpb25OYW1lfWA7XG5cbiAgICAvLyBCYXNpYyB2YWxpZGF0aW9uXG4gICAgY29uc3QgZnVsbEZ1bmN0aW9uUGF0dGVybiA9XG4gICAgICAvXigweFthLWZBLUYwLTldezEsNjR9fFthLXpBLVpfXVthLXpBLVowLTlfXSopOjpbYS16QS1aX11bYS16QS1aMC05X10qOjpbYS16QS1aX11bYS16QS1aMC05X10qJC87XG4gICAgaWYgKCFmdWxsRnVuY3Rpb25QYXR0ZXJuLnRlc3QoZnVsbE5hbWUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZnVsbCBmdW5jdGlvbiBuYW1lIGZvcm1hdDogXCIke2Z1bGxOYW1lfVwiLiBFeHBlY3RlZCBmb3JtYXQ6IFwiYWRkcmVzczo6bW9kdWxlOjpmdW5jdGlvblwiYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1bGxOYW1lIGFzIGAke3N0cmluZ306OiR7c3RyaW5nfTo6JHtzdHJpbmd9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhIHBhcmFtZXRlciB0eXBlIGlzIGEgbnVtZXJpYyB0eXBlXG4gICAqL1xuICBwcml2YXRlIGlzTnVtZXJpY1R5cGUocGFyYW1UeXBlOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgcGFyYW1UeXBlIGluc3RhbmNlb2YgVHlwZVRhZ1U4IHx8XG4gICAgICBwYXJhbVR5cGUgaW5zdGFuY2VvZiBUeXBlVGFnVTE2IHx8XG4gICAgICBwYXJhbVR5cGUgaW5zdGFuY2VvZiBUeXBlVGFnVTMyIHx8XG4gICAgICBwYXJhbVR5cGUgaW5zdGFuY2VvZiBUeXBlVGFnVTY0IHx8XG4gICAgICBwYXJhbVR5cGUgaW5zdGFuY2VvZiBUeXBlVGFnVTEyOCB8fFxuICAgICAgcGFyYW1UeXBlIGluc3RhbmNlb2YgVHlwZVRhZ1UyNTZcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgYnl0ZSBhcnJheXMgdG8gc3RyaW5nIG51bWJlcnNcbiAgICogLSBTbWFsbCB0eXBlcyAoVTgvVTE2L1UzMik6IDEtNCBieXRlcywgcGFyc2UgbWFudWFsbHlcbiAgICogLSBMYXJnZSB0eXBlcyAoVTY0L1UxMjgvVTI1Nik6IDgrIGJ5dGVzLCB1c2UgZXhpc3RpbmcgdXRpbGl0eVxuICAgKiAtIEJvdGggcmV0dXJuIHN0cmluZyBmb3IgY29uc2lzdGVuY3lcbiAgICovXG4gIHByaXZhdGUgY29udmVydE51bWVyaWNBcmd1bWVudChieXRlczogbnVtYmVyW10sIHBhcmFtVHlwZTogYW55KTogc3RyaW5nIHtcbiAgICBpZiAocGFyYW1UeXBlIGluc3RhbmNlb2YgVHlwZVRhZ1U4IHx8IHBhcmFtVHlwZSBpbnN0YW5jZW9mIFR5cGVUYWdVMTYgfHwgcGFyYW1UeXBlIGluc3RhbmNlb2YgVHlwZVRhZ1UzMikge1xuICAgICAgLy8gU21hbGwgdHlwZXM6IHBhcnNlIGJ5dGVzIG1hbnVhbGx5ICgxLTQgYnl0ZXMpXG4gICAgICBsZXQgcmVzdWx0ID0gMDtcbiAgICAgIGZvciAobGV0IGkgPSBieXRlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICByZXN1bHQgPSByZXN1bHQgKiAyNTYgKyBieXRlc1tpXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1UeXBlIGluc3RhbmNlb2YgVHlwZVRhZ1U2NCB8fCBwYXJhbVR5cGUgaW5zdGFuY2VvZiBUeXBlVGFnVTEyOCB8fCBwYXJhbVR5cGUgaW5zdGFuY2VvZiBUeXBlVGFnVTI1Nikge1xuICAgICAgLy8gTGFyZ2UgdHlwZXM6IHVzZSBleGlzdGluZyBtZXRob2QgKG5lZWRzIDgrIGJ5dGVzKVxuICAgICAgcmV0dXJuIHV0aWxzLmdldEFtb3VudEZyb21QYXlsb2FkQXJncyhuZXcgVWludDhBcnJheShieXRlcykpO1xuICAgIH1cblxuICAgIC8vIFVua25vd24gdHlwZTogY29udmVydCB0byBoZXhcbiAgICByZXR1cm4gdXRpbHMuYnl0ZXNUb0hleChieXRlcyk7XG4gIH1cbn1cbiJdfQ==
@@ -1,4 +1,4 @@
1
- import { EntryFunctionArgument, FeePayerRawTransaction, SignedTransaction, TransactionPayload } from '@aptos-labs/ts-sdk';
1
+ import { AccountAddress, EntryFunctionArgument, FeePayerRawTransaction, SignedTransaction, TransactionPayload } from '@aptos-labs/ts-sdk';
2
2
  import { BaseUtils, TransactionRecipient, TransactionType } from '@bitgo-beta/sdk-core';
3
3
  import { RecipientsValidationResult } from './iface';
4
4
  export declare class Utils implements BaseUtils {
@@ -37,6 +37,14 @@ export declare class Utils implements BaseUtils {
37
37
  * It is set to 1 week from now.
38
38
  */
39
39
  getTxnExpirationTimestamp(): number;
40
+ /**
41
+ * Convert bytes array to hex string with 0x prefix
42
+ */
43
+ bytesToHex(bytes: number[]): string;
44
+ /**
45
+ * Try to convert hex string to AccountAddress, return original string if conversion fails
46
+ */
47
+ tryParseAccountAddress(hexStr: string): AccountAddress | string;
40
48
  }
41
49
  declare const utils: Utils;
42
50
  export default utils;
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,qBAAqB,EACrB,sBAAsB,EAEtB,iBAAiB,EACjB,kBAAkB,EAGnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,SAAS,EAIT,oBAAoB,EACpB,eAAe,EAChB,MAAM,sBAAsB,CAAC;AAgB9B,OAAO,EAAE,0BAA0B,EAAE,MAAM,SAAS,CAAC;AAErD,qBAAa,KAAM,YAAW,SAAS;IACrC,kBAAkB;IAClB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIxC,kBAAkB;IAClB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIrC,kBAAkB;IAClB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIvC,kBAAkB;IAClB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAItC,kBAAkB;IAClB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAI5C,kBAAkB;IAClB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI3C,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO;IAKlD,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAOlD,wCAAwC,CAAC,OAAO,EAAE,kBAAkB,GAAG,eAAe;IAwBtF,0BAA0B,CACxB,UAAU,EAAE,qBAAqB,EACjC,SAAS,EAAE,qBAAqB,GAC/B,0BAA0B;IA0B7B,eAAe,CAAC,UAAU,EAAE,qBAAqB,EAAE,SAAS,EAAE,qBAAqB,GAAG,oBAAoB,EAAE;IAW5G,4BAA4B,CAAC,cAAc,EAAE,MAAM,GAAG,iBAAiB;IAMvE,iCAAiC,CAAC,cAAc,EAAE,MAAM,GAAG,sBAAsB;IAMjF,+BAA+B,CAAC,eAAe,EAAE,UAAU,GAAG,MAAM,EAAE;IAMtE,oBAAoB,CAAC,eAAe,EAAE,UAAU,GAAG,UAAU,EAAE;IAM/D,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAIjD,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAInC;;;;OAIG;IACH,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAInC,wBAAwB,CAAC,SAAS,EAAE,UAAU,GAAG,MAAM;IAQvD;;;OAGG;IACH,yBAAyB,IAAI,MAAM;CAGpC;AAED,QAAA,MAAM,KAAK,OAAc,CAAC;AAE1B,eAAe,KAAK,CAAC"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EAId,qBAAqB,EACrB,sBAAsB,EAEtB,iBAAiB,EACjB,kBAAkB,EAGnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,SAAS,EAIT,oBAAoB,EACpB,eAAe,EAChB,MAAM,sBAAsB,CAAC;AAgB9B,OAAO,EAAE,0BAA0B,EAAE,MAAM,SAAS,CAAC;AAErD,qBAAa,KAAM,YAAW,SAAS;IACrC,kBAAkB;IAClB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIxC,kBAAkB;IAClB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIrC,kBAAkB;IAClB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIvC,kBAAkB;IAClB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAItC,kBAAkB;IAClB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAI5C,kBAAkB;IAClB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI3C,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO;IAKlD,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAOlD,wCAAwC,CAAC,OAAO,EAAE,kBAAkB,GAAG,eAAe;IAwBtF,0BAA0B,CACxB,UAAU,EAAE,qBAAqB,EACjC,SAAS,EAAE,qBAAqB,GAC/B,0BAA0B;IA0B7B,eAAe,CAAC,UAAU,EAAE,qBAAqB,EAAE,SAAS,EAAE,qBAAqB,GAAG,oBAAoB,EAAE;IAW5G,4BAA4B,CAAC,cAAc,EAAE,MAAM,GAAG,iBAAiB;IAMvE,iCAAiC,CAAC,cAAc,EAAE,MAAM,GAAG,sBAAsB;IAMjF,+BAA+B,CAAC,eAAe,EAAE,UAAU,GAAG,MAAM,EAAE;IAMtE,oBAAoB,CAAC,eAAe,EAAE,UAAU,GAAG,UAAU,EAAE;IAM/D,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAIjD,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAInC;;;;OAIG;IACH,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAInC,wBAAwB,CAAC,SAAS,EAAE,UAAU,GAAG,MAAM;IAQvD;;;OAGG;IACH,yBAAyB,IAAI,MAAM;IAInC;;OAEG;IACH,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM;IAInC;;OAEG;IACH,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc,GAAG,MAAM;CAOhE;AAED,QAAA,MAAM,KAAK,OAAc,CAAC;AAE1B,eAAe,KAAK,CAAC"}
@@ -148,8 +148,25 @@ class Utils {
148
148
  getTxnExpirationTimestamp() {
149
149
  return Math.floor(Date.now() / 1e3) + constants_1.SECONDS_PER_WEEK;
150
150
  }
151
+ /**
152
+ * Convert bytes array to hex string with 0x prefix
153
+ */
154
+ bytesToHex(bytes) {
155
+ return '0x' + bytes.map((b) => b.toString(16).padStart(2, '0')).join('');
156
+ }
157
+ /**
158
+ * Try to convert hex string to AccountAddress, return original string if conversion fails
159
+ */
160
+ tryParseAccountAddress(hexStr) {
161
+ try {
162
+ return ts_sdk_1.AccountAddress.fromString(hexStr);
163
+ }
164
+ catch {
165
+ return hexStr;
166
+ }
167
+ }
151
168
  }
152
169
  exports.Utils = Utils;
153
170
  const utils = new Utils();
154
171
  exports.default = utils;
155
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLCtDQVk0QjtBQUM1QixtREFPOEI7QUFDOUIsMkNBYXFCO0FBQ3JCLGdFQUFxQztBQUdyQyxNQUFhLEtBQUs7SUFDaEIsa0JBQWtCO0lBQ2xCLGNBQWMsQ0FBQyxPQUFlO1FBQzVCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsOEJBQWtCLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLGNBQWMsQ0FBQyxJQUFZO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsK0JBQW1CLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLGlCQUFpQixDQUFDLEdBQVc7UUFDM0IsT0FBTyxJQUFBLGtDQUF1QixFQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsZ0JBQWdCLENBQUMsR0FBVztRQUMxQixPQUFPLElBQUEsa0NBQXVCLEVBQUMsR0FBRyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixnQkFBZ0IsQ0FBQyxTQUFpQjtRQUNoQyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLGdDQUFvQixDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixvQkFBb0IsQ0FBQyxJQUFZO1FBQy9CLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUscUNBQXlCLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsVUFBVSxDQUFDLEtBQWEsRUFBRSxNQUFjO1FBQ3RDLE1BQU0sS0FBSyxHQUFHLElBQUksTUFBTSxDQUFDLHVCQUF1QixNQUFNLElBQUksQ0FBQyxDQUFDO1FBQzVELE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxL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QUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3BELENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsY0FBYyxDQUFDLEdBQVc7UUFDeEIsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsd0JBQXdCLENBQUMsU0FBcUI7UUFDNUMsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM1QyxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7UUFDaEQsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsRCxNQUFNLE1BQU0sR0FBRyxDQUFDLElBQUksSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDMUMsT0FBTyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVEOzs7T0FHRztJQUNILHlCQUF5QjtRQUN2QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLDRCQUFnQixDQUFDO0lBQ3pELENBQUM7Q0FDRjtBQW5LRCxzQkFtS0M7QUFFRCxNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO0FBRTFCLGtCQUFlLEtBQUssQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFjY291bnRBZGRyZXNzLFxuICBBdXRoZW50aWNhdGlvbktleSxcbiAgRGVzZXJpYWxpemVyLFxuICBFZDI1NTE5UHVibGljS2V5LFxuICBFbnRyeUZ1bmN0aW9uQXJndW1lbnQsXG4gIEZlZVBheWVyUmF3VHJhbnNhY3Rpb24sXG4gIEhleCxcbiAgU2lnbmVkVHJhbnNhY3Rpb24sXG4gIFRyYW5zYWN0aW9uUGF5bG9hZCxcbiAgVHJhbnNhY3Rpb25QYXlsb2FkRW50cnlGdW5jdGlvbixcbiAgVTY0LFxufSBmcm9tICdAYXB0b3MtbGFicy90cy1zZGsnO1xuaW1wb3J0IHtcbiAgQmFzZVV0aWxzLFxuICBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcixcbiAgaXNWYWxpZEVkMjU1MTlQdWJsaWNLZXksXG4gIGlzVmFsaWRFZDI1NTE5U2VjcmV0S2V5LFxuICBUcmFuc2FjdGlvblJlY2lwaWVudCxcbiAgVHJhbnNhY3Rpb25UeXBlLFxufSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQge1xuICBBRERSRVNTX0JZVEVTX0xFTkdUSCxcbiAgQU1PVU5UX0JZVEVTX0xFTkdUSCxcbiAgQVBUX0FERFJFU1NfTEVOR1RILFxuICBBUFRfQkxPQ0tfSURfTEVOR1RILFxuICBBUFRfU0lHTkFUVVJFX0xFTkdUSCxcbiAgQVBUX1RSQU5TQUNUSU9OX0lEX0xFTkdUSCxcbiAgQ09JTl9CQVRDSF9UUkFOU0ZFUl9GVU5DVElPTixcbiAgQ09JTl9UUkFOU0ZFUl9GVU5DVElPTixcbiAgRElHSVRBTF9BU1NFVF9UUkFOU0ZFUl9GVU5DVElPTixcbiAgRlVOR0lCTEVfQVNTRVRfQkFUQ0hfVFJBTlNGRVJfRlVOQ1RJT04sXG4gIEZVTkdJQkxFX0FTU0VUX1RSQU5TRkVSX0ZVTkNUSU9OLFxuICBTRUNPTkRTX1BFUl9XRUVLLFxufSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgQmlnTnVtYmVyIGZyb20gJ2JpZ251bWJlci5qcyc7XG5pbXBvcnQgeyBSZWNpcGllbnRzVmFsaWRhdGlvblJlc3VsdCB9IGZyb20gJy4vaWZhY2UnO1xuXG5leHBvcnQgY2xhc3MgVXRpbHMgaW1wbGVtZW50cyBCYXNlVXRpbHMge1xuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgaXNWYWxpZEFkZHJlc3MoYWRkcmVzczogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZEhleChhZGRyZXNzLCBBUFRfQUREUkVTU19MRU5HVEgpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGlzVmFsaWRCbG9ja0lkKGhhc2g6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWRIZXgoaGFzaCwgQVBUX0JMT0NLX0lEX0xFTkdUSCk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgaXNWYWxpZFByaXZhdGVLZXkoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNWYWxpZEVkMjU1MTlTZWNyZXRLZXkoa2V5KTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBpc1ZhbGlkUHVibGljS2V5KGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzVmFsaWRFZDI1NTE5UHVibGljS2V5KGtleSk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgaXNWYWxpZFNpZ25hdHVyZShzaWduYXR1cmU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWRIZXgoc2lnbmF0dXJlLCBBUFRfU0lHTkFUVVJFX0xFTkdUSCk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgaXNWYWxpZFRyYW5zYWN0aW9uSWQodHhJZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZEhleCh0eElkLCBBUFRfVFJBTlNBQ1RJT05fSURfTEVOR1RIKTtcbiAgfVxuXG4gIGlzVmFsaWRIZXgodmFsdWU6IHN0cmluZywgbGVuZ3RoOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAoYF4oMHh8MFgpW2EtZkEtRjAtOV17JHtsZW5ndGh9fSRgKTtcbiAgICByZXR1cm4gcmVnZXgudGVzdCh2YWx1ZSk7XG4gIH1cblxuICBnZXRBZGRyZXNzRnJvbVB1YmxpY0tleShwdWJsaWNLZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgYXB0b3NQdWJsaWNLZXkgPSBuZXcgRWQyNTUxOVB1YmxpY0tleShCdWZmZXIuZnJvbShwdWJsaWNLZXksICdoZXgnKSk7XG4gICAgY29uc3QgYXV0aEtleSA9IEF1dGhlbnRpY2F0aW9uS2V5LmZyb21QdWJsaWNLZXkoeyBwdWJsaWNLZXk6IGFwdG9zUHVibGljS2V5IH0pO1xuICAgIGNvbnN0IGFjY291bnRBZGRyZXNzID0gYXV0aEtleS5kZXJpdmVkQWRkcmVzcygpO1xuICAgIHJldHVybiBhY2NvdW50QWRkcmVzcy50b1N0cmluZygpO1xuICB9XG5cbiAgZ2V0VHJhbnNhY3Rpb25UeXBlRnJvbVRyYW5zYWN0aW9uUGF5bG9hZChwYXlsb2FkOiBUcmFuc2FjdGlvblBheWxvYWQpOiBUcmFuc2FjdGlvblR5cGUge1xuICAgIGlmICghKHBheWxvYWQgaW5zdGFuY2VvZiBUcmFuc2FjdGlvblBheWxvYWRFbnRyeUZ1bmN0aW9uKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIFBheWxvYWQ6IEV4cGVjdGVkIFRyYW5zYWN0aW9uUGF5bG9hZEVudHJ5RnVuY3Rpb24nKTtcbiAgICB9XG4gICAgY29uc3QgZW50cnlGdW5jdGlvbiA9IHBheWxvYWQuZW50cnlGdW5jdGlvbjtcbiAgICBjb25zdCBtb2R1bGVBZGRyZXNzID0gZW50cnlGdW5jdGlvbi5tb2R1bGVfbmFtZS5hZGRyZXNzLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgbW9kdWxlSWRlbnRpZmllciA9IGVudHJ5RnVuY3Rpb24ubW9kdWxlX25hbWUubmFtZS5pZGVudGlmaWVyO1xuICAgIGNvbnN0IGZ1bmN0aW9uSWRlbnRpZmllciA9IGVudHJ5RnVuY3Rpb24uZnVuY3Rpb25fbmFtZS5pZGVudGlmaWVyO1xuICAgIGNvbnN0IHVuaXF1ZUlkZW50aWZpZXIgPSBgJHttb2R1bGVBZGRyZXNzfTo6JHttb2R1bGVJZGVudGlmaWVyfTo6JHtmdW5jdGlvbklkZW50aWZpZXJ9YDtcbiAgICBzd2l0Y2ggKHVuaXF1ZUlkZW50aWZpZXIpIHtcbiAgICAgIGNhc2UgQ09JTl9UUkFOU0ZFUl9GVU5DVElPTjpcbiAgICAgIGNhc2UgQ09JTl9CQVRDSF9UUkFOU0ZFUl9GVU5DVElPTjpcbiAgICAgICAgcmV0dXJuIFRyYW5zYWN0aW9uVHlwZS5TZW5kO1xuICAgICAgY2FzZSBGVU5HSUJMRV9BU1NFVF9UUkFOU0ZFUl9GVU5DVElPTjpcbiAgICAgIGNhc2UgRlVOR0lCTEVfQVNTRVRfQkFUQ0hfVFJBTlNGRVJfRlVOQ1RJT046XG4gICAgICAgIHJldHVybiBUcmFuc2FjdGlvblR5cGUuU2VuZFRva2VuO1xuICAgICAgY2FzZSBESUdJVEFMX0FTU0VUX1RSQU5TRkVSX0ZVTkNUSU9OOlxuICAgICAgICByZXR1cm4gVHJhbnNhY3Rpb25UeXBlLlNlbmRORlQ7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICAvLyBGb3IgYW55IG90aGVyIGZ1bmN0aW9uIGNhbGxzLCB0cmVhdCBhcyBhIGN1c3RvbSB0cmFuc2FjdGlvblxuICAgICAgICByZXR1cm4gVHJhbnNhY3Rpb25UeXBlLkN1c3RvbVR4O1xuICAgIH1cbiAgfVxuXG4gIGZldGNoQW5kVmFsaWRhdGVSZWNpcGllbnRzKFxuICAgIGFkZHJlc3NBcmc6IEVudHJ5RnVuY3Rpb25Bcmd1bWVudCxcbiAgICBhbW91bnRBcmc6IEVudHJ5RnVuY3Rpb25Bcmd1bWVudFxuICApOiBSZWNpcGllbnRzVmFsaWRhdGlvblJlc3VsdCB7XG4gICAgY29uc3QgYWRkcmVzc0J5dGVzID0gYWRkcmVzc0FyZy5iY3NUb0J5dGVzKCk7XG4gICAgY29uc3QgYW1vdW50Qnl0ZXMgPSBhbW91bnRBcmcuYmNzVG9CeXRlcygpO1xuICAgIGxldCBkZXNlcmlhbGl6ZWRBZGRyZXNzZXM6IHN0cmluZ1tdO1xuICAgIGxldCBkZXNlcmlhbGl6ZWRBbW91bnRzOiBVaW50OEFycmF5PEFycmF5QnVmZmVyPltdO1xuICAgIGlmIChhZGRyZXNzQnl0ZXMubGVuZ3RoID4gQUREUkVTU19CWVRFU19MRU5HVEggfHwgYW1vdW50Qnl0ZXMubGVuZ3RoID4gQU1PVU5UX0JZVEVTX0xFTkdUSCkge1xuICAgICAgZGVzZXJpYWxpemVkQWRkcmVzc2VzID0gdXRpbHMuZGVzZXJpYWxpemVBY2NvdW50QWRkcmVzc1ZlY3RvcihhZGRyZXNzQnl0ZXMpO1xuICAgICAgZGVzZXJpYWxpemVkQW1vdW50cyA9IHV0aWxzLmRlc2VyaWFsaXplVTY0VmVjdG9yKGFtb3VudEJ5dGVzKTtcbiAgICAgIGlmIChkZXNlcmlhbGl6ZWRBZGRyZXNzZXMubGVuZ3RoICE9PSBkZXNlcmlhbGl6ZWRBbW91bnRzLmxlbmd0aCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdpbnZhbGlkIHBheWxvYWQgZW50cnkgZnVuY3Rpb24gYXJndW1lbnRzIDogYWRkcmVzc2VzIGFuZCBhbW91bnRzIGxlbmd0aCBtaXNtYXRjaCcpO1xuICAgICAgICByZXR1cm4geyByZWNpcGllbnRzOiB7IGRlc2VyaWFsaXplZEFkZHJlc3NlczogW10sIGRlc2VyaWFsaXplZEFtb3VudHM6IFtdIH0sIGlzVmFsaWQ6IGZhbHNlIH07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlc2VyaWFsaXplZEFkZHJlc3NlcyA9IFthZGRyZXNzQXJnLnRvU3RyaW5nKCldO1xuICAgICAgZGVzZXJpYWxpemVkQW1vdW50cyA9IFthbW91bnRCeXRlc107XG4gICAgfVxuICAgIGNvbnN0IGFsbEFkZHJlc3Nlc1ZhbGlkID0gZGVzZXJpYWxpemVkQWRkcmVzc2VzLmV2ZXJ5KChhZGRyZXNzKSA9PiB1dGlscy5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzLnRvU3RyaW5nKCkpKTtcbiAgICBjb25zdCBhbGxBbW91bnRzVmFsaWQgPSBkZXNlcmlhbGl6ZWRBbW91bnRzLmV2ZXJ5KChhbW91bnQpID0+XG4gICAgICBuZXcgQmlnTnVtYmVyKHV0aWxzLmdldEFtb3VudEZyb21QYXlsb2FkQXJncyhhbW91bnQpKS5pc0dyZWF0ZXJUaGFuKDApXG4gICAgKTtcbiAgICByZXR1cm4ge1xuICAgICAgcmVjaXBpZW50czogeyBkZXNlcmlhbGl6ZWRBZGRyZXNzZXMsIGRlc2VyaWFsaXplZEFtb3VudHMgfSxcbiAgICAgIGlzVmFsaWQ6IGFsbEFkZHJlc3Nlc1ZhbGlkICYmIGFsbEFtb3VudHNWYWxpZCxcbiAgICB9O1xuICB9XG5cbiAgcGFyc2VSZWNpcGllbnRzKGFkZHJlc3NBcmc6IEVudHJ5RnVuY3Rpb25Bcmd1bWVudCwgYW1vdW50QXJnOiBFbnRyeUZ1bmN0aW9uQXJndW1lbnQpOiBUcmFuc2FjdGlvblJlY2lwaWVudFtdIHtcbiAgICBjb25zdCB7IHJlY2lwaWVudHMsIGlzVmFsaWQgfSA9IHV0aWxzLmZldGNoQW5kVmFsaWRhdGVSZWNpcGllbnRzKGFkZHJlc3NBcmcsIGFtb3VudEFyZyk7XG4gICAgaWYgKCFpc1ZhbGlkKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgdHJhbnNhY3Rpb24gcmVjaXBpZW50cycpO1xuICAgIH1cbiAgICByZXR1cm4gcmVjaXBpZW50cy5kZXNlcmlhbGl6ZWRBZGRyZXNzZXMubWFwKChhZGRyZXNzLCBpbmRleCkgPT4gKHtcbiAgICAgIGFkZHJlc3MsXG4gICAgICBhbW91bnQ6IHV0aWxzLmdldEFtb3VudEZyb21QYXlsb2FkQXJncyhyZWNpcGllbnRzLmRlc2VyaWFsaXplZEFtb3VudHNbaW5kZXhdKSxcbiAgICB9KSkgYXMgVHJhbnNhY3Rpb25SZWNpcGllbnRbXTtcbiAgfVxuXG4gIGRlc2VyaWFsaXplU2lnbmVkVHJhbnNhY3Rpb24ocmF3VHJhbnNhY3Rpb246IHN0cmluZyk6IFNpZ25lZFRyYW5zYWN0aW9uIHtcbiAgICBjb25zdCB0eG5CeXRlcyA9IEhleC5mcm9tSGV4U3RyaW5nKHJhd1RyYW5zYWN0aW9uKS50b1VpbnQ4QXJyYXkoKTtcbiAgICBjb25zdCBkZXNlcmlhbGl6ZXIgPSBuZXcgRGVzZXJpYWxpemVyKHR4bkJ5dGVzKTtcbiAgICByZXR1cm4gZGVzZXJpYWxpemVyLmRlc2VyaWFsaXplKFNpZ25lZFRyYW5zYWN0aW9uKTtcbiAgfVxuXG4gIGRlc2VyaWFsaXplRmVlUGF5ZXJSYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbjogc3RyaW5nKTogRmVlUGF5ZXJSYXdUcmFuc2FjdGlvbiB7XG4gICAgY29uc3QgdHhuQnl0ZXMgPSBIZXguZnJvbUhleFN0cmluZyhyYXdUcmFuc2FjdGlvbikudG9VaW50OEFycmF5KCk7XG4gICAgY29uc3QgZGVzZXJpYWxpemVyID0gbmV3IERlc2VyaWFsaXplcih0eG5CeXRlcyk7XG4gICAgcmV0dXJuIEZlZVBheWVyUmF3VHJhbnNhY3Rpb24ubG9hZChkZXNlcmlhbGl6ZXIpO1xuICB9XG5cbiAgZGVzZXJpYWxpemVBY2NvdW50QWRkcmVzc1ZlY3RvcihzZXJpYWxpemVkQnl0ZXM6IFVpbnQ4QXJyYXkpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgZGVzZXJpYWxpemVyID0gbmV3IERlc2VyaWFsaXplcihzZXJpYWxpemVkQnl0ZXMpO1xuICAgIGNvbnN0IGRlc2VyaWFsaXplZEFkZHJlc3NlcyA9IGRlc2VyaWFsaXplci5kZXNlcmlhbGl6ZVZlY3RvcihBY2NvdW50QWRkcmVzcyk7XG4gICAgcmV0dXJuIGRlc2VyaWFsaXplZEFkZHJlc3Nlcy5tYXAoKGFkZHJlc3MpID0+IGFkZHJlc3MudG9TdHJpbmcoKSk7XG4gIH1cblxuICBkZXNlcmlhbGl6ZVU2NFZlY3RvcihzZXJpYWxpemVkQnl0ZXM6IFVpbnQ4QXJyYXkpOiBVaW50OEFycmF5W10ge1xuICAgIGNvbnN0IGRlc2VyaWFsaXplciA9IG5ldyBEZXNlcmlhbGl6ZXIoc2VyaWFsaXplZEJ5dGVzKTtcbiAgICBjb25zdCBkZXNlcmlhbGl6ZWRBbW91bnRzID0gZGVzZXJpYWxpemVyLmRlc2VyaWFsaXplVmVjdG9yKFU2NCk7XG4gICAgcmV0dXJuIGRlc2VyaWFsaXplZEFtb3VudHMubWFwKChhbW91bnQpID0+IGFtb3VudC5iY3NUb0J5dGVzKCkpO1xuICB9XG5cbiAgZ2V0QnVmZmVyRnJvbUhleFN0cmluZyhoZXhTdHJpbmc6IHN0cmluZyk6IEJ1ZmZlciB7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKEhleC5mcm9tSGV4U3RyaW5nKGhleFN0cmluZykudG9VaW50OEFycmF5KCkpO1xuICB9XG5cbiAgY2FzdFRvTnVtYmVyKHZhbHVlOiBiaWdpbnQpOiBudW1iZXIge1xuICAgIHJldHVybiBuZXcgQmlnTnVtYmVyKHZhbHVlLnRvU3RyaW5nKCkpLnRvTnVtYmVyKCk7XG4gIH1cblxuICAvKipcbiAgICogU3RyaXAgaGV4IHByZWZpeFxuICAgKiBAcGFyYW0gc3RyXG4gICAqIEByZXR1cm5zIGhleCBzdHJpbmcgd2l0aG91dCAweCBwcmVmaXhcbiAgICovXG4gIHN0cmlwSGV4UHJlZml4KHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoL14weC9pLCAnJyk7XG4gIH1cblxuICBnZXRBbW91bnRGcm9tUGF5bG9hZEFyZ3MoYW1vdW50QXJnOiBVaW50OEFycmF5KTogc3RyaW5nIHtcbiAgICBjb25zdCBhbW91bnRCdWZmZXIgPSBCdWZmZXIuZnJvbShhbW91bnRBcmcpO1xuICAgIGNvbnN0IGxvdyA9IEJpZ0ludChhbW91bnRCdWZmZXIucmVhZFVpbnQzMkxFKCkpO1xuICAgIGNvbnN0IGhpZ2ggPSBCaWdJbnQoYW1vdW50QnVmZmVyLnJlYWRVaW50MzJMRSg0KSk7XG4gICAgY29uc3QgYW1vdW50ID0gKGhpZ2ggPDwgQmlnSW50KDMyKSkgKyBsb3c7XG4gICAgcmV0dXJuIGFtb3VudC50b1N0cmluZygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIEFwdG9zIHRyYW5zYWN0aW9uIGV4cGlyYXRpb24gdGltZXN0YW1wIGluIHNlY29uZHMuXG4gICAqIEl0IGlzIHNldCB0byAxIHdlZWsgZnJvbSBub3cuXG4gICAqL1xuICBnZXRUeG5FeHBpcmF0aW9uVGltZXN0YW1wKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIE1hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDFlMykgKyBTRUNPTkRTX1BFUl9XRUVLO1xuICB9XG59XG5cbmNvbnN0IHV0aWxzID0gbmV3IFV0aWxzKCk7XG5cbmV4cG9ydCBkZWZhdWx0IHV0aWxzO1xuIl19
172
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLCtDQVk0QjtBQUM1QixtREFPOEI7QUFDOUIsMkNBYXFCO0FBQ3JCLGdFQUFxQztBQUdyQyxNQUFhLEtBQUs7SUFDaEIsa0JBQWtCO0lBQ2xCLGNBQWMsQ0FBQyxPQUFlO1FBQzVCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsOEJBQWtCLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLGNBQWMsQ0FBQyxJQUFZO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsK0JBQW1CLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLGlCQUFpQixDQUFDLEdBQVc7UUFDM0IsT0FBTyxJQUFBLGtDQUF1QixFQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsZ0JBQWdCLENBQUMsR0FBVztRQUMxQixPQUFPLElBQUEsa0NBQXVCLEVBQUMsR0FBRyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixnQkFBZ0IsQ0FBQyxTQUFpQjtRQUNoQyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLGdDQUFvQixDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixvQkFBb0IsQ0FBQyxJQUFZO1FBQy9CLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUscUNBQXlCLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsVUFBVSxDQUFDLEtBQWEsRUFBRSxNQUFjO1FBQ3RDLE1BQU0sS0FBSyxHQUFHLElBQUksTUFBTSxDQUFDLHVCQUF1QixNQUFNLElBQUksQ0FBQyxDQUFDO1FBQzVELE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxL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LE1BQU0sQ0FBQztZQUNQLE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUFyTEQsc0JBcUxDO0FBRUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUUxQixrQkFBZSxLQUFLLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBY2NvdW50QWRkcmVzcyxcbiAgQXV0aGVudGljYXRpb25LZXksXG4gIERlc2VyaWFsaXplcixcbiAgRWQyNTUxOVB1YmxpY0tleSxcbiAgRW50cnlGdW5jdGlvbkFyZ3VtZW50LFxuICBGZWVQYXllclJhd1RyYW5zYWN0aW9uLFxuICBIZXgsXG4gIFNpZ25lZFRyYW5zYWN0aW9uLFxuICBUcmFuc2FjdGlvblBheWxvYWQsXG4gIFRyYW5zYWN0aW9uUGF5bG9hZEVudHJ5RnVuY3Rpb24sXG4gIFU2NCxcbn0gZnJvbSAnQGFwdG9zLWxhYnMvdHMtc2RrJztcbmltcG9ydCB7XG4gIEJhc2VVdGlscyxcbiAgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IsXG4gIGlzVmFsaWRFZDI1NTE5UHVibGljS2V5LFxuICBpc1ZhbGlkRWQyNTUxOVNlY3JldEtleSxcbiAgVHJhbnNhY3Rpb25SZWNpcGllbnQsXG4gIFRyYW5zYWN0aW9uVHlwZSxcbn0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHtcbiAgQUREUkVTU19CWVRFU19MRU5HVEgsXG4gIEFNT1VOVF9CWVRFU19MRU5HVEgsXG4gIEFQVF9BRERSRVNTX0xFTkdUSCxcbiAgQVBUX0JMT0NLX0lEX0xFTkdUSCxcbiAgQVBUX1NJR05BVFVSRV9MRU5HVEgsXG4gIEFQVF9UUkFOU0FDVElPTl9JRF9MRU5HVEgsXG4gIENPSU5fQkFUQ0hfVFJBTlNGRVJfRlVOQ1RJT04sXG4gIENPSU5fVFJBTlNGRVJfRlVOQ1RJT04sXG4gIERJR0lUQUxfQVNTRVRfVFJBTlNGRVJfRlVOQ1RJT04sXG4gIEZVTkdJQkxFX0FTU0VUX0JBVENIX1RSQU5TRkVSX0ZVTkNUSU9OLFxuICBGVU5HSUJMRV9BU1NFVF9UUkFOU0ZFUl9GVU5DVElPTixcbiAgU0VDT05EU19QRVJfV0VFSyxcbn0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IEJpZ051bWJlciBmcm9tICdiaWdudW1iZXIuanMnO1xuaW1wb3J0IHsgUmVjaXBpZW50c1ZhbGlkYXRpb25SZXN1bHQgfSBmcm9tICcuL2lmYWNlJztcblxuZXhwb3J0IGNsYXNzIFV0aWxzIGltcGxlbWVudHMgQmFzZVV0aWxzIHtcbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGlzVmFsaWRBZGRyZXNzKGFkZHJlc3M6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWRIZXgoYWRkcmVzcywgQVBUX0FERFJFU1NfTEVOR1RIKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBpc1ZhbGlkQmxvY2tJZChoYXNoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkSGV4KGhhc2gsIEFQVF9CTE9DS19JRF9MRU5HVEgpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGlzVmFsaWRQcml2YXRlS2V5KGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzVmFsaWRFZDI1NTE5U2VjcmV0S2V5KGtleSk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgaXNWYWxpZFB1YmxpY0tleShrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc1ZhbGlkRWQyNTUxOVB1YmxpY0tleShrZXkpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGlzVmFsaWRTaWduYXR1cmUoc2lnbmF0dXJlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkSGV4KHNpZ25hdHVyZSwgQVBUX1NJR05BVFVSRV9MRU5HVEgpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGlzVmFsaWRUcmFuc2FjdGlvbklkKHR4SWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWRIZXgodHhJZCwgQVBUX1RSQU5TQUNUSU9OX0lEX0xFTkdUSCk7XG4gIH1cblxuICBpc1ZhbGlkSGV4KHZhbHVlOiBzdHJpbmcsIGxlbmd0aDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKGBeKDB4fDBYKVthLWZBLUYwLTldeyR7bGVuZ3RofX0kYCk7XG4gICAgcmV0dXJuIHJlZ2V4LnRlc3QodmFsdWUpO1xuICB9XG5cbiAgZ2V0QWRkcmVzc0Zyb21QdWJsaWNLZXkocHVibGljS2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGFwdG9zUHVibGljS2V5ID0gbmV3IEVkMjU1MTlQdWJsaWNLZXkoQnVmZmVyLmZyb20ocHVibGljS2V5LCAnaGV4JykpO1xuICAgIGNvbnN0IGF1dGhLZXkgPSBBdXRoZW50aWNhdGlvbktleS5mcm9tUHVibGljS2V5KHsgcHVibGljS2V5OiBhcHRvc1B1YmxpY0tleSB9KTtcbiAgICBjb25zdCBhY2NvdW50QWRkcmVzcyA9IGF1dGhLZXkuZGVyaXZlZEFkZHJlc3MoKTtcbiAgICByZXR1cm4gYWNjb3VudEFkZHJlc3MudG9TdHJpbmcoKTtcbiAgfVxuXG4gIGdldFRyYW5zYWN0aW9uVHlwZUZyb21UcmFuc2FjdGlvblBheWxvYWQocGF5bG9hZDogVHJhbnNhY3Rpb25QYXlsb2FkKTogVHJhbnNhY3Rpb25UeXBlIHtcbiAgICBpZiAoIShwYXlsb2FkIGluc3RhbmNlb2YgVHJhbnNhY3Rpb25QYXlsb2FkRW50cnlGdW5jdGlvbikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBQYXlsb2FkOiBFeHBlY3RlZCBUcmFuc2FjdGlvblBheWxvYWRFbnRyeUZ1bmN0aW9uJyk7XG4gICAgfVxuICAgIGNvbnN0IGVudHJ5RnVuY3Rpb24gPSBwYXlsb2FkLmVudHJ5RnVuY3Rpb247XG4gICAgY29uc3QgbW9kdWxlQWRkcmVzcyA9IGVudHJ5RnVuY3Rpb24ubW9kdWxlX25hbWUuYWRkcmVzcy50b1N0cmluZygpO1xuICAgIGNvbnN0IG1vZHVsZUlkZW50aWZpZXIgPSBlbnRyeUZ1bmN0aW9uLm1vZHVsZV9uYW1lLm5hbWUuaWRlbnRpZmllcjtcbiAgICBjb25zdCBmdW5jdGlvbklkZW50aWZpZXIgPSBlbnRyeUZ1bmN0aW9uLmZ1bmN0aW9uX25hbWUuaWRlbnRpZmllcjtcbiAgICBjb25zdCB1bmlxdWVJZGVudGlmaWVyID0gYCR7bW9kdWxlQWRkcmVzc306OiR7bW9kdWxlSWRlbnRpZmllcn06OiR7ZnVuY3Rpb25JZGVudGlmaWVyfWA7XG4gICAgc3dpdGNoICh1bmlxdWVJZGVudGlmaWVyKSB7XG4gICAgICBjYXNlIENPSU5fVFJBTlNGRVJfRlVOQ1RJT046XG4gICAgICBjYXNlIENPSU5fQkFUQ0hfVFJBTlNGRVJfRlVOQ1RJT046XG4gICAgICAgIHJldHVybiBUcmFuc2FjdGlvblR5cGUuU2VuZDtcbiAgICAgIGNhc2UgRlVOR0lCTEVfQVNTRVRfVFJBTlNGRVJfRlVOQ1RJT046XG4gICAgICBjYXNlIEZVTkdJQkxFX0FTU0VUX0JBVENIX1RSQU5TRkVSX0ZVTkNUSU9OOlxuICAgICAgICByZXR1cm4gVHJhbnNhY3Rpb25UeXBlLlNlbmRUb2tlbjtcbiAgICAgIGNhc2UgRElHSVRBTF9BU1NFVF9UUkFOU0ZFUl9GVU5DVElPTjpcbiAgICAgICAgcmV0dXJuIFRyYW5zYWN0aW9uVHlwZS5TZW5kTkZUO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgLy8gRm9yIGFueSBvdGhlciBmdW5jdGlvbiBjYWxscywgdHJlYXQgYXMgYSBjdXN0b20gdHJhbnNhY3Rpb25cbiAgICAgICAgcmV0dXJuIFRyYW5zYWN0aW9uVHlwZS5DdXN0b21UeDtcbiAgICB9XG4gIH1cblxuICBmZXRjaEFuZFZhbGlkYXRlUmVjaXBpZW50cyhcbiAgICBhZGRyZXNzQXJnOiBFbnRyeUZ1bmN0aW9uQXJndW1lbnQsXG4gICAgYW1vdW50QXJnOiBFbnRyeUZ1bmN0aW9uQXJndW1lbnRcbiAgKTogUmVjaXBpZW50c1ZhbGlkYXRpb25SZXN1bHQge1xuICAgIGNvbnN0IGFkZHJlc3NCeXRlcyA9IGFkZHJlc3NBcmcuYmNzVG9CeXRlcygpO1xuICAgIGNvbnN0IGFtb3VudEJ5dGVzID0gYW1vdW50QXJnLmJjc1RvQnl0ZXMoKTtcbiAgICBsZXQgZGVzZXJpYWxpemVkQWRkcmVzc2VzOiBzdHJpbmdbXTtcbiAgICBsZXQgZGVzZXJpYWxpemVkQW1vdW50czogVWludDhBcnJheTxBcnJheUJ1ZmZlcj5bXTtcbiAgICBpZiAoYWRkcmVzc0J5dGVzLmxlbmd0aCA+IEFERFJFU1NfQllURVNfTEVOR1RIIHx8IGFtb3VudEJ5dGVzLmxlbmd0aCA+IEFNT1VOVF9CWVRFU19MRU5HVEgpIHtcbiAgICAgIGRlc2VyaWFsaXplZEFkZHJlc3NlcyA9IHV0aWxzLmRlc2VyaWFsaXplQWNjb3VudEFkZHJlc3NWZWN0b3IoYWRkcmVzc0J5dGVzKTtcbiAgICAgIGRlc2VyaWFsaXplZEFtb3VudHMgPSB1dGlscy5kZXNlcmlhbGl6ZVU2NFZlY3RvcihhbW91bnRCeXRlcyk7XG4gICAgICBpZiAoZGVzZXJpYWxpemVkQWRkcmVzc2VzLmxlbmd0aCAhPT0gZGVzZXJpYWxpemVkQW1vdW50cy5sZW5ndGgpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignaW52YWxpZCBwYXlsb2FkIGVudHJ5IGZ1bmN0aW9uIGFyZ3VtZW50cyA6IGFkZHJlc3NlcyBhbmQgYW1vdW50cyBsZW5ndGggbWlzbWF0Y2gnKTtcbiAgICAgICAgcmV0dXJuIHsgcmVjaXBpZW50czogeyBkZXNlcmlhbGl6ZWRBZGRyZXNzZXM6IFtdLCBkZXNlcmlhbGl6ZWRBbW91bnRzOiBbXSB9LCBpc1ZhbGlkOiBmYWxzZSB9O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBkZXNlcmlhbGl6ZWRBZGRyZXNzZXMgPSBbYWRkcmVzc0FyZy50b1N0cmluZygpXTtcbiAgICAgIGRlc2VyaWFsaXplZEFtb3VudHMgPSBbYW1vdW50Qnl0ZXNdO1xuICAgIH1cbiAgICBjb25zdCBhbGxBZGRyZXNzZXNWYWxpZCA9IGRlc2VyaWFsaXplZEFkZHJlc3Nlcy5ldmVyeSgoYWRkcmVzcykgPT4gdXRpbHMuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcy50b1N0cmluZygpKSk7XG4gICAgY29uc3QgYWxsQW1vdW50c1ZhbGlkID0gZGVzZXJpYWxpemVkQW1vdW50cy5ldmVyeSgoYW1vdW50KSA9PlxuICAgICAgbmV3IEJpZ051bWJlcih1dGlscy5nZXRBbW91bnRGcm9tUGF5bG9hZEFyZ3MoYW1vdW50KSkuaXNHcmVhdGVyVGhhbigwKVxuICAgICk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlY2lwaWVudHM6IHsgZGVzZXJpYWxpemVkQWRkcmVzc2VzLCBkZXNlcmlhbGl6ZWRBbW91bnRzIH0sXG4gICAgICBpc1ZhbGlkOiBhbGxBZGRyZXNzZXNWYWxpZCAmJiBhbGxBbW91bnRzVmFsaWQsXG4gICAgfTtcbiAgfVxuXG4gIHBhcnNlUmVjaXBpZW50cyhhZGRyZXNzQXJnOiBFbnRyeUZ1bmN0aW9uQXJndW1lbnQsIGFtb3VudEFyZzogRW50cnlGdW5jdGlvbkFyZ3VtZW50KTogVHJhbnNhY3Rpb25SZWNpcGllbnRbXSB7XG4gICAgY29uc3QgeyByZWNpcGllbnRzLCBpc1ZhbGlkIH0gPSB1dGlscy5mZXRjaEFuZFZhbGlkYXRlUmVjaXBpZW50cyhhZGRyZXNzQXJnLCBhbW91bnRBcmcpO1xuICAgIGlmICghaXNWYWxpZCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIHRyYW5zYWN0aW9uIHJlY2lwaWVudHMnKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlY2lwaWVudHMuZGVzZXJpYWxpemVkQWRkcmVzc2VzLm1hcCgoYWRkcmVzcywgaW5kZXgpID0+ICh7XG4gICAgICBhZGRyZXNzLFxuICAgICAgYW1vdW50OiB1dGlscy5nZXRBbW91bnRGcm9tUGF5bG9hZEFyZ3MocmVjaXBpZW50cy5kZXNlcmlhbGl6ZWRBbW91bnRzW2luZGV4XSksXG4gICAgfSkpIGFzIFRyYW5zYWN0aW9uUmVjaXBpZW50W107XG4gIH1cblxuICBkZXNlcmlhbGl6ZVNpZ25lZFRyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uOiBzdHJpbmcpOiBTaWduZWRUcmFuc2FjdGlvbiB7XG4gICAgY29uc3QgdHhuQnl0ZXMgPSBIZXguZnJvbUhleFN0cmluZyhyYXdUcmFuc2FjdGlvbikudG9VaW50OEFycmF5KCk7XG4gICAgY29uc3QgZGVzZXJpYWxpemVyID0gbmV3IERlc2VyaWFsaXplcih0eG5CeXRlcyk7XG4gICAgcmV0dXJuIGRlc2VyaWFsaXplci5kZXNlcmlhbGl6ZShTaWduZWRUcmFuc2FjdGlvbik7XG4gIH1cblxuICBkZXNlcmlhbGl6ZUZlZVBheWVyUmF3VHJhbnNhY3Rpb24ocmF3VHJhbnNhY3Rpb246IHN0cmluZyk6IEZlZVBheWVyUmF3VHJhbnNhY3Rpb24ge1xuICAgIGNvbnN0IHR4bkJ5dGVzID0gSGV4LmZyb21IZXhTdHJpbmcocmF3VHJhbnNhY3Rpb24pLnRvVWludDhBcnJheSgpO1xuICAgIGNvbnN0IGRlc2VyaWFsaXplciA9IG5ldyBEZXNlcmlhbGl6ZXIodHhuQnl0ZXMpO1xuICAgIHJldHVybiBGZWVQYXllclJhd1RyYW5zYWN0aW9uLmxvYWQoZGVzZXJpYWxpemVyKTtcbiAgfVxuXG4gIGRlc2VyaWFsaXplQWNjb3VudEFkZHJlc3NWZWN0b3Ioc2VyaWFsaXplZEJ5dGVzOiBVaW50OEFycmF5KTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGRlc2VyaWFsaXplciA9IG5ldyBEZXNlcmlhbGl6ZXIoc2VyaWFsaXplZEJ5dGVzKTtcbiAgICBjb25zdCBkZXNlcmlhbGl6ZWRBZGRyZXNzZXMgPSBkZXNlcmlhbGl6ZXIuZGVzZXJpYWxpemVWZWN0b3IoQWNjb3VudEFkZHJlc3MpO1xuICAgIHJldHVybiBkZXNlcmlhbGl6ZWRBZGRyZXNzZXMubWFwKChhZGRyZXNzKSA9PiBhZGRyZXNzLnRvU3RyaW5nKCkpO1xuICB9XG5cbiAgZGVzZXJpYWxpemVVNjRWZWN0b3Ioc2VyaWFsaXplZEJ5dGVzOiBVaW50OEFycmF5KTogVWludDhBcnJheVtdIHtcbiAgICBjb25zdCBkZXNlcmlhbGl6ZXIgPSBuZXcgRGVzZXJpYWxpemVyKHNlcmlhbGl6ZWRCeXRlcyk7XG4gICAgY29uc3QgZGVzZXJpYWxpemVkQW1vdW50cyA9IGRlc2VyaWFsaXplci5kZXNlcmlhbGl6ZVZlY3RvcihVNjQpO1xuICAgIHJldHVybiBkZXNlcmlhbGl6ZWRBbW91bnRzLm1hcCgoYW1vdW50KSA9PiBhbW91bnQuYmNzVG9CeXRlcygpKTtcbiAgfVxuXG4gIGdldEJ1ZmZlckZyb21IZXhTdHJpbmcoaGV4U3RyaW5nOiBzdHJpbmcpOiBCdWZmZXIge1xuICAgIHJldHVybiBCdWZmZXIuZnJvbShIZXguZnJvbUhleFN0cmluZyhoZXhTdHJpbmcpLnRvVWludDhBcnJheSgpKTtcbiAgfVxuXG4gIGNhc3RUb051bWJlcih2YWx1ZTogYmlnaW50KTogbnVtYmVyIHtcbiAgICByZXR1cm4gbmV3IEJpZ051bWJlcih2YWx1ZS50b1N0cmluZygpKS50b051bWJlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0cmlwIGhleCBwcmVmaXhcbiAgICogQHBhcmFtIHN0clxuICAgKiBAcmV0dXJucyBoZXggc3RyaW5nIHdpdGhvdXQgMHggcHJlZml4XG4gICAqL1xuICBzdHJpcEhleFByZWZpeChzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlKC9eMHgvaSwgJycpO1xuICB9XG5cbiAgZ2V0QW1vdW50RnJvbVBheWxvYWRBcmdzKGFtb3VudEFyZzogVWludDhBcnJheSk6IHN0cmluZyB7XG4gICAgY29uc3QgYW1vdW50QnVmZmVyID0gQnVmZmVyLmZyb20oYW1vdW50QXJnKTtcbiAgICBjb25zdCBsb3cgPSBCaWdJbnQoYW1vdW50QnVmZmVyLnJlYWRVaW50MzJMRSgpKTtcbiAgICBjb25zdCBoaWdoID0gQmlnSW50KGFtb3VudEJ1ZmZlci5yZWFkVWludDMyTEUoNCkpO1xuICAgIGNvbnN0IGFtb3VudCA9IChoaWdoIDw8IEJpZ0ludCgzMikpICsgbG93O1xuICAgIHJldHVybiBhbW91bnQudG9TdHJpbmcoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBBcHRvcyB0cmFuc2FjdGlvbiBleHBpcmF0aW9uIHRpbWVzdGFtcCBpbiBzZWNvbmRzLlxuICAgKiBJdCBpcyBzZXQgdG8gMSB3ZWVrIGZyb20gbm93LlxuICAgKi9cbiAgZ2V0VHhuRXhwaXJhdGlvblRpbWVzdGFtcCgpOiBudW1iZXIge1xuICAgIHJldHVybiBNYXRoLmZsb29yKERhdGUubm93KCkgLyAxZTMpICsgU0VDT05EU19QRVJfV0VFSztcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IGJ5dGVzIGFycmF5IHRvIGhleCBzdHJpbmcgd2l0aCAweCBwcmVmaXhcbiAgICovXG4gIGJ5dGVzVG9IZXgoYnl0ZXM6IG51bWJlcltdKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJzB4JyArIGJ5dGVzLm1hcCgoYikgPT4gYi50b1N0cmluZygxNikucGFkU3RhcnQoMiwgJzAnKSkuam9pbignJyk7XG4gIH1cblxuICAvKipcbiAgICogVHJ5IHRvIGNvbnZlcnQgaGV4IHN0cmluZyB0byBBY2NvdW50QWRkcmVzcywgcmV0dXJuIG9yaWdpbmFsIHN0cmluZyBpZiBjb252ZXJzaW9uIGZhaWxzXG4gICAqL1xuICB0cnlQYXJzZUFjY291bnRBZGRyZXNzKGhleFN0cjogc3RyaW5nKTogQWNjb3VudEFkZHJlc3MgfCBzdHJpbmcge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gQWNjb3VudEFkZHJlc3MuZnJvbVN0cmluZyhoZXhTdHIpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGhleFN0cjtcbiAgICB9XG4gIH1cbn1cblxuY29uc3QgdXRpbHMgPSBuZXcgVXRpbHMoKTtcblxuZXhwb3J0IGRlZmF1bHQgdXRpbHM7XG4iXX0=
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../test/integration/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L2ludGVncmF0aW9uL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIiXX0=
@@ -0,0 +1,46 @@
1
+ import { Recipient } from '@bitgo-beta/sdk-core';
2
+ export declare const AMOUNT = 1000;
3
+ export declare const FUNGIBLE_TOKEN_AMOUNT = 1;
4
+ export declare const addresses: {
5
+ validAddresses: string[];
6
+ invalidAddresses: string[];
7
+ };
8
+ export declare const sender: {
9
+ address: string;
10
+ privateKey: string;
11
+ publicKey: string;
12
+ };
13
+ export declare const sender2: {
14
+ address: string;
15
+ publicKey: string;
16
+ };
17
+ export declare const fungibleSender: {
18
+ address: string;
19
+ };
20
+ export declare const feePayer: {
21
+ address: string;
22
+ privateKey: string;
23
+ publicKey: string;
24
+ };
25
+ export declare const recipients: Recipient[];
26
+ export declare const batchRecipients: Recipient[];
27
+ export declare const fungibleTokenRecipients: Recipient[];
28
+ export declare const batchFungibleRecipients: Recipient[];
29
+ export declare const digitalTokenRecipients: Recipient[];
30
+ export declare const invalidRecipients: Recipient[];
31
+ export declare const TRANSFER = "0x1aed808916ab9b1b30b07abb53561afd46847285ce28651221d406173a37244992000000000000000200000000000000000000000000000000000000000000000000000000000000010d6170746f735f6163636f756e740e7472616e736665725f636f696e73010700000000000000000000000000000000000000000000000000000000000000010a6170746f735f636f696e094170746f73436f696e000220f7405c28a02cf5bab4ea4498240bb3579db45951794eb1c843bef0534c093ad908e803000000000000400d0300000000006400000000000000979390670000000002030020f73836f42257240e43d439552471fc9dbcc3f1af5bd0b4ed83f44b5f6614644240caeb90efd4b7ecd922c97bb3163e6a9de1fbb2ee0fc0d56af484f4af9b0015c5831341550af29b3686713b6657c821d894635fe13c7933f06ee043728f040b090000dbc87a1c816d9bcd06b683c37e80c7162e4d48da7812198b830e4d5d8e0629f200205223396c531f13e031a9f0cb26d459d799a52e51be9a1cb9e871afb4c31f91ff4013e7e8a1325ee5f656c93baa3d0206a1d9bd6da5abdc6f5d9b8bbbb0926ddac68f3e57a915dd217d2d43e776a6cc01af72f895ea712acc836d30349f29a3c606";
32
+ export declare const TRANSACTION_USING_TRANSFER_COINS = "0x1aed808916ab9b1b30b07abb53561afd46847285ce28651221d406173a37244992000000000000000200000000000000000000000000000000000000000000000000000000000000010d6170746f735f6163636f756e740e7472616e736665725f636f696e73010700000000000000000000000000000000000000000000000000000000000000010a6170746f735f636f696e094170746f73436f696e000220f7405c28a02cf5bab4ea4498240bb3579db45951794eb1c843bef0534c093ad908e803000000000000400d0300000000006400000000000000979390670000000002030020f73836f42257240e43d439552471fc9dbcc3f1af5bd0b4ed83f44b5f6614644240caeb90efd4b7ecd922c97bb3163e6a9de1fbb2ee0fc0d56af484f4af9b0015c5831341550af29b3686713b6657c821d894635fe13c7933f06ee043728f040b090000dbc87a1c816d9bcd06b683c37e80c7162e4d48da7812198b830e4d5d8e0629f200205223396c531f13e031a9f0cb26d459d799a52e51be9a1cb9e871afb4c31f91ff4013e7e8a1325ee5f656c93baa3d0206a1d9bd6da5abdc6f5d9b8bbbb0926ddac68f3e57a915dd217d2d43e776a6cc01af72f895ea712acc836d30349f29a3c606";
33
+ export declare const FUNGIBLE_TOKEN_TRANSFER = "0x1aed808916ab9b1b30b07abb53561afd46847285ce28651221d406173a372449a700000000000000020000000000000000000000000000000000000000000000000000000000000001167072696d6172795f66756e6769626c655f73746f7265087472616e73666572010700000000000000000000000000000000000000000000000000000000000000010e66756e6769626c655f6173736574084d65746164617461000320d5d0d561493ea2b9410f67da804653ae44e793c2423707d4f11edb2e3819205020f7405c28a02cf5bab4ea4498240bb3579db45951794eb1c843bef0534c093ad9080100000000000000400d0300000000006400000000000000e42696670000000002030020f73836f42257240e43d439552471fc9dbcc3f1af5bd0b4ed83f44b5f661464424029665cd4c94658a0d83907bbed7e761794b25bccc03fc87e6dd63a543accdddfd7a6f1e7a15e8681547ca437ff99b58c92f816e35a0f333d7f1fd1330c21ad0a0000dbc87a1c816d9bcd06b683c37e80c7162e4d48da7812198b830e4d5d8e0629f200205223396c531f13e031a9f0cb26d459d799a52e51be9a1cb9e871afb4c31f91ff40de7b0bb86ca346031942e9cf21ff9604c7c08c2c662e38a0afe3dd640512c0441396c0697cd8bbbcf39694d6f88e35f6bed9fb34bd209b0479b5e8bd0cf3eb0b";
34
+ export declare const FUNGIBLE_BATCH_TRANSFER = "0xc8f02d25aa698b3e9fbd8a08e8da4c8ee261832a25a4cde8731b5ec356537d0951000000000000000200000000000000000000000000000000000000000000000000000000000000010d6170746f735f6163636f756e741e62617463685f7472616e736665725f66756e6769626c655f617373657473000320d5d0d561493ea2b9410f67da804653ae44e793c2423707d4f11edb2e381920504102dd52c0b72a73696b867d6571a308c413e43bff8f44956a5991abc4d50db0b8492a81760d52db9a96df2609860218214b6d1012e77e84a3fed5145a9a65bf6932110201000000000000000100000000000000400d030000000000640000000000000000255a3ab3010000020300202121dcd098069ae535697dd019cfd8677ca7aba0adac1d1959cbce6dc54b125940d3e7448bafd11924a5d18985310b99a539a7b903961d5c296fdcb314950b4a247fad77bad797a644e59fb76767cf796c207a40ebc3d22fc5c847172ebf09570f0000dbc87a1c816d9bcd06b683c37e80c7162e4d48da7812198b830e4d5d8e0629f200205223396c531f13e031a9f0cb26d459d799a52e51be9a1cb9e871afb4c31f91ff40e242d59712e8e8a213cb6b24ab117854cf12275660dedcb49eb5b22f543bada83f87ca51d5da06a23ac5d4dc6bbfc7745cb44d22467be613565f41b3ba875108";
35
+ export declare const DIGITAL_ASSET_TRANSFER = "0x1aed808916ab9b1b30b07abb53561afd46847285ce28651221d406173a372449ab00000000000000020000000000000000000000000000000000000000000000000000000000000001066f626a656374087472616e736665720107000000000000000000000000000000000000000000000000000000000000000405746f6b656e05546f6b656e0002202e356062777469d39ca5d9b72512ce2d5713d7938ed6ca9193d4fc2016a819fd20f7405c28a02cf5bab4ea4498240bb3579db45951794eb1c843bef0534c093ad9400d0300000000006400000000000000526798670000000002030020f73836f42257240e43d439552471fc9dbcc3f1af5bd0b4ed83f44b5f66146442400c2c31eae495d22d1d31031b9756e8238a3df6e760515aa3e1108d93b3aec6aeb91684307e8365ad9dc44c0b5957e95a21a6f47d8d4a6e0eb3b145fb3d517f030000dbc87a1c816d9bcd06b683c37e80c7162e4d48da7812198b830e4d5d8e0629f200205223396c531f13e031a9f0cb26d459d799a52e51be9a1cb9e871afb4c31f91ff40dd6c064e44642819dec2f63d32d6daa4f889d62d06025ad99b42562c4c6cdef8b1437739115d7f38050078829efb9dd05528f53309bcab5b89fadb283423100d";
36
+ export declare const COIN_BATCH_TRANSFER = "0xc8f02d25aa698b3e9fbd8a08e8da4c8ee261832a25a4cde8731b5ec356537d0951000000000000000200000000000000000000000000000000000000000000000000000000000000010d6170746f735f6163636f756e741462617463685f7472616e736665725f636f696e73010700000000000000000000000000000000000000000000000000000000000000010a6170746f735f636f696e094170746f73436f696e00024102dd52c0b72a73696b867d6571a308c413e43bff8f44956a5991abc4d50db0b8492a81760d52db9a96df2609860218214b6d1012e77e84a3fed5145a9a65bf69321102e803000000000000e803000000000000400d030000000000640000000000000009d4ea6700000000020300202121dcd098069ae535697dd019cfd8677ca7aba0adac1d1959cbce6dc54b12594047602d08426ce035971e86d57d57fc33a7e9d29da56a87a2e6e9d12ae3b39e25892298fa8b080111c609c9a451264b320236a06a45eab870765f90ffc4a42a030000dbc87a1c816d9bcd06b683c37e80c7162e4d48da7812198b830e4d5d8e0629f200205223396c531f13e031a9f0cb26d459d799a52e51be9a1cb9e871afb4c31f91ff401d817a641b915727057babb0ddfe6876583ac5c8d4b86b4c91385dc94f071f8e12a4908786a417b2721fa9838dd1bee6e153ca02f78de43161a9810407ea0b0f";
37
+ export declare const INVALID_TRANSFER = "AAAAAAAAAAAAA6e7361637469bc4a58e500b9e64cb6547ee9b403000000000000002064ba1fb2f2fbd2938a350015d601f4db89cd7e8e2370d0dd9ae3ac4f635c1581111b8a49f67370bc4a58e500b9e64cb6462e39b802000000000000002064ba1fb2f2fbd2938a350015d601f4db89cd7e8e2370d0dd9ae3ac47aa1ff81f01c4173a804406a365e69dfb297d4eaaf002546ebd016400000000000000cba4a48bb0f8b586c167e5dcefaa1c5e96ab3f0836d6ca08f2081732944d1e5b6b406a4a462e39b8030000000000000020b9490ede63215262c434e03f606d9799f3ba704523ceda184b386d47aa1ff81f01000000000000006400000000000000";
38
+ export declare const fungibleTokenAddress: {
39
+ usdt: string;
40
+ };
41
+ export declare const digitalAssetAddress = "0x2e356062777469d39ca5d9b72512ce2d5713d7938ed6ca9193d4fc2016a819fd";
42
+ export declare const LEGACY_COIN = "0x4fb379c10c763a13e724064ecfb7d946690bea519ba982c81b518d1c11dd23fe::fa_test::Coinz";
43
+ export declare const FUNGIBLE_SERIALIZED_TX_HEX = "0xd171f03aa2c3f37d7838b76cdd83da045ecc3f080a1c190f7e412d79485809a00000000000000000020000000000000000000000000000000000000000000000000000000000000001167072696d6172795f66756e6769626c655f73746f7265087472616e73666572010700000000000000000000000000000000000000000000000000000000000000010e66756e6769626c655f6173736574084d65746164617461000320d5d0d561493ea2b9410f67da804653ae44e793c2423707d4f11edb2e3819205020ba7af528be58094057170e365a6b5fa836868152a505b2733355dff1d183171e080100000000000000400d0300000000006400000000000000fcaabe670000000002030020000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c14e0894f3334dcd4008447628f3f7e3b5c5200eee399b72c0e63f8e5d09f09600209b4e96086d111500259f9b38680b0509a405c1904da18976455a20c691d3bb074000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";
44
+ export declare const FUNGIBLE_BATCH_RAW_TX_HEX = "0x1aed808916ab9b1b30b07abb53561afd46847285ce28651221d406173a3724490e000000000000000200000000000000000000000000000000000000000000000000000000000000010d6170746f735f6163636f756e741e62617463685f7472616e736665725f66756e6769626c655f617373657473000320d5d0d561493ea2b9410f67da804653ae44e793c2423707d4f11edb2e381920504102dd52c0b72a73696b867d6571a308c413e43bff8f44956a5991abc4d50db0b8492a81760d52db9a96df2609860218214b6d1012e77e84a3fed5145a9a65bf6932110201000000000000000100000000000000400d03000000000064000000000000008b037d670000000002030020000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dbc87a1c816d9bcd06b683c37e80c7162e4d48da7812198b830e4d5d8e0629f2002000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";
45
+ export declare const FUNGIBLE_BATCH_SIGNABLE_PAYLOAD = "5efa3c4f02f83a0f4b2d69fc95c607cc02825cc4e7be536ef0992df050d9e67c011aed808916ab9b1b30b07abb53561afd46847285ce28651221d406173a3724490e000000000000000200000000000000000000000000000000000000000000000000000000000000010d6170746f735f6163636f756e741e62617463685f7472616e736665725f66756e6769626c655f617373657473000320d5d0d561493ea2b9410f67da804653ae44e793c2423707d4f11edb2e381920504102dd52c0b72a73696b867d6571a308c413e43bff8f44956a5991abc4d50db0b8492a81760d52db9a96df2609860218214b6d1012e77e84a3fed5145a9a65bf6932110201000000000000000100000000000000400d03000000000064000000000000008b037d67000000000200dbc87a1c816d9bcd06b683c37e80c7162e4d48da7812198b830e4d5d8e0629f2";
46
+ //# sourceMappingURL=apt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apt.d.ts","sourceRoot":"","sources":["../../../test/resources/apt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,eAAO,MAAM,MAAM,OAAO,CAAC;AAC3B,eAAO,MAAM,qBAAqB,IAAI,CAAC;AAEvC,eAAO,MAAM,SAAS;;;CAUrB,CAAC;AAEF,eAAO,MAAM,MAAM;;;;CAIlB,CAAC;AAEF,eAAO,MAAM,OAAO;;;CAGnB,CAAC;AAEF,eAAO,MAAM,cAAc;;CAE1B,CAAC;AAEF,eAAO,MAAM,QAAQ;;;;CAIpB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,SAAS,EAKjC,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,SAAS,EAStC,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,SAAS,EAS9C,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,SAAS,EAS9C,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,SAAS,EAK7C,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,SAAS,EAaxC,CAAC;AAEF,eAAO,MAAM,QAAQ,65BACu4B,CAAC;AAE75B,eAAO,MAAM,gCAAgC,65BAC+2B,CAAC;AAE75B,eAAO,MAAM,uBAAuB,2+BACs8B,CAAC;AAE3+B,eAAO,MAAM,uBAAuB,q+BACg8B,CAAC;AAEr+B,eAAO,MAAM,sBAAsB,i6BAC63B,CAAC;AAEj6B,eAAO,MAAM,mBAAmB,6/BAC49B,CAAC;AAE7/B,eAAO,MAAM,gBAAgB,kgBACoe,CAAC;AAElgB,eAAO,MAAM,oBAAoB;;CAEhC,CAAC;AAEF,eAAO,MAAM,mBAAmB,uEAAuE,CAAC;AAExG,eAAO,MAAM,WAAW,uFAAuF,CAAC;AAEhH,eAAO,MAAM,0BAA0B,2+BACm8B,CAAC;AAE3+B,eAAO,MAAM,yBAAyB,q+BAC87B,CAAC;AAEr+B,eAAO,MAAM,+BAA+B,qpBACwmB,CAAC"}