@bitgo-beta/abstract-utxo 1.1.1-beta.2258 → 1.1.1-beta.2259

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,50 @@
1
1
  import { fixedScriptWallet } from '@bitgo/wasm-utxo';
2
+ import type { UnifiedRecipientPreference } from '@bitgo-beta/sdk-core';
3
+ import { AddressCodec } from '../../transaction/recipient';
4
+ import { UtxoCoinName, WasmUtxoCoinName } from '../../names';
2
5
  export type ZcashAddressKind = 'transparent' | 'shielded';
6
+ /**
7
+ * Address codec for Zcash coins ('zec'/'tzec') that understands ZIP-316
8
+ * Unified Addresses in addition to ordinary transparent addresses.
9
+ *
10
+ * - `decode` resolves the bytes a recipient pays to (see its doc): by default
11
+ * the transparent scriptPubKey; with `unifiedRecipientPreference: 'shielded'`
12
+ * the raw Orchard/Ironwood receiver of a Unified Address.
13
+ * - `encode`/`toExtendedAddressFormat` are unchanged: scripts can only be
14
+ * written back out as transparent addresses.
15
+ * - `isValidAddress` accepts transparent addresses and Unified Addresses with
16
+ * a transparent or Orchard receiver.
17
+ */
18
+ export declare class ZecAddressCodec extends AddressCodec {
19
+ /** The Zcash network name for wasm calls — 'zec' or 'tzec'. */
20
+ private readonly zcashNetworkName;
21
+ /** How Unified Address recipients resolve when this codec decodes them. */
22
+ private readonly unifiedRecipientPreference;
23
+ constructor(coinName: UtxoCoinName, wasmName: WasmUtxoCoinName, unifiedRecipientPreference?: UnifiedRecipientPreference);
24
+ /**
25
+ * Whether `address` is a valid Zcash address for this coin's network.
26
+ *
27
+ * Mirrors the pre-codec `Zec.isValidAddress` logic exactly: the address is
28
+ * valid iff it has a usable transparent receiver (an ordinary transparent
29
+ * address, or a UA carrying a transparent receiver) or an Orchard receiver
30
+ * (a UA carrying one).
31
+ */
32
+ isValidAddress(address: string): boolean;
33
+ /**
34
+ * Resolve `address` to the bytes this codec's unified-recipient preference pays to.
35
+ *
36
+ * - `'transparent'` (default) resolves the scriptPubKey: an ordinary
37
+ * transparent address decodes to its own script, and a UA with a
38
+ * transparent receiver decodes to that receiver's script. A UA without a
39
+ * transparent receiver (e.g. Orchard-only) throws, since a shielded
40
+ * output has no script.
41
+ * - `'shielded'` resolves the raw Orchard (Ironwood) receiver — the
42
+ * 43-byte diversifier + `pk_d` — of a UA carrying one. Any other address
43
+ * (plain transparent, transparent-only UA, malformed, wrong network)
44
+ * throws, since it has no Orchard receiver to resolve.
45
+ */
46
+ decode(address: string): Uint8Array;
47
+ }
3
48
  /**
4
49
  * Whether `address` is a well-formed ZIP-316 Unified Address for `network`
5
50
  * with an Orchard receiver. BitGo only supports Orchard, so a UA without one
@@ -1 +1 @@
1
- {"version":3,"file":"address.d.ts","sourceRoot":"","sources":["../../../../../src/impl/zec/address.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,iBAAiB,EAAc,MAAM,kBAAkB,CAAC;AAEzF,MAAM,MAAM,gBAAgB,GAAG,aAAa,GAAG,UAAU,CAAC;AAE1D;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,CAAC,gBAAgB,GAAG,OAAO,CAM5G;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,iBAAiB,CAAC,gBAAgB,GAC1C,gBAAgB,GAAG,SAAS,CAa9B;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,CAAC,gBAAgB,GAAG,OAAO,CAEzG"}
1
+ {"version":3,"file":"address.d.ts","sourceRoot":"","sources":["../../../../../src/impl/zec/address.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,iBAAiB,EAA4B,MAAM,kBAAkB,CAAC;AACvG,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAEvE,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE7D,MAAM,MAAM,gBAAgB,GAAG,aAAa,GAAG,UAAU,CAAC;AAE1D;;;;;;;;;;;GAWG;AACH,qBAAa,eAAgB,SAAQ,YAAY;IAC/C,+DAA+D;IAC/D,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAqC;IACtE,2EAA2E;IAC3E,OAAO,CAAC,QAAQ,CAAC,0BAA0B,CAA6B;gBAGtE,QAAQ,EAAE,YAAY,EACtB,QAAQ,EAAE,gBAAgB,EAC1B,0BAA0B,GAAE,0BAA0C;IAOxE;;;;;;;OAOG;IACM,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAOjD;;;;;;;;;;;;OAYG;IACM,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU;CAiB7C;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,CAAC,gBAAgB,GAAG,OAAO,CAM5G;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,iBAAiB,CAAC,gBAAgB,GAC1C,gBAAgB,GAAG,SAAS,CAa9B;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,CAAC,gBAAgB,GAAG,OAAO,CAEzG"}
@@ -1,9 +1,74 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ZecAddressCodec = void 0;
3
4
  exports.isShieldedZcashAddress = isShieldedZcashAddress;
4
5
  exports.getZcashAddressKind = getZcashAddressKind;
5
6
  exports.isValidZcashAddress = isValidZcashAddress;
6
7
  const wasm_utxo_1 = require("@bitgo/wasm-utxo");
8
+ const recipient_1 = require("../../transaction/recipient");
9
+ /**
10
+ * Address codec for Zcash coins ('zec'/'tzec') that understands ZIP-316
11
+ * Unified Addresses in addition to ordinary transparent addresses.
12
+ *
13
+ * - `decode` resolves the bytes a recipient pays to (see its doc): by default
14
+ * the transparent scriptPubKey; with `unifiedRecipientPreference: 'shielded'`
15
+ * the raw Orchard/Ironwood receiver of a Unified Address.
16
+ * - `encode`/`toExtendedAddressFormat` are unchanged: scripts can only be
17
+ * written back out as transparent addresses.
18
+ * - `isValidAddress` accepts transparent addresses and Unified Addresses with
19
+ * a transparent or Orchard receiver.
20
+ */
21
+ class ZecAddressCodec extends recipient_1.AddressCodec {
22
+ constructor(coinName, wasmName, unifiedRecipientPreference = 'transparent') {
23
+ super(coinName, wasmName);
24
+ this.zcashNetworkName = wasmName;
25
+ this.unifiedRecipientPreference = unifiedRecipientPreference;
26
+ }
27
+ /**
28
+ * Whether `address` is a valid Zcash address for this coin's network.
29
+ *
30
+ * Mirrors the pre-codec `Zec.isValidAddress` logic exactly: the address is
31
+ * valid iff it has a usable transparent receiver (an ordinary transparent
32
+ * address, or a UA carrying a transparent receiver) or an Orchard receiver
33
+ * (a UA carrying one).
34
+ */
35
+ isValidAddress(address) {
36
+ return (wasm_utxo_1.zcashAddress.hasTransparentReceiver(address, this.wasmName) ||
37
+ wasm_utxo_1.zcashAddress.hasOrchardReceiver(address, this.wasmName));
38
+ }
39
+ /**
40
+ * Resolve `address` to the bytes this codec's unified-recipient preference pays to.
41
+ *
42
+ * - `'transparent'` (default) resolves the scriptPubKey: an ordinary
43
+ * transparent address decodes to its own script, and a UA with a
44
+ * transparent receiver decodes to that receiver's script. A UA without a
45
+ * transparent receiver (e.g. Orchard-only) throws, since a shielded
46
+ * output has no script.
47
+ * - `'shielded'` resolves the raw Orchard (Ironwood) receiver — the
48
+ * 43-byte diversifier + `pk_d` — of a UA carrying one. Any other address
49
+ * (plain transparent, transparent-only UA, malformed, wrong network)
50
+ * throws, since it has no Orchard receiver to resolve.
51
+ */
52
+ decode(address) {
53
+ if (this.unifiedRecipientPreference !== 'shielded') {
54
+ return wasm_utxo_1.zcashAddress.toTransparentReceiverWithCoin(address, this.wasmName);
55
+ }
56
+ // The raw Orchard receiver exists only for a Unified Address carrying one; anything else
57
+ // (plain transparent address, transparent-only UA, malformed, wrong network) throws.
58
+ let unified;
59
+ try {
60
+ unified = wasm_utxo_1.fixedScriptWallet.ZcashUnifiedAddress.parse(address, this.zcashNetworkName);
61
+ }
62
+ catch {
63
+ throw new Error(`address ${address} is not a valid address for network ${this.zcashNetworkName}`);
64
+ }
65
+ if (!unified?.hasOrchardReceiver) {
66
+ throw new Error(`address ${address} has no Orchard receiver to resolve as shielded`);
67
+ }
68
+ return wasm_utxo_1.zcashAddress.toShieldedReceiverWithCoin(address, this.wasmName);
69
+ }
70
+ }
71
+ exports.ZecAddressCodec = ZecAddressCodec;
7
72
  /**
8
73
  * Whether `address` is a well-formed ZIP-316 Unified Address for `network`
9
74
  * with an Orchard receiver. BitGo only supports Orchard, so a UA without one
@@ -52,4 +117,4 @@ function getZcashAddressKind(address, network) {
52
117
  function isValidZcashAddress(address, network) {
53
118
  return getZcashAddressKind(address, network) !== undefined;
54
119
  }
55
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkcmVzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9pbXBsL3plYy9hZGRyZXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBU0Esd0RBTUM7QUFPRCxrREFnQkM7QUFjRCxrREFFQztBQXRERCxnREFBeUY7QUFJekY7Ozs7R0FJRztBQUNILFNBQWdCLHNCQUFzQixDQUFDLE9BQWUsRUFBRSxPQUEyQztJQUNqRyxJQUFJLENBQUM7UUFDSCxPQUFPLDZCQUFpQixDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsa0JBQWtCLENBQUM7SUFDMUYsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztBQUNILENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0IsbUJBQW1CLENBQ2pDLE9BQWUsRUFDZixPQUEyQztJQUUzQyxrRkFBa0Y7SUFDbEYsZ0ZBQWdGO0lBQ2hGLGlGQUFpRjtJQUNqRixJQUFJLElBQUEsc0JBQVUsRUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQztZQUNILG1CQUFXLENBQUMsc0JBQXNCLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ3JELE9BQU8sYUFBYSxDQUFDO1FBQ3ZCLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxrRUFBa0U7UUFDcEUsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLHNCQUFzQixDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDM0UsQ0FBQztBQUVEOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsU0FBZ0IsbUJBQW1CLENBQUMsT0FBZSxFQUFFLE9BQTJDO0lBQzlGLE9BQU8sbUJBQW1CLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxLQUFLLFNBQVMsQ0FBQztBQUM3RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYWRkcmVzcyBhcyB3YXNtQWRkcmVzcywgZml4ZWRTY3JpcHRXYWxsZXQsIGlzQ29pbk5hbWUgfSBmcm9tICdAYml0Z28vd2FzbS11dHhvJztcblxuZXhwb3J0IHR5cGUgWmNhc2hBZGRyZXNzS2luZCA9ICd0cmFuc3BhcmVudCcgfCAnc2hpZWxkZWQnO1xuXG4vKipcbiAqIFdoZXRoZXIgYGFkZHJlc3NgIGlzIGEgd2VsbC1mb3JtZWQgWklQLTMxNiBVbmlmaWVkIEFkZHJlc3MgZm9yIGBuZXR3b3JrYFxuICogd2l0aCBhbiBPcmNoYXJkIHJlY2VpdmVyLiBCaXRHbyBvbmx5IHN1cHBvcnRzIE9yY2hhcmQsIHNvIGEgVUEgd2l0aG91dCBvbmVcbiAqIChlLmcuIFNhcGxpbmctIG9yIHRyYW5zcGFyZW50LW9ubHkpIGlzIG5vdCBjb25zaWRlcmVkIHZhbGlkIGhlcmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1NoaWVsZGVkWmNhc2hBZGRyZXNzKGFkZHJlc3M6IHN0cmluZywgbmV0d29yazogZml4ZWRTY3JpcHRXYWxsZXQuWmNhc2hOZXR3b3JrTmFtZSk6IGJvb2xlYW4ge1xuICB0cnkge1xuICAgIHJldHVybiBmaXhlZFNjcmlwdFdhbGxldC5aY2FzaFVuaWZpZWRBZGRyZXNzLnBhcnNlKGFkZHJlc3MsIG5ldHdvcmspLmhhc09yY2hhcmRSZWNlaXZlcjtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogQ2xhc3NpZnkgYSBaY2FzaCBhZGRyZXNzIHN0cmluZyBhcyB0cmFuc3BhcmVudCBvciBzaGllbGRlZCwgdmFsaWRhdGluZyBpdCBpblxuICogdGhlIHByb2Nlc3MuIFJldHVybnMgdW5kZWZpbmVkIGlmIHRoZSBhZGRyZXNzIGlzIG5laXRoZXIgYSB2YWxpZCB0cmFuc3BhcmVudFxuICogYWRkcmVzcyBub3IgYSB3ZWxsLWZvcm1lZCBaSVAtMzE2IFVuaWZpZWQgQWRkcmVzcyBmb3IgYG5ldHdvcmtgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0WmNhc2hBZGRyZXNzS2luZChcbiAgYWRkcmVzczogc3RyaW5nLFxuICBuZXR3b3JrOiBmaXhlZFNjcmlwdFdhbGxldC5aY2FzaE5ldHdvcmtOYW1lXG4pOiBaY2FzaEFkZHJlc3NLaW5kIHwgdW5kZWZpbmVkIHtcbiAgLy8gWmNhc2hOZXR3b3JrTmFtZSBhbHNvIHBlcm1pdHMgJ3pjYXNoJy8nemNhc2hUZXN0Jywgd2hpY2ggdG9PdXRwdXRTY3JpcHRXaXRoQ29pblxuICAvLyBkb2Vzbid0IGFjY2VwdCAoaXQgdGFrZXMgYSBDb2luTmFtZSwgaS5lLiAnemVjJy8ndHplYycpLiBTa2lwIHN0cmFpZ2h0IHRvIHRoZVxuICAvLyBzaGllbGRlZCBjaGVjayBmb3IgdGhvc2UgcmF0aGVyIHRoYW4gcmVseWluZyBvbiBhbiB1bnNhZmUgY2FzdCArIGNhdWdodCB0aHJvdy5cbiAgaWYgKGlzQ29pbk5hbWUobmV0d29yaykpIHtcbiAgICB0cnkge1xuICAgICAgd2FzbUFkZHJlc3MudG9PdXRwdXRTY3JpcHRXaXRoQ29pbihhZGRyZXNzLCBuZXR3b3JrKTtcbiAgICAgIHJldHVybiAndHJhbnNwYXJlbnQnO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gbm90IGEgdmFsaWQgdHJhbnNwYXJlbnQgYWRkcmVzczsgZmFsbCB0aHJvdWdoIHRvIHNoaWVsZGVkIGNoZWNrXG4gICAgfVxuICB9XG4gIHJldHVybiBpc1NoaWVsZGVkWmNhc2hBZGRyZXNzKGFkZHJlc3MsIG5ldHdvcmspID8gJ3NoaWVsZGVkJyA6IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBTdGFuZGFsb25lIGNvdW50ZXJwYXJ0IHRvIGBaZWMuaXNWYWxpZEFkZHJlc3NgLCBwYXJhbWV0ZXJpemVkIGJ5IGBuZXR3b3JrYFxuICogaW5zdGVhZCBvZiByZXF1aXJpbmcgYSBjb2luIGluc3RhbmNlLiBBY2NlcHRzIHRyYW5zcGFyZW50IGFkZHJlc3NlcyBhbmRcbiAqIHNoaWVsZGVkIFpJUC0zMTYgVW5pZmllZCBBZGRyZXNzZXMuXG4gKlxuICogTm90IHN0cnVjdHVyYWxseSBpZGVudGljYWwgdG8gYFplYy5pc1ZhbGlkQWRkcmVzc2A6IHRoZSBiYXNlIGNsYXNzIGFsc29cbiAqIHJvdW5kLXRyaXBzIHRoZSBwYXJzZWQgc2NyaXB0IHRocm91Z2ggZWFjaCBrbm93biBlbmNvZGluZyBmb3JtYXQgKHNlZVxuICogYEFic3RyYWN0VXR4b0NvaW4uaXNWYWxpZEFkZHJlc3NgKSwgd2hlcmVhcyB0aGlzIG9ubHkgY2FsbHNcbiAqIGB0b091dHB1dFNjcmlwdFdpdGhDb2luYCBvbmNlIHZpYSBgZ2V0WmNhc2hBZGRyZXNzS2luZGAuIFRoZXkgYWdyZWUgaW5cbiAqIHByYWN0aWNlIHNpbmNlIHplYy90emVjIGhhdmUgbm8gYWx0ZXJuYXRlIHRyYW5zcGFyZW50LWFkZHJlc3MgZW5jb2RpbmcgdG9cbiAqIHJvdW5kLXRyaXAgYWdhaW5zdCwgYnV0IHRoYXQncyBub3QgZ3VhcmFudGVlZCB0byByZW1haW4gdHJ1ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRaY2FzaEFkZHJlc3MoYWRkcmVzczogc3RyaW5nLCBuZXR3b3JrOiBmaXhlZFNjcmlwdFdhbGxldC5aY2FzaE5ldHdvcmtOYW1lKTogYm9vbGVhbiB7XG4gIHJldHVybiBnZXRaY2FzaEFkZHJlc3NLaW5kKGFkZHJlc3MsIG5ldHdvcmspICE9PSB1bmRlZmluZWQ7XG59XG4iXX0=
120
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkcmVzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9pbXBsL3plYy9hZGRyZXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQXdGQSx3REFNQztBQU9ELGtEQWdCQztBQWNELGtEQUVDO0FBcklELGdEQUF1RztBQUd2RywyREFBMkQ7QUFLM0Q7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFhLGVBQWdCLFNBQVEsd0JBQVk7SUFNL0MsWUFDRSxRQUFzQixFQUN0QixRQUEwQixFQUMxQiw2QkFBeUQsYUFBYTtRQUV0RSxLQUFLLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxRQUE4QyxDQUFDO1FBQ3ZFLElBQUksQ0FBQywwQkFBMEIsR0FBRywwQkFBMEIsQ0FBQztJQUMvRCxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNNLGNBQWMsQ0FBQyxPQUFlO1FBQ3JDLE9BQU8sQ0FDTCx3QkFBWSxDQUFDLHNCQUFzQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQzNELHdCQUFZLENBQUMsa0JBQWtCLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FDeEQsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7O09BWUc7SUFDTSxNQUFNLENBQUMsT0FBZTtRQUM3QixJQUFJLElBQUksQ0FBQywwQkFBMEIsS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUNuRCxPQUFPLHdCQUFZLENBQUMsNkJBQTZCLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM1RSxDQUFDO1FBQ0QseUZBQXlGO1FBQ3pGLHFGQUFxRjtRQUNyRixJQUFJLE9BQTBELENBQUM7UUFDL0QsSUFBSSxDQUFDO1lBQ0gsT0FBTyxHQUFHLDZCQUFpQixDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDeEYsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxPQUFPLHVDQUF1QyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO1FBQ3BHLENBQUM7UUFDRCxJQUFJLENBQUMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLENBQUM7WUFDakMsTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLE9BQU8saURBQWlELENBQUMsQ0FBQztRQUN2RixDQUFDO1FBQ0QsT0FBTyx3QkFBWSxDQUFDLDBCQUEwQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDekUsQ0FBQztDQUNGO0FBN0RELDBDQTZEQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQixzQkFBc0IsQ0FBQyxPQUFlLEVBQUUsT0FBMkM7SUFDakcsSUFBSSxDQUFDO1FBQ0gsT0FBTyw2QkFBaUIsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLGtCQUFrQixDQUFDO0lBQzFGLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLG1CQUFtQixDQUNqQyxPQUFlLEVBQ2YsT0FBMkM7SUFFM0Msa0ZBQWtGO0lBQ2xGLGdGQUFnRjtJQUNoRixpRkFBaUY7SUFDakYsSUFBSSxJQUFBLHNCQUFVLEVBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUM7WUFDSCxtQkFBVyxDQUFDLHNCQUFzQixDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztZQUNyRCxPQUFPLGFBQWEsQ0FBQztRQUN2QixDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1Asa0VBQWtFO1FBQ3BFLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxzQkFBc0IsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQzNFLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7R0FXRztBQUNILFNBQWdCLG1CQUFtQixDQUFDLE9BQWUsRUFBRSxPQUEyQztJQUM5RixPQUFPLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsS0FBSyxTQUFTLENBQUM7QUFDN0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFkZHJlc3MgYXMgd2FzbUFkZHJlc3MsIGZpeGVkU2NyaXB0V2FsbGV0LCBpc0NvaW5OYW1lLCB6Y2FzaEFkZHJlc3MgfSBmcm9tICdAYml0Z28vd2FzbS11dHhvJztcbmltcG9ydCB0eXBlIHsgVW5pZmllZFJlY2lwaWVudFByZWZlcmVuY2UgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5cbmltcG9ydCB7IEFkZHJlc3NDb2RlYyB9IGZyb20gJy4uLy4uL3RyYW5zYWN0aW9uL3JlY2lwaWVudCc7XG5pbXBvcnQgeyBVdHhvQ29pbk5hbWUsIFdhc21VdHhvQ29pbk5hbWUgfSBmcm9tICcuLi8uLi9uYW1lcyc7XG5cbmV4cG9ydCB0eXBlIFpjYXNoQWRkcmVzc0tpbmQgPSAndHJhbnNwYXJlbnQnIHwgJ3NoaWVsZGVkJztcblxuLyoqXG4gKiBBZGRyZXNzIGNvZGVjIGZvciBaY2FzaCBjb2lucyAoJ3plYycvJ3R6ZWMnKSB0aGF0IHVuZGVyc3RhbmRzIFpJUC0zMTZcbiAqIFVuaWZpZWQgQWRkcmVzc2VzIGluIGFkZGl0aW9uIHRvIG9yZGluYXJ5IHRyYW5zcGFyZW50IGFkZHJlc3Nlcy5cbiAqXG4gKiAtIGBkZWNvZGVgIHJlc29sdmVzIHRoZSBieXRlcyBhIHJlY2lwaWVudCBwYXlzIHRvIChzZWUgaXRzIGRvYyk6IGJ5IGRlZmF1bHRcbiAqICAgdGhlIHRyYW5zcGFyZW50IHNjcmlwdFB1YktleTsgd2l0aCBgdW5pZmllZFJlY2lwaWVudFByZWZlcmVuY2U6ICdzaGllbGRlZCdgXG4gKiAgIHRoZSByYXcgT3JjaGFyZC9Jcm9ud29vZCByZWNlaXZlciBvZiBhIFVuaWZpZWQgQWRkcmVzcy5cbiAqIC0gYGVuY29kZWAvYHRvRXh0ZW5kZWRBZGRyZXNzRm9ybWF0YCBhcmUgdW5jaGFuZ2VkOiBzY3JpcHRzIGNhbiBvbmx5IGJlXG4gKiAgIHdyaXR0ZW4gYmFjayBvdXQgYXMgdHJhbnNwYXJlbnQgYWRkcmVzc2VzLlxuICogLSBgaXNWYWxpZEFkZHJlc3NgIGFjY2VwdHMgdHJhbnNwYXJlbnQgYWRkcmVzc2VzIGFuZCBVbmlmaWVkIEFkZHJlc3NlcyB3aXRoXG4gKiAgIGEgdHJhbnNwYXJlbnQgb3IgT3JjaGFyZCByZWNlaXZlci5cbiAqL1xuZXhwb3J0IGNsYXNzIFplY0FkZHJlc3NDb2RlYyBleHRlbmRzIEFkZHJlc3NDb2RlYyB7XG4gIC8qKiBUaGUgWmNhc2ggbmV0d29yayBuYW1lIGZvciB3YXNtIGNhbGxzIOKAlCAnemVjJyBvciAndHplYycuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgemNhc2hOZXR3b3JrTmFtZTogZml4ZWRTY3JpcHRXYWxsZXQuWmNhc2hOZXR3b3JrTmFtZTtcbiAgLyoqIEhvdyBVbmlmaWVkIEFkZHJlc3MgcmVjaXBpZW50cyByZXNvbHZlIHdoZW4gdGhpcyBjb2RlYyBkZWNvZGVzIHRoZW0uICovXG4gIHByaXZhdGUgcmVhZG9ubHkgdW5pZmllZFJlY2lwaWVudFByZWZlcmVuY2U6IFVuaWZpZWRSZWNpcGllbnRQcmVmZXJlbmNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGNvaW5OYW1lOiBVdHhvQ29pbk5hbWUsXG4gICAgd2FzbU5hbWU6IFdhc21VdHhvQ29pbk5hbWUsXG4gICAgdW5pZmllZFJlY2lwaWVudFByZWZlcmVuY2U6IFVuaWZpZWRSZWNpcGllbnRQcmVmZXJlbmNlID0gJ3RyYW5zcGFyZW50J1xuICApIHtcbiAgICBzdXBlcihjb2luTmFtZSwgd2FzbU5hbWUpO1xuICAgIHRoaXMuemNhc2hOZXR3b3JrTmFtZSA9IHdhc21OYW1lIGFzIGZpeGVkU2NyaXB0V2FsbGV0LlpjYXNoTmV0d29ya05hbWU7XG4gICAgdGhpcy51bmlmaWVkUmVjaXBpZW50UHJlZmVyZW5jZSA9IHVuaWZpZWRSZWNpcGllbnRQcmVmZXJlbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgYGFkZHJlc3NgIGlzIGEgdmFsaWQgWmNhc2ggYWRkcmVzcyBmb3IgdGhpcyBjb2luJ3MgbmV0d29yay5cbiAgICpcbiAgICogTWlycm9ycyB0aGUgcHJlLWNvZGVjIGBaZWMuaXNWYWxpZEFkZHJlc3NgIGxvZ2ljIGV4YWN0bHk6IHRoZSBhZGRyZXNzIGlzXG4gICAqIHZhbGlkIGlmZiBpdCBoYXMgYSB1c2FibGUgdHJhbnNwYXJlbnQgcmVjZWl2ZXIgKGFuIG9yZGluYXJ5IHRyYW5zcGFyZW50XG4gICAqIGFkZHJlc3MsIG9yIGEgVUEgY2FycnlpbmcgYSB0cmFuc3BhcmVudCByZWNlaXZlcikgb3IgYW4gT3JjaGFyZCByZWNlaXZlclxuICAgKiAoYSBVQSBjYXJyeWluZyBvbmUpLlxuICAgKi9cbiAgb3ZlcnJpZGUgaXNWYWxpZEFkZHJlc3MoYWRkcmVzczogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHpjYXNoQWRkcmVzcy5oYXNUcmFuc3BhcmVudFJlY2VpdmVyKGFkZHJlc3MsIHRoaXMud2FzbU5hbWUpIHx8XG4gICAgICB6Y2FzaEFkZHJlc3MuaGFzT3JjaGFyZFJlY2VpdmVyKGFkZHJlc3MsIHRoaXMud2FzbU5hbWUpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlIGBhZGRyZXNzYCB0byB0aGUgYnl0ZXMgdGhpcyBjb2RlYydzIHVuaWZpZWQtcmVjaXBpZW50IHByZWZlcmVuY2UgcGF5cyB0by5cbiAgICpcbiAgICogLSBgJ3RyYW5zcGFyZW50J2AgKGRlZmF1bHQpIHJlc29sdmVzIHRoZSBzY3JpcHRQdWJLZXk6IGFuIG9yZGluYXJ5XG4gICAqICAgdHJhbnNwYXJlbnQgYWRkcmVzcyBkZWNvZGVzIHRvIGl0cyBvd24gc2NyaXB0LCBhbmQgYSBVQSB3aXRoIGFcbiAgICogICB0cmFuc3BhcmVudCByZWNlaXZlciBkZWNvZGVzIHRvIHRoYXQgcmVjZWl2ZXIncyBzY3JpcHQuIEEgVUEgd2l0aG91dCBhXG4gICAqICAgdHJhbnNwYXJlbnQgcmVjZWl2ZXIgKGUuZy4gT3JjaGFyZC1vbmx5KSB0aHJvd3MsIHNpbmNlIGEgc2hpZWxkZWRcbiAgICogICBvdXRwdXQgaGFzIG5vIHNjcmlwdC5cbiAgICogLSBgJ3NoaWVsZGVkJ2AgcmVzb2x2ZXMgdGhlIHJhdyBPcmNoYXJkIChJcm9ud29vZCkgcmVjZWl2ZXIg4oCUIHRoZVxuICAgKiAgIDQzLWJ5dGUgZGl2ZXJzaWZpZXIgKyBgcGtfZGAg4oCUIG9mIGEgVUEgY2Fycnlpbmcgb25lLiBBbnkgb3RoZXIgYWRkcmVzc1xuICAgKiAgIChwbGFpbiB0cmFuc3BhcmVudCwgdHJhbnNwYXJlbnQtb25seSBVQSwgbWFsZm9ybWVkLCB3cm9uZyBuZXR3b3JrKVxuICAgKiAgIHRocm93cywgc2luY2UgaXQgaGFzIG5vIE9yY2hhcmQgcmVjZWl2ZXIgdG8gcmVzb2x2ZS5cbiAgICovXG4gIG92ZXJyaWRlIGRlY29kZShhZGRyZXNzOiBzdHJpbmcpOiBVaW50OEFycmF5IHtcbiAgICBpZiAodGhpcy51bmlmaWVkUmVjaXBpZW50UHJlZmVyZW5jZSAhPT0gJ3NoaWVsZGVkJykge1xuICAgICAgcmV0dXJuIHpjYXNoQWRkcmVzcy50b1RyYW5zcGFyZW50UmVjZWl2ZXJXaXRoQ29pbihhZGRyZXNzLCB0aGlzLndhc21OYW1lKTtcbiAgICB9XG4gICAgLy8gVGhlIHJhdyBPcmNoYXJkIHJlY2VpdmVyIGV4aXN0cyBvbmx5IGZvciBhIFVuaWZpZWQgQWRkcmVzcyBjYXJyeWluZyBvbmU7IGFueXRoaW5nIGVsc2VcbiAgICAvLyAocGxhaW4gdHJhbnNwYXJlbnQgYWRkcmVzcywgdHJhbnNwYXJlbnQtb25seSBVQSwgbWFsZm9ybWVkLCB3cm9uZyBuZXR3b3JrKSB0aHJvd3MuXG4gICAgbGV0IHVuaWZpZWQ6IGZpeGVkU2NyaXB0V2FsbGV0LlpjYXNoVW5pZmllZEFkZHJlc3MgfCB1bmRlZmluZWQ7XG4gICAgdHJ5IHtcbiAgICAgIHVuaWZpZWQgPSBmaXhlZFNjcmlwdFdhbGxldC5aY2FzaFVuaWZpZWRBZGRyZXNzLnBhcnNlKGFkZHJlc3MsIHRoaXMuemNhc2hOZXR3b3JrTmFtZSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGFkZHJlc3MgJHthZGRyZXNzfSBpcyBub3QgYSB2YWxpZCBhZGRyZXNzIGZvciBuZXR3b3JrICR7dGhpcy56Y2FzaE5ldHdvcmtOYW1lfWApO1xuICAgIH1cbiAgICBpZiAoIXVuaWZpZWQ/Lmhhc09yY2hhcmRSZWNlaXZlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBhZGRyZXNzICR7YWRkcmVzc30gaGFzIG5vIE9yY2hhcmQgcmVjZWl2ZXIgdG8gcmVzb2x2ZSBhcyBzaGllbGRlZGApO1xuICAgIH1cbiAgICByZXR1cm4gemNhc2hBZGRyZXNzLnRvU2hpZWxkZWRSZWNlaXZlcldpdGhDb2luKGFkZHJlc3MsIHRoaXMud2FzbU5hbWUpO1xuICB9XG59XG5cbi8qKlxuICogV2hldGhlciBgYWRkcmVzc2AgaXMgYSB3ZWxsLWZvcm1lZCBaSVAtMzE2IFVuaWZpZWQgQWRkcmVzcyBmb3IgYG5ldHdvcmtgXG4gKiB3aXRoIGFuIE9yY2hhcmQgcmVjZWl2ZXIuIEJpdEdvIG9ubHkgc3VwcG9ydHMgT3JjaGFyZCwgc28gYSBVQSB3aXRob3V0IG9uZVxuICogKGUuZy4gU2FwbGluZy0gb3IgdHJhbnNwYXJlbnQtb25seSkgaXMgbm90IGNvbnNpZGVyZWQgdmFsaWQgaGVyZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU2hpZWxkZWRaY2FzaEFkZHJlc3MoYWRkcmVzczogc3RyaW5nLCBuZXR3b3JrOiBmaXhlZFNjcmlwdFdhbGxldC5aY2FzaE5ldHdvcmtOYW1lKTogYm9vbGVhbiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGZpeGVkU2NyaXB0V2FsbGV0LlpjYXNoVW5pZmllZEFkZHJlc3MucGFyc2UoYWRkcmVzcywgbmV0d29yaykuaGFzT3JjaGFyZFJlY2VpdmVyO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLyoqXG4gKiBDbGFzc2lmeSBhIFpjYXNoIGFkZHJlc3Mgc3RyaW5nIGFzIHRyYW5zcGFyZW50IG9yIHNoaWVsZGVkLCB2YWxpZGF0aW5nIGl0IGluXG4gKiB0aGUgcHJvY2Vzcy4gUmV0dXJucyB1bmRlZmluZWQgaWYgdGhlIGFkZHJlc3MgaXMgbmVpdGhlciBhIHZhbGlkIHRyYW5zcGFyZW50XG4gKiBhZGRyZXNzIG5vciBhIHdlbGwtZm9ybWVkIFpJUC0zMTYgVW5pZmllZCBBZGRyZXNzIGZvciBgbmV0d29ya2AuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRaY2FzaEFkZHJlc3NLaW5kKFxuICBhZGRyZXNzOiBzdHJpbmcsXG4gIG5ldHdvcms6IGZpeGVkU2NyaXB0V2FsbGV0LlpjYXNoTmV0d29ya05hbWVcbik6IFpjYXNoQWRkcmVzc0tpbmQgfCB1bmRlZmluZWQge1xuICAvLyBaY2FzaE5ldHdvcmtOYW1lIGFsc28gcGVybWl0cyAnemNhc2gnLyd6Y2FzaFRlc3QnLCB3aGljaCB0b091dHB1dFNjcmlwdFdpdGhDb2luXG4gIC8vIGRvZXNuJ3QgYWNjZXB0IChpdCB0YWtlcyBhIENvaW5OYW1lLCBpLmUuICd6ZWMnLyd0emVjJykuIFNraXAgc3RyYWlnaHQgdG8gdGhlXG4gIC8vIHNoaWVsZGVkIGNoZWNrIGZvciB0aG9zZSByYXRoZXIgdGhhbiByZWx5aW5nIG9uIGFuIHVuc2FmZSBjYXN0ICsgY2F1Z2h0IHRocm93LlxuICBpZiAoaXNDb2luTmFtZShuZXR3b3JrKSkge1xuICAgIHRyeSB7XG4gICAgICB3YXNtQWRkcmVzcy50b091dHB1dFNjcmlwdFdpdGhDb2luKGFkZHJlc3MsIG5ldHdvcmspO1xuICAgICAgcmV0dXJuICd0cmFuc3BhcmVudCc7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBub3QgYSB2YWxpZCB0cmFuc3BhcmVudCBhZGRyZXNzOyBmYWxsIHRocm91Z2ggdG8gc2hpZWxkZWQgY2hlY2tcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGlzU2hpZWxkZWRaY2FzaEFkZHJlc3MoYWRkcmVzcywgbmV0d29yaykgPyAnc2hpZWxkZWQnIDogdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFN0YW5kYWxvbmUgY291bnRlcnBhcnQgdG8gYFplYy5pc1ZhbGlkQWRkcmVzc2AsIHBhcmFtZXRlcml6ZWQgYnkgYG5ldHdvcmtgXG4gKiBpbnN0ZWFkIG9mIHJlcXVpcmluZyBhIGNvaW4gaW5zdGFuY2UuIEFjY2VwdHMgdHJhbnNwYXJlbnQgYWRkcmVzc2VzIGFuZFxuICogc2hpZWxkZWQgWklQLTMxNiBVbmlmaWVkIEFkZHJlc3Nlcy5cbiAqXG4gKiBOb3Qgc3RydWN0dXJhbGx5IGlkZW50aWNhbCB0byBgWmVjLmlzVmFsaWRBZGRyZXNzYDogdGhlIGJhc2UgY2xhc3MgYWxzb1xuICogcm91bmQtdHJpcHMgdGhlIHBhcnNlZCBzY3JpcHQgdGhyb3VnaCBlYWNoIGtub3duIGVuY29kaW5nIGZvcm1hdCAoc2VlXG4gKiBgQWJzdHJhY3RVdHhvQ29pbi5pc1ZhbGlkQWRkcmVzc2ApLCB3aGVyZWFzIHRoaXMgb25seSBjYWxsc1xuICogYHRvT3V0cHV0U2NyaXB0V2l0aENvaW5gIG9uY2UgdmlhIGBnZXRaY2FzaEFkZHJlc3NLaW5kYC4gVGhleSBhZ3JlZSBpblxuICogcHJhY3RpY2Ugc2luY2UgemVjL3R6ZWMgaGF2ZSBubyBhbHRlcm5hdGUgdHJhbnNwYXJlbnQtYWRkcmVzcyBlbmNvZGluZyB0b1xuICogcm91bmQtdHJpcCBhZ2FpbnN0LCBidXQgdGhhdCdzIG5vdCBndWFyYW50ZWVkIHRvIHJlbWFpbiB0cnVlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZFpjYXNoQWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcsIG5ldHdvcms6IGZpeGVkU2NyaXB0V2FsbGV0LlpjYXNoTmV0d29ya05hbWUpOiBib29sZWFuIHtcbiAgcmV0dXJuIGdldFpjYXNoQWRkcmVzc0tpbmQoYWRkcmVzcywgbmV0d29yaykgIT09IHVuZGVmaW5lZDtcbn1cbiJdfQ==
@@ -4,6 +4,7 @@
4
4
  import { BitGoBase, MPCAlgorithm } from '@bitgo-beta/sdk-core';
5
5
  import { AbstractUtxoCoin } from '../../abstractUtxoCoin';
6
6
  import { UtxoCoinName } from '../../names';
7
+ import { ZecAddressCodec } from './address';
7
8
  export declare class Zec extends AbstractUtxoCoin {
8
9
  readonly name: UtxoCoinName;
9
10
  constructor(bitgo: BitGoBase);
@@ -15,6 +16,7 @@ export declare class Zec extends AbstractUtxoCoin {
15
16
  */
