starknet 4.12.0 → 4.13.0

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 (224) hide show
  1. package/.eslintrc +1 -0
  2. package/CHANGELOG.md +14 -0
  3. package/__tests__/account.test.ts +0 -2
  4. package/dist/index.d.ts +2683 -24
  5. package/dist/index.global.js +22994 -0
  6. package/dist/index.global.js.map +1 -0
  7. package/dist/index.js +4713 -53
  8. package/dist/index.js.map +1 -0
  9. package/dist/index.mjs +4655 -0
  10. package/dist/index.mjs.map +1 -0
  11. package/index.d.ts +2683 -24
  12. package/index.global.js +22994 -0
  13. package/index.global.js.map +1 -0
  14. package/index.js +4713 -53
  15. package/index.js.map +1 -0
  16. package/index.mjs +4655 -0
  17. package/index.mjs.map +1 -0
  18. package/package.json +8 -2
  19. package/src/account/default.ts +43 -8
  20. package/src/account/interface.ts +25 -2
  21. package/src/constants.ts +0 -1
  22. package/src/provider/default.ts +3 -0
  23. package/src/provider/interface.ts +2 -0
  24. package/src/provider/rpc.ts +4 -4
  25. package/src/provider/sequencer.ts +4 -1
  26. package/src/types/lib.ts +1 -1
  27. package/src/types/provider.ts +5 -0
  28. package/src/utils/ellipticCurve.ts +3 -1
  29. package/src/utils/fetchPonyfill.ts +3 -2
  30. package/src/utils/hash.ts +3 -2
  31. package/src/utils/number.ts +2 -2
  32. package/tsup.config.ts +10 -0
  33. package/account/default.d.ts +0 -30
  34. package/account/default.js +0 -526
  35. package/account/index.d.ts +0 -2
  36. package/account/index.js +0 -18
  37. package/account/interface.d.ts +0 -161
  38. package/account/interface.js +0 -27
  39. package/constants.d.ts +0 -36
  40. package/constants.js +0 -2067
  41. package/contract/contractFactory.d.ts +0 -31
  42. package/contract/contractFactory.js +0 -102
  43. package/contract/default.d.ts +0 -108
  44. package/contract/default.js +0 -640
  45. package/contract/index.d.ts +0 -3
  46. package/contract/index.js +0 -19
  47. package/contract/interface.d.ts +0 -80
  48. package/contract/interface.js +0 -9
  49. package/dist/account/default.d.ts +0 -30
  50. package/dist/account/default.js +0 -526
  51. package/dist/account/index.d.ts +0 -2
  52. package/dist/account/index.js +0 -18
  53. package/dist/account/interface.d.ts +0 -161
  54. package/dist/account/interface.js +0 -27
  55. package/dist/constants.d.ts +0 -36
  56. package/dist/constants.js +0 -2067
  57. package/dist/contract/contractFactory.d.ts +0 -31
  58. package/dist/contract/contractFactory.js +0 -102
  59. package/dist/contract/default.d.ts +0 -108
  60. package/dist/contract/default.js +0 -640
  61. package/dist/contract/index.d.ts +0 -3
  62. package/dist/contract/index.js +0 -19
  63. package/dist/contract/interface.d.ts +0 -80
  64. package/dist/contract/interface.js +0 -9
  65. package/dist/provider/default.d.ts +0 -37
  66. package/dist/provider/default.js +0 -207
  67. package/dist/provider/errors.d.ts +0 -9
  68. package/dist/provider/errors.js +0 -40
  69. package/dist/provider/index.d.ts +0 -7
  70. package/dist/provider/index.js +0 -24
  71. package/dist/provider/interface.d.ts +0 -203
  72. package/dist/provider/interface.js +0 -9
  73. package/dist/provider/rpc.d.ts +0 -86
  74. package/dist/provider/rpc.js +0 -605
  75. package/dist/provider/sequencer.d.ts +0 -79
  76. package/dist/provider/sequencer.js +0 -575
  77. package/dist/provider/utils.d.ts +0 -30
  78. package/dist/provider/utils.js +0 -84
  79. package/dist/signer/default.d.ts +0 -13
  80. package/dist/signer/default.js +0 -102
  81. package/dist/signer/index.d.ts +0 -2
  82. package/dist/signer/index.js +0 -18
  83. package/dist/signer/interface.d.ts +0 -60
  84. package/dist/signer/interface.js +0 -9
  85. package/dist/types/account.d.ts +0 -11
  86. package/dist/types/account.js +0 -2
  87. package/dist/types/api/index.d.ts +0 -10
  88. package/dist/types/api/index.js +0 -18
  89. package/dist/types/api/openrpc.d.ts +0 -572
  90. package/dist/types/api/openrpc.js +0 -45
  91. package/dist/types/api/rpc.d.ts +0 -43
  92. package/dist/types/api/rpc.js +0 -2
  93. package/dist/types/api/sequencer.d.ts +0 -320
  94. package/dist/types/api/sequencer.js +0 -2
  95. package/dist/types/contract.d.ts +0 -5
  96. package/dist/types/contract.js +0 -2
  97. package/dist/types/index.d.ts +0 -7
  98. package/dist/types/index.js +0 -35
  99. package/dist/types/lib.d.ts +0 -120
  100. package/dist/types/lib.js +0 -8
  101. package/dist/types/provider.d.ts +0 -99
  102. package/dist/types/provider.js +0 -2
  103. package/dist/types/signer.d.ts +0 -19
  104. package/dist/types/signer.js +0 -2
  105. package/dist/utils/address.d.ts +0 -5
  106. package/dist/utils/address.js +0 -41
  107. package/dist/utils/ellipticCurve.d.ts +0 -29
  108. package/dist/utils/ellipticCurve.js +0 -132
  109. package/dist/utils/encode.d.ts +0 -15
  110. package/dist/utils/encode.js +0 -96
  111. package/dist/utils/fetchPonyfill.d.ts +0 -2
  112. package/dist/utils/fetchPonyfill.js +0 -6
  113. package/dist/utils/hash.d.ts +0 -37
  114. package/dist/utils/hash.js +0 -162
  115. package/dist/utils/json.d.ts +0 -16
  116. package/dist/utils/json.js +0 -19
  117. package/dist/utils/merkle.d.ts +0 -10
  118. package/dist/utils/merkle.js +0 -89
  119. package/dist/utils/number.d.ts +0 -16
  120. package/dist/utils/number.js +0 -112
  121. package/dist/utils/provider.d.ts +0 -4
  122. package/dist/utils/provider.js +0 -38
  123. package/dist/utils/responseParser/index.d.ts +0 -11
  124. package/dist/utils/responseParser/index.js +0 -9
  125. package/dist/utils/responseParser/rpc.d.ts +0 -20
  126. package/dist/utils/responseParser/rpc.js +0 -44
  127. package/dist/utils/responseParser/sequencer.d.ts +0 -17
  128. package/dist/utils/responseParser/sequencer.js +0 -99
  129. package/dist/utils/shortString.d.ts +0 -4
  130. package/dist/utils/shortString.js +0 -26
  131. package/dist/utils/stark.d.ts +0 -16
  132. package/dist/utils/stark.js +0 -91
  133. package/dist/utils/transaction.d.ts +0 -20
  134. package/dist/utils/transaction.js +0 -79
  135. package/dist/utils/typedData/index.d.ts +0 -72
  136. package/dist/utils/typedData/index.js +0 -239
  137. package/dist/utils/typedData/types.d.ts +0 -32
  138. package/dist/utils/typedData/types.js +0 -2
  139. package/dist/utils/typedData/utils.d.ts +0 -8
  140. package/dist/utils/typedData/utils.js +0 -16
  141. package/dist/utils/uint256.d.ts +0 -11
  142. package/dist/utils/uint256.js +0 -28
  143. package/dist/utils/url.d.ts +0 -7
  144. package/dist/utils/url.js +0 -49
  145. package/provider/default.d.ts +0 -37
  146. package/provider/default.js +0 -207
  147. package/provider/errors.d.ts +0 -9
  148. package/provider/errors.js +0 -40
  149. package/provider/index.d.ts +0 -7
  150. package/provider/index.js +0 -24
  151. package/provider/interface.d.ts +0 -203
  152. package/provider/interface.js +0 -9
  153. package/provider/rpc.d.ts +0 -86
  154. package/provider/rpc.js +0 -605
  155. package/provider/sequencer.d.ts +0 -79
  156. package/provider/sequencer.js +0 -575
  157. package/provider/utils.d.ts +0 -30
  158. package/provider/utils.js +0 -84
  159. package/signer/default.d.ts +0 -13
  160. package/signer/default.js +0 -102
  161. package/signer/index.d.ts +0 -2
  162. package/signer/index.js +0 -18
  163. package/signer/interface.d.ts +0 -60
  164. package/signer/interface.js +0 -9
  165. package/types/account.d.ts +0 -11
  166. package/types/account.js +0 -2
  167. package/types/api/index.d.ts +0 -10
  168. package/types/api/index.js +0 -18
  169. package/types/api/openrpc.d.ts +0 -572
  170. package/types/api/openrpc.js +0 -45
  171. package/types/api/rpc.d.ts +0 -43
  172. package/types/api/rpc.js +0 -2
  173. package/types/api/sequencer.d.ts +0 -320
  174. package/types/api/sequencer.js +0 -2
  175. package/types/contract.d.ts +0 -5
  176. package/types/contract.js +0 -2
  177. package/types/index.d.ts +0 -7
  178. package/types/index.js +0 -35
  179. package/types/lib.d.ts +0 -120
  180. package/types/lib.js +0 -8
  181. package/types/provider.d.ts +0 -99
  182. package/types/provider.js +0 -2
  183. package/types/signer.d.ts +0 -19
  184. package/types/signer.js +0 -2
  185. package/utils/address.d.ts +0 -5
  186. package/utils/address.js +0 -41
  187. package/utils/ellipticCurve.d.ts +0 -29
  188. package/utils/ellipticCurve.js +0 -132
  189. package/utils/encode.d.ts +0 -15
  190. package/utils/encode.js +0 -96
  191. package/utils/fetchPonyfill.d.ts +0 -2
  192. package/utils/fetchPonyfill.js +0 -6
  193. package/utils/hash.d.ts +0 -37
  194. package/utils/hash.js +0 -162
  195. package/utils/json.d.ts +0 -16
  196. package/utils/json.js +0 -19
  197. package/utils/merkle.d.ts +0 -10
  198. package/utils/merkle.js +0 -89
  199. package/utils/number.d.ts +0 -16
  200. package/utils/number.js +0 -112
  201. package/utils/provider.d.ts +0 -4
  202. package/utils/provider.js +0 -38
  203. package/utils/responseParser/index.d.ts +0 -11
  204. package/utils/responseParser/index.js +0 -9
  205. package/utils/responseParser/rpc.d.ts +0 -20
  206. package/utils/responseParser/rpc.js +0 -44
  207. package/utils/responseParser/sequencer.d.ts +0 -17
  208. package/utils/responseParser/sequencer.js +0 -99
  209. package/utils/shortString.d.ts +0 -4
  210. package/utils/shortString.js +0 -26
  211. package/utils/stark.d.ts +0 -16
  212. package/utils/stark.js +0 -91
  213. package/utils/transaction.d.ts +0 -20
  214. package/utils/transaction.js +0 -79
  215. package/utils/typedData/index.d.ts +0 -72
  216. package/utils/typedData/index.js +0 -239
  217. package/utils/typedData/types.d.ts +0 -32
  218. package/utils/typedData/types.js +0 -2
  219. package/utils/typedData/utils.d.ts +0 -8
  220. package/utils/typedData/utils.js +0 -16
  221. package/utils/uint256.d.ts +0 -11
  222. package/utils/uint256.js +0 -28
  223. package/utils/url.d.ts +0 -7
  224. package/utils/url.js +0 -49
