@piggly/secrets 0.7.0 → 0.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,7 @@
1
1
  import { Transform } from 'node:stream';
2
2
  import crypto from 'node:crypto';
3
+ import { sha256 } from '@noble/hashes/sha2.js';
4
+ import { hkdf } from '@noble/hashes/hkdf.js';
3
5
 
4
6
  /**
5
7
  * Derive an encryption key from a secret and keys.
@@ -435,13 +437,26 @@ export function decryptCTRStream(secret, keys = [], aad) {
435
437
 
436
438
  /**
437
439
  * Generate a secret FROM a seed WITH SHA-256.
440
+ * Now it uses HKDF. To keep support to previous version use `version: 1`.
438
441
  *
439
- * @param seed
442
+ * @warning Old secrets (<=0.7.x versions) should use the `version: 1` option.
443
+ * @param seed - The seed to generate the secret from.
444
+ * @param opts - The options to generate the secret.
445
+ * @param opts.length - The length of the secret.
446
+ * @param opts.salt - The salt to use.
447
+ * @param opts.version - The version of the secret. Set to `1` to generate a secret compatible with previous versions (<=0.7.x).
440
448
  * @returns The secret.
441
449
  * @since 0.1.0
442
450
  * @author Caique Araujo <caique@piggly.com.br>
443
451
  */