16
17
  getMPCAlgorithm(): MPCAlgorithm;
17
18
  static createInstance(bitgo: BitGoBase): Zec;
19
+ get addressCodec(): ZecAddressCodec;
18
20
  isValidAddress(address: string, param?: {
19
21
  anyFormat?: boolean;
20
22
  allowLightning?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"zec.d.ts","sourceRoot":"","sources":["../../../../../src/impl/zec/zec.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAG/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,qBAAa,GAAI,SAAQ,gBAAgB;IACvC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAS;gBAExB,KAAK,EAAE,SAAS;IAI5B;;;;;OAKG;IACH,eAAe,IAAI,YAAY;IAI/B,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,GAAG,GAAG;IAI5C,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAC;QAAC,cAAc,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,GAAG,OAAO;CAM9G"}
1
+ {"version":3,"file":"zec.d.ts","sourceRoot":"","sources":["../../../../../src/impl/zec/zec.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAE/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAE5C,qBAAa,GAAI,SAAQ,gBAAgB;IACvC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAS;gBAExB,KAAK,EAAE,SAAS;IAI5B;;;;;OAKG;IACH,eAAe,IAAI,YAAY;IAI/B,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,GAAG,GAAG;IAI5C,IAAa,YAAY,IAAI,eAAe,CAE3C;IAED,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAC;QAAC,cAAc,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,GAAG,OAAO;CAG9G"}
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Zec = void 0;
4
- const wasm_utxo_1 = require("@bitgo/wasm-utxo");
5
4
  const abstractUtxoCoin_1 = require("../../abstractUtxoCoin");
5
+ const address_1 = require("./address");
6
6
  class Zec extends abstractUtxoCoin_1.AbstractUtxoCoin {
7
7
  constructor(bitgo) {
8
8
  super(bitgo);
@@ -20,10 +20,12 @@ class Zec extends abstractUtxoCoin_1.AbstractUtxoCoin {
20
20
  static createInstance(bitgo) {
21
21
  return new Zec(bitgo);
22
22
  }
23
+ get addressCodec() {
24
+ return new address_1.ZecAddressCodec(this.name, this.wasmName);
25
+ }
23
26
  isValidAddress(address, param) {
24
- return (wasm_utxo_1.zcashAddress.hasTransparentReceiver(address, this.wasmName) ||
25
- wasm_utxo_1.zcashAddress.hasOrchardReceiver(address, this.wasmName));
27
+ return this.addressCodec.isValidAddress(address);
26
28
  }
27
29
  }
28
30
  exports.Zec = Zec;
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2ltcGwvemVjL3plYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFJQSxnREFBZ0Q7QUFFaEQsNkRBQTBEO0FBRzFELE1BQWEsR0FBSSxTQUFRLG1DQUFnQjtJQUd2QyxZQUFZLEtBQWdCO1FBQzFCLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUhOLFNBQUksR0FBaUIsS0FBSyxDQUFDO0lBSXBDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGVBQWU7UUFDYixPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0lBRUQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFnQjtRQUNwQyxPQUFPLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxjQUFjLENBQUMsT0FBZSxFQUFFLEtBQW1FO1FBQ2pHLE9BQU8sQ0FDTCx3QkFBWSxDQUFDLHNCQUFzQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQzNELHdCQUFZLENBQUMsa0JBQWtCLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FDeEQsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQTNCRCxrQkEyQkMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBwcmV0dGllclxuICovXG5pbXBvcnQgeyBCaXRHb0Jhc2UsIE1QQ0FsZ29yaXRobSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IHpjYXNoQWRkcmVzcyB9IGZyb20gJ0BiaXRnby93YXNtLXV0eG8nO1xuXG5pbXBvcnQgeyBBYnN0cmFjdFV0eG9Db2luIH0gZnJvbSAnLi4vLi4vYWJzdHJhY3RVdHhvQ29pbic7XG5pbXBvcnQgeyBVdHhvQ29pbk5hbWUgfSBmcm9tICcuLi8uLi9uYW1lcyc7XG5cbmV4cG9ydCBjbGFzcyBaZWMgZXh0ZW5kcyBBYnN0cmFjdFV0eG9Db2luIHtcbiAgcmVhZG9ubHkgbmFtZTogVXR4b0NvaW5OYW1lID0gJ3plYyc7XG5cbiAgY29uc3RydWN0b3IoYml0Z286IEJpdEdvQmFzZSkge1xuICAgIHN1cGVyKGJpdGdvKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBaRUMgc2hpZWxkZWQgKE9yY2hhcmQvSXJvbndvb2QpIGN1c3RvZGlhbCB3YWxsZXRzIHVzZSBSZWRQYWxsYXMgdGhyZXNob2xkIGtleXMuXG4gICAqIFRyYW5zcGFyZW50IChzZWNwMjU2azEgbXVsdGlzaWcpIGZsb3dzIGFyZSB1bmFmZmVjdGVkOiBNUENBbGdvcml0aG0gaXMgb25seVxuICAgKiBjb25zdWx0ZWQgb24gdGhlIFRTUyBjdXN0b2RpYWwgd2FsbGV0LWNyZWF0aW9uIHBhdGguXG4gICAqIEBpbmhlcml0ZG9jXG4gICAqL1xuICBnZXRNUENBbGdvcml0aG0oKTogTVBDQWxnb3JpdGhtIHtcbiAgICByZXR1cm4gJ3JlZHBhbGxhcyc7XG4gIH1cblxuICBzdGF0aWMgY3JlYXRlSW5zdGFuY2UoYml0Z286IEJpdEdvQmFzZSk6IFplYyB7XG4gICAgcmV0dXJuIG5ldyBaZWMoYml0Z28pO1xuICB9XG5cbiAgaXNWYWxpZEFkZHJlc3MoYWRkcmVzczogc3RyaW5nLCBwYXJhbT86IHsgYW55Rm9ybWF0PzogYm9vbGVhbjsgYWxsb3dMaWdodG5pbmc/OiBib29sZWFuIH0gfCBib29sZWFuKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHpjYXNoQWRkcmVzcy5oYXNUcmFuc3BhcmVudFJlY2VpdmVyKGFkZHJlc3MsIHRoaXMud2FzbU5hbWUpIHx8XG4gICAgICB6Y2FzaEFkZHJlc3MuaGFzT3JjaGFyZFJlY2VpdmVyKGFkZHJlc3MsIHRoaXMud2FzbU5hbWUpXG4gICAgKTtcbiAgfVxufVxuIl19
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2ltcGwvemVjL3plYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFLQSw2REFBMEQ7QUFHMUQsdUNBQTRDO0FBRTVDLE1BQWEsR0FBSSxTQUFRLG1DQUFnQjtJQUd2QyxZQUFZLEtBQWdCO1FBQzFCLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUhOLFNBQUksR0FBaUIsS0FBSyxDQUFDO0lBSXBDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGVBQWU7UUFDYixPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0lBRUQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFnQjtRQUNwQyxPQUFPLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxJQUFhLFlBQVk7UUFDdkIsT0FBTyxJQUFJLHlCQUFlLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVELGNBQWMsQ0FBQyxPQUFlLEVBQUUsS0FBbUU7UUFDakcsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNuRCxDQUFDO0NBQ0Y7QUE1QkQsa0JBNEJDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAcHJldHRpZXJcbiAqL1xuaW1wb3J0IHsgQml0R29CYXNlLCBNUENBbGdvcml0aG0gfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5cbmltcG9ydCB7IEFic3RyYWN0VXR4b0NvaW4gfSBmcm9tICcuLi8uLi9hYnN0cmFjdFV0eG9Db2luJztcbmltcG9ydCB7IFV0eG9Db2luTmFtZSB9IGZyb20gJy4uLy4uL25hbWVzJztcblxuaW1wb3J0IHsgWmVjQWRkcmVzc0NvZGVjIH0gZnJvbSAnLi9hZGRyZXNzJztcblxuZXhwb3J0IGNsYXNzIFplYyBleHRlbmRzIEFic3RyYWN0VXR4b0NvaW4ge1xuICByZWFkb25seSBuYW1lOiBVdHhvQ29pbk5hbWUgPSAnemVjJztcblxuICBjb25zdHJ1Y3RvcihiaXRnbzogQml0R29CYXNlKSB7XG4gICAgc3VwZXIoYml0Z28pO1xuICB9XG5cbiAgLyoqXG4gICAqIFpFQyBzaGllbGRlZCAoT3JjaGFyZC9Jcm9ud29vZCkgY3VzdG9kaWFsIHdhbGxldHMgdXNlIFJlZFBhbGxhcyB0aHJlc2hvbGQga2V5cy5cbiAgICogVHJhbnNwYXJlbnQgKHNlY3AyNTZrMSBtdWx0aXNpZykgZmxvd3MgYXJlIHVuYWZmZWN0ZWQ6IE1QQ0FsZ29yaXRobSBpcyBvbmx5XG4gICAqIGNvbnN1bHRlZCBvbiB0aGUgVFNTIGN1c3RvZGlhbCB3YWxsZXQtY3JlYXRpb24gcGF0aC5cbiAgICogQGluaGVyaXRkb2NcbiAgICovXG4gIGdldE1QQ0FsZ29yaXRobSgpOiBNUENBbGdvcml0aG0ge1xuICAgIHJldHVybiAncmVkcGFsbGFzJztcbiAgfVxuXG4gIHN0YXRpYyBjcmVhdGVJbnN0YW5jZShiaXRnbzogQml0R29CYXNlKTogWmVjIHtcbiAgICByZXR1cm4gbmV3IFplYyhiaXRnbyk7XG4gIH1cblxuICBvdmVycmlkZSBnZXQgYWRkcmVzc0NvZGVjKCk6IFplY0FkZHJlc3NDb2RlYyB7XG4gICAgcmV0dXJuIG5ldyBaZWNBZGRyZXNzQ29kZWModGhpcy5uYW1lLCB0aGlzLndhc21OYW1lKTtcbiAgfVxuXG4gIGlzVmFsaWRBZGRyZXNzKGFkZHJlc3M6IHN0cmluZywgcGFyYW0/OiB7IGFueUZvcm1hdD86IGJvb2xlYW47IGFsbG93TGlnaHRuaW5nPzogYm9vbGVhbiB9IHwgYm9vbGVhbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmFkZHJlc3NDb2RlYy5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzKTtcbiAgfVxufVxuIl19
@@ -5,6 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const strict_1 = __importDefault(require("node:assert/strict"));
7
7
  const sdk_api_1 = require("@bitgo-beta/sdk-api");
8
+ const wasm_utxo_1 = require("@bitgo/wasm-utxo");
8
9
  const zec_1 = require("../../../../../src/impl/zec");
9
10
  // ZIP-316 unified-address test vectors, copied from
10
11
  // BitGoWASM/packages/wasm-utxo/test/fixtures/zcash/unified_address.json so
@@ -63,4 +64,142 @@ describe('Zcash address validation', function () {
63
64
  strict_1.default.strictEqual((0, zec_1.isValidZcashAddress)(zip316Mainnet.unified, 'tzec'), false);
64
65
  });
65
66
  });
66
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkcmVzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Rlc3QvdW5pdC9pbXBsL3plYy91bml0L2FkZHJlc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxnRUFBd0M7QUFFeEMsaURBQStDO0FBRS9DLHFEQU1xQztBQUVyQyxvREFBb0Q7QUFDcEQsMkVBQTJFO0FBQzNFLG9EQUFvRDtBQUNwRCxNQUFNLGFBQWEsR0FBRztJQUNwQixPQUFPLEVBQ0wsdU5BQXVOO0NBQzFOLENBQUM7QUFDRixNQUFNLGFBQWEsR0FBRztJQUNwQixPQUFPLEVBQ0wsMk5BQTJOO0lBQzdOLGtCQUFrQixFQUFFLHFDQUFxQztDQUMxRCxDQUFDO0FBRUYsUUFBUSxDQUFDLDBCQUEwQixFQUFFO0lBQ25DLElBQUksS0FBZSxDQUFDO0lBQ3BCLElBQUksR0FBRyxDQUFDO0lBQ1IsSUFBSSxJQUFJLENBQUM7SUFFVCxNQUFNLENBQUM7UUFDTCxLQUFLLEdBQUcsSUFBSSxrQkFBUSxDQUFDLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDdEMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsU0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzFDLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLFVBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUM1QyxHQUFHLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QixJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM1QixDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxrREFBa0QsRUFBRTtRQUNyRCxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNwRSxnQkFBTSxD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QztRQUN0RSxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFBLHlCQUFtQixFQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDbEYsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsSUFBQSw0QkFBc0IsRUFBQyxhQUFhLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2pGLGdCQUFNLENBQUMsV0FBVyxDQUFDLElBQUEseUJBQW1CLEVBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNoRixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdub2RlOmFzc2VydC9zdHJpY3QnO1xuXG5pbXBvcnQgeyBCaXRHb0FQSSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1hcGknO1xuXG5pbXBvcnQge1xuICBaZWMsXG4gIFR6ZWMsXG4gIGdldFpjYXNoQWRkcmVzc0tpbmQsXG4gIGlzU2hpZWxkZWRaY2FzaEFkZHJlc3MsXG4gIGlzVmFsaWRaY2FzaEFkZHJlc3MsXG59IGZyb20gJy4uLy4uLy4uLy4uLy4uL3NyYy9pbXBsL3plYyc7XG5cbi8vIFpJUC0zMTYgdW5pZmllZC1hZGRyZXNzIHRlc3QgdmVjdG9ycywgY29waWVkIGZyb21cbi8vIEJpdEdvV0FTTS9wYWNrYWdlcy93YXNtLXV0eG8vdGVzdC9maXh0dXJlcy96Y2FzaC91bmlmaWVkX2FkZHJlc3MuanNvbiBzb1xuLy8gYm90aCByZXBvcyB0ZXN0IGFnYWluc3QgdGhlIHNhbWUga25vd24tZ29vZCBkYXRhLlxuY29uc3QgemlwMzE2TWFpbm5ldCA9IHtcbiAgdW5pZmllZDpcbiAgICAndTFwZzJhYXBoN2pwOHJwZjZ5aHN6YTI1NzIyc2c1ZmNuM3ZhY2E2emUyN2hxanc3anZ2aGh1eGtwY2cwZ2U5eGg2ZHJzZ2RrZGE4cWpxNWNocGVoa2NweGY4N3JuanJ5anF3eW1kaGVwdHB2bmxqcXFyanF6andrYzJtYTZoY3E2NjZrZ3dmeXR4d2FjOGV5ZXg2bmRncjZlenRlNjY3MDZlM3ZhcXJkMjVkenZ6a2M2OWt3MGpneXd0ZDBjbXE1MnE1bGt3NnVoN2h5dnpqc2U4a3N4Jyxcbn07XG5jb25zdCB0ZXN0bmV0V2FsbGV0ID0ge1xuICB1bmlmaWVkOlxuICAgICd1dGVzdDF3NW0wcWNucDhlZ2w4cWEyOTZuNzBuOG52ajB0cW56azkwcDdmNDh2N21qaGhkcmRxczh2Z3F5ZHNsZzVwbG16ZWZhd2VmbnBtZ21sbTZoY3kzOG05NzJlcnd4czA0czAyY3EycHJoZ3V6OGtxbHk3NW02emp5NTZtMDhkNWpueWNndHBxdGplcHJ0ZTU3NmdrbXJ4eXN6ZXBneDc2eXp1d2hoN200bGZ6OWphcTd1bmprMHg1YW50NDZqdXh6NzNoc2M2cTR2M2RxdHp3dzAwdnBzJyxcbiAgdHJhbnNwYXJlbnRBZGRyZXNzOiAndG1NNER2TFZKS1hadDV5ZG4xdHFZVEh2YWhwS1N3Z2p1UmsnLFxufTtcblxuZGVzY3JpYmUoJ1pjYXNoIGFkZHJlc3MgdmFsaWRhdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgbGV0IGJpdGdvOiBCaXRHb0FQSTtcbiAgbGV0IHplYztcbiAgbGV0IHR6ZWM7XG5cbiAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICBiaXRnbyA9IG5ldyBCaXRHb0FQSSh7IGVudjogJ21vY2snIH0pO1xuICAgIGJpdGdvLnJlZ2lzdGVyKCd6ZWMnLCBaZWMuY3JlYXRlSW5zdGFuY2UpO1xuICAgIGJpdGdvLnJlZ2lzdGVyKCd0emVjJywgVHplYy5jcmVhdGVJbnN0YW5jZSk7XG4gICAgemVjID0gYml0Z28uY29pbignemVjJyk7XG4gICAgdHplYyA9IGJpdGdvLmNvaW4oJ3R6ZWMnKTtcbiAgfSk7XG5cbiAgaXQoJ3JlY29nbml6ZXMgYSBtYWlubmV0IHVuaWZpZWQgYWRkcmVzcyBhcyBzaGllbGRlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoemVjLmlzVmFsaWRBZGRyZXNzKHppcDMxNk1haW5uZXQudW5pZmllZCksIHRydWUpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChnZXRaY2FzaEFkZHJlc3NLaW5kKHppcDMxNk1haW5uZXQudW5pZmllZCwgJ3plYycpLCAnc2hpZWxkZWQnKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaXNTaGllbGRlZFpjYXNoQWRkcmVzcyh6aXAzMTZNYWlubmV0LnVuaWZpZWQsICd6ZWMnKSwgdHJ1ZSk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGlzVmFsaWRaY2FzaEFkZHJlc3MoemlwMzE2TWFpbm5ldC51bmlmaWVkLCAnemVjJyksIHRydWUpO1xuICB9KTtcblxuICBpdCgncmVjb2duaXplcyBhIHRlc3RuZXQgdW5pZmllZCBhZGRyZXNzIGFzIHNoaWVsZGVkJywgZnVuY3Rpb24gKCkge1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0emVjLmlzVmFsaWRBZGRyZXNzKHRlc3RuZXRXYWxsZXQudW5pZmllZCksIHRydWUpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChnZXRaY2FzaEFkZHJlc3NLaW5kKHRlc3RuZXRXYWxsZXQudW5pZmllZCwgJ3R6ZWMnKSwgJ3NoaWVsZGVkJyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGlzU2hpZWxkZWRaY2FzaEFkZHJlc3ModGVzdG5ldFdhbGxldC51bmlmaWVkLCAndHplYycpLCB0cnVlKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaXNWYWxpZFpjYXNoQWRkcmVzcyh0ZXN0bmV0V2FsbGV0LnVuaWZpZWQsICd0emVjJyksIHRydWUpO1xuICB9KTtcblxuICBpdCgncmVjb2duaXplcyBhIHRlc3RuZXQgdHJhbnNwYXJlbnQgYWRkcmVzcyBhcyB0cmFuc3BhcmVudCcsIGZ1bmN0aW9uICgpIHtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwodHplYy5pc1ZhbGlkQWRkcmVzcyh0ZXN0bmV0V2FsbGV0LnRyYW5zcGFyZW50QWRkcmVzcyksIHRydWUpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChnZXRaY2FzaEFkZHJlc3NLaW5kKHRlc3RuZXRXYWxsZXQudHJhbnNwYXJlbnRBZGRyZXNzLCAndHplYycpLCAndHJhbnNwYXJlbnQnKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaXNWYWxpZFpjYXNoQWRkcmVzcyh0ZXN0bmV0V2FsbGV0LnRyYW5zcGFyZW50QWRkcmVzcywgJ3R6ZWMnKSwgdHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KCdyZWNvZ25pemVzIGEgbWFpbm5ldCB0cmFuc3BhcmVudCAoUDJQS0gpIGFkZHJlc3MgYXMgdHJhbnNwYXJlbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgYWRkcmVzcyA9ICd0MWNOMlpWV3pXY1ZScm5mZVF6bWtwTGh6UTRkWVJ2OHlSWSc7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHplYy5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzKSwgdHJ1ZSk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGdldFpjYXNoQWRkcmVzc0tpbmQoYWRkcmVzcywgJ3plYycpLCAndHJhbnNwYXJlbnQnKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaXNWYWxpZFpjYXNoQWRkcmVzcyhhZGRyZXNzLCAnemVjJyksIHRydWUpO1xuICB9KTtcblxuICBpdCgncmVqZWN0cyBhIGdhcmJhZ2Ugc3RyaW5nJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGdhcmJhZ2UgPSAnbm90LWEtcmVhbC1hZGRyZXNzJztcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoemVjLmlzVmFsaWRBZGRyZXNzKGdhcmJhZ2UpLCBmYWxzZSk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGdldFpjYXNoQWRkcmVzc0tpbmQoZ2FyYmFnZSwgJ3plYycpLCB1bmRlZmluZWQpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChpc1ZhbGlkWmNhc2hBZGRyZXNzKGdhcmJhZ2UsICd6ZWMnKSwgZmFsc2UpO1xuICB9KTtcblxuICBpdCgncmVqZWN0cyBhIHVuaWZpZWQgYWRkcmVzcyBjaGVja2VkIGFnYWluc3QgdGhlIHdyb25nIG5ldHdvcmsnLCBmdW5jdGlvbiAoKSB7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR6ZWMuaXNWYWxpZEFkZHJlc3MoemlwMzE2TWFpbm5ldC51bmlmaWVkKSwgZmFsc2UpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChnZXRaY2FzaEFkZHJlc3NLaW5kKHppcDMxNk1haW5uZXQudW5pZmllZCwgJ3R6ZWMnKSwgdW5kZWZpbmVkKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaXNTaGllbGRlZFpjYXNoQWRkcmVzcyh6aXAzMTZNYWlubmV0LnVuaWZpZWQsICd0emVjJyksIGZhbHNlKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaXNWYWxpZFpjYXNoQWRkcmVzcyh6aXAzMTZNYWlubmV0LnVuaWZpZWQsICd0emVjJyksIGZhbHNlKTtcbiAgfSk7XG59KTtcbiJdfQ==
67
+ describe('ZecAddressCodec', function () {
68
+ // -- instantiation ----------------------------------------------------------
69
+ let bitgo;
70
+ let zec;
71
+ let tzec;
72
+ before(function () {
73
+ bitgo = new sdk_api_1.BitGoAPI({ env: 'mock' });
74
+ bitgo.register('zec', zec_1.Zec.createInstance);
75
+ bitgo.register('tzec', zec_1.Tzec.createInstance);
76
+ zec = bitgo.coin('zec');
77
+ tzec = bitgo.coin('tzec');
78
+ });
79
+ it('constructs for zec and tzec', function () {
80
+ const mainnet = new zec_1.ZecAddressCodec('zec', 'zec');
81
+ const testnet = new zec_1.ZecAddressCodec('tzec', 'tzec');
82
+ strict_1.default.strictEqual(mainnet.coinName, 'zec');
83
+ strict_1.default.strictEqual(testnet.coinName, 'tzec');
84
+ });
85
+ // -- isValidAddress --------------------------------------------------------
86
+ it('isValidAddress: accepts mainnet UA', function () {
87
+ strict_1.default.strictEqual(new zec_1.ZecAddressCodec('zec', 'zec').isValidAddress(zip316Mainnet.unified), true);
88
+ });
89
+ it('isValidAddress: accepts testnet UA', function () {
90
+ strict_1.default.strictEqual(new zec_1.ZecAddressCodec('tzec', 'tzec').isValidAddress(testnetWallet.unified), true);
91
+ });
92
+ it('isValidAddress: accepts mainnet P2PKH', function () {
93
+ strict_1.default.strictEqual(new zec_1.ZecAddressCodec('zec', 'zec').isValidAddress('t1cN2ZVWzWcVRrnfeQzmkpLhzQ4dYRv8yRY'), true);
94
+ });
95
+ it('isValidAddress: accepts testnet transparent address', function () {
96
+ strict_1.default.strictEqual(new zec_1.ZecAddressCodec('tzec', 'tzec').isValidAddress(testnetWallet.transparentAddress), true);
97
+ });
98
+ it('isValidAddress: rejects wrong-network UA', function () {
99
+ strict_1.default.strictEqual(new zec_1.ZecAddressCodec('tzec', 'tzec').isValidAddress(zip316Mainnet.unified), false);
100
+ });
101
+ it('isValidAddress: rejects garbage', function () {
102
+ strict_1.default.strictEqual(new zec_1.ZecAddressCodec('tzec', 'tzec').isValidAddress('not-a-real-address'), false);
103
+ });
104
+ // -- decode ----------------------------------------------------------------
105
+ it('decode: plain transparent address decodes to P2PKH script', function () {
106
+ const codec = new zec_1.ZecAddressCodec('tzec', 'tzec');
107
+ const script = Buffer.from(codec.decode(testnetWallet.transparentAddress));
108
+ // P2PKH: OP_DUP OP_HASH160 <20-byte hash> OP_EQUALVERIFY OP_CHECKSIG
109
+ strict_1.default.strictEqual(script[0], 0x76); // OP_DUP
110
+ strict_1.default.strictEqual(script[1], 0xa9); // OP_HASH160
111
+ strict_1.default.strictEqual(script[2], 0x14); // push 20 bytes
112
+ strict_1.default.strictEqual(script.length, 25); // total P2PKH length
113
+ });
114
+ it('decode: UA with transparent receiver decodes to the same transparent script', function () {
115
+ const codec = new zec_1.ZecAddressCodec('tzec', 'tzec');
116
+ // The testnet UA carries a transparent receiver; it should decode to the
117
+ // same scriptPubKey as the standalone transparent address.
118
+ const uaScript = Buffer.from(codec.decode(testnetWallet.unified));
119
+ const tAddrScript = Buffer.from(codec.decode(testnetWallet.transparentAddress));
120
+ strict_1.default.deepStrictEqual(uaScript, tAddrScript);
121
+ });
122
+ it('decode: UA with transparent receiver decodes on mainnet', function () {
123
+ const codec = new zec_1.ZecAddressCodec('zec', 'zec');
124
+ const script = Buffer.from(codec.decode(zip316Mainnet.unified));
125
+ // P2PKH structure test
126
+ strict_1.default.strictEqual(script[0], 0x76);
127
+ strict_1.default.strictEqual(script[1], 0xa9);
128
+ strict_1.default.strictEqual(script[2], 0x14);
129
+ });
130
+ it('decode: throws for a UA without a transparent receiver (orchard-only)', function () {
131
+ // Construct an Orchard-only UA by encoding a dummy receiver
132
+ const orchardOnly = wasm_utxo_1.fixedScriptWallet.ZcashUnifiedAddress.encodeOrchardReceiver(new Uint8Array(43).fill(0x42), 'tzec');
133
+ const codec = new zec_1.ZecAddressCodec('tzec', 'tzec');
134
+ strict_1.default.throws(() => codec.decode(orchardOnly));
135
+ });
136
+ it('decode: explicit transparent-bound codec returns the transparent script', function () {
137
+ const codec = new zec_1.ZecAddressCodec('tzec', 'tzec', 'transparent');
138
+ const script = Buffer.from(codec.decode(testnetWallet.unified));
139
+ const tAddrScript = Buffer.from(codec.decode(testnetWallet.transparentAddress));
140
+ strict_1.default.deepStrictEqual(script, tAddrScript);
141
+ });
142
+ it('decode: shielded-bound codec returns the raw 43-byte Orchard receiver', function () {
143
+ const codec = new zec_1.ZecAddressCodec('tzec', 'tzec', 'shielded');
144
+ const receiver = Buffer.from(codec.decode(testnetWallet.unified));
145
+ strict_1.default.strictEqual(receiver.length, 43);
146
+ const parsed = wasm_utxo_1.fixedScriptWallet.ZcashUnifiedAddress.parse(testnetWallet.unified, 'tzec');
147
+ strict_1.default.deepStrictEqual(receiver, Buffer.from(parsed.orchardReceiver));
148
+ });
149
+ it('decode: shielded-bound codec on mainnet returns the raw 43-byte Orchard receiver', function () {
150
+ const codec = new zec_1.ZecAddressCodec('zec', 'zec', 'shielded');
151
+ const receiver = Buffer.from(codec.decode(zip316Mainnet.unified));
152
+ strict_1.default.strictEqual(receiver.length, 43);
153
+ const parsed = wasm_utxo_1.fixedScriptWallet.ZcashUnifiedAddress.parse(zip316Mainnet.unified, 'zec');
154
+ strict_1.default.deepStrictEqual(receiver, Buffer.from(parsed.orchardReceiver));
155
+ });
156
+ it('decode: shielded-bound codec resolves an Orchard-only UA to its receiver', function () {
157
+ const orchardOnly = wasm_utxo_1.fixedScriptWallet.ZcashUnifiedAddress.encodeOrchardReceiver(new Uint8Array(43).fill(0x42), 'tzec');
158
+ const codec = new zec_1.ZecAddressCodec('tzec', 'tzec', 'shielded');
159
+ const receiver = Buffer.from(codec.decode(orchardOnly));
160
+ strict_1.default.strictEqual(receiver.length, 43);
161
+ strict_1.default.deepStrictEqual(receiver, Buffer.from(new Uint8Array(43).fill(0x42)));
162
+ });
163
+ it('decode: shielded-bound codec throws invalid-address error for a plain transparent address', function () {
164
+ const codec = new zec_1.ZecAddressCodec('tzec', 'tzec', 'shielded');
165
+ strict_1.default.throws(() => codec.decode(testnetWallet.transparentAddress), /is not a valid address for network/);
166
+ });
167
+ it('decode: shielded-bound codec throws invalid-address error for a wrong-network UA', function () {
168
+ const codec = new zec_1.ZecAddressCodec('tzec', 'tzec', 'shielded');
169
+ strict_1.default.throws(() => codec.decode(zip316Mainnet.unified), /is not a valid address for network/);
170
+ });
171
+ it('decode: shielded-bound codec throws invalid-address error for garbage', function () {
172
+ const codec = new zec_1.ZecAddressCodec('tzec', 'tzec', 'shielded');
173
+ strict_1.default.throws(() => codec.decode('not-a-real-address'), /is not a valid address for network/);
174
+ });
175
+ it('decode: throws for garbage', function () {
176
+ const codec = new zec_1.ZecAddressCodec('tzec', 'tzec');
177
+ strict_1.default.throws(() => codec.decode('not-a-real-address'));
178
+ });
179
+ // -- encode (inherited) ----------------------------------------------------
180
+ it('encode: round-trips a transparent script to address', function () {
181
+ const codec = new zec_1.ZecAddressCodec('tzec', 'tzec');
182
+ const script = codec.decode(testnetWallet.transparentAddress);
183
+ const address = codec.encode(script);
184
+ strict_1.default.strictEqual(address, testnetWallet.transparentAddress);
185
+ });
186
+ it('encode: round-trips on mainnet', function () {
187
+ const codec = new zec_1.ZecAddressCodec('zec', 'zec');
188
+ const address = 't1cN2ZVWzWcVRrnfeQzmkpLhzQ4dYRv8yRY';
189
+ const script = codec.decode(address);
190
+ strict_1.default.strictEqual(codec.encode(script), address);
191
+ });
192
+ // -- integration: coin.addressCodec ----------------------------------------
193
+ it('coin.addressCodec: zec returns ZecAddressCodec', function () {
194
+ strict_1.default.ok(zec.addressCodec instanceof zec_1.ZecAddressCodec);
195
+ });
196
+ it('coin.addressCodec: tzec returns ZecAddressCodec', function () {
197
+ strict_1.default.ok(tzec.addressCodec instanceof zec_1.ZecAddressCodec);
198
+ });
199
+ it('coin.addressCodec.isValidAddress matches Zec.isValidAddress', function () {
200
+ strict_1.default.strictEqual(zec.addressCodec.isValidAddress(zip316Mainnet.unified), zec.isValidAddress(zip316Mainnet.unified));
201
+ strict_1.default.strictEqual(zec.addressCodec.isValidAddress('t1cN2ZVWzWcVRrnfeQzmkpLhzQ4dYRv8yRY'), zec.isValidAddress('t1cN2ZVWzWcVRrnfeQzmkpLhzQ4dYRv8yRY'));
202
+ strict_1.default.strictEqual(zec.addressCodec.isValidAddress('not-a-real-address'), zec.isValidAddress('not-a-real-address'));
203
+ });
204
+ });
205
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkcmVzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Rlc3QvdW5pdC9pbXBsL3plYy91bml0L2FkZHJlc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxnRUFBd0M7QUFFeEMsaURBQStDO0FBQy9DLGdEQUFxRDtBQUVyRCxxREFPcUM7QUFFckMsb0RBQW9EO0FBQ3BELDJFQUEyRTtBQUMzRSxvREFBb0Q7QUFDcEQsTUFBTSxhQUFhLEdBQUc7SUFDcEIsT0FBTyxFQUNMLHVOQUF1TjtDQUMxTixDQUFDO0FBQ0YsTUFBTSxhQUFhLEdBQUc7SUFDcEIsT0FBTyxFQUNMLDJOQUEyTjtJQUM3TixrQkFBa0IsRUFBRSxxQ0FBcUM7Q0FDMUQsQ0FBQztBQUVGLFFBQVEsQ0FBQywwQkFBMEIsRUFBRTtJQUNuQyxJQUFJLEtBQWUsQ0FBQztJQUNwQixJQUFJLEdBQUcsQ0FBQztJQUNSLElBQUksSUFBSSxDQUFDO0lBRVQsTUFBTSxDQUFDO1FBQ0wsS0FBSyxHQUFHLElBQUksa0JBQVEsQ0FBQyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ3RDLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLFNBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUMxQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxVQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDNUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEIsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDNUIsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsa0RBQWtELEVBQUU7UUFDckQsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDcEUsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsSUFBQSx5QkFBbUIsRUFBQyxhQUFhLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ2xGLGdCQUFNLENBQUMsV0FBVyxDQUFDLElBQUEsNEJBQXNCLEVBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMvRSxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFBLHlCQUFtQixFQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDOUUsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsa0RBQWtELEVBQUU7UUFDckQsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDckUsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsSUFBQSx5QkFBbUIsRUFBQyxhQUFhLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ25GLGdCQUFNLENBQUMsV0FBVyxDQUFDLElBQUEsNEJBQXNCLEVBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNoRixnQkFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFBLHlCQUFtQixFQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDL0UsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMseURBQXlELEVBQUU7UUFDNUQsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNoRixnQkFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFBLHlCQUFtQixFQUFDLGFBQWEsQ0FBQyxrQkFBa0IsRUFBRSxNQUFNLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUNqRyxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFBLHlCQUFtQixFQUFDLGFBQWEsQ0FBQyxrQkFBa0IsRUFBRSxNQUFNLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMxRixDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxpRUFBaUUsRUFBRTtRQUNwRSxNQUFNLE9BQU8sR0FBRyxxQ0FBcUMsQ0FBQztRQUN0RCxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3RELGdCQUFNLENBQUMsV0FBVyxDQUFDLElBQUEseUJBQW1CLEVBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQ3ZFLGdCQUFNLENBQUMsV0FBVyxDQUFDLElBQUEseUJBQW1CLEVBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2hFLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLDBCQUEwQixFQUFFO1FBQzdCLE1BQU0sT0FBTyxHQUFHLG9CQUFvQixDQUFDO1FBQ3JDLGdCQUFNLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDdkQsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsSUFBQSx5QkFBbUIsRUFBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDbkUsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsSUFBQSx5QkFBbUIsRUFBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDakUsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsNkRBQTZELEVBQUU7UUFDaEUsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDdEUsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsSUFBQSx5QkFBbUIsRUFBQyxhQUFhLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ2xGLGdCQUFNLENBQUMsV0FBVyxDQUFDLElBQUEsNEJBQXNCLEVBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNqRixnQkFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFBLHlCQUFtQixFQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDaEYsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQztBQUVILFFBQVEsQ0FBQyxpQkFBaUIsRUFBRTtJQUMxQiw4RUFBOEU7SUFFOUUsSUFBSSxLQUFlLENBQUM7SUFDcEIsSUFBSSxHQUFHLENBQUM7SUFDUixJQUFJLElBQUksQ0FBQztJQUVULE1BQU0sQ0FBQztRQUNMLEtBQUssR0FBRyxJQUFJLGtCQUFRLENBQUMsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUN0QyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxTQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDMUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsVUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzVDLEdBQUcsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hCLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzVCLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLDZCQUE2QixFQUFFO1FBQ2hDLE1BQU0sT0FBTyxHQUFHLElBQUkscUJBQWUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDbEQsTUFBTSxPQUFPLEdBQUcsSUFBSSxxQkFBZSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNwRCxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVDLGdCQUFNLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDL0MsQ0FBQyxDQUFDLENBQUM7SUFFSCw2RUFBNkU7SUFFN0UsRUFBRSxDQUFDLG9DQUFvQyxFQUFFO1FBQ3ZDLGdCQUFNLENBQUMsV0FBVyxDQUFDLElBQUkscUJBQWUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNwRyxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxvQ0FBb0MsRUFBRTtRQUN2QyxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLHFCQUFlLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDdEcsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsdUNBQXVDLEVBQUU7UUFDMUMsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxxQkFBZSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxjQUFjLENBQUMscUNBQXFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNwSCxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxxREFBcUQsRUFBRTtRQUN4RCxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLHFCQUFlLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNqSCxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQywwQ0FBMEMsRUFBRTtRQUM3QyxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLHFCQUFlLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDdkcsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsaUNBQWlDLEVBQUU7UUFDcEMsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxxQkFBZSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQyxjQUFjLENBQUMsb0JBQW9CLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN0RyxDQUFDLENBQUMsQ0FBQztJQUVILDZFQUE2RTtJQUU3RSxFQUFFLENBQUMsMkRBQTJELEVBQUU7UUFDOUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxxQkFBZSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNsRCxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQztRQUMzRSxxRUFBcUU7UUFDckUsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUztRQUM5QyxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxhQUFhO1FBQ2xELGdCQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLGdCQUFnQjtRQUNyRCxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMscUJBQXFCO0lBQzlELENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLDZFQUE2RSxFQUFFO1FBQ2hGLE1BQU0sS0FBSyxHQUFHLElBQUkscUJBQWUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDbEQseUVBQXlFO1FBQ3pFLDJEQUEyRDtRQUMzRCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDbEUsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7UUFDaEYsZ0JBQU0sQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ2hELENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLHlEQUF5RCxFQUFFO1FBQzVELE1BQU0sS0FBSyxHQUFHLElBQUkscUJBQWUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDaEQsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLHVCQUF1QjtRQUN2QixnQkFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDcEMsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3BDLGdCQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN0QyxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyx1RUFBdUUsRUFBRTtRQUMxRSw0REFBNEQ7UUFDNUQsTUFBTSxXQUFXLEdBQUcsNkJBQWlCLENBQUMsbUJBQW1CLENBQUMscUJBQXFCLENBQzdFLElBQUksVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFDN0IsTUFBTSxDQUNQLENBQUM7UUFDRixNQUFNLEtBQUssR0FBRyxJQUFJLHFCQUFlLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ2xELGdCQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUNqRCxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyx5RUFBeUUsRUFBRTtRQUM1RSxNQUFNLEtBQUssR0FBRyxJQUFJLHFCQUFlLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxhQUFhLENBQUMsQ0FBQztRQUNqRSxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDaEUsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7UUFDaEYsZ0JBQU0sQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQzlDLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLHVFQUF1RSxFQUFFO1FBQzFFLE1BQU0sS0FBSyxHQUFHLElBQUkscUJBQWUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQzlELE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUNsRSxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3hDLE1BQU0sTUFBTSxHQUFHLDZCQUFpQixDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzFGLGdCQUFNLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUE2QixDQUFDLENBQUMsQ0FBQztJQUN0RixDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxrRkFBa0YsRUFBRTtRQUNyRixNQUFNLEtBQUssR0FBRyxJQUFJLHFCQUFlLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQztRQUM1RCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDbEUsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN4QyxNQUFNLE1BQU0sR0FBRyw2QkFBaUIsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN6RixnQkFBTSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBNkIsQ0FBQyxDQUFDLENBQUM7SUFDdEYsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsMEVBQTBFLEVBQUU7UUFDN0UsTUFBTSxXQUFXLEdBQUcsNkJBQWlCLENBQUMsbUJBQW1CLENBQUMscUJBQXFCLENBQzdFLElBQUksVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFDN0IsTUFBTSxDQUNQLENBQUM7UUFDRixNQUFNLEtBQUssR0FBRyxJQUFJLHFCQUFlLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQztRQUM5RCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUN4RCxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3hDLGdCQUFNLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0UsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsMkZBQTJGLEVBQUU7UUFDOUYsTUFBTSxLQUFLLEdBQUcsSUFBSSxxQkFBZSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDOUQsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQUMsRUFBRSxvQ0FBb0MsQ0FBQyxDQUFDO0lBQzVHLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLGtGQUFrRixFQUFFO1FBQ3JGLE1BQU0sS0FBSyxHQUFHLElBQUkscUJBQWUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQzlELGdCQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxFQUFFLG9DQUFvQyxDQUFDLENBQUM7SUFDakcsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsdUVBQXVFLEVBQUU7UUFDMUUsTUFBTSxLQUFLLEdBQUcsSUFBSSxxQkFBZSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDOUQsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLG9DQUFvQyxDQUFDLENBQUM7SUFDaEcsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsNEJBQTRCLEVBQUU7UUFDL0IsTUFBTSxLQUFLLEdBQUcsSUFBSSxxQkFBZSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNsRCxnQkFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQztJQUMxRCxDQUFDLENBQUMsQ0FBQztJQUVILDZFQUE2RTtJQUU3RSxFQUFFLENBQUMscURBQXFELEVBQUU7UUFDeEQsTUFBTSxLQUFLLEdBQUcsSUFBSSxxQkFBZSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNsRCxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQzlELE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDckMsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQ2hFLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLGdDQUFnQyxFQUFFO1FBQ25DLE1BQU0sS0FBSyxHQUFHLElBQUkscUJBQWUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDaEQsTUFBTSxPQUFPLEdBQUcscUNBQXFDLENBQUM7UUFDdEQsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNyQyxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3BELENBQUMsQ0FBQyxDQUFDO0lBRUgsNkVBQTZFO0lBRTdFLEVBQUUsQ0FBQyxnREFBZ0QsRUFBRTtRQUNuRCxnQkFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsWUFBWSxZQUFZLHFCQUFlLENBQUMsQ0FBQztJQUN6RCxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxpREFBaUQsRUFBRTtRQUNwRCxnQkFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxZQUFZLHFCQUFlLENBQUMsQ0FBQztJQUMxRCxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyw2REFBNkQsRUFBRTtRQUNoRSxnQkFBTSxDQUFDLFdBQVcsQ0FDaEIsR0FBRyxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxFQUN0RCxHQUFHLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FDMUMsQ0FBQztRQUNGLGdCQUFNLENBQUMsV0FBVyxDQUNoQixHQUFHLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxxQ0FBcUMsQ0FBQyxFQUN0RSxHQUFHLENBQUMsY0FBYyxDQUFDLHFDQUFxQyxDQUFDLENBQzFELENBQUM7UUFDRixnQkFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxjQUFjLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDO0lBQ3RILENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ25vZGU6YXNzZXJ0L3N0cmljdCc7XG5cbmltcG9ydCB7IEJpdEdvQVBJIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWFwaSc7XG5pbXBvcnQgeyBmaXhlZFNjcmlwdFdhbGxldCB9IGZyb20gJ0BiaXRnby93YXNtLXV0eG8nO1xuXG5pbXBvcnQge1xuICBaZWMsXG4gIFR6ZWMsXG4gIFplY0FkZHJlc3NDb2RlYyxcbiAgZ2V0WmNhc2hBZGRyZXNzS2luZCxcbiAgaXNTaGllbGRlZFpjYXNoQWRkcmVzcyxcbiAgaXNWYWxpZFpjYXNoQWRkcmVzcyxcbn0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vc3JjL2ltcGwvemVjJztcblxuLy8gWklQLTMxNiB1bmlmaWVkLWFkZHJlc3MgdGVzdCB2ZWN0b3JzLCBjb3BpZWQgZnJvbVxuLy8gQml0R29XQVNNL3BhY2thZ2VzL3dhc20tdXR4by90ZXN0L2ZpeHR1cmVzL3pjYXNoL3VuaWZpZWRfYWRkcmVzcy5qc29uIHNvXG4vLyBib3RoIHJlcG9zIHRlc3QgYWdhaW5zdCB0aGUgc2FtZSBrbm93bi1nb29kIGRhdGEuXG5jb25zdCB6aXAzMTZNYWlubmV0ID0ge1xuICB1bmlmaWVkOlxuICAgICd1MXBnMmFhcGg3anA4cnBmNnloc3phMjU3MjJzZzVmY24zdmFjYTZ6ZTI3aHFqdzdqdnZoaHV4a3BjZzBnZTl4aDZkcnNnZGtkYThxanE1Y2hwZWhrY3B4Zjg3cm5qcnlqcXd5bWRoZXB0cHZubGpxcXJqcXpqd2tjMm1hNmhjcTY2Nmtnd2Z5dHh3YWM4ZXlleDZuZGdyNmV6dGU2NjcwNmUzdmFxcmQyNWR6dnprYzY5a3cwamd5d3RkMGNtcTUycTVsa3c2dWg3aHl2empzZThrc3gnLFxufTtcbmNvbnN0IHRlc3RuZXRXYWxsZXQgPSB7XG4gIHVuaWZpZWQ6XG4gICAgJ3V0ZXN0MXc1bTBxY25wOGVnbDhxYTI5Nm43MG44bnZqMHRxbnprOTBwN2Y0OHY3bWpoaGRyZHFzOHZncXlkc2xnNXBsbXplZmF3ZWZucG1nbWxtNmhjeTM4bTk3MmVyd3hzMDRzMDJjcTJwcmhndXo4a3FseTc1bTZ6ank1Nm0wOGQ1am55Y2d0cHF0amVwcnRlNTc2Z2ttcnh5c3plcGd4NzZ5enV3aGg3bTRsZno5amFxN3VuamsweDVhbnQ0Nmp1eHo3M2hzYzZxNHYzZHF0end3MDB2cHMnLFxuICB0cmFuc3BhcmVudEFkZHJlc3M6ICd0bU00RHZMVkpLWFp0NXlkbjF0cVlUSHZhaHBLU3dnanVSaycsXG59O1xuXG5kZXNjcmliZSgnWmNhc2ggYWRkcmVzcyB2YWxpZGF0aW9uJywgZnVuY3Rpb24gKCkge1xuICBsZXQgYml0Z286IEJpdEdvQVBJO1xuICBsZXQgemVjO1xuICBsZXQgdHplYztcblxuICBiZWZvcmUoZnVuY3Rpb24gKCkge1xuICAgIGJpdGdvID0gbmV3IEJpdEdvQVBJKHsgZW52OiAnbW9jaycgfSk7XG4gICAgYml0Z28ucmVnaXN0ZXIoJ3plYycsIFplYy5jcmVhdGVJbnN0YW5jZSk7XG4gICAgYml0Z28ucmVnaXN0ZXIoJ3R6ZWMnLCBUemVjLmNyZWF0ZUluc3RhbmNlKTtcbiAgICB6ZWMgPSBiaXRnby5jb2luKCd6ZWMnKTtcbiAgICB0emVjID0gYml0Z28uY29pbigndHplYycpO1xuICB9KTtcblxuICBpdCgncmVjb2duaXplcyBhIG1haW5uZXQgdW5pZmllZCBhZGRyZXNzIGFzIHNoaWVsZGVkJywgZnVuY3Rpb24gKCkge1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbCh6ZWMuaXNWYWxpZEFkZHJlc3MoemlwMzE2TWFpbm5ldC51bmlmaWVkKSwgdHJ1ZSk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGdldFpjYXNoQWRkcmVzc0tpbmQoemlwMzE2TWFpbm5ldC51bmlmaWVkLCAnemVjJyksICdzaGllbGRlZCcpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChpc1NoaWVsZGVkWmNhc2hBZGRyZXNzKHppcDMxNk1haW5uZXQudW5pZmllZCwgJ3plYycpLCB0cnVlKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaXNWYWxpZFpjYXNoQWRkcmVzcyh6aXAzMTZNYWlubmV0LnVuaWZpZWQsICd6ZWMnKSwgdHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KCdyZWNvZ25pemVzIGEgdGVzdG5ldCB1bmlmaWVkIGFkZHJlc3MgYXMgc2hpZWxkZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR6ZWMuaXNWYWxpZEFkZHJlc3ModGVzdG5ldFdhbGxldC51bmlmaWVkKSwgdHJ1ZSk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGdldFpjYXNoQWRkcmVzc0tpbmQodGVzdG5ldFdhbGxldC51bmlmaWVkLCAndHplYycpLCAnc2hpZWxkZWQnKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaXNTaGllbGRlZFpjYXNoQWRkcmVzcyh0ZXN0bmV0V2FsbGV0LnVuaWZpZWQsICd0emVjJyksIHRydWUpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChpc1ZhbGlkWmNhc2hBZGRyZXNzKHRlc3RuZXRXYWxsZXQudW5pZmllZCwgJ3R6ZWMnKSwgdHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KCdyZWNvZ25pemVzIGEgdGVzdG5ldCB0cmFuc3BhcmVudCBhZGRyZXNzIGFzIHRyYW5zcGFyZW50JywgZnVuY3Rpb24gKCkge1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0emVjLmlzVmFsaWRBZGRyZXNzKHRlc3RuZXRXYWxsZXQudHJhbnNwYXJlbnRBZGRyZXNzKSwgdHJ1ZSk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGdldFpjYXNoQWRkcmVzc0tpbmQodGVzdG5ldFdhbGxldC50cmFuc3BhcmVudEFkZHJlc3MsICd0emVjJyksICd0cmFuc3BhcmVudCcpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChpc1ZhbGlkWmNhc2hBZGRyZXNzKHRlc3RuZXRXYWxsZXQudHJhbnNwYXJlbnRBZGRyZXNzLCAndHplYycpLCB0cnVlKTtcbiAgfSk7XG5cbiAgaXQoJ3JlY29nbml6ZXMgYSBtYWlubmV0IHRyYW5zcGFyZW50IChQMlBLSCkgYWRkcmVzcyBhcyB0cmFuc3BhcmVudCcsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBhZGRyZXNzID0gJ3QxY04yWlZXeldjVlJybmZlUXpta3BMaHpRNGRZUnY4eVJZJztcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoemVjLmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MpLCB0cnVlKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZ2V0WmNhc2hBZGRyZXNzS2luZChhZGRyZXNzLCAnemVjJyksICd0cmFuc3BhcmVudCcpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChpc1ZhbGlkWmNhc2hBZGRyZXNzKGFkZHJlc3MsICd6ZWMnKSwgdHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KCdyZWplY3RzIGEgZ2FyYmFnZSBzdHJpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgZ2FyYmFnZSA9ICdub3QtYS1yZWFsLWFkZHJlc3MnO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbCh6ZWMuaXNWYWxpZEFkZHJlc3MoZ2FyYmFnZSksIGZhbHNlKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZ2V0WmNhc2hBZGRyZXNzS2luZChnYXJiYWdlLCAnemVjJyksIHVuZGVmaW5lZCk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGlzVmFsaWRaY2FzaEFkZHJlc3MoZ2FyYmFnZSwgJ3plYycpLCBmYWxzZSk7XG4gIH0pO1xuXG4gIGl0KCdyZWplY3RzIGEgdW5pZmllZCBhZGRyZXNzIGNoZWNrZWQgYWdhaW5zdCB0aGUgd3JvbmcgbmV0d29yaycsIGZ1bmN0aW9uICgpIHtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwodHplYy5pc1ZhbGlkQWRkcmVzcyh6aXAzMTZNYWlubmV0LnVuaWZpZWQpLCBmYWxzZSk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGdldFpjYXNoQWRkcmVzc0tpbmQoemlwMzE2TWFpbm5ldC51bmlmaWVkLCAndHplYycpLCB1bmRlZmluZWQpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChpc1NoaWVsZGVkWmNhc2hBZGRyZXNzKHppcDMxNk1haW5uZXQudW5pZmllZCwgJ3R6ZWMnKSwgZmFsc2UpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChpc1ZhbGlkWmNhc2hBZGRyZXNzKHppcDMxNk1haW5uZXQudW5pZmllZCwgJ3R6ZWMnKSwgZmFsc2UpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnWmVjQWRkcmVzc0NvZGVjJywgZnVuY3Rpb24gKCkge1xuICAvLyAtLSBpbnN0YW50aWF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBsZXQgYml0Z286IEJpdEdvQVBJO1xuICBsZXQgemVjO1xuICBsZXQgdHplYztcblxuICBiZWZvcmUoZnVuY3Rpb24gKCkge1xuICAgIGJpdGdvID0gbmV3IEJpdEdvQVBJKHsgZW52OiAnbW9jaycgfSk7XG4gICAgYml0Z28ucmVnaXN0ZXIoJ3plYycsIFplYy5jcmVhdGVJbnN0YW5jZSk7XG4gICAgYml0Z28ucmVnaXN0ZXIoJ3R6ZWMnLCBUemVjLmNyZWF0ZUluc3RhbmNlKTtcbiAgICB6ZWMgPSBiaXRnby5jb2luKCd6ZWMnKTtcbiAgICB0emVjID0gYml0Z28uY29pbigndHplYycpO1xuICB9KTtcblxuICBpdCgnY29uc3RydWN0cyBmb3IgemVjIGFuZCB0emVjJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IG1haW5uZXQgPSBuZXcgWmVjQWRkcmVzc0NvZGVjKCd6ZWMnLCAnemVjJyk7XG4gICAgY29uc3QgdGVzdG5ldCA9IG5ldyBaZWNBZGRyZXNzQ29kZWMoJ3R6ZWMnLCAndHplYycpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChtYWlubmV0LmNvaW5OYW1lLCAnemVjJyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRlc3RuZXQuY29pbk5hbWUsICd0emVjJyk7XG4gIH0pO1xuXG4gIC8vIC0tIGlzVmFsaWRBZGRyZXNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgaXQoJ2lzVmFsaWRBZGRyZXNzOiBhY2NlcHRzIG1haW5uZXQgVUEnLCBmdW5jdGlvbiAoKSB7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKG5ldyBaZWNBZGRyZXNzQ29kZWMoJ3plYycsICd6ZWMnKS5pc1ZhbGlkQWRkcmVzcyh6aXAzMTZNYWlubmV0LnVuaWZpZWQpLCB0cnVlKTtcbiAgfSk7XG5cbiAgaXQoJ2lzVmFsaWRBZGRyZXNzOiBhY2NlcHRzIHRlc3RuZXQgVUEnLCBmdW5jdGlvbiAoKSB7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKG5ldyBaZWNBZGRyZXNzQ29kZWMoJ3R6ZWMnLCAndHplYycpLmlzVmFsaWRBZGRyZXNzKHRlc3RuZXRXYWxsZXQudW5pZmllZCksIHRydWUpO1xuICB9KTtcblxuICBpdCgnaXNWYWxpZEFkZHJlc3M6IGFjY2VwdHMgbWFpbm5ldCBQMlBLSCcsIGZ1bmN0aW9uICgpIHtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwobmV3IFplY0FkZHJlc3NDb2RlYygnemVjJywgJ3plYycpLmlzVmFsaWRBZGRyZXNzKCd0MWNOMlpWV3pXY1ZScm5mZVF6bWtwTGh6UTRkWVJ2OHlSWScpLCB0cnVlKTtcbiAgfSk7XG5cbiAgaXQoJ2lzVmFsaWRBZGRyZXNzOiBhY2NlcHRzIHRlc3RuZXQgdHJhbnNwYXJlbnQgYWRkcmVzcycsIGZ1bmN0aW9uICgpIHtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwobmV3IFplY0FkZHJlc3NDb2RlYygndHplYycsICd0emVjJykuaXNWYWxpZEFkZHJlc3ModGVzdG5ldFdhbGxldC50cmFuc3BhcmVudEFkZHJlc3MpLCB0cnVlKTtcbiAgfSk7XG5cbiAgaXQoJ2lzVmFsaWRBZGRyZXNzOiByZWplY3RzIHdyb25nLW5ldHdvcmsgVUEnLCBmdW5jdGlvbiAoKSB7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKG5ldyBaZWNBZGRyZXNzQ29kZWMoJ3R6ZWMnLCAndHplYycpLmlzVmFsaWRBZGRyZXNzKHppcDMxNk1haW5uZXQudW5pZmllZCksIGZhbHNlKTtcbiAgfSk7XG5cbiAgaXQoJ2lzVmFsaWRBZGRyZXNzOiByZWplY3RzIGdhcmJhZ2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKG5ldyBaZWNBZGRyZXNzQ29kZWMoJ3R6ZWMnLCAndHplYycpLmlzVmFsaWRBZGRyZXNzKCdub3QtYS1yZWFsLWFkZHJlc3MnKSwgZmFsc2UpO1xuICB9KTtcblxuICAvLyAtLSBkZWNvZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIGl0KCdkZWNvZGU6IHBsYWluIHRyYW5zcGFyZW50IGFkZHJlc3MgZGVjb2RlcyB0byBQMlBLSCBzY3JpcHQnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgY29kZWMgPSBuZXcgWmVjQWRkcmVzc0NvZGVjKCd0emVjJywgJ3R6ZWMnKTtcbiAgICBjb25zdCBzY3JpcHQgPSBCdWZmZXIuZnJvbShjb2RlYy5kZWNvZGUodGVzdG5ldFdhbGxldC50cmFuc3BhcmVudEFkZHJlc3MpKTtcbiAgICAvLyBQMlBLSDogT1BfRFVQIE9QX0hBU0gxNjAgPDIwLWJ5dGUgaGFzaD4gT1BfRVFVQUxWRVJJRlkgT1BfQ0hFQ0tTSUdcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoc2NyaXB0WzBdLCAweDc2KTsgLy8gT1BfRFVQXG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHNjcmlwdFsxXSwgMHhhOSk7IC8vIE9QX0hBU0gxNjBcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoc2NyaXB0WzJdLCAweDE0KTsgLy8gcHVzaCAyMCBieXRlc1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChzY3JpcHQubGVuZ3RoLCAyNSk7IC8vIHRvdGFsIFAyUEtIIGxlbmd0aFxuICB9KTtcblxuICBpdCgnZGVjb2RlOiBVQSB3aXRoIHRyYW5zcGFyZW50IHJlY2VpdmVyIGRlY29kZXMgdG8gdGhlIHNhbWUgdHJhbnNwYXJlbnQgc2NyaXB0JywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGNvZGVjID0gbmV3IFplY0FkZHJlc3NDb2RlYygndHplYycsICd0emVjJyk7XG4gICAgLy8gVGhlIHRlc3RuZXQgVUEgY2FycmllcyBhIHRyYW5zcGFyZW50IHJlY2VpdmVyOyBpdCBzaG91bGQgZGVjb2RlIHRvIHRoZVxuICAgIC8vIHNhbWUgc2NyaXB0UHViS2V5IGFzIHRoZSBzdGFuZGFsb25lIHRyYW5zcGFyZW50IGFkZHJlc3MuXG4gICAgY29uc3QgdWFTY3JpcHQgPSBCdWZmZXIuZnJvbShjb2RlYy5kZWNvZGUodGVzdG5ldFdhbGxldC51bmlmaWVkKSk7XG4gICAgY29uc3QgdEFkZHJTY3JpcHQgPSBCdWZmZXIuZnJvbShjb2RlYy5kZWNvZGUodGVzdG5ldFdhbGxldC50cmFuc3BhcmVudEFkZHJlc3MpKTtcbiAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHVhU2NyaXB0LCB0QWRkclNjcmlwdCk7XG4gIH0pO1xuXG4gIGl0KCdkZWNvZGU6IFVBIHdpdGggdHJhbnNwYXJlbnQgcmVjZWl2ZXIgZGVjb2RlcyBvbiBtYWlubmV0JywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGNvZGVjID0gbmV3IFplY0FkZHJlc3NDb2RlYygnemVjJywgJ3plYycpO1xuICAgIGNvbnN0IHNjcmlwdCA9IEJ1ZmZlci5mcm9tKGNvZGVjLmRlY29kZSh6aXAzMTZNYWlubmV0LnVuaWZpZWQpKTtcbiAgICAvLyBQMlBLSCBzdHJ1Y3R1cmUgdGVzdFxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChzY3JpcHRbMF0sIDB4NzYpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChzY3JpcHRbMV0sIDB4YTkpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChzY3JpcHRbMl0sIDB4MTQpO1xuICB9KTtcblxuICBpdCgnZGVjb2RlOiB0aHJvd3MgZm9yIGEgVUEgd2l0aG91dCBhIHRyYW5zcGFyZW50IHJlY2VpdmVyIChvcmNoYXJkLW9ubHkpJywgZnVuY3Rpb24gKCkge1xuICAgIC8vIENvbnN0cnVjdCBhbiBPcmNoYXJkLW9ubHkgVUEgYnkgZW5jb2RpbmcgYSBkdW1teSByZWNlaXZlclxuICAgIGNvbnN0IG9yY2hhcmRPbmx5ID0gZml4ZWRTY3JpcHRXYWxsZXQuWmNhc2hVbmlmaWVkQWRkcmVzcy5lbmNvZGVPcmNoYXJkUmVjZWl2ZXIoXG4gICAgICBuZXcgVWludDhBcnJheSg0MykuZmlsbCgweDQyKSxcbiAgICAgICd0emVjJ1xuICAgICk7XG4gICAgY29uc3QgY29kZWMgPSBuZXcgWmVjQWRkcmVzc0NvZGVjKCd0emVjJywgJ3R6ZWMnKTtcbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IGNvZGVjLmRlY29kZShvcmNoYXJkT25seSkpO1xuICB9KTtcblxuICBpdCgnZGVjb2RlOiBleHBsaWNpdCB0cmFuc3BhcmVudC1ib3VuZCBjb2RlYyByZXR1cm5zIHRoZSB0cmFuc3BhcmVudCBzY3JpcHQnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgY29kZWMgPSBuZXcgWmVjQWRkcmVzc0NvZGVjKCd0emVjJywgJ3R6ZWMnLCAndHJhbnNwYXJlbnQnKTtcbiAgICBjb25zdCBzY3JpcHQgPSBCdWZmZXIuZnJvbShjb2RlYy5kZWNvZGUodGVzdG5ldFdhbGxldC51bmlmaWVkKSk7XG4gICAgY29uc3QgdEFkZHJTY3JpcHQgPSBCdWZmZXIuZnJvbShjb2RlYy5kZWNvZGUodGVzdG5ldFdhbGxldC50cmFuc3BhcmVudEFkZHJlc3MpKTtcbiAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHNjcmlwdCwgdEFkZHJTY3JpcHQpO1xuICB9KTtcblxuICBpdCgnZGVjb2RlOiBzaGllbGRlZC1ib3VuZCBjb2RlYyByZXR1cm5zIHRoZSByYXcgNDMtYnl0ZSBPcmNoYXJkIHJlY2VpdmVyJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGNvZGVjID0gbmV3IFplY0FkZHJlc3NDb2RlYygndHplYycsICd0emVjJywgJ3NoaWVsZGVkJyk7XG4gICAgY29uc3QgcmVjZWl2ZXIgPSBCdWZmZXIuZnJvbShjb2RlYy5kZWNvZGUodGVzdG5ldFdhbGxldC51bmlmaWVkKSk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlY2VpdmVyLmxlbmd0aCwgNDMpO1xuICAgIGNvbnN0IHBhcnNlZCA9IGZpeGVkU2NyaXB0V2FsbGV0LlpjYXNoVW5pZmllZEFkZHJlc3MucGFyc2UodGVzdG5ldFdhbGxldC51bmlmaWVkLCAndHplYycpO1xuICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwocmVjZWl2ZXIsIEJ1ZmZlci5mcm9tKHBhcnNlZC5vcmNoYXJkUmVjZWl2ZXIgYXMgVWludDhBcnJheSkpO1xuICB9KTtcblxuICBpdCgnZGVjb2RlOiBzaGllbGRlZC1ib3VuZCBjb2RlYyBvbiBtYWlubmV0IHJldHVybnMgdGhlIHJhdyA0My1ieXRlIE9yY2hhcmQgcmVjZWl2ZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgY29kZWMgPSBuZXcgWmVjQWRkcmVzc0NvZGVjKCd6ZWMnLCAnemVjJywgJ3NoaWVsZGVkJyk7XG4gICAgY29uc3QgcmVjZWl2ZXIgPSBCdWZmZXIuZnJvbShjb2RlYy5kZWNvZGUoemlwMzE2TWFpbm5ldC51bmlmaWVkKSk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlY2VpdmVyLmxlbmd0aCwgNDMpO1xuICAgIGNvbnN0IHBhcnNlZCA9IGZpeGVkU2NyaXB0V2FsbGV0LlpjYXNoVW5pZmllZEFkZHJlc3MucGFyc2UoemlwMzE2TWFpbm5ldC51bmlmaWVkLCAnemVjJyk7XG4gICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChyZWNlaXZlciwgQnVmZmVyLmZyb20ocGFyc2VkLm9yY2hhcmRSZWNlaXZlciBhcyBVaW50OEFycmF5KSk7XG4gIH0pO1xuXG4gIGl0KCdkZWNvZGU6IHNoaWVsZGVkLWJvdW5kIGNvZGVjIHJlc29sdmVzIGFuIE9yY2hhcmQtb25seSBVQSB0byBpdHMgcmVjZWl2ZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qgb3JjaGFyZE9ubHkgPSBmaXhlZFNjcmlwdFdhbGxldC5aY2FzaFVuaWZpZWRBZGRyZXNzLmVuY29kZU9yY2hhcmRSZWNlaXZlcihcbiAgICAgIG5ldyBVaW50OEFycmF5KDQzKS5maWxsKDB4NDIpLFxuICAgICAgJ3R6ZWMnXG4gICAgKTtcbiAgICBjb25zdCBjb2RlYyA9IG5ldyBaZWNBZGRyZXNzQ29kZWMoJ3R6ZWMnLCAndHplYycsICdzaGllbGRlZCcpO1xuICAgIGNvbnN0IHJlY2VpdmVyID0gQnVmZmVyLmZyb20oY29kZWMuZGVjb2RlKG9yY2hhcmRPbmx5KSk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlY2VpdmVyLmxlbmd0aCwgNDMpO1xuICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwocmVjZWl2ZXIsIEJ1ZmZlci5mcm9tKG5ldyBVaW50OEFycmF5KDQzKS5maWxsKDB4NDIpKSk7XG4gIH0pO1xuXG4gIGl0KCdkZWNvZGU6IHNoaWVsZGVkLWJvdW5kIGNvZGVjIHRocm93cyBpbnZhbGlkLWFkZHJlc3MgZXJyb3IgZm9yIGEgcGxhaW4gdHJhbnNwYXJlbnQgYWRkcmVzcycsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBjb2RlYyA9IG5ldyBaZWNBZGRyZXNzQ29kZWMoJ3R6ZWMnLCAndHplYycsICdzaGllbGRlZCcpO1xuICAgIGFzc2VydC50aHJvd3MoKCkgPT4gY29kZWMuZGVjb2RlKHRlc3RuZXRXYWxsZXQudHJhbnNwYXJlbnRBZGRyZXNzKSwgL2lzIG5vdCBhIHZhbGlkIGFkZHJlc3MgZm9yIG5ldHdvcmsvKTtcbiAgfSk7XG5cbiAgaXQoJ2RlY29kZTogc2hpZWxkZWQtYm91bmQgY29kZWMgdGhyb3dzIGludmFsaWQtYWRkcmVzcyBlcnJvciBmb3IgYSB3cm9uZy1uZXR3b3JrIFVBJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGNvZGVjID0gbmV3IFplY0FkZHJlc3NDb2RlYygndHplYycsICd0emVjJywgJ3NoaWVsZGVkJyk7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiBjb2RlYy5kZWNvZGUoemlwMzE2TWFpbm5ldC51bmlmaWVkKSwgL2lzIG5vdCBhIHZhbGlkIGFkZHJlc3MgZm9yIG5ldHdvcmsvKTtcbiAgfSk7XG5cbiAgaXQoJ2RlY29kZTogc2hpZWxkZWQtYm91bmQgY29kZWMgdGhyb3dzIGludmFsaWQtYWRkcmVzcyBlcnJvciBmb3IgZ2FyYmFnZScsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBjb2RlYyA9IG5ldyBaZWNBZGRyZXNzQ29kZWMoJ3R6ZWMnLCAndHplYycsICdzaGllbGRlZCcpO1xuICAgIGFzc2VydC50aHJvd3MoKCkgPT4gY29kZWMuZGVjb2RlKCdub3QtYS1yZWFsLWFkZHJlc3MnKSwgL2lzIG5vdCBhIHZhbGlkIGFkZHJlc3MgZm9yIG5ldHdvcmsvKTtcbiAgfSk7XG5cbiAgaXQoJ2RlY29kZTogdGhyb3dzIGZvciBnYXJiYWdlJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGNvZGVjID0gbmV3IFplY0FkZHJlc3NDb2RlYygndHplYycsICd0emVjJyk7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiBjb2RlYy5kZWNvZGUoJ25vdC1hLXJlYWwtYWRkcmVzcycpKTtcbiAgfSk7XG5cbiAgLy8gLS0gZW5jb2RlIChpbmhlcml0ZWQpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBpdCgnZW5jb2RlOiByb3VuZC10cmlwcyBhIHRyYW5zcGFyZW50IHNjcmlwdCB0byBhZGRyZXNzJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGNvZGVjID0gbmV3IFplY0FkZHJlc3NDb2RlYygndHplYycsICd0emVjJyk7XG4gICAgY29uc3Qgc2NyaXB0ID0gY29kZWMuZGVjb2RlKHRlc3RuZXRXYWxsZXQudHJhbnNwYXJlbnRBZGRyZXNzKTtcbiAgICBjb25zdCBhZGRyZXNzID0gY29kZWMuZW5jb2RlKHNjcmlwdCk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGFkZHJlc3MsIHRlc3RuZXRXYWxsZXQudHJhbnNwYXJlbnRBZGRyZXNzKTtcbiAgfSk7XG5cbiAgaXQoJ2VuY29kZTogcm91bmQtdHJpcHMgb24gbWFpbm5ldCcsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBjb2RlYyA9IG5ldyBaZWNBZGRyZXNzQ29kZWMoJ3plYycsICd6ZWMnKTtcbiAgICBjb25zdCBhZGRyZXNzID0gJ3QxY04yWlZXeldjVlJybmZlUXpta3BMaHpRNGRZUnY4eVJZJztcbiAgICBjb25zdCBzY3JpcHQgPSBjb2RlYy5kZWNvZGUoYWRkcmVzcyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGNvZGVjLmVuY29kZShzY3JpcHQpLCBhZGRyZXNzKTtcbiAgfSk7XG5cbiAgLy8gLS0gaW50ZWdyYXRpb246IGNvaW4uYWRkcmVzc0NvZGVjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBpdCgnY29pbi5hZGRyZXNzQ29kZWM6IHplYyByZXR1cm5zIFplY0FkZHJlc3NDb2RlYycsIGZ1bmN0aW9uICgpIHtcbiAgICBhc3NlcnQub2soemVjLmFkZHJlc3NDb2RlYyBpbnN0YW5jZW9mIFplY0FkZHJlc3NDb2RlYyk7XG4gIH0pO1xuXG4gIGl0KCdjb2luLmFkZHJlc3NDb2RlYzogdHplYyByZXR1cm5zIFplY0FkZHJlc3NDb2RlYycsIGZ1bmN0aW9uICgpIHtcbiAgICBhc3NlcnQub2sodHplYy5hZGRyZXNzQ29kZWMgaW5zdGFuY2VvZiBaZWNBZGRyZXNzQ29kZWMpO1xuICB9KTtcblxuICBpdCgnY29pbi5hZGRyZXNzQ29kZWMuaXNWYWxpZEFkZHJlc3MgbWF0Y2hlcyBaZWMuaXNWYWxpZEFkZHJlc3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKFxuICAgICAgemVjLmFkZHJlc3NDb2RlYy5pc1ZhbGlkQWRkcmVzcyh6aXAzMTZNYWlubmV0LnVuaWZpZWQpLFxuICAgICAgemVjLmlzVmFsaWRBZGRyZXNzKHppcDMxNk1haW5uZXQudW5pZmllZClcbiAgICApO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChcbiAgICAgIHplYy5hZGRyZXNzQ29kZWMuaXNWYWxpZEFkZHJlc3MoJ3QxY04yWlZXeldjVlJybmZlUXpta3BMaHpRNGRZUnY4eVJZJyksXG4gICAgICB6ZWMuaXNWYWxpZEFkZHJlc3MoJ3QxY04yWlZXeldjVlJybmZlUXpta3BMaHpRNGRZUnY4eVJZJylcbiAgICApO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbCh6ZWMuYWRkcmVzc0NvZGVjLmlzVmFsaWRBZGRyZXNzKCdub3QtYS1yZWFsLWFkZHJlc3MnKSwgemVjLmlzVmFsaWRBZGRyZXNzKCdub3QtYS1yZWFsLWFkZHJlc3MnKSk7XG4gIH0pO1xufSk7XG4iXX0=