package/dist/index.mjs ADDED
@@ -0,0 +1,4655 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __export = (target, all) => {
3
+ for (var name in all)
4
+ __defProp(target, name, { get: all[name], enumerable: true });
5
+ };
6
+
7
+ // src/contract/default.ts
8
+ import BN2 from "bn.js";
9
+ import assert4 from "minimalistic-assert";
10
+
11
+ // src/utils/fetchPonyfill.ts
12
+ import isomorphicFetch from "isomorphic-fetch";
13
+ var fetchPonyfill_default = typeof window !== "undefined" && window.fetch || typeof global !== "undefined" && global.fetch || isomorphicFetch;
14
+
15
+ // src/utils/hash.ts
16
+ var hash_exports = {};
17
+ __export(hash_exports, {
18
+ calculateContractAddressFromHash: () => calculateContractAddressFromHash,
19
+ calculateDeclareTransactionHash: () => calculateDeclareTransactionHash,
20
+ calculateDeployAccountTransactionHash: () => calculateDeployAccountTransactionHash,
21
+ calculateDeployTransactionHash: () => calculateDeployTransactionHash,
22
+ calculateTransactionHash: () => calculateTransactionHash,
23
+ calculateTransactionHashCommon: () => calculateTransactionHashCommon,
24
+ computeHashOnElements: () => computeHashOnElements,
25
+ feeTransactionVersion: () => feeTransactionVersion,
26
+ getSelector: () => getSelector,
27
+ getSelectorFromName: () => getSelectorFromName,
28
+ keccakBn: () => keccakBn,
29
+ pedersen: () => pedersen,
30
+ starknetKeccak: () => starknetKeccak,
31
+ transactionVersion: () => transactionVersion
32
+ });
33
+ import { keccak256 } from "ethereum-cryptography/keccak.js";
34
+ import { hexToBytes } from "ethereum-cryptography/utils.js";
35
+ import assert3 from "minimalistic-assert";
36
+
37
+ // src/constants.ts
38
+ var constants_exports = {};
39
+ __export(constants_exports, {
40
+ ALPHA: () => ALPHA,
41
+ BETA: () => BETA,
42
+ CONSTANT_POINTS: () => CONSTANT_POINTS,
43
+ EC_ORDER: () => EC_ORDER,
44
+ FIELD_GEN: () => FIELD_GEN,
45
+ FIELD_PRIME: () => FIELD_PRIME,
46
+ FIELD_SIZE: () => FIELD_SIZE,
47
+ IS_BROWSER: () => IS_BROWSER,
48
+ MASK_250: () => MASK_250,
49
+ MASK_251: () => MASK_251,
50
+ MAX_ECDSA_VAL: () => MAX_ECDSA_VAL,
51
+ ONE: () => ONE,
52
+ StarknetChainId: () => StarknetChainId,
53
+ TWO: () => TWO,
54
+ TransactionHashPrefix: () => TransactionHashPrefix,
55
+ UDC: () => UDC,
56
+ ZERO: () => ZERO
57
+ });
58
+
59
+ // src/utils/number.ts
60
+ var number_exports = {};
61
+ __export(number_exports, {
62
+ assertInRange: () => assertInRange,
63
+ bigNumberishArrayToDecimalStringArray: () => bigNumberishArrayToDecimalStringArray,
64
+ bigNumberishArrayToHexadecimalStringArray: () => bigNumberishArrayToHexadecimalStringArray,
65
+ getDecimalString: () => getDecimalString,
66
+ getHexString: () => getHexString,
67
+ getHexStringArray: () => getHexStringArray,
68
+ hexToDecimalString: () => hexToDecimalString,
69
+ isHex: () => isHex,
70
+ isStringWholeNumber: () => isStringWholeNumber,
71
+ toBN: () => toBN,
72
+ toCairoBool: () => toCairoBool,
73
+ toFelt: () => toFelt,
74
+ toHex: () => toHex,
75
+ toHexString: () => toHexString
76
+ });
77
+ import BN from "bn.js";
78
+ import assert from "minimalistic-assert";
79
+
80
+ // src/utils/encode.ts
81
+ var encode_exports = {};
82
+ __export(encode_exports, {
83
+ IS_BROWSER: () => IS_BROWSER,
84
+ addHexPrefix: () => addHexPrefix,
85
+ arrayBufferToString: () => arrayBufferToString,
86
+ btoaUniversal: () => btoaUniversal,
87
+ buf2hex: () => buf2hex,
88
+ calcByteLength: () => calcByteLength,
89
+ padLeft: () => padLeft,
90
+ removeHexPrefix: () => removeHexPrefix,
91
+ sanitizeBytes: () => sanitizeBytes,
92
+ sanitizeHex: () => sanitizeHex,
93
+ utf8ToArray: () => utf8ToArray
94
+ });
95
+ var IS_BROWSER = typeof window !== "undefined";
96
+ var STRING_ZERO = "0";
97
+ function arrayBufferToString(array) {
98
+ return new Uint8Array(array).reduce((data, byte) => data + String.fromCharCode(byte), "");
99
+ }
100
+ function btoaUniversal(b) {
101
+ return IS_BROWSER ? btoa(arrayBufferToString(b)) : Buffer.from(b).toString("base64");
102
+ }
103
+ function buf2hex(buffer) {
104
+ return [...buffer].map((x) => x.toString(16).padStart(2, "0")).join("");
105
+ }
106
+ function removeHexPrefix(hex) {
107
+ return hex.replace(/^0x/, "");
108
+ }
109
+ function addHexPrefix(hex) {
110
+ return `0x${removeHexPrefix(hex)}`;
111
+ }
112
+ function padString(str, length, left, padding = STRING_ZERO) {
113
+ const diff = length - str.length;
114
+ let result = str;
115
+ if (diff > 0) {
116
+ const pad = padding.repeat(diff);
117
+ result = left ? pad + str : str + pad;
118
+ }
119
+ return result;
120
+ }
121
+ function padLeft(str, length, padding = STRING_ZERO) {
122
+ return padString(str, length, true, padding);
123
+ }
124
+ function calcByteLength(length, byteSize = 8) {
125
+ const remainder = length % byteSize;
126
+ return remainder ? (length - remainder) / byteSize * byteSize + byteSize : length;
127
+ }
128
+ function sanitizeBytes(str, byteSize = 8, padding = STRING_ZERO) {
129
+ return padLeft(str, calcByteLength(str.length, byteSize), padding);
130
+ }
131
+ function sanitizeHex(hex) {
132
+ hex = removeHexPrefix(hex);
133
+ hex = sanitizeBytes(hex, 2);
134
+ if (hex) {
135
+ hex = addHexPrefix(hex);
136
+ }
137
+ return hex;
138
+ }
139
+ function utf8ToArray(str) {
140
+ return new TextEncoder().encode(str);
141
+ }
142
+
143
+ // src/utils/number.ts
144
+ function isHex(hex) {
145
+ return /^0x[0-9a-f]*$/i.test(hex);
146
+ }
147
+ function toBN(number, base) {
148
+ if (typeof number === "string") {
149
+ number = number.toLowerCase();
150
+ }
151
+ if (typeof number === "string" && isHex(number) && !base)
152
+ return new BN(removeHexPrefix(number), "hex");
153
+ return new BN(number, base);
154
+ }
155
+ function toHex(number) {
156
+ return addHexPrefix(number.toString("hex"));
157
+ }
158
+ function hexToDecimalString(hex) {
159
+ return toBN(`0x${hex.replace(/^0x/, "")}`).toString();
160
+ }
161
+ function toFelt(num) {
162
+ if (BN.isBN(num)) {
163
+ return num.toString();
164
+ }
165
+ return toBN(num).toString();
166
+ }
167
+ function assertInRange(input, lowerBound, upperBound, inputName = "") {
168
+ const messageSuffix = inputName === "" ? "invalid length" : `invalid ${inputName} length`;
169
+ const inputBn = toBN(input);
170
+ assert(
171
+ inputBn.gte(toBN(lowerBound)) && inputBn.lt(toBN(upperBound)),
172
+ `Message not signable, ${messageSuffix}.`
173
+ );
174
+ }
175
+ function bigNumberishArrayToDecimalStringArray(rawCalldata) {
176
+ return rawCalldata.map((x) => toBN(x).toString(10));
177
+ }
178
+ function bigNumberishArrayToHexadecimalStringArray(rawCalldata) {
179
+ return rawCalldata.map((x) => toHex(toBN(x)));
180
+ }
181
+ var isStringWholeNumber = (value) => /^\d+$/.test(value);
182
+ var toHexString = (value) => toHex(toBN(value));
183
+ function getDecimalString(value) {
184
+ if (isHex(value)) {
185
+ return hexToDecimalString(value);
186
+ }
187
+ if (isStringWholeNumber(value)) {
188
+ return value;
189
+ }
190
+ throw new Error(`${value} need to be hex-string or whole-number-string`);
191
+ }
192
+ function getHexString(value) {
193
+ if (isHex(value)) {
194
+ return value;
195
+ }
196
+ if (isStringWholeNumber(value)) {
197
+ return toHexString(value);
198
+ }
199
+ throw new Error(`${value} need to be hex-string or whole-number-string`);
200
+ }
201
+ function getHexStringArray(value) {
202
+ return value.map((el) => getHexString(el));
203
+ }
204
+ var toCairoBool = (value) => (+value).toString();
205
+
206
+ // src/constants.ts
207
+ var ZERO = toBN(0);
208
+ var ONE = toBN(1);
209
+ var TWO = toBN(2);
210
+ var MASK_250 = TWO.pow(toBN(250)).sub(ONE);
211
+ var MASK_251 = TWO.pow(toBN(251));
212
+ var StarknetChainId = /* @__PURE__ */ ((StarknetChainId3) => {
213
+ StarknetChainId3["MAINNET"] = "0x534e5f4d41494e";
214
+ StarknetChainId3["TESTNET"] = "0x534e5f474f45524c49";
215
+ StarknetChainId3["TESTNET2"] = "0x534e5f474f45524c4932";
216
+ return StarknetChainId3;
217
+ })(StarknetChainId || {});
218
+ var TransactionHashPrefix = /* @__PURE__ */ ((TransactionHashPrefix2) => {
219
+ TransactionHashPrefix2["DECLARE"] = "0x6465636c617265";
220
+ TransactionHashPrefix2["DEPLOY"] = "0x6465706c6f79";
221
+ TransactionHashPrefix2["DEPLOY_ACCOUNT"] = "0x6465706c6f795f6163636f756e74";
222
+ TransactionHashPrefix2["INVOKE"] = "0x696e766f6b65";
223
+ TransactionHashPrefix2["L1_HANDLER"] = "0x6c315f68616e646c6572";
224
+ return TransactionHashPrefix2;
225
+ })(TransactionHashPrefix || {});
226
+ var UDC = {
227
+ ADDRESS: "0x041a78e741e5af2fec34b695679bc6891742439f7afb8484ecd7766661ad02bf",
228
+ ENTRYPOINT: "deployContract"
229
+ };
230
+ var FIELD_PRIME = "800000000000011000000000000000000000000000000000000000000000001";
231
+ var FIELD_GEN = "3";
232
+ var FIELD_SIZE = 251;
233
+ var EC_ORDER = "800000000000010FFFFFFFFFFFFFFFFB781126DCAE7B2321E66A241ADC64D2F";
234
+ var ALPHA = "1";
235
+ var BETA = "6F21413EFBE40DE150E596D72F7A8C5609AD26C15C915C1F4CDFCB99CEE9E89";
236
+ var MAX_ECDSA_VAL = "800000000000000000000000000000000000000000000000000000000000000";
237
+ var CONSTANT_POINTS = [
238
+ [
239
+ "49ee3eba8c1600700ee1b87eb599f16716b0b1022947733551fde4050ca6804",
240
+ "3ca0cfe4b3bc6ddf346d49d06ea0ed34e621062c0e056c1d0405d266e10268a"
241
+ ],
242
+ [
243
+ "1ef15c18599971b7beced415a40f0c7deacfd9b0d1819e03d723d8bc943cfca",
244
+ "5668060aa49730b7be4801df46ec62de53ecd11abe43a32873000c36e8dc1f"
245
+ ],
246
+ [
247
+ "234287dcbaffe7f969c748655fca9e58fa8120b6d56eb0c1080d17957ebe47b",
248
+ "3b056f100f96fb21e889527d41f4e39940135dd7a6c94cc6ed0268ee89e5615"
249
+ ],
250
+ [
251
+ "3909690e1123c80678a7ba0fde0e8447f6f02b3f6b960034d1e93524f8b476",
252
+ "7122e9063d239d89d4e336753845b76f2b33ca0d7f0c1acd4b9fe974994cc19"
253
+ ],
254
+ [
255
+ "40fd002e38ea01a01b2702eb7c643e9decc2894cbf31765922e281939ab542c",
256
+ "109f720a79e2a41471f054ca885efd90c8cfbbec37991d1b6343991e0a3e740"
257
+ ],
258
+ [
259
+ "2f52066635c139fc2f64eb0bd5e3fd7a705f576854ec4f00aa60361fddb981b",
260
+ "6d78a24d8a5f97fc600318ce16b3c840315979c3273078ec1a285f217ee6a26"
261
+ ],
262
+ [
263
+ "6a0767a1fd60d5b9027a35af1b68e57a1c366ebcde2006cdd07af27043ef674",
264
+ "606b72c0ca0498b8c1817ed7922d550894c324f5efdfc85a19a1ae382411ca2"
265
+ ],
266
+ [
267
+ "7fa463ee2a2d6a585d5c3358918270f6c28c66df1f86803374d1edf3819cc62",
268
+ "a996edf01598832e644e1cae9a37288865ad80e2787f9bf958aceccc99afae"
269
+ ],
270
+ [
271
+ "3d4da70d1540da597dbae1651d28487604a4e66a4a1823b97e8e9639393dbec",
272
+ "45cdef70c35d3b6f0a2273a9886ccb6306d813e8204bdfd30b4efee63c8a3f9"
273
+ ],
274
+ [
275
+ "1e448fdbcd9896c6fbf5f36cb7e7fcb77a751ff2d942593cae023363cc7750e",
276
+ "30c81da0f3a8cb64468eaa491c7ae7b4842b62cb4148820da211afc4caffb3a"
277
+ ],
278
+ [
279
+ "6531acf1a7cb90a4eb27de0b7f915e387a3b0fd063ba6e1289b91f48411be26",
280
+ "31330f5daa091889981a3ea782ae997f5f171336ed0487a03f051551a2cafa2"
281
+ ],
282
+ [
283
+ "54be016394d5662d67d7e82f5e889ed2f97ccf95d911f57dd2362c4040ed4f4",
284
+ "c6cb184053f054d6a59c1bf0986d17090d25089b3fdcdaf185edc87ef113e5"
285
+ ],
286
+ [
287
+ "35b9ecd0499ca1d5d42dcbb0c6b4042b3733c64b607ca711e706e786ef2afc6",
288
+ "5624b476a5b21c3a544f0712d4817b06ad380a5a6529d323bf64da8ef862d8d"
289
+ ],
290
+ [
291
+ "4ce0378e3ee8f77ed58f2ddbd8bb7676c8a38bfb1d3694c275254bd8ca38e23",
292
+ "5a16fcbff0769c9cf2b02c31621878ec819fff4b8231bff82c6183db2746820"
293
+ ],
294
+ [
295
+ "648d5c6f98680a1b926bfeb01c00224c56fdcf751b251c4449c8a94f425cfcf",
296
+ "72c05ac793cd1620a833fbe2214d36900ebe446e095c62fcb740937f98cca8c"
297
+ ],
298
+ [
299
+ "bd09be3e4e1af8a14189977e334f097c18e4a8bf42577ef5aafa0f807bd89b",
300
+ "6e0e72ed7eb65c86cee29c411fb4761122558ee81013344ba8509c49de9f9b6"
301
+ ],
302
+ [
303
+ "35ea4e339b44ae7724419bdfbe07022253137a4afb7cbaffad341ea61249357",
304
+ "3665d676a026a174f367bb4417780e53a7803cb02d0db32eb4545c267c42f14"
305
+ ],
306
+ [
307
+ "36457bc744f42e697b825c2d1afd8f4029d696a4514710f81da52d88e178643",
308
+ "7c93715896735492a68c7969a024b3a8fd538bffc1521538107de1a5f13ce9c"
309
+ ],
310
+ [
311
+ "5b3a08ebcf9c109cc9082f70d9df2b9c11b5428ee23917b4e790c4c10f6e661",
312
+ "9d7b42ab0c20f5510df7ea5e196eec99342739077e9a168198c89da859753"
313
+ ],
314
+ [
315
+ "21883ef8580fc06e59481955d52ece3aca6e82c8c9fc58e216dcf46f96990c6",
316
+ "51a6423543e6e8a43e71da34cd90f5b520b8d33b67c4bf857573ab9e301aa4c"
317
+ ],
318
+ [
319
+ "19e86b77f9b581e81092b305c852faf53940a8f15f0a6990c414f04c0fa7ef9",
320
+ "515630e35d4398c9c79fc4ee08e1023fa47d8e03c6e7819c6d2ccef45398fa"
321
+ ],
322
+ [
323
+ "888ab8eb4c31bb2ac5b54aa320dbe1a69c96b864e8a5f54d89c1d1a6b86c24",
324
+ "730e148467f6a55ce22c5296f5380df88f38de76ef0b2de844cd3094aaaf3ea"
325
+ ],
326
+ [
327
+ "75e79ff13a894e7120dac17b7429c0c32ce7828f726c9973728c0977a5f5977",
328
+ "4960526e59c1c736561a201bc56f7d762641b39f609d273cc996f5d9197cfb8"
329
+ ],
330
+ [
331
+ "640fe009249115d7254f72ecafb3006139e4bed7e9041af51458c737282d1d5",
332
+ "3cc6c978a575246e2ce4f7ef1fcc7f63085db9ff98a1b1f3fe374087c0332c"
333
+ ],
334
+ [
335
+ "6d6fd09ccab7c26de9b3906191235deb5c34685580c488275356a05e209ca96",
336
+ "7157f81a34213dd8f91dea4f6df1bcfabc4ee091a3049eeeb3b7923d39b8645"
337
+ ],
338
+ [
339
+ "5531ca1d00f151d71da820918f74caf2985b24dca20e124721fff507b5a5876",
340
+ "518529643d3f25e47f72c322223ba60a63d6bfe78cf3f612215d9c19bf29200"
341
+ ],
342
+ [
343
+ "6192d454e4f8fe212bdfccd5b15dd5056d7622ffe456c6c67e5a7265aea49c4",
344
+ "2377a45dc630017ae863cb968ddb38333a70c7946d8684e6d7a6213f634b7bc"
345
+ ],
346
+ [
347
+ "542fb44b4ef3640a64fdb22a2560fb26668065c069cf31d1df424819a39ff18",
348
+ "5dbae9b0948e0361aea443503840341c322aa1a1366ce5390e71bf161f78f8c"
349
+ ],
350
+ [
351
+ "299ff3e3412a7eb4cb4a3051b07b1be2e7b1c4b789f39ffb52cba3d048b71de",
352
+ "1951d3175c02761b291d86b6c0a08387ad5e2a2130ccc33c852530572cb3958"
353
+ ],
354
+ [
355
+ "628ce3f5367dadc1411133e55eb25e2e3c2880d6e28754a5cb1c5d109627e73",
356
+ "ae3e9b7d50964e28bd15380400b7659b87affdef5d2586cbefcd9be7d67c0d"
357
+ ],
358
+ [
359
+ "6ea54aff064895eccf9db2283225d62044ae67621192b3346338948382f5933",
360
+ "6431507e51aadacfaf39f102a8ff387756e9b5e1bc8323d44acae55130d93db"
361
+ ],
362
+ [
363
+ "28097d50d175a6235320fe8cfe138dd9e46895d189582e472c38ad7a67d923a",
364
+ "7f9eab4133d7d09a7ff63368d6135c26262b62336eca1b5ca33f2096ce388ba"
365
+ ],
366
+ [
367
+ "619fd09cdd6ff4323973f256c2cbdcb224f7f25b8aef623af2d4a0105e62e02",
368
+ "2c95f0ae11d47eeae1bc7f1350f75f9185c5bc840382ceb38a797cae9c40308"
369
+ ],
370
+ [
371
+ "641c18982ced304512a3f2395942a38add0d6a7156229c2a7c8b8dfbe9beb96",
372
+ "6f6288c9c659b6af5ac975f4180deffe53d516399b2cc62f31732e9d4ba9837"
373
+ ],
374
+ [
375
+ "58ab546e51fe49fc5a382e4064a2bd6cfc268904412f86c26de14f28a71d0f2",
376
+ "124b7217943e7e328408e8afdfa7da00dcbc94a2bb85fd8e01fb162d2c2c0a9"
377
+ ],
378
+ [
379
+ "a82c2fdedbb26c3c762a12f7e86b0e01e65320e0a25a8399d665f6e266bf74",
380
+ "1a1de28e253f3e10f44d0111e8074f882d7f42e5900780ccbdc31da372d3fd8"
381
+ ],
382
+ [
383
+ "744c725a7455a992e3cf5bd007bc234dd4668dba285f553f38350ad94c1615b",
384
+ "7f721a87f48798bdc4a9c0eb88559e2ad7a74112fd901e70ea159e67a9c33f"
385
+ ],
386
+ [
387
+ "434df142ddaa60f7881b6348d91687de40457de7ccfb07f0304b9e820705d0c",
388
+ "7fae425e3b53f97dd1f5b20e49ed9fe24ff1efc341ba5e017ac89cf8df0cc39"
389
+ ],
390
+ [
391
+ "7a1e2b809dff46277021cbc376f79c37e1b683bbd6bca5317014f0dc0e1ae73",
392
+ "56790278a231912c334eff05281e08af1558e85516b4411ef64647c13bea431"
393
+ ],
394
+ [
395
+ "4931b7990348d41cf8907be79f45bb7991fd18f8a57868351c92fa7a34cbcd7",
396
+ "ca35091815cdf0837d396e25aad6052ad32d497a33b123256cffdc008bc50e"
397
+ ],
398
+ [
399
+ "250b815d352fd89f8210b624b147ea7d0a4f47bcac49f3ac9b777840da93ebe",
400
+ "1173f10e9691948b7da7632f328520455aadcba46e017f891e0a1d7da2bef04"
401
+ ],
402
+ [
403
+ "2223b85032fa67292f6e1f822628e6756e5c3cc08fc252ab88d63d624e4dfb2",
404
+ "55619ba96a7dcec77832fcb22cd5c21c7dcebc0280d730cba0002b67e0a8c63"
405
+ ],
406
+ [
407
+ "249b131e04de73af9820d3e22492d9ec51bdc0c4c4f34d95352fa44dd61f245",
408
+ "7576d3b5d136368ff01170a77d8286d0d1c7c40688862fb40813b4af3c6065e"
409
+ ],
410
+ [
411
+ "6777915d9b4769027eb7e04733f8a2d669c84fe06080f55e8a55674dfbf9efb",
412
+ "640d0ff384c9635e1af364760f104e058e3c86209fa9d2320aeac887b2e02d8"
413
+ ],
414
+ [
415
+ "2abe3f237681052f002414399111cf07f8421535af41251edc427a36b5b19c9",
416
+ "636ce4deaf468a503ab20ccb2f7e5bdc98551656ebf53e9c7786b11dd9090be"
417
+ ],
418
+ [
419
+ "4d5cc5414758ea1be55be779bd7da296c7e11f1564d9e8797ceea347c16f8ea",
420
+ "1a680c4c410cf5ddc74e95ff2897c193edaaecce5b2cde4e96bbae5c0054eff"
421
+ ],
422
+ [
423
+ "46c375c684b30adf4d51de81e92afee52b1a3847e177403372c82109373edca",
424
+ "1eaadc5783c90a0261306423d52009e991126b3f620e9cb6cffca41ca096f4f"
425
+ ],
426
+ [
427
+ "2ddfb71f51205888118cbabba8fd07d460a810289bfdeeb7118707e310cb152",
428
+ "1fd905d07b3933be886f2518246bdafa6f33259a174668808223cd7c28183c7"
429
+ ],
430
+ [
431
+ "386f3879960713d41fdb3b1e41bbebf26b1c0e27a9a75bb1adcc1a0d3e8547b",
432
+ "2b21498c0f34ec6f17c720334dc0f36021c2f87afbbbc8847d0bd536eb265e5"
433
+ ],
434
+ [
435
+ "407eae62c6c4de3b942195afec3f45efec71ddb5e6edee3d427631bcdbf9b90",
436
+ "436e7f2d78268ef62c4172d2ff1469028bad1f1d0f97ab007064418e61caa8f"
437
+ ],
438
+ [
439
+ "1b881175e21201d17e095e9b3966b354f47de8c1acee5177f5909e0fd72328f",
440
+ "69954b1a9b8bfccf8ec384d32924518a935758f3d3662ef754bcc88f1f6f3ec"
441
+ ],
442
+ [
443
+ "7d545a82bff003b8115be32a0c437f7c0a98f776bcf7fddb0392822844f3c5e",
444
+ "34b6e53a9565a7daa010711f5bf72254a4e61da3e6a562210a9abc9e8b66d69"
445
+ ],
446
+ [
447
+ "299b9fcd4fadfc4b6141457a3036aaa68501c23df579de26df69d4def89b913",
448
+ "b95bf2c2bb303c38bb396382edc798ca6a4847e573ce19b7b08533d1912675"
449
+ ],
450
+ [
451
+ "551f5a4dae4a341a3e20336a7d2f365ddd45849351ec6dd4fcbedfe4806d5d5",
452
+ "5865c977a0ecf13ce85ae14c5c316872080bd36f0f614f56b6dfc7ece83792e"
453
+ ],
454
+ [
455
+ "7a1d69c08e68c80ad8b310736e6247a53bcba0183b9b8798833bc696a0fb6e2",
456
+ "3ce803a20ebb3b120d5eaf0ad64bed0522fad1a0f2ce39a5c5cbae98c4438f6"
457
+ ],
458
+ [
459
+ "28acacc0bc41d84e83663f02b36981a2c8272ecd72d3901164be2affb09c504",
460
+ "7a5aee0b160eaff5b5968ab1a0304ce58c3d5ae0148d9191c39e87668229e5b"
461
+ ],
462
+ [
463
+ "1f78cfdbcc767b68e69a224a077468cdfcb0afd6952b85bccbdb96d1fb8500b",
464
+ "4772ba173c6b583284eb001cfc2a124104833f464ff9df096443e10ef3e9dd4"
465
+ ],
466
+ [
467
+ "2774108962ca9897e7f22c064d2ccedac4fef5fc9569331c27cdc336c95774b",
468
+ "9e13d79b68e8dc8091c019618f5b07283a710ddf1733dc674a99fc32c12911"
469
+ ],
470
+ [
471
+ "770d116415cd2c4ace0d8b721dd77e4a2ef766591f9ec9fa0b61304548994ed",
472
+ "42165d93c82f687635aa2b68492b3adffd516beb4baa94520efa11467a209fd"
473
+ ],
474
+ [
475
+ "5e6e4ece6621e2275415e1fda1e7c4f496de498b77c0b913073c6a6099394b9",
476
+ "3d92ce044fc77fa227adc31f6fc17ef8b4ec1c5aafc44630c0d9195075bf56d"
477
+ ],
478
+ [
479
+ "6e69c717b5d98807ff1e404a5187a9ceaf0110b83aa15a84f930928b1171825",
480
+ "1ee7cfc3a9744d7fa380ba28604af9df33ac077724374c04588bd71fa16b177"
481
+ ],
482
+ [
483
+ "404318f2d2ceb44f549c80f9d7de9879d8f7da4b81e7350c00e974ebf2daef1",
484
+ "3934831b5af70d17a3f1da9d2931bd757e6acf2893236264fc7e0d92ff1a1cb"
485
+ ],
486
+ [
487
+ "20dcb6f394fea6d549b2e75748f61b7ec03b6e52319cb14163373a9c22bb9dc",
488
+ "106a8c96cfb95a331618b7416d1498554730499e194a58fbf63019890480fc7"
489
+ ],
490
+ [
491
+ "119000f277ccee013e6bb121194ec1ab5460fb6a96eb702a14079865f4170aa",
492
+ "1737a32f5415e8720a5606ec1dd4756f02e7c6817e3723b453d091f2d192773"
493
+ ],
494
+ [
495
+ "45d0fb5cd95db76d05dec3faa12e467a308eabaad363a062353db3cd2d9b749",
496
+ "ae08691b5b0cdd19ec499132421638f470f493320e4003d123ab1da761b965"
497
+ ],
498
+ [
499
+ "1257b3e65cdfb6367c6d0942327e799bc66eb221e70c6573a9862889eb51c38",
500
+ "593309fd45755dd2cc4afd2b9316bc4638b0c5ddb3009694fcb7b250d0c8a2f"
501
+ ],
502
+ [
503
+ "186dcf9950f72e868014a8accf14aa36e82a7a2a29f86ba37f6632da4189db3",
504
+ "55684c9f7a043fc523ed78f756f834b4db823d5e4161bd79602c17d55a5cd8c"
505
+ ],
506
+ [
507
+ "58791d5569f282f5c3b01ecdc9388df7ba3ca223a2dc1eed5edaf2a1d302fb9",
508
+ "6298d7dd51561a045bb4089deda9f40b2865589ed433e56d54554f8b45e79f0"
509
+ ],
510
+ [
511
+ "13fd87144aa5aa4b24d5a7bf907d8280d15937fed262d41084898cb688fc28b",
512
+ "3fa54367770cc4479a857411ddcabe86627b405ce1cd14ad3b2863bde13abe4"
513
+ ],
514
+ [
515
+ "48118139445415f0c1879224e2dee744ed35280ff00537260402a1741ec3676",
516
+ "4dfa39dadaabecfc54ecb7a25319444f8e952782d863790e42a9887064fc0c1"
517
+ ],
518
+ [
519
+ "4ad031bb9eda84f2fe5d354c7948d41558ca657a04508654721810ee72ef158",
520
+ "620ebd5d0086b92c6009a42777b946a351c2c7ba852b57d3c9905fc337459ef"
521
+ ],
522
+ [
523
+ "4a34abb016ad8cb4575ea5bd28385d2348e5bcc0cbba90059f90f9c71f86e8b",
524
+ "4f781829ad83f9ed1e1b6de0e5f4ac60dfdfe7f23cb4411e815817e705e52c8"
525
+ ],
526
+ [
527
+ "7fc632d7512aab5356b7915dca854c8b12b369ab54f524fbce352f00eb9b9f9",
528
+ "2ce80b944fc9158005f630b34385d50c3ad84450a9e1e529925b3211dd2a1de"
529
+ ],
530
+ [
531
+ "65ed10347503cbc0216ca03f7536cca16b6abd18d332a9258685907f2e5c23f",
532
+ "3be1a18c6bfa6f2f4898ebefad5a8e844c74626d5baa04a820d407fe28bbca6"
533
+ ],
534
+ [
535
+ "1a8abba1be2e276cdd1f28c912280833a5ede1ec121738fcca47dc070dcc71d",
536
+ "21b724378bc029a5199799df005922590d4e59cae52976f8e437bf6693eec4a"
537
+ ],
538
+ [
539
+ "3a99c22dafcfe9004ebb674805736a26aeed7ed5d465ae37226dcbe270a972b",
540
+ "5bf67552af08e1e6e2a24bf562c23225e89869cab9bef8becb3669175a3c94f"
541
+ ],
542
+ [
543
+ "4a6a5e4b3501f2b7bbdd8da73ea81ffca347170bdfb6776a037cdd74c560fb4",
544
+ "5af167ebb259c2da88740ec559ee04052bb66480b836cadd0e2590c32d7111b"
545
+ ],
546
+ [
547
+ "6890d95308525f0bac9dc25cc1189eb92d29d4b3fe61bc8aee1c716ac17b1e8",
548
+ "e6f23f78e882026b53ea4fac6950e56e3da461e52339eb43d2fdb2dade7ca9"
549
+ ],
550
+ [
551
+ "748f4cf4f027efdeaed7c7f91ef3730ff2f2bb0bfc2db8f27aadde947f7d4d5",
552
+ "3a1cbc550699411052c76293b8c41a3a8a1ecf12cbbc029a1b2b6ea986fca93"
553
+ ],
554
+ [
555
+ "7321f3f581690922cd0dec40c9c352aae412ec2ccdf718f137f7786ab452cd3",
556
+ "5be5130c9277cdb76d7409452438ec15d246b211dd1e276ee58e82a81c98fd4"
557
+ ],
558
+ [
559
+ "6c4d6cb7e7ae70955224b8a912ff57ca218635a2436b36cee25dce8a5cdf51f",
560
+ "32f8c03c6db3246946e432e4148e69f5628b200c6d7d72449df6eeac0998039"
561
+ ],
562
+ [
563
+ "1dad5f2e795ea6fa5177f110989516eacf8fb37bd6a091c7c93f1d73a2fe309",
564
+ "56b2298c538180e99dea3e171dbb5c6fba0bd0a9ed40537277c0c2373a8e2c4"
565
+ ],
566
+ [
567
+ "1610605baacc9bc62c4cc923dc943347cfece7ae241e746fbe6c2c878221dbd",
568
+ "431a82d657e0d109d00dea88cf3fa9b999845221b7b5590a20c40fc71368c1c"
569
+ ],
570
+ [
571
+ "6a4f5c787fb09a5be2b04d2eafa1e6f3d3c863ee22960eb0b64f6eaf6659162",
572
+ "14dbc3eaea6146ee7eaace5a91ed9430dad3a47e9ca2f68b455171f8fe6a7b3"
573
+ ],
574
+ [
575
+ "738415b73e55412b0e582e45ff0d7bf4b1bf2922db581783fdcc75559f40e",
576
+ "33825aeb3fd8459999eb418d15102ba5864b069c6ea517f0c6e9eab8d9aca47"
577
+ ],
578
+ [
579
+ "2603e72ce53985c70782774057a17944f7b4ce224a809be4e2b5af3606aa1d8",
580
+ "92822921809c42318f42dac4d773325f41c43069e990adac7818a45e2554dc"
581
+ ],
582
+ [
583
+ "181cd967ab4615357cc96c82eae9152ce7598c1a1dfdd91a458bddb016ae9fe",
584
+ "5d562fdaeb0e12647e230e50eaf216bed52fa73c6b7378821a3bfc4cd66d4ff"
585
+ ],
586
+ [
587
+ "1121726069b9ef5954ba6490100b226e0be53fef3e071b7c58a1286174b789a",
588
+ "4b25594cf4e9eb2d14b3f52f2661a9992234fc222c0a0d44517cb77deb9c16f"
589
+ ],
590
+ [
591
+ "e543663969b915337f105f80995a77b356f1a51d8b4a4fb12d44364130e873",
592
+ "34b2e3c009fdab4cb7349a580df2e64c0098a123280078e5da6623a9ec6b44f"
593
+ ],
594
+ [
595
+ "4e2f8909bb62de5ef65600e61bbf969293815296b6e23702875e049b3ce5c45",
596
+ "3cb81f2c21f22a7add26fa38a9ce5d9cce1bb251bd2698f90c34ff0a84f7af"
597
+ ],
598
+ [
599
+ "37b546e403a1ba970c17b67c2f1361ab9c803f8d2b5cd93803014faa08861ed",
600
+ "37079184ea46272f5809b523d060686633f7995167897a153be1772fd6566f6"
601
+ ],
602
+ [
603
+ "27bddca77f7bd7f66b3693567a4238f2e6751d95b0bcb409f6b24d08f84798c",
604
+ "6417a85cbfd6fc02df560d3963a241a986baacdfa423f65d7227ce49a96c57d"
605
+ ],
606
+ [
607
+ "2de71a39aa043057d1bc66e45f804542acddf18f7a6d88c0d7fb0ca240debdf",
608
+ "306c1ce39ab46300f7cca0f3a2fbfa77296a27e24bc66b0b8044968ec0ee413"
609
+ ],
610
+ [
611
+ "307c877154364c0c03534e7327d5a88e1380ceef6481567ade37a14ee7c1a72",
612
+ "3404bc7dbfb33b95d922d0693aaf9358f77888d7d95e773c38d83dbe2e5f995"
613
+ ],
614
+ [
615
+ "79f09ff7c60850e5f5ea020722659a1ed27db4c95dca131f99552f785c8afbc",
616
+ "40429528c099349b426ddbf129497176951a64a53db5f9d8bd2be0252cb22b2"
617
+ ],
618
+ [
619
+ "4027dc6b56d446e5972f35464eeac85c5254ef377c902d9fe37aea841bb5292",
620
+ "7c3ea37689ef679fa2f5c7e031a78e23d484a8317990fd34d44d95cc1db3717"
621
+ ],
622
+ [
623
+ "645dbf78a3c228c4b7151450b5e65edb58e71f37e1e4bc5f471e0f1abd6d9c2",
624
+ "15cfe7850f327b256e23b00627451560c5c6ab60db78d45b7ab286afb6f13ab"
625
+ ],
626
+ [
627
+ "1503ca373757677ad1d911a2b599d01c46eb879d1ce21ae171c7e439846a85f",
628
+ "583eb269b7030da6a0c324026919de3f9489d2ff6ae0e6320c36f05469ad66c"
629
+ ],
630
+ [
631
+ "66e1819ba3ec4ad4ae9f7d7588d23baa004e29d3aad2393d52af204a81626ca",
632
+ "505249980cbe6273b82ad5038fe04a981896f4117345ac1abcc67e2525c0ee4"
633
+ ],
634
+ [
635
+ "5ec20dbb290254545f9292c0a8e4fbbfb80ad9aab0a0e0e9e9923f784d70ed1",
636
+ "bdb1ca3a859227cf5d00eaae1f22584e826ed83b7ccdb65483ed5213dc4323"
637
+ ],
638
+ [
639
+ "a5c1a5011f4b81c5c01ef0b07c0fbf0a166de77280f0ae241f2db6cba15194",
640
+ "4444521fb9b33d7dfeb1247d0ee1a2b854ad166cb663d9dd2e686909362a689"
641
+ ],
642
+ [
643
+ "1f35335de40e00c62642dac2fda8b30f071986ce4f11db849df11bc45ad4e0c",
644
+ "7801a2c761b90fd4477ba0be9a775003d5dfcd959b1ed198b4681f15e7acbf"
645
+ ],
646
+ [
647
+ "48db4798cf6821c1ffb8178b1d3bb6020e04186c96aaf4670972d367f4ed5f",
648
+ "781019494df95b888f1578f1b4a3f8e125ea60eca47ef9207a10630671217a3"
649
+ ],
650
+ [
651
+ "17f653d904210148a8e74d8e719a3061683c164aa6d79c902a19f185ab437bd",
652
+ "6780e97985932c3860d810af1e065d454b1cb4be0e7ffe2d8cea7d52526e223"
653
+ ],
654
+ [
655
+ "5c4d0c7432f9b0070436240f9855adae1467cdc9826952ae01b68cd52a3ad89",
656
+ "1c5747f968ed91261b7ae9bf1023c999da9816e37de602d6a1a50d397752bff"
657
+ ],
658
+ [
659
+ "6fedd7639fdaa2f7bad4ca0b391710f6f8a7e890250ae8ae4252bb8b39a1e58",
660
+ "436a215f655a3fd3778b2335ffdc9aca6b98474e43d764c1f8362830b084f0e"
661
+ ],
662
+ [
663
+ "7fbd45a889c5e9d127bb4f8474d6be7cb9796bbfff923b75e42a1ad4cae37d6",
664
+ "484bd12622a6ba81cd53049c550d9ed682a8e765b656b1cbff9bbea637bd1f4"
665
+ ],
666
+ [
667
+ "17d984d47937263f7966a3e7b1eea04071e678494bd749c9e02b48b3234f06d",
668
+ "7b341ff08722c4e161005d0037204a7a2001fdda7af2cc1a0b04a027f115a0f"
669
+ ],
670
+ [
671
+ "7f1822045db45ea07e1519c3ee1f7705915f35fe4dd8db1e8921b5d1c740edf",
672
+ "33d41e06b93320ad1b3d9580380ec797a05dac3f1cc8008899110ebefde2f78"
673
+ ],
674
+ [
675
+ "7b19453ecb74b7d0e2a66b9890ff73bfbbcd61a266abd6d82dbe665bf32f34d",
676
+ "6dba2355420dac582b1f349609ea1c89b89bba2d1a68a0642f1dd12d86e73cb"
677
+ ],
678
+ [
679
+ "273e82a15f395ddf2489a95685bec8bac62c4b459d1b28987d3cb27e4bc9128",
680
+ "653375b48a4cf5d5b101c9ef533039bedce5dbeef3f59e8f168bdc99b06ca5f"
681
+ ],
682
+ [
683
+ "3006c9e7fc6a553d8eb4e8a47ce9f10d1a39576ac255ae9e0a4ce3869e76212",
684
+ "65fe9e2ef2aae608be309332d464f57e28f1df5de1a6a519751b056971f932e"
685
+ ],
686
+ [
687
+ "5e8f384c8a4607fbe9789fcc52d54249d304d698562597d114c1d81452d3dee",
688
+ "3c8bc78066b5d947dc1e405e326ee55ea606c7988f666748d259850fa259a22"
689
+ ],
690
+ [
691
+ "7841b2102e9aa103fb53a642b3e167b21113ea44751ab38e0b5ef8312654db9",
692
+ "71bf5c8308fcf9c4a7847494cd9bdd946fddf7d3a37e8bb0b201ff2343deb8e"
693
+ ],
694
+ [
695
+ "40f68027420c11e3ade9aae041978dc18081c4f94943463aac92d887f922a62",
696
+ "499c6062594a6c7e21a3cb91ea451813393bff365a27a08f1a515439b83cf42"
697
+ ],
698
+ [
699
+ "6ce77a50d038b222634e87948df0590b79d66087b01e42b9b6d8fa30ebb1465",
700
+ "35f5c46bb1be8555a93f155a174d54ec048c2ac8676e7c743054ddc52709d37"
701
+ ],
702
+ [
703
+ "604f8b9f2dacb13d569262864063c2d4bb2b2cd716db6eeb2b1eeabc57746f6",
704
+ "68c6799e24f3b44eec3049973445174727a66970f1614a782efa2b91ab1e457"
705
+ ],
706
+ [
707
+ "73d620f3bfe77f672943d448d7dc05327adf64b8e7af50039c469d7f7c994c4",
708
+ "4859deb36eaf0c802f0d1514602368143a33ec6ce8fd55248b59025debc6afb"
709
+ ],
710
+ [
711
+ "3fd2bcd1c89d706a3647fbd354097f09c76636e93ae504973f944d8fc3bcc1",
712
+ "677ef842cf5eb2444941f527abec567725e469469192354ad509a26ebb3d0e0"
713
+ ],
714
+ [
715
+ "39222ea924ac17b533c72ffb2c47ffdc11d6a7f7c70fbde3a10fb0b8f35eb2f",
716
+ "20dc4bd1089019bc1d7379b4feb3eae6eb5af59e9f253845da9fd633057e952"
717
+ ],
718
+ [
719
+ "326f58994e1347f62e4102183215b5db956378d2f61f14aba4dec94577f53c",
720
+ "7a03284c296003bbe05178a1d82efdb7b8125511d63e20e50aed789c2e52e1"
721
+ ],
722
+ [
723
+ "53aa8939c74d4ee58f03bc88bace5a45c7bfcf27466201da05dc6723a5f5632",
724
+ "2e32535ca7732904a048183247b04b426ecf9b39fc393a9cebe92fb1dc7a7f1"
725
+ ],
726
+ [
727
+ "6cee1a03145e93b3e826e6067005f09c06099c98198c91c222407ba5c8c132e",
728
+ "beaecad1274e7c6e5476a100c271aa1a6f86ee5a9fa5c2f26124d5886fa63"
729
+ ],
730
+ [
731
+ "3ec659b8175e1be1bd5a252108714776b813e330393f587814f5f1f32a73332",
732
+ "529a5cf9f8c237ae69a94217d173c8d19c156952041f5c980da557990863fa7"
733
+ ],
734
+ [
735
+ "3d66ec5963d0c534d4139c8cef2e1ac48b3e7965fafabf58be26f903318af4e",
736
+ "3d3f2de7a95f59b683725ee6283cbaf31f97c4b600df9a4621413223a468740"
737
+ ],
738
+ [
739
+ "7fb38ace8e0932fac2ea0d3eb676db8d684db1817e2e4d59da7996ce398b4a",
740
+ "68f92bd5768cdd4710249f9d49ef1d5654e497b9a4ba10bd2971366d83fb400"
741
+ ],
742
+ [
743
+ "1c4a49314d6b4969cdd142c76ceb7682bfb868ace7f7568b0fc8635bda5a9fb",
744
+ "5fc0519f1f4cc10b5771312458748c036313b87707ed0540026ac64a5955aa9"
745
+ ],
746
+ [
747
+ "3073c95d08d3b97caea5f0be16b2789bee766f76b7e5499f8ce8f96abb0f344",
748
+ "52a8974b4eb9a1f6a0ae2c83cb4715bf18d73f057255fcb3f63b74f7e78f590"
749
+ ],
750
+ [
751
+ "44485b16d597a5de3604df6f7ed7e00b8aeef9e7e8dea8688255153b8bb16aa",
752
+ "6cccb0ba170123266f24b5d93a744397dc2c44820edc4f8f5b9a0f5c9b3b940"
753
+ ],
754
+ [
755
+ "7618f77b7b32d512688dd62e0b48231d9574c6361e8be353a7dc04f7c3a115e",
756
+ "78ffcd16d80636381ca231aae70d99c9e20298b4f5388fd823ea9fa2b8ddfd9"
757
+ ],
758
+ [
759
+ "7dc82fee1ef95cf5b3720fcc07f63246654bfe39762627839da40e51c75654d",
760
+ "4c0ccdd70955da74558de20c88352df8a02aa97e4d5971c500e884740a8cb62"
761
+ ],
762
+ [
763
+ "7fa5d460dc10cbb418b444d9bde97e92c70a99a222b99f244dccee7e62cc04c",
764
+ "636163901baa5b7576c38c43407af578b8c4607e01e86011ae2dde587a89f84"
765
+ ],
766
+ [
767
+ "758930d46006623a756c89bd0cc378f6a3c1f43c9a0edbb42274c35e75c16d2",
768
+ "1d74dd9f81c2fec811b8cbd6168a745b0a111932b2a345265ef2853b50b6245"
769
+ ],
770
+ [
771
+ "7332ee0626b044d664ef228f8cb84df7c643e52f6a2591ae1c9007ad61ec16e",
772
+ "229bd8e630572cbdee54283234cf3e9f060e6382f99943bf234119d47b54470"
773
+ ],
774
+ [
775
+ "78a16ef803aa20a075bb2f66c61bb2dae5698bebb94a0995fa74c3d53de1614",
776
+ "246d588b68edb6fed96c128349908c42dcd64c46341b205e79f4aed9b5d3675"
777
+ ],
778
+ [
779
+ "6e1933939bd03b67bba753cc0cbe7d2f25bad68c993887ef8c9e2fcd59b0647",
780
+ "599413f7c204a11a5ce315eab11299ab7326603412bb00bc1c59ff75a37d6b4"
781
+ ],
782
+ [
783
+ "4a79957a5a1888ad063b51c69565a2b48e8eb917183e220a1c8d3374526d30e",
784
+ "1f092de0e069bba7fc5386e2e9a114c1618f88c4b95e220cd35ffe96f99fcad"
785
+ ],
786
+ [
787
+ "3148aa3df9ece39aca84f59489f2710522216f14be6055ee0027529d1d55e2d",
788
+ "617e9a52a92975db0ba1977f71116f7058a0d31b869ac7f3ee2fd80b0c5100c"
789
+ ],
790
+ [
791
+ "5c1188e72384160ae39d07328346cda4f6c12d227448e6236f04dc971625287",
792
+ "1643006eb3a3bc6aafd5f685cf054f2a572e6ca58c0118bcec0b833741f116d"
793
+ ],
794
+ [
795
+ "3f72efc93c9b71adc4c51d8fc69d3940b20d08733af2b7d05140fdb1d1c1004",
796
+ "7399259987c8f4ebfab46e522380707e58427d3962ee0c2a91760813f76d232"
797
+ ],
798
+ [
799
+ "3129b34c03c51aa8f611e91d5cfcc9bd3ef108ee66e6d3ee35a0e0e50055bb",
800
+ "563b18b5650085efb4cf179a029e6afff27b1d3091cd28eaa68d24fa1f801c6"
801
+ ],
802
+ [
803
+ "16eac0f9fb4c67cf89a7fa4ee615bbe731d8edcb709a1b9b50c7d873a530f52",
804
+ "7ff8288b6e199ca8f316192881424a37fb080c29daa76b1f0edaccaf580a80e"
805
+ ],
806
+ [
807
+ "75f6b6028c43ce832f65d7e8e620d43b16cba215b4b94df5b60fc24e9655ee4",
808
+ "35e9ccfaed2293a8b94b28de03bcb13eb64a26c831e26cc61a39b97969a2ff0"
809
+ ],
810
+ [
811
+ "3c6152fe093bd6316897917ec56a218640ec1b2148f21db9b14fc7a5ff362e8",
812
+ "6eef2df27ae7d63a28856b07b73e7aad7ca94f317201a1e675ffc6f9a1710dd"
813
+ ],
814
+ [
815
+ "54e01b5fe4fd96052aad55b3f26b1d254dfc7e2525fffb9ae0a77eb8cc5579",
816
+ "7c3d39232ab333675b219abc766ed9b4782c840e6b046614dedb8a619696eb0"
817
+ ],
818
+ [
819
+ "d1e63f8ea8a76429cf254a6d3b668761f0dc572d4bfac4fd56d9eaf58fb6c0",
820
+ "2bd0a84d3908a63085824c9329a0983913006ba155b56a58eb3f9becab29c45"
821
+ ],
822
+ [
823
+ "2d6122f2a702edd4da7385b1580796a71d13bd72be94cfb3fec01149c006c2d",
824
+ "70eb282fae992efa6f5915e578b640653549f23385ef3a29ab29b1b9b8ad63b"
825
+ ],
826
+ [
827
+ "752fec14beaadb5ddbba6b3a17fcb86579fa588ef407fad0ea07dbb22a640d3",
828
+ "3feb6728eca21a1e84e8f9f23010387a53a96a1cb62d86fb37996150a1299ef"
829
+ ],
830
+ [
831
+ "63f94a92f27acde8f5ed949b459506f51d70c85bcc61a34d647264ecc53c65e",
832
+ "37e5dce0646ee66f4fdb93b82d54d83a054948fa7d7fa74ab6b36246fc7383e"
833
+ ],
834
+ [
835
+ "d6aa909287a2f05b9528690c741702c4c5f4d486c19a46c38215f52ef79c7b",
836
+ "5ebe1128dd81093df4aca0df365d58adab848d1be1a94b95eeb649afd66a018"
837
+ ],
838
+ [
839
+ "12866812b3053e2f7a9572bdaf5ef2b48c6fb62a0eed9ff0356df50e7d05557",
840
+ "6785f7eb2cd1c120e4c7167b46861d10117040a2e9f2ca86a71e9d67df90613"
841
+ ],
842
+ [
843
+ "46a730d05330b1b13673cb8a1b8f45460035e4a9f1a1751cfba099c4355c1c",
844
+ "76fb0ec6cd16a8141cdcd875c8b2de9fce42d296072643d148ac7e7fa7472df"
845
+ ],
846
+ [
847
+ "4bd4380a22900bd34835e0a908eacf4b6edb61eda0cf483f9212453b37e7516",
848
+ "5e9551cd20d8d7ddbf4366880b7d5267385afa1966ff30da4baaf273b009d29"
849
+ ],
850
+ [
851
+ "71f1994ad40baa2922424ae222663a64f93d8b67929e9a10f9e4c1ab19f3833",
852
+ "85320fe68ec0d37cc19fdfd03589d66906ffa4046c80e1b094a85f27676346"
853
+ ],
854
+ [
855
+ "5a63b1bf5232f28f808765c6be7ce1f81c52145b39f01c879fae0f4303bee61",
856
+ "3bc5d6df68bb6d0577bf9ae2ae59ec0e9b2dc7dd56ea179fb38a41e853db950"
857
+ ],
858
+ [
859
+ "161ded55ff1087032381e6c1449704f63ad2d88df82dfc44a71890fa09b3941",
860
+ "78a52e0013842037274ea75daaf8eb4afc04ccc4b07bfaf3f5ee47d165e01b"
861
+ ],
862
+ [
863
+ "1bfce5229c5fbff5c0f452a22317fcfcd9262f23df41840f84fe7d44cfba1a1",
864
+ "66b387872c00e63c73006a955d42cf49c46c5708fc9d1579b9ae38341b24a3d"
865
+ ],
866
+ [
867
+ "56d47dadc9cbd1dcb2ee3efcd5d4af5e6aea71df10815c68b54a14e81d11b44",
868
+ "47e966ba54df48e9b612a903685e0060a67e4725402e8cb4cf654e54e813a3e"
869
+ ],
870
+ [
871
+ "4b1c44438afd4ddf20a2cf612df2ee494ce84c7274c5529e857693e73018491",
872
+ "430403bd31d8f0677e06abff7159384560f27b9622943fea1a3192f14bf40d4"
873
+ ],
874
+ [
875
+ "7f7281728fc2214aa1dbf13176a4624b53814734abd570eb6ef7c7e32379606",
876
+ "312da47be347fb3fa2c9089b38df372560dcace2effeeacab4d96ab11567295"
877
+ ],
878
+ [
879
+ "16a28884a1be8183e0d3fc0db84a9afbf47126fd3be548c2a584aaafbfa7dfe",
880
+ "7c3f57b3b895564ba562c1cd80b71fda6d2e611665c6ab87744f5390858fe24"
881
+ ],
882
+ [
883
+ "323339f37b327a731232a9580e79952063c7c232bd1380146d8a83c285f4b8b",
884
+ "4f16be1d983c7232f92cce6b9690695978d42cecc8eeb8c206e125d1098a265"
885
+ ],
886
+ [
887
+ "624d26cbaa197e104eb83cebf2adeed09a5cdad359993fe5e3529d4d0def21d",
888
+ "261b7da3cfb55c788977e0d8d640e3e93ae5a325d962ce85c816d7d32cfc430"
889
+ ],
890
+ [
891
+ "f24ecb7ee83a3e28dab54a330dc93d0429a7aea36412e922dce8fbff40d60d",
892
+ "b043e36a258d1df1d21b0cc7be9c4dcae1bd4ed326c110e668ac23d86805a6"
893
+ ],
894
+ [
895
+ "686cea46b710bde1231483bfdbc700cfa3da6ecd5841c0e0c782f9ea24328ec",
896
+ "7eb7407aa58edd6911c7c7e8d1e03bb52ead4a2415a0c33325872ff3a521dd6"
897
+ ],
898
+ [
899
+ "3866ee1186264549df3dfcdf8705c0380c9372eef6d4081c2454d3aded1720e",
900
+ "634c6d3e8eb8af652a4be73e3b613452c2213104ca875b66b4b15ee5b1716af"
901
+ ],
902
+ [
903
+ "484c687cd2969a1d20a58cdfb9a60f280a473284503b1ecff5de514aaf8206b",
904
+ "34d44d26b7427e51a646d1b924084762f5b461685450f21d6a472de565bebd8"
905
+ ],
906
+ [
907
+ "203561333771fa0fe22c4033349f7b877d15b0542a5598e81e067968768247a",
908
+ "2b6a533aff6e2163a36a2a89cb7415848bef48db40f952ffd380f47676707c2"
909
+ ],
910
+ [
911
+ "2ffa6cca6233695760251206fc5e34c8d3692498589478cdd3d5b09f0b7c05d",
912
+ "6c57d605478fa9626c4ed769554d075daa53e1a1d0bd4d94174d3bfeeb11ad6"
913
+ ],
914
+ [
915
+ "5dccf0fa46a5571f204d0b033b45f299cbb3d9f80fded57253ea4f1c64faaef",
916
+ "30a38e131ee8756ee5ea2a3e16618a5dbc28b5b9311308bf037ecc2039dfc7d"
917
+ ],
918
+ [
919
+ "57b0a2eaebeafd950221facdd24790d7d1ab8883e5c5d55635f0d14a1ee4741",
920
+ "7b41cc478fa6be38417271db8ed12efc0da6982552c1496025d2df0576bf4ad"
921
+ ],
922
+ [
923
+ "611b5725101f611c387ccaa13889ecf3bb5595071a179ce350029bfca4ad7f1",
924
+ "3129755977abc8995fec7eec1123a1561e429fde37ff36af002d3211831ecf4"
925
+ ],
926
+ [
927
+ "1c06bbd0c52fdab9fcaf680c7a93fb821e538a2ed79f00f3c34d5afb9ea6b31",
928
+ "3873d3bdfe0be0157bbc141198dc95497823cc222986d24c594b87bd48dc527"
929
+ ],
930
+ [
931
+ "275cdbabc989c615130d36dabfa55ca9d539ed5f67c187444b0a9a12e5b7234",
932
+ "2b7f723e68e579e551115d56f0ae71a3b787b843cc04a35b9f11084b006521"
933
+ ],
934
+ [
935
+ "6cc702eb20f8b5940c7da71f8b1801f55c8c2d8e2e4a3c6c983f00bc1ffdd95",
936
+ "5d15b3727bc66f3aba6d589acdd139fae115232eb845abe61fbdfc51341352e"
937
+ ],
938
+ [
939
+ "44defb418700cee8c9bd696b872adb005490512d8bba081f8f99a9f15cc981c",
940
+ "3b2072cdb1d919b2b65b5cb3557f0a3381d7ca293c267ca4a38f83e77bcc96e"
941
+ ],
942
+ [
943
+ "fd83ce77b1578b3a9b8c3cbeaddb1504d2fd4a19c901c21ac65961224e4966",
944
+ "110cbe64fc10c6b9c66f15ca406a35f50b723b35d83c5eb9797a57f8395f4f9"
945
+ ],
946
+ [
947
+ "9dc6ff90e341875e113bbfb507724dc7095a280d2f32cb6ba61a1e0c2d2aef",
948
+ "4aeb622896c852c2747454e8f172c9482955a42ecbe522d6ce07ecde79d0a51"
949
+ ],
950
+ [
951
+ "71c58b0e47b9dd9107ebd8a8c8fa9f0534e78231bac612c1ddc7a94edf33eb7",
952
+ "7f90edaf4792bf8334adbaa0f4ee7c654312725af188682d75f34874c4eccb9"
953
+ ],
954
+ [
955
+ "1f6de1f14988778ceb2dfe844f92394f1f1e72fd1581ceb3bf336c95ce50345",
956
+ "4f6007ed4e022d2ee9fe4ca8207c5f6c766c4f3b85260e941fb24ad0dcbf0bc"
957
+ ],
958
+ [
959
+ "3ddc3ac25ede4a67a97547ed27dc920239b585fb3624177e2e8d59eba678115",
960
+ "a9afd8f8bb759cbd1dff2addc63f47da4ba1291ea34229c09c0637dc5c8d24"
961
+ ],
962
+ [
963
+ "c56b0269d8431556e471cab9d70edda3a37b391696f107b2dc370631de51d",
964
+ "729c52f6b134f733eb750c14bd9f95c077f0f6f6ff4005701e5bedc6544599d"
965
+ ],
966
+ [
967
+ "44d32ce19ac6807cb22e4f25fe1486a36a13926f147fbfa054b63ff0446177d",
968
+ "212a21e8c124c9cd37c80d2dd66913ceaa6b6f666522f115c39382b2d5925e8"
969
+ ],
970
+ [
971
+ "35dfc16f3ae6ccc06a267bf6d931601e52f3e45359ffc513570b65b96adc4f",
972
+ "74311d10f4bece01b5ae65a6affe5c931463aa1b73a3320eeb41bbb7bb1ff62"
973
+ ],
974
+ [
975
+ "e0acd9d2d907031b319b80121dc90699d003d220ea785d50e5033cdb3b1a03",
976
+ "3911ba78d6e507485d6374b0f7d2e6198f6462a7d6d3cf046404a07af690357"
977
+ ],
978
+ [
979
+ "3c57918ca254c0cb7dac251ef4e10c7d82327969552eae15d26c4c52660922a",
980
+ "5fd5f5ff3f14e671548074114c72c48409df8a2e71fc8aa3c8acb506e2a88df"
981
+ ],
982
+ [
983
+ "222ad8b61e219ba2b581f606b7c996516850a46a3db72fe1f72b5a9be6c324c",
984
+ "72015a5e2db648112abd284fd867b59fc5606645177d26cf6e9a655c9912d42"
985
+ ],
986
+ [
987
+ "3c86d5d774bc614469768ad38f7be9a53e9a233942c5c553b82e49aae684764",
988
+ "480febea8229e130dedffff89c11f3c43e11724e6bd89d5566d78752859d41c"
989
+ ],
990
+ [
991
+ "adb73bb8352d0c10175df371f7868ef2c9e0c79ac788430c480c0f7d85c187",
992
+ "60b564785248111502e6f39c4994d6293fac22bc25f4d764b2fb1957d3c9bd8"
993
+ ],
994
+ [
995
+ "3836ab8b46cf4f453a22532c886940b982029b29c42adca90ded5bf77e6bcb9",
996
+ "7b15e91d6355f147b171a90b064a9d8b2d7bf3699bbf4987664c61c950d8996"
997
+ ],
998
+ [
999
+ "12ed96af1a97c45ec31f1531e96f6fb28a03ba52ab8484545fbe0dddc97bb32",
1000
+ "6d1f522b6c6cad0940cff8e23decc72bb8d4164696af031415508b025aa8be1"
1001
+ ],
1002
+ [
1003
+ "27382994ae5878223ef802e9b4882f481a1b4008f1eec8484483471f7aa742b",
1004
+ "c31750d242b3975b0026a0e86ccdd17d0f680a8c6f53f197fc25eb1f777917"
1005
+ ],
1006
+ [
1007
+ "431677eba3715455bc235557518a74f3b111a88844ef13e159ad44bc16de3e6",
1008
+ "30000e1eb6a17d9df776981e65c6e500fded1ac12003adc9446b269812c9197"
1009
+ ],
1010
+ [
1011
+ "4b563e6f42589671579eabfa2cda5502b361c46a5ac8d45c8ed44741a925b33",
1012
+ "627bdb41678443fdd1aa607709e9699b652308615f4bea760a3b79ee0d9ab5c"
1013
+ ],
1014
+ [
1015
+ "2932fd3f81fc973ca9def6b7f1bb50f980fe589187cfe9e9f52ba4d356cf2c8",
1016
+ "1e6bfd00fa976c4770263a227048214c38850fe0f059e7b3d2c7871ef07d68f"
1017
+ ],
1018
+ [
1019
+ "e44e4f3d96d9dec775b996be57e57fdc28e7c68023109b221c414a244a0dbc",
1020
+ "58b1e52fa274812e5184e00e9ad812bec2463140adfb4bea3b2d665867dcc9"
1021
+ ],
1022
+ [
1023
+ "7fcb89be1f4bec745887bb891e53fefd665c53d00a9e74de16b8a7e1f7adfb5",
1024
+ "74af0b06633f779897e199609c71cc5649bbb65bc2c0abd4c678f0480c198d1"
1025
+ ],
1026
+ [
1027
+ "62a381ffb904ea3ff4d451d4c8459457cdbc3dc2fd2da646a95d8c1e90c0b7b",
1028
+ "1ba058658e09db9e319fa73de8ab4a992b71e4efc22c273725bdcab84e2a315"
1029
+ ],
1030
+ [
1031
+ "1b0fbb7a84c67e668450a54449c7a46261a2d355589f8b84ebfbaf9a77ee938",
1032
+ "44f8fffa33dd33a6146c35d196595e22cc4a215f61ee9197cd751400970a1b"
1033
+ ],
1034
+ [
1035
+ "78fe920bd96a356d4d95ee34adafe8fecf071d3107c36f047b4024ddc4b3eea",
1036
+ "6162f29607fdbec10181fbac6e57d5cb41b922c5791fb24bd28bcdd75d16c41"
1037
+ ],
1038
+ [
1039
+ "5629b849e026e65d119ac11821d7ab7efd9c52226f75c7427505d6818bb0c8d",
1040
+ "1539c0f90970ee8b490e45bbe5568170e5708521a0e59f976be680595906feb"
1041
+ ],
1042
+ [
1043
+ "62bc853f349bac8c6e5921d27ba85dbd9ba20a375d70a7bc008928f3e123b04",
1044
+ "6acfeb1de05ba43c3ef1a9110a983a320e77b3ca294abbc04aeca19b194f26f"
1045
+ ],
1046
+ [
1047
+ "4cf4bed663464418285cbae359b5d84ec76b5997d24f3640984c7663421190f",
1048
+ "941f818e3e3e8fb1568da85217d17f9250ebc948379014d900a7b1a848494"
1049
+ ],
1050
+ [
1051
+ "52ff3d9ffe9a302f6dfaaf74bab57c08027d5cb699a69b30830540c0a2d47a1",
1052
+ "987dd8876873778d933fbfed37aab2f7d6f669c37024f926b1edcb2ca55782"
1053
+ ],
1054
+ [
1055
+ "1109ee32f0bc53de6bfa457060b366e909d7c18061ec9845f46ac715496897f",
1056
+ "38f36f172bdfd454b9285f86e6bdece8fdffc95182c7d801b03c671cc55139b"
1057
+ ],
1058
+ [
1059
+ "4b4482f1d84efe23dadf3bb10df3dcaa251312dcdd604f616f1eb540e1f3232",
1060
+ "7c9c149dcae9135f940fb54482f9c3cd8193721643a6e23157b8020410d439c"
1061
+ ],
1062
+ [
1063
+ "69cb459b9e415b7581ca163611c470d875971d5d7949de732d1f0f200544a73",
1064
+ "a7136fa9dd00c0469863b7def3f83a5611ed628810d7e807e7a873da5a9897"
1065
+ ],
1066
+ [
1067
+ "b66a4e32ac9a4baa8f64780acd94ed3628b2b0ea874ba4dece629af65f9e62",
1068
+ "24328ba9996a24389658e3467b8b90dc3927ef8419fe28b3f55b1c1aaa51915"
1069
+ ],
1070
+ [
1071
+ "5ecc3080062dd451236de0e4eb91c5c75100733364bc5469f5fa76f79021ecb",
1072
+ "6da4abb9031a27b5be94529324fad8026e7d871570780081b0f424d4fe543c9"
1073
+ ],
1074
+ [
1075
+ "1e3146f00880bb22486d5bc73e54367d54251f4002bcf342d0393b05a4b9ce0",
1076
+ "23b6fb8e945d3205f633ba724202db5a99305f807137edf942cd60eef867699"
1077
+ ],
1078
+ [
1079
+ "2e1da8013285598b899f026c6974185db12c97b4c63509769d3d4ad1d18a4e5",
1080
+ "1e7e7b668674d1593c39d58bc7bccbf568208732b3519bc2cdf93db34366862"
1081
+ ],
1082
+ [
1083
+ "d26c3f389d81709506f184b53871497c8d36c5c9eee8e3737358204c1acba3",
1084
+ "34649c3d39f3b825947fedbca215ae30c5a5995e93b1c8efca4944cf85a082a"
1085
+ ],
1086
+ [
1087
+ "91300478a83595d548f32f259033291fc7d083953b0b8bde88c7559660c563",
1088
+ "e5d2bff57fc6551e9b80c06ac7314a71907cdcc66ce82f2cce721a670df10a"
1089
+ ],
1090
+ [
1091
+ "1f7abcb9d462c63ffe92aa56619ae8590089cca4d93ee3e5f34a63882452cc7",
1092
+ "7e9f85c7b7ca6e9a4f3a026d1048adbeef69ea9d876c6f647c257b879a81bdd"
1093
+ ],
1094
+ [
1095
+ "4d2caa1323012e4c83b0ad387308b8aef5637bc35ddd882e7f5e41cf2ca410f",
1096
+ "47150e808c81a540b6f8864e9d6636589cacaa516f82caaa96506edfbd6f0e"
1097
+ ],
1098
+ [
1099
+ "3c10a6083c38351deb3e6d1b386827d0acf48979b66b95249eb8700ec26b069",
1100
+ "47e34bfe561d903cffdd1d849b85aa3cbd31cb4a9bbd8cc2e5fd2f95016cabc"
1101
+ ],
1102
+ [
1103
+ "758bd54868eec045d0b4d3d2bc415d24bce13fee47cefdfda46425c109b657",
1104
+ "3392a7c66ea3bd7b044680bbe9f78ae86752097404c067e9d2572f55330df83"
1105
+ ],
1106
+ [
1107
+ "19e718e0ca1d2d6fadbc6006ee7dda7a385430e29f5e239cdd4bb7c3fdcb2f8",
1108
+ "5c68249b7fe03ea2e13481a63b6cd4bf74ce42009a89fee0b3f8f968b3ec709"
1109
+ ],
1110
+ [
1111
+ "28077f57ea62401806367e6d54fe45d02de5b072db787ffdcc3854e12a3e855",
1112
+ "14f3762689072f5fb41d03e94b01808c739f6d42b7b785b0e464100b150efd2"
1113
+ ],
1114
+ [
1115
+ "3b8a8cefd017363ce867265af3293cec081fa589fe561830f0078778cbd338f",
1116
+ "69ccf2383cb7b4f9c806d72535812483e7c5e9a1a5928529d64ca7e085e758d"
1117
+ ],
1118
+ [
1119
+ "77878f388d22161a2953e5aca6bac1ea480e102f329574b4b201640d44a296b",
1120
+ "7eb35706a90a03aff7c2fecca72659136547cee98038746db5aba16fd7178df"
1121
+ ],
1122
+ [
1123
+ "97332e6da70961f2ef31b7b628f1018d21db8db015922a301fca7d6fc6a8e6",
1124
+ "2e37b06f639fc7a82601b744570a2619e543cbfaf60e474107fcaf4686d3223"
1125
+ ],
1126
+ [
1127
+ "a81518d452d3aac48bf0386c3ff170ef4e684a4def242c964e129c64f4d647",
1128
+ "37506e44c85908ec7b7adda9547fbdcc2e3605151fefa77fbf127ce3bc938f2"
1129
+ ],
1130
+ [
1131
+ "e80336b2220b1d666074f6b0dac85353d0e4c2e8bd0f37055a2236a6a9fadc",
1132
+ "1cae76d73eda7a5964c5d9d3ad6748aff51f5543c56441d2fdb7b444a39846a"
1133
+ ],
1134
+ [
1135
+ "2c01fd8430ecb44e066f352c4f697fc9fda177dbe162f82862d7b9ea8c918de",
1136
+ "6e1dfa99640fdf5b30603d34c7c97c1aa6e6b7f3a2c52a21fc64b0fcac7d591"
1137
+ ],
1138
+ [
1139
+ "744e37b511cd0ddcfe15f3581947014c159de81ed055d15a13c7a2d1fa39f0f",
1140
+ "685caa8ff6979a6c63640ac638a3f9c75737f2031bd55322a47384357af164d"
1141
+ ],
1142
+ [
1143
+ "40e627ff84e1a7a9068b4368770f5956128a4d9e9e33e9cf5e24d9a242149fd",
1144
+ "2465bd6cb20bbdf810e2bc5c3c458cecf4f3aa163a7ac99c2579e5f33417f2e"
1145
+ ],
1146
+ [
1147
+ "5f635af7f554a17bceb6ccb6e637abf89ab6dadd399189b0a0390e87b1896bc",
1148
+ "2aa6238a69f89665646c0e3ca2ba5f709cc6e14351cf71e1b00ec45201417a2"
1149
+ ],
1150
+ [
1151
+ "5edad3063c9fa8305978d7e6a4e037c9fa519b8023c7608dfc3b66e5c1e8985",
1152
+ "49f405d07d7d01919da51159ecdad1031a5ac208c026fdfc14d38f633d92183"
1153
+ ],
1154
+ [
1155
+ "2fdf2e8a45858c12926a1f25a62255fb2d02d0149a15ef669f859806683e649",
1156
+ "61cfb686bb31e2524470d4ad2ae09e3cc91b16305a21d748098feb1d8ce3b3d"
1157
+ ],
1158
+ [
1159
+ "ecdbd7c37f1dffa3943977278da3bb429afdf948b4ea6cdebace3d3be82381",
1160
+ "190b67fb34f7f3ad6afd3d6b6427aa327547d8ac0fb4deeb0feeba1f63d6c60"
1161
+ ],
1162
+ [
1163
+ "233021b483f578dfa5222f8cccba5766ceee0ac65f6d4a3b1673b302a21fb3c",
1164
+ "7d4b6d44d175d4b593f06f5a6dcba2cdbc4eaa2097abaf613123546866cf4ef"
1165
+ ],
1166
+ [
1167
+ "42db4e953c2a7a743de9fe20c5798f2247f51db4eabc6f40e86c13909a310ce",
1168
+ "12c1a0764a0b9f3666e431923ce15e7fcd0ded5ab153f0b48d362cca1604e65"
1169
+ ],
1170
+ [
1171
+ "30d539e2b545fb957e40e2255f6463b52d227c9808472cee6a3d521aa283a44",
1172
+ "5f9eccf747fe6313570f99e845db32b40070acee9ce9e34da7f3c29ca53a07a"
1173
+ ],
1174
+ [
1175
+ "4bd64e5ade3e2733580a6116b4af328751198e7128f9acfe3a3496b545efb5a",
1176
+ "4d584768900dabfc0dbaa086632b8051bb3905ef79b84d96c01514441d0cc93"
1177
+ ],
1178
+ [
1179
+ "62d6e771f02e591557197d13c3e77dfa2d1794ac1808407bd8227c4be31b466",
1180
+ "5c6f5607c1808e899ba36a425911fa8566b7ea9cc80de8a80538c0fceb837c0"
1181
+ ],
1182
+ [
1183
+ "5ce406218cb2852b1d2fe1836b19462f664631785216e87ffbce26030e2101f",
1184
+ "5225f107743c255ab50e7be4a090fe39478d1ef4ff558468559d8cfa87bb94"
1185
+ ],
1186
+ [
1187
+ "670286486e8dda3dc66b0ed3149be7697d3e06c8279844079daa7e42d5af728",
1188
+ "26becabe7430380c56e320f5ae3329569cae7b0af06fd5327ee23979d200eb0"
1189
+ ],
1190
+ [
1191
+ "3ef448df33a4394c43e93e5850cd0c5a6dcb18ae1cd865d00fe8ede9336a9f5",
1192
+ "56711f6ab7e0e4f7365ac34e284ac2879f40208c46f6febcc1dcf7146ecf015"
1193
+ ],
1194
+ [
1195
+ "4b63fc130288e92f2d6ba238caa7a6364804e29829ac037c57df32fbf762bc3",
1196
+ "1eb8c80af55278b4113286c038fff2bfad2da62763bb03426506b869139da0e"
1197
+ ],
1198
+ [
1199
+ "4e7e998557b29a95f805a6e2e26efc1e970108272d4755738c04f28572295c0",
1200
+ "97cfcc2f447bde61bde71049d8200a74a3028b21703bc139143d81a3623f09"
1201
+ ],
1202
+ [
1203
+ "574b67898f02964c408f68e9470e7b615be037e40b824e6617f89cb56c21219",
1204
+ "49392d5f8e6740a1b0b7444f56d7a17363f8656c6e4c628678c86223f2e46c8"
1205
+ ],
1206
+ [
1207
+ "7e8cb50ea5d5c1b09e219e7305bcb601d99b6d7185b1c388aa8e36fe1e56554",
1208
+ "47fefa308645455c12ccb5817da338f0c4f423b341aff4a9d158891a4fd69ba"
1209
+ ],
1210
+ [
1211
+ "67266dea9e71b4ed2bf24a597a823dd048cf31e725db511edceac72998c9ef6",
1212
+ "39babd65850befde1f7c28e41dbdbb4caf82bbcf3bcb5b33161f1c2960b2d8"
1213
+ ],
1214
+ [
1215
+ "63e99c2cb9c74eb9227d48065e27abb8f606df8fc83b2c44e4ea38b046bad2b",
1216
+ "60494a53dd13ecf34e08079d343c88fb655d6d810785af81f08d5aa9bcdcf9"
1217
+ ],
1218
+ [
1219
+ "3cf0600b0f5a2a4eb78c487cd385350e8c7848e3f6983231881d7f1bbe28543",
1220
+ "56dee4288528de609976ef6b903b652127c37b0590e91a2fdbebc3f11df2628"
1221
+ ],
1222
+ [
1223
+ "758f09245fa4b8b23d290ee2b3bfcede199b4fdb11f3cf2502a8ceedd61b129",
1224
+ "622d9baadfde781e985d9722e0a04715666769a4cc7a9bea0b96d6386be1746"
1225
+ ],
1226
+ [
1227
+ "38e1a45b81492aa95d7abea2b08b8c14dc0b8a41108b036871fb737910ae18c",
1228
+ "145c611262656385e5ed6243568cd3f9f59dbfed7a01ba11e22bb8bb272e08e"
1229
+ ],
1230
+ [
1231
+ "206e54ca53a2f155bd4fc45bf2edb77798ae6623defd4cf22f2dd4a7d119dad",
1232
+ "6c94e7f0825ad81680e4cdbcaaaf4df806d57a0d1fb2331926c3fe2b79d22e8"
1233
+ ],
1234
+ [
1235
+ "56e98d2862893caebf66180e84badf19ffc8b53041eaaa313ae7286a8fac3d",
1236
+ "526306f9c01afd6e0c1198ea5de17630f5a39c4ecd02d8e6f0d613c355995c6"
1237
+ ],
1238
+ [
1239
+ "4fa56f376c83db33f9dab2656558f3399099ec1de5e3018b7a6932dba8aa378",
1240
+ "3fa0984c931c9e38113e0c0e47e4401562761f92a7a23b45168f4e80ff5b54d"
1241
+ ],
1242
+ [
1243
+ "450cfaadfecdb8a2fbd4b95c44cb1db723ee5ac9677c9c188b3d7c8eff4ca58",
1244
+ "1a552bdfc0c81be734f1f6ca9a6dd3ab4daa61c11fb53ebb7046eee25d617c7"
1245
+ ],
1246
+ [
1247
+ "6fe20e5c8a8004e33eafc84d16ef770f2f0b7bace19adaaa150f987d295a34d",
1248
+ "28a35040a2ebe9a14a162d3208d5eabc6e2f3a8310f926bd80be65aa71775e2"
1249
+ ],
1250
+ [
1251
+ "1bd65f45a35bf62ae8f9ffcbd7de2976b90518b6820c219f039c50043bb1edf",
1252
+ "fb5f0f8659f9b6ed7cb0ddd7999506d0c20b26bbe69d1915a31842cfac41eb"
1253
+ ],
1254
+ [
1255
+ "4ba4cc166be8dec764910f75b45f74b40c690c74709e90f3aa372f0bd2d6997",
1256
+ "40301cf5c1751f4b971e46c4ede85fcac5c59a5ce5ae7c48151f27b24b219c"
1257
+ ],
1258
+ [
1259
+ "21cfbc678f5a279ebb6ed124273c8df37eaf12a2d04180403ae6b5ec0b1e1ef",
1260
+ "4478ed6a346d899ad7b0b10350270aad39ddd5b68529297e4c91a54357f0a7f"
1261
+ ],
1262
+ [
1263
+ "350bfefbe3d864eaadac9cc1195c14159bb736be743aed7380d2384cadd2046",
1264
+ "5e2a4b3ad0e1d7b9b8ef72b10d68a80e5ee691d7db591fcfbaad6240d41da8b"
1265
+ ],
1266
+ [
1267
+ "529acd569127f73c8d34345f87e96cebfb48ee12a00a3861cda209337ed94e6",
1268
+ "3120671a89b705e5bfd99b0e7fd2118b4914a3ac309b3d74527cacb5ad7491"
1269
+ ],
1270
+ [
1271
+ "55d3d7956a97d10e65a4d8ffeba40deaf0db0b57f8e022cdb3df6df613f5c6d",
1272
+ "159e59a6f92f48fcf85aa96c1a03749a4c4e2cf9e2bc94dd36796daebd9b8b9"
1273
+ ],
1274
+ [
1275
+ "405f019ee8f2e972a005c549b0884b5051f63d1e78480b73208dc07d8c65a1f",
1276
+ "4301a3d0c285ad309ff24a12c100ead7f48ba1368143712f32ac141ab4d9e8d"
1277
+ ],
1278
+ [
1279
+ "376d59b298d982f02dccad0edd5bbd4e5e8fad7898750675ed0856850a7babe",
1280
+ "5233b12bbc50564eb61cc098a17d3d97f06ec7a230380e4c5d3b725cc318eba"
1281
+ ],
1282
+ [
1283
+ "2f55624af6109ef04b2ed035a44a904ace8627f55889f011f768aabf4de9a38",
1284
+ "7f64209ce7dfb63337ccf3d8c14f4093295f86996cabfee23b1655549aca089"
1285
+ ],
1286
+ [
1287
+ "3b8965e942bed2714bc2e685fb103496e1e3595ac6a343d6df45fb5ef6979ed",
1288
+ "5b7cac7a165cb69ae103dd9052fb39c00ed0aad47989005aee53972d82d45b5"
1289
+ ],
1290
+ [
1291
+ "7abfe3accdec1eae1a50049efdd9a8eb7c2921a08e8bf1fe606e9d5a4039ec4",
1292
+ "3af178e7e831f8148244d2d2b284a32991852db6212ad0a9d77540ef648a5fe"
1293
+ ],
1294
+ [
1295
+ "4983196df6ad7d6f0a8d76f86af3863ad8611374a03fc0fd00793181dbde9d",
1296
+ "204c1f91b70f975a21d24a8face664e496f00f602daaafa69a3b56098a4cf89"
1297
+ ],
1298
+ [
1299
+ "79e2b91c1531a3b16dbd53e72d94e16bf265cbec261658151acfaea3718ea72",
1300
+ "3d9bdb47e8b148c1c5e9e694ffbc2cf71aac74ae1a85e8d8c3f77e580f962eb"
1301
+ ],
1302
+ [
1303
+ "297efceec61b3be17565843cae465c52524b4ecd9331a4170f54f7de8c4556c",
1304
+ "6ccef1733624cc8b973ac63dd54e7a53604929affe81c3439525ae5ed6af993"
1305
+ ],
1306
+ [
1307
+ "44f04b1966264a23ccdc870c8563ad2efcd4c8087b5469b90e792287a5581c7",
1308
+ "1c417f0e9829fa3d3cbb7c3cf4dc7aac04c5bf66ff3f86b833a42c533aed1fc"
1309
+ ],
1310
+ [
1311
+ "6ff83f5d8b51db3be0bda80eed2e2adb7037f2f58f705e88f0f98197431ac26",
1312
+ "64f59b8428894c2b7afd740866065ded42e716c7d48accd3f117f22768ed9fd"
1313
+ ],
1314
+ [
1315
+ "14aa8187c9559f77cd1cf96b2dfc949182529936f2b0b4050ea56e134073b24",
1316
+ "5f36508c68b1dc586f3fd3f4e2bd29c6d8258491b8a6aa19ede811ce0d3d0a1"
1317
+ ],
1318
+ [
1319
+ "95e8882a68c5000d1c2be7c0b43e7f2a6f8de906485241f0285a5c73a27a83",
1320
+ "1e4cb67207ab73bc1e5d19fa2146fde6d03021393b77a55df4ddda1fd28f5b1"
1321
+ ],
1322
+ [
1323
+ "2ae0704dacb3da47d564514b4c3543505b403ba09a248c6e74593cba1867ff5",
1324
+ "5a4b5818088dc9ef4066b90a8893ae80fc89584f987ec1928ef9d72cea2bd67"
1325
+ ],
1326
+ [
1327
+ "61a10898a76fb99989e51c0e823cb60b95ec7ccccb917c42b2b28014f5fd94d",
1328
+ "23d8ec1de45366d3b86c64c2da05a2ce3d171adf52ca5522e652ffd0eeee795"
1329
+ ],
1330
+ [
1331
+ "79884133c879cf07734976fd64de220c5a972e04c2a3afb74c362d6c3beecbf",
1332
+ "2aaa0e6d4891b792b5643fdf09873343cd0e3fbba3cbd0601b481a4083f32b6"
1333
+ ],
1334
+ [
1335
+ "45f73d2fa82be6c5ccd0f62d2237efe8727c479967d27cce28e42b9a44bad5b",
1336
+ "2fa4932215f72d56d8be5205c5851c9b3e5f2a14468e4a7acace5437c6b27dd"
1337
+ ],
1338
+ [
1339
+ "37f53f771850f52f9c8f87b53c6bf0c93c2bed76f5fd1d5697356d0b2325007",
1340
+ "50f1a052b79b446fbc7b93ffa1a4515f6c3be3a76a2b0bc5eb8ff327549960c"
1341
+ ],
1342
+ [
1343
+ "71bd6d23e0d2f312d47582efa609101f15b9ccc571fca8ac4fe3457c67fbc9b",
1344
+ "3b3fdf86bd4c7fc26d60540a6439b4d179dcbf7b91efb0ddc60dfbff9a148c6"
1345
+ ],
1346
+ [
1347
+ "78219ba049438385b829c13a4993874a4a326c4143de0dd581c7b9956f99b06",
1348
+ "5505f1268dcdd4ee01b77abac3bfdcbf3f0513ab097c69ff777b4a631aaf256"
1349
+ ],
1350
+ [
1351
+ "b81e924a86536dcf68bc5a2ca2065a61103ba6c9eb0ae4cf8cce9dbe286f15",
1352
+ "653a6dfb51acfe8a844fb8362795e5549d424aed88d3a090366a44f840b5b83"
1353
+ ],
1354
+ [
1355
+ "441c0d7b7aa705046dc0e07ba5f33a7d9df23f694a05192ff8c2d7be2aa3fdc",
1356
+ "4c06568c0902bb99d428bfa0a946ed0f0ca0a51fbf07cad88e06e9c78e38a59"
1357
+ ],
1358
+ [
1359
+ "2569c8c78b6d6b92533f29f767c95720d377fa63ad5a3b9827ee0a74b0488aa",
1360
+ "4b59c81d3cfe08834f946d9d57614f5366e0bcd9349475aaaebe01341196fe0"
1361
+ ],
1362
+ [
1363
+ "3f2fa285a0471647b214eac652bbad9d58a9f2dd2e812aff0210d0d8a6eb32f",
1364
+ "4cdb18e1c2848c2b52c1a6557165bd1a8f55c2f7562f5cc0b326f73c25b696c"
1365
+ ],
1366
+ [
1367
+ "5bb5141ab4fcc5290ae9151b8045a2cd8391547ce7b3b33cbbb10f8fb538092",
1368
+ "5a36bfd52acc6a83a9913b937ec086cc27fed030b5fa70dbc5d3c12c9515f56"
1369
+ ],
1370
+ [
1371
+ "3f3fed272edf91aa7f8ca5d70005d390fbc67830ffc69c5fa3ae17582d2771",
1372
+ "459057e0883c44d8776fa217405f443e5954f08c4a5db68e437becaa664a999"
1373
+ ],
1374
+ [
1375
+ "5237ca6656237a717a739a4509f70db1b9dedbb6cd232f60c9bd8c4563a6b1f",
1376
+ "56c7799dd02896dbe7d69dd8bb9718270549592099569d107b7b49c34bf5a49"
1377
+ ],
1378
+ [
1379
+ "1cf6b8499ac881e0b2fc7def9bc1a28937033b2fc52de99e75909a620c7a281",
1380
+ "5769cf4f735366fa386b6858043dc99a100f86fbc77b16d57d77766197ba27a"
1381
+ ],
1382
+ [
1383
+ "1b74b8a6b86dbf9638cdb0601e1a332b8d880753423d38c3394902c57f15e40",
1384
+ "6bb2dc10d2ecbb913219d0ebdc8d3337d644ed8b6c4e70637ef4c7e50887488"
1385
+ ],
1386
+ [
1387
+ "61e4da415661bba52a4737e2bcde1a837787c4796b2e1854778534f1582c29b",
1388
+ "27c43e632cb7652e8508c9c38e3b4ad0d3dd6ba748d42dc84ec2685e64b9aad"
1389
+ ],
1390
+ [
1391
+ "7c460a204d23f20ce86596dae6ac9b36734e4a9f7c5b43262c97a36c6a41c6e",
1392
+ "481a11f9300ab4c4bf6924c5ca884728cc361247377065920966785d043fbbf"
1393
+ ],
1394
+ [
1395
+ "124ff5e55e4effa40daa5b9618d75c49c8b6fad95cbe8c0bfdd83cb9bed8316",
1396
+ "33a2ea15d0f71f58a00de71acd7f22ccf9002115e49dd1f7631faa0d32f9987"
1397
+ ],
1398
+ [
1399
+ "61c9f8fc86715e95ff43583a865c5a6515f93381839d557ef884a68637eaf4c",
1400
+ "5877daaa42bbab9083b571e12648a9d62ced4470d71653092b6546f4a5acceb"
1401
+ ],
1402
+ [
1403
+ "70a6b9a9e5d1fcc07dd9ebef6d8f5fcf04c6cb34932d0fe2335330ac6dc8d3d",
1404
+ "3f0cbd332ac56922e886656bee74f6e9bb4bb88f7af7bba9098678af1f38fc"
1405
+ ],
1406
+ [
1407
+ "41db8a0f1ea78443a39e08a54323743c8897eed1ddc28f41aec6f2655040d9f",
1408
+ "7d4bf32f8f4719c2e4af8b7889f3b65cfdd033dc2f971798a12170f2b26efce"
1409
+ ],
1410
+ [
1411
+ "62f035e01acdfe841104942d6c8c07f0fbd618cb85998ea24bcc24cfac1f8",
1412
+ "1caa886104b7d753fda93645a746989794cd825c62473b526ea34b3d51b5771"
1413
+ ],
1414
+ [
1415
+ "441c6f016d270e86c19843727b83b864cec060cafc813b23d7e41e5abb1a60a",
1416
+ "29fece4e40400f3acae0586f4fc8ed535e805e472123ec38d662d8a0b01c086"
1417
+ ],
1418
+ [
1419
+ "2c791ba0fb0b66177815c98191fa6188dba9c795e34a7c3c8a19086215e3cee",
1420
+ "11123151389d4b330db6a665a560407e7cd8c3807c749e2b0cffd9c3074ba77"
1421
+ ],
1422
+ [
1423
+ "5292da4ca71ae75ed0554c267747e39c7a129b3b863e1af3ebb3e368439c4ea",
1424
+ "63af6a5016deea8cc674c44f16c63c1db31f09af4fb4d2ea7917c28116661fc"
1425
+ ],
1426
+ [
1427
+ "3367388d5d1b7758dc3d92e244f227bb8a54e3d9909e7b7dd62ab5965e3efc7",
1428
+ "7ffb4833071e4b03ea755ccb9938487a478248fe9b1158a08f1ac298801c092"
1429
+ ],
1430
+ [
1431
+ "95c863314b7f18090f8eee602403be823a367a1b416d54c32e5f914e67d922",
1432
+ "159c2824f899171deee23e0ed520d4825bd667983df0a8d45d3a1f7156d91f9"
1433
+ ],
1434
+ [
1435
+ "621c6e08b3c57404644ad49ac7629832c141273fa1f323781b3395393fe985c",
1436
+ "65d1eb0140652958c4371ebec791e03317d6b2e689d90e304666f1b610783dd"
1437
+ ],
1438
+ [
1439
+ "54313129bf13993952cd2b31ed06013aba85e74c1b8a00e062031f32188a84e",
1440
+ "680129efc9eb8ec07fc180e8f6877e5f0f9f44e3000a2c586ed4ce49d12a313"
1441
+ ],
1442
+ [
1443
+ "21ea57a1c8286bb45872e78617853c47b89091670ba51c124afa3362e7260d",
1444
+ "7087e5c1536df233ec9bfe2f983e8d7622892b9bf64c450c9823898e2cc2fc8"
1445
+ ],
1446
+ [
1447
+ "3793b05b99e7a57d88db4ed0dbc3b771285abcd9052da50f88595354409f3f3",
1448
+ "12164105041c056f127e737c7cd63981e05f246bd2b6b65d1f427019c7c3801"
1449
+ ],
1450
+ [
1451
+ "befd345cef5fcae22ac37dacd6b9128cc58cbba3e3fd774e11b421c2ba392",
1452
+ "6209d25f24f88f7876ca604db23d05f78e6b3b67fb033f2f1bee221f352b8c8"
1453
+ ],
1454
+ [
1455
+ "15fa536045fda4c65ff74f10b4e669ce88b9996c6772288289d3ad725987fa6",
1456
+ "30e0c2124a35e265e931ccc66ce5ac3697d982814beb407144ff6762cb691df"
1457
+ ],
1458
+ [
1459
+ "38b795bd77ac573576dc204857a488cac2cce19809882631ca2069598c577c8",
1460
+ "786ba555d55ebef688b068bb9186a34a08cb00bdfef51619bbf911890ae9a13"
1461
+ ],
1462
+ [
1463
+ "6c66853592196c3eb8d9526dc155205e2c64097adf8684bb0e15eb460ce1c72",
1464
+ "1bb4ebf654f4250c8dd1061a4e1b464b31a8a9999ac9960446ef8108a66871a"
1465
+ ],
1466
+ [
1467
+ "5b08dfbc87ad9c00b88e78816973ad2f9c10c70f2156908892cc7b7a2a1fd30",
1468
+ "1151f407a77e2556073173d8f5c9ff561d8a23742121ca15f7d0ac391af50ea"
1469
+ ],
1470
+ [
1471
+ "309190eba106aa6ead54b5ca5817969aa68b4b4c627700799a49fc6bdd32ba1",
1472
+ "505b6a2bc7b0d78ca6ce2abe7dfb7312369918a4599cccf8a615f6701cfd851"
1473
+ ],
1474
+ [
1475
+ "89cc205966af08acc8910d563af7443d5dfbb5d88dae79c013c678c65dcecc",
1476
+ "1f8cf955694b246a423ac725791231257b88936e00347ecaa1e17045c0ab540"
1477
+ ],
1478
+ [
1479
+ "480086b61a80c36cf1e1a350baf554e58ee8d9333186b70c9c512fb9e9d5a84",
1480
+ "511edfe58f8d36a6170df743731da1ff525cfd5108be20e30ac4183d1281570"
1481
+ ],
1482
+ [
1483
+ "3caf14fb1d2e90a13ad4eb091250fe37133aabf6029633e905e5a93ead41dbb",
1484
+ "49122aff6059dfda19e4b973aba5ebe3804c91728936c6381c1ed1ea9380920"
1485
+ ],
1486
+ [
1487
+ "66d1b8fb2cabc46cd79741ce1cb7326077ad8ea3227a6427244bdd3806bdadd",
1488
+ "4a52eb74f4d5371ba3265dffd61c844f9e68d4ff0b44dc4936182f9280bb66b"
1489
+ ],
1490
+ [
1491
+ "373330c5afd53c31257fcc9050fef873e15ea9f81d9810f30744309b04e02b3",
1492
+ "5889806607b3dc97a9c5b0c8a2f16d1792099a22866b879ca480cb89a11ef5c"
1493
+ ],
1494
+ [
1495
+ "26840d0ec69a22c6818ff64b8b14633b531508c866e21d1dc9239778ae9e8c7",
1496
+ "157971f9a6e3a24d3b307be0e7c8cd352e2eb5cad33cf276270c0f309ee63fc"
1497
+ ],
1498
+ [
1499
+ "ebb84848f1c38c19a754d1b5d9460e39624dadbb30800987c9419c0f933b9f",
1500
+ "517b297cf32f4064e6d6c8e761ba8db89809604a701c7b3aa1a9c6beb370ea7"
1501
+ ],
1502
+ [
1503
+ "25780380bc0795ed0dca727c55240f1d63593e552d224adb40df2d3721c0f66",
1504
+ "10215fb5a893e0275e9f1f66b217dde35addee91ed0e8f7d79531a2ff57b8c8"
1505
+ ],
1506
+ [
1507
+ "243e1581cd1abfbf18c31c19a4c3d1cedfe69a40bb57b607c9af2717eefc742",
1508
+ "1296c27929f14535718c3a4ebe045f00afdc60afc74c7d398d8ce1b6609dc0f"
1509
+ ],
1510
+ [
1511
+ "48babb8649e054bc8e0b902c89e6940c265f48464520649502ef1064eb94562",
1512
+ "3235be7852b0526d1a16f6969ec0e5b0e09cedaadc65863dea4e47f4f398264"
1513
+ ],
1514
+ [
1515
+ "592db7c27e63489ef4bcef2eafce89f40067cd9a1ba48bc3dc76b5fc62ad9ca",
1516
+ "48b7711b570cd9ac65910e75e752f4b751fdbfb4091a28f59b8c046d3d9f8bc"
1517
+ ],
1518
+ [
1519
+ "31d133456222586ae42a9ec7ce8539ee04afbe0b2ed00a2564dab0798d9b55d",
1520
+ "a77c52fa1fd718db5c83e7fda6d7d4d9aafef9ad95cad621470f2b753729e5"
1521
+ ],
1522
+ [
1523
+ "4651668379883521e7983aafcb93811b4a72ef2975b3277773746708ef3e3fc",
1524
+ "512507f3f544d80ba5d47f73b571881e8d70d7b1d305b9704bdad036b7abc47"
1525
+ ],
1526
+ [
1527
+ "26069e359b2e847affaef604f772f36224608b7642245d0e643889ed231bddc",
1528
+ "75ae1ec379f074ebc91270077c74b4d34347ce183b676b4dbe100bfff143b9e"
1529
+ ],
1530
+ [
1531
+ "3196d01d1fa11dc3803b4813c4bbc6326869f61410f2bd14bc0f570d875aebe",
1532
+ "20313217cac79875bd2a503db1e86d1e5559911667a02524759344468d9561d"
1533
+ ],
1534
+ [
1535
+ "483256607f75f06fb126addc60cadddd602154cc4782bcc08351a48745d0b97",
1536
+ "2950a7e500ebbe9775f08be37cc2e62ccf9030de18948d1bab07a4a9173f75d"
1537
+ ],
1538
+ [
1539
+ "65f07b6050a2fc6eebe2c29ffa62f764060f7f9d3c82d2cb5e4e368aaa442c9",
1540
+ "562c9654b646cb84a213b41de203c871b3eae0a05c9c105a66a53c319c06373"
1541
+ ],
1542
+ [
1543
+ "284870f6181c43f3b01d94baa9c5b6ada0deb861145523ad9169580eb7bed35",
1544
+ "5e03e6c40c1cfa3cafb01fd0622349871832a9d35499d06408a83edc1b76d02"
1545
+ ],
1546
+ [
1547
+ "32229810a52137f0e6c3d37595c46f6132822d4b05f42674b48d7a7ac3ad85",
1548
+ "7babde959a0cf2c53ee59fc52c77c3adf899453f077f441965629f9aead30cd"
1549
+ ],
1550
+ [
1551
+ "1ea8b98a6b85e74e0a2fbc18b206e290f3ed94ce99ca665e8e2351dfade990a",
1552
+ "478e93c4724115fb1648c8d5347422adbc1a0bbf962b2312e14aec80e1be742"
1553
+ ],
1554
+ [
1555
+ "270cbaa08c79140c85b864475a0bf569cc03ac785e57f543dc444f37ce746cf",
1556
+ "3a9b8d894016680ae9d1bf3deb931d8987d4d8d8bfed45b81ccc595ec79046b"
1557
+ ],
1558
+ [
1559
+ "6943922708b8ae5b40dd7031ef2e487abc4ac39a3591368285e83d6c9c51f4d",
1560
+ "5f157c37d09634e8cbfbef90ea50af59815d011e419a691c67ca3402b5efc33"
1561
+ ],
1562
+ [
1563
+ "48ac6a80979fab4912cf0cb557d917a0bd68825d8658ec100496eaae6ff62e1",
1564
+ "2b6931350ab183402e39476340eb1177b7006f7a552915581e29a79bd7203a0"
1565
+ ],
1566
+ [
1567
+ "e3adf9517d92ef22d1e2a787740a292ba32d5ca69faa9e8675f63ed816dce5",
1568
+ "36bccf69bb12dadd610145a3399213248d193660d8dc90a2e206f23bf2c7997"
1569
+ ],
1570
+ [
1571
+ "5e6c8ae5afb2fa470f767581f3d578cf6a49547e4b78665edfd45776948bef8",
1572
+ "6cbfc11953dd7e195d2ce74e52a60df524767b44c4608bdd755be4bc85eb74c"
1573
+ ],
1574
+ [
1575
+ "15a576a1242d39300f0db3ad770983825988da0457718ecd596c63a0a0eb4a6",
1576
+ "69a42e5f6f5a63349b57683a4609bba90f556a1680fa1ec3b02ee7d3211f903"
1577
+ ],
1578
+ [
1579
+ "274cd14e4fbf2ed07402e8ad8075b320c5f76b7ea45ea36af523e95ed63ab50",
1580
+ "6ca640f9557c5f2d8b27f6ce95b108880ff4e4816b26b70b6506114389ce656"
1581
+ ],
1582
+ [
1583
+ "4d8284e132e2fe81c5f71be1e3c79ab51b229e2c56c323e207cda179999d123",
1584
+ "116cfc00e9fbee1cf16af6282123cdf20eed13021c2037ef4c86f94eb6e6cba"
1585
+ ],
1586
+ [
1587
+ "4056194fb5643e97991942ef5b63cadd89080bf57a01489c4398aca03f0980a",
1588
+ "2e2cddb434fa6f6da7859c3d518f0ced8795eea043a6c9613fb3e020103339f"
1589
+ ],
1590
+ [
1591
+ "5d119d5c5ce532afc0875e0ee9b026d878c8773d34237f90a0d0670da6f01b3",
1592
+ "4a79fc025ce076b6a4742fbcc8cad313d0a8220c58024a41a5a674c0947e64b"
1593
+ ],
1594
+ [
1595
+ "11800ce4061d99b9d53fd4138802335258f7798c5a935c9979f5a949ce1d483",
1596
+ "36745a4741a5c7290eaa8f2a3f9ec955ccb7ca323272e5d35d35c2a724ffac8"
1597
+ ],
1598
+ [
1599
+ "4302525bceb97fa642fd5560a4a39fba3d2c06f68e6aff3332ff1854439ebb3",
1600
+ "e31edfd081ce82f8177b2d7d96e69851d09e908c2517114ffb37ee12c0ac64"
1601
+ ],
1602
+ [
1603
+ "2f5fcbb96f0a66fd3bdfbcc78bda361cb812570f50e7c476533d56eee01c0e3",
1604
+ "527428a34855b5695c479d8fb7e831a299f7897f36682a74169cc60d160df2d"
1605
+ ],
1606
+ [
1607
+ "52167df045ad0dc999b98de3d035aced9da4434211149b8cf4bf20e774580cf",
1608
+ "19051d2a1ad3fab190c5dfaf45188b49b4e90cca22aae54f0a785562d3d3f41"
1609
+ ],
1610
+ [
1611
+ "541b5332491dbdb2b6f6bccceb7634970c046963891fae936dd950f4432b961",
1612
+ "78fa54da996a51e3a9c06091d58c2405a806649da2bb1f323807c4eec50eda2"
1613
+ ],
1614
+ [
1615
+ "5f11e973da659b7738f87ca5bd4f3bd02207dd3c8d978f0d3e83fe81030febd",
1616
+ "137aba7027069f62d25caed416e13537687bb1428e71e5f0a0c52d52f2e65bc"
1617
+ ],
1618
+ [
1619
+ "15ec941ee6c2110b819b5541be52981c09d83484c9dc735c43f39f5778718b4",
1620
+ "4561826142dc5b56acfcf605a78a4090472bb61235bcd605a765e05d0a7e549"
1621
+ ],
1622
+ [
1623
+ "68ba398736d659522f484406110b43c68158bf4992094acf797a38979c587a4",
1624
+ "7c1d9e1702e28afddf22fed7a7a79df4315c174d0c6c4f4c75bc77d9b56777f"
1625
+ ],
1626
+ [
1627
+ "67889cea31c81a429fbae643a4fce0ecd690a5c32b99397e39ed6d7a08702df",
1628
+ "7ea277c80b671146c9e455b98f42f45b941ac95ca2d15c8fa9ea82ee9b45e01"
1629
+ ],
1630
+ [
1631
+ "596f2c68390ac26505d3c2eca5c77d46f8f3acbed192a2649d8c525a58d2334",
1632
+ "49f3bd8c62c610d5c19c52d970bde24b270c4ff7ae900453b909e72483974a0"
1633
+ ],
1634
+ [
1635
+ "567779fb8b0afe592cea284629e3621ccfae3c4d7d3dc559c9fed750591a395",
1636
+ "6010bdc33f1cdb374facefff537e7910b72a1120502f312a7ce41df0d552ddd"
1637
+ ],
1638
+ [
1639
+ "cebed0233e810aa6a29a8b0829d28f1c92f303d14dd73d6b12da98117dfc7",
1640
+ "4bdd51e1192a00df23aa8d0673e4915877ca41ddb8c9eaf21d39dd167fde7b7"
1641
+ ],
1642
+ [
1643
+ "4c7085f066adeb6781596771972b188177e63f2e2b3788d03e033cdd5af1f06",
1644
+ "2929ee89f525862b0cedb3ab9b5166e1680cb77fb4668f10a6a3d76b5434566"
1645
+ ],
1646
+ [
1647
+ "760e341bd836899c226176f47685f69438270c150c6fe7744cd723cd1e72359",
1648
+ "1bf09f2f1aac1a10ce8bdf20d5d178db747f01a4aa0aa8a5e4bfeef562cd94e"
1649
+ ],
1650
+ [
1651
+ "6016b94c00b54920027ef64902c61478244b1936337d2ad41d9a8d43dd6a4b2",
1652
+ "3bf3dd9bce7f6d6f120de87fcbce6219340b59c2c1d75ee0d45105d33aab1cd"
1653
+ ],
1654
+ [
1655
+ "4929e44ff692eb944d1045bee96e750219cda3bda0500029f0df49a1db30b5b",
1656
+ "2e138dcbd092242699004b4ce98764ffe4e892841f56830af298581cd1e523f"
1657
+ ],
1658
+ [
1659
+ "5972d0e526311bacb70a04e88969b6c63c7399b578f0dc28bbd00d65ef01da7",
1660
+ "76b22bca9ac12d26530e7b0757e646beb3bbc5680d0f3f82fb8ee57ed4b5e39"
1661
+ ],
1662
+ [
1663
+ "2ca0a42a26e26934ca2d48db960b4719113d87c5e57fb437d557c5eb4e03ac7",
1664
+ "62778c02561d4ec5d83a132afd7763a8349207c6b5d01fba70b56ba660cba2e"
1665
+ ],
1666
+ [
1667
+ "5137ee53f076e21a2c23da09f63c0d275408c31e4634a6b6373be5cf13e6c00",
1668
+ "14fb446c077beb78e04de3282a63bfde12f9af85caaca4ddfab506cee31c0c1"
1669
+ ],
1670
+ [
1671
+ "7d944853d1627b63f560aeda33acf640d35a4ee4d23a744957a2dae9d5b7c6c",
1672
+ "bcb411a210710acbcb9ea12680d89e3e4e652228b6786d3886e95f4d9e6970"
1673
+ ],
1674
+ [
1675
+ "37d412c2ffb173a728477446b60b2b702d07a5243cb5fc8963e623a5ee75843",
1676
+ "672c79968908f92cd0cb0b4c65ba86e8f359b015623a89441e1bf859bba84cb"
1677
+ ],
1678
+ [
1679
+ "5b37f472aa80398bff12cc74c8ee784c4fc89757292580d3a498bff17e9f114",
1680
+ "7d79da1aab9cfef58a5f3d1c9ec466956a45f8d2af0c1da6dd4c93f720fae6e"
1681
+ ],
1682
+ [
1683
+ "25c09b3f1188c562571536202eb0f5fc4b9a7590417b8ea58b4343685d88a63",
1684
+ "3d5b817c73b37e9a1d24ca923351359b42ced2f3cafbcac8c2d6322dc767bb"
1685
+ ],
1686
+ [
1687
+ "32e60904e73f9756f71e0a918d302aeca17cad4acacc81bab15702ab5ff78f0",
1688
+ "bcf4c0204f8275072f98a65b09ac58b87cdc9c70c4edfe99fe18870a3a5459"
1689
+ ],
1690
+ [
1691
+ "49c35575996c1517d2daed90d2fe4a58e674d6b4aaa7288d0642c8bf59e562f",
1692
+ "57eeee00adea4ca80eeabab57852cbf03f1a57e21872cd44221e0550b9193b8"
1693
+ ],
1694
+ [
1695
+ "10e1776b4c2a867bf1b028c6edec224cc6616c747e272f49e69b67b02a893dd",
1696
+ "8d45d62ec8e627b56950f2f7622a0438647f9e9f28e723e4a37cebc039a1b0"
1697
+ ],
1698
+ [
1699
+ "79a93a75ecbe943acc964fd39ecfc971dc6555b2bc335e7b53f52f4eb16cd36",
1700
+ "146132a68ce2ca8b48363612226771ac547eb3cf52b6eb7981718faac08aa3c"
1701
+ ],
1702
+ [
1703
+ "6b22d32e0590e169504e7f19864fd646d0994e7ed3e578a5b88f6e095913439",
1704
+ "68c3b22d859fb85e5c8fa0a8aea932285945b230957e603394333e9ad5acd82"
1705
+ ],
1706
+ [
1707
+ "71ce5ec8286eb8c93b8481c6d19cf0a288ef4da4397e9c80f65023e516bc097",
1708
+ "54470babc742780cd8a05499026e738ccbf81d4170d1731734de68a8e5b402c"
1709
+ ],
1710
+ [
1711
+ "27beb13a43bc6a1f6ce046da438b0beac5899ff4d57962dcfb6476b563f74b",
1712
+ "14074e9e93ee45394dfbe833998b9d1691961f8ba3166224b36404448c61bb3"
1713
+ ],
1714
+ [
1715
+ "6b1de6c8f161aa6509a1dcacf2c0aa1bcf6ee9d9b40e032a9d72f77a6fa298c",
1716
+ "5e9312eb5b59d6cbadd7d3dcbc39f1b5bd9a8346fdcfdf1107bada6f9cc048"
1717
+ ],
1718
+ [
1719
+ "32670fc3fa43bf39974ba72ea51f0d045d92d084a81fe5282dfc8309aa900b9",
1720
+ "518fee521bf1af62356aac3b7e53fdbf57121e030c6e9572b3de69912ca4eb4"
1721
+ ],
1722
+ [
1723
+ "4b9ca363eabed9c66091a347375f7065cd28f49f914447de7cc1461f1375f1e",
1724
+ "3a1a3a2e5e7e72476befe2571ece708052d740d02cbe6fed58740968ae609c4"
1725
+ ],
1726
+ [
1727
+ "4cc6da42863a3deca62fa218b7a3b50e034eb4bafd393eccba3f4cbe192ef10",
1728
+ "20bfa683c884f203713953b26d2821287ecd305fa2cb70570474533fc07f918"
1729
+ ],
1730
+ [
1731
+ "87705353c44a5ccec8de65cf5433be6b3d9bd21eea49b60e6c907cf1a67a6a",
1732
+ "112804b13eee56e3b01aff75fa08fa8374c44fc461aed8a30ad54acd09c24eb"
1733
+ ],
1734
+ [
1735
+ "6cf6eeeb9d339c0a05f72fd5af73fc7588e6d957100ee8999109437bc126cae",
1736
+ "54fa257cea22032eac272fcd034dadf2e00d602ef9e519cf7072023c130aad1"
1737
+ ],
1738
+ [
1739
+ "19b32925048c5519d929650c833661b452ef7be7963fab0b6b328ab7dd7a28a",
1740
+ "1bd0c14a10bf9b88ea61011c0b2e64d07da151c6203800d5a5d12063838a510"
1741
+ ],
1742
+ [
1743
+ "12a5fc5559428bc3b4eff97b21b63668b866e0722807f1db1f19696bacd9b0d",
1744
+ "4c2eb07f0c24047a3d73b560144f3fd32c99d6dbd9fc7cd2fd2a72a6e4b24c7"
1745
+ ],
1746
+ [
1747
+ "13662b7a7d390aa76eb86a7c3bff6d9913eb28db6bd1a7c42de5cdad2e35ce2",
1748
+ "40626aded7f56f82cc431ae30527b096f57fbfbc04d3e12a5abae3edf301cf1"
1749
+ ],
1750
+ [
1751
+ "255825bd49b8a2cce114360bd9c8fe8c641af64c8e7710107213cfcb006f43d",
1752
+ "3619cce4482335232f9e76a1460be9d296f2d468d26e4f95a78c71524fe59cc"
1753
+ ],
1754
+ [
1755
+ "7f83009eeed4f12f54d341bbf06066480cfcdf51dda103ac54d4bcecf6b3b31",
1756
+ "4269519d28faafd7fd68bebfd8404d71ba05d62c4bb6d65d24aa6802fb84ab6"
1757
+ ],
1758
+ [
1759
+ "2f325650eb316646b4eec903fe44828fcb11054f1bd42ca3a77f7e734110b35",
1760
+ "44f976082271016f9048e22c507d97d628722bb431f8d5cc1890524e6c386bf"
1761
+ ],
1762
+ [
1763
+ "750b166bb6edc0ee80fae39c7c106879036738df2d79fb2294e1c21e9a24d6b",
1764
+ "54f8aa297a1afafe2a17a3254f45861167414327e918d17003c6aad01d0b24c"
1765
+ ],
1766
+ [
1767
+ "3aedb10db9cf3285cdeee375879396fac1fb50dd259e1716f8c01e66f67ca72",
1768
+ "7feb9400f621f58c21601f23b7ec7c94a9b6b193c1cd74a8a60846aedadd359"
1769
+ ],
1770
+ [
1771
+ "4ab7151702de76faa493e7a0b1ac20ee4d10c33b83fec9477547cb1236973eb",
1772
+ "63f1f122e3ef3acc46b0915ac69c3f5772879799cad889a817f55f5853d1235"
1773
+ ],
1774
+ [
1775
+ "1675ead0d20e5bc3a7a7331999a87ac4c916ae29669e54197bb02aa6364520f",
1776
+ "4d1122da90d49e491922d9b533a6a668e2f65a2737ebb391ebb29fb7c1f8a9d"
1777
+ ],
1778
+ [
1779
+ "2f7148111ef53c613157aeec12e16a20f13481da4390b6ce18a85d1d8547087",
1780
+ "2eeda779ab395597651d2a0b833ccf53b10280750139916ae2baf4ec57c633d"
1781
+ ],
1782
+ [
1783
+ "4439c7810e7b2ba772b701ec3acdca0b80c9df23047710b87f7dc3f13b337d3",
1784
+ "5029cfe704c602a8a4662af0a5860ec03fb88f046d0e3400f2ce7638014c621"
1785
+ ],
1786
+ [
1787
+ "2248eec40b5732a6a488b681f093643af7937071bc73118acae295a32b51b05",
1788
+ "1577e4aec30a97b648de4d0b19cf8891151b4eb11f8de9c6d7312f091552e19"
1789
+ ],
1790
+ [
1791
+ "4738424e558d4e0d87a3124ca02ea24f0adc6b7a9768b0d3945ed2a6104857c",
1792
+ "33576f92aca3f0c8ae689c3c274c2de6b918940d86a6852e02fc99e35d1614"
1793
+ ],
1794
+ [
1795
+ "7829edd8b866ebf7baaf604ed13d19a9797578f44bbc51b1cd67ca53803e96b",
1796
+ "5559040a6083f2af1f9133ccaf5bc2ce06e56ddfc7dd410e9635c0116b62722"
1797
+ ],
1798
+ [
1799
+ "7f927b881f2cdc05e1a69e40bb714af47b630d1425f08ab5d574ee698f33d51",
1800
+ "26a465288e96572de303203bd38f4a03031e8158da0591cb037c0a5111d1056"
1801
+ ],
1802
+ [
1803
+ "36a65598552f8753580d1655417d645a140966e10a1e1663015f9fdfae44881",
1804
+ "33d5bbfaebf59eae72b89b1aea12ab2ba3c9617f8c3baed1ec16bdf668381b5"
1805
+ ],
1806
+ [
1807
+ "403becfa545c826782026ff409cc16c9d4fe428f1b5b6e630c92439d2fa5fd",
1808
+ "47bd6f2bf5d74f710ecb479c79b01fb774fbdad590e683a415cdedf33f71dc5"
1809
+ ],
1810
+ [
1811
+ "3a747826d241b877d3d56b16e0b810cf088eda4fd6048da174c9991a942a5eb",
1812
+ "2c7ba19b0a3486a2cdb84d4a388d34beb077a0e467ba44590166f93f6a09d2e"
1813
+ ],
1814
+ [
1815
+ "3d60cd375842714b37bda89dd1f13a7e0f3ff133b522209617d031bce05a537",
1816
+ "f77f216451ab01ad5226844d2162a7f32744688bcb4325445539e2ce5cec4"
1817
+ ],
1818
+ [
1819
+ "235bf66f67c9100e7f0e22bb299cdfaa603644b240e0770aec7e7fd163e2a65",
1820
+ "37110b3fa83ece3990afca2bea8d5ebb3c7aace60a0147f8e6ab733e2f2b4d5"
1821
+ ],
1822
+ [
1823
+ "3b796d4eb69a55471fa86108f787b3604874e92b6887a7667a6c2bfbbd9a42b",
1824
+ "4912d6dc0419732ef82cb3278415851d4e2d7ca89e0f4d7128cc9de51b810fe"
1825
+ ],
1826
+ [
1827
+ "48d53516dd51e49faa7ab46c8c10db1befd10f23c6a9d9bc3640a2f0da44518",
1828
+ "73a2fb3d064adadf21aa1362c04affc660598f38a9e069b3afb74d0a99ae9ee"
1829
+ ],
1830
+ [
1831
+ "48c32cff161ed145da0d5b73084897647abb777adf65738559ceab6939cf3e0",
1832
+ "3d99308978e828f857c382df32b472bda81e8ec8e30c8844077ba6d6d2ba903"
1833
+ ],
1834
+ [
1835
+ "2947ff091a8ec9684affbc9a62e09e598841c4a6dc638088492aa47dea57097",
1836
+ "19a2cc97975e547f97a4d02e42f89e6ced6f5a953cfccdec347867d26926541"
1837
+ ],
1838
+ [
1839
+ "1960d85f30475615f82484eba0bdafb7ea7cac3809f0518a757d66f02b01676",
1840
+ "36c8f77baabf0cc8805d993bbe62041fcf4e3239cf9d53278a4fbd91e75eeb7"
1841
+ ],
1842
+ [
1843
+ "2765f28074d21d5a055340b6d40092d2bbef807e02009fabfa08ec0b9bdf38b",
1844
+ "7fb189e0553d5df52b6843661814824b3f3cbebbd54988f042fb256c6bf30b"
1845
+ ],
1846
+ [
1847
+ "348836cb2aaa00212f4b1a4e2d7fc5417f246bf2fe5c9a16ebabda449e2e08a",
1848
+ "3f7276fd7d69e0d55ce5ee1d2d830534a27227fe0b6d8a36c93f9a78b872969"
1849
+ ],
1850
+ [
1851
+ "7afb9d34b6a42ea8c6d870e4b8191c274201dc1f93a1a2219a2392b7e345a31",
1852
+ "42bbc20dc7115e0758b364a110227b16b64ec58fc535ce5ff1a9ad8b8a09fdd"
1853
+ ],
1854
+ [
1855
+ "2cae0c2afee1767fd4c66f52e1f176d217e92e89cc19eb36d5a6c1715f641a",
1856
+ "5335efe2d9bc3667d25ea88bf76438a4d6ab9ba5c512f9da7d0529b79b62d83"
1857
+ ],
1858
+ [
1859
+ "1cc5fde334707723c3a06f00c106db88664284a2df47bb6b144d9f960aea3e2",
1860
+ "dbbf610d100316938bcd8bcd078513512ecb50d4579690dbefaa419c05980d"
1861
+ ],
1862
+ [
1863
+ "54e90cb8f3a2998d2675c5780679e06c0556b1e618f8fdf07f9a4b2466fbf1e",
1864
+ "16248676b6f06ec5e34994bc3115f85c8147b54f34d8500928f2fdc051e2089"
1865
+ ],
1866
+ [
1867
+ "525c70a2ba0dbdd68d75640f47f13d0d415ea595f7030f533f4625c2a46523b",
1868
+ "58292c8675e5e1a438f49e0c05648d9a7aa997f2f1fd77d5de1944afe5d7eea"
1869
+ ],
1870
+ [
1871
+ "54726d78d099007393348787a03107ab492e59690a46c87fb02ec554f2353bd",
1872
+ "53b54b77184ba75a3391e0ebfa6d6974db028f3f8e34bbd5460759a5848dd76"
1873
+ ],
1874
+ [
1875
+ "4ac81a66903537769d3aac6c483ccc08535cb767b6b5e1ec8017a7393ab70ae",
1876
+ "2cb22b77a8a05d26f11a4dec80eff292633aa05553a889c5ab16b6ac6e2ab17"
1877
+ ],
1878
+ [
1879
+ "21d0175349e21114988a2930b9a607d43245783cb4a0c984ce27f4c4206708",
1880
+ "59f1f49342cc5496213d3329bf4ca7fb0044337449c579bf53147a1dac9e67c"
1881
+ ],
1882
+ [
1883
+ "167f821b381f4c8adcc39789475fb55ba639e5124fe75f26dd61be396dd5e66",
1884
+ "22002c87d4cafb47ac9d27286d5cf5ff7a6715d69814118269b0729be9e4b3a"
1885
+ ],
1886
+ [
1887
+ "31010666c6db83a9f9e4db4c48173afd405783ac53852a6e38a8ff925528843",
1888
+ "1f466dc9b5d9094107c741dbf380f9fd98d8549cd50f67169901516f8cce74c"
1889
+ ],
1890
+ [
1891
+ "1ad3875769a5053388a86edc85dd80fdffbbda6a456aea497ff81a0f1f6707b",
1892
+ "2de7cdec5e2bad56a71bd2f33a4ae4c874e1ad4210a6ac32b443cfa34e85b1b"
1893
+ ],
1894
+ [
1895
+ "c489650fb7f459ce09cd05a456fc5a46b849b38a671298ed645bcdaab168b0",
1896
+ "45610d092b8af1c43ceed474cd17f7bbee65120aa6fa4d37f949e7e41f25327"
1897
+ ],
1898
+ [
1899
+ "394256a5ef4d7af5459587a0bd2edb8acaf5ecfef2563c9a04daf34a4abe4c6",
1900
+ "1ebee390dae1403c0c53994e1d064fa64e20fcb45392e209b2b99486a559ffd"
1901
+ ],
1902
+ [
1903
+ "410a1511fead6151e9bedb089b9832d0fe01fab76d3f8459929f767525aeb27",
1904
+ "361f0a5ffe09fcc3ad4eff3f5e89508ac247af80267100b69de3c59df561cfa"
1905
+ ],
1906
+ [
1907
+ "38cd437c9f659e110a869605c182ee9fdc26de36baf559d9229e258267bb734",
1908
+ "624b1128ea7739bf1cbd0e423af92a4884323c868d2ba0ee9d362946edee2d1"
1909
+ ],
1910
+ [
1911
+ "78b126e50b7042d2a019f95cb87a3213c664ca1bafe345999b1e9e2dac1e608",
1912
+ "19e398196b22f4488cbe854c614ad8c353839abc5ab3a4f3f5c03c16ba8a198"
1913
+ ],
1914
+ [
1915
+ "6d3a5ce91132f385a91823c5c8046c4b638f5fe63357424410d901457cdb867",
1916
+ "7b80bae16d2d487e122495174f7a70992bc5dafbed72bf84127ead7c57302bb"
1917
+ ],
1918
+ [
1919
+ "32d053a904dc4d88fbe7d0b96e0cbeca22a00aa5c79c753d52b0b60abf31602",
1920
+ "3af6a02e5cae6d6490354ae51185149e3fdb6d0d9caab90e95ff58aa0c40377"
1921
+ ],
1922
+ [
1923
+ "49b1fbff5bdb0aa6938b066dde0ed772c0d81f9eff52e7fe038b0ccbd78adb5",
1924
+ "1c6e57834eb14d507eed8b36c81ddf92fa91c242467061927a742fafa82b43d"
1925
+ ],
1926
+ [
1927
+ "2f28b8994ca6f234d9293d26196b43b9d1d5306844348c4a638102c05de85f5",
1928
+ "759cfb172eab065d477248b3569f4ff5791055f01e95fe71b94b8e615d73c96"
1929
+ ],
1930
+ [
1931
+ "3c2ee954ff534f856f59188fa0f29ed8a022aee0cac52d634f6dc58cd514d70",
1932
+ "22bd162e74925f0a876bd8a206b8767dfdd7c898576a73a490f138d9a7f99c6"
1933
+ ],
1934
+ [
1935
+ "5763a7cab001e1aaeabf9ab5b9b2fffe6cc2b299ab04ec4933da74d960e1ab",
1936
+ "715ee4f8ee93ab5a1dba00f0a6abc4eec47d49b61254cc27fc36a031e32f0f8"
1937
+ ],
1938
+ [
1939
+ "19976ad8d7b7f47c785408243a227401996b36e47c7a78a7bc7d4256233ba9a",
1940
+ "896b713c5d7777b0703821a73c1d9a4c3755501042120534ff13990975e1f5"
1941
+ ],
1942
+ [
1943
+ "61674b992c29827186cab5ff454758dbbed8e89bc23d0bd33193afccc3a04bc",
1944
+ "38e1020744c13903809ea30a0662fdb5226ae760cdcf10800faabec452e00f8"
1945
+ ],
1946
+ [
1947
+ "2ea2d48bcb83c0c9cda4efe11f07165cfcbc9ccd26526e5fb12556316d4b1df",
1948
+ "1d2d68b74ad384c5c4a9c85453104216357bfcdf635680b40215f0f800974cb"
1949
+ ],
1950
+ [
1951
+ "7881212050264c40c336ed3a15dd2cd868ec9a558f5b728869eab66e8b8ed54",
1952
+ "21aaefcc8ad8a161b8971d6880321781dbd939570c540da4c330922b8c81e9b"
1953
+ ],
1954
+ [
1955
+ "b6be88ce0461d20f59c5199573cda0170b61decf6e8e69a6d32f1695adc4ed",
1956
+ "5536e4808370716f2bb3423a9a49a38ddbfe91faf3b7a35eb53d3519238b6cf"
1957
+ ],
1958
+ [
1959
+ "e5972af1655eb6dde2e8c77cc58044299922441b5ee41ceaf5cafedc765bcc",
1960
+ "550282f37a4783dd60801c237045992d6fbe82a5902e7d837ea25f6f98c7b3a"
1961
+ ],
1962
+ [
1963
+ "7efc1aad1f580d8f50274f1c114c40056be19a8c96fa8c4cb5bf85e1e7f3e4",
1964
+ "2689f1c3898b114d668be6413643ee9f879913d40c262541fd0316264c60a4f"
1965
+ ],
1966
+ [
1967
+ "7939db98037f59b0113e9d60051f75ac9c3cfd1a3eb535c73e2d945068c6c5c",
1968
+ "410914ca8bbf3c65cdf3e9772ca790c19131c50068d34b7346c10260a578a8e"
1969
+ ],
1970
+ [
1971
+ "225b77ad00a2b83d26690190b74867326eca4f55bfbc3a13be036225ca3b1b5",
1972
+ "411faafef89042ce6beb64309fdaff70fa53e9d32d79a21e7f82f80e79ff05e"
1973
+ ],
1974
+ [
1975
+ "1501e64c99c8b6658b0479f2c05c9142d246eaabfccf2fcec8dc4399539d8e1",
1976
+ "3bab1e3339e42c9ee66c65b0b20236fdd9362d3ce786ad3a9779ab578af50a8"
1977
+ ],
1978
+ [
1979
+ "59b907b941f24fb8ea2458153e55f07534b388e835af7b69f3c9f54392a335",
1980
+ "1d5438c4f2f68a417f3d56f916d899a6ffe910f5f2989ca31687f1b10f60db8"
1981
+ ],
1982
+ [
1983
+ "2887d08a26f484546f360e33abbf7a998b7170a5b30070938b84f072c676bf3",
1984
+ "62a78e8d00e5d3a59e2fc424ffa08961567ba1ef24c8531cd7bceee6074a535"
1985
+ ],
1986
+ [
1987
+ "6e3cc8076b3d45377929033af35aab0c6d19ae4fd47c0daf844079ca04c46eb",
1988
+ "7b90f338e4d848aa8f19d0b5c3bca916a2a9024acbf14bddb278bca2aa39e5f"
1989
+ ],
1990
+ [
1991
+ "34844dacdd3ec54a3af328bb9d67715ab33425e194ac9977ca02ef22e8f7a88",
1992
+ "3c1affc6372f32a1634748124f9e1a03c4f0c993971da0dc28888b0801279d"
1993
+ ],
1994
+ [
1995
+ "436b192e03a49796cf9bc5e93c88268b71c9c24f9c3a85322bba634ebea309d",
1996
+ "67a8091ef69d62abcb28ce5df4dc7d53f8dc2b9690344f75ecd03a6d9386044"
1997
+ ],
1998
+ [
1999
+ "592d25b68baff87a6d7fd41ff0dadbddc1bd1316683de3b2d677501c0eb14e4",
2000
+ "27ad1e1099683f54589010faeefb19e38569ace43653be8787a42b0591e7bc5"
2001
+ ],
2002
+ [
2003
+ "89a5111ae911512ba62e87b97f643c0219702f235c70f62c6678a129302009",
2004
+ "557fa3d98e9ce7b83b47545013a4498f3de43787fb66b1a54521222242f7c1b"
2005
+ ],
2006
+ [
2007
+ "1c9b5e53377e72da5066cb08566bbf9ec31ec1877f455d932cd9b1aa375d34e",
2008
+ "72f79555a8bc207863f32d482fca54692825449fd8963fcea3de3a8183a739a"
2009
+ ],
2010
+ [
2011
+ "574a6e05eb14591729515be239ea8c1fa9e12d4049d42876f76c8ff37bca03",
2012
+ "5f99b3af43ca68c1c73e8190d5f73c8de162ba643d7d5f0cd73cfa8135db6d3"
2013
+ ],
2014
+ [
2015
+ "513fc5c2e16505b2b25a2f284e167d5401194bcac0dc3ecf8b7c9acb560daa1",
2016
+ "687ee7a1a8954d08d3856e1a16ded808e419e789736d3f55f79f7693bad69f5"
2017
+ ],
2018
+ [
2019
+ "53d48bd1205274b1c2b0a0ceb3d21c5fcd7c8892a784931603240b288a598b9",
2020
+ "35387abd7ea59c9b956de44d36533cad1f6668c438d666651695ff3862159be"
2021
+ ],
2022
+ [
2023
+ "213eb1ea99e08825110dd61094eb6e8145119dc1c507636f068730b1e086d44",
2024
+ "744f6853f4f02f4f042468d0739e0c9f64df720b87ed77d1979547084ef7a89"
2025
+ ],
2026
+ [
2027
+ "735ef017d091ca23264ad0aa7bb9b2be3309b4539605e79ed4a652ccb2fbe3c",
2028
+ "7f0ccc7a5747c4e921fff97d431169f690763427e2cfd1ad74d7a0308d7faa9"
2029
+ ],
2030
+ [
2031
+ "3f36babc5a30070b610ed97db44997e6d9115c9c0579ad8f75d295a17130001",
2032
+ "79047908a2474e32d5c712a07bf5c4ad522590bb5d6cefda410d30528e12ca8"
2033
+ ],
2034
+ [
2035
+ "51c04907ae88a5926b242fb2862cb1f2c651a94e6caad5bff8601c079fded74",
2036
+ "10a585a269f460aed43f54c7de13cdf623fc8de5957526997278be939ef32ad"
2037
+ ],
2038
+ [
2039
+ "c1e1bd626a735aa2c065831317217ecce68e377eb1f67e54ce2e97bc2ef2dc",
2040
+ "53c5af23a9b482f420be6dfd37b6886154cfd130794098e1f51c1885ac2556a"
2041
+ ],
2042
+ [
2043
+ "5aff3b30775ae4758e604a4a6262803a545f5ef4e7855fa245ac6a6431a9ece",
2044
+ "39a4799e5519047f29333bee9c86c99bfa8056d4aa381c396c4a44331fe795f"
2045
+ ],
2046
+ [
2047
+ "3d753e9723701a8e9d99b91bb93dee2eda7ffa5072fb2cd5c5fd99aebcdb299",
2048
+ "15798bf5c17d6d5880fed1553af32dd8d8baf2888c715a886575448a24c7975"
2049
+ ],
2050
+ [
2051
+ "6593e5078466b07a4222d2e544da826d2c583c9cc5f2eaea148b129b00d4aa0",
2052
+ "11b352b08a0a61d3cd67d1dc08069dec3bde907b3da0f56de5011b956bf8744"
2053
+ ],
2054
+ [
2055
+ "7a6eb353c5be9ff03fe4a06c01fb71aad2b38144179a291ebcbb2c2417cca65",
2056
+ "3de3ecb12f2fa699b46a9d399abf77ca17bebc3e491bfb2542dd0fba991e2bb"
2057
+ ],
2058
+ [
2059
+ "2c7ead583d6c32162091034a9eddfa775b4e84b8bdbea939edb2a80dcf64f6",
2060
+ "461790ce40d9c276d962b2a1e9a74d66e9d7335962e234e8a2fc6963d31722d"
2061
+ ],
2062
+ [
2063
+ "34285af023d9b4c2c2b88e8704bf2c05a9b553b00b2e70ff05f8c2970cb134f",
2064
+ "33fe678e7671760a83836107428dbade68c3593fbe568f3f8f1b2c568099c44"
2065
+ ],
2066
+ [
2067
+ "6222f720a24466263db6a11842f117fc4bb78da6705f140e48869db3e087441",
2068
+ "6eff5b9bf3aeedc962bc5a24b66e7bdad2153450ed53a058bf2c8dbf2907693"
2069
+ ],
2070
+ [
2071
+ "17c6ec5ea206eb97cbf53851e37ce391080e0d2bf1e5395610f79ab0503f7ce",
2072
+ "3adb71ca3523d88ceb1e365f12dfb24895453c14daf0046b2626cddadfdf5f7"
2073
+ ],
2074
+ [
2075
+ "70859f9771a713e54974ce11cdaf44b0dcc3e9befa0c0834908d877eeaafd27",
2076
+ "d18f794bf0cc0623b711e7450030424e52326c45ba9b03341883ae4828a5f8"
2077
+ ],
2078
+ [
2079
+ "2a820cfd0fd4ab0871e7b303cd545a3086caf8fa818c087a4017197da74efbf",
2080
+ "5f992683ff37f6c041b84bfc01503d333ac9763505cc8f69473da01812969d1"
2081
+ ],
2082
+ [
2083
+ "5b0526de2c07fe7cd73e3884f642d57a0ac5e13c68590ed03a14e530616e8c1",
2084
+ "eec69d0cbd92c9fca31ec967dba848bec368e792d6678797946a5e34fe3487"
2085
+ ],
2086
+ [
2087
+ "6cf6b3efee707210cb3a72f1e885c3d0953aefb43e5e148c740aa1641725c61",
2088
+ "911cb630b898e2c1a9115f9e45bafe3b819edfb1eab6e15612d14289939984"
2089
+ ],
2090
+ [
2091
+ "74e913de55f1e46143cb2ecfc580f8d3d3908f200281322b84e21c989cda293",
2092
+ "761d2736c9ac7670ba905bc2629c6c0dbe988820a4454ff415ba68710f7df92"
2093
+ ],
2094
+ [
2095
+ "44084305e0c911a40b7cbefe5f13cffe9a99375d1a584c4a2200958050af7a9",
2096
+ "249c83877371564708ea525b64b1e7e12785460d83364446531c9adcacba5f0"
2097
+ ],
2098
+ [
2099
+ "2bf71ad4d1bee1a67fb300477029f54bdb0e09f78bf2ac2e8afc7465a7adbcc",
2100
+ "6244dd6cad282539049be57487bfd9900bb0d5da805d02b535096368fcb4cd5"
2101
+ ],
2102
+ [
2103
+ "3a62d8f763b62def36e4089458046a49c5ecb91b861549530773e0548ff2bb",
2104
+ "6a10a03ba61e6ac657270465c09aa9526cf1ebe96bdecdf0e7000476a47b9eb"
2105
+ ],
2106
+ [
2107
+ "284eed3a17c51e0677d4fe897f056abe9def8af07a4630e6ca5723e2aa6677",
2108
+ "516a06ac1d5626ed03d2eee9de6f60f0311eca703a99b0fb31b9c66b01c27c7"
2109
+ ],
2110
+ [
2111
+ "2a2c63b16cccd685f731d06fe93ce2cffb358d34d03dda9a7368185c1eb0c32",
2112
+ "7180baca0ba81284809f92eca1654cd76b925a9242e5d5e0f18d0a55d13c6ec"
2113
+ ],
2114
+ [
2115
+ "5f9466017ec09769611389ea5370ad68dda936d3f5816c9e928ff9574abf9a7",
2116
+ "6619b5b145bb5f4f29deb7a4cd68ef4da3995312fa6537f0d01684da4267ece"
2117
+ ],
2118
+ [
2119
+ "74f229babe01b4962b3307589c1a13019134b1db6822698388bebb55d21c30f",
2120
+ "156ae857ab3279f754facba0db36398dffec8c31e5e160473198f2f891b7531"
2121
+ ],
2122
+ [
2123
+ "334b9fe3a5fd99bc966ddd1309698fd32afd1f235062f2c275b6616a185de45",
2124
+ "221a60053583cc0607f6f2e6966b62fc9dac00538bb7eb1148e007a92116d2"
2125
+ ],
2126
+ [
2127
+ "7ad710ba002a67c731efbaba2149d16fec5d2f7aa3d126fd9886172e9f4ea30",
2128
+ "3a10f8e902a7a13aec94d66415347e1314f9bac83a7db176096b809b25ffb86"
2129
+ ],
2130
+ [
2131
+ "4306dd0a184a3283c3097ff8f7434cec80912e9dc04b7df21ba73fda9f8e6d8",
2132
+ "6d42bd3d1a8dbddafd09e872e2aa3891ae79ec939dc1b382196bc21c4ab749"
2133
+ ],
2134
+ [
2135
+ "1c3f2124e1135c32a426d1d14e471edd9e0f2c7bd703ee123cbbd608e8c4be7",
2136
+ "3cc607a3c3f1ab68dd5fa56c65996002721b8ad8ad4b0dd9e5b1467d316583"
2137
+ ],
2138
+ [
2139
+ "294af33272ffcee0b56a436de1b73759cbddebef4c07888b42c2f92b0b68e1",
2140
+ "d837164311d5dca8d37b99ef9eb22708643c83d1cbdfe852f63ea07b06fbad"
2141
+ ],
2142
+ [
2143
+ "753bdb5439a19bbffdfa02b1dc24e8368f22d0a8276b109c11e6feb26f56f39",
2144
+ "6ed396231af93647633eab467f1a034f38e76823eb85baf97cae56e2dcd9f75"
2145
+ ],
2146
+ [
2147
+ "5674f0cb892b733fc0b50e121d8679afed0a925c32594cc65ffe83bebe7748e",
2148
+ "7fbf0325dd38dd94905adab2c52758552292a6a103d9edfcb11938828e828c8"
2149
+ ],
2150
+ [
2151
+ "4a8f053573a0a74251059d0229d89b6660407ba0b491779fd10f87a5117c81f",
2152
+ "21b70112485398bf67ec9d733df24a1df30dea718a93b786f41ed04e3ae3c5e"
2153
+ ],
2154
+ [
2155
+ "726c01ec4a08df8fc8de173311f50d4f3b97c5a9cf68c1536146f827db95ae8",
2156
+ "15013cafadefa7f1c4e4dfdd70bd4d3979dd18bd7f0332572ce2a3fd8773d12"
2157
+ ],
2158
+ [
2159
+ "38ac0fbfa98937257460db7e6645d7e5112b6fce7234813fc8a704e8ade8da2",
2160
+ "73c0109f86048aad08c443f781ae60ad13b99f7b9cfdf3128fe6d6eeb799a7b"
2161
+ ],
2162
+ [
2163
+ "6f6d3a38621582ace092eb50ecfe9eff265df141ebdcab8653299116fcea291",
2164
+ "4a1bf3f39bc919c8f1b720a0b1ce952cad17f2ba98308ee6b76dd9b6f3d7b75"
2165
+ ],
2166
+ [
2167
+ "6a307fc28e1df8d9ad01766419e097797d65cb674436fa1c8f012d3de2c2a1f",
2168
+ "26911a635ba824db004875d79dd84834a97ac12643e42829015bf88c1fd6f05"
2169
+ ],
2170
+ [
2171
+ "2a74860e3336d6db916555894cc8028f41508812925db1925457afe40257155",
2172
+ "5f8da573f4c39816ce2dba8a20224223a7cfec53117ec78973930c0e9b60244"
2173
+ ],
2174
+ [
2175
+ "4d2b49e1ed0799f719b8269f092cb489a466a645bc0ccabafdc678864c176d7",
2176
+ "5410083df7d256f18cbf5697ae5e52c31e075d8a3b27e21d6f5177ca882f6c1"
2177
+ ],
2178
+ [
2179
+ "110ecb9fbf6c333d168cee473cc5ad98809b6cb9eb5d1f6cd28ab5fab504fd3",
2180
+ "7e3c54d7533d9f8c3310f219dab0cc3ea4d39b418a748eeffd6bae2b8637a43"
2181
+ ],
2182
+ [
2183
+ "5be4d711b80da70e6d3ac493250bbfd16f20b25f31919b3a91cf14ffbac1096",
2184
+ "7f55a0919f082e8885f1515e83c5b39b6022404503507498e1b4422d79c43e2"
2185
+ ],
2186
+ [
2187
+ "2605125b95ca4ba93a21cbbba5762898a7cf9e988f07ab9e64cb3868e3b139d",
2188
+ "62f0ccf55b9fc0eaf9736fc8ee484e2acdbe259813af9803cf815829a5e9d3b"
2189
+ ],
2190
+ [
2191
+ "1092bbbf206f2a3068167c3dd99a72de31e206f6c504c071c8214d105ff814d",
2192
+ "309f489f68a62089f53b96df5d4fbc3ecc5a1a42eb7ece0e49bad17ad490ff4"
2193
+ ],
2194
+ [
2195
+ "2abdee9409d9c92559ca3f4e6bddd649c31aa09b90bfcb4a612af491241e18d",
2196
+ "3ffa8eac180a29de3f8a69efca84bac046f921f5725e96a6ff0530be1436aaf"
2197
+ ],
2198
+ [
2199
+ "376313f27d00bb1aae7ec991745efe6ee28c6b50de0c6cd9845cc4bb4f83543",
2200
+ "6a8e0a9389ba528b156fa94ac090a895d7b795818d4941c29415d9e2984c547"
2201
+ ],
2202
+ [
2203
+ "a80380c71bd466a696b3f0fbf02817c9459d9798f4f3899cf32edf647fe066",
2204
+ "6a09805e814e7cdfc76eba4b79f1df5ae559e0f0aba9f728d3cba4ea5c57471"
2205
+ ],
2206
+ [
2207
+ "223694b921d247d989a79b9b2b2f07496036c40cb043eab074a9d6a2cd2ffed",
2208
+ "c247217f1b1df35e30d9e15fdaadf42d6fb0edd3a5a7e265d4cdc426c120aa"
2209
+ ],
2210
+ [
2211
+ "102333620df278c6714bbc880fc087db58c1b9b4d77ed4d61b32a74bfc7c3e2",
2212
+ "6a77d37727ccf71c2caeb151faf4404d4b94e9047f9f0a7c3966367f3b53c65"
2213
+ ],
2214
+ [
2215
+ "891626f466536929ee7eadcd18b41925706dedab7528ed5f0f7abf039eb9d2",
2216
+ "5f73d11c141c933a35b2d0d06e5cbae614a20d17dc3b439f8bcdc3413c5ea37"
2217
+ ],
2218
+ [
2219
+ "215c23fd3f073f870e5e80303967391bf173f8adcdbeec72d131c557babc203",
2220
+ "10634332e9d9439a321597dc5b0fac9ff478834c3d6e281735f21a4a5e13266"
2221
+ ],
2222
+ [
2223
+ "21ea0bdc1332bc36e6aeb43be9071651c27e4ea2eadec636c8d818d4af72a36",
2224
+ "3a523d9643dccc6bb9c7c58413312caa3e60ba9c7c7f0177e0f3f469a3241e3"
2225
+ ],
2226
+ [
2227
+ "60deaed1bffb6190beed40caaf2bfab5e43d3707aff7ad3f278d571aa247eae",
2228
+ "e41f71ff254c1418e6a66992af307789fe04d6606fb2670900bb1a089fd879"
2229
+ ],
2230
+ [
2231
+ "1e1fac4a1646253fb1332fadc21fbdd3e3a24a840d129400f520ae4116a4cf5",
2232
+ "69c406f9f46576afad68808de0ab7e8922b6226af748e721d9097e21f1800f3"
2233
+ ],
2234
+ [
2235
+ "5db0ddcdf79ffe74d6454c12d2bc60b06776db03c75dc413f5be42ea9a91b5e",
2236
+ "134c3d6c699841f17306835bb193785228ffe7ab212a01a861c56b086a18cec"
2237
+ ],
2238
+ [
2239
+ "626814e320fb5bea505b248fd1c1389ad586c1cfe04923fe2f83173e915f4f8",
2240
+ "7ae407a926e887206a8b85cf485f1f327c9bb8ccbb6897024e2d122877d8ee0"
2241
+ ],
2242
+ [
2243
+ "23186237dc7d3b570cea645282ad4c359731bbfa54e7f036426bf6493812cd",
2244
+ "7d1fbab7e61a22d3b00993290d9f4cd5d820061573e787f66c2cff9a18e1eaf"
2245
+ ],
2246
+ [
2247
+ "54302dcb0e6cc1c6e44cca8f61a63bb2ca65048d53fb325d36ff12c49a58202",
2248
+ "1b77b3e37d13504b348046268d8ae25ce98ad783c25561a879dcc77e99c2426"
2249
+ ],
2250
+ [
2251
+ "13961b56b9fc0e412e468c385c22bd0680a25624ec211ffbb6bc877b2a6926c",
2252
+ "62f7f7792c77cd981fad13cb6863fe099c4d971c1374109185eae99943f16e9"
2253
+ ],
2254
+ [
2255
+ "47abd7308c70659af3f00fafe6837298af3cb530b6c2ba710ffd07a6bc1ae98",
2256
+ "75d0c8a7377aa9f0663d0c124a5659750847afabc29e39893fd27534a4a03cb"
2257
+ ],
2258
+ [
2259
+ "2c6276b764fb398fa555857dbe0ce0ec18fab7a233bf23851295739801f0585",
2260
+ "5d8f4897ce44007ec5bfcb9aeb78b8f6e1d40a514f72d213c9300d2770d2b8c"
2261
+ ]
2262
+ ];
2263
+
2264
+ // src/utils/ellipticCurve.ts
2265
+ var ellipticCurve_exports = {};
2266
+ __export(ellipticCurve_exports, {
2267
+ ec: () => ec,
2268
+ genKeyPair: () => genKeyPair,
2269
+ getKeyPair: () => getKeyPair,
2270
+ getKeyPairFromPublicKey: () => getKeyPairFromPublicKey,
2271
+ getStarkKey: () => getStarkKey,
2272
+ sign: () => sign,
2273
+ verify: () => verify
2274
+ });
2275
+ import elliptic from "elliptic";
2276
+ import hashJS from "hash.js";
2277
+ import assert2 from "minimalistic-assert";
2278
+ var { ec: EC, curves } = elliptic;
2279
+ var ec = new EC(
2280
+ new curves.PresetCurve({
2281
+ type: "short",
2282
+ prime: null,
2283
+ p: FIELD_PRIME,
2284
+ a: "00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000001",
2285
+ b: "06f21413 efbe40de 150e596d 72f7a8c5 609ad26c 15c915c1 f4cdfcb9 9cee9e89",
2286
+ n: EC_ORDER,
2287
+ hash: hashJS.sha256,
2288
+ gRed: false,
2289
+ g: CONSTANT_POINTS[1]
2290
+ })
2291
+ );
2292
+ function fixMessage(msg) {
2293
+ const pureHex = msg.replace(/^0x0*/, "");
2294
+ if (pureHex.length <= 62) {
2295
+ return pureHex;
2296
+ }
2297
+ assert2(pureHex.length === 63);
2298
+ return `${pureHex}0`;
2299
+ }
2300
+ var genKeyPair = ec.genKeyPair.bind(ec);
2301
+ function getKeyPair(pk) {
2302
+ const pkBn = toBN(pk);
2303
+ return ec.keyFromPrivate(removeHexPrefix(toHex(pkBn)), "hex");
2304
+ }
2305
+ function getStarkKey(keyPair) {
2306
+ keyPair.getPublic(true, "hex");
2307
+ return addHexPrefix(sanitizeBytes(keyPair.pub.getX().toString(16), 2));
2308
+ }
2309
+ function getKeyPairFromPublicKey(publicKey) {
2310
+ const publicKeyBn = toBN(publicKey);
2311
+ return ec.keyFromPublic(removeHexPrefix(toHex(publicKeyBn)), "hex");
2312
+ }
2313
+ function sign(keyPair, msgHash) {
2314
+ const msgHashBN = toBN(addHexPrefix(msgHash));
2315
+ assertInRange(msgHashBN, ZERO, toBN(addHexPrefix(MAX_ECDSA_VAL)), "msgHash");
2316
+ const msgSignature = keyPair.sign(fixMessage(msgHash));
2317
+ const { r, s } = msgSignature;
2318
+ const w = s.invm(ec.n);
2319
+ assertInRange(r, ONE, toBN(addHexPrefix(MAX_ECDSA_VAL)), "r");
2320
+ assertInRange(s, ONE, toBN(addHexPrefix(EC_ORDER)), "s");
2321
+ assertInRange(w, ONE, toBN(addHexPrefix(MAX_ECDSA_VAL)), "w");
2322
+ return [r.toString(), s.toString()];
2323
+ }
2324
+ function chunkArray(arr, n) {
2325
+ return Array(Math.ceil(arr.length / n)).fill("").map((_, i) => arr.slice(i * n, i * n + n));
2326
+ }
2327
+ function verify(keyPair, msgHash, sig) {
2328
+ const keyPairArray = Array.isArray(keyPair) ? keyPair : [keyPair];
2329
+ const msgHashBN = toBN(addHexPrefix(msgHash));
2330
+ assert2(sig.length % 2 === 0, "Signature must be an array of length dividable by 2");
2331
+ assertInRange(msgHashBN, ZERO, toBN(addHexPrefix(MAX_ECDSA_VAL)), "msgHash");
2332
+ assert2(keyPairArray.length === sig.length / 2, "Signature and keyPair length must be equal");
2333
+ return chunkArray(sig, 2).every(([r, s], i) => {
2334
+ const rBN = toBN(r);
2335
+ const sBN = toBN(s);
2336
+ const w = sBN.invm(ec.n);
2337
+ assertInRange(rBN, ONE, toBN(addHexPrefix(MAX_ECDSA_VAL)), "r");
2338
+ assertInRange(sBN, ONE, toBN(addHexPrefix(EC_ORDER)), "s");
2339
+ assertInRange(w, ONE, toBN(addHexPrefix(MAX_ECDSA_VAL)), "w");
2340
+ return ec.verify(fixMessage(msgHash), { r: rBN, s: sBN }, keyPairArray[i]) ?? false;
2341
+ });
2342
+ }
2343
+
2344
+ // src/utils/hash.ts
2345
+ var transactionVersion = 1;
2346
+ var feeTransactionVersion = toBN(2).pow(toBN(128)).add(toBN(transactionVersion));
2347
+ function keccakBn(value) {
2348
+ const hexWithoutPrefix = removeHexPrefix(toHex(toBN(value)));
2349
+ const evenHex = hexWithoutPrefix.length % 2 === 0 ? hexWithoutPrefix : `0${hexWithoutPrefix}`;
2350
+ return addHexPrefix(buf2hex(keccak256(hexToBytes(evenHex))));
2351
+ }
2352
+ function keccakHex(value) {
2353
+ return addHexPrefix(buf2hex(keccak256(utf8ToArray(value))));
2354
+ }
2355
+ function starknetKeccak(value) {
2356
+ return toBN(keccakHex(value)).and(MASK_250);
2357
+ }
2358
+ function getSelectorFromName(funcName) {
2359
+ return toHex(starknetKeccak(funcName));
2360
+ }
2361
+ function getSelector(value) {
2362
+ if (isHex(value)) {
2363
+ return value;
2364
+ }
2365
+ if (isStringWholeNumber(value)) {
2366
+ return toHexString(value);
2367
+ }
2368
+ return getSelectorFromName(value);
2369
+ }
2370
+ var constantPoints = CONSTANT_POINTS.map(
2371
+ (coords) => ec.curve.point(coords[0], coords[1])
2372
+ );
2373
+ function pedersen(input) {
2374
+ let point = constantPoints[0];
2375
+ for (let i = 0; i < input.length; i += 1) {
2376
+ let x = toBN(input[i]);
2377
+ assert3(x.gte(ZERO) && x.lt(toBN(addHexPrefix(FIELD_PRIME))), `Invalid input: ${input[i]}`);
2378
+ if (!x.isZero()) {
2379
+ for (let j = 0; j < 252; j += 1) {
2380
+ const pt = constantPoints[2 + i * 252 + j];
2381
+ assert3(!point.getX().eq(pt.getX()));
2382
+ if (x.and(ONE).toNumber() !== 0) {
2383
+ point = point.add(pt);
2384
+ }
2385
+ x = x.shrn(1);
2386
+ }
2387
+ }
2388
+ }
2389
+ return addHexPrefix(point.getX().toString(16));
2390
+ }
2391
+ function computeHashOnElements(data) {
2392
+ return [...data, data.length].reduce((x, y) => pedersen([x, y]), 0).toString();
2393
+ }
2394
+ function calculateTransactionHashCommon(txHashPrefix, version, contractAddress, entryPointSelector, calldata, maxFee, chainId, additionalData = []) {
2395
+ const calldataHash = computeHashOnElements(calldata);
2396
+ const dataToHash = [
2397
+ txHashPrefix,
2398
+ version,
2399
+ contractAddress,
2400
+ entryPointSelector,
2401
+ calldataHash,
2402
+ maxFee,
2403
+ chainId,
2404
+ ...additionalData
2405
+ ];
2406
+ return computeHashOnElements(dataToHash);
2407
+ }
2408
+ function calculateDeployTransactionHash(contractAddress, constructorCalldata, version, chainId) {
2409
+ return calculateTransactionHashCommon(
2410
+ "0x6465706c6f79" /* DEPLOY */,
2411
+ version,
2412
+ contractAddress,
2413
+ getSelectorFromName("constructor"),
2414
+ constructorCalldata,
2415
+ ZERO,
2416
+ chainId
2417
+ );
2418
+ }
2419
+ function calculateDeclareTransactionHash(classHash, senderAddress, version, maxFee, chainId, nonce) {
2420
+ return calculateTransactionHashCommon(
2421
+ "0x6465636c617265" /* DECLARE */,
2422
+ version,
2423
+ senderAddress,
2424
+ 0,
2425
+ [classHash],
2426
+ maxFee,
2427
+ chainId,
2428
+ [nonce]
2429
+ );
2430
+ }
2431
+ function calculateDeployAccountTransactionHash(contractAddress, classHash, constructorCalldata, salt, version, maxFee, chainId, nonce) {
2432
+ const calldata = [classHash, salt, ...constructorCalldata];
2433
+ return calculateTransactionHashCommon(
2434
+ "0x6465706c6f795f6163636f756e74" /* DEPLOY_ACCOUNT */,
2435
+ version,
2436
+ contractAddress,
2437
+ 0,
2438
+ calldata,
2439
+ maxFee,
2440
+ chainId,
2441
+ [nonce]
2442
+ );
2443
+ }
2444
+ function calculateTransactionHash(contractAddress, version, calldata, maxFee, chainId, nonce) {
2445
+ return calculateTransactionHashCommon(
2446
+ "0x696e766f6b65" /* INVOKE */,
2447
+ version,
2448
+ contractAddress,
2449
+ 0,
2450
+ calldata,
2451
+ maxFee,
2452
+ chainId,
2453
+ [nonce]
2454
+ );
2455
+ }
2456
+ function calculateContractAddressFromHash(salt, classHash, constructorCalldata, deployerAddress) {
2457
+ const constructorCalldataHash = computeHashOnElements(constructorCalldata);
2458
+ const CONTRACT_ADDRESS_PREFIX = toFelt("0x535441524b4e45545f434f4e54524143545f41444452455353");
2459
+ const dataToHash = [
2460
+ CONTRACT_ADDRESS_PREFIX,
2461
+ deployerAddress,
2462
+ salt,
2463
+ classHash,
2464
+ constructorCalldataHash
2465
+ ];
2466
+ return computeHashOnElements(dataToHash);
2467
+ }
2468
+
2469
+ // src/utils/json.ts
2470
+ var json_exports = {};
2471
+ __export(json_exports, {
2472
+ default: () => json_default,
2473
+ parse: () => parse,
2474
+ parseAlwaysAsBig: () => parseAlwaysAsBig,
2475
+ stringify: () => stringify,
2476
+ stringifyAlwaysAsBig: () => stringifyAlwaysAsBig
2477
+ });
2478
+ import Json from "json-bigint";
2479
+ var json = (alwaysParseAsBig) => {
2480
+ return Json({
2481
+ alwaysParseAsBig,
2482
+ useNativeBigInt: true,
2483
+ protoAction: "preserve",
2484
+ constructorAction: "preserve"
2485
+ });
2486
+ };
2487
+ var { parse, stringify } = json(false);
2488
+ var { parse: parseAlwaysAsBig, stringify: stringifyAlwaysAsBig } = json(true);
2489
+ var json_default = { parse, stringify };
2490
+
2491
+ // src/utils/stark.ts
2492
+ var stark_exports = {};
2493
+ __export(stark_exports, {
2494
+ compileCalldata: () => compileCalldata,
2495
+ compressProgram: () => compressProgram,
2496
+ estimatedFeeToMaxFee: () => estimatedFeeToMaxFee,
2497
+ formatSignature: () => formatSignature,
2498
+ makeAddress: () => makeAddress,
2499
+ randomAddress: () => randomAddress
2500
+ });
2501
+ import { gzip } from "pako";
2502
+ function compressProgram(jsonProgram) {
2503
+ const stringified = typeof jsonProgram === "string" ? jsonProgram : stringify(jsonProgram);
2504
+ const compressedProgram = gzip(stringified);
2505
+ return btoaUniversal(compressedProgram);
2506
+ }
2507
+ function randomAddress() {
2508
+ const randomKeyPair = genKeyPair();
2509
+ return getStarkKey(randomKeyPair);
2510
+ }
2511
+ function makeAddress(input) {
2512
+ return addHexPrefix(input).toLowerCase();
2513
+ }
2514
+ function formatSignature(sig) {
2515
+ if (!sig)
2516
+ return [];
2517
+ try {
2518
+ return sig.map((x) => toBN(x)).map((x) => x.toString());
2519
+ } catch (e) {
2520
+ return [];
2521
+ }
2522
+ }
2523
+ function compileCalldata(args) {
2524
+ return Object.values(args).flatMap((value) => {
2525
+ if (Array.isArray(value))
2526
+ return [toBN(value.length).toString(), ...value.map((x) => toBN(x).toString())];
2527
+ if (typeof value === "object" && "type" in value)
2528
+ return Object.entries(value).filter(([k]) => k !== "type").map(([, v]) => toBN(v).toString());
2529
+ return toBN(value).toString();
2530
+ });
2531
+ }
2532
+ function estimatedFeeToMaxFee(estimatedFee, overhead = 0.5) {
2533
+ const overHeadPercent = Math.round((1 + overhead) * 100);
2534
+ return toBN(estimatedFee).mul(toBN(overHeadPercent)).div(toBN(100));
2535
+ }
2536
+
2537
+ // src/utils/provider.ts
2538
+ function wait(delay) {
2539
+ return new Promise((res) => {
2540
+ setTimeout(res, delay);
2541
+ });
2542
+ }
2543
+ function parseCalldata(calldata = []) {
2544
+ return calldata.map((data) => {
2545
+ if (typeof data === "string" && isHex(data)) {
2546
+ return data;
2547
+ }
2548
+ return toHex(toBN(data));
2549
+ });
2550
+ }
2551
+ function parseContract(contract) {
2552
+ const parsedContract = typeof contract === "string" ? parse(contract) : contract;
2553
+ return {
2554
+ ...parsedContract,
2555
+ program: compressProgram(parsedContract.program)
2556
+ };
2557
+ }
2558
+
2559
+ // src/utils/responseParser/rpc.ts
2560
+ var RPCResponseParser = class {
2561
+ parseGetBlockResponse(res) {
2562
+ return {
2563
+ timestamp: res.timestamp,
2564
+ block_hash: res.block_hash,
2565
+ block_number: res.block_number,
2566
+ new_root: res.new_root,
2567
+ parent_hash: res.parent_hash,
2568
+ status: res.status,
2569
+ transactions: res.transactions
2570
+ };
2571
+ }
2572
+ parseGetTransactionResponse(res) {
2573
+ return {
2574
+ calldata: res.calldata || [],
2575
+ contract_address: res.contract_address,
2576
+ max_fee: res.max_fee,
2577
+ nonce: res.nonce,
2578
+ signature: res.signature || [],
2579
+ transaction_hash: res.transaction_hash,
2580
+ version: res.version
2581
+ };
2582
+ }
2583
+ parseFeeEstimateResponse(res) {
2584
+ return {
2585
+ overall_fee: toBN(res.overall_fee),
2586
+ gas_consumed: toBN(res.gas_consumed),
2587
+ gas_price: toBN(res.gas_price)
2588
+ };
2589
+ }
2590
+ parseCallContractResponse(res) {
2591
+ return {
2592
+ result: res
2593
+ };
2594
+ }
2595
+ };
2596
+
2597
+ // src/provider/utils.ts
2598
+ var Block = class {
2599
+ constructor(_identifier) {
2600
+ this.hash = null;
2601
+ this.number = null;
2602
+ this.tag = null;
2603
+ this.valueOf = () => this.number;
2604
+ this.toString = () => this.hash;
2605
+ this.setIdentifier = function(__identifier) {
2606
+ if (typeof __identifier === "string" && isHex(__identifier)) {
2607
+ this.hash = __identifier;
2608
+ } else if (typeof __identifier === "number") {
2609
+ this.number = __identifier;
2610
+ } else {
2611
+ this.tag = __identifier;
2612
+ }
2613
+ };
2614
+ this.setIdentifier(_identifier);
2615
+ }
2616
+ get queryIdentifier() {
2617
+ if (this.number !== null) {
2618
+ return `blockNumber=${this.number}`;
2619
+ }
2620
+ if (this.hash !== null) {
2621
+ return `blockHash=${this.hash}`;
2622
+ }
2623
+ return `blockNumber=${this.tag}`;
2624
+ }
2625
+ get identifier() {
2626
+ if (this.number !== null) {
2627
+ return { block_number: this.number };
2628
+ }
2629
+ if (this.hash !== null) {
2630
+ return { block_hash: this.hash };
2631
+ }
2632
+ return this.tag;
2633
+ }
2634
+ set identifier(_identifier) {
2635
+ this.setIdentifier(_identifier);
2636
+ }
2637
+ };
2638
+
2639
+ // src/provider/rpc.ts
2640
+ var RpcProvider = class {
2641
+ constructor(optionsOrProvider) {
2642
+ this.responseParser = new RPCResponseParser();
2643
+ const { nodeUrl, retries, headers } = optionsOrProvider;
2644
+ this.nodeUrl = nodeUrl;
2645
+ this.retries = retries || 200;
2646
+ this.headers = { "Content-Type": "application/json", ...headers };
2647
+ this.getChainId().then((chainId) => {
2648
+ this.chainId = chainId;
2649
+ });
2650
+ }
2651
+ fetch(method, params) {
2652
+ return fetchPonyfill_default(this.nodeUrl, {
2653
+ method: "POST",
2654
+ body: stringify({ method, jsonrpc: "2.0", params, id: 0 }),
2655
+ headers: this.headers
2656
+ });
2657
+ }
2658
+ errorHandler(error) {
2659
+ if (error) {
2660
+ const { code, message } = error;
2661
+ throw new Error(`${code}: ${message}`);
2662
+ }
2663
+ }
2664
+ async fetchEndpoint(method, params) {
2665
+ var _a;
2666
+ try {
2667
+ const rawResult = await this.fetch(method, params);
2668
+ const { error, result } = await rawResult.json();
2669
+ this.errorHandler(error);
2670
+ return result;
2671
+ } catch (error) {
2672
+ this.errorHandler((_a = error == null ? void 0 : error.response) == null ? void 0 : _a.data);
2673
+ throw error;
2674
+ }
2675
+ }
2676
+ async getChainId() {
2677
+ return this.fetchEndpoint("starknet_chainId");
2678
+ }
2679
+ async getBlock(blockIdentifier = "pending") {
2680
+ return this.getBlockWithTxHashes(blockIdentifier).then(
2681
+ this.responseParser.parseGetBlockResponse
2682
+ );
2683
+ }
2684
+ async getBlockHashAndNumber() {
2685
+ return this.fetchEndpoint("starknet_blockHashAndNumber");
2686
+ }
2687
+ async getBlockWithTxHashes(blockIdentifier = "pending") {
2688
+ const block_id = new Block(blockIdentifier).identifier;
2689
+ return this.fetchEndpoint("starknet_getBlockWithTxHashes", { block_id });
2690
+ }
2691
+ async getBlockWithTxs(blockIdentifier = "pending") {
2692
+ const block_id = new Block(blockIdentifier).identifier;
2693
+ return this.fetchEndpoint("starknet_getBlockWithTxs", { block_id });
2694
+ }
2695
+ async getClassHashAt(contractAddress, blockIdentifier = "pending") {
2696
+ const block_id = new Block(blockIdentifier).identifier;
2697
+ return this.fetchEndpoint("starknet_getClassHashAt", {
2698
+ block_id,
2699
+ contract_address: contractAddress
2700
+ });
2701
+ }
2702
+ async getNonce(contractAddress, blockIdentifier = "pending") {
2703
+ const block_id = new Block(blockIdentifier).identifier;
2704
+ return this.fetchEndpoint("starknet_getNonce", {
2705
+ contract_address: contractAddress,
2706
+ block_id
2707
+ });
2708
+ }
2709
+ async getPendingTransactions() {
2710
+ return this.fetchEndpoint("starknet_pendingTransactions");
2711
+ }
2712
+ async getProtocolVersion() {
2713
+ throw new Error("Pathfinder does not implement this rpc 0.1.0 method");
2714
+ }
2715
+ async getStateUpdate(blockIdentifier = "pending") {
2716
+ const block_id = new Block(blockIdentifier).identifier;
2717
+ return this.fetchEndpoint("starknet_getStateUpdate", { block_id });
2718
+ }
2719
+ async getStorageAt(contractAddress, key, blockIdentifier = "pending") {
2720
+ const parsedKey = toHex(toBN(key));
2721
+ const block_id = new Block(blockIdentifier).identifier;
2722
+ return this.fetchEndpoint("starknet_getStorageAt", {
2723
+ contract_address: contractAddress,
2724
+ key: parsedKey,
2725
+ block_id
2726
+ });
2727
+ }
2728
+ async getTransaction(txHash) {
2729
+ return this.getTransactionByHash(txHash).then(this.responseParser.parseGetTransactionResponse);
2730
+ }
2731
+ async getTransactionByHash(txHash) {
2732
+ return this.fetchEndpoint("starknet_getTransactionByHash", { transaction_hash: txHash });
2733
+ }
2734
+ async getTransactionByBlockIdAndIndex(blockIdentifier, index) {
2735
+ const block_id = new Block(blockIdentifier).identifier;
2736
+ return this.fetchEndpoint("starknet_getTransactionByBlockIdAndIndex", { block_id, index });
2737
+ }
2738
+ async getTransactionReceipt(txHash) {
2739
+ return this.fetchEndpoint("starknet_getTransactionReceipt", { transaction_hash: txHash });
2740
+ }
2741
+ async getClassByHash(classHash) {
2742
+ return this.getClass(classHash);
2743
+ }
2744
+ async getClass(classHash, blockIdentifier = "pending") {
2745
+ const block_id = new Block(blockIdentifier).identifier;
2746
+ return this.fetchEndpoint("starknet_getClass", { class_hash: classHash, block_id });
2747
+ }
2748
+ async getClassAt(contractAddress, blockIdentifier = "pending") {
2749
+ const block_id = new Block(blockIdentifier).identifier;
2750
+ return this.fetchEndpoint("starknet_getClassAt", {
2751
+ block_id,
2752
+ contract_address: contractAddress
2753
+ });
2754
+ }
2755
+ async getCode(_contractAddress, _blockIdentifier) {
2756
+ throw new Error("RPC does not implement getCode function");
2757
+ }
2758
+ async getEstimateFee(invocation, invocationDetails, blockIdentifier = "pending") {
2759
+ return this.getInvokeEstimateFee(invocation, invocationDetails, blockIdentifier);
2760
+ }
2761
+ async getInvokeEstimateFee(invocation, invocationDetails, blockIdentifier = "pending") {
2762
+ const block_id = new Block(blockIdentifier).identifier;
2763
+ return this.fetchEndpoint("starknet_estimateFee", {
2764
+ request: {
2765
+ type: "INVOKE",
2766
+ sender_address: invocation.contractAddress,
2767
+ calldata: parseCalldata(invocation.calldata),
2768
+ signature: bigNumberishArrayToHexadecimalStringArray(invocation.signature || []),
2769
+ version: toHex(toBN((invocationDetails == null ? void 0 : invocationDetails.version) || 0)),
2770
+ nonce: toHex(toBN(invocationDetails.nonce)),
2771
+ max_fee: toHex(toBN((invocationDetails == null ? void 0 : invocationDetails.maxFee) || 0))
2772
+ },
2773
+ block_id
2774
+ }).then(this.responseParser.parseFeeEstimateResponse);
2775
+ }
2776
+ async getDeclareEstimateFee({ senderAddress, contractDefinition, signature }, details, blockIdentifier = "pending") {
2777
+ const block_id = new Block(blockIdentifier).identifier;
2778
+ return this.fetchEndpoint("starknet_estimateFee", {
2779
+ request: {
2780
+ type: "DECLARE",
2781
+ contract_class: {
2782
+ program: contractDefinition.program,
2783
+ entry_points_by_type: contractDefinition.entry_points_by_type,
2784
+ abi: contractDefinition.abi
2785
+ },
2786
+ sender_address: senderAddress,
2787
+ signature: bigNumberishArrayToHexadecimalStringArray(signature || []),
2788
+ version: toHex(toBN((details == null ? void 0 : details.version) || 0)),
2789
+ nonce: toHex(toBN(details.nonce)),
2790
+ max_fee: toHex(toBN((details == null ? void 0 : details.maxFee) || 0))
2791
+ },
2792
+ block_id
2793
+ }).then(this.responseParser.parseFeeEstimateResponse);
2794
+ }
2795
+ async getDeployAccountEstimateFee({ classHash, constructorCalldata, addressSalt, signature }, details, blockIdentifier = "pending") {
2796
+ const block_id = new Block(blockIdentifier).identifier;
2797
+ return this.fetchEndpoint("starknet_estimateFee", {
2798
+ request: {
2799
+ type: "DEPLOY_ACCOUNT",
2800
+ constructor_calldata: bigNumberishArrayToHexadecimalStringArray(constructorCalldata || []),
2801
+ class_hash: toHex(toBN(classHash)),
2802
+ contract_address_salt: toHex(toBN(addressSalt || 0)),
2803
+ signature: bigNumberishArrayToHexadecimalStringArray(signature || []),
2804
+ version: toHex(toBN((details == null ? void 0 : details.version) || 0)),
2805
+ nonce: toHex(toBN(details.nonce)),
2806
+ max_fee: toHex(toBN((details == null ? void 0 : details.maxFee) || 0))
2807
+ },
2808
+ block_id
2809
+ }).then(this.responseParser.parseFeeEstimateResponse);
2810
+ }
2811
+ async declareContract({ contractDefinition, signature, senderAddress }, details) {
2812
+ return this.fetchEndpoint("starknet_addDeclareTransaction", {
2813
+ declare_transaction: {
2814
+ contract_class: {
2815
+ program: contractDefinition.program,
2816
+ entry_points_by_type: contractDefinition.entry_points_by_type,
2817
+ abi: contractDefinition.abi
2818
+ },
2819
+ type: "DECLARE",
2820
+ version: toHex(toBN(details.version || 0)),
2821
+ max_fee: toHex(toBN(details.maxFee || 0)),
2822
+ signature: bigNumberishArrayToHexadecimalStringArray(signature || []),
2823
+ sender_address: senderAddress,
2824
+ nonce: toHex(toBN(details.nonce))
2825
+ }
2826
+ });
2827
+ }
2828
+ async deployContract({ contract, constructorCalldata, addressSalt }, details) {
2829
+ const contractDefinition = parseContract(contract);
2830
+ return this.fetchEndpoint("starknet_addDeployTransaction", {
2831
+ deploy_transaction: {
2832
+ contract_address_salt: addressSalt ?? randomAddress(),
2833
+ constructor_calldata: bigNumberishArrayToHexadecimalStringArray(constructorCalldata ?? []),
2834
+ contract_class: {
2835
+ program: contractDefinition.program,
2836
+ entry_points_by_type: contractDefinition.entry_points_by_type,
2837
+ abi: contractDefinition.abi
2838
+ },
2839
+ type: "DEPLOY",
2840
+ version: toHex(toBN((details == null ? void 0 : details.version) || 0))
2841
+ }
2842
+ });
2843
+ }
2844
+ async deployAccountContract({ classHash, constructorCalldata, addressSalt, signature }, details) {
2845
+ return this.fetchEndpoint("starknet_addDeployAccountTransaction", {
2846
+ constructor_calldata: bigNumberishArrayToHexadecimalStringArray(constructorCalldata || []),
2847
+ class_hash: toHex(toBN(classHash)),
2848
+ contract_address_salt: toHex(toBN(addressSalt || 0)),
2849
+ type: "DEPLOY",
2850
+ max_fee: toHex(toBN(details.maxFee || 0)),
2851
+ version: toHex(toBN(details.version || 0)),
2852
+ signature: bigNumberishArrayToHexadecimalStringArray(signature || []),
2853
+ nonce: toHex(toBN(details.nonce))
2854
+ });
2855
+ }
2856
+ async invokeFunction(functionInvocation, details) {
2857
+ return this.fetchEndpoint("starknet_addInvokeTransaction", {
2858
+ invoke_transaction: {
2859
+ sender_address: functionInvocation.contractAddress,
2860
+ calldata: parseCalldata(functionInvocation.calldata),
2861
+ type: "INVOKE",
2862
+ max_fee: toHex(toBN(details.maxFee || 0)),
2863
+ version: toHex(toBN(details.version || 0)),
2864
+ signature: bigNumberishArrayToHexadecimalStringArray(functionInvocation.signature || []),
2865
+ nonce: toHex(toBN(details.nonce))
2866
+ }
2867
+ });
2868
+ }
2869
+ async callContract(call, blockIdentifier = "pending") {
2870
+ const block_id = new Block(blockIdentifier).identifier;
2871
+ const result = await this.fetchEndpoint("starknet_call", {
2872
+ request: {
2873
+ contract_address: call.contractAddress,
2874
+ entry_point_selector: getSelectorFromName(call.entrypoint),
2875
+ calldata: parseCalldata(call.calldata)
2876
+ },
2877
+ block_id
2878
+ });
2879
+ return this.responseParser.parseCallContractResponse(result);
2880
+ }
2881
+ async traceTransaction(transactionHash) {
2882
+ return this.fetchEndpoint("starknet_traceTransaction", { transaction_hash: transactionHash });
2883
+ }
2884
+ async traceBlockTransactions(blockHash) {
2885
+ return this.fetchEndpoint("starknet_traceBlockTransactions", { block_hash: blockHash });
2886
+ }
2887
+ async waitForTransaction(txHash, retryInterval = 8e3) {
2888
+ let { retries } = this;
2889
+ let onchain = false;
2890
+ while (!onchain) {
2891
+ const successStates = ["ACCEPTED_ON_L1", "ACCEPTED_ON_L2", "PENDING"];
2892
+ const errorStates = ["REJECTED", "NOT_RECEIVED"];
2893
+ await wait(retryInterval);
2894
+ try {
2895
+ const res = await this.getTransactionReceipt(txHash);
2896
+ if (!("status" in res)) {
2897
+ const error = new Error("pending transaction");
2898
+ throw error;
2899
+ }
2900
+ if (res.status && successStates.includes(res.status)) {
2901
+ onchain = true;
2902
+ } else if (res.status && errorStates.includes(res.status)) {
2903
+ const message = res.status;
2904
+ const error = new Error(message);
2905
+ error.response = res;
2906
+ throw error;
2907
+ }
2908
+ } catch (error) {
2909
+ if (error instanceof Error && errorStates.includes(error.message)) {
2910
+ throw error;
2911
+ }
2912
+ if (retries === 0) {
2913
+ throw new Error("waitForTransaction timedout with retries");
2914
+ }
2915
+ }
2916
+ retries -= 1;
2917
+ }
2918
+ await wait(retryInterval);
2919
+ }
2920
+ async getTransactionCount(blockIdentifier = "pending") {
2921
+ const block_id = new Block(blockIdentifier).identifier;
2922
+ return this.fetchEndpoint("starknet_getBlockTransactionCount", { block_id });
2923
+ }
2924
+ async getBlockNumber() {
2925
+ return this.fetchEndpoint("starknet_blockNumber");
2926
+ }
2927
+ async getSyncingStats() {
2928
+ return this.fetchEndpoint("starknet_syncing");
2929
+ }
2930
+ async getEvents(eventFilter) {
2931
+ return this.fetchEndpoint("starknet_getEvents", { filter: eventFilter });
2932
+ }
2933
+ };
2934
+
2935
+ // src/provider/sequencer.ts
2936
+ import urljoin2 from "url-join";
2937
+
2938
+ // src/utils/responseParser/index.ts
2939
+ var ResponseParser = class {
2940
+ };
2941
+
2942
+ // src/utils/responseParser/sequencer.ts
2943
+ var SequencerAPIResponseParser = class extends ResponseParser {
2944
+ parseGetBlockResponse(res) {
2945
+ return {
2946
+ ...res,
2947
+ new_root: res.state_root,
2948
+ parent_hash: res.parent_block_hash,
2949
+ transactions: Object.values(res.transactions).map((value) => "transaction_hash" in value && value.transaction_hash).filter(Boolean)
2950
+ };
2951
+ }
2952
+ parseGetTransactionResponse(res) {
2953
+ return {
2954
+ ...res,
2955
+ calldata: "calldata" in res.transaction ? res.transaction.calldata : [],
2956
+ contract_address: "contract_address" in res.transaction ? res.transaction.contract_address : void 0,
2957
+ contract_class: "contract_class" in res.transaction ? res.transaction.contract_class : void 0,
2958
+ entry_point_selector: "entry_point_selector" in res.transaction ? res.transaction.entry_point_selector : void 0,
2959
+ max_fee: "max_fee" in res.transaction ? res.transaction.max_fee : void 0,
2960
+ nonce: res.transaction.nonce,
2961
+ sender_address: "sender_address" in res.transaction ? res.transaction.sender_address : void 0,
2962
+ signature: "signature" in res.transaction ? res.transaction.signature : void 0,
2963
+ transaction_hash: "transaction_hash" in res.transaction ? res.transaction.transaction_hash : void 0,
2964
+ version: "version" in res.transaction ? res.transaction.version : void 0
2965
+ };
2966
+ }
2967
+ parseGetTransactionReceiptResponse(res) {
2968
+ return {
2969
+ transaction_hash: res.transaction_hash,
2970
+ status: res.status,
2971
+ messages_sent: res.l2_to_l1_messages,
2972
+ events: res.events,
2973
+ ..."block_hash" in res && { block_hash: res.block_hash },
2974
+ ..."block_number" in res && { block_number: res.block_number },
2975
+ ..."actual_fee" in res && { actual_fee: res.actual_fee },
2976
+ ..."transaction_index" in res && { transaction_index: res.transaction_index },
2977
+ ..."execution_resources" in res && { execution_resources: res.execution_resources },
2978
+ ..."l1_to_l2_consumed_message" in res && {
2979
+ l1_to_l2_consumed_message: res["l1_to_l2_consumed_message"]
2980
+ },
2981
+ ..."transaction_failure_reason" in res && {
2982
+ transaction_failure_reason: res.transaction_failure_reason
2983
+ }
2984
+ };
2985
+ }
2986
+ parseFeeEstimateResponse(res) {
2987
+ if ("overall_fee" in res) {
2988
+ let gasInfo = {};
2989
+ try {
2990
+ gasInfo = {
2991
+ gas_consumed: toBN(res.gas_usage),
2992
+ gas_price: toBN(res.gas_price)
2993
+ };
2994
+ } catch {
2995
+ }
2996
+ return {
2997
+ overall_fee: toBN(res.overall_fee),
2998
+ ...gasInfo
2999
+ };
3000
+ }
3001
+ return {
3002
+ overall_fee: toBN(res.amount)
3003
+ };
3004
+ }
3005
+ parseCallContractResponse(res) {
3006
+ return {
3007
+ result: res.result
3008
+ };
3009
+ }
3010
+ parseInvokeFunctionResponse(res) {
3011
+ return {
3012
+ transaction_hash: res.transaction_hash
3013
+ };
3014
+ }
3015
+ parseDeployContractResponse(res) {
3016
+ return {
3017
+ transaction_hash: res.transaction_hash,
3018
+ contract_address: res.address
3019
+ };
3020
+ }
3021
+ parseDeclareContractResponse(res) {
3022
+ return {
3023
+ transaction_hash: res.transaction_hash,
3024
+ class_hash: res.class_hash
3025
+ };
3026
+ }
3027
+ };
3028
+
3029
+ // src/utils/url.ts
3030
+ import urljoin from "url-join";
3031
+ var protocolAndDomainRE = /^(?:\w+:)?\/\/(\S+)$/;
3032
+ var localhostDomainRE = /^localhost[:?\d]*(?:[^:?\d]\S*)?$/;
3033
+ var nonLocalhostDomainRE = /^[^\s.]+\.\S{2,}$/;
3034
+ function isUrl(s) {
3035
+ if (!s) {
3036
+ return false;
3037
+ }
3038
+ if (typeof s !== "string") {
3039
+ return false;
3040
+ }
3041
+ const match = s.match(protocolAndDomainRE);
3042
+ if (!match) {
3043
+ return false;
3044
+ }
3045
+ const everythingAfterProtocol = match[1];
3046
+ if (!everythingAfterProtocol) {
3047
+ return false;
3048
+ }
3049
+ if (localhostDomainRE.test(everythingAfterProtocol) || nonLocalhostDomainRE.test(everythingAfterProtocol)) {
3050
+ return true;
3051
+ }
3052
+ return false;
3053
+ }
3054
+ function buildUrl(baseUrl, defaultPath, urlOrPath) {
3055
+ return isUrl(urlOrPath) ? urlOrPath : urljoin(baseUrl, urlOrPath ?? defaultPath);
3056
+ }
3057
+
3058
+ // src/provider/errors.ts
3059
+ import { CustomError } from "ts-custom-error";
3060
+ var GatewayError = class extends CustomError {
3061
+ constructor(message, errorCode) {
3062
+ super(message);
3063
+ this.errorCode = errorCode;
3064
+ }
3065
+ };
3066
+ var HttpError = class extends CustomError {
3067
+ constructor(message, errorCode) {
3068
+ super(message);
3069
+ this.errorCode = errorCode;
3070
+ }
3071
+ };
3072
+
3073
+ // src/provider/sequencer.ts
3074
+ function isEmptyQueryObject(obj) {
3075
+ return obj === void 0 || Object.keys(obj).length === 0 || Object.keys(obj).length === 1 && Object.entries(obj).every(([k, v]) => k === "blockIdentifier" && v === null);
3076
+ }
3077
+ var SequencerProvider = class {
3078
+ constructor(optionsOrProvider = { network: "goerli-alpha-2" }) {
3079
+ this.responseParser = new SequencerAPIResponseParser();
3080
+ if ("network" in optionsOrProvider) {
3081
+ this.baseUrl = SequencerProvider.getNetworkFromName(optionsOrProvider.network);
3082
+ this.chainId = SequencerProvider.getChainIdFromBaseUrl(this.baseUrl);
3083
+ this.feederGatewayUrl = urljoin2(this.baseUrl, "feeder_gateway");
3084
+ this.gatewayUrl = urljoin2(this.baseUrl, "gateway");
3085
+ } else {
3086
+ this.baseUrl = optionsOrProvider.baseUrl;
3087
+ this.feederGatewayUrl = buildUrl(
3088
+ this.baseUrl,
3089
+ "feeder_gateway",
3090
+ optionsOrProvider.feederGatewayUrl
3091
+ );
3092
+ this.gatewayUrl = buildUrl(this.baseUrl, "gateway", optionsOrProvider.gatewayUrl);
3093
+ this.chainId = optionsOrProvider.chainId ?? SequencerProvider.getChainIdFromBaseUrl(optionsOrProvider.baseUrl);
3094
+ this.headers = optionsOrProvider == null ? void 0 : optionsOrProvider.headers;
3095
+ }
3096
+ }
3097
+ static getNetworkFromName(name) {
3098
+ switch (name) {
3099
+ case "mainnet-alpha":
3100
+ return "https://alpha-mainnet.starknet.io";
3101
+ case "goerli-alpha":
3102
+ return "https://alpha4.starknet.io";
3103
+ case "goerli-alpha-2":
3104
+ return "https://alpha4-2.starknet.io";
3105
+ default:
3106
+ return "https://alpha4.starknet.io";
3107
+ }
3108
+ }
3109
+ static getChainIdFromBaseUrl(baseUrl) {
3110
+ try {
3111
+ const url = new URL(baseUrl);
3112
+ if (url.host.includes("mainnet.starknet.io")) {
3113
+ return "0x534e5f4d41494e" /* MAINNET */;
3114
+ }
3115
+ } catch {
3116
+ console.error(`Could not parse baseUrl: ${baseUrl}`);
3117
+ }
3118
+ return "0x534e5f474f45524c49" /* TESTNET */;
3119
+ }
3120
+ getFetchUrl(endpoint) {
3121
+ const gatewayUrlEndpoints = ["add_transaction"];
3122
+ return gatewayUrlEndpoints.includes(endpoint) ? this.gatewayUrl : this.feederGatewayUrl;
3123
+ }
3124
+ getFetchMethod(endpoint) {
3125
+ const postMethodEndpoints = [
3126
+ "add_transaction",
3127
+ "call_contract",
3128
+ "estimate_fee",
3129
+ "estimate_message_fee"
3130
+ ];
3131
+ return postMethodEndpoints.includes(endpoint) ? "POST" : "GET";
3132
+ }
3133
+ getQueryString(query) {
3134
+ if (isEmptyQueryObject(query)) {
3135
+ return "";
3136
+ }
3137
+ const queryString = Object.entries(query).map(([key, value]) => {
3138
+ if (key === "blockIdentifier") {
3139
+ const block = new Block(value);
3140
+ return `${block.queryIdentifier}`;
3141
+ }
3142
+ return `${key}=${value}`;
3143
+ }).join("&");
3144
+ return `?${queryString}`;
3145
+ }
3146
+ getHeaders(method) {
3147
+ if (method === "POST") {
3148
+ return {
3149
+ "Content-Type": "application/json",
3150
+ ...this.headers
3151
+ };
3152
+ }
3153
+ return this.headers;
3154
+ }
3155
+ async fetchEndpoint(endpoint, ...[query, request]) {
3156
+ const baseUrl = this.getFetchUrl(endpoint);
3157
+ const method = this.getFetchMethod(endpoint);
3158
+ const queryString = this.getQueryString(query);
3159
+ const headers = this.getHeaders(method);
3160
+ const url = urljoin2(baseUrl, endpoint, queryString);
3161
+ try {
3162
+ const res = await fetchPonyfill_default(url, {
3163
+ method,
3164
+ body: stringify(request),
3165
+ headers
3166
+ });
3167
+ const textResponse = await res.text();
3168
+ if (!res.ok) {
3169
+ let responseBody;
3170
+ try {
3171
+ responseBody = parse(textResponse);
3172
+ } catch {
3173
+ throw new HttpError(res.statusText, res.status);
3174
+ }
3175
+ const errorCode = responseBody.code || (responseBody == null ? void 0 : responseBody.status_code);
3176
+ throw new GatewayError(responseBody.message, errorCode);
3177
+ }
3178
+ if (endpoint === "estimate_fee") {
3179
+ return parseAlwaysAsBig(textResponse, (_, v) => {
3180
+ if (v && typeof v === "bigint") {
3181
+ return toBN(v.toString());
3182
+ }
3183
+ return v;
3184
+ });
3185
+ }
3186
+ return parse(textResponse);
3187
+ } catch (err) {
3188
+ if (err instanceof GatewayError || err instanceof HttpError) {
3189
+ throw err;
3190
+ }
3191
+ if (err instanceof Error) {
3192
+ throw Error(`Could not ${method} from endpoint \`${url}\`: ${err.message}`);
3193
+ }
3194
+ throw err;
3195
+ }
3196
+ }
3197
+ async getChainId() {
3198
+ return Promise.resolve(this.chainId);
3199
+ }
3200
+ async callContract({ contractAddress, entrypoint: entryPointSelector, calldata = [] }, blockIdentifier = "pending") {
3201
+ return this.fetchEndpoint(
3202
+ "call_contract",
3203
+ { blockIdentifier },
3204
+ {
3205
+ signature: [],
3206
+ contract_address: contractAddress,
3207
+ entry_point_selector: getSelectorFromName(entryPointSelector),
3208
+ calldata
3209
+ }
3210
+ ).then(this.responseParser.parseCallContractResponse);
3211
+ }
3212
+ async getBlock(blockIdentifier = "pending") {
3213
+ return this.fetchEndpoint("get_block", { blockIdentifier }).then(
3214
+ this.responseParser.parseGetBlockResponse
3215
+ );
3216
+ }
3217
+ async getNonce(contractAddress, blockIdentifier = "pending") {
3218
+ return this.fetchEndpoint("get_nonce", { contractAddress, blockIdentifier });
3219
+ }
3220
+ async getStorageAt(contractAddress, key, blockIdentifier = "pending") {
3221
+ const parsedKey = toBN(key).toString(10);
3222
+ return this.fetchEndpoint("get_storage_at", {
3223
+ blockIdentifier,
3224
+ contractAddress,
3225
+ key: parsedKey
3226
+ });
3227
+ }
3228
+ async getTransaction(txHash) {
3229
+ const txHashHex = toHex(toBN(txHash));
3230
+ return this.fetchEndpoint("get_transaction", { transactionHash: txHashHex }).then(
3231
+ (value) => this.responseParser.parseGetTransactionResponse(value)
3232
+ );
3233
+ }
3234
+ async getTransactionReceipt(txHash) {
3235
+ const txHashHex = toHex(toBN(txHash));
3236
+ return this.fetchEndpoint("get_transaction_receipt", { transactionHash: txHashHex }).then(
3237
+ this.responseParser.parseGetTransactionReceiptResponse
3238
+ );
3239
+ }
3240
+ async getClassAt(contractAddress, blockIdentifier = "pending") {
3241
+ return this.fetchEndpoint("get_full_contract", { blockIdentifier, contractAddress }).then(
3242
+ parseContract
3243
+ );
3244
+ }
3245
+ async getClassHashAt(contractAddress, blockIdentifier = "pending") {
3246
+ return this.fetchEndpoint("get_class_hash_at", { blockIdentifier, contractAddress });
3247
+ }
3248
+ async getClassByHash(classHash) {
3249
+ return this.fetchEndpoint("get_class_by_hash", { classHash }).then(parseContract);
3250
+ }
3251
+ async invokeFunction(functionInvocation, details) {
3252
+ return this.fetchEndpoint("add_transaction", void 0, {
3253
+ type: "INVOKE_FUNCTION",
3254
+ contract_address: functionInvocation.contractAddress,
3255
+ calldata: bigNumberishArrayToDecimalStringArray(functionInvocation.calldata ?? []),
3256
+ signature: bigNumberishArrayToDecimalStringArray(functionInvocation.signature ?? []),
3257
+ nonce: toHex(toBN(details.nonce)),
3258
+ max_fee: toHex(toBN(details.maxFee || 0)),
3259
+ version: toHex(toBN(details.version || 1))
3260
+ }).then(this.responseParser.parseInvokeFunctionResponse);
3261
+ }
3262
+ async deployContract({
3263
+ contract,
3264
+ constructorCalldata,
3265
+ addressSalt
3266
+ }) {
3267
+ const contractDefinition = parseContract(contract);
3268
+ return this.fetchEndpoint("add_transaction", void 0, {
3269
+ type: "DEPLOY",
3270
+ contract_address_salt: addressSalt ?? randomAddress(),
3271
+ constructor_calldata: bigNumberishArrayToDecimalStringArray(constructorCalldata ?? []),
3272
+ contract_definition: contractDefinition
3273
+ }).then(this.responseParser.parseDeployContractResponse);
3274
+ }
3275
+ async deployAccountContract({ classHash, constructorCalldata, addressSalt, signature }, details) {
3276
+ return this.fetchEndpoint("add_transaction", void 0, {
3277
+ type: "DEPLOY_ACCOUNT",
3278
+ contract_address_salt: addressSalt ?? randomAddress(),
3279
+ constructor_calldata: bigNumberishArrayToDecimalStringArray(constructorCalldata ?? []),
3280
+ class_hash: toHex(toBN(classHash)),
3281
+ max_fee: toHex(toBN(details.maxFee || 0)),
3282
+ version: toHex(toBN(details.version || 0)),
3283
+ nonce: toHex(toBN(details.nonce)),
3284
+ signature: bigNumberishArrayToDecimalStringArray(signature || [])
3285
+ }).then(this.responseParser.parseDeployContractResponse);
3286
+ }
3287
+ async declareContract({ senderAddress, contractDefinition, signature }, details) {
3288
+ return this.fetchEndpoint("add_transaction", void 0, {
3289
+ type: "DECLARE",
3290
+ contract_class: contractDefinition,
3291
+ nonce: toHex(toBN(details.nonce)),
3292
+ signature: bigNumberishArrayToDecimalStringArray(signature || []),
3293
+ sender_address: senderAddress,
3294
+ max_fee: toHex(toBN(details.maxFee || 0)),
3295
+ version: toHex(toBN(details.version || 1))
3296
+ }).then(this.responseParser.parseDeclareContractResponse);
3297
+ }
3298
+ async getEstimateFee(invocation, invocationDetails, blockIdentifier = "pending") {
3299
+ return this.getInvokeEstimateFee(invocation, invocationDetails, blockIdentifier);
3300
+ }
3301
+ async getInvokeEstimateFee(invocation, invocationDetails, blockIdentifier = "pending") {
3302
+ return this.fetchEndpoint(
3303
+ "estimate_fee",
3304
+ { blockIdentifier },
3305
+ {
3306
+ type: "INVOKE_FUNCTION",
3307
+ contract_address: invocation.contractAddress,
3308
+ calldata: invocation.calldata ?? [],
3309
+ signature: bigNumberishArrayToDecimalStringArray(invocation.signature || []),
3310
+ version: toHex(toBN((invocationDetails == null ? void 0 : invocationDetails.version) || 1)),
3311
+ nonce: toHex(toBN(invocationDetails.nonce))
3312
+ }
3313
+ ).then(this.responseParser.parseFeeEstimateResponse);
3314
+ }
3315
+ async getDeclareEstimateFee({ senderAddress, contractDefinition, signature }, details, blockIdentifier = "pending") {
3316
+ return this.fetchEndpoint(
3317
+ "estimate_fee",
3318
+ { blockIdentifier },
3319
+ {
3320
+ type: "DECLARE",
3321
+ sender_address: senderAddress,
3322
+ contract_class: contractDefinition,
3323
+ signature: bigNumberishArrayToDecimalStringArray(signature || []),
3324
+ version: toHex(toBN((details == null ? void 0 : details.version) || 1)),
3325
+ nonce: toHex(toBN(details.nonce))
3326
+ }
3327
+ ).then(this.responseParser.parseFeeEstimateResponse);
3328
+ }
3329
+ async getDeployAccountEstimateFee({ classHash, addressSalt, constructorCalldata, signature }, details, blockIdentifier = "pending") {
3330
+ return this.fetchEndpoint(
3331
+ "estimate_fee",
3332
+ { blockIdentifier },
3333
+ {
3334
+ type: "DEPLOY_ACCOUNT",
3335
+ class_hash: toHex(toBN(classHash)),
3336
+ constructor_calldata: bigNumberishArrayToDecimalStringArray(constructorCalldata || []),
3337
+ contract_address_salt: toHex(toBN(addressSalt || 0)),
3338
+ signature: bigNumberishArrayToDecimalStringArray(signature || []),
3339
+ version: toHex(toBN((details == null ? void 0 : details.version) || 0)),
3340
+ nonce: toHex(toBN(details.nonce))
3341
+ }
3342
+ ).then(this.responseParser.parseFeeEstimateResponse);
3343
+ }
3344
+ async getCode(contractAddress, blockIdentifier = "pending") {
3345
+ return this.fetchEndpoint("get_code", { contractAddress, blockIdentifier });
3346
+ }
3347
+ async waitForTransaction(txHash, retryInterval = 8e3) {
3348
+ let onchain = false;
3349
+ while (!onchain) {
3350
+ await wait(retryInterval);
3351
+ const res = await this.getTransactionStatus(txHash);
3352
+ const successStates = ["ACCEPTED_ON_L1", "ACCEPTED_ON_L2", "PENDING"];
3353
+ const errorStates = ["REJECTED", "NOT_RECEIVED"];
3354
+ if (successStates.includes(res.tx_status)) {
3355
+ onchain = true;
3356
+ } else if (errorStates.includes(res.tx_status)) {
3357
+ const message = res.tx_failure_reason ? `${res.tx_status}: ${res.tx_failure_reason.code}
3358
+ ${res.tx_failure_reason.error_message}` : res.tx_status;
3359
+ const error = new Error(message);
3360
+ error.response = res;
3361
+ throw error;
3362
+ }
3363
+ }
3364
+ }
3365
+ async getTransactionStatus(txHash) {
3366
+ const txHashHex = toHex(toBN(txHash));
3367
+ return this.fetchEndpoint("get_transaction_status", { transactionHash: txHashHex });
3368
+ }
3369
+ async getContractAddresses() {
3370
+ return this.fetchEndpoint("get_contract_addresses");
3371
+ }
3372
+ async getTransactionTrace(txHash) {
3373
+ const txHashHex = toHex(toBN(txHash));
3374
+ return this.fetchEndpoint("get_transaction_trace", { transactionHash: txHashHex });
3375
+ }
3376
+ async estimateMessageFee({ from_address, to_address, entry_point_selector, payload }, blockIdentifier = "pending") {
3377
+ const validCallL1Handler = {
3378
+ from_address: getDecimalString(from_address),
3379
+ to_address: getHexString(to_address),
3380
+ entry_point_selector: getSelector(entry_point_selector),
3381
+ payload: getHexStringArray(payload)
3382
+ };
3383
+ return this.fetchEndpoint("estimate_message_fee", { blockIdentifier }, validCallL1Handler);
3384
+ }
3385
+ };
3386
+
3387
+ // src/provider/default.ts
3388
+ var Provider = class {
3389
+ constructor(providerOrOptions) {
3390
+ if (providerOrOptions && "chainId" in providerOrOptions) {
3391
+ this.provider = providerOrOptions;
3392
+ } else if (providerOrOptions == null ? void 0 : providerOrOptions.rpc) {
3393
+ this.provider = new RpcProvider(providerOrOptions.rpc);
3394
+ } else if (providerOrOptions == null ? void 0 : providerOrOptions.sequencer) {
3395
+ this.provider = new SequencerProvider(providerOrOptions.sequencer);
3396
+ } else {
3397
+ this.provider = new SequencerProvider();
3398
+ }
3399
+ }
3400
+ get chainId() {
3401
+ return this.provider.chainId;
3402
+ }
3403
+ async getChainId() {
3404
+ return this.provider.getChainId();
3405
+ }
3406
+ async getBlock(blockIdentifier = "pending") {
3407
+ return this.provider.getBlock(blockIdentifier);
3408
+ }
3409
+ async getClassAt(contractAddress, blockIdentifier = "pending") {
3410
+ return this.provider.getClassAt(contractAddress, blockIdentifier);
3411
+ }
3412
+ async getClassHashAt(contractAddress, blockIdentifier = "pending") {
3413
+ return this.provider.getClassHashAt(contractAddress, blockIdentifier);
3414
+ }
3415
+ getClassByHash(classHash) {
3416
+ return this.provider.getClassByHash(classHash);
3417
+ }
3418
+ async getEstimateFee(invocationWithTxType, invocationDetails, blockIdentifier = "pending") {
3419
+ return this.provider.getEstimateFee(invocationWithTxType, invocationDetails, blockIdentifier);
3420
+ }
3421
+ async getInvokeEstimateFee(invocationWithTxType, invocationDetails, blockIdentifier = "pending") {
3422
+ return this.provider.getInvokeEstimateFee(
3423
+ invocationWithTxType,
3424
+ invocationDetails,
3425
+ blockIdentifier
3426
+ );
3427
+ }
3428
+ async getNonce(contractAddress, blockIdentifier) {
3429
+ return this.provider.getNonce(contractAddress, blockIdentifier);
3430
+ }
3431
+ async getStorageAt(contractAddress, key, blockIdentifier = "pending") {
3432
+ return this.provider.getStorageAt(contractAddress, key, blockIdentifier);
3433
+ }
3434
+ async getTransaction(txHash) {
3435
+ return this.provider.getTransaction(txHash);
3436
+ }
3437
+ async getTransactionReceipt(txHash) {
3438
+ return this.provider.getTransactionReceipt(txHash);
3439
+ }
3440
+ async callContract(request, blockIdentifier = "pending") {
3441
+ return this.provider.callContract(request, blockIdentifier);
3442
+ }
3443
+ async invokeFunction(functionInvocation, details) {
3444
+ return this.provider.invokeFunction(functionInvocation, details);
3445
+ }
3446
+ async deployContract(payload, details) {
3447
+ return this.provider.deployContract(payload, details);
3448
+ }
3449
+ async deployAccountContract(payload, details) {
3450
+ return this.provider.deployAccountContract(payload, details);
3451
+ }
3452
+ async declareContract(transaction, details) {
3453
+ return this.provider.declareContract(transaction, details);
3454
+ }
3455
+ async getDeclareEstimateFee(transaction, details, blockIdentifier = "pending") {
3456
+ return this.provider.getDeclareEstimateFee(transaction, details, blockIdentifier);
3457
+ }
3458
+ getDeployAccountEstimateFee(transaction, details, blockIdentifier = "pending") {
3459
+ return this.provider.getDeployAccountEstimateFee(transaction, details, blockIdentifier);
3460
+ }
3461
+ async getCode(contractAddress, blockIdentifier) {
3462
+ return this.provider.getCode(contractAddress, blockIdentifier);
3463
+ }
3464
+ async waitForTransaction(txHash, retryInterval) {
3465
+ return this.provider.waitForTransaction(txHash, retryInterval);
3466
+ }
3467
+ };
3468
+
3469
+ // src/provider/interface.ts
3470
+ var ProviderInterface = class {
3471
+ };
3472
+
3473
+ // src/provider/index.ts
3474
+ var defaultProvider = new Provider();
3475
+
3476
+ // src/contract/default.ts
3477
+ function parseFelt(candidate) {
3478
+ try {
3479
+ return toBN(candidate);
3480
+ } catch (e) {
3481
+ throw Error("Couldnt parse felt");
3482
+ }
3483
+ }
3484
+ function buildCall(contract, functionAbi) {
3485
+ return async function(...args) {
3486
+ return contract.call(functionAbi.name, args);
3487
+ };
3488
+ }
3489
+ function buildInvoke(contract, functionAbi) {
3490
+ return async function(...args) {
3491
+ const { inputs } = functionAbi;
3492
+ const inputsLength = inputs.reduce((acc, input) => {
3493
+ if (!/_len$/.test(input.name)) {
3494
+ return acc + 1;
3495
+ }
3496
+ return acc;
3497
+ }, 0);
3498
+ const options = {};
3499
+ if (inputsLength + 1 === args.length && typeof args[args.length - 1] === "object") {
3500
+ Object.assign(options, args.pop());
3501
+ }
3502
+ return contract.invoke(functionAbi.name, args, options);
3503
+ };
3504
+ }
3505
+ function buildDefault(contract, functionAbi) {
3506
+ if (functionAbi.stateMutability === "view") {
3507
+ return buildCall(contract, functionAbi);
3508
+ }
3509
+ return buildInvoke(contract, functionAbi);
3510
+ }
3511
+ function buildPopulate(contract, functionAbi) {
3512
+ return function(...args) {
3513
+ return contract.populate(functionAbi.name, args);
3514
+ };
3515
+ }
3516
+ function buildEstimate(contract, functionAbi) {
3517
+ return function(...args) {
3518
+ return contract.estimate(functionAbi.name, args);
3519
+ };
3520
+ }
3521
+ var Contract = class {
3522
+ constructor(abi, address, providerOrAccount = defaultProvider) {
3523
+ this.address = address && address.toLowerCase();
3524
+ this.providerOrAccount = providerOrAccount;
3525
+ this.abi = abi;
3526
+ this.structs = abi.filter((abiEntry) => abiEntry.type === "struct").reduce(
3527
+ (acc, abiEntry) => ({
3528
+ ...acc,
3529
+ [abiEntry.name]: abiEntry
3530
+ }),
3531
+ {}
3532
+ );
3533
+ Object.defineProperty(this, "functions", {
3534
+ enumerable: true,
3535
+ value: {},
3536
+ writable: false
3537
+ });
3538
+ Object.defineProperty(this, "callStatic", {
3539
+ enumerable: true,
3540
+ value: {},
3541
+ writable: false
3542
+ });
3543
+ Object.defineProperty(this, "populateTransaction", {
3544
+ enumerable: true,
3545
+ value: {},
3546
+ writable: false
3547
+ });
3548
+ Object.defineProperty(this, "estimateFee", {
3549
+ enumerable: true,
3550
+ value: {},
3551
+ writable: false
3552
+ });
3553
+ this.abi.forEach((abiElement) => {
3554
+ if (abiElement.type !== "function") {
3555
+ return;
3556
+ }
3557
+ const signature = abiElement.name;
3558
+ if (!this[signature]) {
3559
+ Object.defineProperty(this, signature, {
3560
+ enumerable: true,
3561
+ value: buildDefault(this, abiElement),
3562
+ writable: false
3563
+ });
3564
+ }
3565
+ if (!this.functions[signature]) {
3566
+ Object.defineProperty(this.functions, signature, {
3567
+ enumerable: true,
3568
+ value: buildDefault(this, abiElement),
3569
+ writable: false
3570
+ });
3571
+ }
3572
+ if (!this.callStatic[signature]) {
3573
+ Object.defineProperty(this.callStatic, signature, {
3574
+ enumerable: true,
3575
+ value: buildCall(this, abiElement),
3576
+ writable: false
3577
+ });
3578
+ }
3579
+ if (!this.populateTransaction[signature]) {
3580
+ Object.defineProperty(this.populateTransaction, signature, {
3581
+ enumerable: true,
3582
+ value: buildPopulate(this, abiElement),
3583
+ writable: false
3584
+ });
3585
+ }
3586
+ if (!this.estimateFee[signature]) {
3587
+ Object.defineProperty(this.estimateFee, signature, {
3588
+ enumerable: true,
3589
+ value: buildEstimate(this, abiElement),
3590
+ writable: false
3591
+ });
3592
+ }
3593
+ });
3594
+ }
3595
+ attach(address) {
3596
+ this.address = address;
3597
+ }
3598
+ connect(providerOrAccount) {
3599
+ this.providerOrAccount = providerOrAccount;
3600
+ }
3601
+ async deployed() {
3602
+ if (this.deployTransactionHash) {
3603
+ await this.providerOrAccount.waitForTransaction(this.deployTransactionHash);
3604
+ this.deployTransactionHash = void 0;
3605
+ }
3606
+ return this;
3607
+ }
3608
+ async call(method, args = [], {
3609
+ blockIdentifier = "pending"
3610
+ } = {}) {
3611
+ assert4(this.address !== null, "contract is not connected to an address");
3612
+ this.validateMethodAndArgs("CALL", method, args);
3613
+ const { inputs } = this.abi.find((abi) => abi.name === method);
3614
+ const calldata = this.compileCalldata(args, inputs);
3615
+ return this.providerOrAccount.callContract(
3616
+ {
3617
+ contractAddress: this.address,
3618
+ calldata,
3619
+ entrypoint: method
3620
+ },
3621
+ blockIdentifier
3622
+ ).then((x) => this.parseResponse(method, x.result));
3623
+ }
3624
+ invoke(method, args = [], options = {}) {
3625
+ assert4(this.address !== null, "contract is not connected to an address");
3626
+ this.validateMethodAndArgs("INVOKE", method, args);
3627
+ const { inputs } = this.abi.find((abi) => abi.name === method);
3628
+ const inputsLength = inputs.reduce((acc, input) => {
3629
+ if (!/_len$/.test(input.name)) {
3630
+ return acc + 1;
3631
+ }
3632
+ return acc;
3633
+ }, 0);
3634
+ if (args.length !== inputsLength) {
3635
+ throw Error(
3636
+ `Invalid number of arguments, expected ${inputsLength} arguments, but got ${args.length}`
3637
+ );
3638
+ }
3639
+ const calldata = this.compileCalldata(args, inputs);
3640
+ const invocation = {
3641
+ contractAddress: this.address,
3642
+ calldata,
3643
+ entrypoint: method
3644
+ };
3645
+ if ("execute" in this.providerOrAccount) {
3646
+ return this.providerOrAccount.execute(invocation, void 0, {
3647
+ maxFee: options.maxFee,
3648
+ nonce: options.nonce
3649
+ });
3650
+ }
3651
+ if (!options.nonce) {
3652
+ throw new Error(`Nonce is required when invoking a function without an account`);
3653
+ }
3654
+ console.warn(`Invoking ${method} without an account. This will not work on a public node.`);
3655
+ return this.providerOrAccount.invokeFunction(
3656
+ {
3657
+ ...invocation,
3658
+ signature: options.signature || []
3659
+ },
3660
+ {
3661
+ nonce: options.nonce
3662
+ }
3663
+ );
3664
+ }
3665
+ async estimate(method, args = []) {
3666
+ assert4(this.address !== null, "contract is not connected to an address");
3667
+ this.validateMethodAndArgs("INVOKE", method, args);
3668
+ const invocation = this.populateTransaction[method](...args);
3669
+ if ("estimateInvokeFee" in this.providerOrAccount) {
3670
+ return this.providerOrAccount.estimateInvokeFee(invocation);
3671
+ }
3672
+ throw Error("Contract must be connected to the account contract to estimate");
3673
+ }
3674
+ populate(method, args = []) {
3675
+ const { inputs } = this.abi.find((abi) => abi.name === method);
3676
+ return {
3677
+ contractAddress: this.address,
3678
+ entrypoint: method,
3679
+ calldata: this.compileCalldata(args, inputs)
3680
+ };
3681
+ }
3682
+ calculateStructMembers(struct) {
3683
+ return this.structs[struct].members.reduce((acc, member) => {
3684
+ if (member.type === "felt") {
3685
+ return acc + 1;
3686
+ }
3687
+ return acc + this.calculateStructMembers(member.type);
3688
+ }, 0);
3689
+ }
3690
+ validateMethodAndArgs(type, method, args = []) {
3691
+ const invokeableFunctionNames = this.abi.filter((abi) => {
3692
+ if (abi.type !== "function")
3693
+ return false;
3694
+ const isView = abi.stateMutability === "view";
3695
+ return type === "INVOKE" ? !isView : isView;
3696
+ }).map((abi) => abi.name);
3697
+ assert4(
3698
+ invokeableFunctionNames.includes(method),
3699
+ `${type === "INVOKE" ? "invokeable" : "viewable"} method not found in abi`
3700
+ );
3701
+ const methodAbi = this.abi.find(
3702
+ (abi) => abi.name === method && abi.type === "function"
3703
+ );
3704
+ let argPosition = 0;
3705
+ methodAbi.inputs.forEach((input) => {
3706
+ if (/_len$/.test(input.name)) {
3707
+ return;
3708
+ }
3709
+ if (input.type === "felt") {
3710
+ assert4(
3711
+ typeof args[argPosition] === "string" || typeof args[argPosition] === "number" || args[argPosition] instanceof BN2,
3712
+ `arg ${input.name} should be a felt (string, number, BigNumber)`
3713
+ );
3714
+ argPosition += 1;
3715
+ } else if (input.type in this.structs && typeof args[argPosition] === "object") {
3716
+ if (Array.isArray(args[argPosition])) {
3717
+ const structMembersLength = this.calculateStructMembers(input.type);
3718
+ assert4(
3719
+ args[argPosition].length === structMembersLength,
3720
+ `arg should be of length ${structMembersLength}`
3721
+ );
3722
+ } else {
3723
+ this.structs[input.type].members.forEach(({ name }) => {
3724
+ assert4(
3725
+ Object.keys(args[argPosition]).includes(name),
3726
+ `arg should have a property ${name}`
3727
+ );
3728
+ });
3729
+ }
3730
+ argPosition += 1;
3731
+ } else {
3732
+ assert4(Array.isArray(args[argPosition]), `arg ${input.name} should be an Array`);
3733
+ if (input.type === "felt*") {
3734
+ args[argPosition].forEach((felt) => {
3735
+ assert4(
3736
+ typeof felt === "string" || typeof felt === "number" || felt instanceof BN2,
3737
+ `arg ${input.name} should be an array of string, number or BigNumber`
3738
+ );
3739
+ });
3740
+ argPosition += 1;
3741
+ } else if (/\(felt/.test(input.type)) {
3742
+ const tupleLength = input.type.split(",").length;
3743
+ assert4(
3744
+ args[argPosition].length === tupleLength,
3745
+ `arg ${input.name} should have ${tupleLength} elements in tuple`
3746
+ );
3747
+ args[argPosition].forEach((felt) => {
3748
+ assert4(
3749
+ typeof felt === "string" || typeof felt === "number" || felt instanceof BN2,
3750
+ `arg ${input.name} should be an array of string, number or BigNumber`
3751
+ );
3752
+ });
3753
+ argPosition += 1;
3754
+ } else {
3755
+ const arrayType = input.type.replace("*", "");
3756
+ args[argPosition].forEach((struct) => {
3757
+ this.structs[arrayType].members.forEach(({ name }) => {
3758
+ if (Array.isArray(struct)) {
3759
+ const structMembersLength = this.calculateStructMembers(arrayType);
3760
+ assert4(
3761
+ struct.length === structMembersLength,
3762
+ `arg should be of length ${structMembersLength}`
3763
+ );
3764
+ } else {
3765
+ assert4(
3766
+ Object.keys(struct).includes(name),
3767
+ `arg ${input.name} should be an array of ${arrayType}`
3768
+ );
3769
+ }
3770
+ });
3771
+ });
3772
+ argPosition += 1;
3773
+ }
3774
+ }
3775
+ });
3776
+ }
3777
+ parseCalldataValue(element, type) {
3778
+ if (element === void 0) {
3779
+ throw Error("Missing element in calldata");
3780
+ }
3781
+ if (Array.isArray(element)) {
3782
+ const structMemberNum = this.calculateStructMembers(type);
3783
+ if (element.length !== structMemberNum) {
3784
+ throw Error("Missing element in calldata");
3785
+ }
3786
+ return element.map((el) => toFelt(el));
3787
+ }
3788
+ if (this.structs[type] && this.structs[type].members.length) {
3789
+ return this.structs[type].members.reduce((acc, member) => {
3790
+ const parsedData = this.parseCalldataValue(element[member.name], member.type);
3791
+ if (typeof parsedData === "string") {
3792
+ acc.push(parsedData);
3793
+ } else {
3794
+ acc.push(...parsedData);
3795
+ }
3796
+ return acc;
3797
+ }, []);
3798
+ }
3799
+ return toFelt(element);
3800
+ }
3801
+ parseResponseStruct(responseIterator, type) {
3802
+ if (type in this.structs && this.structs[type]) {
3803
+ return this.structs[type].members.reduce((acc, el) => {
3804
+ acc[el.name] = this.parseResponseStruct(responseIterator, el.type);
3805
+ return acc;
3806
+ }, {});
3807
+ }
3808
+ return parseFelt(responseIterator.next().value);
3809
+ }
3810
+ parseCalldataField(argsIterator, input) {
3811
+ const { name, type } = input;
3812
+ const { value } = argsIterator.next();
3813
+ const parsedCalldata = [];
3814
+ switch (true) {
3815
+ case /\*/.test(type):
3816
+ if (Array.isArray(value)) {
3817
+ parsedCalldata.push(toFelt(value.length));
3818
+ return value.reduce((acc, el) => {
3819
+ if (/felt/.test(type)) {
3820
+ acc.push(toFelt(el));
3821
+ } else {
3822
+ acc.push(...this.parseCalldataValue(el, type.replace("*", "")));
3823
+ }
3824
+ return acc;
3825
+ }, parsedCalldata);
3826
+ }
3827
+ throw Error(`Expected ${name} to be array`);
3828
+ case type in this.structs:
3829
+ return this.parseCalldataValue(value, type);
3830
+ case /\(felt/.test(type):
3831
+ if (Array.isArray(value)) {
3832
+ return value.map((el) => toFelt(el));
3833
+ }
3834
+ throw Error(`Expected ${name} to be array`);
3835
+ default:
3836
+ return toFelt(value);
3837
+ }
3838
+ }
3839
+ compileCalldata(args, inputs) {
3840
+ const argsIterator = args[Symbol.iterator]();
3841
+ return inputs.reduce((acc, input) => {
3842
+ if (/_len$/.test(input.name)) {
3843
+ return acc;
3844
+ }
3845
+ const parsedData = this.parseCalldataField(argsIterator, input);
3846
+ if (Array.isArray(parsedData)) {
3847
+ acc.push(...parsedData);
3848
+ } else {
3849
+ acc.push(parsedData);
3850
+ }
3851
+ return acc;
3852
+ }, []);
3853
+ }
3854
+ parseResponseField(responseIterator, output, parsedResult) {
3855
+ const { name, type } = output;
3856
+ const parsedDataArr = [];
3857
+ switch (true) {
3858
+ case /_len$/.test(name):
3859
+ return parseFelt(responseIterator.next().value).toNumber();
3860
+ case /\(felt/.test(type):
3861
+ return type.split(",").reduce((acc) => {
3862
+ acc.push(parseFelt(responseIterator.next().value));
3863
+ return acc;
3864
+ }, []);
3865
+ case /\*/.test(type):
3866
+ if (parsedResult && parsedResult[`${name}_len`]) {
3867
+ const arrLen = parsedResult[`${name}_len`];
3868
+ while (parsedDataArr.length < arrLen) {
3869
+ parsedDataArr.push(
3870
+ this.parseResponseStruct(responseIterator, output.type.replace("*", ""))
3871
+ );
3872
+ }
3873
+ }
3874
+ return parsedDataArr;
3875
+ case type in this.structs:
3876
+ return this.parseResponseStruct(responseIterator, type);
3877
+ default:
3878
+ return parseFelt(responseIterator.next().value);
3879
+ }
3880
+ }
3881
+ parseResponse(method, response) {
3882
+ const { outputs } = this.abi.find((abi) => abi.name === method);
3883
+ const responseIterator = response.flat()[Symbol.iterator]();
3884
+ const resultObject = outputs.flat().reduce((acc, output) => {
3885
+ acc[output.name] = this.parseResponseField(responseIterator, output, acc);
3886
+ if (acc[output.name] && acc[`${output.name}_len`]) {
3887
+ delete acc[`${output.name}_len`];
3888
+ }
3889
+ return acc;
3890
+ }, {});
3891
+ return Object.entries(resultObject).reduce((acc, [key, value]) => {
3892
+ acc.push(value);
3893
+ acc[key] = value;
3894
+ return acc;
3895
+ }, []);
3896
+ }
3897
+ };
3898
+
3899
+ // src/contract/interface.ts
3900
+ var ContractInterface = class {
3901
+ };
3902
+
3903
+ // src/contract/contractFactory.ts
3904
+ import assert5 from "minimalistic-assert";
3905
+ var ContractFactory = class {
3906
+ constructor(compiledContract, providerOrAccount = defaultProvider, abi = compiledContract.abi) {
3907
+ this.abi = abi;
3908
+ this.compiledContract = compiledContract;
3909
+ this.providerOrAccount = providerOrAccount;
3910
+ }
3911
+ async deploy(constructorCalldata, addressSalt) {
3912
+ const { contract_address, transaction_hash } = await this.providerOrAccount.deployContract({
3913
+ contract: this.compiledContract,
3914
+ constructorCalldata,
3915
+ addressSalt
3916
+ });
3917
+ assert5(Boolean(contract_address), "Deployment of the contract failed");
3918
+ const contractInstance = new Contract(
3919
+ this.compiledContract.abi,
3920
+ contract_address,
3921
+ this.providerOrAccount
3922
+ );
3923
+ contractInstance.deployTransactionHash = transaction_hash;
3924
+ return contractInstance;
3925
+ }
3926
+ connect(providerOrAccount) {
3927
+ this.providerOrAccount = providerOrAccount;
3928
+ return this;
3929
+ }
3930
+ attach(address) {
3931
+ return new Contract(this.abi, address, this.providerOrAccount);
3932
+ }
3933
+ };
3934
+
3935
+ // src/types/api/index.ts
3936
+ var api_exports = {};
3937
+
3938
+ // src/signer/interface.ts
3939
+ var SignerInterface = class {
3940
+ };
3941
+
3942
+ // src/utils/transaction.ts
3943
+ var transaction_exports = {};
3944
+ __export(transaction_exports, {
3945
+ fromCallsToExecuteCalldata: () => fromCallsToExecuteCalldata,
3946
+ fromCallsToExecuteCalldataWithNonce: () => fromCallsToExecuteCalldataWithNonce,
3947
+ transformCallsToMulticallArrays: () => transformCallsToMulticallArrays
3948
+ });
3949
+ var transformCallsToMulticallArrays = (calls) => {
3950
+ const callArray = [];
3951
+ const calldata = [];
3952
+ calls.forEach((call) => {
3953
+ const data = call.calldata || [];
3954
+ callArray.push({
3955
+ to: toBN(call.contractAddress).toString(10),
3956
+ selector: toBN(getSelectorFromName(call.entrypoint)).toString(10),
3957
+ data_offset: calldata.length.toString(),
3958
+ data_len: data.length.toString()
3959
+ });
3960
+ calldata.push(...data);
3961
+ });
3962
+ return {
3963
+ callArray,
3964
+ calldata: bigNumberishArrayToDecimalStringArray(calldata)
3965
+ };
3966
+ };
3967
+ var fromCallsToExecuteCalldata = (calls) => {
3968
+ const { callArray, calldata } = transformCallsToMulticallArrays(calls);
3969
+ return [
3970
+ callArray.length.toString(),
3971
+ ...callArray.map(
3972
+ ({ to, selector, data_offset, data_len }) => [to, selector, data_offset, data_len]
3973
+ ).flat(),
3974
+ calldata.length.toString(),
3975
+ ...calldata
3976
+ ];
3977
+ };
3978
+ var fromCallsToExecuteCalldataWithNonce = (calls, nonce) => {
3979
+ return [...fromCallsToExecuteCalldata(calls), toBN(nonce).toString()];
3980
+ };
3981
+
3982
+ // src/utils/typedData/index.ts
3983
+ var typedData_exports = {};
3984
+ __export(typedData_exports, {
3985
+ encodeData: () => encodeData,
3986
+ encodeType: () => encodeType,
3987
+ encodeValue: () => encodeValue,
3988
+ getDependencies: () => getDependencies,
3989
+ getMessageHash: () => getMessageHash,
3990
+ getStructHash: () => getStructHash,
3991
+ getTypeHash: () => getTypeHash,
3992
+ isMerkleTreeType: () => isMerkleTreeType,
3993
+ prepareSelector: () => prepareSelector
3994
+ });
3995
+
3996
+ // src/utils/merkle.ts
3997
+ var merkle_exports = {};
3998
+ __export(merkle_exports, {
3999
+ MerkleTree: () => MerkleTree,
4000
+ proofMerklePath: () => proofMerklePath
4001
+ });
4002
+ var MerkleTree = class {
4003
+ constructor(leafHashes) {
4004
+ this.branches = [];
4005
+ this.leaves = leafHashes;
4006
+ this.root = this.build(leafHashes);
4007
+ }
4008
+ build(leaves) {
4009
+ if (leaves.length === 1) {
4010
+ return leaves[0];
4011
+ }
4012
+ if (leaves.length !== this.leaves.length) {
4013
+ this.branches.push(leaves);
4014
+ }
4015
+ const newLeaves = [];
4016
+ for (let i = 0; i < leaves.length; i += 2) {
4017
+ if (i + 1 === leaves.length) {
4018
+ newLeaves.push(MerkleTree.hash(leaves[i], "0x0"));
4019
+ } else {
4020
+ newLeaves.push(MerkleTree.hash(leaves[i], leaves[i + 1]));
4021
+ }
4022
+ }
4023
+ return this.build(newLeaves);
4024
+ }
4025
+ static hash(a, b) {
4026
+ const [aSorted, bSorted] = [toBN(a), toBN(b)].sort((x, y) => x.gte(y) ? 1 : -1);
4027
+ return pedersen([aSorted, bSorted]);
4028
+ }
4029
+ getProof(leaf, branch = this.leaves, hashPath = []) {
4030
+ const index = branch.indexOf(leaf);
4031
+ if (index === -1) {
4032
+ throw new Error("leaf not found");
4033
+ }
4034
+ if (branch.length === 1) {
4035
+ return hashPath;
4036
+ }
4037
+ const isLeft = index % 2 === 0;
4038
+ const neededBranch = (isLeft ? branch[index + 1] : branch[index - 1]) ?? "0x0";
4039
+ const newHashPath = [...hashPath, neededBranch];
4040
+ const currentBranchLevelIndex = this.leaves.length === branch.length ? -1 : this.branches.findIndex((b) => b.length === branch.length);
4041
+ const nextBranch = this.branches[currentBranchLevelIndex + 1] ?? [this.root];
4042
+ return this.getProof(
4043
+ MerkleTree.hash(isLeft ? leaf : neededBranch, isLeft ? neededBranch : leaf),
4044
+ nextBranch,
4045
+ newHashPath
4046
+ );
4047
+ }
4048
+ };
4049
+ function proofMerklePath(root, leaf, path) {
4050
+ if (path.length === 0) {
4051
+ return root === leaf;
4052
+ }
4053
+ const [next, ...rest] = path;
4054
+ return proofMerklePath(root, MerkleTree.hash(leaf, next), rest);
4055
+ }
4056
+
4057
+ // src/utils/shortString.ts
4058
+ var shortString_exports = {};
4059
+ __export(shortString_exports, {
4060
+ decodeShortString: () => decodeShortString,
4061
+ encodeShortString: () => encodeShortString,
4062
+ isASCII: () => isASCII,
4063
+ isShortString: () => isShortString
4064
+ });
4065
+ function isASCII(str) {
4066
+ return /^[\x00-\x7F]*$/.test(str);
4067
+ }
4068
+ function isShortString(str) {
4069
+ return str.length <= 31;
4070
+ }
4071
+ function encodeShortString(str) {
4072
+ if (!isASCII(str))
4073
+ throw new Error(`${str} is not an ASCII string`);
4074
+ if (!isShortString(str))
4075
+ throw new Error(`${str} is too long`);
4076
+ return addHexPrefix(str.replace(/./g, (char) => char.charCodeAt(0).toString(16)));
4077
+ }
4078
+ function decodeShortString(str) {
4079
+ return removeHexPrefix(str).replace(/.{2}/g, (hex) => String.fromCharCode(parseInt(hex, 16)));
4080
+ }
4081
+
4082
+ // src/utils/typedData/utils.ts
4083
+ var validateTypedData = (data) => {
4084
+ const typedData = data;
4085
+ const valid = Boolean(typedData.types && typedData.primaryType && typedData.message);
4086
+ return valid;
4087
+ };
4088
+
4089
+ // src/utils/typedData/index.ts
4090
+ function getHex(value) {
4091
+ try {
4092
+ return toHex(toBN(value));
4093
+ } catch (e) {
4094
+ if (typeof value === "string") {
4095
+ return toHex(toBN(encodeShortString(value)));
4096
+ }
4097
+ throw new Error(`Invalid BigNumberish: ${value}`);
4098
+ }
4099
+ }
4100
+ function prepareSelector(selector) {
4101
+ return isHex(selector) ? selector : getSelectorFromName(selector);
4102
+ }
4103
+ function isMerkleTreeType(type) {
4104
+ return type.type === "merkletree";
4105
+ }
4106
+ var getDependencies = (types, type, dependencies = []) => {
4107
+ if (type[type.length - 1] === "*") {
4108
+ type = type.slice(0, -1);
4109
+ }
4110
+ if (dependencies.includes(type)) {
4111
+ return dependencies;
4112
+ }
4113
+ if (!types[type]) {
4114
+ return dependencies;
4115
+ }
4116
+ return [
4117
+ type,
4118
+ ...types[type].reduce(
4119
+ (previous, t) => [
4120
+ ...previous,
4121
+ ...getDependencies(types, t.type, previous).filter(
4122
+ (dependency) => !previous.includes(dependency)
4123
+ )
4124
+ ],
4125
+ []
4126
+ )
4127
+ ];
4128
+ };
4129
+ function getMerkleTreeType(types, ctx) {
4130
+ if (ctx.parent && ctx.key) {
4131
+ const parentType = types[ctx.parent];
4132
+ const merkleType = parentType.find((t) => t.name === ctx.key);
4133
+ const isMerkleTree = isMerkleTreeType(merkleType);
4134
+ if (!isMerkleTree) {
4135
+ throw new Error(`${ctx.key} is not a merkle tree`);
4136
+ }
4137
+ if (merkleType.contains.endsWith("*")) {
4138
+ throw new Error(`Merkle tree contain property must not be an array but was given ${ctx.key}`);
4139
+ }
4140
+ return merkleType.contains;
4141
+ }
4142
+ return "raw";
4143
+ }
4144
+ var encodeType = (types, type) => {
4145
+ const [primary, ...dependencies] = getDependencies(types, type);
4146
+ const newTypes = !primary ? [] : [primary, ...dependencies.sort()];
4147
+ return newTypes.map((dependency) => {
4148
+ return `${dependency}(${types[dependency].map((t) => `${t.name}:${t.type}`)})`;
4149
+ }).join("");
4150
+ };
4151
+ var getTypeHash = (types, type) => {
4152
+ return getSelectorFromName(encodeType(types, type));
4153
+ };
4154
+ var encodeValue = (types, type, data, ctx = {}) => {
4155
+ if (types[type]) {
4156
+ return [type, getStructHash(types, type, data)];
4157
+ }
4158
+ if (Object.keys(types).map((x) => `${x}*`).includes(type)) {
4159
+ const structHashes = data.map((struct) => {
4160
+ return getStructHash(types, type.slice(0, -1), struct);
4161
+ });
4162
+ return [type, computeHashOnElements(structHashes)];
4163
+ }
4164
+ if (type === "merkletree") {
4165
+ const merkleTreeType = getMerkleTreeType(types, ctx);
4166
+ const structHashes = data.map((struct) => {
4167
+ return encodeValue(types, merkleTreeType, struct)[1];
4168
+ });
4169
+ const { root } = new MerkleTree(structHashes);
4170
+ return ["felt", root];
4171
+ }
4172
+ if (type === "felt*") {
4173
+ return ["felt*", computeHashOnElements(data)];
4174
+ }
4175
+ if (type === "selector") {
4176
+ return ["felt", prepareSelector(data)];
4177
+ }
4178
+ return [type, getHex(data)];
4179
+ };
4180
+ var encodeData = (types, type, data) => {
4181
+ const [returnTypes, values] = types[type].reduce(
4182
+ ([ts, vs], field) => {
4183
+ if (data[field.name] === void 0 || data[field.name] === null) {
4184
+ throw new Error(`Cannot encode data: missing data for '${field.name}'`);
4185
+ }
4186
+ const value = data[field.name];
4187
+ const [t, encodedValue] = encodeValue(types, field.type, value, {
4188
+ parent: type,
4189
+ key: field.name
4190
+ });
4191
+ return [
4192
+ [...ts, t],
4193
+ [...vs, encodedValue]
4194
+ ];
4195
+ },
4196
+ [["felt"], [getTypeHash(types, type)]]
4197
+ );
4198
+ return [returnTypes, values];
4199
+ };
4200
+ var getStructHash = (types, type, data) => {
4201
+ return computeHashOnElements(encodeData(types, type, data)[1]);
4202
+ };
4203
+ var getMessageHash = (typedData, account) => {
4204
+ if (!validateTypedData(typedData)) {
4205
+ throw new Error("Typed data does not match JSON schema");
4206
+ }
4207
+ const message = [
4208
+ encodeShortString("StarkNet Message"),
4209
+ getStructHash(typedData.types, "StarkNetDomain", typedData.domain),
4210
+ account,
4211
+ getStructHash(typedData.types, typedData.primaryType, typedData.message)
4212
+ ];
4213
+ return computeHashOnElements(message);
4214
+ };
4215
+
4216
+ // src/signer/default.ts
4217
+ var Signer = class {
4218
+ constructor(keyPair = genKeyPair()) {
4219
+ this.keyPair = keyPair;
4220
+ }
4221
+ async getPubKey() {
4222
+ return getStarkKey(this.keyPair);
4223
+ }
4224
+ async signMessage(typedData, accountAddress) {
4225
+ const msgHash = getMessageHash(typedData, accountAddress);
4226
+ return sign(this.keyPair, msgHash);
4227
+ }
4228
+ async signTransaction(transactions, transactionsDetail, abis) {
4229
+ if (abis && abis.length !== transactions.length) {
4230
+ throw new Error("ABI must be provided for each transaction or no transaction");
4231
+ }
4232
+ const calldata = fromCallsToExecuteCalldata(transactions);
4233
+ const msgHash = calculateTransactionHash(
4234
+ transactionsDetail.walletAddress,
4235
+ transactionsDetail.version,
4236
+ calldata,
4237
+ transactionsDetail.maxFee,
4238
+ transactionsDetail.chainId,
4239
+ transactionsDetail.nonce
4240
+ );
4241
+ return sign(this.keyPair, msgHash);
4242
+ }
4243
+ async signDeployAccountTransaction({
4244
+ classHash,
4245
+ contractAddress,
4246
+ constructorCalldata,
4247
+ addressSalt,
4248
+ maxFee,
4249
+ version,
4250
+ chainId,
4251
+ nonce
4252
+ }) {
4253
+ const msgHash = calculateDeployAccountTransactionHash(
4254
+ contractAddress,
4255
+ classHash,
4256
+ constructorCalldata,
4257
+ addressSalt,
4258
+ version,
4259
+ maxFee,
4260
+ chainId,
4261
+ nonce
4262
+ );
4263
+ return sign(this.keyPair, msgHash);
4264
+ }
4265
+ async signDeclareTransaction({ classHash, senderAddress, chainId, maxFee, version, nonce }) {
4266
+ const msgHash = calculateDeclareTransactionHash(
4267
+ classHash,
4268
+ senderAddress,
4269
+ version,
4270
+ maxFee,
4271
+ chainId,
4272
+ nonce
4273
+ );
4274
+ return sign(this.keyPair, msgHash);
4275
+ }
4276
+ };
4277
+
4278
+ // src/account/default.ts
4279
+ var Account = class extends Provider {
4280
+ constructor(providerOrOptions, address, keyPairOrSigner) {
4281
+ super(providerOrOptions);
4282
+ this.address = address.toLowerCase();
4283
+ this.signer = "getPubKey" in keyPairOrSigner ? keyPairOrSigner : new Signer(keyPairOrSigner);
4284
+ }
4285
+ async getNonce(blockIdentifier) {
4286
+ return super.getNonce(this.address, blockIdentifier);
4287
+ }
4288
+ async estimateFee(calls, estimateFeeDetails) {
4289
+ return this.estimateInvokeFee(calls, estimateFeeDetails);
4290
+ }
4291
+ async estimateInvokeFee(calls, { nonce: providedNonce, blockIdentifier } = {}) {
4292
+ const transactions = Array.isArray(calls) ? calls : [calls];
4293
+ const nonce = toBN(providedNonce ?? await this.getNonce());
4294
+ const version = toBN(feeTransactionVersion);
4295
+ const chainId = await this.getChainId();
4296
+ const signerDetails = {
4297
+ walletAddress: this.address,
4298
+ nonce,
4299
+ maxFee: ZERO,
4300
+ version,
4301
+ chainId
4302
+ };
4303
+ const signature = await this.signer.signTransaction(transactions, signerDetails);
4304
+ const calldata = fromCallsToExecuteCalldata(transactions);
4305
+ const response = await super.getInvokeEstimateFee(
4306
+ { contractAddress: this.address, calldata, signature },
4307
+ { version, nonce },
4308
+ blockIdentifier
4309
+ );
4310
+ const suggestedMaxFee = estimatedFeeToMaxFee(response.overall_fee);
4311
+ return {
4312
+ ...response,
4313
+ suggestedMaxFee
4314
+ };
4315
+ }
4316
+ async estimateDeclareFee({ classHash, contract }, { blockIdentifier, nonce: providedNonce } = {}) {
4317
+ const nonce = toBN(providedNonce ?? await this.getNonce());
4318
+ const version = toBN(feeTransactionVersion);
4319
+ const chainId = await this.getChainId();
4320
+ const contractDefinition = parseContract(contract);
4321
+ const signature = await this.signer.signDeclareTransaction({
4322
+ classHash,
4323
+ senderAddress: this.address,
4324
+ chainId,
4325
+ maxFee: ZERO,
4326
+ version,
4327
+ nonce
4328
+ });
4329
+ const response = await super.getDeclareEstimateFee(
4330
+ { senderAddress: this.address, signature, contractDefinition },
4331
+ { version, nonce },
4332
+ blockIdentifier
4333
+ );
4334
+ const suggestedMaxFee = estimatedFeeToMaxFee(response.overall_fee);
4335
+ return {
4336
+ ...response,
4337
+ suggestedMaxFee
4338
+ };
4339
+ }
4340
+ async estimateAccountDeployFee({
4341
+ classHash,
4342
+ addressSalt = 0,
4343
+ constructorCalldata = [],
4344
+ contractAddress: providedContractAddress
4345
+ }, { blockIdentifier, nonce: providedNonce } = {}) {
4346
+ const nonce = toBN(providedNonce ?? await this.getNonce());
4347
+ const version = toBN(feeTransactionVersion);
4348
+ const chainId = await this.getChainId();
4349
+ const contractAddress = providedContractAddress ?? calculateContractAddressFromHash(addressSalt, classHash, constructorCalldata, 0);
4350
+ const signature = await this.signer.signDeployAccountTransaction({
4351
+ classHash,
4352
+ contractAddress,
4353
+ chainId,
4354
+ maxFee: ZERO,
4355
+ version,
4356
+ nonce,
4357
+ addressSalt,
4358
+ constructorCalldata
4359
+ });
4360
+ const response = await super.getDeployAccountEstimateFee(
4361
+ { classHash, addressSalt, constructorCalldata, signature },
4362
+ { version, nonce },
4363
+ blockIdentifier
4364
+ );
4365
+ const suggestedMaxFee = estimatedFeeToMaxFee(response.overall_fee);
4366
+ return {
4367
+ ...response,
4368
+ suggestedMaxFee
4369
+ };
4370
+ }
4371
+ async estimateDeployFee({
4372
+ classHash,
4373
+ salt,
4374
+ unique = true,
4375
+ constructorCalldata = [],
4376
+ additionalCalls = []
4377
+ }, transactionsDetail) {
4378
+ const compiledConstructorCallData = compileCalldata(constructorCalldata);
4379
+ const callsArray = Array.isArray(additionalCalls) ? additionalCalls : [additionalCalls];
4380
+ return this.estimateInvokeFee(
4381
+ [
4382
+ {
4383
+ contractAddress: UDC.ADDRESS,
4384
+ entrypoint: UDC.ENTRYPOINT,
4385
+ calldata: [
4386
+ classHash,
4387
+ salt,
4388
+ toCairoBool(unique),
4389
+ compiledConstructorCallData.length,
4390
+ ...compiledConstructorCallData
4391
+ ]
4392
+ },
4393
+ ...callsArray
4394
+ ],
4395
+ transactionsDetail
4396
+ );
4397
+ }
4398
+ async execute(calls, abis = void 0, transactionsDetail = {}) {
4399
+ const transactions = Array.isArray(calls) ? calls : [calls];
4400
+ const nonce = toBN(transactionsDetail.nonce ?? await this.getNonce());
4401
+ const maxFee = transactionsDetail.maxFee ?? await this.getSuggestedMaxFee({ type: "INVOKE", payload: calls }, transactionsDetail);
4402
+ const version = toBN(transactionVersion);
4403
+ const chainId = await this.getChainId();
4404
+ const signerDetails = {
4405
+ walletAddress: this.address,
4406
+ nonce,
4407
+ maxFee,
4408
+ version,
4409
+ chainId
4410
+ };
4411
+ const signature = await this.signer.signTransaction(transactions, signerDetails, abis);
4412
+ const calldata = fromCallsToExecuteCalldata(transactions);
4413
+ return this.invokeFunction(
4414
+ { contractAddress: this.address, calldata, signature },
4415
+ {
4416
+ nonce,
4417
+ maxFee,
4418
+ version
4419
+ }
4420
+ );
4421
+ }
4422
+ async declare({ classHash, contract }, transactionsDetail = {}) {
4423
+ const nonce = toBN(transactionsDetail.nonce ?? await this.getNonce());
4424
+ const maxFee = transactionsDetail.maxFee ?? await this.getSuggestedMaxFee(
4425
+ { type: "DECLARE", payload: { classHash, contract } },
4426
+ transactionsDetail
4427
+ );
4428
+ const version = toBN(transactionVersion);
4429
+ const chainId = await this.getChainId();
4430
+ const signature = await this.signer.signDeclareTransaction({
4431
+ classHash,
4432
+ senderAddress: this.address,
4433
+ chainId,
4434
+ maxFee,
4435
+ version,
4436
+ nonce
4437
+ });
4438
+ const contractDefinition = parseContract(contract);
4439
+ return this.declareContract(
4440
+ { contractDefinition, senderAddress: this.address, signature },
4441
+ {
4442
+ nonce,
4443
+ maxFee,
4444
+ version
4445
+ }
4446
+ );
4447
+ }
4448
+ async deploy({
4449
+ classHash,
4450
+ salt,
4451
+ unique = true,
4452
+ constructorCalldata = [],
4453
+ additionalCalls = []
4454
+ }, transactionsDetail = {}) {
4455
+ const compiledConstructorCallData = compileCalldata(constructorCalldata);
4456
+ const callsArray = Array.isArray(additionalCalls) ? additionalCalls : [additionalCalls];
4457
+ return this.execute(
4458
+ [
4459
+ {
4460
+ contractAddress: UDC.ADDRESS,
4461
+ entrypoint: UDC.ENTRYPOINT,
4462
+ calldata: [
4463
+ classHash,
4464
+ salt,
4465
+ toCairoBool(unique),
4466
+ compiledConstructorCallData.length,
4467
+ ...compiledConstructorCallData
4468
+ ]
4469
+ },
4470
+ ...callsArray
4471
+ ],
4472
+ void 0,
4473
+ transactionsDetail
4474
+ );
4475
+ }
4476
+ async deployAccount({
4477
+ classHash,
4478
+ constructorCalldata = [],
4479
+ addressSalt = 0,
4480
+ contractAddress: providedContractAddress
4481
+ }, transactionsDetail = {}) {
4482
+ const nonce = toBN(transactionsDetail.nonce ?? await this.getNonce());
4483
+ const version = toBN(transactionVersion);
4484
+ const chainId = await this.getChainId();
4485
+ const contractAddress = providedContractAddress ?? calculateContractAddressFromHash(addressSalt, classHash, constructorCalldata, 0);
4486
+ const maxFee = transactionsDetail.maxFee ?? await this.getSuggestedMaxFee(
4487
+ {
4488
+ type: "DEPLOY_ACCOUNT",
4489
+ payload: { classHash, constructorCalldata, addressSalt, contractAddress }
4490
+ },
4491
+ transactionsDetail
4492
+ );
4493
+ const signature = await this.signer.signDeployAccountTransaction({
4494
+ classHash,
4495
+ constructorCalldata,
4496
+ contractAddress,
4497
+ addressSalt,
4498
+ chainId,
4499
+ maxFee,
4500
+ version,
4501
+ nonce
4502
+ });
4503
+ return this.deployAccountContract(
4504
+ { classHash, addressSalt, constructorCalldata, signature },
4505
+ {
4506
+ nonce,
4507
+ maxFee,
4508
+ version
4509
+ }
4510
+ );
4511
+ }
4512
+ async signMessage(typedData) {
4513
+ return this.signer.signMessage(typedData, this.address);
4514
+ }
4515
+ async hashMessage(typedData) {
4516
+ return getMessageHash(typedData, this.address);
4517
+ }
4518
+ async verifyMessageHash(hash, signature) {
4519
+ try {
4520
+ await this.callContract({
4521
+ contractAddress: this.address,
4522
+ entrypoint: "isValidSignature",
4523
+ calldata: compileCalldata({
4524
+ hash: toBN(hash).toString(),
4525
+ signature: signature.map((x) => toBN(x).toString())
4526
+ })
4527
+ });
4528
+ return true;
4529
+ } catch {
4530
+ return false;
4531
+ }
4532
+ }
4533
+ async verifyMessage(typedData, signature) {
4534
+ const hash = await this.hashMessage(typedData);
4535
+ return this.verifyMessageHash(hash, signature);
4536
+ }
4537
+ async getSuggestedMaxFee({ type, payload }, details) {
4538
+ let feeEstimate;
4539
+ switch (type) {
4540
+ case "INVOKE":
4541
+ feeEstimate = await this.estimateInvokeFee(payload, details);
4542
+ break;
4543
+ case "DECLARE":
4544
+ feeEstimate = await this.estimateDeclareFee(payload, details);
4545
+ break;
4546
+ case "DEPLOY_ACCOUNT":
4547
+ feeEstimate = await this.estimateAccountDeployFee(payload, details);
4548
+ break;
4549
+ case "DEPLOY":
4550
+ feeEstimate = await this.estimateDeployFee(payload, details);
4551
+ break;
4552
+ default:
4553
+ feeEstimate = { suggestedMaxFee: ZERO, overall_fee: ZERO };
4554
+ break;
4555
+ }
4556
+ return feeEstimate.suggestedMaxFee.toString();
4557
+ }
4558
+ };
4559
+
4560
+ // src/account/interface.ts
4561
+ var AccountInterface = class extends ProviderInterface {
4562
+ };
4563
+
4564
+ // src/utils/uint256.ts
4565
+ var uint256_exports = {};
4566
+ __export(uint256_exports, {
4567
+ UINT_128_MAX: () => UINT_128_MAX,
4568
+ UINT_256_MAX: () => UINT_256_MAX,
4569
+ bnToUint256: () => bnToUint256,
4570
+ isUint256: () => isUint256,
4571
+ uint256ToBN: () => uint256ToBN
4572
+ });
4573
+ function uint256ToBN(uint256) {
4574
+ return toBN(uint256.high).shln(128).add(toBN(uint256.low));
4575
+ }
4576
+ var UINT_128_MAX = toBN(1).shln(128).sub(toBN(1));
4577
+ var UINT_256_MAX = toBN(1).shln(256).sub(toBN(1));
4578
+ function isUint256(bn) {
4579
+ return toBN(bn).lte(UINT_256_MAX);
4580
+ }
4581
+ function bnToUint256(bignumber) {
4582
+ const bn = toBN(bignumber);
4583
+ if (!isUint256(bn))
4584
+ throw new Error("Number is too large");
4585
+ return {
4586
+ low: addHexPrefix(bn.maskn(128).toString(16)),
4587
+ high: addHexPrefix(bn.shrn(128).toString(16))
4588
+ };
4589
+ }
4590
+
4591
+ // src/utils/address.ts
4592
+ import { arrayify } from "@ethersproject/bytes";
4593
+ function addAddressPadding(address) {
4594
+ return addHexPrefix(removeHexPrefix(toHex(toBN(address))).padStart(64, "0"));
4595
+ }
4596
+ function validateAndParseAddress(address) {
4597
+ assertInRange(address, ZERO, MASK_251, "Starknet Address");
4598
+ const result = addAddressPadding(address);
4599
+ if (!result.match(/^(0x)?[0-9a-fA-F]{64}$/)) {
4600
+ throw new Error("Invalid Address Format");
4601
+ }
4602
+ return result;
4603
+ }
4604
+ function getChecksumAddress(address) {
4605
+ const chars = removeHexPrefix(validateAndParseAddress(address)).toLowerCase().split("");
4606
+ const hashed = arrayify(keccakBn(address), { hexPad: "left" });
4607
+ for (let i = 0; i < chars.length; i += 2) {
4608
+ if (hashed[i >> 1] >> 4 >= 8) {
4609
+ chars[i] = chars[i].toUpperCase();
4610
+ }
4611
+ if ((hashed[i >> 1] & 15) >= 8) {
4612
+ chars[i + 1] = chars[i + 1].toUpperCase();
4613
+ }
4614
+ }
4615
+ return addHexPrefix(chars.join(""));
4616
+ }
4617
+ function validateChecksumAddress(address) {
4618
+ return getChecksumAddress(address) === address;
4619
+ }
4620
+ export {
4621
+ Account,
4622
+ AccountInterface,
4623
+ Contract,
4624
+ ContractFactory,
4625
+ ContractInterface,
4626
+ GatewayError,
4627
+ HttpError,
4628
+ Provider,
4629
+ ProviderInterface,
4630
+ RpcProvider,
4631
+ SequencerProvider,
4632
+ Signer,
4633
+ SignerInterface,
4634
+ addAddressPadding,
4635
+ api_exports as api,
4636
+ buildUrl,
4637
+ constants_exports as constants,
4638
+ defaultProvider,
4639
+ ellipticCurve_exports as ec,
4640
+ encode_exports as encode,
4641
+ getChecksumAddress,
4642
+ hash_exports as hash,
4643
+ isUrl,
4644
+ json_exports as json,
4645
+ merkle_exports as merkle,
4646
+ number_exports as number,
4647
+ shortString_exports as shortString,
4648
+ stark_exports as stark,
4649
+ transaction_exports as transaction,
4650
+ typedData_exports as typedData,
4651
+ uint256_exports as uint256,
4652
+ validateAndParseAddress,
4653
+ validateChecksumAddress
4654
+ };
4655
+ //# sourceMappingURL=index.mjs.map