@wallfree-dev/bitcoin 0.13.42

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (167) hide show
  1. package/LICENSE.md +7 -0
  2. package/index.d.ts +1 -0
  3. package/index.js +18 -0
  4. package/index.js.map +1 -0
  5. package/package.json +66 -0
  6. package/readme.md +121 -0
  7. package/v0/index.d.ts +14 -0
  8. package/v0/index.js +34 -0
  9. package/v0/index.js.map +1 -0
  10. package/v0/protocol/BitcoinAddress.d.ts +9 -0
  11. package/v0/protocol/BitcoinAddress.js +23 -0
  12. package/v0/protocol/BitcoinAddress.js.map +1 -0
  13. package/v0/protocol/BitcoinCryptoClient.d.ts +11 -0
  14. package/v0/protocol/BitcoinCryptoClient.js +91 -0
  15. package/v0/protocol/BitcoinCryptoClient.js.map +1 -0
  16. package/v0/protocol/BitcoinProtocol.d.ts +168 -0
  17. package/v0/protocol/BitcoinProtocol.js +1070 -0
  18. package/v0/protocol/BitcoinProtocol.js.map +1 -0
  19. package/v0/protocol/BitcoinProtocolOptions.d.ts +26 -0
  20. package/v0/protocol/BitcoinProtocolOptions.js +148 -0
  21. package/v0/protocol/BitcoinProtocolOptions.js.map +1 -0
  22. package/v0/protocol/BitcoinSegwitAddress.d.ts +7 -0
  23. package/v0/protocol/BitcoinSegwitAddress.js +41 -0
  24. package/v0/protocol/BitcoinSegwitAddress.js.map +1 -0
  25. package/v0/protocol/BitcoinSegwitProtocol.d.ts +29 -0
  26. package/v0/protocol/BitcoinSegwitProtocol.js +548 -0
  27. package/v0/protocol/BitcoinSegwitProtocol.js.map +1 -0
  28. package/v0/protocol/BitcoinTestnetProtocol.d.ts +7 -0
  29. package/v0/protocol/BitcoinTestnetProtocol.js +58 -0
  30. package/v0/protocol/BitcoinTestnetProtocol.js.map +1 -0
  31. package/v0/protocol/BitcoinTypes.d.ts +21 -0
  32. package/v0/protocol/BitcoinTypes.js +3 -0
  33. package/v0/protocol/BitcoinTypes.js.map +1 -0
  34. package/v0/serializer/schemas/v2/transaction-sign-request-bitcoin-segwit.json +0 -0
  35. package/v0/serializer/schemas/v2/transaction-sign-request-bitcoin.json +73 -0
  36. package/v0/serializer/schemas/v2/transaction-sign-response-bitcoin-segwit.json +0 -0
  37. package/v0/serializer/schemas/v2/transaction-sign-response-bitcoin.json +37 -0
  38. package/v0/serializer/schemas/v3/transaction-sign-request-bitcoin-segwit.json +29 -0
  39. package/v0/serializer/schemas/v3/transaction-sign-request-bitcoin.json +73 -0
  40. package/v0/serializer/schemas/v3/transaction-sign-response-bitcoin-segwit.json +19 -0
  41. package/v0/serializer/schemas/v3/transaction-sign-response-bitcoin.json +37 -0
  42. package/v0/serializer/validators/transaction-validator.d.ts +15 -0
  43. package/v0/serializer/validators/transaction-validator.js +81 -0
  44. package/v0/serializer/validators/transaction-validator.js.map +1 -0
  45. package/v0/serializer/validators/validators.d.ts +1 -0
  46. package/v0/serializer/validators/validators.js +151 -0
  47. package/v0/serializer/validators/validators.js.map +1 -0
  48. package/v0/types/signed-transaction-bitcoin-segwit.d.ts +5 -0
  49. package/v0/types/signed-transaction-bitcoin-segwit.js +3 -0
  50. package/v0/types/signed-transaction-bitcoin-segwit.js.map +1 -0
  51. package/v0/types/signed-transaction-bitcoin.d.ts +9 -0
  52. package/v0/types/signed-transaction-bitcoin.js +3 -0
  53. package/v0/types/signed-transaction-bitcoin.js.map +1 -0
  54. package/v0/types/transaction-bitcoin.d.ts +20 -0
  55. package/v0/types/transaction-bitcoin.js +3 -0
  56. package/v0/types/transaction-bitcoin.js.map +1 -0
  57. package/v0/types/unsigned-transaction-bitcoin-segwit.d.ts +7 -0
  58. package/v0/types/unsigned-transaction-bitcoin-segwit.js +3 -0
  59. package/v0/types/unsigned-transaction-bitcoin-segwit.js.map +1 -0
  60. package/v0/types/unsigned-transaction-bitcoin.d.ts +22 -0
  61. package/v0/types/unsigned-transaction-bitcoin.js +3 -0
  62. package/v0/types/unsigned-transaction-bitcoin.js.map +1 -0
  63. package/v1/block-explorer/BlockCypherBlockExplorer.d.ts +9 -0
  64. package/v1/block-explorer/BlockCypherBlockExplorer.js +72 -0
  65. package/v1/block-explorer/BlockCypherBlockExplorer.js.map +1 -0
  66. package/v1/data/BitcoinAddress.d.ts +7 -0
  67. package/v1/data/BitcoinAddress.js +20 -0
  68. package/v1/data/BitcoinAddress.js.map +1 -0
  69. package/v1/data/BitcoinSegwitAddress.d.ts +9 -0
  70. package/v1/data/BitcoinSegwitAddress.js +25 -0
  71. package/v1/data/BitcoinSegwitAddress.js.map +1 -0
  72. package/v1/data/BitcoinTaprootAddress.d.ts +9 -0
  73. package/v1/data/BitcoinTaprootAddress.js +57 -0
  74. package/v1/data/BitcoinTaprootAddress.js.map +1 -0
  75. package/v1/index.d.ts +25 -0
  76. package/v1/index.js +30 -0
  77. package/v1/index.js.map +1 -0
  78. package/v1/module/BitcoinModule.d.ts +18 -0
  79. package/v1/module/BitcoinModule.js +116 -0
  80. package/v1/module/BitcoinModule.js.map +1 -0
  81. package/v1/module.d.ts +3 -0
  82. package/v1/module.js +24 -0
  83. package/v1/module.js.map +1 -0
  84. package/v1/protocol/BitcoinCryptoClient.d.ts +12 -0
  85. package/v1/protocol/BitcoinCryptoClient.js +96 -0
  86. package/v1/protocol/BitcoinCryptoClient.js.map +1 -0
  87. package/v1/protocol/BitcoinProtocol.d.ts +84 -0
  88. package/v1/protocol/BitcoinProtocol.js +1312 -0
  89. package/v1/protocol/BitcoinProtocol.js.map +1 -0
  90. package/v1/protocol/BitcoinSegwitProtocol.d.ts +56 -0
  91. package/v1/protocol/BitcoinSegwitProtocol.js +863 -0
  92. package/v1/protocol/BitcoinSegwitProtocol.js.map +1 -0
  93. package/v1/protocol/BitcoinTaprootProtocol.d.ts +60 -0
  94. package/v1/protocol/BitcoinTaprootProtocol.js +1079 -0
  95. package/v1/protocol/BitcoinTaprootProtocol.js.map +1 -0
  96. package/v1/protocol/BitcoinTestnetProtocol.d.ts +10 -0
  97. package/v1/protocol/BitcoinTestnetProtocol.js +70 -0
  98. package/v1/protocol/BitcoinTestnetProtocol.js.map +1 -0
  99. package/v1/serializer/v3/schemas/converter/transaction-converter.d.ts +19 -0
  100. package/v1/serializer/v3/schemas/converter/transaction-converter.js +96 -0
  101. package/v1/serializer/v3/schemas/converter/transaction-converter.js.map +1 -0
  102. package/v1/serializer/v3/schemas/definitions/transaction-sign-request-bitcoin-segwit.d.ts +4 -0
  103. package/v1/serializer/v3/schemas/definitions/transaction-sign-request-bitcoin-segwit.js +3 -0
  104. package/v1/serializer/v3/schemas/definitions/transaction-sign-request-bitcoin-segwit.js.map +1 -0
  105. package/v1/serializer/v3/schemas/definitions/transaction-sign-request-bitcoin-taproot.d.ts +4 -0
  106. package/v1/serializer/v3/schemas/definitions/transaction-sign-request-bitcoin-taproot.js +3 -0
  107. package/v1/serializer/v3/schemas/definitions/transaction-sign-request-bitcoin-taproot.js.map +1 -0
  108. package/v1/serializer/v3/schemas/definitions/transaction-sign-request-bitcoin.d.ts +4 -0
  109. package/v1/serializer/v3/schemas/definitions/transaction-sign-request-bitcoin.js +3 -0
  110. package/v1/serializer/v3/schemas/definitions/transaction-sign-request-bitcoin.js.map +1 -0
  111. package/v1/serializer/v3/schemas/definitions/transaction-sign-response-bitcoin-segwit.d.ts +3 -0
  112. package/v1/serializer/v3/schemas/definitions/transaction-sign-response-bitcoin-segwit.js +3 -0
  113. package/v1/serializer/v3/schemas/definitions/transaction-sign-response-bitcoin-segwit.js.map +1 -0
  114. package/v1/serializer/v3/schemas/definitions/transaction-sign-response-bitcoin-taproot.d.ts +3 -0
  115. package/v1/serializer/v3/schemas/definitions/transaction-sign-response-bitcoin-taproot.js +3 -0
  116. package/v1/serializer/v3/schemas/definitions/transaction-sign-response-bitcoin-taproot.js.map +1 -0
  117. package/v1/serializer/v3/schemas/definitions/transaction-sign-response-bitcoin.d.ts +7 -0
  118. package/v1/serializer/v3/schemas/definitions/transaction-sign-response-bitcoin.js +3 -0
  119. package/v1/serializer/v3/schemas/definitions/transaction-sign-response-bitcoin.js.map +1 -0
  120. package/v1/serializer/v3/schemas/generated/transaction-sign-request-bitcoin-segwit.json +29 -0
  121. package/v1/serializer/v3/schemas/generated/transaction-sign-request-bitcoin-taproot.json +29 -0
  122. package/v1/serializer/v3/schemas/generated/transaction-sign-request-bitcoin.json +79 -0
  123. package/v1/serializer/v3/schemas/generated/transaction-sign-response-bitcoin-segwit.json +19 -0
  124. package/v1/serializer/v3/schemas/generated/transaction-sign-response-bitcoin-taproot.json +19 -0
  125. package/v1/serializer/v3/schemas/generated/transaction-sign-response-bitcoin.json +37 -0
  126. package/v1/serializer/v3/serializer-companion.d.ts +14 -0
  127. package/v1/serializer/v3/serializer-companion.js +219 -0
  128. package/v1/serializer/v3/serializer-companion.js.map +1 -0
  129. package/v1/serializer/v3/validators/transaction-validator.d.ts +7 -0
  130. package/v1/serializer/v3/validators/transaction-validator.js +56 -0
  131. package/v1/serializer/v3/validators/transaction-validator.js.map +1 -0
  132. package/v1/serializer/v3/validators/validators.d.ts +7 -0
  133. package/v1/serializer/v3/validators/validators.js +238 -0
  134. package/v1/serializer/v3/validators/validators.js.map +1 -0
  135. package/v1/types/bitcoinjs.d.ts +20 -0
  136. package/v1/types/bitcoinjs.js +3 -0
  137. package/v1/types/bitcoinjs.js.map +1 -0
  138. package/v1/types/crypto.d.ts +2 -0
  139. package/v1/types/crypto.js +3 -0
  140. package/v1/types/crypto.js.map +1 -0
  141. package/v1/types/indexer.d.ts +81 -0
  142. package/v1/types/indexer.js +3 -0
  143. package/v1/types/indexer.js.map +1 -0
  144. package/v1/types/key.d.ts +6 -0
  145. package/v1/types/key.js +3 -0
  146. package/v1/types/key.js.map +1 -0
  147. package/v1/types/protocol.d.ts +17 -0
  148. package/v1/types/protocol.js +3 -0
  149. package/v1/types/protocol.js.map +1 -0
  150. package/v1/types/transaction.d.ts +49 -0
  151. package/v1/types/transaction.js +3 -0
  152. package/v1/types/transaction.js.map +1 -0
  153. package/v1/utils/common.d.ts +2 -0
  154. package/v1/utils/common.js +28 -0
  155. package/v1/utils/common.js.map +1 -0
  156. package/v1/utils/key.d.ts +34 -0
  157. package/v1/utils/key.js +190 -0
  158. package/v1/utils/key.js.map +1 -0
  159. package/v1/utils/network.d.ts +2 -0
  160. package/v1/utils/network.js +22 -0
  161. package/v1/utils/network.js.map +1 -0
  162. package/v1/utils/protocol.d.ts +10 -0
  163. package/v1/utils/protocol.js +33 -0
  164. package/v1/utils/protocol.js.map +1 -0
  165. package/v1/utils/signature.d.ts +2 -0
  166. package/v1/utils/signature.js +34 -0
  167. package/v1/utils/signature.js.map +1 -0