444
- export function generateSecret(seed) {
445
- return crypto.createHash('sha256').update(seed ?? crypto.randomBytes(32)).digest();
452
+ export function generateSecret(seed, opts) {
453
+ const length = opts?.length ?? 32;
454
+ const salt = opts?.salt ?? Buffer.alloc(0);
455
+ const ikm = seed ?? crypto.randomBytes(32);
456
+ const version = opts?.version ?? 2;
457
+ if (version === 1) {
458
+ return crypto.createHash('sha256').update(ikm).digest();
459
+ }
460
+ return Buffer.from(hkdf(sha256, ikm, salt, Buffer.from('aes-256-secret/v1'), length));
446
461
  }
447
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJUcmFuc2Zvcm0iLCJjcnlwdG8iLCJkZXJpdmVHQ01FbmNyeXB0aW9uS2V5Iiwic2VjcmV0Iiwia2V5cyIsIkJ1ZmZlciIsImZyb20iLCJoa2RmU3luYyIsImFsbG9jIiwiY29uY2F0IiwiZ2V0Q2lwaGVyR0NNIiwia2V5IiwiaXYiLCJyYW5kb21CeXRlcyIsImNpcGhlciIsImNyZWF0ZUNpcGhlcml2IiwiZW5jcnlwdEdDTSIsIm1lc3NhZ2UiLCJhYWQiLCJsZW5ndGgiLCJFcnJvciIsInNvbWUiLCJzZXRBQUQiLCJjdCIsInVwZGF0ZSIsImZpbmFsIiwidGFnIiwiZ2V0QXV0aFRhZyIsImRlY3J5cHRHQ00iLCJibG9iIiwic3ViYXJyYXkiLCJkZWNpcGhlciIsImNyZWF0ZURlY2lwaGVyaXYiLCJzZXRBdXRoVGFnIiwiZW5jcnlwdEdDTVN0cmVhbSIsIml2UHVzaGVkIiwidHJhbnNmb3JtIiwiZmx1c2giLCJjYWxsYmFjayIsInB1c2giLCJjaHVuayIsImVuY29kaW5nIiwiZGVjcnlwdEdDTVN0cmVhbSIsInRhaWwiLCJlIiwiZGF0YSIsInRvdGFsIiwiZmVlZCIsImRlcml2ZUNUUkVuY3J5cHRpb25LZXkiLCJpa20iLCJrX2VuYyIsImtfbWFjIiwiZ2V0Q2lwaGVyQ1RSIiwiZW5jcnlwdENUUiIsImVuY3J5cHRlZCIsImNyZWF0ZUhtYWMiLCJkaWdlc3QiLCJkZWNyeXB0Q1RSIiwibWFjIiwidGltaW5nU2FmZUVxdWFsIiwiZW5jcnlwdENUUlN0cmVhbSIsImxhc3QiLCJkZWNyeXB0Q1RSU3RyZWFtIiwibWFjX2J1ZmZlciIsImNhbGMiLCJiIiwiX2NodW5rIiwiY29tYmluZWQiLCJnZW5lcmF0ZVNlY3JldCIsInNlZWQiLCJjcmVhdGVIYXNoIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvcmUvc2VjcmV0cy9hZXMyNTYudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVHJhbnNmb3JtQ2FsbGJhY2ssIFRyYW5zZm9ybSB9IGZyb20gJ25vZGU6c3RyZWFtJztcbmltcG9ydCBjcnlwdG8gZnJvbSAnbm9kZTpjcnlwdG8nO1xuXG4vKipcbiAqIERlcml2ZSBhbiBlbmNyeXB0aW9uIGtleSBmcm9tIGEgc2VjcmV0IGFuZCBrZXlzLlxuICpcbiAqIEBwYXJhbSBzZWNyZXQgLSBUaGUgc2VjcmV0IHRvIGRlcml2ZSB0aGUga2V5IGZyb20uXG4gKiBAcGFyYW0ga2V5cyAtIFRoZSBrZXlzIHRvIGRlcml2ZSB0aGUga2V5IGZyb20uXG4gKiBAcmV0dXJucyBUaGUgZGVyaXZlZCBrZXkuXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBhdXRob3IgQ2FpcXVlIEFyYXVqbyA8Y2FpcXVlQHBpZ2dseS5jb20uYnI+XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZXJpdmVHQ01FbmNyeXB0aW9uS2V5KHNlY3JldDogQnVmZmVyLCBrZXlzOiBCdWZmZXJbXSA9IFtdKTogQnVmZmVyIHtcblx0cmV0dXJuIEJ1ZmZlci5mcm9tKFxuXHRcdGNyeXB0by5oa2RmU3luYyhcblx0XHRcdCdzaGEyNTYnLFxuXHRcdFx0QnVmZmVyLmFsbG9jKDApLFxuXHRcdFx0QnVmZmVyLmNvbmNhdChbc2VjcmV0LCAuLi5rZXlzXSksXG5cdFx0XHRCdWZmZXIuZnJvbSgnYWVzLTI1Ni1nY20vZW5jL3YxJyksXG5cdFx0XHQzMixcblx0XHQpLFxuXHQpO1xufVxuXG4vKipcbiAqIFByZXBhcmUgZW5jcnlwdGlvbi5cbiAqXG4gKiBAcGFyYW0gc2VjcmV0XG4gKiBAcGFyYW0ga2V5c1xuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBzZWNyZXQgaXMgbGVzcyB0aGFuIDMyIGJ5dGVzIGxvbmcuXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgYW55IG9mIHRoZSBrZXlzIGFyZSBsZXNzIHRoYW4gMzIgYnl0ZXMgbG9uZy5cbiAqIEByZXR1cm5zIFRoZSBjaXBoZXIsIElWLCBhbmQgc2VjcmV0LlxuICogQHNpbmNlIDAuMS4wXG4gKiBAYXV0aG9yIENhaXF1ZSBBcmF1am8gPGNhaXF1ZUBwaWdnbHkuY29tLmJyPlxuICogQHJldHVybnNcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDaXBoZXJHQ00oXG5cdHNlY3JldDogQnVmZmVyLFxuXHRrZXlzOiBBcnJheTxCdWZmZXI+ID0gW10sXG4pOiB7IGNpcGhlcjogY3J5cHRvLkNpcGhlckdDTTsgaXY6IEJ1ZmZlciB9IHtcblx0Y29uc3Qga2V5ID0gZGVyaXZlR0NNRW5jcnlwdGlvbktleShzZWNyZXQsIGtleXMpO1xuXHRjb25zdCBpdiA9IGNyeXB0by5yYW5kb21CeXRlcygxMik7IC8vIEBub3RlIDk2LWJpdCBJViByZWNvbW1lbmRlZFxuXHRjb25zdCBjaXBoZXIgPSBjcnlwdG8uY3JlYXRlQ2lwaGVyaXYoJ2Flcy0yNTYtZ2NtJywga2V5LCBpdik7XG5cblx0cmV0dXJuIHsgY2lwaGVyLCBpdiB9O1xufVxuXG4vKipcbiAqIEVuY3J5cHQgYSBtZXNzYWdlIHVzaW5nIEFFUy0yNTYtR0NNLlxuICpcbiAqIEBwYXJhbSBzZWNyZXQgLSBUaGUgc2VjcmV0IHRvIGVuY3J5cHQuXG4gKiBAcGFyYW0gbWVzc2FnZSAtIFRoZSBtZXNzYWdlIHRvIGVuY3J5cHQuXG4gKiBAcGFyYW0ga2V5cyAtIFRoZSBrZXlzIHRvIGVuY3J5cHQuXG4gKiBAcGFyYW0gYWFkIC0gVGhlIGFkZGl0aW9uYWwgYXV0aGVudGljYXRpb24gZGF0YS5cbiAqIEByZXR1cm5zIFRoZSBlbmNyeXB0ZWQgbWVzc2FnZS5cbiAqIEBzaW5jZSAwLjEuMFxuICogQGF1dGhvciBDYWlxdWUgQXJhdWpvIDxjYWlxdWVAcGlnZ2x5LmNvbS5icj5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuY3J5cHRHQ00oXG5cdHNlY3JldDogQnVmZmVyLFxuXHRtZXNzYWdlOiBCdWZmZXIsXG5cdGtleXM6IEFycmF5PEJ1ZmZlcj4gPSBbXSxcblx0YWFkPzogQnVmZmVyLFxuKTogQnVmZmVyIHtcblx0aWYgKHNlY3JldC5sZW5ndGggPCAzMikge1xuXHRcdHRocm93IEVycm9yKCdTZWNyZXQgbXVzdCBiZSBhdCBsZWFzdCAzMiBieXRlcyBsb25nLicpO1xuXHR9XG5cblx0aWYgKGtleXMubGVuZ3RoID4gMCAmJiBrZXlzLnNvbWUoa2V5ID0+IGtleS5sZW5ndGggPCAzMikpIHtcblx0XHR0aHJvdyBFcnJvcignS2V5cyBtdXN0IGJlIGF0IGxlYXN0IDMyIGJ5dGVzIGxvbmcuJyk7XG5cdH1cblxuXHRjb25zdCB7IGNpcGhlciwgaXYgfSA9IGdldENpcGhlckdDTShzZWNyZXQsIGtleXMpO1xuXG5cdGlmIChhYWQpIHtcblx0XHRjaXBoZXIuc2V0QUFEKGFhZCk7XG5cdH1cblxuXHRjb25zdCBjdCA9IEJ1ZmZlci5jb25jYXQoW2NpcGhlci51cGRhdGUobWVzc2FnZSksIGNpcGhlci5maW5hbCgpXSk7XG5cdGNvbnN0IHRhZyA9IGNpcGhlci5nZXRBdXRoVGFnKCk7XG5cblx0cmV0dXJuIEJ1ZmZlci5jb25jYXQoW2l2LCBjdCwgdGFnXSk7XG59XG5cbi8qKlxuICogRGVjcnlwdCBhIG1lc3NhZ2UgdXNpbmcgQUVTLTI1Ni1HQ00uXG4gKlxuICogQHBhcmFtIHNlY3JldCAtIFRoZSBzZWNyZXQgdG8gZGVjcnlwdC5cbiAqIEBwYXJhbSBibG9iIC0gVGhlIG1lc3NhZ2UgdG8gZGVjcnlwdC5cbiAqIEBwYXJhbSBrZXlzIC0gVGhlIGtleXMgdG8gZGVjcnlwdC5cbiAqIEBwYXJhbSBhYWQgLSBUaGUgYWRkaXRpb25hbCBhdXRoZW50aWNhdGlvbiBkYXRhLlxuICogQHJldHVybnMgVGhlIGRlY3J5cHRlZCBtZXNzYWdlLlxuICogQHNpbmNlIDAuMS4wXG4gKiBAYXV0aG9yIENhaXF1ZSBBcmF1am8gPGNhaXF1ZUBwaWdnbHkuY29tLmJyPlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjcnlwdEdDTShcblx0c2VjcmV0OiBCdWZmZXIsXG5cdGJsb2I6IEJ1ZmZlcixcblx0a2V5czogQXJyYXk8QnVmZmVyPiA9IFtdLFxuXHRhYWQ/OiBCdWZmZXIsXG4pOiBCdWZmZXIge1xuXHRpZiAoc2VjcmV0Lmxlbmd0aCA8IDMyKSB7XG5cdFx0dGhyb3cgRXJyb3IoJ1NlY3JldCBtdXN0IGJlIGF0IGxlYXN0IDMyIGJ5dGVzIGxvbmcuJyk7XG5cdH1cblxuXHRpZiAoa2V5cy5sZW5ndGggPiAwICYmIGtleXMuc29tZShrZXkgPT4ga2V5Lmxlbmd0aCA8IDMyKSkge1xuXHRcdHRocm93IEVycm9yKCdLZXlzIG11c3QgYmUgYXQgbGVhc3QgMzIgYnl0ZXMgbG9uZy4nKTtcblx0fVxuXG5cdGlmIChibG9iLmxlbmd0aCA8IDEyICsgMTYpIHtcblx0XHR0aHJvdyBFcnJvcignQmxvYiBtdXN0IGJlIGF0IGxlYXN0IDEyKzE2IGJ5dGVzIGxvbmcuJyk7XG5cdH1cblxuXHRjb25zdCBrZXkgPSBkZXJpdmVHQ01FbmNyeXB0aW9uS2V5KHNlY3JldCwga2V5cyk7XG5cdGNvbnN0IGl2ID0gYmxvYi5zdWJhcnJheSgwLCAxMik7XG5cdGNvbnN0IHRhZyA9IGJsb2Iuc3ViYXJyYXkoYmxvYi5sZW5ndGggLSAxNik7XG5cdGNvbnN0IGN0ID0gYmxvYi5zdWJhcnJheSgxMiwgYmxvYi5sZW5ndGggLSAxNik7XG5cblx0Y29uc3QgZGVjaXBoZXIgPSBjcnlwdG8uY3JlYXRlRGVjaXBoZXJpdignYWVzLTI1Ni1nY20nLCBrZXksIGl2KTtcblxuXHRpZiAoYWFkKSB7XG5cdFx0ZGVjaXBoZXIuc2V0QUFEKGFhZCk7XG5cdH1cblxuXHRkZWNpcGhlci5zZXRBdXRoVGFnKHRhZyk7XG5cdHJldHVybiBCdWZmZXIuY29uY2F0KFtkZWNpcGhlci51cGRhdGUoY3QpLCBkZWNpcGhlci5maW5hbCgpXSk7XG59XG5cbi8qKlxuICogRW5jcnlwdCBhIG1lc3NhZ2UgdXNpbmcgQUVTLTI1Ni1HQ00uXG4gKlxuICogQHBhcmFtIHNlY3JldCAtIFRoZSBzZWNyZXQgdG8gZW5jcnlwdC5cbiAqIEBwYXJhbSBrZXlzIC0gVGhlIGtleXMgdG8gZW5jcnlwdC5cbiAqIEBwYXJhbSBhYWQgLSBUaGUgYWRkaXRpb25hbCBhdXRoZW50aWNhdGlvbiBkYXRhLlxuICogQHJldHVybnMgVGhlIGVuY3J5cHRlZCBtZXNzYWdlLlxuICogQHNpbmNlIDAuMS4wXG4gKiBAYXV0aG9yIENhaXF1ZSBBcmF1am8gPGNhaXF1ZUBwaWdnbHkuY29tLmJyPlxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5jcnlwdEdDTVN0cmVhbShcblx0c2VjcmV0OiBCdWZmZXIsXG5cdGtleXM6IEFycmF5PEJ1ZmZlcj4gPSBbXSxcblx0YWFkPzogQnVmZmVyLFxuKTogVHJhbnNmb3JtIHtcblx0Y29uc3QgeyBjaXBoZXIsIGl2IH0gPSBnZXRDaXBoZXJHQ00oc2VjcmV0LCBrZXlzKTtcblxuXHRpZiAoYWFkKSB7XG5cdFx0Y2lwaGVyLnNldEFBRChhYWQpO1xuXHR9XG5cblx0bGV0IGl2UHVzaGVkID0gZmFsc2U7XG5cblx0Y29uc3QgdHJhbnNmb3JtID0gbmV3IFRyYW5zZm9ybSh7XG5cdFx0Zmx1c2goY2FsbGJhY2spIHtcblx0XHRcdHRoaXMucHVzaChjaXBoZXIuZmluYWwoKSk7XG5cdFx0XHR0aGlzLnB1c2goY2lwaGVyLmdldEF1dGhUYWcoKSk7XG5cdFx0XHRjYWxsYmFjaygpO1xuXHRcdH0sXG5cdFx0dHJhbnNmb3JtKFxuXHRcdFx0dGhpczogVHJhbnNmb3JtLFxuXHRcdFx0Y2h1bms6IGFueSxcblx0XHRcdGVuY29kaW5nOiBCdWZmZXJFbmNvZGluZyxcblx0XHRcdGNhbGxiYWNrOiBUcmFuc2Zvcm1DYWxsYmFjayxcblx0XHQpOiB2b2lkIHtcblx0XHRcdGlmICghaXZQdXNoZWQpIHtcblx0XHRcdFx0dGhpcy5wdXNoKGl2KTtcblx0XHRcdFx0aXZQdXNoZWQgPSB0cnVlO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLnB1c2goY2lwaGVyLnVwZGF0ZShjaHVuaykpO1xuXHRcdFx0Y2FsbGJhY2soKTtcblx0XHR9LFxuXHR9KTtcblxuXHRyZXR1cm4gdHJhbnNmb3JtO1xufVxuXG4vKipcbiAqIERlY3J5cHQgYSBtZXNzYWdlIHVzaW5nIEFFUy0yNTYtR0NNLlxuICpcbiAqIEBwYXJhbSBzZWNyZXQgLSBUaGUgc2VjcmV0IHRvIGRlY3J5cHQuXG4gKiBAcGFyYW0ga2V5cyAtIFRoZSBrZXlzIHRvIGRlY3J5cHQuXG4gKiBAcGFyYW0gYWFkIC0gVGhlIGFkZGl0aW9uYWwgYXV0aGVudGljYXRpb24gZGF0YS5cbiAqIEByZXR1cm5zIFRoZSBkZWNyeXB0ZWQgbWVzc2FnZS5cbiAqIEBzaW5jZSAwLjEuMFxuICogQGF1dGhvciBDYWlxdWUgQXJhdWpvIDxjYWlxdWVAcGlnZ2x5LmNvbS5icj5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY3J5cHRHQ01TdHJlYW0oXG5cdHNlY3JldDogQnVmZmVyLFxuXHRrZXlzOiBBcnJheTxCdWZmZXI+ID0gW10sXG5cdGFhZD86IEJ1ZmZlcixcbik6IFRyYW5zZm9ybSB7XG5cdGNvbnN0IGtleSA9IGRlcml2ZUdDTUVuY3J5cHRpb25LZXkoc2VjcmV0LCBrZXlzKTtcblxuXHRsZXQgaXY6IEJ1ZmZlciB8IG51bGwgPSBudWxsO1xuXHRsZXQgZGVjaXBoZXI6IGNyeXB0by5EZWNpcGhlckdDTSB8IG51bGwgPSBudWxsO1xuXHRsZXQgdGFpbCA9IEJ1ZmZlci5hbGxvYygwKTtcblxuXHRjb25zdCB0cmFuc2Zvcm0gPSBuZXcgVHJhbnNmb3JtKHtcblx0XHRmbHVzaChjYWxsYmFjaykge1xuXHRcdFx0aWYgKCFkZWNpcGhlciB8fCAhaXYgfHwgdGFpbC5sZW5ndGggIT09IDE2KSB7XG5cdFx0XHRcdHJldHVybiBjYWxsYmFjayhuZXcgRXJyb3IoJ01hbGZvcm1lZCBjaXBoZXJ0ZXh0IChtaXNzaW5nIHRhZykuJykpO1xuXHRcdFx0fVxuXG5cdFx0XHR0cnkge1xuXHRcdFx0XHRkZWNpcGhlci5zZXRBdXRoVGFnKHRhaWwpO1xuXHRcdFx0XHR0aGlzLnB1c2goZGVjaXBoZXIuZmluYWwoKSk7XG5cdFx0XHRcdGNhbGxiYWNrKCk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdGNhbGxiYWNrKGUgYXMgRXJyb3IpO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0dHJhbnNmb3JtKGNodW5rLCBlbmNvZGluZywgY2FsbGJhY2spIHtcblx0XHRcdGxldCBkYXRhID0gY2h1bms7XG5cblx0XHRcdGlmICghaXYpIHtcblx0XHRcdFx0aWYgKHRhaWwubGVuZ3RoKSB7XG5cdFx0XHRcdFx0ZGF0YSA9IEJ1ZmZlci5jb25jYXQoW3RhaWwsIGNodW5rXSk7XG5cdFx0XHRcdFx0dGFpbCA9IEJ1ZmZlci5hbGxvYygwKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChkYXRhLmxlbmd0aCA8IDEyKSB7XG5cdFx0XHRcdFx0dGFpbCA9IGRhdGE7XG5cdFx0XHRcdFx0cmV0dXJuIGNhbGxiYWNrKCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpdiA9IGRhdGEuc3ViYXJyYXkoMCwgMTIpO1xuXHRcdFx0XHRkZWNpcGhlciA9IGNyeXB0by5jcmVhdGVEZWNpcGhlcml2KFxuXHRcdFx0XHRcdCdhZXMtMjU2LWdjbScsXG5cdFx0XHRcdFx0a2V5LFxuXHRcdFx0XHRcdGl2LFxuXHRcdFx0XHQpIGFzIGNyeXB0by5EZWNpcGhlckdDTTtcblxuXHRcdFx0XHRpZiAoYWFkKSB7XG5cdFx0XHRcdFx0ZGVjaXBoZXIuc2V0QUFEKGFhZCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRkYXRhID0gZGF0YS5zdWJhcnJheSgxMik7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHRvdGFsID0gQnVmZmVyLmNvbmNhdChbdGFpbCwgZGF0YV0pO1xuXG5cdFx0XHRpZiAodG90YWwubGVuZ3RoIDw9IDE2KSB7XG5cdFx0XHRcdHRhaWwgPSB0b3RhbDtcblx0XHRcdFx0cmV0dXJuIGNhbGxiYWNrKCk7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGZlZWQgPSB0b3RhbC5zdWJhcnJheSgwLCB0b3RhbC5sZW5ndGggLSAxNik7XG5cdFx0XHR0YWlsID0gdG90YWwuc3ViYXJyYXkodG90YWwubGVuZ3RoIC0gMTYpO1xuXG5cdFx0XHR0aGlzLnB1c2goZGVjaXBoZXIhLnVwZGF0ZShmZWVkKSk7XG5cdFx0XHRjYWxsYmFjaygpO1xuXHRcdH0sXG5cdH0pO1xuXG5cdHJldHVybiB0cmFuc2Zvcm07XG59XG5cbi8qKlxuICogRGVyaXZlIGFuIGVuY3J5cHRpb24ga2V5IGZyb20gYSBzZWNyZXQgYW5kIGtleXMuXG4gKlxuICogQHBhcmFtIHNlY3JldFxuICogQHBhcmFtIGtleXNcbiAqIEByZXR1cm5zIFRoZSBkZXJpdmVkIGtleS5cbiAqIEBzaW5jZSAwLjEuMFxuICogQGF1dGhvciBDYWlxdWUgQXJhdWpvIDxjYWlxdWVAcGlnZ2x5LmNvbS5icj5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlcml2ZUNUUkVuY3J5cHRpb25LZXkoXG5cdHNlY3JldDogQnVmZmVyLFxuXHRrZXlzOiBCdWZmZXJbXSA9IFtdLFxuKTogeyBrX2VuYzogQnVmZmVyOyBrX21hYzogQnVmZmVyIH0ge1xuXHRpZiAoc2VjcmV0Lmxlbmd0aCA8IDMyKSB7XG5cdFx0dGhyb3cgRXJyb3IoJ1NlY3JldCBtdXN0IGJlIGF0IGxlYXN0IDMyIGJ5dGVzIGxvbmcuJyk7XG5cdH1cblxuXHRpZiAoa2V5cy5sZW5ndGggPiAwICYmIGtleXMuc29tZShrZXkgPT4ga2V5Lmxlbmd0aCA8IDMyKSkge1xuXHRcdHRocm93IEVycm9yKCdLZXlzIG11c3QgYmUgYXQgbGVhc3QgMzIgYnl0ZXMgbG9uZy4nKTtcblx0fVxuXG5cdGNvbnN0IGlrbSA9IEJ1ZmZlci5jb25jYXQoW3NlY3JldCwgLi4ua2V5c10pO1xuXG5cdHJldHVybiB7XG5cdFx0a19lbmM6IEJ1ZmZlci5mcm9tKFxuXHRcdFx0Y3J5cHRvLmhrZGZTeW5jKFxuXHRcdFx0XHQnc2hhMjU2Jyxcblx0XHRcdFx0QnVmZmVyLmFsbG9jKDApLFxuXHRcdFx0XHRpa20sXG5cdFx0XHRcdEJ1ZmZlci5mcm9tKCdhZXMtMjU2LWN0ci9lbmMvdjEnKSxcblx0XHRcdFx0MzIsXG5cdFx0XHQpLFxuXHRcdCksXG5cdFx0a19tYWM6IEJ1ZmZlci5mcm9tKFxuXHRcdFx0Y3J5cHRvLmhrZGZTeW5jKFxuXHRcdFx0XHQnc2hhMjU2Jyxcblx0XHRcdFx0QnVmZmVyLmFsbG9jKDApLFxuXHRcdFx0XHRpa20sXG5cdFx0XHRcdEJ1ZmZlci5mcm9tKCdobWFjLXNoYTI1Ni9tYWMvdjEnKSxcblx0XHRcdFx0MzIsXG5cdFx0XHQpLFxuXHRcdCksXG5cdH07XG59XG5cbi8qKlxuICogUHJlcGFyZSBlbmNyeXB0aW9uLlxuICpcbiAqIEBwYXJhbSBzZWNyZXRcbiAqIEBwYXJhbSBrZXlzXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHNlY3JldCBpcyBsZXNzIHRoYW4gMzIgYnl0ZXMgbG9uZy5cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiBhbnkgb2YgdGhlIGtleXMgYXJlIGxlc3MgdGhhbiAzMiBieXRlcyBsb25nLlxuICogQHJldHVybnMgVGhlIGNpcGhlciwgSVYsIGFuZCBzZWNyZXQuXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBhdXRob3IgQ2FpcXVlIEFyYXVqbyA8Y2FpcXVlQHBpZ2dseS5jb20uYnI+XG4gKiBAcmV0dXJuc1xuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENpcGhlckNUUihcblx0c2VjcmV0OiBCdWZmZXIsXG5cdGtleXM6IEFycmF5PEJ1ZmZlcj4gPSBbXSxcbik6IHsgY2lwaGVyOiBjcnlwdG8uQ2lwaGVyaXY7IGl2OiBCdWZmZXI7IGtfZW5jOiBCdWZmZXI7IGtfbWFjOiBCdWZmZXIgfSB7XG5cdGNvbnN0IHsga19lbmMsIGtfbWFjIH0gPSBkZXJpdmVDVFJFbmNyeXB0aW9uS2V5KHNlY3JldCwga2V5cyk7XG5cblx0Y29uc3QgaXYgPSBjcnlwdG8ucmFuZG9tQnl0ZXMoMTYpO1xuXHRjb25zdCBjaXBoZXIgPSBjcnlwdG8uY3JlYXRlQ2lwaGVyaXYoJ2Flcy0yNTYtY3RyJywga19lbmMsIGl2KTtcblxuXHRyZXR1cm4geyBjaXBoZXIsIGl2LCBrX2VuYywga19tYWMgfTtcbn1cblxuLyoqXG4gKiBFbmNyeXB0IGEgbWVzc2FnZSB1c2luZyBBRVMtMjU2LUNUUi5cbiAqXG4gKiBAcGFyYW0gc2VjcmV0IC0gVGhlIHNlY3JldCB0byBlbmNyeXB0LlxuICogQHBhcmFtIG1lc3NhZ2UgLSBUaGUgbWVzc2FnZSB0byBlbmNyeXB0LlxuICogQHBhcmFtIGtleXMgLSBUaGUga2V5cyB0byBlbmNyeXB0LlxuICogQHBhcmFtIGFhZCAtIFRoZSBhZGRpdGlvbmFsIGF1dGhlbnRpY2F0aW9uIGRhdGEuXG4gKiBAcmV0dXJucyBUaGUgZW5jcnlwdGVkIG1lc3NhZ2UuXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBhdXRob3IgQ2FpcXVlIEFyYXVqbyA8Y2FpcXVlQHBpZ2dseS5jb20uYnI+XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmNyeXB0Q1RSKFxuXHRzZWNyZXQ6IEJ1ZmZlcixcblx0bWVzc2FnZTogQnVmZmVyLFxuXHRrZXlzOiBBcnJheTxCdWZmZXI+ID0gW10sXG5cdGFhZD86IEJ1ZmZlcixcbik6IEJ1ZmZlciB7XG5cdGNvbnN0IHsgY2lwaGVyLCBpdiwga19tYWMgfSA9IGdldENpcGhlckNUUihzZWNyZXQsIGtleXMpO1xuXHRjb25zdCBlbmNyeXB0ZWQgPSBCdWZmZXIuY29uY2F0KFtjaXBoZXIudXBkYXRlKG1lc3NhZ2UpLCBjaXBoZXIuZmluYWwoKV0pO1xuXG5cdHJldHVybiBCdWZmZXIuY29uY2F0KFtcblx0XHRpdixcblx0XHRlbmNyeXB0ZWQsXG5cdFx0Y3J5cHRvXG5cdFx0XHQuY3JlYXRlSG1hYygnc2hhMjU2Jywga19tYWMpXG5cdFx0XHQudXBkYXRlKGl2KVxuXHRcdFx0LnVwZGF0ZShhYWQgPz8gQnVmZmVyLmFsbG9jKDApKVxuXHRcdFx0LnVwZGF0ZShlbmNyeXB0ZWQpXG5cdFx0XHQuZGlnZXN0KCksXG5cdF0pO1xufVxuXG4vKipcbiAqIERlY3J5cHQgYSBtZXNzYWdlIHVzaW5nIEFFUy0yNTYtQ1RSLlxuICpcbiAqIEBwYXJhbSBzZWNyZXRcbiAqIEBwYXJhbSBibG9iIC0gVGhlIG1lc3NhZ2UgdG8gZGVjcnlwdC5cbiAqIEBwYXJhbSBrZXlzIC0gVGhlIGtleXMgdG8gZGVjcnlwdC5cbiAqIEByZXR1cm5zIFRoZSBkZWNyeXB0ZWQgbWVzc2FnZS5cbiAqIEBzaW5jZSAwLjEuMFxuICogQGF1dGhvciBDYWlxdWUgQXJhdWpvIDxjYWlxdWVAcGlnZ2x5LmNvbS5icj5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY3J5cHRDVFIoXG5cdHNlY3JldDogQnVmZmVyLFxuXHRibG9iOiBCdWZmZXIsXG5cdGtleXM6IEFycmF5PEJ1ZmZlcj4gPSBbXSxcblx0YWFkPzogQnVmZmVyLFxuKTogQnVmZmVyIHtcblx0aWYgKHNlY3JldC5sZW5ndGggPCAzMikge1xuXHRcdHRocm93IEVycm9yKCdTZWNyZXQgbXVzdCBiZSBhdCBsZWFzdCAzMiBieXRlcyBsb25nLicpO1xuXHR9XG5cblx0aWYgKGtleXMubGVuZ3RoID4gMCAmJiBrZXlzLnNvbWUoa2V5ID0+IGtleS5sZW5ndGggPCAzMikpIHtcblx0XHR0aHJvdyBFcnJvcignS2V5cyBtdXN0IGJlIGF0IGxlYXN0IDMyIGJ5dGVzIGxvbmcuJyk7XG5cdH1cblxuXHRjb25zdCB7IGtfZW5jLCBrX21hYyB9ID0gZGVyaXZlQ1RSRW5jcnlwdGlvbktleShzZWNyZXQsIGtleXMpO1xuXG5cdGNvbnN0IGl2ID0gYmxvYi5zdWJhcnJheSgwLCAxNik7XG5cdGNvbnN0IHRhZyA9IGJsb2Iuc3ViYXJyYXkoYmxvYi5sZW5ndGggLSAzMik7XG5cdGNvbnN0IGVuY3J5cHRlZCA9IGJsb2Iuc3ViYXJyYXkoMTYsIGJsb2IubGVuZ3RoIC0gMzIpO1xuXHRjb25zdCBtYWMgPSBjcnlwdG9cblx0XHQuY3JlYXRlSG1hYygnc2hhMjU2Jywga19tYWMpXG5cdFx0LnVwZGF0ZShpdilcblx0XHQudXBkYXRlKGFhZCA/PyBCdWZmZXIuYWxsb2MoMCkpXG5cdFx0LnVwZGF0ZShlbmNyeXB0ZWQpXG5cdFx0LmRpZ2VzdCgpO1xuXG5cdGlmIChtYWMubGVuZ3RoICE9PSB0YWcubGVuZ3RoIHx8ICFjcnlwdG8udGltaW5nU2FmZUVxdWFsKG1hYywgdGFnKSkge1xuXHRcdHRocm93IEVycm9yKCdJbnZhbGlkIE1BQycpO1xuXHR9XG5cblx0Y29uc3QgZGVjaXBoZXIgPSBjcnlwdG8uY3JlYXRlRGVjaXBoZXJpdignYWVzLTI1Ni1jdHInLCBrX2VuYywgaXYpO1xuXHRyZXR1cm4gQnVmZmVyLmNvbmNhdChbZGVjaXBoZXIudXBkYXRlKGVuY3J5cHRlZCksIGRlY2lwaGVyLmZpbmFsKCldKTtcbn1cblxuLyoqXG4gKiBFbmNyeXB0IGEgbWVzc2FnZSB1c2luZyBBRVMtMjU2LUNUUi5cbiAqXG4gKiBAcGFyYW0gc2VjcmV0IC0gVGhlIHNlY3JldCB0byBlbmNyeXB0LlxuICogQHBhcmFtIGtleXMgLSBUaGUga2V5cyB0byBlbmNyeXB0LlxuICogQHBhcmFtIGFhZCAtIFRoZSBhZGRpdGlvbmFsIGF1dGhlbnRpY2F0aW9uIGRhdGEuXG4gKiBAcmV0dXJucyBUaGUgZW5jcnlwdGVkIG1lc3NhZ2UuXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBhdXRob3IgQ2FpcXVlIEFyYXVqbyA8Y2FpcXVlQHBpZ2dseS5jb20uYnI+XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmNyeXB0Q1RSU3RyZWFtKFxuXHRzZWNyZXQ6IEJ1ZmZlcixcblx0a2V5czogQXJyYXk8QnVmZmVyPiA9IFtdLFxuXHRhYWQ/OiBCdWZmZXIsXG4pOiBUcmFuc2Zvcm0ge1xuXHRjb25zdCB7IGtfZW5jLCBrX21hYyB9ID0gZGVyaXZlQ1RSRW5jcnlwdGlvbktleShzZWNyZXQsIGtleXMpO1xuXHRjb25zdCBpdiA9IGNyeXB0by5yYW5kb21CeXRlcygxNik7XG5cdGNvbnN0IGNpcGhlciA9IGNyeXB0by5jcmVhdGVDaXBoZXJpdignYWVzLTI1Ni1jdHInLCBrX2VuYywgaXYpO1xuXHRjb25zdCBtYWMgPSBjcnlwdG8uY3JlYXRlSG1hYygnc2hhMjU2Jywga19tYWMpO1xuXG5cdGxldCBpdlB1c2hlZCA9IGZhbHNlO1xuXG5cdG1hYy51cGRhdGUoaXYpO1xuXG5cdGlmIChhYWQpIHtcblx0XHRtYWMudXBkYXRlKGFhZCk7XG5cdH1cblxuXHRjb25zdCB0cmFuc2Zvcm0gPSBuZXcgVHJhbnNmb3JtKHtcblx0XHRmbHVzaChjYWxsYmFjaykge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29uc3QgbGFzdCA9IGNpcGhlci5maW5hbCgpO1xuXG5cdFx0XHRcdGlmIChsYXN0Lmxlbmd0aCkge1xuXHRcdFx0XHRcdHRoaXMucHVzaChsYXN0KTtcblx0XHRcdFx0XHRtYWMudXBkYXRlKGxhc3QpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5wdXNoKG1hYy5kaWdlc3QoKSk7IC8vIHRhZygzMilcblx0XHRcdFx0Y2FsbGJhY2soKTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0Y2FsbGJhY2soZSBhcyBFcnJvcik7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHR0cmFuc2Zvcm0oXG5cdFx0XHR0aGlzOiBUcmFuc2Zvcm0sXG5cdFx0XHRjaHVuazogYW55LFxuXHRcdFx0ZW5jb2Rpbmc6IEJ1ZmZlckVuY29kaW5nLFxuXHRcdFx0Y2FsbGJhY2s6IFRyYW5zZm9ybUNhbGxiYWNrLFxuXHRcdCk6IHZvaWQge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aWYgKCFpdlB1c2hlZCkge1xuXHRcdFx0XHRcdHRoaXMucHVzaChpdik7XG5cdFx0XHRcdFx0aXZQdXNoZWQgPSB0cnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgY3QgPSBjaXBoZXIudXBkYXRlKGNodW5rKTtcblxuXHRcdFx0XHRpZiAoY3QubGVuZ3RoKSB7XG5cdFx0XHRcdFx0dGhpcy5wdXNoKGN0KTtcblx0XHRcdFx0XHRtYWMudXBkYXRlKGN0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNhbGxiYWNrKCk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdGNhbGxiYWNrKGUgYXMgRXJyb3IpO1xuXHRcdFx0fVxuXHRcdH0sXG5cdH0pO1xuXG5cdHJldHVybiB0cmFuc2Zvcm07XG59XG5cbi8qKlxuICogRGVjcnlwdCBhIG1lc3NhZ2UgdXNpbmcgQUVTLTI1Ni1DVFIuXG4gKlxuICogQHBhcmFtIHNlY3JldCAtIFRoZSBzZWNyZXQgdG8gZGVjcnlwdC5cbiAqIEBwYXJhbSBrZXlzIC0gVGhlIGtleXMgdG8gZGVjcnlwdC5cbiAqIEBwYXJhbSBhYWQgLSBUaGUgYWRkaXRpb25hbCBhdXRoZW50aWNhdGlvbiBkYXRhLlxuICogQHJldHVybnMgVGhlIGRlY3J5cHRlZCBtZXNzYWdlLlxuICogQHNpbmNlIDAuMS4wXG4gKiBAYXV0aG9yIENhaXF1ZSBBcmF1am8gPGNhaXF1ZUBwaWdnbHkuY29tLmJyPlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjcnlwdENUUlN0cmVhbShcblx0c2VjcmV0OiBCdWZmZXIsXG5cdGtleXM6IEFycmF5PEJ1ZmZlcj4gPSBbXSxcblx0YWFkPzogQnVmZmVyLFxuKTogVHJhbnNmb3JtIHtcblx0Y29uc3QgeyBrX2VuYywga19tYWMgfSA9IGRlcml2ZUNUUkVuY3J5cHRpb25LZXkoc2VjcmV0LCBrZXlzKTtcblx0Y29uc3QgbWFjID0gY3J5cHRvLmNyZWF0ZUhtYWMoJ3NoYTI1NicsIGtfbWFjKTtcblxuXHRsZXQgaXY6IEJ1ZmZlciB8IG51bGwgPSBudWxsO1xuXHRsZXQgZGVjaXBoZXI6IGNyeXB0by5EZWNpcGhlcml2IHwgbnVsbCA9IG51bGw7XG5cblx0bGV0IHRhaWwgPSBCdWZmZXIuYWxsb2MoMCk7XG5cdGNvbnN0IG1hY19idWZmZXI6IEJ1ZmZlcltdID0gW107XG5cblx0aWYgKGFhZCkge1xuXHRcdG1hYy51cGRhdGUoYWFkKTtcblx0fVxuXG5cdGNvbnN0IHRyYW5zZm9ybSA9IG5ldyBUcmFuc2Zvcm0oe1xuXHRcdGZsdXNoKGNhbGxiYWNrKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRpZiAoIWl2IHx8ICFkZWNpcGhlciB8fCB0YWlsLmxlbmd0aCAhPT0gMzIpIHtcblx0XHRcdFx0XHRyZXR1cm4gY2FsbGJhY2soXG5cdFx0XHRcdFx0XHRuZXcgRXJyb3IoJ01hbGZvcm1lZCBjaXBoZXJ0ZXh0OiBtaXNzaW5nIElWIG9yIHRhZy4nKSxcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgY2FsYyA9IG1hYy5kaWdlc3QoKTtcblxuXHRcdFx0XHRpZiAoY2FsYy5sZW5ndGggIT09IHRhaWwubGVuZ3RoIHx8ICFjcnlwdG8udGltaW5nU2FmZUVxdWFsKGNhbGMsIHRhaWwpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGNhbGxiYWNrKG5ldyBFcnJvcignSW52YWxpZCBNQUMnKSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRtYWNfYnVmZmVyLnB1c2goZGVjaXBoZXIuZmluYWwoKSk7XG5cblx0XHRcdFx0Zm9yIChjb25zdCBiIG9mIG1hY19idWZmZXIpIHtcblx0XHRcdFx0XHR0aGlzLnB1c2goYik7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjYWxsYmFjaygpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRjYWxsYmFjayhlIGFzIEVycm9yKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdHRyYW5zZm9ybShfY2h1bmssIGVuY29kaW5nLCBjYWxsYmFjaykge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0bGV0IGNodW5rID0gX2NodW5rO1xuXG5cdFx0XHRcdGlmICghaXYpIHtcblx0XHRcdFx0XHRjb25zdCBjb21iaW5lZCA9IEJ1ZmZlci5jb25jYXQoW3RhaWwsIGNodW5rXSk7XG5cdFx0XHRcdFx0aWYgKGNvbWJpbmVkLmxlbmd0aCA8IDE2KSB7XG5cdFx0XHRcdFx0XHR0YWlsID0gY29tYmluZWQ7XG5cdFx0XHRcdFx0XHRyZXR1cm4gY2FsbGJhY2soKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpdiA9IGNvbWJpbmVkLnN1YmFycmF5KDAsIDE2KTtcblx0XHRcdFx0XHRkZWNpcGhlciA9IGNyeXB0by5jcmVhdGVEZWNpcGhlcml2KCdhZXMtMjU2LWN0cicsIGtfZW5jLCBpdik7XG5cdFx0XHRcdFx0bWFjLnVwZGF0ZShpdik7XG5cblx0XHRcdFx0XHRjaHVuayA9IGNvbWJpbmVkLnN1YmFycmF5KDE2KTtcblx0XHRcdFx0XHR0YWlsID0gQnVmZmVyLmFsbG9jKDApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgdG90YWwgPSBCdWZmZXIuY29uY2F0KFt0YWlsLCBjaHVua10pO1xuXG5cdFx0XHRcdGlmICh0b3RhbC5sZW5ndGggPD0gMzIpIHtcblx0XHRcdFx0XHR0YWlsID0gdG90YWw7XG5cdFx0XHRcdFx0cmV0dXJuIGNhbGxiYWNrKCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCBmZWVkID0gdG90YWwuc3ViYXJyYXkoMCwgdG90YWwubGVuZ3RoIC0gMzIpO1xuXHRcdFx0XHR0YWlsID0gdG90YWwuc3ViYXJyYXkodG90YWwubGVuZ3RoIC0gMzIpO1xuXG5cdFx0XHRcdG1hYy51cGRhdGUoZmVlZCk7XG5cdFx0XHRcdG1hY19idWZmZXIucHVzaChkZWNpcGhlciEudXBkYXRlKGZlZWQpKTtcblxuXHRcdFx0XHRjYWxsYmFjaygpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRjYWxsYmFjayhlIGFzIEVycm9yKTtcblx0XHRcdH1cblx0XHR9LFxuXHR9KTtcblxuXHRyZXR1cm4gdHJhbnNmb3JtO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlIGEgc2VjcmV0IEZST00gYSBzZWVkIFdJVEggU0hBLTI1Ni5cbiAqXG4gKiBAcGFyYW0gc2VlZFxuICogQHJldHVybnMgVGhlIHNlY3JldC5cbiAqIEBzaW5jZSAwLjEuMFxuICogQGF1dGhvciBDYWlxdWUgQXJhdWpvIDxjYWlxdWVAcGlnZ2x5LmNvbS5icj5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlU2VjcmV0KHNlZWQ/OiBCdWZmZXIpOiBCdWZmZXIge1xuXHRyZXR1cm4gY3J5cHRvXG5cdFx0LmNyZWF0ZUhhc2goJ3NoYTI1NicpXG5cdFx0LnVwZGF0ZShzZWVkID8/IGNyeXB0by5yYW5kb21CeXRlcygzMikpXG5cdFx0LmRpZ2VzdCgpO1xufVxuIl0sIm1hcHBpbmdz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
462
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJUcmFuc2Zvcm0iLCJjcnlwdG8iLCJzaGEyNTYiLCJoa2RmIiwiZGVyaXZlR0NNRW5jcnlwdGlvbktleSIsInNlY3JldCIsImtleXMiLCJCdWZmZXIiLCJmcm9tIiwiaGtkZlN5bmMiLCJhbGxvYyIsImNvbmNhdCIsImdldENpcGhlckdDTSIsImtleSIsIml2IiwicmFuZG9tQnl0ZXMiLCJjaXBoZXIiLCJjcmVhdGVDaXBoZXJpdiIsImVuY3J5cHRHQ00iLCJtZXNzYWdlIiwiYWFkIiwibGVuZ3RoIiwiRXJyb3IiLCJzb21lIiwic2V0QUFEIiwiY3QiLCJ1cGRhdGUiLCJmaW5hbCIsInRhZyIsImdldEF1dGhUYWciLCJkZWNyeXB0R0NNIiwiYmxvYiIsInN1YmFycmF5IiwiZGVjaXBoZXIiLCJjcmVhdGVEZWNpcGhlcml2Iiwic2V0QXV0aFRhZyIsImVuY3J5cHRHQ01TdHJlYW0iLCJpdlB1c2hlZCIsInRyYW5zZm9ybSIsImZsdXNoIiwiY2FsbGJhY2siLCJwdXNoIiwiY2h1bmsiLCJlbmNvZGluZyIsImRlY3J5cHRHQ01TdHJlYW0iLCJ0YWlsIiwiZSIsImRhdGEiLCJ0b3RhbCIsImZlZWQiLCJkZXJpdmVDVFJFbmNyeXB0aW9uS2V5IiwiaWttIiwia19lbmMiLCJrX21hYyIsImdldENpcGhlckNUUiIsImVuY3J5cHRDVFIiLCJlbmNyeXB0ZWQiLCJjcmVhdGVIbWFjIiwiZGlnZXN0IiwiZGVjcnlwdENUUiIsIm1hYyIsInRpbWluZ1NhZmVFcXVhbCIsImVuY3J5cHRDVFJTdHJlYW0iLCJsYXN0IiwiZGVjcnlwdENUUlN0cmVhbSIsIm1hY19idWZmZXIiLCJjYWxjIiwiYiIsIl9jaHVuayIsImNvbWJpbmVkIiwiZ2VuZXJhdGVTZWNyZXQiLCJzZWVkIiwib3B0cyIsInNhbHQiLCJ2ZXJzaW9uIiwiY3JlYXRlSGFzaCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb3JlL3NlY3JldHMvYWVzMjU2LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRyYW5zZm9ybUNhbGxiYWNrLCBUcmFuc2Zvcm0gfSBmcm9tICdub2RlOnN0cmVhbSc7XG5pbXBvcnQgY3J5cHRvIGZyb20gJ25vZGU6Y3J5cHRvJztcblxuaW1wb3J0IHsgc2hhMjU2IH0gZnJvbSAnQG5vYmxlL2hhc2hlcy9zaGEyLmpzJztcbmltcG9ydCB7IGhrZGYgfSBmcm9tICdAbm9ibGUvaGFzaGVzL2hrZGYuanMnO1xuXG4vKipcbiAqIERlcml2ZSBhbiBlbmNyeXB0aW9uIGtleSBmcm9tIGEgc2VjcmV0IGFuZCBrZXlzLlxuICpcbiAqIEBwYXJhbSBzZWNyZXQgLSBUaGUgc2VjcmV0IHRvIGRlcml2ZSB0aGUga2V5IGZyb20uXG4gKiBAcGFyYW0ga2V5cyAtIFRoZSBrZXlzIHRvIGRlcml2ZSB0aGUga2V5IGZyb20uXG4gKiBAcmV0dXJucyBUaGUgZGVyaXZlZCBrZXkuXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBhdXRob3IgQ2FpcXVlIEFyYXVqbyA8Y2FpcXVlQHBpZ2dseS5jb20uYnI+XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZXJpdmVHQ01FbmNyeXB0aW9uS2V5KHNlY3JldDogQnVmZmVyLCBrZXlzOiBCdWZmZXJbXSA9IFtdKTogQnVmZmVyIHtcblx0cmV0dXJuIEJ1ZmZlci5mcm9tKFxuXHRcdGNyeXB0by5oa2RmU3luYyhcblx0XHRcdCdzaGEyNTYnLFxuXHRcdFx0QnVmZmVyLmFsbG9jKDApLFxuXHRcdFx0QnVmZmVyLmNvbmNhdChbc2VjcmV0LCAuLi5rZXlzXSksXG5cdFx0XHRCdWZmZXIuZnJvbSgnYWVzLTI1Ni1nY20vZW5jL3YxJyksXG5cdFx0XHQzMixcblx0XHQpLFxuXHQpO1xufVxuXG4vKipcbiAqIFByZXBhcmUgZW5jcnlwdGlvbi5cbiAqXG4gKiBAcGFyYW0gc2VjcmV0XG4gKiBAcGFyYW0ga2V5c1xuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBzZWNyZXQgaXMgbGVzcyB0aGFuIDMyIGJ5dGVzIGxvbmcuXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgYW55IG9mIHRoZSBrZXlzIGFyZSBsZXNzIHRoYW4gMzIgYnl0ZXMgbG9uZy5cbiAqIEByZXR1cm5zIFRoZSBjaXBoZXIsIElWLCBhbmQgc2VjcmV0LlxuICogQHNpbmNlIDAuMS4wXG4gKiBAYXV0aG9yIENhaXF1ZSBBcmF1am8gPGNhaXF1ZUBwaWdnbHkuY29tLmJyPlxuICogQHJldHVybnNcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDaXBoZXJHQ00oXG5cdHNlY3JldDogQnVmZmVyLFxuXHRrZXlzOiBBcnJheTxCdWZmZXI+ID0gW10sXG4pOiB7IGNpcGhlcjogY3J5cHRvLkNpcGhlckdDTTsgaXY6IEJ1ZmZlciB9IHtcblx0Y29uc3Qga2V5ID0gZGVyaXZlR0NNRW5jcnlwdGlvbktleShzZWNyZXQsIGtleXMpO1xuXHRjb25zdCBpdiA9IGNyeXB0by5yYW5kb21CeXRlcygxMik7IC8vIEBub3RlIDk2LWJpdCBJViByZWNvbW1lbmRlZFxuXHRjb25zdCBjaXBoZXIgPSBjcnlwdG8uY3JlYXRlQ2lwaGVyaXYoJ2Flcy0yNTYtZ2NtJywga2V5LCBpdik7XG5cblx0cmV0dXJuIHsgY2lwaGVyLCBpdiB9O1xufVxuXG4vKipcbiAqIEVuY3J5cHQgYSBtZXNzYWdlIHVzaW5nIEFFUy0yNTYtR0NNLlxuICpcbiAqIEBwYXJhbSBzZWNyZXQgLSBUaGUgc2VjcmV0IHRvIGVuY3J5cHQuXG4gKiBAcGFyYW0gbWVzc2FnZSAtIFRoZSBtZXNzYWdlIHRvIGVuY3J5cHQuXG4gKiBAcGFyYW0ga2V5cyAtIFRoZSBrZXlzIHRvIGVuY3J5cHQuXG4gKiBAcGFyYW0gYWFkIC0gVGhlIGFkZGl0aW9uYWwgYXV0aGVudGljYXRpb24gZGF0YS5cbiAqIEByZXR1cm5zIFRoZSBlbmNyeXB0ZWQgbWVzc2FnZS5cbiAqIEBzaW5jZSAwLjEuMFxuICogQGF1dGhvciBDYWlxdWUgQXJhdWpvIDxjYWlxdWVAcGlnZ2x5LmNvbS5icj5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuY3J5cHRHQ00oXG5cdHNlY3JldDogQnVmZmVyLFxuXHRtZXNzYWdlOiBCdWZmZXIsXG5cdGtleXM6IEFycmF5PEJ1ZmZlcj4gPSBbXSxcblx0YWFkPzogQnVmZmVyLFxuKTogQnVmZmVyIHtcblx0aWYgKHNlY3JldC5sZW5ndGggPCAzMikge1xuXHRcdHRocm93IEVycm9yKCdTZWNyZXQgbXVzdCBiZSBhdCBsZWFzdCAzMiBieXRlcyBsb25nLicpO1xuXHR9XG5cblx0aWYgKGtleXMubGVuZ3RoID4gMCAmJiBrZXlzLnNvbWUoa2V5ID0+IGtleS5sZW5ndGggPCAzMikpIHtcblx0XHR0aHJvdyBFcnJvcignS2V5cyBtdXN0IGJlIGF0IGxlYXN0IDMyIGJ5dGVzIGxvbmcuJyk7XG5cdH1cblxuXHRjb25zdCB7IGNpcGhlciwgaXYgfSA9IGdldENpcGhlckdDTShzZWNyZXQsIGtleXMpO1xuXG5cdGlmIChhYWQpIHtcblx0XHRjaXBoZXIuc2V0QUFEKGFhZCk7XG5cdH1cblxuXHRjb25zdCBjdCA9IEJ1ZmZlci5jb25jYXQoW2NpcGhlci51cGRhdGUobWVzc2FnZSksIGNpcGhlci5maW5hbCgpXSk7XG5cdGNvbnN0IHRhZyA9IGNpcGhlci5nZXRBdXRoVGFnKCk7XG5cblx0cmV0dXJuIEJ1ZmZlci5jb25jYXQoW2l2LCBjdCwgdGFnXSk7XG59XG5cbi8qKlxuICogRGVjcnlwdCBhIG1lc3NhZ2UgdXNpbmcgQUVTLTI1Ni1HQ00uXG4gKlxuICogQHBhcmFtIHNlY3JldCAtIFRoZSBzZWNyZXQgdG8gZGVjcnlwdC5cbiAqIEBwYXJhbSBibG9iIC0gVGhlIG1lc3NhZ2UgdG8gZGVjcnlwdC5cbiAqIEBwYXJhbSBrZXlzIC0gVGhlIGtleXMgdG8gZGVjcnlwdC5cbiAqIEBwYXJhbSBhYWQgLSBUaGUgYWRkaXRpb25hbCBhdXRoZW50aWNhdGlvbiBkYXRhLlxuICogQHJldHVybnMgVGhlIGRlY3J5cHRlZCBtZXNzYWdlLlxuICogQHNpbmNlIDAuMS4wXG4gKiBAYXV0aG9yIENhaXF1ZSBBcmF1am8gPGNhaXF1ZUBwaWdnbHkuY29tLmJyPlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjcnlwdEdDTShcblx0c2VjcmV0OiBCdWZmZXIsXG5cdGJsb2I6IEJ1ZmZlcixcblx0a2V5czogQXJyYXk8QnVmZmVyPiA9IFtdLFxuXHRhYWQ/OiBCdWZmZXIsXG4pOiBCdWZmZXIge1xuXHRpZiAoc2VjcmV0Lmxlbmd0aCA8IDMyKSB7XG5cdFx0dGhyb3cgRXJyb3IoJ1NlY3JldCBtdXN0IGJlIGF0IGxlYXN0IDMyIGJ5dGVzIGxvbmcuJyk7XG5cdH1cblxuXHRpZiAoa2V5cy5sZW5ndGggPiAwICYmIGtleXMuc29tZShrZXkgPT4ga2V5Lmxlbmd0aCA8IDMyKSkge1xuXHRcdHRocm93IEVycm9yKCdLZXlzIG11c3QgYmUgYXQgbGVhc3QgMzIgYnl0ZXMgbG9uZy4nKTtcblx0fVxuXG5cdGlmIChibG9iLmxlbmd0aCA8IDEyICsgMTYpIHtcblx0XHR0aHJvdyBFcnJvcignQmxvYiBtdXN0IGJlIGF0IGxlYXN0IDEyKzE2IGJ5dGVzIGxvbmcuJyk7XG5cdH1cblxuXHRjb25zdCBrZXkgPSBkZXJpdmVHQ01FbmNyeXB0aW9uS2V5KHNlY3JldCwga2V5cyk7XG5cdGNvbnN0IGl2ID0gYmxvYi5zdWJhcnJheSgwLCAxMik7XG5cdGNvbnN0IHRhZyA9IGJsb2Iuc3ViYXJyYXkoYmxvYi5sZW5ndGggLSAxNik7XG5cdGNvbnN0IGN0ID0gYmxvYi5zdWJhcnJheSgxMiwgYmxvYi5sZW5ndGggLSAxNik7XG5cblx0Y29uc3QgZGVjaXBoZXIgPSBjcnlwdG8uY3JlYXRlRGVjaXBoZXJpdignYWVzLTI1Ni1nY20nLCBrZXksIGl2KTtcblxuXHRpZiAoYWFkKSB7XG5cdFx0ZGVjaXBoZXIuc2V0QUFEKGFhZCk7XG5cdH1cblxuXHRkZWNpcGhlci5zZXRBdXRoVGFnKHRhZyk7XG5cdHJldHVybiBCdWZmZXIuY29uY2F0KFtkZWNpcGhlci51cGRhdGUoY3QpLCBkZWNpcGhlci5maW5hbCgpXSk7XG59XG5cbi8qKlxuICogRW5jcnlwdCBhIG1lc3NhZ2UgdXNpbmcgQUVTLTI1Ni1HQ00uXG4gKlxuICogQHBhcmFtIHNlY3JldCAtIFRoZSBzZWNyZXQgdG8gZW5jcnlwdC5cbiAqIEBwYXJhbSBrZXlzIC0gVGhlIGtleXMgdG8gZW5jcnlwdC5cbiAqIEBwYXJhbSBhYWQgLSBUaGUgYWRkaXRpb25hbCBhdXRoZW50aWNhdGlvbiBkYXRhLlxuICogQHJldHVybnMgVGhlIGVuY3J5cHRlZCBtZXNzYWdlLlxuICogQHNpbmNlIDAuMS4wXG4gKiBAYXV0aG9yIENhaXF1ZSBBcmF1am8gPGNhaXF1ZUBwaWdnbHkuY29tLmJyPlxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5jcnlwdEdDTVN0cmVhbShcblx0c2VjcmV0OiBCdWZmZXIsXG5cdGtleXM6IEFycmF5PEJ1ZmZlcj4gPSBbXSxcblx0YWFkPzogQnVmZmVyLFxuKTogVHJhbnNmb3JtIHtcblx0Y29uc3QgeyBjaXBoZXIsIGl2IH0gPSBnZXRDaXBoZXJHQ00oc2VjcmV0LCBrZXlzKTtcblxuXHRpZiAoYWFkKSB7XG5cdFx0Y2lwaGVyLnNldEFBRChhYWQpO1xuXHR9XG5cblx0bGV0IGl2UHVzaGVkID0gZmFsc2U7XG5cblx0Y29uc3QgdHJhbnNmb3JtID0gbmV3IFRyYW5zZm9ybSh7XG5cdFx0Zmx1c2goY2FsbGJhY2spIHtcblx0XHRcdHRoaXMucHVzaChjaXBoZXIuZmluYWwoKSk7XG5cdFx0XHR0aGlzLnB1c2goY2lwaGVyLmdldEF1dGhUYWcoKSk7XG5cdFx0XHRjYWxsYmFjaygpO1xuXHRcdH0sXG5cdFx0dHJhbnNmb3JtKFxuXHRcdFx0dGhpczogVHJhbnNmb3JtLFxuXHRcdFx0Y2h1bms6IGFueSxcblx0XHRcdGVuY29kaW5nOiBCdWZmZXJFbmNvZGluZyxcblx0XHRcdGNhbGxiYWNrOiBUcmFuc2Zvcm1DYWxsYmFjayxcblx0XHQpOiB2b2lkIHtcblx0XHRcdGlmICghaXZQdXNoZWQpIHtcblx0XHRcdFx0dGhpcy5wdXNoKGl2KTtcblx0XHRcdFx0aXZQdXNoZWQgPSB0cnVlO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLnB1c2goY2lwaGVyLnVwZGF0ZShjaHVuaykpO1xuXHRcdFx0Y2FsbGJhY2soKTtcblx0XHR9LFxuXHR9KTtcblxuXHRyZXR1cm4gdHJhbnNmb3JtO1xufVxuXG4vKipcbiAqIERlY3J5cHQgYSBtZXNzYWdlIHVzaW5nIEFFUy0yNTYtR0NNLlxuICpcbiAqIEBwYXJhbSBzZWNyZXQgLSBUaGUgc2VjcmV0IHRvIGRlY3J5cHQuXG4gKiBAcGFyYW0ga2V5cyAtIFRoZSBrZXlzIHRvIGRlY3J5cHQuXG4gKiBAcGFyYW0gYWFkIC0gVGhlIGFkZGl0aW9uYWwgYXV0aGVudGljYXRpb24gZGF0YS5cbiAqIEByZXR1cm5zIFRoZSBkZWNyeXB0ZWQgbWVzc2FnZS5cbiAqIEBzaW5jZSAwLjEuMFxuICogQGF1dGhvciBDYWlxdWUgQXJhdWpvIDxjYWlxdWVAcGlnZ2x5LmNvbS5icj5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY3J5cHRHQ01TdHJlYW0oXG5cdHNlY3JldDogQnVmZmVyLFxuXHRrZXlzOiBBcnJheTxCdWZmZXI+ID0gW10sXG5cdGFhZD86IEJ1ZmZlcixcbik6IFRyYW5zZm9ybSB7XG5cdGNvbnN0IGtleSA9IGRlcml2ZUdDTUVuY3J5cHRpb25LZXkoc2VjcmV0LCBrZXlzKTtcblxuXHRsZXQgaXY6IEJ1ZmZlciB8IG51bGwgPSBudWxsO1xuXHRsZXQgZGVjaXBoZXI6IGNyeXB0by5EZWNpcGhlckdDTSB8IG51bGwgPSBudWxsO1xuXHRsZXQgdGFpbCA9IEJ1ZmZlci5hbGxvYygwKTtcblxuXHRjb25zdCB0cmFuc2Zvcm0gPSBuZXcgVHJhbnNmb3JtKHtcblx0XHRmbHVzaChjYWxsYmFjaykge1xuXHRcdFx0aWYgKCFkZWNpcGhlciB8fCAhaXYgfHwgdGFpbC5sZW5ndGggIT09IDE2KSB7XG5cdFx0XHRcdHJldHVybiBjYWxsYmFjayhuZXcgRXJyb3IoJ01hbGZvcm1lZCBjaXBoZXJ0ZXh0IChtaXNzaW5nIHRhZykuJykpO1xuXHRcdFx0fVxuXG5cdFx0XHR0cnkge1xuXHRcdFx0XHRkZWNpcGhlci5zZXRBdXRoVGFnKHRhaWwpO1xuXHRcdFx0XHR0aGlzLnB1c2goZGVjaXBoZXIuZmluYWwoKSk7XG5cdFx0XHRcdGNhbGxiYWNrKCk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdGNhbGxiYWNrKGUgYXMgRXJyb3IpO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0dHJhbnNmb3JtKGNodW5rLCBlbmNvZGluZywgY2FsbGJhY2spIHtcblx0XHRcdGxldCBkYXRhID0gY2h1bms7XG5cblx0XHRcdGlmICghaXYpIHtcblx0XHRcdFx0aWYgKHRhaWwubGVuZ3RoKSB7XG5cdFx0XHRcdFx0ZGF0YSA9IEJ1ZmZlci5jb25jYXQoW3RhaWwsIGNodW5rXSk7XG5cdFx0XHRcdFx0dGFpbCA9IEJ1ZmZlci5hbGxvYygwKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChkYXRhLmxlbmd0aCA8IDEyKSB7XG5cdFx0XHRcdFx0dGFpbCA9IGRhdGE7XG5cdFx0XHRcdFx0cmV0dXJuIGNhbGxiYWNrKCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpdiA9IGRhdGEuc3ViYXJyYXkoMCwgMTIpO1xuXHRcdFx0XHRkZWNpcGhlciA9IGNyeXB0by5jcmVhdGVEZWNpcGhlcml2KFxuXHRcdFx0XHRcdCdhZXMtMjU2LWdjbScsXG5cdFx0XHRcdFx0a2V5LFxuXHRcdFx0XHRcdGl2LFxuXHRcdFx0XHQpIGFzIGNyeXB0by5EZWNpcGhlckdDTTtcblxuXHRcdFx0XHRpZiAoYWFkKSB7XG5cdFx0XHRcdFx0ZGVjaXBoZXIuc2V0QUFEKGFhZCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRkYXRhID0gZGF0YS5zdWJhcnJheSgxMik7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHRvdGFsID0gQnVmZmVyLmNvbmNhdChbdGFpbCwgZGF0YV0pO1xuXG5cdFx0XHRpZiAodG90YWwubGVuZ3RoIDw9IDE2KSB7XG5cdFx0XHRcdHRhaWwgPSB0b3RhbDtcblx0XHRcdFx0cmV0dXJuIGNhbGxiYWNrKCk7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGZlZWQgPSB0b3RhbC5zdWJhcnJheSgwLCB0b3RhbC5sZW5ndGggLSAxNik7XG5cdFx0XHR0YWlsID0gdG90YWwuc3ViYXJyYXkodG90YWwubGVuZ3RoIC0gMTYpO1xuXG5cdFx0XHR0aGlzLnB1c2goZGVjaXBoZXIhLnVwZGF0ZShmZWVkKSk7XG5cdFx0XHRjYWxsYmFjaygpO1xuXHRcdH0sXG5cdH0pO1xuXG5cdHJldHVybiB0cmFuc2Zvcm07XG59XG5cbi8qKlxuICogRGVyaXZlIGFuIGVuY3J5cHRpb24ga2V5IGZyb20gYSBzZWNyZXQgYW5kIGtleXMuXG4gKlxuICogQHBhcmFtIHNlY3JldFxuICogQHBhcmFtIGtleXNcbiAqIEByZXR1cm5zIFRoZSBkZXJpdmVkIGtleS5cbiAqIEBzaW5jZSAwLjEuMFxuICogQGF1dGhvciBDYWlxdWUgQXJhdWpvIDxjYWlxdWVAcGlnZ2x5LmNvbS5icj5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlcml2ZUNUUkVuY3J5cHRpb25LZXkoXG5cdHNlY3JldDogQnVmZmVyLFxuXHRrZXlzOiBCdWZmZXJbXSA9IFtdLFxuKTogeyBrX2VuYzogQnVmZmVyOyBrX21hYzogQnVmZmVyIH0ge1xuXHRpZiAoc2VjcmV0Lmxlbmd0aCA8IDMyKSB7XG5cdFx0dGhyb3cgRXJyb3IoJ1NlY3JldCBtdXN0IGJlIGF0IGxlYXN0IDMyIGJ5dGVzIGxvbmcuJyk7XG5cdH1cblxuXHRpZiAoa2V5cy5sZW5ndGggPiAwICYmIGtleXMuc29tZShrZXkgPT4ga2V5Lmxlbmd0aCA8IDMyKSkge1xuXHRcdHRocm93IEVycm9yKCdLZXlzIG11c3QgYmUgYXQgbGVhc3QgMzIgYnl0ZXMgbG9uZy4nKTtcblx0fVxuXG5cdGNvbnN0IGlrbSA9IEJ1ZmZlci5jb25jYXQoW3NlY3JldCwgLi4ua2V5c10pO1xuXG5cdHJldHVybiB7XG5cdFx0a19lbmM6IEJ1ZmZlci5mcm9tKFxuXHRcdFx0Y3J5cHRvLmhrZGZTeW5jKFxuXHRcdFx0XHQnc2hhMjU2Jyxcblx0XHRcdFx0QnVmZmVyLmFsbG9jKDApLFxuXHRcdFx0XHRpa20sXG5cdFx0XHRcdEJ1ZmZlci5mcm9tKCdhZXMtMjU2LWN0ci9lbmMvdjEnKSxcblx0XHRcdFx0MzIsXG5cdFx0XHQpLFxuXHRcdCksXG5cdFx0a19tYWM6IEJ1ZmZlci5mcm9tKFxuXHRcdFx0Y3J5cHRvLmhrZGZTeW5jKFxuXHRcdFx0XHQnc2hhMjU2Jyxcblx0XHRcdFx0QnVmZmVyLmFsbG9jKDApLFxuXHRcdFx0XHRpa20sXG5cdFx0XHRcdEJ1ZmZlci5mcm9tKCdobWFjLXNoYTI1Ni9tYWMvdjEnKSxcblx0XHRcdFx0MzIsXG5cdFx0XHQpLFxuXHRcdCksXG5cdH07XG59XG5cbi8qKlxuICogUHJlcGFyZSBlbmNyeXB0aW9uLlxuICpcbiAqIEBwYXJhbSBzZWNyZXRcbiAqIEBwYXJhbSBrZXlzXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHNlY3JldCBpcyBsZXNzIHRoYW4gMzIgYnl0ZXMgbG9uZy5cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiBhbnkgb2YgdGhlIGtleXMgYXJlIGxlc3MgdGhhbiAzMiBieXRlcyBsb25nLlxuICogQHJldHVybnMgVGhlIGNpcGhlciwgSVYsIGFuZCBzZWNyZXQuXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBhdXRob3IgQ2FpcXVlIEFyYXVqbyA8Y2FpcXVlQHBpZ2dseS5jb20uYnI+XG4gKiBAcmV0dXJuc1xuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENpcGhlckNUUihcblx0c2VjcmV0OiBCdWZmZXIsXG5cdGtleXM6IEFycmF5PEJ1ZmZlcj4gPSBbXSxcbik6IHsgY2lwaGVyOiBjcnlwdG8uQ2lwaGVyaXY7IGl2OiBCdWZmZXI7IGtfZW5jOiBCdWZmZXI7IGtfbWFjOiBCdWZmZXIgfSB7XG5cdGNvbnN0IHsga19lbmMsIGtfbWFjIH0gPSBkZXJpdmVDVFJFbmNyeXB0aW9uS2V5KHNlY3JldCwga2V5cyk7XG5cblx0Y29uc3QgaXYgPSBjcnlwdG8ucmFuZG9tQnl0ZXMoMTYpO1xuXHRjb25zdCBjaXBoZXIgPSBjcnlwdG8uY3JlYXRlQ2lwaGVyaXYoJ2Flcy0yNTYtY3RyJywga19lbmMsIGl2KTtcblxuXHRyZXR1cm4geyBjaXBoZXIsIGl2LCBrX2VuYywga19tYWMgfTtcbn1cblxuLyoqXG4gKiBFbmNyeXB0IGEgbWVzc2FnZSB1c2luZyBBRVMtMjU2LUNUUi5cbiAqXG4gKiBAcGFyYW0gc2VjcmV0IC0gVGhlIHNlY3JldCB0byBlbmNyeXB0LlxuICogQHBhcmFtIG1lc3NhZ2UgLSBUaGUgbWVzc2FnZSB0byBlbmNyeXB0LlxuICogQHBhcmFtIGtleXMgLSBUaGUga2V5cyB0byBlbmNyeXB0LlxuICogQHBhcmFtIGFhZCAtIFRoZSBhZGRpdGlvbmFsIGF1dGhlbnRpY2F0aW9uIGRhdGEuXG4gKiBAcmV0dXJucyBUaGUgZW5jcnlwdGVkIG1lc3NhZ2UuXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBhdXRob3IgQ2FpcXVlIEFyYXVqbyA8Y2FpcXVlQHBpZ2dseS5jb20uYnI+XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmNyeXB0Q1RSKFxuXHRzZWNyZXQ6IEJ1ZmZlcixcblx0bWVzc2FnZTogQnVmZmVyLFxuXHRrZXlzOiBBcnJheTxCdWZmZXI+ID0gW10sXG5cdGFhZD86IEJ1ZmZlcixcbik6IEJ1ZmZlciB7XG5cdGNvbnN0IHsgY2lwaGVyLCBpdiwga19tYWMgfSA9IGdldENpcGhlckNUUihzZWNyZXQsIGtleXMpO1xuXHRjb25zdCBlbmNyeXB0ZWQgPSBCdWZmZXIuY29uY2F0KFtjaXBoZXIudXBkYXRlKG1lc3NhZ2UpLCBjaXBoZXIuZmluYWwoKV0pO1xuXG5cdHJldHVybiBCdWZmZXIuY29uY2F0KFtcblx0XHRpdixcblx0XHRlbmNyeXB0ZWQsXG5cdFx0Y3J5cHRvXG5cdFx0XHQuY3JlYXRlSG1hYygnc2hhMjU2Jywga19tYWMpXG5cdFx0XHQudXBkYXRlKGl2KVxuXHRcdFx0LnVwZGF0ZShhYWQgPz8gQnVmZmVyLmFsbG9jKDApKVxuXHRcdFx0LnVwZGF0ZShlbmNyeXB0ZWQpXG5cdFx0XHQuZGlnZXN0KCksXG5cdF0pO1xufVxuXG4vKipcbiAqIERlY3J5cHQgYSBtZXNzYWdlIHVzaW5nIEFFUy0yNTYtQ1RSLlxuICpcbiAqIEBwYXJhbSBzZWNyZXRcbiAqIEBwYXJhbSBibG9iIC0gVGhlIG1lc3NhZ2UgdG8gZGVjcnlwdC5cbiAqIEBwYXJhbSBrZXlzIC0gVGhlIGtleXMgdG8gZGVjcnlwdC5cbiAqIEByZXR1cm5zIFRoZSBkZWNyeXB0ZWQgbWVzc2FnZS5cbiAqIEBzaW5jZSAwLjEuMFxuICogQGF1dGhvciBDYWlxdWUgQXJhdWpvIDxjYWlxdWVAcGlnZ2x5LmNvbS5icj5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY3J5cHRDVFIoXG5cdHNlY3JldDogQnVmZmVyLFxuXHRibG9iOiBCdWZmZXIsXG5cdGtleXM6IEFycmF5PEJ1ZmZlcj4gPSBbXSxcblx0YWFkPzogQnVmZmVyLFxuKTogQnVmZmVyIHtcblx0aWYgKHNlY3JldC5sZW5ndGggPCAzMikge1xuXHRcdHRocm93IEVycm9yKCdTZWNyZXQgbXVzdCBiZSBhdCBsZWFzdCAzMiBieXRlcyBsb25nLicpO1xuXHR9XG5cblx0aWYgKGtleXMubGVuZ3RoID4gMCAmJiBrZXlzLnNvbWUoa2V5ID0+IGtleS5sZW5ndGggPCAzMikpIHtcblx0XHR0aHJvdyBFcnJvcignS2V5cyBtdXN0IGJlIGF0IGxlYXN0IDMyIGJ5dGVzIGxvbmcuJyk7XG5cdH1cblxuXHRjb25zdCB7IGtfZW5jLCBrX21hYyB9ID0gZGVyaXZlQ1RSRW5jcnlwdGlvbktleShzZWNyZXQsIGtleXMpO1xuXG5cdGNvbnN0IGl2ID0gYmxvYi5zdWJhcnJheSgwLCAxNik7XG5cdGNvbnN0IHRhZyA9IGJsb2Iuc3ViYXJyYXkoYmxvYi5sZW5ndGggLSAzMik7XG5cdGNvbnN0IGVuY3J5cHRlZCA9IGJsb2Iuc3ViYXJyYXkoMTYsIGJsb2IubGVuZ3RoIC0gMzIpO1xuXHRjb25zdCBtYWMgPSBjcnlwdG9cblx0XHQuY3JlYXRlSG1hYygnc2hhMjU2Jywga19tYWMpXG5cdFx0LnVwZGF0ZShpdilcblx0XHQudXBkYXRlKGFhZCA/PyBCdWZmZXIuYWxsb2MoMCkpXG5cdFx0LnVwZGF0ZShlbmNyeXB0ZWQpXG5cdFx0LmRpZ2VzdCgpO1xuXG5cdGlmIChtYWMubGVuZ3RoICE9PSB0YWcubGVuZ3RoIHx8ICFjcnlwdG8udGltaW5nU2FmZUVxdWFsKG1hYywgdGFnKSkge1xuXHRcdHRocm93IEVycm9yKCdJbnZhbGlkIE1BQycpO1xuXHR9XG5cblx0Y29uc3QgZGVjaXBoZXIgPSBjcnlwdG8uY3JlYXRlRGVjaXBoZXJpdignYWVzLTI1Ni1jdHInLCBrX2VuYywgaXYpO1xuXHRyZXR1cm4gQnVmZmVyLmNvbmNhdChbZGVjaXBoZXIudXBkYXRlKGVuY3J5cHRlZCksIGRlY2lwaGVyLmZpbmFsKCldKTtcbn1cblxuLyoqXG4gKiBFbmNyeXB0IGEgbWVzc2FnZSB1c2luZyBBRVMtMjU2LUNUUi5cbiAqXG4gKiBAcGFyYW0gc2VjcmV0IC0gVGhlIHNlY3JldCB0byBlbmNyeXB0LlxuICogQHBhcmFtIGtleXMgLSBUaGUga2V5cyB0byBlbmNyeXB0LlxuICogQHBhcmFtIGFhZCAtIFRoZSBhZGRpdGlvbmFsIGF1dGhlbnRpY2F0aW9uIGRhdGEuXG4gKiBAcmV0dXJucyBUaGUgZW5jcnlwdGVkIG1lc3NhZ2UuXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBhdXRob3IgQ2FpcXVlIEFyYXVqbyA8Y2FpcXVlQHBpZ2dseS5jb20uYnI+XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmNyeXB0Q1RSU3RyZWFtKFxuXHRzZWNyZXQ6IEJ1ZmZlcixcblx0a2V5czogQXJyYXk8QnVmZmVyPiA9IFtdLFxuXHRhYWQ/OiBCdWZmZXIsXG4pOiBUcmFuc2Zvcm0ge1xuXHRjb25zdCB7IGtfZW5jLCBrX21hYyB9ID0gZGVyaXZlQ1RSRW5jcnlwdGlvbktleShzZWNyZXQsIGtleXMpO1xuXHRjb25zdCBpdiA9IGNyeXB0by5yYW5kb21CeXRlcygxNik7XG5cdGNvbnN0IGNpcGhlciA9IGNyeXB0by5jcmVhdGVDaXBoZXJpdignYWVzLTI1Ni1jdHInLCBrX2VuYywgaXYpO1xuXHRjb25zdCBtYWMgPSBjcnlwdG8uY3JlYXRlSG1hYygnc2hhMjU2Jywga19tYWMpO1xuXG5cdGxldCBpdlB1c2hlZCA9IGZhbHNlO1xuXG5cdG1hYy51cGRhdGUoaXYpO1xuXG5cdGlmIChhYWQpIHtcblx0XHRtYWMudXBkYXRlKGFhZCk7XG5cdH1cblxuXHRjb25zdCB0cmFuc2Zvcm0gPSBuZXcgVHJhbnNmb3JtKHtcblx0XHRmbHVzaChjYWxsYmFjaykge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29uc3QgbGFzdCA9IGNpcGhlci5maW5hbCgpO1xuXG5cdFx0XHRcdGlmIChsYXN0Lmxlbmd0aCkge1xuXHRcdFx0XHRcdHRoaXMucHVzaChsYXN0KTtcblx0XHRcdFx0XHRtYWMudXBkYXRlKGxhc3QpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5wdXNoKG1hYy5kaWdlc3QoKSk7IC8vIHRhZygzMilcblx0XHRcdFx0Y2FsbGJhY2soKTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0Y2FsbGJhY2soZSBhcyBFcnJvcik7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHR0cmFuc2Zvcm0oXG5cdFx0XHR0aGlzOiBUcmFuc2Zvcm0sXG5cdFx0XHRjaHVuazogYW55LFxuXHRcdFx0ZW5jb2Rpbmc6IEJ1ZmZlckVuY29kaW5nLFxuXHRcdFx0Y2FsbGJhY2s6IFRyYW5zZm9ybUNhbGxiYWNrLFxuXHRcdCk6IHZvaWQge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aWYgKCFpdlB1c2hlZCkge1xuXHRcdFx0XHRcdHRoaXMucHVzaChpdik7XG5cdFx0XHRcdFx0aXZQdXNoZWQgPSB0cnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgY3QgPSBjaXBoZXIudXBkYXRlKGNodW5rKTtcblxuXHRcdFx0XHRpZiAoY3QubGVuZ3RoKSB7XG5cdFx0XHRcdFx0dGhpcy5wdXNoKGN0KTtcblx0XHRcdFx0XHRtYWMudXBkYXRlKGN0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNhbGxiYWNrKCk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdGNhbGxiYWNrKGUgYXMgRXJyb3IpO1xuXHRcdFx0fVxuXHRcdH0sXG5cdH0pO1xuXG5cdHJldHVybiB0cmFuc2Zvcm07XG59XG5cbi8qKlxuICogRGVjcnlwdCBhIG1lc3NhZ2UgdXNpbmcgQUVTLTI1Ni1DVFIuXG4gKlxuICogQHBhcmFtIHNlY3JldCAtIFRoZSBzZWNyZXQgdG8gZGVjcnlwdC5cbiAqIEBwYXJhbSBrZXlzIC0gVGhlIGtleXMgdG8gZGVjcnlwdC5cbiAqIEBwYXJhbSBhYWQgLSBUaGUgYWRkaXRpb25hbCBhdXRoZW50aWNhdGlvbiBkYXRhLlxuICogQHJldHVybnMgVGhlIGRlY3J5cHRlZCBtZXNzYWdlLlxuICogQHNpbmNlIDAuMS4wXG4gKiBAYXV0aG9yIENhaXF1ZSBBcmF1am8gPGNhaXF1ZUBwaWdnbHkuY29tLmJyPlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjcnlwdENUUlN0cmVhbShcblx0c2VjcmV0OiBCdWZmZXIsXG5cdGtleXM6IEFycmF5PEJ1ZmZlcj4gPSBbXSxcblx0YWFkPzogQnVmZmVyLFxuKTogVHJhbnNmb3JtIHtcblx0Y29uc3QgeyBrX2VuYywga19tYWMgfSA9IGRlcml2ZUNUUkVuY3J5cHRpb25LZXkoc2VjcmV0LCBrZXlzKTtcblx0Y29uc3QgbWFjID0gY3J5cHRvLmNyZWF0ZUhtYWMoJ3NoYTI1NicsIGtfbWFjKTtcblxuXHRsZXQgaXY6IEJ1ZmZlciB8IG51bGwgPSBudWxsO1xuXHRsZXQgZGVjaXBoZXI6IGNyeXB0by5EZWNpcGhlcml2IHwgbnVsbCA9IG51bGw7XG5cblx0bGV0IHRhaWwgPSBCdWZmZXIuYWxsb2MoMCk7XG5cdGNvbnN0IG1hY19idWZmZXI6IEJ1ZmZlcltdID0gW107XG5cblx0aWYgKGFhZCkge1xuXHRcdG1hYy51cGRhdGUoYWFkKTtcblx0fVxuXG5cdGNvbnN0IHRyYW5zZm9ybSA9IG5ldyBUcmFuc2Zvcm0oe1xuXHRcdGZsdXNoKGNhbGxiYWNrKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRpZiAoIWl2IHx8ICFkZWNpcGhlciB8fCB0YWlsLmxlbmd0aCAhPT0gMzIpIHtcblx0XHRcdFx0XHRyZXR1cm4gY2FsbGJhY2soXG5cdFx0XHRcdFx0XHRuZXcgRXJyb3IoJ01hbGZvcm1lZCBjaXBoZXJ0ZXh0OiBtaXNzaW5nIElWIG9yIHRhZy4nKSxcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgY2FsYyA9IG1hYy5kaWdlc3QoKTtcblxuXHRcdFx0XHRpZiAoY2FsYy5sZW5ndGggIT09IHRhaWwubGVuZ3RoIHx8ICFjcnlwdG8udGltaW5nU2FmZUVxdWFsKGNhbGMsIHRhaWwpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGNhbGxiYWNrKG5ldyBFcnJvcignSW52YWxpZCBNQUMnKSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRtYWNfYnVmZmVyLnB1c2goZGVjaXBoZXIuZmluYWwoKSk7XG5cblx0XHRcdFx0Zm9yIChjb25zdCBiIG9mIG1hY19idWZmZXIpIHtcblx0XHRcdFx0XHR0aGlzLnB1c2goYik7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjYWxsYmFjaygpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRjYWxsYmFjayhlIGFzIEVycm9yKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdHRyYW5zZm9ybShfY2h1bmssIGVuY29kaW5nLCBjYWxsYmFjaykge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0bGV0IGNodW5rID0gX2NodW5rO1xuXG5cdFx0XHRcdGlmICghaXYpIHtcblx0XHRcdFx0XHRjb25zdCBjb21iaW5lZCA9IEJ1ZmZlci5jb25jYXQoW3RhaWwsIGNodW5rXSk7XG5cdFx0XHRcdFx0aWYgKGNvbWJpbmVkLmxlbmd0aCA8IDE2KSB7XG5cdFx0XHRcdFx0XHR0YWlsID0gY29tYmluZWQ7XG5cdFx0XHRcdFx0XHRyZXR1cm4gY2FsbGJhY2soKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpdiA9IGNvbWJpbmVkLnN1YmFycmF5KDAsIDE2KTtcblx0XHRcdFx0XHRkZWNpcGhlciA9IGNyeXB0by5jcmVhdGVEZWNpcGhlcml2KCdhZXMtMjU2LWN0cicsIGtfZW5jLCBpdik7XG5cdFx0XHRcdFx0bWFjLnVwZGF0ZShpdik7XG5cblx0XHRcdFx0XHRjaHVuayA9IGNvbWJpbmVkLnN1YmFycmF5KDE2KTtcblx0XHRcdFx0XHR0YWlsID0gQnVmZmVyLmFsbG9jKDApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgdG90YWwgPSBCdWZmZXIuY29uY2F0KFt0YWlsLCBjaHVua10pO1xuXG5cdFx0XHRcdGlmICh0b3RhbC5sZW5ndGggPD0gMzIpIHtcblx0XHRcdFx0XHR0YWlsID0gdG90YWw7XG5cdFx0XHRcdFx0cmV0dXJuIGNhbGxiYWNrKCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCBmZWVkID0gdG90YWwuc3ViYXJyYXkoMCwgdG90YWwubGVuZ3RoIC0gMzIpO1xuXHRcdFx0XHR0YWlsID0gdG90YWwuc3ViYXJyYXkodG90YWwubGVuZ3RoIC0gMzIpO1xuXG5cdFx0XHRcdG1hYy51cGRhdGUoZmVlZCk7XG5cdFx0XHRcdG1hY19idWZmZXIucHVzaChkZWNpcGhlciEudXBkYXRlKGZlZWQpKTtcblxuXHRcdFx0XHRjYWxsYmFjaygpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRjYWxsYmFjayhlIGFzIEVycm9yKTtcblx0XHRcdH1cblx0XHR9LFxuXHR9KTtcblxuXHRyZXR1cm4gdHJhbnNmb3JtO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlIGEgc2VjcmV0IEZST00gYSBzZWVkIFdJVEggU0hBLTI1Ni5cbiAqIE5vdyBpdCB1c2VzIEhLREYuIFRvIGtlZXAgc3VwcG9ydCB0byBwcmV2aW91cyB2ZXJzaW9uIHVzZSBgdmVyc2lvbjogMWAuXG4gKlxuICogQHdhcm5pbmcgT2xkIHNlY3JldHMgKDw9MC43LnggdmVyc2lvbnMpIHNob3VsZCB1c2UgdGhlIGB2ZXJzaW9uOiAxYCBvcHRpb24uXG4gKiBAcGFyYW0gc2VlZCAtIFRoZSBzZWVkIHRvIGdlbmVyYXRlIHRoZSBzZWNyZXQgZnJvbS5cbiAqIEBwYXJhbSBvcHRzIC0gVGhlIG9wdGlvbnMgdG8gZ2VuZXJhdGUgdGhlIHNlY3JldC5cbiAqIEBwYXJhbSBvcHRzLmxlbmd0aCAtIFRoZSBsZW5ndGggb2YgdGhlIHNlY3JldC5cbiAqIEBwYXJhbSBvcHRzLnNhbHQgLSBUaGUgc2FsdCB0byB1c2UuXG4gKiBAcGFyYW0gb3B0cy52ZXJzaW9uIC0gVGhlIHZlcnNpb24gb2YgdGhlIHNlY3JldC4gU2V0IHRvIGAxYCB0byBnZW5lcmF0ZSBhIHNlY3JldCBjb21wYXRpYmxlIHdpdGggcHJldmlvdXMgdmVyc2lvbnMgKDw9MC43LngpLlxuICogQHJldHVybnMgVGhlIHNlY3JldC5cbiAqIEBzaW5jZSAwLjEuMFxuICogQGF1dGhvciBDYWlxdWUgQXJhdWpvIDxjYWlxdWVAcGlnZ2x5LmNvbS5icj5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlU2VjcmV0KFxuXHRzZWVkPzogQnVmZmVyLFxuXHRvcHRzPzogUGFydGlhbDx7IGxlbmd0aDogbnVtYmVyOyBzYWx0OiBCdWZmZXI7IHZlcnNpb246IDEgfCAyIH0+LFxuKTogQnVmZmVyIHtcblx0Y29uc3QgbGVuZ3RoID0gb3B0cz8ubGVuZ3RoID8/IDMyO1xuXHRjb25zdCBzYWx0ID0gb3B0cz8uc2FsdCA/PyBCdWZmZXIuYWxsb2MoMCk7XG5cdGNvbnN0IGlrbSA9IHNlZWQgPz8gY3J5cHRvLnJhbmRvbUJ5dGVzKDMyKTtcblx0Y29uc3QgdmVyc2lvbiA9IG9wdHM/LnZlcnNpb24gPz8gMjtcblxuXHRpZiAodmVyc2lvbiA9PT0gMSkge1xuXHRcdHJldHVybiBjcnlwdG8uY3JlYXRlSGFzaCgnc2hhMjU2JykudXBkYXRlKGlrbSkuZGlnZXN0KCk7XG5cdH1cblxuXHRyZXR1cm4gQnVmZmVyLmZyb20oXG5cdFx0aGtkZihzaGEyNTYsIGlrbSwgc2FsdCwgQnVmZmVyLmZyb20oJ2Flcy0yNTYtc2VjcmV0L3YxJyksIGxlbmd0aCksXG5cdCk7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBLFNBQTRCQSxTQUFTLFFBQVEsYUFBYTtBQUMxRCxPQUFPQyxNQUFNLE1BQU0sYUFBYTtBQUVoQyxTQUFTQyxNQUFNLFFBQVEsdUJBQXVCO0FBQzlDLFNBQVNDLElBQUksUUFBUSx1QkFBdUI7O0FBRTVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sU0FBU0Msc0JBQXNCQSxDQUFDQyxNQUFjLEVBQUVDLElBQWMsR0FBRyxFQUFFLEVBQVU7RUFDbkYsT0FBT0MsTUFBTSxDQUFDQyxJQUFJLENBQ2pCUCxNQUFNLENBQUNRLFFBQVEsQ0FDZCxRQUFRLEVBQ1JGLE1BQU0sQ0FBQ0csS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUNmSCxNQUFNLENBQUNJLE1BQU0sQ0FBQyxDQUFDTixNQUFNLEVBQUUsR0FBR0MsSUFBSSxDQUFDLENBQUMsRUFDaENDLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEVBQ2pDLEVBQ0QsQ0FDRCxDQUFDO0FBQ0Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLFNBQVNJLFlBQVlBLENBQzNCUCxNQUFjLEVBQ2RDLElBQW1CLEdBQUcsRUFBRSxFQUNtQjtFQUMzQyxNQUFNTyxHQUFHLEdBQUdULHNCQUFzQixDQUFDQyxNQUFNLEVBQUVDLElBQUksQ0FBQztFQUNoRCxNQUFNUSxFQUFFLEdBQUdiLE1BQU0sQ0FBQ2MsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7RUFDbkMsTUFBTUMsTUFBTSxHQUFHZixNQUFNLENBQUNnQixjQUFjLENBQUMsYUFBYSxFQUFFSixHQUFHLEVBQUVDLEVBQUUsQ0FBQztFQUU1RCxPQUFPO0lBQUVFLE1BQU07SUFBRUY7RUFBRyxDQUFDO0FBQ3RCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLFNBQVNJLFVBQVVBLENBQ3pCYixNQUFjLEVBQ2RjLE9BQWUsRUFDZmIsSUFBbUIsR0FBRyxFQUFFLEVBQ3hCYyxHQUFZLEVBQ0g7RUFDVCxJQUFJZixNQUFNLENBQUNnQixNQUFNLEdBQUcsRUFBRSxFQUFFO0lBQ3ZCLE1BQU1DLEtBQUssQ0FBQyx3Q0FBd0MsQ0FBQztFQUN0RDtFQUVBLElBQUloQixJQUFJLENBQUNlLE1BQU0sR0FBRyxDQUFDLElBQUlmLElBQUksQ0FBQ2lCLElBQUksQ0FBQ1YsR0FBRyxJQUFJQSxHQUFHLENBQUNRLE1BQU0sR0FBRyxFQUFFLENBQUMsRUFBRTtJQUN6RCxNQUFNQyxLQUFLLENBQUMsc0NBQXNDLENBQUM7RUFDcEQ7RUFFQSxNQUFNO0lBQUVOLE1BQU07SUFBRUY7RUFBRyxDQUFDLEdBQUdGLFlBQVksQ0FBQ1AsTUFBTSxFQUFFQyxJQUFJLENBQUM7RUFFakQsSUFBSWMsR0FBRyxFQUFFO0lBQ1JKLE1BQU0sQ0FBQ1EsTUFBTSxDQUFDSixHQUFHLENBQUM7RUFDbkI7RUFFQSxNQUFNSyxFQUFFLEdBQUdsQixNQUFNLENBQUNJLE1BQU0sQ0FBQyxDQUFDSyxNQUFNLENBQUNVLE1BQU0sQ0FBQ1AsT0FBTyxDQUFDLEVBQUVILE1BQU0sQ0FBQ1csS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2xFLE1BQU1DLEdBQUcsR0FBR1osTUFBTSxDQUFDYSxVQUFVLENBQUMsQ0FBQztFQUUvQixPQUFPdEIsTUFBTSxDQUFDSSxNQUFNLENBQUMsQ0FBQ0csRUFBRSxFQUFFVyxFQUFFLEVBQUVHLEdBQUcsQ0FBQyxDQUFDO0FBQ3BDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLFNBQVNFLFVBQVVBLENBQ3pCekIsTUFBYyxFQUNkMEIsSUFBWSxFQUNaekIsSUFBbUIsR0FBRyxFQUFFLEVBQ3hCYyxHQUFZLEVBQ0g7RUFDVCxJQUFJZixNQUFNLENBQUNnQixNQUFNLEdBQUcsRUFBRSxFQUFFO0lBQ3ZCLE1BQU1DLEtBQUssQ0FBQyx3Q0FBd0MsQ0FBQztFQUN0RDtFQUVBLElBQUloQixJQUFJLENBQUNlLE1BQU0sR0FBRyxDQUFDLElBQUlmLElBQUksQ0FBQ2lCLElBQUksQ0FBQ1YsR0FBRyxJQUFJQSxHQUFHLENBQUNRLE1BQU0sR0FBRyxFQUFFLENBQUMsRUFBRTtJQUN6RCxNQUFNQyxLQUFLLENBQUMsc0NBQXNDLENBQUM7RUFDcEQ7RUFFQSxJQUFJUyxJQUFJLENBQUNWLE1BQU0sR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFO0lBQzFCLE1BQU1DLEtBQUssQ0FBQyx5Q0FBeUMsQ0FBQztFQUN2RDtFQUVBLE1BQU1ULEdBQUcsR0FBR1Qsc0JBQXNCLENBQUNDLE1BQU0sRUFBRUMsSUFBSSxDQUFDO0VBQ2hELE1BQU1RLEVBQUUsR0FBR2lCLElBQUksQ0FBQ0MsUUFBUSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7RUFDL0IsTUFBTUosR0FBRyxHQUFHRyxJQUFJLENBQUNDLFFBQVEsQ0FBQ0QsSUFBSSxDQUFDVixNQUFNLEdBQUcsRUFBRSxDQUFDO0VBQzNDLE1BQU1JLEVBQUUsR0FBR00sSUFBSSxDQUFDQyxRQUFRLENBQUMsRUFBRSxFQUFFRCxJQUFJLENBQUNWLE1BQU0sR0FBRyxFQUFFLENBQUM7RUFFOUMsTUFBTVksUUFBUSxHQUFHaEMsTUFBTSxDQUFDaUMsZ0JBQWdCLENBQUMsYUFBYSxFQUFFckIsR0FBRyxFQUFFQyxFQUFFLENBQUM7RUFFaEUsSUFBSU0sR0FBRyxFQUFFO0lBQ1JhLFFBQVEsQ0FBQ1QsTUFBTSxDQUFDSixHQUFHLENBQUM7RUFDckI7RUFFQWEsUUFBUSxDQUFDRSxVQUFVLENBQUNQLEdBQUcsQ0FBQztFQUN4QixPQUFPckIsTUFBTSxDQUFDSSxNQUFNLENBQUMsQ0FBQ3NCLFFBQVEsQ0FBQ1AsTUFBTSxDQUFDRCxFQUFFLENBQUMsRUFBRVEsUUFBUSxDQUFDTixLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLFNBQVNTLGdCQUFnQkEsQ0FDL0IvQixNQUFjLEVBQ2RDLElBQW1CLEdBQUcsRUFBRSxFQUN4QmMsR0FBWSxFQUNBO0VBQ1osTUFBTTtJQUFFSixNQUFNO0lBQUVGO0VBQUcsQ0FBQyxHQUFHRixZQUFZLENBQUNQLE1BQU0sRUFBRUMsSUFBSSxDQUFDO0VBRWpELElBQUljLEdBQUcsRUFBRTtJQUNSSixNQUFNLENBQUNRLE1BQU0sQ0FBQ0osR0FBRyxDQUFDO0VBQ25CO0VBRUEsSUFBSWlCLFFBQVEsR0FBRyxLQUFLO0VBRXBCLE1BQU1DLFNBQVMsR0FBRyxJQUFJdEMsU0FBUyxDQUFDO0lBQy9CdUMsS0FBS0EsQ0FBQ0MsUUFBUSxFQUFFO01BQ2YsSUFBSSxDQUFDQyxJQUFJLENBQUN6QixNQUFNLENBQUNXLEtBQUssQ0FBQyxDQUFDLENBQUM7TUFDekIsSUFBSSxDQUFDYyxJQUFJLENBQUN6QixNQUFNLENBQUNhLFVBQVUsQ0FBQyxDQUFDLENBQUM7TUFDOUJXLFFBQVEsQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUNERixTQUFTQSxDQUVSSSxLQUFVLEVBQ1ZDLFFBQXdCLEVBQ3hCSCxRQUEyQixFQUNwQjtNQUNQLElBQUksQ0FBQ0gsUUFBUSxFQUFFO1FBQ2QsSUFBSSxDQUFDSSxJQUFJLENBQUMzQixFQUFFLENBQUM7UUFDYnVCLFFBQVEsR0FBRyxJQUFJO01BQ2hCO01BRUEsSUFBSSxDQUFDSSxJQUFJLENBQUN6QixNQUFNLENBQUNVLE1BQU0sQ0FBQ2dCLEtBQUssQ0FBQyxDQUFDO01BQy9CRixRQUFRLENBQUMsQ0FBQztJQUNYO0VBQ0QsQ0FBQyxDQUFDO0VBRUYsT0FBT0YsU0FBUztBQUNqQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sU0FBU00sZ0JBQWdCQSxDQUMvQnZDLE1BQWMsRUFDZEMsSUFBbUIsR0FBRyxFQUFFLEVBQ3hCYyxHQUFZLEVBQ0E7RUFDWixNQUFNUCxHQUFHLEdBQUdULHNCQUFzQixDQUFDQyxNQUFNLEVBQUVDLElBQUksQ0FBQztFQUVoRCxJQUFJUSxFQUFpQixHQUFHLElBQUk7RUFDNUIsSUFBSW1CLFFBQW1DLEdBQUcsSUFBSTtFQUM5QyxJQUFJWSxJQUFJLEdBQUd0QyxNQUFNLENBQUNHLEtBQUssQ0FBQyxDQUFDLENBQUM7RUFFMUIsTUFBTTRCLFNBQVMsR0FBRyxJQUFJdEMsU0FBUyxDQUFDO0lBQy9CdUMsS0FBS0EsQ0FBQ0MsUUFBUSxFQUFFO01BQ2YsSUFBSSxDQUFDUCxRQUFRLElBQUksQ0FBQ25CLEVBQUUsSUFBSStCLElBQUksQ0FBQ3hCLE1BQU0sS0FBSyxFQUFFLEVBQUU7UUFDM0MsT0FBT21CLFFBQVEsQ0FBQyxJQUFJbEIsS0FBSyxDQUFDLHFDQUFxQyxDQUFDLENBQUM7TUFDbEU7TUFFQSxJQUFJO1FBQ0hXLFFBQVEsQ0FBQ0UsVUFBVSxDQUFDVSxJQUFJLENBQUM7UUFDekIsSUFBSSxDQUFDSixJQUFJLENBQUNSLFFBQVEsQ0FBQ04sS0FBSyxDQUFDLENBQUMsQ0FBQztRQUMzQmEsUUFBUSxDQUFDLENBQUM7TUFDWCxDQUFDLENBQUMsT0FBT00sQ0FBQyxFQUFFO1FBQ1hOLFFBQVEsQ0FBQ00sQ0FBVSxDQUFDO01BQ3JCO0lBQ0QsQ0FBQztJQUNEUixTQUFTQSxDQUFDSSxLQUFLLEVBQUVDLFFBQVEsRUFBRUgsUUFBUSxFQUFFO01BQ3BDLElBQUlPLElBQUksR0FBR0wsS0FBSztNQUVoQixJQUFJLENBQUM1QixFQUFFLEVBQUU7UUFDUixJQUFJK0IsSUFBSSxDQUFDeEIsTUFBTSxFQUFFO1VBQ2hCMEIsSUFBSSxHQUFHeEMsTUFBTSxDQUFDSSxNQUFNLENBQUMsQ0FBQ2tDLElBQUksRUFBRUgsS0FBSyxDQUFDLENBQUM7VUFDbkNHLElBQUksR0FBR3RDLE1BQU0sQ0FBQ0csS0FBSyxDQUFDLENBQUMsQ0FBQztRQUN2QjtRQUVBLElBQUlxQyxJQUFJLENBQUMxQixNQUFNLEdBQUcsRUFBRSxFQUFFO1VBQ3JCd0IsSUFBSSxHQUFHRSxJQUFJO1VBQ1gsT0FBT1AsUUFBUSxDQUFDLENBQUM7UUFDbEI7UUFFQTFCLEVBQUUsR0FBR2lDLElBQUksQ0FBQ2YsUUFBUSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDekJDLFFBQVEsR0FBR2hDLE1BQU0sQ0FBQ2lDLGdCQUFnQixDQUNqQyxhQUFhLEVBQ2JyQixHQUFHLEVBQ0hDLEVBQ0QsQ0FBdUI7UUFFdkIsSUFBSU0sR0FBRyxFQUFFO1VBQ1JhLFFBQVEsQ0FBQ1QsTUFBTSxDQUFDSixHQUFHLENBQUM7UUFDckI7UUFFQTJCLElBQUksR0FBR0EsSUFBSSxDQUFDZixRQUFRLENBQUMsRUFBRSxDQUFDO01BQ3pCO01BRUEsTUFBTWdCLEtBQUssR0FBR3pDLE1BQU0sQ0FBQ0ksTUFBTSxDQUFDLENBQUNrQyxJQUFJLEVBQUVFLElBQUksQ0FBQyxDQUFDO01BRXpDLElBQUlDLEtBQUssQ0FBQzNCLE1BQU0sSUFBSSxFQUFFLEVBQUU7UUFDdkJ3QixJQUFJLEdBQUdHLEtBQUs7UUFDWixPQUFPUixRQUFRLENBQUMsQ0FBQztNQUNsQjtNQUVBLE1BQU1TLElBQUksR0FBR0QsS0FBSyxDQUFDaEIsUUFBUSxDQUFDLENBQUMsRUFBRWdCLEtBQUssQ0FBQzNCLE1BQU0sR0FBRyxFQUFFLENBQUM7TUFDakR3QixJQUFJLEdBQUdHLEtBQUssQ0FBQ2hCLFFBQVEsQ0FBQ2dCLEtBQUssQ0FBQzNCLE1BQU0sR0FBRyxFQUFFLENBQUM7TUFFeEMsSUFBSSxDQUFDb0IsSUFBSSxDQUFDUixRQUFRLENBQUVQLE1BQU0sQ0FBQ3VCLElBQUksQ0FBQyxDQUFDO01BQ2pDVCxRQUFRLENBQUMsQ0FBQztJQUNYO0VBQ0QsQ0FBQyxDQUFDO0VBRUYsT0FBT0YsU0FBUztBQUNqQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLFNBQVNZLHNCQUFzQkEsQ0FDckM3QyxNQUFjLEVBQ2RDLElBQWMsR0FBRyxFQUFFLEVBQ2dCO0VBQ25DLElBQUlELE1BQU0sQ0FBQ2dCLE1BQU0sR0FBRyxFQUFFLEVBQUU7SUFDdkIsTUFBTUMsS0FBSyxDQUFDLHdDQUF3QyxDQUFDO0VBQ3REO0VBRUEsSUFBSWhCLElBQUksQ0FBQ2UsTUFBTSxHQUFHLENBQUMsSUFBSWYsSUFBSSxDQUFDaUIsSUFBSSxDQUFDVixHQUFHLElBQUlBLEdBQUcsQ0FBQ1EsTUFBTSxHQUFHLEVBQUUsQ0FBQyxFQUFFO0lBQ3pELE1BQU1DLEtBQUssQ0FBQyxzQ0FBc0MsQ0FBQztFQUNwRDtFQUVBLE1BQU02QixHQUFHLEdBQUc1QyxNQUFNLENBQUNJLE1BQU0sQ0FBQyxDQUFDTixNQUFNLEVBQUUsR0FBR0MsSUFBSSxDQUFDLENBQUM7RUFFNUMsT0FBTztJQUNOOEMsS0FBSyxFQUFFN0MsTUFBTSxDQUFDQyxJQUFJLENBQ2pCUCxNQUFNLENBQUNRLFFBQVEsQ0FDZCxRQUFRLEVBQ1JGLE1BQU0sQ0FBQ0csS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUNmeUMsR0FBRyxFQUNINUMsTUFBTSxDQUFDQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsRUFDakMsRUFDRCxDQUNELENBQUM7SUFDRDZDLEtBQUssRUFBRTlDLE1BQU0sQ0FBQ0MsSUFBSSxDQUNqQlAsTUFBTSxDQUFDUSxRQUFRLENBQ2QsUUFBUSxFQUNSRixNQUFNLENBQUNHLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDZnlDLEdBQUcsRUFDSDVDLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEVBQ2pDLEVBQ0QsQ0FDRDtFQUNELENBQUM7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sU0FBUzhDLFlBQVlBLENBQzNCakQsTUFBYyxFQUNkQyxJQUFtQixHQUFHLEVBQUUsRUFDZ0Q7RUFDeEUsTUFBTTtJQUFFOEMsS0FBSztJQUFFQztFQUFNLENBQUMsR0FBR0gsc0JBQXNCLENBQUM3QyxNQUFNLEVBQUVDLElBQUksQ0FBQztFQUU3RCxNQUFNUSxFQUFFLEdBQUdiLE1BQU0sQ0FBQ2MsV0FBVyxDQUFDLEVBQUUsQ0FBQztFQUNqQyxNQUFNQyxNQUFNLEdBQUdmLE1BQU0sQ0FBQ2dCLGNBQWMsQ0FBQyxhQUFhLEVBQUVtQyxLQUFLLEVBQUV0QyxFQUFFLENBQUM7RUFFOUQsT0FBTztJQUFFRSxNQUFNO0lBQUVGLEVBQUU7SUFBRXNDLEtBQUs7SUFBRUM7RUFBTSxDQUFDO0FBQ3BDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLFNBQVNFLFVBQVVBLENBQ3pCbEQsTUFBYyxFQUNkYyxPQUFlLEVBQ2ZiLElBQW1CLEdBQUcsRUFBRSxFQUN4QmMsR0FBWSxFQUNIO0VBQ1QsTUFBTTtJQUFFSixNQUFNO0lBQUVGLEVBQUU7SUFBRXVDO0VBQU0sQ0FBQyxHQUFHQyxZQUFZLENBQUNqRCxNQUFNLEVBQUVDLElBQUksQ0FBQztFQUN4RCxNQUFNa0QsU0FBUyxHQUFHakQsTUFBTSxDQUFDSSxNQUFNLENBQUMsQ0FBQ0ssTUFBTSxDQUFDVSxNQUFNLENBQUNQLE9BQU8sQ0FBQyxFQUFFSCxNQUFNLENBQUNXLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUV6RSxPQUFPcEIsTUFBTSxDQUFDSSxNQUFNLENBQUMsQ0FDcEJHLEVBQUUsRUFDRjBDLFNBQVMsRUFDVHZELE1BQU0sQ0FDSndELFVBQVUsQ0FBQyxRQUFRLEVBQUVKLEtBQUssQ0FBQyxDQUMzQjNCLE1BQU0sQ0FBQ1osRUFBRSxDQUFDLENBQ1ZZLE1BQU0sQ0FBQ04sR0FBRyxJQUFJYixNQUFNLENBQUNHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUM5QmdCLE1BQU0sQ0FBQzhCLFNBQVMsQ0FBQyxDQUNqQkUsTUFBTSxDQUFDLENBQUMsQ0FDVixDQUFDO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLFNBQVNDLFVBQVVBLENBQ3pCdEQsTUFBYyxFQUNkMEIsSUFBWSxFQUNaekIsSUFBbUIsR0FBRyxFQUFFLEVBQ3hCYyxHQUFZLEVBQ0g7RUFDVCxJQUFJZixNQUFNLENBQUNnQixNQUFNLEdBQUcsRUFBRSxFQUFFO0lBQ3ZCLE1BQU1DLEtBQUssQ0FBQyx3Q0FBd0MsQ0FBQztFQUN0RDtFQUVBLElBQUloQixJQUFJLENBQUNlLE1BQU0sR0FBRyxDQUFDLElBQUlmLElBQUksQ0FBQ2lCLElBQUksQ0FBQ1YsR0FBRyxJQUFJQSxHQUFHLENBQUNRLE1BQU0sR0FBRyxFQUFFLENBQUMsRUFBRTtJQUN6RCxNQUFNQyxLQUFLLENBQUMsc0NBQXNDLENBQUM7RUFDcEQ7RUFFQSxNQUFNO0lBQUU4QixLQUFLO0lBQUVDO0VBQU0sQ0FBQyxHQUFHSCxzQkFBc0IsQ0FBQzdDLE1BQU0sRUFBRUMsSUFBSSxDQUFDO0VBRTdELE1BQU1RLEVBQUUsR0FBR2lCLElBQUksQ0FBQ0MsUUFBUSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7RUFDL0IsTUFBTUosR0FBRyxHQUFHRyxJQUFJLENBQUNDLFFBQVEsQ0FBQ0QsSUFBSSxDQUFDVixNQUFNLEdBQUcsRUFBRSxDQUFDO0VBQzNDLE1BQU1tQyxTQUFTLEdBQUd6QixJQUFJLENBQUNDLFFBQVEsQ0FBQyxFQUFFLEVBQUVELElBQUksQ0FBQ1YsTUFBTSxHQUFHLEVBQUUsQ0FBQztFQUNyRCxNQUFNdUMsR0FBRyxHQUFHM0QsTUFBTSxDQUNoQndELFVBQVUsQ0FBQyxRQUFRLEVBQUVKLEtBQUssQ0FBQyxDQUMzQjNCLE1BQU0sQ0FBQ1osRUFBRSxDQUFDLENBQ1ZZLE1BQU0sQ0FBQ04sR0FBRyxJQUFJYixNQUFNLENBQUNHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUM5QmdCLE1BQU0sQ0FBQzhCLFNBQVMsQ0FBQyxDQUNqQkUsTUFBTSxDQUFDLENBQUM7RUFFVixJQUFJRSxHQUFHLENBQUN2QyxNQUFNLEtBQUtPLEdBQUcsQ0FBQ1AsTUFBTSxJQUFJLENBQUNwQixNQUFNLENBQUM0RCxlQUFlLENBQUNELEdBQUcsRUFBRWhDLEdBQUcsQ0FBQyxFQUFFO0lBQ25FLE1BQU1OLEtBQUssQ0FBQyxhQUFhLENBQUM7RUFDM0I7RUFFQSxNQUFNVyxRQUFRLEdBQUdoQyxNQUFNLENBQUNpQyxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUVrQixLQUFLLEVBQUV0QyxFQUFFLENBQUM7RUFDbEUsT0FBT1AsTUFBTSxDQUFDSSxNQUFNLENBQUMsQ0FBQ3NCLFFBQVEsQ0FBQ1AsTUFBTSxDQUFDOEIsU0FBUyxDQUFDLEVBQUV2QixRQUFRLENBQUNOLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyRTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sU0FBU21DLGdCQUFnQkEsQ0FDL0J6RCxNQUFjLEVBQ2RDLElBQW1CLEdBQUcsRUFBRSxFQUN4QmMsR0FBWSxFQUNBO0VBQ1osTUFBTTtJQUFFZ0MsS0FBSztJQUFFQztFQUFNLENBQUMsR0FBR0gsc0JBQXNCLENBQUM3QyxNQUFNLEVBQUVDLElBQUksQ0FBQztFQUM3RCxNQUFNUSxFQUFFLEdBQUdiLE1BQU0sQ0FBQ2MsV0FBVyxDQUFDLEVBQUUsQ0FBQztFQUNqQyxNQUFNQyxNQUFNLEdBQUdmLE1BQU0sQ0FBQ2dCLGNBQWMsQ0FBQyxhQUFhLEVBQUVtQyxLQUFLLEVBQUV0QyxFQUFFLENBQUM7RUFDOUQsTUFBTThDLEdBQUcsR0FBRzNELE1BQU0sQ0FBQ3dELFVBQVUsQ0FBQyxRQUFRLEVBQUVKLEtBQUssQ0FBQztFQUU5QyxJQUFJaEIsUUFBUSxHQUFHLEtBQUs7RUFFcEJ1QixHQUFHLENBQUNsQyxNQUFNLENBQUNaLEVBQUUsQ0FBQztFQUVkLElBQUlNLEdBQUcsRUFBRTtJQUNSd0MsR0FBRyxDQUFDbEMsTUFBTSxDQUFDTixHQUFHLENBQUM7RUFDaEI7RUFFQSxNQUFNa0IsU0FBUyxHQUFHLElBQUl0QyxTQUFTLENBQUM7SUFDL0J1QyxLQUFLQSxDQUFDQyxRQUFRLEVBQUU7TUFDZixJQUFJO1FBQ0gsTUFBTXVCLElBQUksR0FBRy9DLE1BQU0sQ0FBQ1csS0FBSyxDQUFDLENBQUM7UUFFM0IsSUFBSW9DLElBQUksQ0FBQzFDLE1BQU0sRUFBRTtVQUNoQixJQUFJLENBQUNvQixJQUFJLENBQUNzQixJQUFJLENBQUM7VUFDZkgsR0FBRyxDQUFDbEMsTUFBTSxDQUFDcUMsSUFBSSxDQUFDO1FBQ2pCO1FBRUEsSUFBSSxDQUFDdEIsSUFBSSxDQUFDbUIsR0FBRyxDQUFDRixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN6QmxCLFFBQVEsQ0FBQyxDQUFDO01BQ1gsQ0FBQyxDQUFDLE9BQU9NLENBQUMsRUFBRTtRQUNYTixRQUFRLENBQUNNLENBQVUsQ0FBQztNQUNyQjtJQUNELENBQUM7SUFDRFIsU0FBU0EsQ0FFUkksS0FBVSxFQUNWQyxRQUF3QixFQUN4QkgsUUFBMkIsRUFDcEI7TUFDUCxJQUFJO1FBQ0gsSUFBSSxDQUFDSCxRQUFRLEVBQUU7VUFDZCxJQUFJLENBQUNJLElBQUksQ0FBQzNCLEVBQUUsQ0FBQztVQUNidUIsUUFBUSxHQUFHLElBQUk7UUFDaEI7UUFFQSxNQUFNWixFQUFFLEdBQUdULE1BQU0sQ0FBQ1UsTUFBTSxDQUFDZ0IsS0FBSyxDQUFDO1FBRS9CLElBQUlqQixFQUFFLENBQUNKLE1BQU0sRUFBRTtVQUNkLElBQUksQ0FBQ29CLElBQUksQ0FBQ2hCLEVBQUUsQ0FBQztVQUNibUMsR0FBRyxDQUFDbEMsTUFBTSxDQUFDRCxFQUFFLENBQUM7UUFDZjtRQUVBZSxRQUFRLENBQUMsQ0FBQztNQUNYLENBQUMsQ0FBQyxPQUFPTSxDQUFDLEVBQUU7UUFDWE4sUUFBUSxDQUFDTSxDQUFVLENBQUM7TUFDckI7SUFDRDtFQUNELENBQUMsQ0FBQztFQUVGLE9BQU9SLFNBQVM7QUFDakI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLFNBQVMwQixnQkFBZ0JBLENBQy9CM0QsTUFBYyxFQUNkQyxJQUFtQixHQUFHLEVBQUUsRUFDeEJjLEdBQVksRUFDQTtFQUNaLE1BQU07SUFBRWdDLEtBQUs7SUFBRUM7RUFBTSxDQUFDLEdBQUdILHNCQUFzQixDQUFDN0MsTUFBTSxFQUFFQyxJQUFJLENBQUM7RUFDN0QsTUFBTXNELEdBQUcsR0FBRzNELE1BQU0sQ0FBQ3dELFVBQVUsQ0FBQyxRQUFRLEVBQUVKLEtBQUssQ0FBQztFQUU5QyxJQUFJdkMsRUFBaUIsR0FBRyxJQUFJO0VBQzVCLElBQUltQixRQUFrQyxHQUFHLElBQUk7RUFFN0MsSUFBSVksSUFBSSxHQUFHdEMsTUFBTSxDQUFDRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0VBQzFCLE1BQU11RCxVQUFvQixHQUFHLEVBQUU7RUFFL0IsSUFBSTdDLEdBQUcsRUFBRTtJQUNSd0MsR0FBRyxDQUFDbEMsTUFBTSxDQUFDTixHQUFHLENBQUM7RUFDaEI7RUFFQSxNQUFNa0IsU0FBUyxHQUFHLElBQUl0QyxTQUFTLENBQUM7SUFDL0J1QyxLQUFLQSxDQUFDQyxRQUFRLEVBQUU7TUFDZixJQUFJO1FBQ0gsSUFBSSxDQUFDMUIsRUFBRSxJQUFJLENBQUNtQixRQUFRLElBQUlZLElBQUksQ0FBQ3hCLE1BQU0sS0FBSyxFQUFFLEVBQUU7VUFDM0MsT0FBT21CLFFBQVEsQ0FDZCxJQUFJbEIsS0FBSyxDQUFDLDBDQUEwQyxDQUNyRCxDQUFDO1FBQ0Y7UUFFQSxNQUFNNEMsSUFBSSxHQUFHTixHQUFHLENBQUNGLE1BQU0sQ0FBQyxDQUFDO1FBRXpCLElBQUlRLElBQUksQ0FBQzdDLE1BQU0sS0FBS3dCLElBQUksQ0FBQ3hCLE1BQU0sSUFBSSxDQUFDcEIsTUFBTSxDQUFDNEQsZUFBZSxDQUFDSyxJQUFJLEVBQUVyQixJQUFJLENBQUMsRUFBRTtVQUN2RSxPQUFPTCxRQUFRLENBQUMsSUFBSWxCLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUMxQztRQUVBMkMsVUFBVSxDQUFDeEIsSUFBSSxDQUFDUixRQUFRLENBQUNOLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFFakMsS0FBSyxNQUFNd0MsQ0FBQyxJQUFJRixVQUFVLEVBQUU7VUFDM0IsSUFBSSxDQUFDeEIsSUFBSSxDQUFDMEIsQ0FBQyxDQUFDO1FBQ2I7UUFFQTNCLFFBQVEsQ0FBQyxDQUFDO01BQ1gsQ0FBQyxDQUFDLE9BQU9NLENBQUMsRUFBRTtRQUNYTixRQUFRLENBQUNNLENBQVUsQ0FBQztNQUNyQjtJQUNELENBQUM7SUFDRFIsU0FBU0EsQ0FBQzhCLE1BQU0sRUFBRXpCLFFBQVEsRUFBRUgsUUFBUSxFQUFFO01BQ3JDLElBQUk7UUFDSCxJQUFJRSxLQUFLLEdBQUcwQixNQUFNO1FBRWxCLElBQUksQ0FBQ3RELEVBQUUsRUFBRTtVQUNSLE1BQU11RCxRQUFRLEdBQUc5RCxNQUFNLENBQUNJLE1BQU0sQ0FBQyxDQUFDa0MsSUFBSSxFQUFFSCxLQUFLLENBQUMsQ0FBQztVQUM3QyxJQUFJMkIsUUFBUSxDQUFDaEQsTUFBTSxHQUFHLEVBQUUsRUFBRTtZQUN6QndCLElBQUksR0FBR3dCLFFBQVE7WUFDZixPQUFPN0IsUUFBUSxDQUFDLENBQUM7VUFDbEI7VUFFQTFCLEVBQUUsR0FBR3VELFFBQVEsQ0FBQ3JDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO1VBQzdCQyxRQUFRLEdBQUdoQyxNQUFNLENBQUNpQyxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUVrQixLQUFLLEVBQUV0QyxFQUFFLENBQUM7VUFDNUQ4QyxHQUFHLENBQUNsQyxNQUFNLENBQUNaLEVBQUUsQ0FBQztVQUVkNEIsS0FBSyxHQUFHMkIsUUFBUSxDQUFDckMsUUFBUSxDQUFDLEVBQUUsQ0FBQztVQUM3QmEsSUFBSSxHQUFHdEMsTUFBTSxDQUFDRyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3ZCO1FBRUEsTUFBTXNDLEtBQUssR0FBR3pDLE1BQU0sQ0FBQ0ksTUFBTSxDQUFDLENBQUNrQyxJQUFJLEVBQUVILEtBQUssQ0FBQyxDQUFDO1FBRTFDLElBQUlNLEtBQUssQ0FBQzNCLE1BQU0sSUFBSSxFQUFFLEVBQUU7VUFDdkJ3QixJQUFJLEdBQUdHLEtBQUs7VUFDWixPQUFPUixRQUFRLENBQUMsQ0FBQztRQUNsQjtRQUVBLE1BQU1TLElBQUksR0FBR0QsS0FBSyxDQUFDaEIsUUFBUSxDQUFDLENBQUMsRUFBRWdCLEtBQUssQ0FBQzNCLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDakR3QixJQUFJLEdBQUdHLEtBQUssQ0FBQ2hCLFFBQVEsQ0FBQ2dCLEtBQUssQ0FBQzNCLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFFeEN1QyxHQUFHLENBQUNsQyxNQUFNLENBQUN1QixJQUFJLENBQUM7UUFDaEJnQixVQUFVLENBQUN4QixJQUFJLENBQUNSLFFBQVEsQ0FBRVAsTUFBTSxDQUFDdUIsSUFBSSxDQUFDLENBQUM7UUFFdkNULFFBQVEsQ0FBQyxDQUFDO01BQ1gsQ0FBQyxDQUFDLE9BQU9NLENBQUMsRUFBRTtRQUNYTixRQUFRLENBQUNNLENBQVUsQ0FBQztNQUNyQjtJQUNEO0VBQ0QsQ0FBQyxDQUFDO0VBRUYsT0FBT1IsU0FBUztBQUNqQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxTQUFTZ0MsY0FBY0EsQ0FDN0JDLElBQWEsRUFDYkMsSUFBZ0UsRUFDdkQ7RUFDVCxNQUFNbkQsTUFBTSxHQUFHbUQsSUFBSSxFQUFFbkQsTUFBTSxJQUFJLEVBQUU7RUFDakMsTUFBTW9ELElBQUksR0FBR0QsSUFBSSxFQUFFQyxJQUFJLElBQUlsRSxNQUFNLENBQUNHLEtBQUssQ0FBQyxDQUFDLENBQUM7RUFDMUMsTUFBTXlDLEdBQUcsR0FBR29CLElBQUksSUFBSXRFLE1BQU0sQ0FBQ2MsV0FBVyxDQUFDLEVBQUUsQ0FBQztFQUMxQyxNQUFNMkQsT0FBTyxHQUFHRixJQUFJLEVBQUVFLE9BQU8sSUFBSSxDQUFDO0VBRWxDLElBQUlBLE9BQU8sS0FBSyxDQUFDLEVBQUU7SUFDbEIsT0FBT3pFLE1BQU0sQ0FBQzBFLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQ2pELE1BQU0sQ0FBQ3lCLEdBQUcsQ0FBQyxDQUFDTyxNQUFNLENBQUMsQ0FBQztFQUN4RDtFQUVBLE9BQU9uRCxNQUFNLENBQUNDLElBQUksQ0FDakJMLElBQUksQ0FBQ0QsTUFBTSxFQUFFaUQsR0FBRyxFQUFFc0IsSUFBSSxFQUFFbEUsTUFBTSxDQUFDQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsRUFBRWEsTUFBTSxDQUNqRSxDQUFDO0FBQ0YiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3R5cGVzL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIEF2YWlsYWJsZUhhc2hpbmdBbGdvcml0aG0gPVxuXHR8ICdzaGEzLTI1Nidcblx0fCAnc2hhMy01MTInXG5cdHwgJ2JsYWtlMmInXG5cdHwgJ3NoYTI1Nidcblx0fCAnc2hhNTEyJztcblxuZXhwb3J0IHR5cGUgQXZhaWxhYmxlS0RGID0gJ3Bia2RmMicgfCAnYmNyeXB0JyB8ICdzY3J5cHQnO1xuXG5leHBvcnQgdHlwZSBBdmFpbGFibGVLZXlQYWlyQWxnb3JpdGhtID0gJ2VkMjU1MTknO1xuXG5leHBvcnQgdHlwZSBBdmFpbGFibGVNbmVtb25pY0xhbmd1YWdlID1cblx0fCAnY2hpbmVzZV90cmFkaXRpb25hbCdcblx0fCAnY2hpbmVzZV9zaW1wbGlmaWVkJ1xuXHR8ICdwb3J0dWd1ZXNlJ1xuXHR8ICdqYXBhbmVzZSdcblx0fCAnaXRhbGlhbidcblx0fCAnc3BhbmlzaCdcblx0fCAnZW5nbGlzaCdcblx0fCAna29yZWFuJ1xuXHR8ICdmcmVuY2gnXG5cdHwgJ2N6ZWNoJztcblxuZXhwb3J0IHR5cGUgR2VuZXJhdGVLREZXaXRoQmNyeXB0T3B0aW9ucyA9IFBhcnRpYWw8e1xuXHRzYWx0X2xlbmd0aDogbnVtYmVyO1xufT47XG5cbmV4cG9ydCB0eXBlIEdlbmVyYXRlS0RGV2l0aFBCS0RGMk9wdGlvbnMgPSBQYXJ0aWFsPHtcblx0aXRlcmF0aW9uczogbnVtYmVyO1xuXHRrZXlfbGVuZ3RoOiBudW1iZXI7XG5cdHNhbHRfbGVuZ3RoOiBudW1iZXI7XG59PjtcblxuZXhwb3J0IHR5cGUgR2VuZXJhdGVLREZXaXRoU2NyeXB0T3B0aW9ucyA9IFBhcnRpYWw8e1xuXHRibG9ja19zaXplOiBudW1iZXI7XG5cdGNvc3Q6IG51bWJlcjtcblx0a2V5X2xlbmd0aDogbnVtYmVyO1xuXHRwYXJhbGxlbGl6YXRpb246IG51bWJlcjtcblx0c2FsdF9sZW5ndGg6IG51bWJlcjtcbn0+O1xuXG5leHBvcnQgdHlwZSBHZW5lcmF0ZUtleVBhaXJPcHRpb25zID0gUGFydGlhbDx7XG5cdGZvcm1hdDogJ3BlbScgfCAncmF3Jztcblx0aW5kZXhfbmFtZT86IHN0cmluZztcblx0bW5lbW9uaWM6IEdlbmVyYXRlTW5lbW9uaWNPcHRpb25zO1xuXHRzZWVkOiBHZW5lcmF0ZU1uZW1vbmljU2VlZE9wdGlvbnM7XG5cdHZlcnNpb24/OiBudW1iZXI7XG59PjtcblxuZXhwb3J0IHR5cGUgR2VuZXJhdGVNbmVtb25pY09wdGlvbnMgPSBQYXJ0aWFsPHtcblx0bGFuZ3VhZ2U6IEF2YWlsYWJsZU1uZW1vbmljTGFuZ3VhZ2U7XG5cdHJuZzogKHNpemU6IG51bWJlcikgPT4gQnVmZmVyO1xuXHRzdHJlbmd0aDogbnVtYmVyO1xufT47XG5cbmV4cG9ydCB0eXBlIEdlbmVyYXRlTW5lbW9uaWNTZWVkT3B0aW9ucyA9IFBhcnRpYWw8e1xuXHRwYXNzd29yZDogc3RyaW5nO1xufT47XG5cbmV4cG9ydCB0eXBlIEdlbmVyYXRlU2VjcmV0T3B0aW9ucyA9IFBhcnRpYWw8e1xuXHRpbmRleF9uYW1lPzogc3RyaW5nO1xuXHRyZWNvdmVyPzogYm9vbGVhbjtcblx0c2VlZDogR2VuZXJhdGVNbmVtb25pY1NlZWRPcHRpb25zO1xuXHR2ZXJzaW9uOiBudW1iZXI7XG59PjtcblxuZXhwb3J0IGludGVyZmFjZSBJS2V5TWFuYWdlclNlcnZpY2U8S2V5VHlwZSA9IEJ1ZmZlcj4ge1xuXHRnZXQgY3VycmVudF92ZXJzaW9uKCk6IG51bWJlcjtcblx0Z2V0KHZlcnNpb24/OiBudW1iZXIpOiBLZXlUeXBlO1xuXHRsb2FkKGluZGV4X25hbWU/OiBzdHJpbmcpOiBQcm9taXNlPHRydWU+O1xuXHRnZXQgbmFtZSgpOiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIFZlcnNpb25lZEtleSA9IHsgZmlsZTogc3RyaW5nOyBuYW1lOiBzdHJpbmc7IHZlcnNpb246IG51bWJlciB9O1xuXG5leHBvcnQgdHlwZSBWZXJzaW9uZWRLZXlQYWlyID0ge1xuXHRuYW1lOiBzdHJpbmc7XG5cdHBrOiBzdHJpbmc7XG5cdHNrOiBzdHJpbmc7XG5cdHZlcnNpb246IG51bWJlcjtcbn07XG4iXSwibWFwcGluZ3MiOiIiLCJpZ25vcmVMaXN0IjpbXX0=
2
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3R5cGVzL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIEF2YWlsYWJsZUhhc2hpbmdBbGdvcml0aG0gPVxuXHR8ICdzaGEzLTI1Nidcblx0fCAnc2hhMy01MTInXG5cdHwgJ2JsYWtlMmInXG5cdHwgJ3NoYTI1Nidcblx0fCAnc2hhNTEyJztcblxuZXhwb3J0IHR5cGUgQXZhaWxhYmxlS0RGID0gJ3Bia2RmMicgfCAnYmNyeXB0JyB8ICdzY3J5cHQnO1xuXG5leHBvcnQgdHlwZSBBdmFpbGFibGVLZXlQYWlyQWxnb3JpdGhtID0gJ2VkMjU1MTknO1xuXG5leHBvcnQgdHlwZSBBdmFpbGFibGVNbmVtb25pY0xhbmd1YWdlID0gJ2VuZ2xpc2gnO1xuXG5leHBvcnQgdHlwZSBHZW5lcmF0ZUtERldpdGhCY3J5cHRPcHRpb25zID0gUGFydGlhbDx7XG5cdHNhbHRfbGVuZ3RoOiBudW1iZXI7XG59PjtcblxuZXhwb3J0IHR5cGUgR2VuZXJhdGVLREZXaXRoUEJLREYyT3B0aW9ucyA9IFBhcnRpYWw8e1xuXHRpdGVyYXRpb25zOiBudW1iZXI7XG5cdGtleV9sZW5ndGg6IG51bWJlcjtcblx0c2FsdF9sZW5ndGg6IG51bWJlcjtcbn0+O1xuXG5leHBvcnQgdHlwZSBHZW5lcmF0ZUtERldpdGhTY3J5cHRPcHRpb25zID0gUGFydGlhbDx7XG5cdGJsb2NrX3NpemU6IG51bWJlcjtcblx0Y29zdDogbnVtYmVyO1xuXHRrZXlfbGVuZ3RoOiBudW1iZXI7XG5cdHBhcmFsbGVsaXphdGlvbjogbnVtYmVyO1xuXHRzYWx0X2xlbmd0aDogbnVtYmVyO1xufT47XG5cbmV4cG9ydCB0eXBlIEdlbmVyYXRlS2V5UGFpck9wdGlvbnMgPSBQYXJ0aWFsPHtcblx0Zm9ybWF0OiAncGVtJyB8ICdyYXcnO1xuXHRpbmRleF9uYW1lPzogc3RyaW5nO1xuXHRtbmVtb25pYzogR2VuZXJhdGVNbmVtb25pY09wdGlvbnM7XG5cdHNlZWQ6IEdlbmVyYXRlTW5lbW9uaWNTZWVkT3B0aW9ucztcblx0dmVyc2lvbj86IG51bWJlcjtcbn0+O1xuXG5leHBvcnQgdHlwZSBHZW5lcmF0ZU1uZW1vbmljT3B0aW9ucyA9IFBhcnRpYWw8e1xuXHRsYW5ndWFnZTogQXZhaWxhYmxlTW5lbW9uaWNMYW5ndWFnZTtcblx0c3RyZW5ndGg6IG51bWJlcjtcbn0+O1xuXG5leHBvcnQgdHlwZSBHZW5lcmF0ZU1uZW1vbmljU2VlZE9wdGlvbnMgPSBQYXJ0aWFsPHtcblx0cGFzc3dvcmQ6IHN0cmluZztcbn0+O1xuXG5leHBvcnQgdHlwZSBHZW5lcmF0ZVNlY3JldE9wdGlvbnMgPSBQYXJ0aWFsPHtcblx0aW5kZXhfbmFtZT86IHN0cmluZztcblx0cmVjb3Zlcj86IGJvb2xlYW47XG5cdHNlZWQ6IEdlbmVyYXRlTW5lbW9uaWNTZWVkT3B0aW9ucztcblx0dmVyc2lvbjogbnVtYmVyO1xufT47XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUtleU1hbmFnZXJTZXJ2aWNlPEtleVR5cGUgPSBCdWZmZXI+IHtcblx0Z2V0IGN1cnJlbnRfdmVyc2lvbigpOiBudW1iZXI7XG5cdGdldCh2ZXJzaW9uPzogbnVtYmVyKTogS2V5VHlwZTtcblx0bG9hZChpbmRleF9uYW1lPzogc3RyaW5nKTogUHJvbWlzZTx0cnVlPjtcblx0Z2V0IG5hbWUoKTogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBWZXJzaW9uZWRLZXkgPSB7IGZpbGU6IHN0cmluZzsgbmFtZTogc3RyaW5nOyB2ZXJzaW9uOiBudW1iZXIgfTtcblxuZXhwb3J0IHR5cGUgVmVyc2lvbmVkS2V5UGFpciA9IHtcblx0bmFtZTogc3RyaW5nO1xuXHRwazogc3RyaW5nO1xuXHRzazogc3RyaW5nO1xuXHR2ZXJzaW9uOiBudW1iZXI7XG59O1xuIl0sIm1hcHBpbmdzIjoiIiwiaWdub3JlTGlzdCI6W119
@@ -1,6 +1,7 @@
1
1
  import crypto from 'node:crypto';
2
2
  import path from 'node:path';
3
- import { generateMnemonic, mnemonicToSeed, wordlists } from 'bip39';
3
+ import { generateMnemonic, mnemonicToSeed } from '@scure/bip39';
4
+ import { wordlist } from '@scure/bip39/wordlists/english.js';
4
5
  /**
5
6
  * Convert a buffer to a hex string.
6
7
  *
@@ -60,14 +61,13 @@ export function hash(algorithm, message) {
60
61
  * @author Caique Araujo <caique@piggly.com.br>
61
62
  */
62
63
  export function mnemonic(options = {}) {
63
- let wordslist;
64
- if (options.language) {
65
- if (supportsMnemonicLanguage(options.language) === false) {
66
- throw Error(`Language ${options.language} not supported.`);
67
- }
68
- wordslist = wordlists[options.language];
64
+ if (options.language && options.language !== 'english') {
65
+ throw Error(`Language ${options.language} not supported. Only english is available.`);
66
+ }
67
+ if (options.strength && (options.strength < 128 || options.strength > 256)) {
68
+ throw Error('Strength must be between 128 and 256.');
69
69
  }
70
- return generateMnemonic(options.strength, options.rng, wordslist);
70
+ return generateMnemonic(wordlist, options.strength);
71
71
  }
72
72
 
73
73
  /**
@@ -112,7 +112,8 @@ export function parseFileName(file) {
112
112
  * @author Caique Araujo <caique@piggly.com.br>
113
113
  */
114
114
  export async function seed(mnemonic, options = {}) {
115
- return mnemonicToSeed(mnemonic, options.password);
115
+ const seedBytes = await mnemonicToSeed(mnemonic, options.password);
116
+ return Buffer.from(seedBytes);
116
117
  }
117
118
 
118
119
  /**
@@ -155,6 +156,6 @@ export function stringToBuffer(message) {
155
156
  * @author Caique Araujo <caique@piggly.com.br>
156
157
  */
157
158
  export function supportsMnemonicLanguage(language) {
158
- return Object.keys(wordlists).includes(language);
159
+ return language === 'english';
159
160
  }
160
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjcnlwdG8iLCJwYXRoIiwiZ2VuZXJhdGVNbmVtb25pYyIsIm1uZW1vbmljVG9TZWVkIiwid29yZGxpc3RzIiwiYnVmZmVyVG9IZXgiLCJidWZmZXIiLCJ0b1N0cmluZyIsImJ1ZmZlclRvU3RyaW5nIiwiY3V0QnVmZmVyIiwibGVuZ3RoIiwic3ViYXJyYXkiLCJoYXNoIiwiYWxnb3JpdGhtIiwibWVzc2FnZSIsImNyZWF0ZUhhc2giLCJ1cGRhdGUiLCJkaWdlc3QiLCJtbmVtb25pYyIsIm9wdGlvbnMiLCJ3b3Jkc2xpc3QiLCJsYW5ndWFnZSIsInN1cHBvcnRzTW5lbW9uaWNMYW5ndWFnZSIsIkVycm9yIiwic3RyZW5ndGgiLCJybmciLCJwYXJzZUFic3BhdGgiLCJyb290IiwiYWJzcGF0aCIsInN0YXJ0c1dpdGgiLCJqb2luIiwicGFyc2VGaWxlTmFtZSIsImZpbGUiLCJfZmlsZW5hbWUiLCJzcGxpdCIsInRyaW0iLCJ0b0xvd2VyQ2FzZSIsInJlcGxhY2UiLCJzZWVkIiwicGFzc3dvcmQiLCJzcGxpdFdvcmRzIiwiaW5wdXQiLCJjaHVua1NpemUiLCJ3b3JkcyIsInJlc3VsdCIsImkiLCJjaHVuayIsInNsaWNlIiwicHVzaCIsInN0cmluZ1RvQnVmZmVyIiwiQnVmZmVyIiwiZnJvbSIsIk9iamVjdCIsImtleXMiLCJpbmNsdWRlcyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91dGlscy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY3J5cHRvIGZyb20gJ25vZGU6Y3J5cHRvJztcbmltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCB7IGdlbmVyYXRlTW5lbW9uaWMsIG1uZW1vbmljVG9TZWVkLCB3b3JkbGlzdHMgfSBmcm9tICdiaXAzOSc7XG5cbmltcG9ydCB7XG5cdEdlbmVyYXRlTW5lbW9uaWNTZWVkT3B0aW9ucyxcblx0R2VuZXJhdGVNbmVtb25pY09wdGlvbnMsXG59IGZyb20gJ0AvdHlwZXMvaW5kZXguanMnO1xuXG4vKipcbiAqIENvbnZlcnQgYSBidWZmZXIgdG8gYSBoZXggc3RyaW5nLlxuICpcbiAqIEBwYXJhbSBidWZmZXIgLSBUaGUgYnVmZmVyIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyBUaGUgaGV4IHN0cmluZy5cbiAqIEBzaW5jZSAxLjAuMFxuICogQGF1dGhvciBDYWlxdWUgQXJhdWpvIDxjYWlxdWVAcGlnZ2x5LmNvbS5icj5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1ZmZlclRvSGV4KGJ1ZmZlcjogQnVmZmVyKSB7XG5cdHJldHVybiBidWZmZXIudG9TdHJpbmcoJ2hleCcpO1xufVxuXG4vKipcbiAqIENvbnZlcnQgYSBidWZmZXIgdG8gYSBzdHJpbmcuXG4gKlxuICogQHBhcmFtIGJ1ZmZlciAtIFRoZSBidWZmZXIgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIFRoZSBzdHJpbmcuXG4gKiBAc2luY2UgMS4wLjBcbiAqIEBhdXRob3IgQ2FpcXVlIEFyYXVqbyA8Y2FpcXVlQHBpZ2dseS5jb20uYnI+XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWZmZXJUb1N0cmluZyhidWZmZXI6IEJ1ZmZlcikge1xuXHRyZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCk7XG59XG5cbi8qKlxuICogQ3V0IGEgYnVmZmVyIHRvIGEgc3BlY2lmaWVkIGxlbmd0aC5cbiAqXG4gKiBAcGFyYW0gYnVmZmVyIC0gVGhlIGJ1ZmZlciB0byBjdXQuXG4gKiBAcGFyYW0gbGVuZ3RoIC0gVGhlIGxlbmd0aCB0byBjdXQgdGhlIGJ1ZmZlciB0by5cbiAqIEByZXR1cm5zIFRoZSBjdXQgYnVmZmVyLlxuICogQHNpbmNlIDEuMC4wXG4gKiBAYXV0aG9yIENhaXF1ZSBBcmF1am8gPGNhaXF1ZUBwaWdnbHkuY29tLmJyPlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3V0QnVmZmVyKGJ1ZmZlcjogQnVmZmVyLCBsZW5ndGg6IG51bWJlcik6IEJ1ZmZlciB7XG5cdHJldHVybiBidWZmZXIuc3ViYXJyYXkoMCwgbGVuZ3RoKTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSBhIGhhc2ggZnJvbSBhIG1lc3NhZ2UuXG4gKlxuICogQHBhcmFtIGFsZ29yaXRobSAtIFRoZSBhbGdvcml0aG0gdG8gdXNlLlxuICogQHBhcmFtIG1lc3NhZ2UgLSBUaGUgbWVzc2FnZSB0byBoYXNoLlxuICogQHJldHVybnMgVGhlIGhhc2guXG4gKiBAc2luY2UgMS4wLjBcbiAqIEBhdXRob3IgQ2FpcXVlIEFyYXVqbyA8Y2FpcXVlQHBpZ2dseS5jb20uYnI+XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNoKGFsZ29yaXRobTogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcpOiBCdWZmZXIge1xuXHRyZXR1cm4gY3J5cHRvLmNyZWF0ZUhhc2goYWxnb3JpdGhtKS51cGRhdGUobWVzc2FnZSkuZGlnZXN0KCk7XG59XG5cbi8qKlxuICogR2VuZXJhdGUgYSBtbmVtb25pYy5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIHRvIGdlbmVyYXRlIHRoZSBtbmVtb25pYy5cbiAqIEByZXR1cm5zIFRoZSBtbmVtb25pYy5cbiAqIEBzaW5jZSAxLjAuMFxuICogQGF1dGhvciBDYWlxdWUgQXJhdWpvIDxjYWlxdWVAcGlnZ2x5LmNvbS5icj5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1uZW1vbmljKG9wdGlvbnM6IEdlbmVyYXRlTW5lbW9uaWNPcHRpb25zID0ge30pOiBzdHJpbmcge1xuXHRsZXQgd29yZHNsaXN0OiBBcnJheTxzdHJpbmc+IHwgdW5kZWZpbmVkO1xuXG5cdGlmIChvcHRpb25zLmxhbmd1YWdlKSB7XG5cdFx0aWYgKHN1cHBvcnRzTW5lbW9uaWNMYW5ndWFnZShvcHRpb25zLmxhbmd1YWdlKSA9PT0gZmFsc2UpIHtcblx0XHRcdHRocm93IEVycm9yKGBMYW5ndWFnZSAke29wdGlvbnMubGFuZ3VhZ2V9IG5vdCBzdXBwb3J0ZWQuYCk7XG5cdFx0fVxuXG5cdFx0d29yZHNsaXN0ID0gd29yZGxpc3RzW29wdGlvbnMubGFuZ3VhZ2VdO1xuXHR9XG5cblx0cmV0dXJuIGdlbmVyYXRlTW5lbW9uaWMob3B0aW9ucy5zdHJlbmd0aCwgb3B0aW9ucy5ybmcsIHdvcmRzbGlzdCk7XG59XG5cbi8qKlxuICogUGFyc2UgYSBwYXRoLlxuICpcbiAqIEBwYXJhbSByb290IC0gVGhlIHJvb3QgcGF0aC5cbiAqIEBwYXJhbSBhYnNwYXRoIC0gVGhlIHBhdGggdG8gcGFyc2UuXG4gKiBAcmV0dXJucyBUaGUgcGFyc2VkIHBhdGguXG4gKiBAc2luY2UgMS4wLjBcbiAqIEBhdXRob3IgQ2FpcXVlIEFyYXVqbyA8Y2FpcXVlQHBpZ2dseS5jb20uYnI+XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUFic3BhdGgocm9vdDogc3RyaW5nLCBhYnNwYXRoPzogc3RyaW5nKTogc3RyaW5nIHtcblx0aWYgKGFic3BhdGgpIHtcblx0XHRpZiAoYWJzcGF0aC5zdGFydHNXaXRoKCcvJykgPT09IGZhbHNlKSB7XG5cdFx0XHRyZXR1cm4gcGF0aC5qb2luKHJvb3QsIGFic3BhdGgpO1xuXHRcdH1cblxuXHRcdHJldHVybiBhYnNwYXRoO1xuXHR9XG5cblx0cmV0dXJuIHJvb3Q7XG59XG5cbi8qKlxuICogUGFyc2UgYSBmaWxlIG5hbWUuXG4gKlxuICogQHBhcmFtIGZpbGUgLSBUaGUgZmlsZSBuYW1lIHRvIHBhcnNlLlxuICogQHJldHVybnMgVGhlIHBhcnNlZCBmaWxlIG5hbWUuXG4gKiBAc2luY2UgMS4wLjBcbiAqIEBhdXRob3IgQ2FpcXVlIEFyYXVqbyA8Y2FpcXVlQHBpZ2dseS5jb20uYnI+XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUZpbGVOYW1lKGZpbGU6IHN0cmluZyk6IHN0cmluZyB7XG5cdGNvbnN0IFtfZmlsZW5hbWVdID0gZmlsZS5zcGxpdCgnLicpO1xuXG5cdHJldHVybiBfZmlsZW5hbWVcblx0XHQudHJpbSgpXG5cdFx0LnRvTG93ZXJDYXNlKClcblx0XHQucmVwbGFjZSgvW1xcV1xcc10vZ2ksICdfJylcblx0XHQucmVwbGFjZSgvXysvZywgJ18nKVxuXHRcdC5yZXBsYWNlKC9eXysvLCAnJylcblx0XHQucmVwbGFjZSgvXyskLywgJycpO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlIGEgc2VlZCBmcm9tIGEgbW5lbW9uaWMuXG4gKlxuICogQHBhcmFtIG1uZW1vbmljIC0gVGhlIG1uZW1vbmljIHRvIGdlbmVyYXRlIHRoZSBzZWVkIGZyb20uXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIHRvIGdlbmVyYXRlIHRoZSBzZWVkLlxuICogQHJldHVybnMgVGhlIHNlZWQuXG4gKiBAc2luY2UgMS4wLjBcbiAqIEBhdXRob3IgQ2FpcXVlIEFyYXVqbyA8Y2FpcXVlQHBpZ2dseS5jb20uYnI+XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZWVkKFxuXHRtbmVtb25pYzogc3RyaW5nLFxuXHRvcHRpb25zOiBHZW5lcmF0ZU1uZW1vbmljU2VlZE9wdGlvbnMgPSB7fSxcbik6IFByb21pc2U8QnVmZmVyPiB7XG5cdHJldHVybiBtbmVtb25pY1RvU2VlZChtbmVtb25pYywgb3B0aW9ucy5wYXNzd29yZCk7XG59XG5cbi8qKlxuICogU3BsaXQgYSBzdHJpbmcgaW50byBjaHVua3Mgb2Ygd29yZHMuXG4gKlxuICogQHBhcmFtIGlucHV0IC0gVGhlIHN0cmluZyB0byBzcGxpdC5cbiAqIEBwYXJhbSBjaHVua1NpemUgLSBUaGUgc2l6ZSBvZiB0aGUgY2h1bmtzLlxuICogQHJldHVybnMgVGhlIGNodW5rcy5cbiAqIEBzaW5jZSAxLjAuMFxuICogQGF1dGhvciBDYWlxdWUgQXJhdWpvIDxjYWlxdWVAcGlnZ2x5LmNvbS5icj5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNwbGl0V29yZHMoaW5wdXQ6IHN0cmluZywgY2h1bmtTaXplID0gNik6IEFycmF5PEFycmF5PHN0cmluZz4+IHtcblx0Y29uc3Qgd29yZHMgPSBpbnB1dC5zcGxpdCgnICcpO1xuXHRjb25zdCByZXN1bHQ6IHN0cmluZ1tdW10gPSBbXTtcblxuXHRmb3IgKGxldCBpID0gMDsgaSA8IHdvcmRzLmxlbmd0aDsgaSArPSBjaHVua1NpemUpIHtcblx0XHRjb25zdCBjaHVuayA9IHdvcmRzLnNsaWNlKGksIGkgKyBjaHVua1NpemUpO1xuXHRcdHJlc3VsdC5wdXNoKGNodW5rKTtcblx0fVxuXG5cdHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQ29udmVydCBhIHN0cmluZyB0byBhIGJ1ZmZlci5cbiAqXG4gKiBAcGFyYW0gbWVzc2FnZSAtIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIFRoZSBidWZmZXIuXG4gKiBAc2luY2UgMS4wLjBcbiAqIEBhdXRob3IgQ2FpcXVlIEFyYXVqbyA8Y2FpcXVlQHBpZ2dseS5jb20uYnI+XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdUb0J1ZmZlcihtZXNzYWdlOiBzdHJpbmcpIHtcblx0cmV0dXJuIEJ1ZmZlci5mcm9tKG1lc3NhZ2UpO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIGEgbW5lbW9uaWMgbGFuZ3VhZ2UgaXMgc3VwcG9ydGVkLlxuICpcbiAqIEBwYXJhbSBsYW5ndWFnZSAtIFRoZSBsYW5ndWFnZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGxhbmd1YWdlIGlzIHN1cHBvcnRlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICogQHNpbmNlIDEuMC4wXG4gKiBAYXV0aG9yIENhaXF1ZSBBcmF1am8gPGNhaXF1ZUBwaWdnbHkuY29tLmJyPlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9ydHNNbmVtb25pY0xhbmd1YWdlKGxhbmd1YWdlOiBzdHJpbmcpOiBib29sZWFuIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKHdvcmRsaXN0cykuaW5jbHVkZXMobGFuZ3VhZ2UpO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxNQUFNLE1BQU0sYUFBYTtBQUNoQyxPQUFPQyxJQUFJLE1BQU0sV0FBVztBQUU1QixTQUFTQyxnQkFBZ0IsRUFBRUMsY0FBYyxFQUFFQyxTQUFTLFFBQVEsT0FBTztBQU9uRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxTQUFTQyxXQUFXQSxDQUFDQyxNQUFjLEVBQUU7RUFDM0MsT0FBT0EsTUFBTSxDQUFDQyxRQUFRLENBQUMsS0FBSyxDQUFDO0FBQzlCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLFNBQVNDLGNBQWNBLENBQUNGLE1BQWMsRUFBRTtFQUM5QyxPQUFPQSxNQUFNLENBQUNDLFFBQVEsQ0FBQyxDQUFDO0FBQ3pCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sU0FBU0UsU0FBU0EsQ0FBQ0gsTUFBYyxFQUFFSSxNQUFjLEVBQVU7RUFDakUsT0FBT0osTUFBTSxDQUFDSyxRQUFRLENBQUMsQ0FBQyxFQUFFRCxNQUFNLENBQUM7QUFDbEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxTQUFTRSxJQUFJQSxDQUFDQyxTQUFpQixFQUFFQyxPQUFlLEVBQVU7RUFDaEUsT0FBT2QsTUFBTSxDQUFDZSxVQUFVLENBQUNGLFNBQVMsQ0FBQyxDQUFDRyxNQUFNLENBQUNGLE9BQU8sQ0FBQyxDQUFDRyxNQUFNLENBQUMsQ0FBQztBQUM3RDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxTQUFTQyxRQUFRQSxDQUFDQyxPQUFnQyxHQUFHLENBQUMsQ0FBQyxFQUFVO0VBQ3ZFLElBQUlDLFNBQW9DO0VBRXhDLElBQUlELE9BQU8sQ0FBQ0UsUUFBUSxFQUFFO0lBQ3JCLElBQUlDLHdCQUF3QixDQUFDSCxPQUFPLENBQUNFLFFBQVEsQ0FBQyxLQUFLLEtBQUssRUFBRTtNQUN6RCxNQUFNRSxLQUFLLENBQUMsWUFBWUosT0FBTyxDQUFDRSxRQUFRLGlCQUFpQixDQUFDO0lBQzNEO0lBRUFELFNBQVMsR0FBR2hCLFNBQVMsQ0FBQ2UsT0FBTyxDQUFDRSxRQUFRLENBQUM7RUFDeEM7RUFFQSxPQUFPbkIsZ0JBQWdCLENBQUNpQixPQUFPLENBQUNLLFFBQVEsRUFBRUwsT0FBTyxDQUFDTSxHQUFHLEVBQUVMLFNBQVMsQ0FBQztBQUNsRTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLFNBQVNNLFlBQVlBLENBQUNDLElBQVksRUFBRUMsT0FBZ0IsRUFBVTtFQUNwRSxJQUFJQSxPQUFPLEVBQUU7SUFDWixJQUFJQSxPQUFPLENBQUNDLFVBQVUsQ0FBQyxHQUFHLENBQUMsS0FBSyxLQUFLLEVBQUU7TUFDdEMsT0FBTzVCLElBQUksQ0FBQzZCLElBQUksQ0FBQ0gsSUFBSSxFQUFFQyxPQUFPLENBQUM7SUFDaEM7SUFFQSxPQUFPQSxPQUFPO0VBQ2Y7RUFFQSxPQUFPRCxJQUFJO0FBQ1o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sU0FBU0ksYUFBYUEsQ0FBQ0MsSUFBWSxFQUFVO0VBQ25ELE1BQU0sQ0FBQ0MsU0FBUyxDQUFDLEdBQUdELElBQUksQ0FBQ0UsS0FBSyxDQUFDLEdBQUcsQ0FBQztFQUVuQyxPQUFPRCxTQUFTLENBQ2RFLElBQUksQ0FBQyxDQUFDLENBQ05DLFdBQVcsQ0FBQyxDQUFDLENBQ2JDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQ3hCQSxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUNuQkEsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FDbEJBLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDO0FBQ3JCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sZUFBZUMsSUFBSUEsQ0FDekJwQixRQUFnQixFQUNoQkMsT0FBb0MsR0FBRyxDQUFDLENBQUMsRUFDdkI7RUFDbEIsT0FBT2hCLGNBQWMsQ0FBQ2UsUUFBUSxFQUFFQyxPQUFPLENBQUNvQixRQUFRLENBQUM7QUFDbEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxTQUFTQyxVQUFVQSxDQUFDQyxLQUFhLEVBQUVDLFNBQVMsR0FBRyxDQUFDLEVBQXdCO0VBQzlFLE1BQU1DLEtBQUssR0FBR0YsS0FBSyxDQUFDUCxLQUFLLENBQUMsR0FBRyxDQUFDO0VBQzlCLE1BQU1VLE1BQWtCLEdBQUcsRUFBRTtFQUU3QixLQUFLLElBQUlDLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR0YsS0FBSyxDQUFDakMsTUFBTSxFQUFFbUMsQ0FBQyxJQUFJSCxTQUFTLEVBQUU7SUFDakQsTUFBTUksS0FBSyxHQUFHSCxLQUFLLENBQUNJLEtBQUssQ0FBQ0YsQ0FBQyxFQUFFQSxDQUFDLEdBQUdILFNBQVMsQ0FBQztJQUMzQ0UsTUFBTSxDQUFDSSxJQUFJLENBQUNGLEtBQUssQ0FBQztFQUNuQjtFQUVBLE9BQU9GLE1BQU07QUFDZDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxTQUFTSyxjQUFjQSxDQUFDbkMsT0FBZSxFQUFFO0VBQy9DLE9BQU9vQyxNQUFNLENBQUNDLElBQUksQ0FBQ3JDLE9BQU8sQ0FBQztBQUM1Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxTQUFTUSx3QkFBd0JBLENBQUNELFFBQWdCLEVBQVc7RUFDbkUsT0FBTytCLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDakQsU0FBUyxDQUFDLENBQUNrRCxRQUFRLENBQUNqQyxRQUFRLENBQUM7QUFDakQiLCJpZ25vcmVMaXN0IjpbXX0=
161
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjcnlwdG8iLCJwYXRoIiwiZ2VuZXJhdGVNbmVtb25pYyIsIm1uZW1vbmljVG9TZWVkIiwid29yZGxpc3QiLCJidWZmZXJUb0hleCIsImJ1ZmZlciIsInRvU3RyaW5nIiwiYnVmZmVyVG9TdHJpbmciLCJjdXRCdWZmZXIiLCJsZW5ndGgiLCJzdWJhcnJheSIsImhhc2giLCJhbGdvcml0aG0iLCJtZXNzYWdlIiwiY3JlYXRlSGFzaCIsInVwZGF0ZSIsImRpZ2VzdCIsIm1uZW1vbmljIiwib3B0aW9ucyIsImxhbmd1YWdlIiwiRXJyb3IiLCJzdHJlbmd0aCIsInBhcnNlQWJzcGF0aCIsInJvb3QiLCJhYnNwYXRoIiwic3RhcnRzV2l0aCIsImpvaW4iLCJwYXJzZUZpbGVOYW1lIiwiZmlsZSIsIl9maWxlbmFtZSIsInNwbGl0IiwidHJpbSIsInRvTG93ZXJDYXNlIiwicmVwbGFjZSIsInNlZWQiLCJzZWVkQnl0ZXMiLCJwYXNzd29yZCIsIkJ1ZmZlciIsImZyb20iLCJzcGxpdFdvcmRzIiwiaW5wdXQiLCJjaHVua1NpemUiLCJ3b3JkcyIsInJlc3VsdCIsImkiLCJjaHVuayIsInNsaWNlIiwicHVzaCIsInN0cmluZ1RvQnVmZmVyIiwic3VwcG9ydHNNbmVtb25pY0xhbmd1YWdlIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3V0aWxzL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjcnlwdG8gZnJvbSAnbm9kZTpjcnlwdG8nO1xuaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcblxuaW1wb3J0IHsgZ2VuZXJhdGVNbmVtb25pYywgbW5lbW9uaWNUb1NlZWQgfSBmcm9tICdAc2N1cmUvYmlwMzknO1xuaW1wb3J0IHsgd29yZGxpc3QgfSBmcm9tICdAc2N1cmUvYmlwMzkvd29yZGxpc3RzL2VuZ2xpc2guanMnO1xuXG5pbXBvcnQge1xuXHRHZW5lcmF0ZU1uZW1vbmljU2VlZE9wdGlvbnMsXG5cdEdlbmVyYXRlTW5lbW9uaWNPcHRpb25zLFxufSBmcm9tICdAL3R5cGVzL2luZGV4LmpzJztcblxuLyoqXG4gKiBDb252ZXJ0IGEgYnVmZmVyIHRvIGEgaGV4IHN0cmluZy5cbiAqXG4gKiBAcGFyYW0gYnVmZmVyIC0gVGhlIGJ1ZmZlciB0byBjb252ZXJ0LlxuICogQHJldHVybnMgVGhlIGhleCBzdHJpbmcuXG4gKiBAc2luY2UgMS4wLjBcbiAqIEBhdXRob3IgQ2FpcXVlIEFyYXVqbyA8Y2FpcXVlQHBpZ2dseS5jb20uYnI+XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWZmZXJUb0hleChidWZmZXI6IEJ1ZmZlcikge1xuXHRyZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCdoZXgnKTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGEgYnVmZmVyIHRvIGEgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSBidWZmZXIgLSBUaGUgYnVmZmVyIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyBUaGUgc3RyaW5nLlxuICogQHNpbmNlIDEuMC4wXG4gKiBAYXV0aG9yIENhaXF1ZSBBcmF1am8gPGNhaXF1ZUBwaWdnbHkuY29tLmJyPlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVmZmVyVG9TdHJpbmcoYnVmZmVyOiBCdWZmZXIpIHtcblx0cmV0dXJuIGJ1ZmZlci50b1N0cmluZygpO1xufVxuXG4vKipcbiAqIEN1dCBhIGJ1ZmZlciB0byBhIHNwZWNpZmllZCBsZW5ndGguXG4gKlxuICogQHBhcmFtIGJ1ZmZlciAtIFRoZSBidWZmZXIgdG8gY3V0LlxuICogQHBhcmFtIGxlbmd0aCAtIFRoZSBsZW5ndGggdG8gY3V0IHRoZSBidWZmZXIgdG8uXG4gKiBAcmV0dXJucyBUaGUgY3V0IGJ1ZmZlci5cbiAqIEBzaW5jZSAxLjAuMFxuICogQGF1dGhvciBDYWlxdWUgQXJhdWpvIDxjYWlxdWVAcGlnZ2x5LmNvbS5icj5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGN1dEJ1ZmZlcihidWZmZXI6IEJ1ZmZlciwgbGVuZ3RoOiBudW1iZXIpOiBCdWZmZXIge1xuXHRyZXR1cm4gYnVmZmVyLnN1YmFycmF5KDAsIGxlbmd0aCk7XG59XG5cbi8qKlxuICogR2VuZXJhdGUgYSBoYXNoIGZyb20gYSBtZXNzYWdlLlxuICpcbiAqIEBwYXJhbSBhbGdvcml0aG0gLSBUaGUgYWxnb3JpdGhtIHRvIHVzZS5cbiAqIEBwYXJhbSBtZXNzYWdlIC0gVGhlIG1lc3NhZ2UgdG8gaGFzaC5cbiAqIEByZXR1cm5zIFRoZSBoYXNoLlxuICogQHNpbmNlIDEuMC4wXG4gKiBAYXV0aG9yIENhaXF1ZSBBcmF1am8gPGNhaXF1ZUBwaWdnbHkuY29tLmJyPlxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzaChhbGdvcml0aG06IHN0cmluZywgbWVzc2FnZTogc3RyaW5nKTogQnVmZmVyIHtcblx0cmV0dXJuIGNyeXB0by5jcmVhdGVIYXNoKGFsZ29yaXRobSkudXBkYXRlKG1lc3NhZ2UpLmRpZ2VzdCgpO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlIGEgbW5lbW9uaWMuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyB0byBnZW5lcmF0ZSB0aGUgbW5lbW9uaWMuXG4gKiBAcmV0dXJucyBUaGUgbW5lbW9uaWMuXG4gKiBAc2luY2UgMS4wLjBcbiAqIEBhdXRob3IgQ2FpcXVlIEFyYXVqbyA8Y2FpcXVlQHBpZ2dseS5jb20uYnI+XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtbmVtb25pYyhvcHRpb25zOiBHZW5lcmF0ZU1uZW1vbmljT3B0aW9ucyA9IHt9KTogc3RyaW5nIHtcblx0aWYgKG9wdGlvbnMubGFuZ3VhZ2UgJiYgb3B0aW9ucy5sYW5ndWFnZSAhPT0gJ2VuZ2xpc2gnKSB7XG5cdFx0dGhyb3cgRXJyb3IoXG5cdFx0XHRgTGFuZ3VhZ2UgJHtvcHRpb25zLmxhbmd1YWdlfSBub3Qgc3VwcG9ydGVkLiBPbmx5IGVuZ2xpc2ggaXMgYXZhaWxhYmxlLmAsXG5cdFx0KTtcblx0fVxuXG5cdGlmIChvcHRpb25zLnN0cmVuZ3RoICYmIChvcHRpb25zLnN0cmVuZ3RoIDwgMTI4IHx8IG9wdGlvbnMuc3RyZW5ndGggPiAyNTYpKSB7XG5cdFx0dGhyb3cgRXJyb3IoJ1N0cmVuZ3RoIG11c3QgYmUgYmV0d2VlbiAxMjggYW5kIDI1Ni4nKTtcblx0fVxuXG5cdHJldHVybiBnZW5lcmF0ZU1uZW1vbmljKHdvcmRsaXN0LCBvcHRpb25zLnN0cmVuZ3RoKTtcbn1cblxuLyoqXG4gKiBQYXJzZSBhIHBhdGguXG4gKlxuICogQHBhcmFtIHJvb3QgLSBUaGUgcm9vdCBwYXRoLlxuICogQHBhcmFtIGFic3BhdGggLSBUaGUgcGF0aCB0byBwYXJzZS5cbiAqIEByZXR1cm5zIFRoZSBwYXJzZWQgcGF0aC5cbiAqIEBzaW5jZSAxLjAuMFxuICogQGF1dGhvciBDYWlxdWUgQXJhdWpvIDxjYWlxdWVAcGlnZ2x5LmNvbS5icj5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQWJzcGF0aChyb290OiBzdHJpbmcsIGFic3BhdGg/OiBzdHJpbmcpOiBzdHJpbmcge1xuXHRpZiAoYWJzcGF0aCkge1xuXHRcdGlmIChhYnNwYXRoLnN0YXJ0c1dpdGgoJy8nKSA9PT0gZmFsc2UpIHtcblx0XHRcdHJldHVybiBwYXRoLmpvaW4ocm9vdCwgYWJzcGF0aCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGFic3BhdGg7XG5cdH1cblxuXHRyZXR1cm4gcm9vdDtcbn1cblxuLyoqXG4gKiBQYXJzZSBhIGZpbGUgbmFtZS5cbiAqXG4gKiBAcGFyYW0gZmlsZSAtIFRoZSBmaWxlIG5hbWUgdG8gcGFyc2UuXG4gKiBAcmV0dXJucyBUaGUgcGFyc2VkIGZpbGUgbmFtZS5cbiAqIEBzaW5jZSAxLjAuMFxuICogQGF1dGhvciBDYWlxdWUgQXJhdWpvIDxjYWlxdWVAcGlnZ2x5LmNvbS5icj5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRmlsZU5hbWUoZmlsZTogc3RyaW5nKTogc3RyaW5nIHtcblx0Y29uc3QgW19maWxlbmFtZV0gPSBmaWxlLnNwbGl0KCcuJyk7XG5cblx0cmV0dXJuIF9maWxlbmFtZVxuXHRcdC50cmltKClcblx0XHQudG9Mb3dlckNhc2UoKVxuXHRcdC5yZXBsYWNlKC9bXFxXXFxzXS9naSwgJ18nKVxuXHRcdC5yZXBsYWNlKC9fKy9nLCAnXycpXG5cdFx0LnJlcGxhY2UoL15fKy8sICcnKVxuXHRcdC5yZXBsYWNlKC9fKyQvLCAnJyk7XG59XG5cbi8qKlxuICogR2VuZXJhdGUgYSBzZWVkIGZyb20gYSBtbmVtb25pYy5cbiAqXG4gKiBAcGFyYW0gbW5lbW9uaWMgLSBUaGUgbW5lbW9uaWMgdG8gZ2VuZXJhdGUgdGhlIHNlZWQgZnJvbS5cbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgdG8gZ2VuZXJhdGUgdGhlIHNlZWQuXG4gKiBAcmV0dXJucyBUaGUgc2VlZC5cbiAqIEBzaW5jZSAxLjAuMFxuICogQGF1dGhvciBDYWlxdWUgQXJhdWpvIDxjYWlxdWVAcGlnZ2x5LmNvbS5icj5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNlZWQoXG5cdG1uZW1vbmljOiBzdHJpbmcsXG5cdG9wdGlvbnM6IEdlbmVyYXRlTW5lbW9uaWNTZWVkT3B0aW9ucyA9IHt9LFxuKTogUHJvbWlzZTxCdWZmZXI+IHtcblx0Y29uc3Qgc2VlZEJ5dGVzID0gYXdhaXQgbW5lbW9uaWNUb1NlZWQobW5lbW9uaWMsIG9wdGlvbnMucGFzc3dvcmQpO1xuXHRyZXR1cm4gQnVmZmVyLmZyb20oc2VlZEJ5dGVzKTtcbn1cblxuLyoqXG4gKiBTcGxpdCBhIHN0cmluZyBpbnRvIGNodW5rcyBvZiB3b3Jkcy5cbiAqXG4gKiBAcGFyYW0gaW5wdXQgLSBUaGUgc3RyaW5nIHRvIHNwbGl0LlxuICogQHBhcmFtIGNodW5rU2l6ZSAtIFRoZSBzaXplIG9mIHRoZSBjaHVua3MuXG4gKiBAcmV0dXJucyBUaGUgY2h1bmtzLlxuICogQHNpbmNlIDEuMC4wXG4gKiBAYXV0aG9yIENhaXF1ZSBBcmF1am8gPGNhaXF1ZUBwaWdnbHkuY29tLmJyPlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3BsaXRXb3JkcyhpbnB1dDogc3RyaW5nLCBjaHVua1NpemUgPSA2KTogQXJyYXk8QXJyYXk8c3RyaW5nPj4ge1xuXHRjb25zdCB3b3JkcyA9IGlucHV0LnNwbGl0KCcgJyk7XG5cdGNvbnN0IHJlc3VsdDogc3RyaW5nW11bXSA9IFtdO1xuXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgd29yZHMubGVuZ3RoOyBpICs9IGNodW5rU2l6ZSkge1xuXHRcdGNvbnN0IGNodW5rID0gd29yZHMuc2xpY2UoaSwgaSArIGNodW5rU2l6ZSk7XG5cdFx0cmVzdWx0LnB1c2goY2h1bmspO1xuXHR9XG5cblx0cmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGEgc3RyaW5nIHRvIGEgYnVmZmVyLlxuICpcbiAqIEBwYXJhbSBtZXNzYWdlIC0gVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICogQHJldHVybnMgVGhlIGJ1ZmZlci5cbiAqIEBzaW5jZSAxLjAuMFxuICogQGF1dGhvciBDYWlxdWUgQXJhdWpvIDxjYWlxdWVAcGlnZ2x5LmNvbS5icj5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ1RvQnVmZmVyKG1lc3NhZ2U6IHN0cmluZykge1xuXHRyZXR1cm4gQnVmZmVyLmZyb20obWVzc2FnZSk7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgYSBtbmVtb25pYyBsYW5ndWFnZSBpcyBzdXBwb3J0ZWQuXG4gKlxuICogQHBhcmFtIGxhbmd1YWdlIC0gVGhlIGxhbmd1YWdlIHRvIGNoZWNrLlxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgbGFuZ3VhZ2UgaXMgc3VwcG9ydGVkLCBmYWxzZSBvdGhlcndpc2UuXG4gKiBAc2luY2UgMS4wLjBcbiAqIEBhdXRob3IgQ2FpcXVlIEFyYXVqbyA8Y2FpcXVlQHBpZ2dseS5jb20uYnI+XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3J0c01uZW1vbmljTGFuZ3VhZ2UobGFuZ3VhZ2U6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gbGFuZ3VhZ2UgPT09ICdlbmdsaXNoJztcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUEsT0FBT0EsTUFBTSxN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
@@ -19,3 +19,13 @@ export declare function generateAES256SecretCommand(program: Command): void;
19
19
  * @author Caique Araujo <caique@piggly.com.br>
20
20
  */
21
21
  export declare function recoverAES256SecretCommand(program: Command): void;
22
+ /**
23
+ * Generate a secret based on a mnemonic phrase. It should be used with aes256
24
+ * algorithm.
25
+ *
26
+ * @param program - The program to add the command to.
27
+ * @returns The program.
28
+ * @since 1.0.0
29
+ * @author Caique Araujo <caique@piggly.com.br>
30
+ */
31
+ export declare function generateMnemonicSecretCommand(program: Command): void;
@@ -19,3 +19,13 @@ export declare function generateAES256SecretCommand(program: Command): void;
19
19
  * @author Caique Araujo <caique@piggly.com.br>
20
20
  */
21
21
  export declare function recoverAES256SecretCommand(program: Command): void;
22
+ /**
23
+ * Generate a secret based on a mnemonic phrase. It should be used with aes256
24
+ * algorithm.
25
+ *
26
+ * @param program - The program to add the command to.
27
+ * @returns The program.
28
+ * @since 1.0.0
29
+ * @author Caique Araujo <caique@piggly.com.br>
30
+ */
31
+ export declare function generateMnemonicSecretCommand(program: Command): void;
@@ -19,3 +19,13 @@ export declare function generateAES256SecretCommand(program: Command): void;
19
19
  * @author Caique Araujo <caique@piggly.com.br>
20
20
  */
21
21
  export declare function recoverAES256SecretCommand(program: Command): void;
22
+ /**
23
+ * Generate a secret based on a mnemonic phrase. It should be used with aes256
24
+ * algorithm.
25
+ *
26
+ * @param program - The program to add the command to.
27
+ * @returns The program.
28
+ * @since 1.0.0
29
+ * @author Caique Araujo <caique@piggly.com.br>
30
+ */
31
+ export declare function generateMnemonicSecretCommand(program: Command): void;
@@ -152,10 +152,20 @@ export declare function encryptCTRStream(secret: Buffer, keys?: Array<Buffer>, a
152
152
  export declare function decryptCTRStream(secret: Buffer, keys?: Array<Buffer>, aad?: Buffer): Transform;
153
153
  /**
154
154
  * Generate a secret FROM a seed WITH SHA-256.
155
+ * Now it uses HKDF. To keep support to previous version use `version: 1`.
155
156
  *
156
- * @param seed
157
+ * @warning Old secrets (<=0.7.x versions) should use the `version: 1` option.
158
+ * @param seed - The seed to generate the secret from.
159
+ * @param opts - The options to generate the secret.
160
+ * @param opts.length - The length of the secret.
161
+ * @param opts.salt - The salt to use.
162
+ * @param opts.version - The version of the secret. Set to `1` to generate a secret compatible with previous versions (<=0.7.x).
157
163
  * @returns The secret.
158
164
  * @since 0.1.0
159
165
  * @author Caique Araujo <caique@piggly.com.br>
160
166
  */
161
- export declare function generateSecret(seed?: Buffer): Buffer;
167
+ export declare function generateSecret(seed?: Buffer, opts?: Partial<{
168
+ length: number;
169
+ salt: Buffer;
170
+ version: 1 | 2;
171
+ }>): Buffer;
@@ -152,10 +152,20 @@ export declare function encryptCTRStream(secret: Buffer, keys?: Array<Buffer>, a
152
152
  export declare function decryptCTRStream(secret: Buffer, keys?: Array<Buffer>, aad?: Buffer): Transform;
153
153
  /**
154
154
  * Generate a secret FROM a seed WITH SHA-256.
155
+ * Now it uses HKDF. To keep support to previous version use `version: 1`.
155
156
  *
156
- * @param seed
157
+ * @warning Old secrets (<=0.7.x versions) should use the `version: 1` option.
158
+ * @param seed - The seed to generate the secret from.
159
+ * @param opts - The options to generate the secret.
160
+ * @param opts.length - The length of the secret.
161
+ * @param opts.salt - The salt to use.
162
+ * @param opts.version - The version of the secret. Set to `1` to generate a secret compatible with previous versions (<=0.7.x).
157
163
  * @returns The secret.
158
164
  * @since 0.1.0
159
165
  * @author Caique Araujo <caique@piggly.com.br>
160
166
  */
161
- export declare function generateSecret(seed?: Buffer): Buffer;
167
+ export declare function generateSecret(seed?: Buffer, opts?: Partial<{
168
+ length: number;
169
+ salt: Buffer;
170
+ version: 1 | 2;
171
+ }>): Buffer;
@@ -152,10 +152,20 @@ export declare function encryptCTRStream(secret: Buffer, keys?: Array<Buffer>, a
152
152
  export declare function decryptCTRStream(secret: Buffer, keys?: Array<Buffer>, aad?: Buffer): Transform;
153
153
  /**
154
154
  * Generate a secret FROM a seed WITH SHA-256.
155
+ * Now it uses HKDF. To keep support to previous version use `version: 1`.
155
156
  *
156
- * @param seed
157
+ * @warning Old secrets (<=0.7.x versions) should use the `version: 1` option.
158
+ * @param seed - The seed to generate the secret from.
159
+ * @param opts - The options to generate the secret.
160
+ * @param opts.length - The length of the secret.
161
+ * @param opts.salt - The salt to use.
162
+ * @param opts.version - The version of the secret. Set to `1` to generate a secret compatible with previous versions (<=0.7.x).
157
163
  * @returns The secret.
158
164
  * @since 0.1.0
159
165
  * @author Caique Araujo <caique@piggly.com.br>
160
166
  */
161
- export declare function generateSecret(seed?: Buffer): Buffer;
167
+ export declare function generateSecret(seed?: Buffer, opts?: Partial<{
168
+ length: number;
169
+ salt: Buffer;
170
+ version: 1 | 2;
171
+ }>): Buffer;
@@ -1,7 +1,7 @@
1
1
  export type AvailableHashingAlgorithm = 'sha3-256' | 'sha3-512' | 'blake2b' | 'sha256' | 'sha512';
2
2
  export type AvailableKDF = 'pbkdf2' | 'bcrypt' | 'scrypt';
3
3
  export type AvailableKeyPairAlgorithm = 'ed25519';
4
- export type AvailableMnemonicLanguage = 'chinese_traditional' | 'chinese_simplified' | 'portuguese' | 'japanese' | 'italian' | 'spanish' | 'english' | 'korean' | 'french' | 'czech';
4
+ export type AvailableMnemonicLanguage = 'english';
5
5
  export type GenerateKDFWithBcryptOptions = Partial<{
6
6
  salt_length: number;
7
7
  }>;
@@ -26,7 +26,6 @@ export type GenerateKeyPairOptions = Partial<{
26
26
  }>;
27
27
  export type GenerateMnemonicOptions = Partial<{
28
28
  language: AvailableMnemonicLanguage;
29
- rng: (size: number) => Buffer;
30
29
  strength: number;
31
30
  }>;
32
31
  export type GenerateMnemonicSeedOptions = Partial<{
@@ -1,7 +1,7 @@
1
1
  export type AvailableHashingAlgorithm = 'sha3-256' | 'sha3-512' | 'blake2b' | 'sha256' | 'sha512';
2
2
  export type AvailableKDF = 'pbkdf2' | 'bcrypt' | 'scrypt';
3
3
  export type AvailableKeyPairAlgorithm = 'ed25519';
4
- export type AvailableMnemonicLanguage = 'chinese_traditional' | 'chinese_simplified' | 'portuguese' | 'japanese' | 'italian' | 'spanish' | 'english' | 'korean' | 'french' | 'czech';
4
+ export type AvailableMnemonicLanguage = 'english';
5
5
  export type GenerateKDFWithBcryptOptions = Partial<{
6
6
  salt_length: number;
7
7
  }>;
@@ -26,7 +26,6 @@ export type GenerateKeyPairOptions = Partial<{
26
26
  }>;
27
27
  export type GenerateMnemonicOptions = Partial<{
28
28
  language: AvailableMnemonicLanguage;
29
- rng: (size: number) => Buffer;
30
29
  strength: number;
31
30
  }>;
32
31
  export type GenerateMnemonicSeedOptions = Partial<{
@@ -1,7 +1,7 @@
1
1
  export type AvailableHashingAlgorithm = 'sha3-256' | 'sha3-512' | 'blake2b' | 'sha256' | 'sha512';
2
2
  export type AvailableKDF = 'pbkdf2' | 'bcrypt' | 'scrypt';
3
3
  export type AvailableKeyPairAlgorithm = 'ed25519';
4
- export type AvailableMnemonicLanguage = 'chinese_traditional' | 'chinese_simplified' | 'portuguese' | 'japanese' | 'italian' | 'spanish' | 'english' | 'korean' | 'french' | 'czech';
4
+ export type AvailableMnemonicLanguage = 'english';
5
5
  export type GenerateKDFWithBcryptOptions = Partial<{
6
6
  salt_length: number;
7
7
  }>;
@@ -26,7 +26,6 @@ export type GenerateKeyPairOptions = Partial<{
26
26
  }>;
27
27
  export type GenerateMnemonicOptions = Partial<{
28
28
  language: AvailableMnemonicLanguage;
29
- rng: (size: number) => Buffer;
30
29
  strength: number;
31
30
  }>;
32
31
  export type GenerateMnemonicSeedOptions = Partial<{
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@piggly/secrets",
3
- "version": "0.7.0",
3
+ "version": "0.8.1",
4
4
  "description": "An ESM/CommonJS library to better manage local secrets.",
5
5
  "type": "module",
6
6
  "scripts": {
@@ -183,13 +183,13 @@
183
183
  "dependencies": {
184
184
  "@noble/curves": "^2.0.1",
185
185
  "@noble/hashes": "^2.0.1",
186
+ "@scure/bip39": "^2.0.1",
186
187
  "argon2": "^0.44.0",
187
188
  "bcrypt": "^6.0.0",
188
- "bip39": "^3.1.0",
189
189
  "chalk": "^5.6.2",
190
190
  "commander": "^14.0.2"
191
191
  },
192
192
  "engine": {
193
- "node": ">=18"
193
+ "node": ">=20"
194
194
  }
195
195
  }