@@ -0,0 +1,548 @@
1
+ "use strict";
2
+ var __extends = (this && this.__extends) || (function () {
3
+ var extendStatics = function (d, b) {
4
+ extendStatics = Object.setPrototypeOf ||
5
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7
+ return extendStatics(d, b);
8
+ };
9
+ return function (d, b) {
10
+ if (typeof b !== "function" && b !== null)
11
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
12
+ extendStatics(d, b);
13
+ function __() { this.constructor = d; }
14
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
15
+ };
16
+ })();
17
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
18
+ if (k2 === undefined) k2 = k;
19
+ var desc = Object.getOwnPropertyDescriptor(m, k);
20
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
21
+ desc = { enumerable: true, get: function() { return m[k]; } };
22
+ }
23
+ Object.defineProperty(o, k2, desc);
24
+ }) : (function(o, m, k, k2) {
25
+ if (k2 === undefined) k2 = k;
26
+ o[k2] = m[k];
27
+ }));
28
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
29
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
30
+ }) : function(o, v) {
31
+ o["default"] = v;
32
+ });
33
+ var __importStar = (this && this.__importStar) || function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
41
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
42
+ return new (P || (P = Promise))(function (resolve, reject) {
43
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
44
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
45
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
46
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
47
+ });
48
+ };
49
+ var __generator = (this && this.__generator) || function (thisArg, body) {
50
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
51
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
52
+ function verb(n) { return function (v) { return step([n, v]); }; }
53
+ function step(op) {
54
+ if (f) throw new TypeError("Generator is already executing.");
55
+ while (_) try {
56
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
57
+ if (y = 0, t) op = [op[0] & 2, t.value];
58
+ switch (op[0]) {
59
+ case 0: case 1: t = op; break;
60
+ case 4: _.label++; return { value: op[1], done: false };
61
+ case 5: _.label++; y = op[1]; op = [0]; continue;
62
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
63
+ default:
64
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
65
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
66
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
67
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
68
+ if (t[2]) _.ops.pop();
69
+ _.trys.pop(); continue;
70
+ }
71
+ op = body.call(thisArg, _);
72
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
73
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
74
+ }
75
+ };
76
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
77
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
78
+ if (ar || !(i in from)) {
79
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
80
+ ar[i] = from[i];
81
+ }
82
+ }
83
+ return to.concat(ar || Array.prototype.slice.call(from));
84
+ };
85
+ var __importDefault = (this && this.__importDefault) || function (mod) {
86
+ return (mod && mod.__esModule) ? mod : { "default": mod };
87
+ };
88
+ Object.defineProperty(exports, "__esModule", { value: true });
89
+ exports.BitcoinSegwitProtocol = void 0;
90
+ var index_1 = __importDefault(require("@wallfree-dev/coinlib-core/dependencies/src/axios-0.19.0/index"));
91
+ var bignumber_1 = __importDefault(require("@wallfree-dev/coinlib-core/dependencies/src/bignumber.js-9.0.0/bignumber"));
92
+ var index_2 = require("@wallfree-dev/coinlib-core/dependencies/src/bip39-2.5.0/index");
93
+ var bs58check = __importStar(require("@wallfree-dev/coinlib-core/dependencies/src/bs58check-2.1.2"));
94
+ var ProtocolSymbols_1 = require("@wallfree-dev/coinlib-core/utils/ProtocolSymbols");
95
+ var bitcoinJS = __importStar(require("bitcoinjs-lib"));
96
+ var BitcoinProtocol_1 = require("./BitcoinProtocol");
97
+ var BitcoinProtocolOptions_1 = require("./BitcoinProtocolOptions");
98
+ var BitcoinSegwitAddress_1 = require("./BitcoinSegwitAddress");
99
+ var bip32_1 = require("bip32");
100
+ var secp256k1_1 = __importDefault(require("@bitcoinerlab/secp256k1"));
101
+ var DUST_AMOUNT = 50;
102
+ // This function handles arrays and objects
103
+ function eachRecursive(obj) {
104
+ for (var k in obj) {
105
+ if (Buffer.isBuffer(obj[k])) {
106
+ obj[k] = obj[k].toString('hex');
107
+ }
108
+ if (typeof obj[k] === 'object' && obj[k] !== null) {
109
+ obj[k] = eachRecursive(obj[k]);
110
+ }
111
+ }
112
+ return obj;
113
+ }
114
+ // https://github.com/satoshilabs/slips/blob/master/slip-0132.md
115
+ var ExtendedPublicKey = /** @class */ (function () {
116
+ function ExtendedPublicKey(extendedPublicKey) {
117
+ this.rawKey = bs58check.decode(extendedPublicKey).slice(4);
118
+ }
119
+ ExtendedPublicKey.prototype.toXpub = function () {
120
+ return this.addPrefix('0488b21e');
121
+ };
122
+ ExtendedPublicKey.prototype.toYPub = function () {
123
+ return this.addPrefix('049d7cb2');
124
+ };
125
+ ExtendedPublicKey.prototype.toZPub = function () {
126
+ return this.addPrefix('04b24746');
127
+ };
128
+ ExtendedPublicKey.prototype.addPrefix = function (prefix) {
129
+ var data = Buffer.concat([Buffer.from(prefix, 'hex'), this.rawKey]);
130
+ return bs58check.encode(data);
131
+ };
132
+ return ExtendedPublicKey;
133
+ }());
134
+ var BitcoinSegwitProtocol = /** @class */ (function (_super) {
135
+ __extends(BitcoinSegwitProtocol, _super);
136
+ function BitcoinSegwitProtocol(options) {
137
+ if (options === void 0) { options = new BitcoinProtocolOptions_1.BitcoinProtocolOptions(); }
138
+ var _this = _super.call(this, options) || this;
139
+ _this.name = 'Bitcoin (Segwit)';
140
+ _this.identifier = ProtocolSymbols_1.MainProtocolSymbols.BTC_SEGWIT;
141
+ _this.standardDerivationPath = "m/84'/0'/0'";
142
+ _this.addressPlaceholder = 'bc1...';
143
+ _this.bip32 = (0, bip32_1.BIP32Factory)(secp256k1_1.default);
144
+ return _this;
145
+ }
146
+ BitcoinSegwitProtocol.prototype.getPublicKeyFromHexSecret = function (secret, derivationPath) {
147
+ return __awaiter(this, void 0, void 0, function () {
148
+ var bitcoinNode, neutered, zpub;
149
+ return __generator(this, function (_a) {
150
+ bitcoinNode = this.bip32.fromSeed(Buffer.from(secret, 'hex'), this.options.network.extras.network);
151
+ neutered = bitcoinNode.derivePath(derivationPath).neutered();
152
+ zpub = new ExtendedPublicKey(neutered.toBase58()).toZPub();
153
+ return [2 /*return*/, zpub];
154
+ });
155
+ });
156
+ };
157
+ BitcoinSegwitProtocol.prototype.getPrivateKeyFromHexSecret = function (secret, derivationPath) {
158
+ return __awaiter(this, void 0, void 0, function () {
159
+ var bitcoinNode, privateKey;
160
+ return __generator(this, function (_a) {
161
+ if (!derivationPath) {
162
+ return [2 /*return*/, this.bip32.fromSeed(Buffer.from(secret, 'hex'), this.options.network.extras.network)];
163
+ }
164
+ bitcoinNode = this.bip32.fromSeed(Buffer.from(secret, 'hex'), this.options.network.extras.network);
165
+ privateKey = bitcoinNode.derivePath(derivationPath).privateKey;
166
+ if (!privateKey) {
167
+ throw new Error('No privatekey!');
168
+ }
169
+ return [2 /*return*/, Buffer.from(privateKey).toString('hex')];
170
+ });
171
+ });
172
+ };
173
+ BitcoinSegwitProtocol.prototype.getExtendedPrivateKeyFromMnemonic = function (mnemonic, derivationPath, password) {
174
+ return __awaiter(this, void 0, void 0, function () {
175
+ var secret;
176
+ return __generator(this, function (_a) {
177
+ secret = (0, index_2.mnemonicToSeed)(mnemonic, password);
178
+ return [2 /*return*/, this.getExtendedPrivateKeyFromHexSecret(secret, derivationPath)];
179
+ });
180
+ });
181
+ };
182
+ BitcoinSegwitProtocol.prototype.getExtendedPrivateKeyFromHexSecret = function (secret, derivationPath) {
183
+ return __awaiter(this, void 0, void 0, function () {
184
+ var bitcoinNode;
185
+ return __generator(this, function (_a) {
186
+ bitcoinNode = this.bip32.fromSeed(Buffer.from(secret, 'hex'), this.options.network.extras.network);
187
+ return [2 /*return*/, bitcoinNode.derivePath(derivationPath).toBase58()];
188
+ });
189
+ });
190
+ };
191
+ BitcoinSegwitProtocol.prototype.getAddressFromPublicKey = function (publicKey, cursor) {
192
+ return __awaiter(this, void 0, void 0, function () {
193
+ var address;
194
+ return __generator(this, function (_a) {
195
+ address = BitcoinSegwitAddress_1.BitcoinSegwitAddress.fromAddress(this.bip32.fromBase58(publicKey, this.options.network.extras.network).toBase58());
196
+ return [2 /*return*/, {
197
+ address: address.asString(),
198
+ cursor: { hasNext: false }
199
+ }];
200
+ });
201
+ });
202
+ };
203
+ BitcoinSegwitProtocol.prototype.getAddressesFromPublicKey = function (publicKey, cursor) {
204
+ return __awaiter(this, void 0, void 0, function () {
205
+ return __generator(this, function (_a) {
206
+ switch (_a.label) {
207
+ case 0: return [4 /*yield*/, this.getAddressFromPublicKey(publicKey, cursor)];
208
+ case 1: return [2 /*return*/, [_a.sent()]];
209
+ }
210
+ });
211
+ });
212
+ };
213
+ BitcoinSegwitProtocol.prototype.getAddressFromExtendedPublicKey = function (extendedPublicKey, visibilityDerivationIndex, addressDerivationIndex) {
214
+ return __awaiter(this, void 0, void 0, function () {
215
+ var xpub, keyPair, obj, addressRaw, address;
216
+ return __generator(this, function (_a) {
217
+ xpub = new ExtendedPublicKey(extendedPublicKey).toXpub();
218
+ keyPair = this.bip32
219
+ .fromBase58(xpub, this.options.network.extras.network)
220
+ .derive(visibilityDerivationIndex)
221
+ .derive(addressDerivationIndex);
222
+ obj = bitcoinJS.payments.p2wpkh({ pubkey: Buffer.from(keyPair.publicKey) });
223
+ addressRaw = obj.address;
224
+ if (!addressRaw) {
225
+ throw new Error('could not generate address');
226
+ }
227
+ address = BitcoinSegwitAddress_1.BitcoinSegwitAddress.fromAddress(addressRaw);
228
+ return [2 /*return*/, {
229
+ address: address.asString(),
230
+ cursor: { hasNext: false }
231
+ }];
232
+ });
233
+ });
234
+ };
235
+ BitcoinSegwitProtocol.prototype.getAddressesFromExtendedPublicKey = function (extendedPublicKey, visibilityDerivationIndex, addressCount, offset) {
236
+ // broadcaster knows this (both broadcaster and signer)
237
+ var node = this.bip32.fromBase58(new ExtendedPublicKey(extendedPublicKey).toXpub(), this.options.network.extras.network);
238
+ var generatorArray = Array.from(new Array(addressCount), function (x, i) { return i + offset; });
239
+ return Promise.all(generatorArray.map(function (x) {
240
+ var keyPair = node.derive(visibilityDerivationIndex).derive(x);
241
+ var addressRaw = bitcoinJS.payments.p2wpkh({ pubkey: Buffer.from(keyPair.publicKey) }).address;
242
+ if (!addressRaw) {
243
+ throw new Error('could not generate address');
244
+ }
245
+ var address = BitcoinSegwitAddress_1.BitcoinSegwitAddress.fromAddress(addressRaw);
246
+ return {
247
+ address: address.asString(),
248
+ cursor: { hasNext: false }
249
+ };
250
+ }));
251
+ };
252
+ BitcoinSegwitProtocol.prototype.getTransactionDetails = function (unsignedTx) {
253
+ var _a, _b;
254
+ return __awaiter(this, void 0, void 0, function () {
255
+ var transaction, decodedPSBT, feeCalculator, _i, _c, txIn, _d, _e, txOut, warnings, clonedPSBT, amount;
256
+ return __generator(this, function (_f) {
257
+ transaction = unsignedTx.transaction;
258
+ decodedPSBT = bitcoinJS.Psbt.fromHex(transaction.psbt);
259
+ feeCalculator = new bignumber_1.default(0);
260
+ for (_i = 0, _c = decodedPSBT.data.inputs; _i < _c.length; _i++) {
261
+ txIn = _c[_i];
262
+ feeCalculator = feeCalculator.plus(new bignumber_1.default((_b = (_a = txIn.witnessUtxo) === null || _a === void 0 ? void 0 : _a.value) !== null && _b !== void 0 ? _b : 0));
263
+ }
264
+ for (_d = 0, _e = decodedPSBT.txOutputs; _d < _e.length; _d++) {
265
+ txOut = _e[_d];
266
+ feeCalculator = feeCalculator.minus(new bignumber_1.default(txOut.value));
267
+ }
268
+ warnings = [];
269
+ clonedPSBT = decodedPSBT.clone();
270
+ eachRecursive(clonedPSBT); // All buffers to hex string
271
+ amount = (function () {
272
+ // If tx has only one output, this is the amount
273
+ if (decodedPSBT.txOutputs.length === 1) {
274
+ return new bignumber_1.default(decodedPSBT.txOutputs[0].value);
275
+ }
276
+ // If we can match one output to an exact amount that we add to the PSBT, this is our amount.
277
+ {
278
+ var unknownKeyVals = decodedPSBT.data.globalMap.unknownKeyVals;
279
+ if (unknownKeyVals) {
280
+ var amountArray = unknownKeyVals.filter(function (kv) { return kv.key.equals(Buffer.from('amount')); });
281
+ if (amountArray.length > 0) {
282
+ return new bignumber_1.default(amountArray[0].value.toString()); // Buffer to number
283
+ }
284
+ }
285
+ }
286
+ // If tx has an output and we added a derivation path in the PSBT (in the wallet, prepareTransaction), we know that it is a change address and we ignore it.
287
+ var accumulated = new bignumber_1.default(0);
288
+ var useAccumulated = false;
289
+ decodedPSBT.data.outputs.forEach(function (outputKeyValues, index) {
290
+ if (outputKeyValues.unknownKeyVals) {
291
+ var derivationPaths = outputKeyValues.unknownKeyVals
292
+ .filter(function (kv) { return kv.key.equals(Buffer.from('dp')); })
293
+ .map(function (kv) { return kv.value.toString(); });
294
+ if (derivationPaths.length > 0) {
295
+ // If one of the outputs has the derivation in the custom key/value map, we can use this to determine the amount.
296
+ useAccumulated = true;
297
+ return;
298
+ }
299
+ }
300
+ var output = decodedPSBT.txOutputs[index];
301
+ accumulated = accumulated.plus(output.value);
302
+ });
303
+ if (useAccumulated) {
304
+ return accumulated;
305
+ }
306
+ // If we cannot match anything above, we need to assume that the whole amount is being sent and the user has to check the outputs.
307
+ return decodedPSBT.txOutputs
308
+ .map(function (obj) { return new bignumber_1.default(obj.value); })
309
+ .reduce(function (accumulator, currentValue) { return accumulator.plus(currentValue); });
310
+ })();
311
+ return [2 /*return*/, [
312
+ {
313
+ from: decodedPSBT.data.inputs.map(function (obj) {
314
+ var _a, _b;
315
+ return (_b = (_a = obj.bip32Derivation) === null || _a === void 0 ? void 0 : _a.map(function (el) {
316
+ return bitcoinJS.payments.p2wpkh({
317
+ pubkey: el.pubkey,
318
+ network: bitcoinJS.networks.bitcoin
319
+ }).address;
320
+ }).join(' ')) !== null && _b !== void 0 ? _b : 'INVALID';
321
+ }),
322
+ to: decodedPSBT.txOutputs.map(function (obj) {
323
+ return obj.address || "Script: ".concat(obj.script.toString('hex')) || 'unknown';
324
+ }),
325
+ amount: amount.toString(10),
326
+ fee: feeCalculator.toString(10),
327
+ protocolIdentifier: this.identifier,
328
+ network: this.options.network,
329
+ isInbound: false,
330
+ transactionDetails: {
331
+ // This is some unstructured data about the PSBT. This is shown in the UI as a JSON for advanced users.
332
+ inputTx: eachRecursive(clonedPSBT.txInputs),
333
+ outputTx: eachRecursive(clonedPSBT.txOutputs),
334
+ inputData: clonedPSBT.data.inputs,
335
+ outputData: clonedPSBT.data.outputs,
336
+ PSBTVersion: clonedPSBT.version,
337
+ PSBTLocktime: clonedPSBT.locktime,
338
+ PSBTGlobalMap: clonedPSBT.data.globalMap,
339
+ rawPSBT: unsignedTx.transaction
340
+ },
341
+ warnings: warnings
342
+ }
343
+ ]];
344
+ });
345
+ });
346
+ };
347
+ BitcoinSegwitProtocol.prototype.getTransactionDetailsFromSigned = function (signedTx) {
348
+ return __awaiter(this, void 0, void 0, function () {
349
+ return __generator(this, function (_a) {
350
+ return [2 /*return*/, this.getTransactionDetails({ publicKey: '', transaction: { psbt: signedTx.transaction } })];
351
+ });
352
+ });
353
+ };
354
+ BitcoinSegwitProtocol.prototype.prepareTransactionFromExtendedPublicKey = function (extendedPublicKey, offset, recipients, values, fee, extras) {
355
+ return __awaiter(this, void 0, void 0, function () {
356
+ var wrappedValues, wrappedFee, transaction, utxos, totalRequiredBalance, valueAccumulator, getPathIndexes, _i, utxos_1, utxo, indexes, derivedAddress, i, lastUsedInternalAddress, changeValue, changeAddressIndex, derivedAddress, psbt, keyPair, replaceByFee, tx;
357
+ var _this = this;
358
+ return __generator(this, function (_a) {
359
+ switch (_a.label) {
360
+ case 0:
361
+ if (!extras.masterFingerprint) {
362
+ throw new Error('MasterFingerprint not set!');
363
+ }
364
+ wrappedValues = values.map(function (value) { return new bignumber_1.default(value); });
365
+ wrappedFee = new bignumber_1.default(fee);
366
+ transaction = {
367
+ ins: [],
368
+ outs: []
369
+ };
370
+ if (recipients.length !== wrappedValues.length) {
371
+ throw new Error('recipients do not match values');
372
+ }
373
+ return [4 /*yield*/, index_1.default.get("".concat(this.options.network.extras.indexerApi, "/api/v2/utxo/").concat(extendedPublicKey, "?confirmed=true"), {
374
+ responseType: 'json'
375
+ })];
376
+ case 1:
377
+ utxos = (_a.sent()).data;
378
+ if (utxos.length <= 0) {
379
+ throw new Error('not enough balance'); // no transactions found on those addresses, probably won't find anything in the next ones
380
+ }
381
+ totalRequiredBalance = wrappedValues
382
+ .reduce(function (accumulator, currentValue) { return accumulator.plus(currentValue); })
383
+ .plus(wrappedFee);
384
+ valueAccumulator = new bignumber_1.default(0);
385
+ getPathIndexes = function (path) {
386
+ var result = path
387
+ .split('/')
388
+ .slice(-2)
389
+ .map(function (item) { return parseInt(item); })
390
+ .filter(function (item) { return !isNaN(item); });
391
+ if (result.length !== 2) {
392
+ throw new Error('Unexpected path format');
393
+ }
394
+ return [result[0], result[1]];
395
+ };
396
+ _i = 0, utxos_1 = utxos;
397
+ _a.label = 2;
398
+ case 2:
399
+ if (!(_i < utxos_1.length)) return [3 /*break*/, 5];
400
+ utxo = utxos_1[_i];
401
+ valueAccumulator = valueAccumulator.plus(utxo.value);
402
+ indexes = getPathIndexes(utxo.path);
403
+ return [4 /*yield*/, this.getAddressFromExtendedPublicKey(extendedPublicKey, indexes[0], indexes[1])];
404
+ case 3:
405
+ derivedAddress = (_a.sent()).address;
406
+ if (derivedAddress === utxo.address) {
407
+ transaction.ins.push({
408
+ txId: utxo.txid,
409
+ value: new bignumber_1.default(utxo.value).toString(10),
410
+ vout: utxo.vout,
411
+ address: utxo.address,
412
+ derivationPath: utxo.path
413
+ });
414
+ }
415
+ else {
416
+ throw new Error('Invalid address returned from API');
417
+ }
418
+ if (valueAccumulator.isGreaterThanOrEqualTo(totalRequiredBalance)) {
419
+ return [3 /*break*/, 5];
420
+ }
421
+ _a.label = 4;
422
+ case 4:
423
+ _i++;
424
+ return [3 /*break*/, 2];
425
+ case 5:
426
+ if (valueAccumulator.isLessThan(totalRequiredBalance)) {
427
+ throw new Error('not enough balance 2');
428
+ }
429
+ for (i = 0; i < recipients.length; i++) {
430
+ transaction.outs.push({
431
+ recipient: recipients[i],
432
+ isChange: false,
433
+ value: wrappedValues[i].toString(10)
434
+ });
435
+ valueAccumulator = valueAccumulator.minus(wrappedValues[i]);
436
+ }
437
+ lastUsedInternalAddress = Math.max.apply(Math, __spreadArray([-1], utxos
438
+ .map(function (utxo) { return getPathIndexes(utxo.path); })
439
+ .filter(function (indexes) { return indexes[0] === 1; })
440
+ .map(function (indexes) { return indexes[1]; }), false));
441
+ changeValue = valueAccumulator.minus(wrappedFee);
442
+ if (!changeValue.isGreaterThan(new bignumber_1.default(DUST_AMOUNT))) return [3 /*break*/, 7];
443
+ changeAddressIndex = lastUsedInternalAddress + 1;
444
+ return [4 /*yield*/, this.getAddressFromExtendedPublicKey(extendedPublicKey, 1, changeAddressIndex)];
445
+ case 6:
446
+ derivedAddress = (_a.sent()).address;
447
+ transaction.outs.push({
448
+ recipient: derivedAddress,
449
+ isChange: true,
450
+ value: changeValue.toString(10),
451
+ derivationPath: "1/".concat(changeAddressIndex)
452
+ });
453
+ _a.label = 7;
454
+ case 7:
455
+ psbt = new bitcoinJS.Psbt();
456
+ // We add the total amount of the transaction to the global map. This can be used to show the info in the "from-to" component after the transaction was signed.
457
+ psbt.addUnknownKeyValToGlobal({
458
+ key: Buffer.from('amount'),
459
+ value: Buffer.from(wrappedValues.reduce(function (accumulator, currentValue) { return accumulator.plus(currentValue); }).toString())
460
+ });
461
+ keyPair = this.bip32.fromBase58(new ExtendedPublicKey(extendedPublicKey).toXpub());
462
+ replaceByFee = extras.replaceByFee ? true : false;
463
+ transaction.ins.forEach(function (tx) {
464
+ var indexes = getPathIndexes(tx.derivationPath);
465
+ var childNode = keyPair.derivePath(indexes.join('/'));
466
+ var p2wpkh = bitcoinJS.payments.p2wpkh({ pubkey: Buffer.from(childNode.publicKey), network: _this.options.network.extras.network });
467
+ var p2shOutput = p2wpkh.output;
468
+ if (!p2shOutput) {
469
+ throw new Error('no p2shOutput');
470
+ }
471
+ psbt.addInput({
472
+ hash: tx.txId,
473
+ index: tx.vout,
474
+ sequence: replaceByFee ? 0xfffffffd : undefined,
475
+ witnessUtxo: {
476
+ script: p2shOutput,
477
+ value: parseInt(tx.value)
478
+ },
479
+ bip32Derivation: [
480
+ {
481
+ masterFingerprint: Buffer.from(extras.masterFingerprint, 'hex'),
482
+ pubkey: Buffer.from(childNode.publicKey),
483
+ path: tx.derivationPath
484
+ }
485
+ ]
486
+ });
487
+ });
488
+ transaction.outs.forEach(function (out, index) {
489
+ psbt.addOutput({ address: out.recipient, value: parseInt(out.value) });
490
+ if (out.derivationPath) {
491
+ // We add the derivation path of our change address to the key value map of the PSBT. This will allow us to later "filter" out this address when displaying the transaction info.
492
+ psbt.addUnknownKeyValToOutput(index, {
493
+ key: Buffer.from('dp'),
494
+ value: Buffer.from(out.derivationPath, 'utf8')
495
+ });
496
+ }
497
+ });
498
+ tx = {
499
+ psbt: psbt.toHex()
500
+ };
501
+ return [2 /*return*/, tx];
502
+ }
503
+ });
504
+ });
505
+ };
506
+ BitcoinSegwitProtocol.prototype.signWithExtendedPrivateKey = function (extendedPrivateKey, transaction /* RawBitcoinSegwitTransaction */) {
507
+ return __awaiter(this, void 0, void 0, function () {
508
+ var rawBitcoinSegwitTx, bip32PK, decodedPSBT;
509
+ return __generator(this, function (_a) {
510
+ rawBitcoinSegwitTx = transaction;
511
+ bip32PK = this.bip32.fromBase58(extendedPrivateKey);
512
+ decodedPSBT = bitcoinJS.Psbt.fromHex(rawBitcoinSegwitTx.psbt);
513
+ decodedPSBT.data.inputs.forEach(function (input, index) {
514
+ var _a;
515
+ (_a = input.bip32Derivation) === null || _a === void 0 ? void 0 : _a.forEach(function (deriv) {
516
+ try {
517
+ // This uses the same logic to find child key as the "findWalletByFingerprintDerivationPathAndProtocolIdentifier" method in the Vault
518
+ var cutoffFrom = deriv.path.lastIndexOf("'") || deriv.path.lastIndexOf('h');
519
+ var childPath = deriv.path.substr(cutoffFrom + 2);
520
+ var childNode_1 = bip32PK.derivePath(childPath);
521
+ decodedPSBT.signInput(index, {
522
+ publicKey: Buffer.from(childNode_1.publicKey),
523
+ sign: function (hash, lowR) { return Buffer.from(childNode_1.sign(hash, lowR)); }
524
+ });
525
+ console.log("Signed input ".concat(index, " with path ").concat(deriv.path));
526
+ }
527
+ catch (e) {
528
+ console.log("Error signing input ".concat(index), e);
529
+ }
530
+ });
531
+ });
532
+ return [2 /*return*/, decodedPSBT.toHex()];
533
+ });
534
+ });
535
+ };
536
+ BitcoinSegwitProtocol.prototype.broadcastTransaction = function (rawTransaction) {
537
+ return __awaiter(this, void 0, void 0, function () {
538
+ var hexTransaction;
539
+ return __generator(this, function (_a) {
540
+ hexTransaction = bitcoinJS.Psbt.fromHex(rawTransaction).finalizeAllInputs().extractTransaction().toHex();
541
+ return [2 /*return*/, _super.prototype.broadcastTransaction.call(this, hexTransaction)];
542
+ });
543
+ });
544
+ };
545
+ return BitcoinSegwitProtocol;
546
+ }(BitcoinProtocol_1.BitcoinProtocol));
547
+ exports.BitcoinSegwitProtocol = BitcoinSegwitProtocol;
548
+ //# sourceMappingURL=BitcoinSegwitProtocol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BitcoinSegwitProtocol.js","sourceRoot":"","sources":["../../../src/v0/protocol/BitcoinSegwitProtocol.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { BitcoinProtocol } from './BitcoinProtocol';
2
+ export declare class BitcoinTestnetProtocol extends BitcoinProtocol {
3
+ name: string;
4
+ standardDerivationPath: string;
5
+ addressValidationPattern: string;
6
+ constructor();
7
+ }
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ var __extends = (this && this.__extends) || (function () {
3
+ var extendStatics = function (d, b) {
4
+ extendStatics = Object.setPrototypeOf ||
5
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7
+ return extendStatics(d, b);
8
+ };
9
+ return function (d, b) {
10
+ if (typeof b !== "function" && b !== null)
11
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
12
+ extendStatics(d, b);
13
+ function __() { this.constructor = d; }
14
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
15
+ };
16
+ })();
17
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
18
+ if (k2 === undefined) k2 = k;
19
+ var desc = Object.getOwnPropertyDescriptor(m, k);
20
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
21
+ desc = { enumerable: true, get: function() { return m[k]; } };
22
+ }
23
+ Object.defineProperty(o, k2, desc);
24
+ }) : (function(o, m, k, k2) {
25
+ if (k2 === undefined) k2 = k;
26
+ o[k2] = m[k];
27
+ }));
28
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
29
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
30
+ }) : function(o, v) {
31
+ o["default"] = v;
32
+ });
33
+ var __importStar = (this && this.__importStar) || function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ Object.defineProperty(exports, "__esModule", { value: true });
41
+ exports.BitcoinTestnetProtocol = void 0;
42
+ var bitcoinJS = __importStar(require("@wallfree-dev/coinlib-core/dependencies/src/bitgo-utxo-lib-5d91049fd7a988382df81c8260e244ee56d57aac/src/index"));
43
+ var ProtocolNetwork_1 = require("@wallfree-dev/coinlib-core/utils/ProtocolNetwork");
44
+ var BitcoinProtocol_1 = require("./BitcoinProtocol");
45
+ var BitcoinProtocolOptions_1 = require("./BitcoinProtocolOptions");
46
+ var BitcoinTestnetProtocol = /** @class */ (function (_super) {
47
+ __extends(BitcoinTestnetProtocol, _super);
48
+ function BitcoinTestnetProtocol() {
49
+ var _this = _super.call(this, new BitcoinProtocolOptions_1.BitcoinProtocolOptions(new BitcoinProtocolOptions_1.BitcoinProtocolNetwork('Testnet', ProtocolNetwork_1.NetworkType.TESTNET, '', new BitcoinProtocolOptions_1.BlockcypherBlockExplorer('https://live.blockcypher.com/btc-testnet'), new BitcoinProtocolOptions_1.BitcoinProtocolNetworkExtras('https://bitcoin.prod.gke.papers.tech', bitcoinJS.networks.testnet)), new BitcoinProtocolOptions_1.BitcoinProtocolConfig())) || this;
50
+ _this.name = 'Bitcoin Testnet';
51
+ _this.standardDerivationPath = "m/44'/1'/0'";
52
+ _this.addressValidationPattern = '^..[13][a-km-zA-HJ-NP-Z1-9]{25,34}$';
53
+ return _this;
54
+ }
55
+ return BitcoinTestnetProtocol;
56
+ }(BitcoinProtocol_1.BitcoinProtocol));
57
+ exports.BitcoinTestnetProtocol = BitcoinTestnetProtocol;
58
+ //# sourceMappingURL=BitcoinTestnetProtocol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BitcoinTestnetProtocol.js","sourceRoot":"","sources":["../../../src/v0/protocol/BitcoinTestnetProtocol.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uJAA0I;AAC1I,oFAA8E;AAE9E,qDAAmD;AACnD,mEAMiC;AAEjC;IAA4C,0CAAe;IAMzD;QAAA,YACE,kBACE,IAAI,+CAAsB,CACxB,IAAI,+CAAsB,CACxB,SAAS,EACT,6BAAW,CAAC,OAAO,EACnB,EAAE,EACF,IAAI,iDAAwB,CAAC,0CAA0C,CAAC,EACxE,IAAI,qDAA4B,CAAC,sCAAsC,EAAE,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CACrG,EACD,IAAI,8CAAqB,EAAE,CAC5B,CACF,SACF;QAlBM,UAAI,GAAG,iBAAiB,CAAA;QAExB,4BAAsB,GAAG,aAAa,CAAA;QACtC,8BAAwB,GAAG,qCAAqC,CAAA;;IAevE,CAAC;IACH,6BAAC;AAAD,CAAC,AApBD,CAA4C,iCAAe,GAoB1D;AApBY,wDAAsB"}