smail-sdk 0.0.0-stage → 0.1.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 (51) hide show
  1. package/README.md +235 -2
  2. package/dist/abi/bytecode.d.ts +13 -0
  3. package/dist/abi/bytecode.js +15 -0
  4. package/dist/abi/index.d.ts +8 -0
  5. package/dist/abi/index.js +11 -0
  6. package/dist/abi/privateSnail.d.ts +493 -0
  7. package/dist/abi/privateSnail.js +643 -0
  8. package/dist/abi/relayerNames.d.ts +54 -0
  9. package/dist/abi/relayerNames.js +74 -0
  10. package/dist/abi/relayerNetwork.d.ts +880 -0
  11. package/dist/abi/relayerNetwork.js +1140 -0
  12. package/dist/abi/relayerVault.d.ts +67 -0
  13. package/dist/abi/relayerVault.js +90 -0
  14. package/dist/abi/shellStake.d.ts +567 -0
  15. package/dist/abi/shellStake.js +745 -0
  16. package/dist/abi/snail.d.ts +497 -0
  17. package/dist/abi/snail.js +637 -0
  18. package/dist/abi/sponsoredSmail.d.ts +601 -0
  19. package/dist/abi/sponsoredSmail.js +772 -0
  20. package/dist/calls.d.ts +135 -0
  21. package/dist/calls.js +233 -0
  22. package/dist/constants.d.ts +101 -0
  23. package/dist/constants.js +168 -0
  24. package/dist/events.d.ts +111 -0
  25. package/dist/events.js +211 -0
  26. package/dist/index.d.ts +29 -0
  27. package/dist/index.js +29 -0
  28. package/dist/keys.d.ts +22 -0
  29. package/dist/keys.js +17 -0
  30. package/dist/link.d.ts +76 -0
  31. package/dist/link.js +167 -0
  32. package/dist/lock.d.ts +12 -0
  33. package/dist/lock.js +79 -0
  34. package/dist/message.d.ts +54 -0
  35. package/dist/message.js +82 -0
  36. package/dist/operator-gas.d.ts +10 -0
  37. package/dist/operator-gas.js +3 -0
  38. package/dist/pool-index.d.ts +101 -0
  39. package/dist/pool-index.js +265 -0
  40. package/dist/private.d.ts +216 -0
  41. package/dist/private.js +373 -0
  42. package/dist/read.d.ts +85 -0
  43. package/dist/read.js +103 -0
  44. package/dist/relayer.d.ts +83 -0
  45. package/dist/relayer.js +153 -0
  46. package/dist/wallet-errors.d.ts +60 -0
  47. package/dist/wallet-errors.js +171 -0
  48. package/package.json +45 -4
  49. package/zk/verification_key.json +114 -0
  50. package/zk/withdraw.wasm +0 -0
  51. package/zk/withdraw_final.zkey +0 -0
package/README.md CHANGED
@@ -1,3 +1,236 @@
1
- # Temporary Holding Version
1
+ # smail-sdk
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ **Snail mail for money.** Private ETH you can send as a link, on Robinhood
4
+ Chain. This package is the part of [SMAIL](https://smail.cash) that runs
5
+ anywhere JS runs: in the browser, in a terminal, in an agent.
6
+
7
+ ```
8
+ shield → seal a snail → send a link → claimed
9
+ ```
10
+
11
+ The binding specification is [`docs/PROTOCOL.md`](../../docs/PROTOCOL.md). If
12
+ this package and that file disagree, the file is right.
13
+
14
+ ## Install
15
+
16
+ ```bash
17
+ npm install smail-sdk viem
18
+ ```
19
+
20
+ ESM only. Node 20+ or any browser with WebCrypto; nothing here touches a
21
+ server. `viem` is the chain client; the SDK's readers take a viem
22
+ `PublicClient` and its builders return `{ to, data, value }` for a viem
23
+ wallet client, a private key, or a relayer.
24
+
25
+ ## The whole thing, in order
26
+
27
+ ```ts
28
+ import { createPublicClient, createWalletClient, http, parseEther } from "viem";
29
+ import { privateKeyToAccount } from "viem/accounts";
30
+ import {
31
+ buildClaimToPool, buildDeposit, buildSealFromPool, buildTree, buildWithdraw,
32
+ commitmentOf, createNote, encodeClaimLink, findLeafIndex, generateEnvelopeKey,
33
+ proveWithdraw, readDeposits, readEnvelope, robinhood, terminateProver,
34
+ } from "smail-sdk";
35
+
36
+ const client = createPublicClient({ chain: robinhood, transport: http() });
37
+ const wallet = createWalletClient({ account: privateKeyToAccount(KEY), chain: robinhood, transport: http() });
38
+ const { pool, snail, firstBlock } = deployment; // smail.json
39
+ const artifacts = { wasm: "circuits/build/withdraw.wasm", zkey: "circuits/build/withdraw_final.zkey" };
40
+
41
+ // 1. Shield. Back the note up BEFORE this is sent; it is the only proof the money is yours.
42
+ const note = createNote(robinhood.id, parseEther("0.01"));
43
+ await wallet.sendTransaction(buildDeposit(pool, commitmentOf(note), note.amount));
44
+
45
+ // 2. Seal a snail straight out of the pool. The proof hides which deposit paid.
46
+ const deposits = await readDeposits(client, pool, firstBlock);
47
+ const { call } = await buildSealFromPool(pool, snail, {
48
+ note, leafIndex: findLeafIndex(deposits, commitmentOf(note))!, tree: buildTree(deposits),
49
+ claimKey: generateEnvelopeKey().address, // keep the private half: it IS the link
50
+ relayer: info.relayer, fee: info.minFeeWei, // from RelayerClient.info(), or omit both
51
+ }, artifacts);
52
+ await relayer.withdraw(proof); // or wallet.sendTransaction(call) yourself
53
+
54
+ // 3. The recipient reads the snail from the chain, never from the link.
55
+ const state = await readEnvelope(client, snail, claimKey.address); // funded, amount, privateOnly, …
56
+
57
+ // 4. Claim it into the pool as a fresh note, gas paid out of the envelope.
58
+ const mine = createNote(robinhood.id, state.amount - info.minFeeWei);
59
+ const claim = await buildClaimToPool(snail, { chainId: robinhood.id, snail, claimPrivateKey, commitment: commitmentOf(mine), relayer: info.relayer, fee: info.minFeeWei });
60
+ await relayer.release(claim.release);
61
+
62
+ await terminateProver(); // Node only: snarkjs keeps worker threads alive otherwise
63
+ ```
64
+
65
+ `src/e2e.test.ts` runs exactly this against a local anvil, every step
66
+ through the SDK and every step asserted on-chain.
67
+
68
+ ## Keys, links, locks
69
+
70
+ A snail is sealed against a fresh secp256k1 key that exists only in the link.
71
+ The link puts it in the URL **fragment**, which the browser never sends.
72
+
73
+ ```ts
74
+ import { encodeClaimLink, encodeRefundLink, generateEnvelopeKey, decodeLinkFragment } from "smail-sdk";
75
+
76
+ const claim = generateEnvelopeKey(); // { privateKey, address }
77
+ const refund = generateEnvelopeKey();
78
+ encodeClaimLink("https://smail.cash", claim.privateKey); // https://smail.cash/claim#s1.…
79
+ encodeRefundLink("https://smail.cash", refund.privateKey, claim.address); // https://smail.cash/refund#r1.…~0x…
80
+ decodeLinkFragment(window.location.hash);
81
+ // { kind: "claim", privateKey } | { kind: "locked", salt } | { kind: "refund", privateKey } | null
82
+ ```
83
+
84
+ A **locked** link carries a salt instead of a key; the password is the other
85
+ half. Both sides derive the same key, or neither does:
86
+
87
+ ```ts
88
+ const salt = generateLockSalt();
89
+ const privateKey = await deriveLockedKey(salt, "correct horse battery staple");
90
+ const claimKey = toClaimKey(privateKey); // fund the envelope under this
91
+ encodeClaimLink("https://smail.cash", salt, "locked");
92
+ ```
93
+
94
+ ## Proving
95
+
96
+ `proveWithdraw` makes the Groth16 proof `SmailPool.withdraw` takes, and
97
+ checks everything the pool will check first: the note hashes to the leaf at
98
+ `leafIndex`, the fee fits, a fee has a relayer, the public signals came out as
99
+ requested. About 300–450 ms on a laptop.
100
+
101
+ ```ts
102
+ const proof = await proveWithdraw(
103
+ { note, leafIndex, tree, recipient, relayer, fee, hookData }, // relayer/fee/hookData optional
104
+ { wasm, zkey, vkey? }, // vkey: verify locally before returning
105
+ prover?, // defaults: window.snarkjs, else import("snarkjs")
106
+ );
107
+ // { proof: uint256[8] in the contract's limb order, publicSignals: [root, nullifierHash, recipient, amount,
108
+ // relayer, fee, extDataHash], root, nullifierHash, extDataHash, recipient, amount, relayer, fee, hookData, proveMs }
109
+ ```
110
+
111
+ **In the browser** the page loads snarkjs as a plain script and passes the
112
+ artifacts as URLs (or as bytes it already fetched); nothing goes through a
113
+ bundler:
114
+
115
+ ```html
116
+ <script src="/zk/snarkjs.min.js"></script>
117
+ ```
118
+
119
+ ```ts
120
+ const proof = await proveWithdraw(
121
+ { note, leafIndex, tree, recipient: snail, relayer, fee, hookData },
122
+ { wasm: "/zk/withdraw.wasm", zkey: "/zk/withdraw_final.zkey" },
123
+ window.snarkjs, // found automatically too, when it exists
124
+ );
125
+ ```
126
+
127
+ `encodeHookData({ claimKey, refundKey?, unlockAt?, expiry?, memo? })` is the
128
+ payload the pool hands to `Snail`, bound into the proof as `extDataHash`;
129
+ `buildSealFromPool` does the proof and the hook data in one call.
130
+ `encodeMemo("rent")` / `decodeMemo` turn a short string into the `bytes32`
131
+ memo. `proofToLimbs` / `limbsToProof` convert between snarkjs's proof object
132
+ and the `uint256[8]`; `verifyWithdrawProof(vkey, publicSignals, limbs)`
133
+ checks one without a chain.
134
+
135
+ ## Calls
136
+
137
+ Every builder returns `{ to, data, value }` and sends nothing.
138
+
139
+ | | |
140
+ |---|---|
141
+ | `buildDeposit(pool, commitment, amount)` | shield `amount` wei |
142
+ | `buildWithdraw(pool, proof, params?)` | spend a note; `params` are checked against the proof, never trusted |
143
+ | `buildSealFromPool(pool, snail, { note, leafIndex, tree, claimKey, refundKey?, unlockAt?, expiry?, memo?, relayer?, fee? }, artifacts, prover?)` | prove + withdraw into `Snail`; returns `{ call, proof, hookData }` |
144
+ | `buildFundPublic(snail, { claimKey, refundKey?, unlockAt?, expiry?, memo?, amount })` | seal from a wallet, funder visible |
145
+ | `buildClaimToAddress(snail, { chainId, snail, claimPrivateKey, recipient, relayer?, fee? })` | public snails only |
146
+ | `buildClaimToPool(snail, { chainId, snail, claimPrivateKey, commitment, relayer?, fee? })` | into the pool as a fresh note worth `amount - fee` |
147
+ | `buildRefundToAddress(snail, { chainId, snail, refundPrivateKey, claimKey, recipient, relayer?, fee? })` | after expiry, public snails only |
148
+ | `buildRefundToPool(snail, { chainId, snail, refundPrivateKey, claimKey, commitment, relayer?, fee? })` | after expiry |
149
+
150
+ The four release builders sign with `signRelease` and return the call plus
151
+ `release`, a `Release` `{ kind, claimKey, destination, relayer, fee, signature }`
152
+ that is also the relayer's `/release` body. `authorizeRelease` and
153
+ `encodeRelease` are the two halves for anyone who wants them apart.
154
+ `vectors/release-digest.json` pins every builder's signature to the Solidity
155
+ byte for byte.
156
+
157
+ ## Reads and events
158
+
159
+ All take a viem `PublicClient` (or anything with `readContract`, `getLogs`,
160
+ `getBlockNumber`, `getBlock`, `getTransaction`).
161
+
162
+ ```ts
163
+ readEnvelope(client, snail, claimKey, now?) // { status, amount, refundKey, unlockAt, expiry, memo, privateOnly, claimable, refundable }
164
+ isSpent(client, pool, nullifierHash) // bigint or bytes32
165
+ lastRoot(client, pool) // bigint, to compare with tree.root
166
+ isKnownRoot(client, pool, root)
167
+ nextIndex(client, pool)
168
+ releaseDigestOnChain(client, snail, { mode, claimKey, destination, relayer, fee })
169
+
170
+ readDeposits(client, pool, fromBlock, toBlock?, { window? }) // sorted by leafIndex, gaps refused
171
+ buildTree(deposits) // SmailMerkleTree; root === getLastRoot()
172
+ findLeafIndex(deposits, commitment, amount?)
173
+ readEnvelopeHistory(client, snail, claimKey, fromBlock) // [{ kind, txHash, blockNumber, amount, privateOnly?, mode?, destination?, relayer?, fee? }]
174
+ recentEnvelopes(client, snail, fromBlock, limit) // newest first, with submittedBy
175
+ watchEnvelope(client, snail, claimKey, settled, stop, timeoutMs?, intervalMs?)
176
+ syncNoteStatus(client, pool, notes) // notes with `spent` from the chain
177
+ releaseKindOf(mode) // "claimToPool" for MODE_CLAIM_POOL, …
178
+ ```
179
+
180
+ `eth_getLogs` goes out in windows (10k blocks by default); a node that
181
+ refuses a range gets the same range at half the size until it accepts.
182
+ History and recent-envelope reads walk backwards from the tip, because the
183
+ envelope being looked at is nearly always a recent one.
184
+
185
+ ## Relayer
186
+
187
+ ```ts
188
+ const relayer = new RelayerClient("https://relay.smail.cash"); // { fetch } injectable
189
+ const info = await relayer.info(); // { chainId, relayer, pool, snail, minFeeWei, gasPriceWei, version }
190
+ await relayer.withdraw(proof); // { txHash }; proof must name info.relayer and pay >= minFeeWei
191
+ await relayer.release(claim.release); // { txHash }
192
+ ```
193
+
194
+ Failures throw `RelayerError` with `status` and the relayer's message.
195
+ Numbers travel as decimal strings, addresses and hashes as `0x` hex
196
+ (PROTOCOL.md §10).
197
+
198
+ ## Wallet errors
199
+
200
+ `looksRejected(error)` says whether the person said no (EIP-1193 `4001`,
201
+ ethers' `ACTION_REJECTED`, viem's `UserRejectedRequestError`, or the words),
202
+ however deeply the wallet buried it. `contractErrorName(error)` names the
203
+ SMAIL custom error a call reverted with (`PrivateOnly`, `Expired`,
204
+ `NoteAlreadySpent`, …) from a viem error, an `eth_call`, or `estimateGas`.
205
+ `walletErrorText` flattens any thrown thing to something readable.
206
+
207
+ ## Notes, tree, digests, constants
208
+
209
+ ```ts
210
+ const note = createNote(4663, 10n ** 17n); // { chainId, amount, nullifier, secret }
211
+ encodeNote(note) / decodeNote(text) // smail-v1-<chainId>-<wei>-0x<62 hex>-0x<62 hex>
212
+ commitmentOf(note); leafOf(note); nullifierHashOf(note)
213
+ toBytes32 / fromBytes32; toHex31 / fromHex31
214
+
215
+ const tree = SmailMerkleTree.fromLeaves(leaves); // or buildTree(deposits)
216
+ tree.root; tree.path(index); tree.verify(leaf, path, root)
217
+
218
+ releaseDigest(params); signRelease(privateKey, params); recoverReleaseSigner(params, signature)
219
+ addressToDestination(address); destinationToAddress(bytes32)
220
+ ```
221
+
222
+ `FIELD_SIZE`, `ZERO_VALUE`, `LEVELS`, `ROOT_HISTORY_SIZE`, `DOMAIN`, `MODE`,
223
+ `SECP256K1_ORDER`, and the chains `robinhood` (4663), `robinhoodTestnet`
224
+ (46630) and `anvil` (31337) as viem `Chain` objects, with `chainById()`. The
225
+ contract ABIs (`smailPoolAbi`, `snailAbi`, `groth16VerifierAbi`) and creation
226
+ bytecode (`snailBytecode`, `groth16VerifierBytecode`, `poseidonT3Bytecode`,
227
+ `linkSmailPoolBytecode(poseidonT3)`) come straight from the Foundry
228
+ artifacts, for local deploys.
229
+
230
+ ## Development
231
+
232
+ ```bash
233
+ npm run build --workspace smail-sdk
234
+ npm test --workspace smail-sdk # includes the anvil end-to-end test when `anvil` is on PATH
235
+ node packages/smail-sdk/scripts/vectors.mjs # regenerate vectors/ from dist/
236
+ ```
@@ -0,0 +1,13 @@
1
+ import type { Hex } from "viem";
2
+ /** Creation bytecode for `Snail`. Constructor: `()`. */
3
+ export declare const snailBytecode: Hex;
4
+ /** Creation bytecode for `SponsoredSmail`. Constructor: `(address network)`. */
5
+ export declare const sponsoredSmailBytecode: Hex;
6
+ /** Creation bytecode for `RelayerNetwork`. Constructor: `(address token, address maintainer)`. */
7
+ export declare const relayerNetworkBytecode: Hex;
8
+ /** Creation bytecode for `ShellStake`. Constructor: `(address token, address network)`. */
9
+ export declare const shellStakeBytecode: Hex;
10
+ /** Creation bytecode for `RelayerVault`. Constructor: `(address owner)`. */
11
+ export declare const relayerVaultBytecode: Hex;
12
+ /** Creation bytecode for `RelayerNames`. Constructor: `()`. */
13
+ export declare const relayerNamesBytecode: Hex;
@@ -0,0 +1,15 @@
1
+ // Generated by scripts/export-abi.mjs from contracts/out/Snail.sol/Snail.json.
2
+ // Do not edit: run `cd contracts && forge build && npm run export:abi`.
3
+ // Built with solc 0.8.28+commit.7893614a, optimizer on (2000 runs).
4
+ /** Creation bytecode for `Snail`. Constructor: `()`. */
5
+ export const snailBytecode = "0x6080604052348015600e575f5ffd5b5060017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055611c76806100405f395ff3fe6080604052600436106100e4575f3560e01c80637beb600d11610087578063a0cf0aea11610057578063a0cf0aea14610346578063da9425e214610371578063e6d2c9bc1461039c578063f81eaf251461043c575f5ffd5b80637beb600d146102cd57806384e1433b146102ec5780638ce46ae4146102ff5780639963b4de14610332575f5ffd5b806352a9674b116100c257806352a9674b1461016957806354ec51d81461019c5780636be8d728146101bb5780637319bcbe146102b9575f5ffd5b80630cde111c146100e857806318d9a0bb1461012e5780634dd1f3b214610154575b5f5ffd5b3480156100f3575f5ffd5b5061011b7f793d18a3d90ff177634601723f08a990ef63682417799fd7e97a00f5b5ea29a381565b6040519081526020015b60405180910390f35b348015610139575f5ffd5b50610142600181565b60405160ff9091168152602001610125565b61016761016236600461193f565b61044f565b005b348015610174575f5ffd5b5061011b7fc42532315a261d2551d4b64ffbec49f39fc03fbb02bbdf0f46e79d55d1d76d4181565b3480156101a7575f5ffd5b506101676101b63660046119bb565b610639565b3480156101c6575f5ffd5b506102ac6101d5366004611a69565b6040805160e0810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810191909152506001600160a01b039081165f90815260016020818152604092839020835160e08101855281546001600160801b038116825267ffffffffffffffff7001000000000000000000000000000000008204811694830194909452600160c01b90049092169382019390935290820154808416606083015260ff600160a01b909104166080820152600282015490921660a08301526003015460c082015290565b6040516101259190611a8b565b3480156102c4575f5ffd5b50610142600281565b3480156102d8575f5ffd5b506101676102e73660046119bb565b6107d5565b3480156102f7575f5ffd5b506101425f81565b34801561030a575f5ffd5b5061011b7f452c49729ff1bc1cc3a3a8fb85965852f8920de7712a3423b1cd776e93ee2e0981565b34801561033d575f5ffd5b50610142600381565b348015610351575f5ffd5b506103595f81565b6040516001600160a01b039091168152602001610125565b34801561037c575f5ffd5b5061011b61038b366004611a69565b5f6020819052908152604090205481565b3480156103a7575f5ffd5b5061011b6103b6366004611b10565b604080517fc42532315a261d2551d4b64ffbec49f39fc03fbb02bbdf0f46e79d55d1d76d41602080830191909152468284015230606083015260808201979097526001600160a01b0395861660a082015260c08101949094529190931660e083015261010080830193909352805180830390930183526101209091019052805191012090565b61016761044a366004611b5e565b610930565b610457610977565b6001600160a01b038716610497576040517fad1991f500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b34156104cf576040517f123146a600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f906001600160a01b038916906370a0823190602401602060405180830381865afa15801561052c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105509190611ba9565b90506105676001600160a01b03891633308a6109a5565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f9082906001600160a01b038b16906370a0823190602401602060405180830381865afa1580156105c6573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105ea9190611ba9565b6105f49190611bed565b9050610605898289898989896109ff565b505061063060017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050505050565b610641610977565b6001600160a01b038516610681576040517fd27b444300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f61068b87610e34565b905080516106a3906001600160801b03168686610fdd565b60a08101516001600160a01b038716906106e3907f793d18a3d90ff177634601723f08a990ef63682417799fd7e97a00f5b5ea29a38a848a8a8a8a611069565b610700888360600151845f01516001600160801b0316600361117c565b61070f82606001518787611200565b61073582606001518887855f01516001600160801b03166107309190611bed565b6112b7565b6060808301518351604080516001600160801b039092168252602082018590526001600160a01b038a811691830191909152928101889052908216918a16907f76c70adba570b93516d339033e9eeebea04bee345b6320a6427da0731bbbc6aa906080015b60405180910390a350506107cd60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b6107dd610977565b6001600160a01b03851661081d576040517fd27b444300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6108278761134e565b9050610840815f01516001600160801b03168686610fdd565b6001600160a01b03861661087a887f452c49729ff1bc1cc3a3a8fb85965852f8920de7712a3423b1cd776e93ee2e0981848a8a8a8a611069565b610897888360600151845f01516001600160801b0316600261117c565b6108a682606001518787611200565b6108c782606001518887855f01516001600160801b03166107309190611bed565b6060808301518351604080516001600160801b039092168252602082018590526001600160a01b038a811691830191909152928101889052908216918a16907f7a9d8864bd38835e7642cb00b9830aea55733b8c62a2637a2c43bdd72af32ebc9060800161079a565b610938610977565b6109475f3487878787876109ff565b61097060017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b61097f611509565b60027f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6109b3848484846001611566565b6109f9576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024015b60405180910390fd5b50505050565b6001600160a01b038516610a3f576040517f06c5803400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b855f03610a78576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160801b03861115610ab9576040517f0590fb9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0385165f9081526001602081905260409091200154600160a01b900460ff1615610b16576040517fa7d399b300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff821615610bf657428267ffffffffffffffff1611610b69576040517f79955a1000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8167ffffffffffffffff168367ffffffffffffffff1610610bb6576040517f9a20f5bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038416610bf6576040517faad0567000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0387165f9081526020819052604081208054889290610c1d908490611c00565b925050819055506040518060e00160405280876001600160801b031681526020018467ffffffffffffffff1681526020018367ffffffffffffffff168152602001886001600160a01b03168152602001600160ff168152602001856001600160a01b031681526020018281525060015f876001600160a01b03166001600160a01b031681526020019081526020015f205f820151815f015f6101000a8154816001600160801b0302191690836001600160801b031602179055506020820151815f0160106101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506040820151815f0160186101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506060820151816001015f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555060808201518160010160146101000a81548160ff021916908360ff16021790555060a0820151816002015f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555060c08201518160030155905050866001600160a01b0316856001600160a01b03167fa09080a872bd5211d5a8d791358ac0a233e33112c3a309bde250589fd0405c8188868686604051610e23949392919093845267ffffffffffffffff928316602085015291166040830152606082015260800190565b60405180910390a350505050505050565b6040805160e0810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810191909152506001600160a01b038082165f90815260016020818152604092839020835160e08101855281546001600160801b038116825267ffffffffffffffff7001000000000000000000000000000000008204811694830194909452600160c01b90049092169382019390935282820154808516606083015260ff600160a01b9091041660808201819052600284015490941660a082015260039092015460c0830152909114610f45576040517f0195bb7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806040015167ffffffffffffffff165f03610f8c576040517f3742d1f600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806040015167ffffffffffffffff16421015610fd4576040517f59912c0600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b5050565b82811115611017576040517f8399777400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821615801561102d57508015155b15611064576040517f21bb10cc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b604080517fc42532315a261d2551d4b64ffbec49f39fc03fbb02bbdf0f46e79d55d1d76d416020808301919091524682840152306060830152608082018a90526001600160a01b03808a1660a084015260c08301899052871660e0830152610100808301879052835180840390910181526101209092019092528051910120886001600160a01b03166111318285858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506115ec92505050565b6001600160a01b031614611171576040517f5cd5d23300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050505050565b6001600160a01b0383165f90815260208190526040812080548492906111a3908490611bed565b90915550506001600160a01b039093165f90815260016020819052604090912001805460ff909416600160a01b027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909416939093179092555050565b805f0361120c57505050565b6001600160a01b0383166112a3575f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114611263576040519150601f19603f3d011682016040523d82523d5f602084013e611268565b606091505b50509050806109f9576040517f8b3127ce00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110646001600160a01b0384168383611616565b6001600160a01b0383166112a3575f826001600160a01b0316826040515f6040518083038185875af1925050503d805f811461130e576040519150601f19603f3d011682016040523d82523d5f602084013e611313565b606091505b50509050806109f9576040517fa2df88a700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160e0810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810191909152506001600160a01b038082165f90815260016020818152604092839020835160e08101855281546001600160801b038116825267ffffffffffffffff7001000000000000000000000000000000008204811694830194909452600160c01b90049092169382019390935282820154808516606083015260ff600160a01b9091041660808201819052600284015490941660a082015260039092015460c083015290911461145f576040517f0195bb7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806020015167ffffffffffffffff164210156114a7576040517fc201b25200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604081015167ffffffffffffffff16158015906114d25750806040015167ffffffffffffffff164210155b15610fd4576040517f203d82d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0054600203611564576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040517f23b872dd000000000000000000000000000000000000000000000000000000005f8181526001600160a01b038781166004528616602452604485905291602083606481808c5af1925060015f511483166115db5783831516156115cf573d5f823e3d81fd5b5f883b113d1516831692505b604052505f60605295945050505050565b5f5f5f5f6115fa8686611664565b92509250925061160a82826116ad565b50909150505b92915050565b61162383838360016117b0565b611064576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024016109f0565b5f5f5f835160410361169b576020840151604085015160608601515f1a61168d8882858561182b565b9550955095505050506116a6565b505081515f91506002905b9250925092565b5f8260038111156116c0576116c0611c13565b036116c9575050565b60018260038111156116dd576116dd611c13565b03611714576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600282600381111561172857611728611c13565b03611762576040517ffce698f7000000000000000000000000000000000000000000000000000000008152600481018290526024016109f0565b600382600381111561177657611776611c13565b03610fd9576040517fd78bce0c000000000000000000000000000000000000000000000000000000008152600481018290526024016109f0565b6040517fa9059cbb000000000000000000000000000000000000000000000000000000005f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f5114831661181f578383151615611813573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561186457505f91506003905082611907565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156118b5573d5f5f3e3d5ffd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001519150506001600160a01b0381166118fe57505f925060019150829050611907565b92505f91508190505b9450945094915050565b6001600160a01b0381168114611925575f5ffd5b50565b803567ffffffffffffffff81168114610fd4575f5ffd5b5f5f5f5f5f5f5f60e0888a031215611955575f5ffd5b873561196081611911565b965060208801359550604088013561197781611911565b9450606088013561198781611911565b935061199560808901611928565b92506119a360a08901611928565b96999598509396929591949193505060c09091013590565b5f5f5f5f5f5f60a087890312156119d0575f5ffd5b86356119db81611911565b955060208701356119eb81611911565b945060408701356119fb81611911565b935060608701359250608087013567ffffffffffffffff811115611a1d575f5ffd5b8701601f81018913611a2d575f5ffd5b803567ffffffffffffffff811115611a43575f5ffd5b896020828401011115611a54575f5ffd5b60208201935080925050509295509295509295565b5f60208284031215611a79575f5ffd5b8135611a8481611911565b9392505050565b5f60e0820190506001600160801b03835116825267ffffffffffffffff602084015116602083015267ffffffffffffffff60408401511660408301526001600160a01b03606084015116606083015260ff608084015116608083015260a0830151611b0160a08401826001600160a01b03169052565b5060c092830151919092015290565b5f5f5f5f5f60a08688031215611b24575f5ffd5b853594506020860135611b3681611911565b9350604086013592506060860135611b4d81611911565b949793965091946080013592915050565b5f5f5f5f5f60a08688031215611b72575f5ffd5b8535611b7d81611911565b94506020860135611b8d81611911565b9350611b9b60408701611928565b9250611b4d60608701611928565b5f60208284031215611bb9575f5ffd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8181038181111561161057611610611bc0565b8082018082111561161057611610611bc0565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffdfea26469706673582212200c71019bb4ed0d01612748c088bc40bfadfccfc1cf1d456ef89c226906e25f7964736f6c634300081c0033";
6
+ /** Creation bytecode for `SponsoredSmail`. Constructor: `(address network)`. */
7
+ export const sponsoredSmailBytecode = "0x60c060405234801561000f575f5ffd5b5060405161205938038061205983398101604081905261002e916100fa565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00556001600160a01b0382163b5f036100a25760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206e6574776f726b60881b60448201526064015b60405180910390fd5b60648110156100e65760405162461bcd60e51b815260206004820152601060248201526f109859081b5a5b9a5b5d5b481cd95b9960821b6044820152606401610099565b60a0526001600160a01b0316608052610131565b5f5f6040838503121561010b575f5ffd5b82516001600160a01b0381168114610121575f5ffd5b6020939093015192949293505050565b60805160a051611edd61017c5f395f81816103db015261097601525f818161054101528181610a4d01528181610d8701528181610dcc01528181610f550152610fb20152611edd5ff3fe60806040526004361061013d575f3560e01c80638ce46ae4116100bb578063da9425e211610071578063ed1bd76c11610057578063ed1bd76c146104fc578063ed45d11414610530578063f81eaf2514610563575f5ffd5b8063da9425e214610431578063e6d2c9bc1461045c575f5ffd5b8063a0cf0aea116100a1578063a0cf0aea1461039f578063af238981146103ca578063c5499258146103fd575f5ffd5b80638ce46ae4146103585780639963b4de1461038b575f5ffd5b806354ec51d8116101105780637319bcbe116100f65780637319bcbe146103125780637beb600d1461032657806384e1433b14610345575f5ffd5b806354ec51d8146101f55780636be8d72814610214575f5ffd5b80630cde111c1461014157806318d9a0bb146101875780634dd1f3b2146101ad57806352a9674b146101c2575b5f5ffd5b34801561014c575f5ffd5b506101747f793d18a3d90ff177634601723f08a990ef63682417799fd7e97a00f5b5ea29a381565b6040519081526020015b60405180910390f35b348015610192575f5ffd5b5061019b600181565b60405160ff909116815260200161017e565b6101c06101bb366004611b87565b610576565b005b3480156101cd575f5ffd5b506101747fc42532315a261d2551d4b64ffbec49f39fc03fbb02bbdf0f46e79d55d1d76d4181565b348015610200575f5ffd5b506101c061020f366004611c03565b6105a8565b34801561021f575f5ffd5b5061030561022e366004611cb1565b6040805160e0810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810191909152506001600160a01b039081165f90815260016020818152604092839020835160e08101855281546001600160801b038116825267ffffffffffffffff7001000000000000000000000000000000008204811694830194909452600160c01b90049092169382019390935290820154808416606083015260ff600160a01b909104166080820152600282015490921660a08301526003015460c082015290565b60405161017e9190611cd3565b34801561031d575f5ffd5b5061019b600281565b348015610331575f5ffd5b506101c0610340366004611c03565b61074e565b348015610350575f5ffd5b5061019b5f81565b348015610363575f5ffd5b506101747f452c49729ff1bc1cc3a3a8fb85965852f8920de7712a3423b1cd776e93ee2e0981565b348015610396575f5ffd5b5061019b600381565b3480156103aa575f5ffd5b506103b25f81565b6040516001600160a01b03909116815260200161017e565b3480156103d5575f5ffd5b506101747f000000000000000000000000000000000000000000000000000000000000000081565b348015610408575f5ffd5b506103b2610417366004611cb1565b60026020525f90815260409020546001600160a01b031681565b34801561043c575f5ffd5b5061017461044b366004611cb1565b5f6020819052908152604090205481565b348015610467575f5ffd5b50610174610476366004611d58565b604080517fc42532315a261d2551d4b64ffbec49f39fc03fbb02bbdf0f46e79d55d1d76d41602080830191909152468284015230606083015260808201979097526001600160a01b0395861660a082015260c08101949094529190931660e083015261010080830193909352805180830390930183526101209091019052805191012090565b348015610507575f5ffd5b5061051b610516366004611da6565b6108a9565b6040805192835260208301919091520161017e565b34801561053b575f5ffd5b506103b27f000000000000000000000000000000000000000000000000000000000000000081565b6101c0610571366004611dbd565b6108c9565b6040517f24a0114400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105b0610b21565b6001600160a01b0385166105f0576040517fd27b444300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6105fa87610b4f565b90506106068787610cf4565b805161061c906001600160801b03168686610d4d565b60a08101516001600160a01b0387169061065c907f793d18a3d90ff177634601723f08a990ef63682417799fd7e97a00f5b5ea29a38a848a8a8a8a610e2b565b610679888360600151845f01516001600160801b03166003610f3e565b61068882606001518787611010565b6106ae82606001518887855f01516001600160801b03166106a99190611e1c565b6110c7565b6060808301518351604080516001600160801b039092168252602082018590526001600160a01b038a811691830191909152928101889052908216918a16907f76c70adba570b93516d339033e9eeebea04bee345b6320a6427da0731bbbc6aa906080015b60405180910390a3505061074660017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b610756610b21565b6001600160a01b038516610796576040517fd27b444300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6107a08761115e565b90506107b9815f01516001600160801b03168686610d4d565b6001600160a01b0386166107f3887f452c49729ff1bc1cc3a3a8fb85965852f8920de7712a3423b1cd776e93ee2e0981848a8a8a8a610e2b565b610810888360600151845f01516001600160801b03166002610f3e565b61081f82606001518787611010565b61084082606001518887855f01516001600160801b03166106a99190611e1c565b6060808301518351604080516001600160801b039092168252602082018590526001600160a01b038a811691830191909152928101889052908216918a16907f7a9d8864bd38835e7642cb00b9830aea55733b8c62a2637a2c43bdd72af32ebc90608001610713565b5f806108b6606484611e43565b91506108c28284611e56565b9050915091565b6108d1610b21565b5f60656108de8134611e69565b6108e9906064611e7c565b6108f4906064611e56565b6108fe9190611e43565b610909606534611e43565b610914906064611e7c565b61091e9190611e56565b90505f5f61092b836108a9565b91509150815f148061093d5750348114155b15610974576040517f88bff4b700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000008310156109ce576040517ff07a848200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109dd5f848a8a8a8a8a611319565b6001600160a01b038881165f818152600260205260409081902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001633179055517f69b59e7500000000000000000000000000000000000000000000000000000000815260048101919091527f0000000000000000000000000000000000000000000000000000000000000000909116906369b59e759084906024015f604051808303818588803b158015610a92575f5ffd5b505af1158015610aa4573d5f5f3e3d5ffd5b505060408051878152602081018790526001600160a01b038d1694507f48a8207472b21399926cf12fd2da4adbaef6758f4e6c99a8be2d0b6380af9263935001905060405180910390a2505050610b1a60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b610b2961174e565b60027f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6040805160e0810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810191909152506001600160a01b038082165f90815260016020818152604092839020835160e08101855281546001600160801b038116825267ffffffffffffffff7001000000000000000000000000000000008204811694830194909452600160c01b90049092169382019390935282820154808516606083015260ff600160a01b9091041660808201819052600284015490941660a082015260039092015460c0830152909114610c60576040517f0195bb7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806040015167ffffffffffffffff165f03610ca7576040517f3742d1f600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806040015167ffffffffffffffff16421015610cef576040517f59912c0600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6001600160a01b038083165f90815260026020526040902054828216911614610d49576040517f8ec6c03000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050565b8015610d85576040517f8399777400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316148015610def5750336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614155b15610e26576040517fb9b3b24900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b604080517fc42532315a261d2551d4b64ffbec49f39fc03fbb02bbdf0f46e79d55d1d76d416020808301919091524682840152306060830152608082018a90526001600160a01b03808a1660a084015260c08301899052871660e0830152610100808301879052835180840390910181526101209092019092528051910120886001600160a01b0316610ef38285858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506117ab92505050565b6001600160a01b031614610f33576040517f5cd5d23300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050505050565b610f4a848484846117d5565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461100a576040517f1aaf649e0000000000000000000000000000000000000000000000000000000081526001600160a01b0385811660048301527f00000000000000000000000000000000000000000000000000000000000000001690631aaf649e906024015f604051808303815f87803b158015610ff3575f5ffd5b505af1158015611005573d5f5f3e3d5ffd5b505050505b50505050565b805f0361101c57505050565b6001600160a01b0383166110b3575f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114611073576040519150601f19603f3d011682016040523d82523d5f602084013e611078565b606091505b505090508061100a576040517f8b3127ce00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e266001600160a01b0384168383611859565b6001600160a01b0383166110b3575f826001600160a01b0316826040515f6040518083038185875af1925050503d805f811461111e576040519150601f19603f3d011682016040523d82523d5f602084013e611123565b606091505b505090508061100a576040517fa2df88a700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160e0810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810191909152506001600160a01b038082165f90815260016020818152604092839020835160e08101855281546001600160801b038116825267ffffffffffffffff7001000000000000000000000000000000008204811694830194909452600160c01b90049092169382019390935282820154808516606083015260ff600160a01b9091041660808201819052600284015490941660a082015260039092015460c083015290911461126f576040517f0195bb7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806020015167ffffffffffffffff164210156112b7576040517fc201b25200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604081015167ffffffffffffffff16158015906112e25750806040015167ffffffffffffffff164210155b15610cef576040517f203d82d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516611359576040517f06c5803400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b855f03611392576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160801b038611156113d3576040517f0590fb9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0385165f9081526001602081905260409091200154600160a01b900460ff1615611430576040517fa7d399b300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff82161561151057428267ffffffffffffffff1611611483576040517f79955a1000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8167ffffffffffffffff168367ffffffffffffffff16106114d0576040517f9a20f5bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038416611510576040517faad0567000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0387165f9081526020819052604081208054889290611537908490611e56565b925050819055506040518060e00160405280876001600160801b031681526020018467ffffffffffffffff1681526020018367ffffffffffffffff168152602001886001600160a01b03168152602001600160ff168152602001856001600160a01b031681526020018281525060015f876001600160a01b03166001600160a01b031681526020019081526020015f205f820151815f015f6101000a8154816001600160801b0302191690836001600160801b031602179055506020820151815f0160106101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506040820151815f0160186101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506060820151816001015f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555060808201518160010160146101000a81548160ff021916908360ff16021790555060a0820151816002015f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555060c08201518160030155905050866001600160a01b0316856001600160a01b03167fa09080a872bd5211d5a8d791358ac0a233e33112c3a309bde250589fd0405c818886868660405161173d949392919093845267ffffffffffffffff928316602085015291166040830152606082015260800190565b60405180910390a350505050505050565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00546002036117a9576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f5f5f5f6117b986866118ac565b9250925092506117c982826118f5565b50909150505b92915050565b6001600160a01b0383165f90815260208190526040812080548492906117fc908490611e1c565b90915550506001600160a01b039093165f90815260016020819052604090912001805460ff909416600160a01b027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909416939093179092555050565b61186683838360016119f8565b610e26576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024015b60405180910390fd5b5f5f5f83516041036118e3576020840151604085015160608601515f1a6118d588828585611a73565b9550955095505050506118ee565b505081515f91506002905b9250925092565b5f82600381111561190857611908611e93565b03611911575050565b600182600381111561192557611925611e93565b0361195c576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600282600381111561197057611970611e93565b036119aa576040517ffce698f7000000000000000000000000000000000000000000000000000000008152600481018290526024016118a3565b60038260038111156119be576119be611e93565b03610d49576040517fd78bce0c000000000000000000000000000000000000000000000000000000008152600481018290526024016118a3565b6040517fa9059cbb000000000000000000000000000000000000000000000000000000005f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f51148316611a67578383151615611a5b573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115611aac57505f91506003905082611b4f565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015611afd573d5f5f3e3d5ffd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001519150506001600160a01b038116611b4657505f925060019150829050611b4f565b92505f91508190505b9450945094915050565b6001600160a01b0381168114611b6d575f5ffd5b50565b803567ffffffffffffffff81168114610cef575f5ffd5b5f5f5f5f5f5f5f60e0888a031215611b9d575f5ffd5b8735611ba881611b59565b9650602088013595506040880135611bbf81611b59565b94506060880135611bcf81611b59565b9350611bdd60808901611b70565b9250611beb60a08901611b70565b96999598509396929591949193505060c09091013590565b5f5f5f5f5f5f60a08789031215611c18575f5ffd5b8635611c2381611b59565b95506020870135611c3381611b59565b94506040870135611c4381611b59565b935060608701359250608087013567ffffffffffffffff811115611c65575f5ffd5b8701601f81018913611c75575f5ffd5b803567ffffffffffffffff811115611c8b575f5ffd5b896020828401011115611c9c575f5ffd5b60208201935080925050509295509295509295565b5f60208284031215611cc1575f5ffd5b8135611ccc81611b59565b9392505050565b5f60e0820190506001600160801b03835116825267ffffffffffffffff602084015116602083015267ffffffffffffffff60408401511660408301526001600160a01b03606084015116606083015260ff608084015116608083015260a0830151611d4960a08401826001600160a01b03169052565b5060c092830151919092015290565b5f5f5f5f5f60a08688031215611d6c575f5ffd5b853594506020860135611d7e81611b59565b9350604086013592506060860135611d9581611b59565b949793965091946080013592915050565b5f60208284031215611db6575f5ffd5b5035919050565b5f5f5f5f5f60a08688031215611dd1575f5ffd5b8535611ddc81611b59565b94506020860135611dec81611b59565b9350611dfa60408701611b70565b9250611d9560608701611b70565b634e487b7160e01b5f52601160045260245ffd5b818103818111156117cf576117cf611e08565b634e487b7160e01b5f52601260045260245ffd5b5f82611e5157611e51611e2f565b500490565b808201808211156117cf576117cf611e08565b5f82611e7757611e77611e2f565b500690565b80820281158282048414176117cf576117cf611e08565b634e487b7160e01b5f52602160045260245ffdfea264697066735822122046a4a9a43561b0846df781e7538ec02128c31d40d15168039c5a2eb89c05a02664736f6c634300081c0033";
8
+ /** Creation bytecode for `RelayerNetwork`. Constructor: `(address token, address maintainer)`. */
9
+ export const relayerNetworkBytecode = "0x6101406040526001600355348015610015575f5ffd5b5060405161655b38038061655b83398101604081905261003491610231565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00556001600160a01b0384166100a55760405162461bcd60e51b815260206004820152600f60248201526e2d32b9379036b0b4b73a30b4b732b960891b60448201526064015b60405180910390fd5b6001600160a01b0383166100ea5760405162461bcd60e51b815260206004820152600c60248201526b2d32b937903932b630bcb2b960a11b604482015260640161009c565b655af3107a4000811180156101075750670de0b6b3a76400008111155b6101485760405162461bcd60e51b81526020600482015260126024820152710426164206d696e696d756d20746f702d75760741b604482015260640161009c565b6101208190526001600160a01b0380841661010052841660a0523360c05260405185903090849061017890610209565b6001600160a01b0393841681529290911660208301526040820152606001604051809103905ff0801580156101af573d5f5f3e3d5ffd5b506001600160a01b0316608052446101c8600143610283565b60408051602081019390935290409082015230606082015260800160408051601f19818403018152919052805160209091012060e052506102a89350505050565b61274e80613e0d83390190565b80516001600160a01b038116811461022c575f5ffd5b919050565b5f5f5f5f5f60a08688031215610245575f5ffd5b61024e86610216565b945061025c60208701610216565b935061026a60408701610216565b6060870151608090970151959894975095949392505050565b818103818111156102a257634e487b7160e01b5f52601160045260245ffd5b92915050565b60805160a05160c05160e0516101005161012051613a996103745f395f818161092201528181610abc0152611f1301525f81816103cb01528181610dc001526124d801525f81816105e80152612bfd01525f81816108ef0152611a9401525f81816106f10152818161172e0152611b3b01525f8181610992015281816109dc01528181610b2f015281816111790152818161127e0152818161188201528181611b9001528181611caa01528181611e8201528181611f73015281816126de015261281d0152613a995ff3fe60806040526004361061030e575f3560e01c80638d46394f1161019c578063c0a2526c116100e7578063d3f7bbd911610092578063da6444581161006d578063da64445814610944578063e337bece14610958578063ea0e35b11461096d578063f11d2ff414610981575f5ffd5b8063d3f7bbd9146108c9578063d5f39488146108de578063d9f0cb7d14610911575f5ffd5b8063cd3293de116100c2578063cd3293de14610874578063cdd938e614610889578063cf7e667b1461089e575f5ffd5b8063c0a2526c1461081f578063c3543eb414610834578063ca2303e614610849575f5ffd5b8063a79436dd11610147578063ae9bb69211610122578063ae9bb692146107d4578063b62e6fc6146107dc578063b756dfbb1461080a575f5ffd5b8063a79436dd14610775578063ab91c7b0146107a0578063ae796ab3146107b5575f5ffd5b80639c5655d6116101775780639c5655d6146107135780639f0c310114610728578063a361411514610756575f5ffd5b80638d46394f14610667578063936f4720146106865780639850d32b146106e0575f5ffd5b8063549f3d251161025c57806369868be5116102075780638180b8cf116101e25780638180b8cf1461060a5780638b412610146106295780638c8adaad14610648575f5ffd5b806369868be51461059f57806369b59e75146105c45780637d94792a146105d7575f5ffd5b8063636f35d311610237578063636f35d314610537578063671a308b1461056b57806367dfd4c914610580575f5ffd5b8063549f3d25146104c15780635daf08ca146104ec5780635f2a9f411461051c575f5ffd5b80631aaf649e116102bc5780633d5a70c2116102975780633d5a70c2146104635780634331ed1f146104815780634b89364214610495575f5ffd5b80631aaf649e1461040c57806320d2c9511461042b57806329279a3814610444575f5ffd5b8063146ca531116102ec578063146ca5311461039757806316cdcf87146103ba5780631727bc38146103ed575f5ffd5b8063049878f3146103125780630709df45146103275780630f7bf90814610378575b5f5ffd5b610325610320366004612ee2565b6109b4565b005b348015610332575f5ffd5b5061035b610341366004612f0d565b60076020525f90815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b348015610383575f5ffd5b50610325610392366004612f2f565b610dad565b3480156103a2575f5ffd5b506103ac60035481565b60405190815260200161036f565b3480156103c5575f5ffd5b5061035b7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103f8575f5ffd5b506103ac610407366004612ee2565b611073565b348015610417575f5ffd5b50610325610426366004612f0d565b6110df565b348015610436575f5ffd5b506103ac655af3107a400081565b34801561044f575f5ffd5b5061032561045e366004612ee2565b611151565b34801561046e575f5ffd5b505f5461035b906001600160a01b031681565b34801561048c575f5ffd5b506010546103ac565b3480156104a0575f5ffd5b506104b46104af366004612f0d565b61130e565b60405161036f9190613003565b3480156104cc575f5ffd5b506103ac6104db366004612ee2565b600a6020525f908152604090205481565b3480156104f7575f5ffd5b5061050b610506366004612ee2565b6113a5565b60405161036f959493929190613015565b348015610527575f5ffd5b506103ac670de0b6b3a764000081565b348015610542575f5ffd5b5061035b610551366004612f0d565b60086020525f90815260409020546001600160a01b031681565b348015610576575f5ffd5b506103ac600d5481565b34801561058b575f5ffd5b5061032561059a366004612ee2565b61146c565b3480156105aa575f5ffd5b506105b3611486565b60405161036f959493929190613068565b6103256105d2366004612f0d565b6115b7565b3480156105e2575f5ffd5b506103ac7f000000000000000000000000000000000000000000000000000000000000000081565b348015610615575f5ffd5b50610325610624366004612f0d565b61171b565b348015610634575f5ffd5b506103256106433660046130af565b611823565b348015610653575f5ffd5b50610325610662366004612f0d565b611a89565b348015610672575f5ffd5b50610325610681366004612ee2565b611b28565b348015610691575f5ffd5b506106d06106a0366004612ee2565b5f908152600560209081526040808320546001600160a01b031683526004909152902054655af3107a4000111590565b604051901515815260200161036f565b3480156106eb575f5ffd5b5061035b7f000000000000000000000000000000000000000000000000000000000000000081565b34801561071e575f5ffd5b506103ac60105481565b348015610733575f5ffd5b506106d0610742366004612ee2565b60176020525f908152604090205460ff1681565b348015610761575f5ffd5b50610325610770366004612ee2565b611d3e565b348015610780575f5ffd5b506103ac61078f366004612f0d565b60046020525f908152604090205481565b3480156107ab575f5ffd5b506103ac60145481565b3480156107c0575f5ffd5b506103256107cf366004612ee2565b611e03565b610325611e65565b3480156107e7575f5ffd5b506106d06107f6366004612ee2565b60116020525f908152604090205460ff1681565b348015610815575f5ffd5b506103ac60135481565b34801561082a575f5ffd5b5061035b61dead81565b34801561083f575f5ffd5b506103ac600e5481565b348015610854575f5ffd5b506103ac610863366004612f0d565b60066020525f908152604090205481565b34801561087f575f5ffd5b506103ac60025481565b348015610894575f5ffd5b506103ac61ea6081565b3480156108a9575f5ffd5b506103ac6108b8366004612f0d565b600b6020525f908152604090205481565b3480156108d4575f5ffd5b506103ac60125481565b3480156108e9575f5ffd5b5061035b7f000000000000000000000000000000000000000000000000000000000000000081565b34801561091c575f5ffd5b506103ac7f000000000000000000000000000000000000000000000000000000000000000081565b34801561094f575f5ffd5b50610325612072565b348015610963575f5ffd5b506103ac60015481565b348015610978575f5ffd5b506103ac606481565b34801561098c575f5ffd5b5061035b7f000000000000000000000000000000000000000000000000000000000000000081565b6109bc6120ab565b604051630ea38fab60e41b81526004810182905233906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063ea38fab090602401602060405180830381865afa158015610a21573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a4591906130dd565b6001600160a01b0316141580610a6b57505f8181526005602052604090206004015460ff165b80610a8357505f8181526017602052604090205460ff165b15610aa1576040516339ec64c160e11b815260040160405180910390fd5b610aab33346120d9565b335f908152600460205260409020547f00000000000000000000000000000000000000000000000000000000000000001115610afa57604051634be10a6d60e01b815260040160405180910390fd5b6040517f282d3fdf000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063282d3fdf906044015f604051808303815f87803b158015610b78575f5ffd5b505af1158015610b8a573d5f5f3e3d5ffd5b5050335f908152600760205260409020546001600160a01b03169150819050610c1b5733604051610bba90612ed5565b6001600160a01b039091168152602001604051809103905ff080158015610be3573d5f5f3e3d5ffd5b50335f908152600760205260409020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03831617905590505b6040805160a0810182523381526001600160a01b038381166020808401828152848601928352855180830187525f80825260608701918252608087018190528981526005909352959091208451815490851673ffffffffffffffffffffffffffffffffffffffff19918216178255915160018201805491861691841691909117905591516002830180549190941691161790915591519091906003820190610cc39082613182565b50608091909101516004909101805491151560ff199283161790555f8381526017602090815260408083208054909416600117909355601354601690915291812082905503610d16576012829055610d2a565b6013545f9081526015602052604090208290555b601382905560148054339184917f09e7e36ee4664ffa5d133fe7942614621f5428ec2bab170dd8bd6549f2e6525e915f610d6383613251565b9091555060405190815260200160405180910390a3610d806121a4565b50610daa60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50565b610db56120ab565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610e17576040517fdff5046d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5a90505f5f610e256121d7565b5f828152600560209081526040808320600201546001600160a01b038e81168552600b909352908320549496509294509091169190819003610e7a576040516339ec64c160e11b815260040160405180910390fd5b8715610f03575f80546040517f54ec51d80000000000000000000000000000000000000000000000000000000081526001600160a01b03909116916354ec51d891610ed1918e918e9130918e908e90600401613269565b5f604051808303815f87803b158015610ee8575f5ffd5b505af1158015610efa573d5f5f3e3d5ffd5b50505050610f82565b5f80546040517f7beb600d0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911691637beb600d91610f54918e918e9130918e908e90600401613269565b5f604051808303815f87803b158015610f6b575f5ffd5b505af1158015610f7d573d5f5f3e3d5ffd5b505050505b6001600160a01b038a165f908152600b60205260408120819055610fa76002836132e2565b90505f8160025410610fb95781610fbd565b6002545b90508060025f828254610fd091906132f5565b90915550610fe09050818461330e565b9250858c6001600160a01b03167f97993dec89403a495c90c0f79d3e3a1a74df8a28cea12a3582e46f5bb19844478761101b8a89898e612320565b6040805192835260208301919091528e15159082015260600160405180910390a35050505050505061106c60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b5f8181526017602052604081205460ff166110a1576040516339ec64c160e11b815260040160405180910390fd5b5f828152601660205260409020545b80156110d957816110c081613251565b5f92835260166020526040909220549192506110b09050565b50919050565b5f546001600160a01b03163314611108576040516282b42960e81b815260040160405180910390fd5b6001600160a01b0381165f908152600b6020526040812054600280549192909161113390849061330e565b90915550506001600160a01b03165f908152600b6020526040812055565b6111596120ab565b604051630ea38fab60e41b81526004810182905233906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063ea38fab090602401602060405180830381865afa1580156111be573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111e291906130dd565b6001600160a01b031614611208576040516282b42960e81b815260040160405180910390fd5b5f8181526005602052604090206004015460ff16156112305761122b81336125ed565b611250565b5f8181526017602052604090205460ff16156112505761125081336127e5565b6040517f2cbb26190000000000000000000000000000000000000000000000000000000081523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632cbb2619906024015f604051808303815f87803b1580156112c7575f5ffd5b505af11580156112d9573d5f5f3e3d5ffd5b505050506112e56121a4565b610daa60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60096020525f9081526040902080546113269061310c565b80601f01602080910402602001604051908101604052809291908181526020018280546113529061310c565b801561139d5780601f106113745761010080835404028352916020019161139d565b820191905f5260205f20905b81548152906001019060200180831161138057829003601f168201915b505050505081565b60056020525f908152604090208054600182015460028301546003840180546001600160a01b03948516959385169490921692916113e29061310c565b80601f016020809104026020016040519081016040528092919081815260200182805461140e9061310c565b80156114595780601f1061143057610100808354040283529160200191611459565b820191905f5260205f20905b81548152906001019060200180831161143c57829003601f168201915b5050506004909301549192505060ff1685565b6114746120ab565b61147e81336125ed565b6112e56121a4565b600e545f808060608482036114c7576040517f8fafc6bb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600c54600d54146114da576003546114e8565b6003546114e890600161330e565b5f868152600560205260409020600181015460028201546003830180549498509293899389936001600160a01b0390811693169181906115279061310c565b80601f01602080910402602001604051908101604052809291908181526020018280546115539061310c565b801561159e5780601f106115755761010080835404028352916020019161159e565b820191905f5260205f20905b81548152906001019060200180831161158157829003601f168201915b5050505050905095509550955095509550509091929394565b5f546001600160a01b031633146115e0576040516282b42960e81b815260040160405180910390fd5b5f60646115ee346032613321565b6115f891906132e2565b90505f606461160834601e613321565b61161291906132e2565b90505f8161162084346132f5565b61162a91906132f5565b6001600160a01b0385165f908152600b6020526040812085905560018054929350849290919061165b90849061330e565b90915550506040515f9061dead9083908381818185875af1925050503d805f81146116a1576040519150601f19603f3d011682016040523d82523d5f602084013e6116a6565b606091505b50509050806116c8576040516307a4ced160e51b815260040160405180910390fd5b60408051858152602081018590529081018390526001600160a01b038616907f7e4199a81d431b89a16814e8730ae102c7b9b30c1a661bc67be86f4b185b17339060600160405180910390a25050505050565b6117236120ab565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614158061176257506001600160a01b038116155b1561177f576040516282b42960e81b815260040160405180910390fd5b600180545f918290556040519091906001600160a01b0384169083908381818185875af1925050503d805f81146117d1576040519150601f19603f3d011682016040523d82523d5f602084013e6117d6565b606091505b50509050806117f8576040516307a4ced160e51b815260040160405180910390fd5b5050610daa60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b61182b6120ab565b6001600160a01b038116158061184e5750335f9081526004602052604090205482115b1561186b576040516282b42960e81b815260040160405180910390fd5b604051632768601b60e21b81523360048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690639da1806c90602401602060405180830381865afa1580156118cf573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118f39190613338565b9050801580159061192b57505f8181526005602052604090206004015460ff168061192b57505f8181526017602052604090205460ff165b80156119565750335f90815260046020526040902054655af3107a4000906119549085906132f5565b105b1561197457604051634be10a6d60e01b815260040160405180910390fd5b335f90815260046020526040812080548592906119929084906132f5565b9091555050335f81815260046020908152604091829020548251878152918201526001600160a01b03851692917f311db0c5318b1c7d4ef72aaa96480e3697f902c7078a85a0a5ae91308148e5e0910160405180910390a35f826001600160a01b0316846040515f6040518083038185875af1925050503d805f8114611a33576040519150601f19603f3d011682016040523d82523d5f602084013e611a38565b606091505b5050905080611a5a576040516307a4ced160e51b815260040160405180910390fd5b5050611a8560017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016141580611aca57505f546001600160a01b031615155b80611add57506001600160a01b0381163b155b15611afa576040516282b42960e81b815260040160405180910390fd5b5f805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b611b306120ab565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611b78576040516282b42960e81b815260040160405180910390fd5b604051630ea38fab60e41b8152600481018290525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063ea38fab090602401602060405180830381865afa158015611bdd573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c0191906130dd565b90506001600160a01b038116611c2a576040516339ec64c160e11b815260040160405180910390fd5b5f8281526005602052604090206004015460ff1615611c5257611c4d82826125ed565b611c72565b5f8281526017602052604090205460ff1615611c7257611c7282826127e5565b6040517f776325130000000000000000000000000000000000000000000000000000000081526001600160a01b0382811660048301527f000000000000000000000000000000000000000000000000000000000000000016906377632513906024015f604051808303815f87803b158015611ceb575f5ffd5b505af1158015611cfd573d5f5f3e3d5ffd5b50506040516001600160a01b03841692508491507f4cf00cc1b3116a21c2ca5386f08b33aa316cf65a74a8f6c0432c836de892f5c4905f90a3610d806121a4565b611d466120ab565b5f8181526005602052604090206004015460ff161580611d8f57505f818152600560209081526040808320546001600160a01b031683526004909152902054655af3107a400011155b15611dad576040516339ec64c160e11b815260040160405180910390fd5b5f81815260056020526040902054611dcf9082906001600160a01b03166125ed565b604051339082907f51df943e239d8bce6b1f0b8a3dbf3759ca18e1383eaabac748fa58f1e75cd493905f90a36112e56121a4565b611e0b6120ab565b5f8181526017602052604090205460ff161580611e3e57505f818152600560205260409020546001600160a01b03163314155b15611e5b576040516282b42960e81b815260040160405180910390fd5b6112e581336127e5565b611e6d6120ab565b604051632768601b60e21b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690639da1806c90602401602060405180830381865afa158015611ecf573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ef39190613338565b5f03611f11576040516282b42960e81b815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000341015611f5257604051634be10a6d60e01b815260040160405180910390fd5b611f5c33346120d9565b604051632768601b60e21b81523360048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690639da1806c90602401602060405180830381865afa158015611fc0573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611fe49190613338565b5f8181526011602052604090205490915060ff1615612046575f818152601160205260409020805460ff1916905561201b816128b3565b60405181907f472049c4e10c01b33f0b5a15eea7323dd7ec5e31ae501238add935070badaf65905f90a25b5061207060017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b565b61207a6120ab565b6120826121a4565b61207060017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6120b36129b4565b60027f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b805f036120e4575050565b6001600160a01b0382165f9081526004602052604081205461210790839061330e565b9050670de0b6b3a764000081111561214b576040517fffa8f13000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0383165f8181526004602090815260409182902084905581518581529081018490527fbeaea95c6bf16edeaceb13f9155dd3ddf0da63acd6de7ebaa62e433e4336c2b6910160405180910390a2505050565b60646010541080156121b7575060125415155b15612070576012546121c881612a0f565b6121d181612ab2565b506121a4565b600e545f818103612214576040517f8fafc6bb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50600d54600354600c549091908103612238578161223181613251565b9250505f90505b5f838152600f6020526040812054612252906001906132f5565b90508181146122ef575f600c838154811061226f5761226f61334f565b905f5260205f200154905084600c848154811061228e5761228e61334f565b5f918252602090912001556122a483600161330e565b5f868152600f6020526040902055600c8054829190849081106122c9576122c961334f565b5f918252602090912001556122df82600161330e565b5f918252600f6020526040909120555b6122fa82600161330e565b600d5560038390555f848152600a6020526040902083905561231a612bae565b50509091565b5f5f4861ea605a61233190866132f5565b61233b919061330e565b6123459190613321565b9050838111156123525750825b5f868152600560209081526040808320546001600160a01b03168084526004909252822054909190831061239d576001600160a01b0382165f9081526004602052604090205461239f565b825b6001600160a01b0383165f908152600460205260408120805492935083929091906123cb9084906132f5565b90915550506001600160a01b0382165f90815260046020526040902054655af3107a4000111561243e576123fe88612c80565b5f88815260116020526040808220805460ff191660011790555189917f0cdccfbe5b5050cdffa6270d94e69b94f819da61a72b4f560421fe7bc37cf56a91a25b5f61244982856132f5565b90505f878210612459578761245b565b815b905061246781896132f5565b95505f612474828561330e565b905083156124cf576001600160a01b0385165f81815260046020908152604091829020548251888152918201528d92917ec3f13c40962867dce9b8f524891849453f4bcbd073a579ec6d562879270528910160405180910390a35b8015612567575f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826040515f6040518083038185875af1925050503d805f811461253e576040519150601f19603f3d011682016040523d82523d5f602084013e612543565b606091505b5050905080612565576040516307a4ced160e51b815260040160405180910390fd5b505b86156125df575f8a6001600160a01b0316886040515f6040518083038185875af1925050503d805f81146125b6576040519150601f19603f3d011682016040523d82523d5f602084013e6125bb565b606091505b50509050806125dd576040516307a4ced160e51b815260040160405180910390fd5b505b505050505050949350505050565b5f82815260056020526040902080546001600160a01b03838116911614158061261b5750600481015460ff16155b15612638576040516282b42960e81b815260040160405180910390fd5b60048101805460ff1916905560018101546001600160a01b03165f908152600660209081526040808320839055858352601190915290205460ff1615612692575f838152601160205260409020805460ff1916905561269b565b61269b83612c80565b60108054905f6126aa83613363565b90915550506040517f6198e339000000000000000000000000000000000000000000000000000000008152600481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636198e339906024015f604051808303815f87803b158015612727575f5ffd5b505af1158015612739573d5f5f3e3d5ffd5b5050506002820154604080517faa81f46600000000000000000000000000000000000000000000000000000000815290516001600160a01b03909216925063aa81f466916004808301925f92919082900301818387803b15801561279b575f5ffd5b505af19250505080156127ac575060015b506127b682612de6565b60405183907f8ced2eb8d2c116b9018cc9bb495aae6601fd95253754fb881dad8af002391ca8905f90a2505050565b6127ee82612a0f565b6040517f6198e339000000000000000000000000000000000000000000000000000000008152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636198e339906024015f604051808303815f87803b158015612866575f5ffd5b505af1158015612878573d5f5f3e3d5ffd5b5050505061288581612de6565b60405182907f2b066c8785da768e6a2945b6d91bc4cb516d523a987facda6b3c27ecc56b0586905f90a25050565b600c54600d54036128f757600c80546001810182555f919091527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c70181905561297f565b5f600c600d548154811061290d5761290d61334f565b5f918252602080832090910154600c80546001810182557fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c7018290558054828552600f9093526040909320829055600d5490935084929181106129725761297261334f565b5f91825260209091200155505b600d5f815461298d90613251565b91829055505f828152600f6020526040812091909155600e549003610daa57610daa612bae565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0054600203612070576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8181526016602090815260408083205460159092528220549091829003612a3b576012819055612a4c565b5f8281526015602052604090208190555b805f03612a5d576013829055612a6e565b5f8181526016602052604090208290555b5f8381526016602090815260408083208390556015825280832083905560179091528120805460ff191690556014805491612aa883613363565b9190505550505050565b5f81815260056020908152604080832060048101805460ff191660011790556002810180546001600160a01b03908116865260068552838620879055905482548216865260088552838620805473ffffffffffffffffffffffffffffffffffffffff191691909216179055600354858552600a90935290832091909155601080549192612b3e83613251565b9190505550612b4c826128b3565b80546002820154604080516001600160a01b03928316808252602082015260608183018190525f908201529051919092169184917ff23197fb89df512d992ac51a1b0af20ebea7ac2de7552c3e2e632dc828e5c94c9181900360800190a35050565b600c545f819003612bc057505f600e55565b5f5f82600d5414612bd657600354600d54612be6565b600354612be490600161330e565b5f5b9092509050600c612bf782856132f5565b604080517f0000000000000000000000000000000000000000000000000000000000000000602082015290810185905260608101849052608001604051602081830303815290604052805190602001205f1c612c539190613378565b612c5d908361330e565b81548110612c6d57612c6d61334f565b5f91825260209091200154600e55505050565b5f818152600f6020526040812054612c9a906001906132f5565b600c549091505f90612cae906001906132f5565b9050600d54821015612d3857600d8054905f612cc983613363565b9190505550600d548214612d32575f600c600d5481548110612ced57612ced61334f565b905f5260205f200154905080600c8481548110612d0c57612d0c61334f565b5f91825260209091200155612d2283600161330e565b5f918252600f6020526040909120555b600d5491505b808214612d98575f600c8281548110612d5357612d5361334f565b905f5260205f200154905080600c8481548110612d7257612d7261334f565b5f91825260209091200155612d8883600161330e565b5f918252600f6020526040909120555b600c805480612da957612da961338b565b600190038181905f5260205f20015f90559055600f5f8481526020019081526020015f205f905582600e5403612de157612de1612bae565b505050565b6001600160a01b0381165f9081526004602052604081205490819003612e0a575050565b6001600160a01b0382165f818152600460205260408082208290555190919083908381818185875af1925050503d805f8114612e61576040519150601f19603f3d011682016040523d82523d5f602084013e612e66565b606091505b5050905080612e8b57506001600160a01b039091165f90815260046020526040902055565b604080518381525f60208201526001600160a01b0385169182917f311db0c5318b1c7d4ef72aaa96480e3697f902c7078a85a0a5ae91308148e5e0910160405180910390a3505050565b6106c4806133a083390190565b5f60208284031215612ef2575f5ffd5b5035919050565b6001600160a01b0381168114610daa575f5ffd5b5f60208284031215612f1d575f5ffd5b8135612f2881612ef9565b9392505050565b5f5f5f5f5f60808688031215612f43575f5ffd5b8535612f4e81612ef9565b94506020860135612f5e81612ef9565b935060408601358015158114612f72575f5ffd5b9250606086013567ffffffffffffffff811115612f8d575f5ffd5b8601601f81018813612f9d575f5ffd5b803567ffffffffffffffff811115612fb3575f5ffd5b886020828401011115612fc4575f5ffd5b959894975092955050506020019190565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f612f286020830184612fd5565b6001600160a01b03861681526001600160a01b03851660208201526001600160a01b038416604082015260a060608201525f61305460a0830185612fd5565b905082151560808301529695505050505050565b8581528460208201526001600160a01b03841660408201526001600160a01b038316606082015260a060808201525f6130a460a0830184612fd5565b979650505050505050565b5f5f604083850312156130c0575f5ffd5b8235915060208301356130d281612ef9565b809150509250929050565b5f602082840312156130ed575f5ffd5b8151612f2881612ef9565b634e487b7160e01b5f52604160045260245ffd5b600181811c9082168061312057607f821691505b6020821081036110d957634e487b7160e01b5f52602260045260245ffd5b601f821115612de157805f5260205f20601f840160051c810160208510156131635750805b601f840160051c820191505b8181101561106c575f815560010161316f565b815167ffffffffffffffff81111561319c5761319c6130f8565b6131b0816131aa845461310c565b8461313e565b6020601f8211600181146131e2575f83156131cb5750848201515b5f19600385901b1c1916600184901b17845561106c565b5f84815260208120601f198516915b8281101561321157878501518255602094850194600190920191016131f1565b508482101561322e57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b5f600182016132625761326261323d565b5060010190565b6001600160a01b03871681526001600160a01b03861660208201526001600160a01b038516604082015283606082015260a060808201528160a0820152818360c08301375f81830160c090810191909152601f909201601f1916010195945050505050565b634e487b7160e01b5f52601260045260245ffd5b5f826132f0576132f06132ce565b500490565b818103818111156133085761330861323d565b92915050565b808201808211156133085761330861323d565b80820281158282048414176133085761330861323d565b5f60208284031215613348575f5ffd5b5051919050565b634e487b7160e01b5f52603260045260245ffd5b5f816133715761337161323d565b505f190190565b5f82613386576133866132ce565b500690565b634e487b7160e01b5f52603160045260245ffdfe60c060405234801561000f575f5ffd5b506040516106c43803806106c483398101604081905261002e91610067565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00556001600160a01b03166080523360a052610094565b5f60208284031215610077575f5ffd5b81516001600160a01b038116811461008d575f5ffd5b9392505050565b60805160a0516105ee6100d65f395f818160510152818160da015261033601525f818161014801528181610191015281816103b5015261047301526105ee5ff3fe608060405260043610610041575f3560e01c80636739afca146100c957806372b0d90c146101185780638da5cb5b14610137578063aa81f4661461016a575f5ffd5b366100c557336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146100c35760405162461bcd60e51b815260206004820152600c60248201527f4e6574776f726b206f6e6c79000000000000000000000000000000000000000060448201526064015b60405180910390fd5b005b5f5ffd5b3480156100d4575f5ffd5b506100fc7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200160405180910390f35b348015610123575f5ffd5b506100c361013236600461058b565b61017e565b348015610142575f5ffd5b506100fc7f000000000000000000000000000000000000000000000000000000000000000081565b348015610175575f5ffd5b506100c3610323565b610186610502565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480156101c657506001600160a01b03811615155b6102125760405162461bcd60e51b815260206004820152601b60248201527f4f776e6572206f6e6c79202f207a65726f20726563697069656e74000000000060448201526064016100ba565b60405147905f906001600160a01b0384169083908381818185875af1925050503d805f811461025c576040519150601f19603f3d011682016040523d82523d5f602084013e610261565b606091505b50509050806102b25760405162461bcd60e51b815260206004820152600e60248201527f5061796d656e74206661696c656400000000000000000000000000000000000060448201526064016100ba565b826001600160a01b03167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5836040516102ed91815260200190565b60405180910390a2505061032060017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50565b61032b610502565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146103a35760405162461bcd60e51b815260206004820152600c60248201527f4e6574776f726b206f6e6c79000000000000000000000000000000000000000060448201526064016100ba565b475f8190036103b257506104d7565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826040515f6040518083038185875af1925050503d805f811461041b576040519150601f19603f3d011682016040523d82523d5f602084013e610420565b606091505b50509050806104715760405162461bcd60e51b815260206004820152600e60248201527f5061796d656e74206661696c656400000000000000000000000000000000000060448201526064016100ba565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5836040516104cc91815260200190565b60405180910390a250505b61050060017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b565b61050a610530565b60027f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0054600203610500576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6020828403121561059b575f5ffd5b81356001600160a01b03811681146105b1575f5ffd5b939250505056fea2646970667358221220e16ebaa6fcaa5dbe3d099ed394437979e9a8db406197ce6233110545da370dd464736f6c634300081c0033a2646970667358221220b9da55678008bbd0b9b0fa89b946048e835aa97220caadd7ad15ce41736d210f64736f6c634300081c00336101006040526001600755348015610015575f5ffd5b5060405161274e38038061274e83398101604081905261003491610245565b6040518060400160405280600b81526020016a14d35052530814da195b1b60aa1b8152506040518060400160405280600581526020016414d211531360da1b815250815f90816100849190610316565b5060016100918282610316565b50505060016100aa6100a761020660201b60201c565b90565b556001600160a01b0383163b158015906100cc57506001600160a01b03821615155b6101125760405162461bcd60e51b8152602060048201526012602482015271125b9d985b1a590819195c1b1bde5b595b9d60721b60448201526064015b60405180910390fd5b5f836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561014f573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061017391906103d0565b9050601e8160ff1611156101c95760405162461bcd60e51b815260206004820152601460248201527f556e737570706f7274656420646563696d616c730000000000000000000000006044820152606401610109565b6001600160a01b03808516608052831660a0526101ea60ff8216600a6104f0565b6101f790620186a06104fb565b60c0525060e052506105129050565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0090565b80516001600160a01b0381168114610240575f5ffd5b919050565b5f5f5f60608486031215610257575f5ffd5b6102608461022a565b925061026e6020850161022a565b9150604084015190509250925092565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806102a657607f821691505b6020821081036102c457634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561031157805f5260205f20601f840160051c810160208510156102ef5750805b601f840160051c820191505b8181101561030e575f81556001016102fb565b50505b505050565b81516001600160401b0381111561032f5761032f61027e565b6103438161033d8454610292565b846102ca565b6020601f821160018114610375575f831561035e5750848201515b5f19600385901b1c1916600184901b17845561030e565b5f84815260208120601f198516915b828110156103a45787850151825560209485019460019092019101610384565b50848210156103c157868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f602082840312156103e0575f5ffd5b815160ff811681146103f0575f5ffd5b9392505050565b634e487b7160e01b5f52601160045260245ffd5b6001815b60018411156104465780850481111561042a5761042a6103f7565b600184161561043857908102905b60019390931c92800261040f565b935093915050565b5f8261045c575060016104ea565b8161046857505f6104ea565b816001811461047e5760028114610488576104a4565b60019150506104ea565b60ff841115610499576104996103f7565b50506001821b6104ea565b5060208310610133831016604e8410600b84101617156104c7575081810a6104ea565b6104d35f19848461040b565b805f19048211156104e6576104e66103f7565b0290505b92915050565b5f6103f0838361044e565b80820281158282048414176104ea576104ea6103f7565b60805160a05160c05160e05161218b6105c35f395f81816103fd015261120801525f81816102ab015281816109bd01528181610a0f01528181610e7001526112fd01525f818161030101528181610726015281816107b4015281816107ec01528181610be401528181610c0e01528181610c7c01528181610d26015261101b01525f81816103d6015281816109190152818161099901528181610a3b01528181610e4d01526112da015261218b5ff3fe608060405234801561000f575f5ffd5b50600436106101bb575f3560e01c80636739afca116100f3578063b88d4fde11610093578063ce05cffd1161006e578063ce05cffd146103d1578063dbfa7fae146103f8578063e985e9c51461041f578063ea38fab01461045a575f5ffd5b8063b88d4fde146103a2578063bf9befb1146103b5578063c87b56dd146103be575f5ffd5b806395d89b41116100ce57806395d89b41146103495780639da1806c14610351578063a22cb46514610370578063a8acbad514610383575f5ffd5b80636739afca146102fc57806370a08231146103235780637763251314610336575f5ffd5b80632def66201161015e57806360c7dc471161013957806360c7dc47146102a65780636198e339146102cd57806361b8ce8c146102e05780636352211e146102e9575f5ffd5b80632def6620146102755780633a4b66f11461027d57806342842e0e14610293575f5ffd5b8063095ea7b311610199578063095ea7b31461022757806323b872dd1461023c578063282d3fdf1461024f5780632cbb261914610262575f5ffd5b806301ffc9a7146101bf57806306fdde03146101e7578063081812fc146101fc575b5f5ffd5b6101d26101cd366004611db5565b610482565b60405190151581526020015b60405180910390f35b6101ef610566565b6040516101de9190611dfe565b61020f61020a366004611e10565b6105f5565b6040516001600160a01b0390911681526020016101de565b61023a610235366004611e42565b61061c565b005b61023a61024a366004611e6a565b61062b565b61023a61025d366004611e42565b6106d2565b61023a610270366004611ea4565b6107d9565b61023a61085e565b61028561089a565b6040519081526020016101de565b61023a6102a1366004611e6a565b610bba565b6102857f000000000000000000000000000000000000000000000000000000000000000081565b61023a6102db366004611e10565b610bd9565b61028560075481565b61020f6102f7366004611e10565b610cab565b61020f7f000000000000000000000000000000000000000000000000000000000000000081565b610285610331366004611ea4565b610cb5565b61023a610344366004611ea4565b610d13565b6101ef610ef3565b61028561035f366004611ea4565b600a6020525f908152604090205481565b61023a61037e366004611ebd565b610f02565b610285610391366004611e10565b60086020525f908152604090205481565b61023a6103b0366004611f0a565b610f0d565b61028560065481565b6101ef6103cc366004611e10565b610f25565b61020f7f000000000000000000000000000000000000000000000000000000000000000081565b6102857f000000000000000000000000000000000000000000000000000000000000000081565b6101d261042d366004611fe8565b6001600160a01b039182165f90815260056020908152604080832093909416825291909152205460ff1690565b61020f610468366004611e10565b60096020525f90815260409020546001600160a01b031681565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd00000000000000000000000000000000000000000000000000000000148061051457507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061056057507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60605f805461057490612019565b80601f01602080910402602001604051908101604052809291908181526020018280546105a090612019565b80156105eb5780601f106105c2576101008083540402835291602001916105eb565b820191905f5260205f20905b8154815290600101906020018083116105ce57829003601f168201915b5050505050905090565b5f6105ff82610f96565b505f828152600460205260409020546001600160a01b0316610560565b610627828233610fce565b5050565b6001600160a01b03821661065957604051633250574960e11b81525f60048201526024015b60405180910390fd5b5f610665838333610fdb565b9050836001600160a01b0316816001600160a01b0316146106cc576040517f64283d7b0000000000000000000000000000000000000000000000000000000081526001600160a01b0380861660048301526024820184905282166044820152606401610650565b50505050565b6106fe5f60027f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0061106e565b1561071b576040516282b42960e81b815260040160405180910390fd5b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614158061076c57505f818152600960205260409020546001600160a01b03838116911614155b806107915750816001600160a01b031661078582610cab565b6001600160a01b031614155b156107ae576040516282b42960e81b815260040160405180910390fd5b610627827f000000000000000000000000000000000000000000000000000000000000000083611075565b6107e161113b565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610829576040516282b42960e81b815260040160405180910390fd5b61083281611169565b61085b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50565b61086661113b565b61086f33611169565b61089860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b565b5f6108a361113b565b335f908152600a6020526040902054156108e9576040517f9d749a9200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610966573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061098a9190612051565b90506109e16001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633307f000000000000000000000000000000000000000000000000000000000000000061135a565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201527f00000000000000000000000000000000000000000000000000000000000000009082906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015610a80573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aa49190612051565b610aae919061207c565b14610ae5576040517f9d749a9200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60078054905f610af48361208f565b909155505f818152600960209081526040808320805473ffffffffffffffffffffffffffffffffffffffff1916339081179091558352600a8252808320849055838352600890915281204290556006805492945090610b528361208f565b9190505550610b6133836113a9565b604051829033907f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d905f90a350610bb760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b90565b610bd483838360405180602001604052805f815250610f0d565b505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016141580610c4b57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610c3f82610cab565b6001600160a01b031614155b15610c68576040516282b42960e81b815260040160405180910390fd5b5f8181526009602052604090205461085b907f0000000000000000000000000000000000000000000000000000000000000000906001600160a01b031683611075565b5f61056082610f96565b5f6001600160a01b038216610cf8576040517f89c62b640000000000000000000000000000000000000000000000000000000081525f6004820152602401610650565b506001600160a01b03165f9081526003602052604090205490565b610d1b61113b565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610d63576040516282b42960e81b815260040160405180910390fd5b6001600160a01b0381165f908152600a6020526040902054801580610da25750816001600160a01b0316610d9682610cab565b6001600160a01b031614155b15610dd9576040517f4d1bac4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60068054905f610de8836120a7565b90915550506001600160a01b0382165f908152600a6020908152604080832083905583835260098252808320805473ffffffffffffffffffffffffffffffffffffffff191690556008909152812055610e40816113c2565b610e946001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016837f00000000000000000000000000000000000000000000000000000000000000006113fa565b60405181906001600160a01b038416907f0f5bb82176feb1b5e747e28471aa92156a04d9f3ab9f45f28e2d704232b93f75905f90a35061085b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60606001805461057490612019565b610627338383611448565b610f1884848461062b565b6106cc338585858561155f565b6060610f3082610f96565b505f610f4660408051602081019091525f815290565b90505f815111610f645760405180602001604052805f815250610f8f565b80610f6e846116d1565b604051602001610f7f9291906120d3565b6040516020818303038152906040525b9392505050565b5f818152600260205260408120546001600160a01b03168061056057604051637e27328960e01b815260048101849052602401610650565b610bd4838383600161176e565b5f828152600260205260409020546001600160a01b0316801580159061100957506001600160a01b03841615155b801561103e5750336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614155b1561105b576040516282b42960e81b815260040160405180910390fd5b6110668484846118b6565b949350505050565b5414919050565b6001600160a01b03821661109e57604051633250574960e11b81525f6004820152602401610650565b5f6110aa83835f610fdb565b90506001600160a01b0381166110d657604051637e27328960e01b815260048101839052602401610650565b836001600160a01b0316816001600160a01b0316146106cc576040517f64283d7b0000000000000000000000000000000000000000000000000000000081526001600160a01b0380861660048301526024820184905282166044820152606401610650565b6111436119b5565b60027f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6001600160a01b0381165f908152600a6020526040812054908190036111a1576040516282b42960e81b815260040160405180910390fd5b816001600160a01b03166111b482610cab565b6001600160a01b0316146111f4576040517f4d1bac4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8181526008602052604090205461122d907f0000000000000000000000000000000000000000000000000000000000000000906120e7565b421015611266576040517f7c0ff39c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60068054905f611275836120a7565b90915550506001600160a01b0382165f908152600a6020908152604080832083905583835260098252808320805473ffffffffffffffffffffffffffffffffffffffff1916905560089091528120556112cd816113c2565b6113216001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016837f00000000000000000000000000000000000000000000000000000000000000006113fa565b60405181906001600160a01b038416907f0f5bb82176feb1b5e747e28471aa92156a04d9f3ab9f45f28e2d704232b93f75905f90a35050565b611368848484846001611a18565b6106cc576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401610650565b610627828260405180602001604052805f815250611a9e565b5f6113ce5f835f610fdb565b90506001600160a01b03811661062757604051637e27328960e01b815260048101839052602401610650565b6114078383836001611ab5565b610bd4576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401610650565b6001600160a01b03831661148a576040517fa9fbf51f0000000000000000000000000000000000000000000000000000000081525f6004820152602401610650565b6001600160a01b0382166114d5576040517f5b08ba180000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610650565b6001600160a01b038381165f8181526005602090815260408083209487168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383163b156116ca576040517f150b7a020000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063150b7a02906115ba9088908890879087906004016120fa565b6020604051808303815f875af19250505080156115f4575060408051601f3d908101601f191682019092526115f19181019061213a565b60015b61165b573d808015611621576040519150601f19603f3d011682016040523d82523d5f602084013e611626565b606091505b5080515f0361165357604051633250574960e11b81526001600160a01b0385166004820152602401610650565b805160208201fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081167f150b7a0200000000000000000000000000000000000000000000000000000000146116c857604051633250574960e11b81526001600160a01b0385166004820152602401610650565b505b5050505050565b60605f6116dd83611b30565b60010190505f8167ffffffffffffffff8111156116fc576116fc611ef6565b6040519080825280601f01601f191660200182016040528015611726576020820181803683370190505b5090508181016020015b5f19017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461173057509392505050565b808061178257506001600160a01b03821615155b1561187a575f61179184610f96565b90506001600160a01b038316158015906117bd5750826001600160a01b0316816001600160a01b031614155b80156117ee57506001600160a01b038082165f9081526005602090815260408083209387168352929052205460ff16155b15611830576040517fa9fbf51f0000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401610650565b81156118785783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b50505f908152600460205260409020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b5f828152600260205260408120546001600160a01b03908116908316156118e2576118e2818486611c11565b6001600160a01b0381161561191c576118fd5f855f5f61176e565b6001600160a01b0381165f90815260036020526040902080545f190190555b6001600160a01b0385161561194a576001600160a01b0385165f908152600360205260409020805460010190555b5f84815260026020526040808220805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b6119e15f60027f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0061106e565b15610898576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f23b872dd000000000000000000000000000000000000000000000000000000005f8181526001600160a01b038781166004528616602452604485905291602083606481808c5af1925060015f51148316611a8d578383151615611a81573d5f823e3d81fd5b5f883b113d1516831692505b604052505f60605295945050505050565b611aa88383611c8e565b610bd4335f85858561155f565b6040517fa9059cbb000000000000000000000000000000000000000000000000000000005f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f51148316611b24578383151615611b18573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b5f807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611b78577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310611ba4576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310611bc257662386f26fc10000830492506010015b6305f5e1008310611bda576305f5e100830492506008015b6127108310611bee57612710830492506004015b60648310611c00576064830492506002015b600a83106105605760010192915050565b611c1c838383611d08565b610bd4576001600160a01b038316611c4a57604051637e27328960e01b815260048101829052602401610650565b6040517f177e802f0000000000000000000000000000000000000000000000000000000081526001600160a01b038316600482015260248101829052604401610650565b6001600160a01b038216611cb757604051633250574960e11b81525f6004820152602401610650565b5f611cc383835f610fdb565b90506001600160a01b03811615610bd4576040517f73c6ac6e0000000000000000000000000000000000000000000000000000000081525f6004820152602401610650565b5f6001600160a01b038316158015906110665750826001600160a01b0316846001600160a01b03161480611d6057506001600160a01b038085165f9081526005602090815260408083209387168352929052205460ff165b806110665750505f908152600460205260409020546001600160a01b03908116911614919050565b7fffffffff000000000000000000000000000000000000000000000000000000008116811461085b575f5ffd5b5f60208284031215611dc5575f5ffd5b8135610f8f81611d88565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610f8f6020830184611dd0565b5f60208284031215611e20575f5ffd5b5035919050565b80356001600160a01b0381168114611e3d575f5ffd5b919050565b5f5f60408385031215611e53575f5ffd5b611e5c83611e27565b946020939093013593505050565b5f5f5f60608486031215611e7c575f5ffd5b611e8584611e27565b9250611e9360208501611e27565b929592945050506040919091013590565b5f60208284031215611eb4575f5ffd5b610f8f82611e27565b5f5f60408385031215611ece575f5ffd5b611ed783611e27565b915060208301358015158114611eeb575f5ffd5b809150509250929050565b634e487b7160e01b5f52604160045260245ffd5b5f5f5f5f60808587031215611f1d575f5ffd5b611f2685611e27565b9350611f3460208601611e27565b925060408501359150606085013567ffffffffffffffff811115611f56575f5ffd5b8501601f81018713611f66575f5ffd5b803567ffffffffffffffff811115611f8057611f80611ef6565b604051601f19603f601f19601f8501160116810181811067ffffffffffffffff82111715611fb057611fb0611ef6565b604052818152828201602001891015611fc7575f5ffd5b816020840160208301375f6020838301015280935050505092959194509250565b5f5f60408385031215611ff9575f5ffd5b61200283611e27565b915061201060208401611e27565b90509250929050565b600181811c9082168061202d57607f821691505b60208210810361204b57634e487b7160e01b5f52602260045260245ffd5b50919050565b5f60208284031215612061575f5ffd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561056057610560612068565b5f600182016120a0576120a0612068565b5060010190565b5f816120b5576120b5612068565b505f190190565b5f81518060208401855e5f93019283525090919050565b5f6110666120e183866120bc565b846120bc565b8082018082111561056057610560612068565b6001600160a01b03851681526001600160a01b0384166020820152826040820152608060608201525f6121306080830184611dd0565b9695505050505050565b5f6020828403121561214a575f5ffd5b8151610f8f81611d8856fea2646970667358221220c5128ad59e7968e2e3a46fcc8e1f20edc15c7a441b5cd08c78819c264249692564736f6c634300081c0033";
10
+ /** Creation bytecode for `ShellStake`. Constructor: `(address token, address network)`. */
11
+ export const shellStakeBytecode = "0x6101006040526001600755348015610015575f5ffd5b5060405161274e38038061274e83398101604081905261003491610245565b6040518060400160405280600b81526020016a14d35052530814da195b1b60aa1b8152506040518060400160405280600581526020016414d211531360da1b815250815f90816100849190610316565b5060016100918282610316565b50505060016100aa6100a761020660201b60201c565b90565b556001600160a01b0383163b158015906100cc57506001600160a01b03821615155b6101125760405162461bcd60e51b8152602060048201526012602482015271125b9d985b1a590819195c1b1bde5b595b9d60721b60448201526064015b60405180910390fd5b5f836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561014f573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061017391906103d0565b9050601e8160ff1611156101c95760405162461bcd60e51b815260206004820152601460248201527f556e737570706f7274656420646563696d616c730000000000000000000000006044820152606401610109565b6001600160a01b03808516608052831660a0526101ea60ff8216600a6104f0565b6101f790620186a06104fb565b60c0525060e052506105129050565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0090565b80516001600160a01b0381168114610240575f5ffd5b919050565b5f5f5f60608486031215610257575f5ffd5b6102608461022a565b925061026e6020850161022a565b9150604084015190509250925092565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806102a657607f821691505b6020821081036102c457634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561031157805f5260205f20601f840160051c810160208510156102ef5750805b601f840160051c820191505b8181101561030e575f81556001016102fb565b50505b505050565b81516001600160401b0381111561032f5761032f61027e565b6103438161033d8454610292565b846102ca565b6020601f821160018114610375575f831561035e5750848201515b5f19600385901b1c1916600184901b17845561030e565b5f84815260208120601f198516915b828110156103a45787850151825560209485019460019092019101610384565b50848210156103c157868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f602082840312156103e0575f5ffd5b815160ff811681146103f0575f5ffd5b9392505050565b634e487b7160e01b5f52601160045260245ffd5b6001815b60018411156104465780850481111561042a5761042a6103f7565b600184161561043857908102905b60019390931c92800261040f565b935093915050565b5f8261045c575060016104ea565b8161046857505f6104ea565b816001811461047e5760028114610488576104a4565b60019150506104ea565b60ff841115610499576104996103f7565b50506001821b6104ea565b5060208310610133831016604e8410600b84101617156104c7575081810a6104ea565b6104d35f19848461040b565b805f19048211156104e6576104e66103f7565b0290505b92915050565b5f6103f0838361044e565b80820281158282048414176104ea576104ea6103f7565b60805160a05160c05160e05161218b6105c35f395f81816103fd015261120801525f81816102ab015281816109bd01528181610a0f01528181610e7001526112fd01525f818161030101528181610726015281816107b4015281816107ec01528181610be401528181610c0e01528181610c7c01528181610d26015261101b01525f81816103d6015281816109190152818161099901528181610a3b01528181610e4d01526112da015261218b5ff3fe608060405234801561000f575f5ffd5b50600436106101bb575f3560e01c80636739afca116100f3578063b88d4fde11610093578063ce05cffd1161006e578063ce05cffd146103d1578063dbfa7fae146103f8578063e985e9c51461041f578063ea38fab01461045a575f5ffd5b8063b88d4fde146103a2578063bf9befb1146103b5578063c87b56dd146103be575f5ffd5b806395d89b41116100ce57806395d89b41146103495780639da1806c14610351578063a22cb46514610370578063a8acbad514610383575f5ffd5b80636739afca146102fc57806370a08231146103235780637763251314610336575f5ffd5b80632def66201161015e57806360c7dc471161013957806360c7dc47146102a65780636198e339146102cd57806361b8ce8c146102e05780636352211e146102e9575f5ffd5b80632def6620146102755780633a4b66f11461027d57806342842e0e14610293575f5ffd5b8063095ea7b311610199578063095ea7b31461022757806323b872dd1461023c578063282d3fdf1461024f5780632cbb261914610262575f5ffd5b806301ffc9a7146101bf57806306fdde03146101e7578063081812fc146101fc575b5f5ffd5b6101d26101cd366004611db5565b610482565b60405190151581526020015b60405180910390f35b6101ef610566565b6040516101de9190611dfe565b61020f61020a366004611e10565b6105f5565b6040516001600160a01b0390911681526020016101de565b61023a610235366004611e42565b61061c565b005b61023a61024a366004611e6a565b61062b565b61023a61025d366004611e42565b6106d2565b61023a610270366004611ea4565b6107d9565b61023a61085e565b61028561089a565b6040519081526020016101de565b61023a6102a1366004611e6a565b610bba565b6102857f000000000000000000000000000000000000000000000000000000000000000081565b61023a6102db366004611e10565b610bd9565b61028560075481565b61020f6102f7366004611e10565b610cab565b61020f7f000000000000000000000000000000000000000000000000000000000000000081565b610285610331366004611ea4565b610cb5565b61023a610344366004611ea4565b610d13565b6101ef610ef3565b61028561035f366004611ea4565b600a6020525f908152604090205481565b61023a61037e366004611ebd565b610f02565b610285610391366004611e10565b60086020525f908152604090205481565b61023a6103b0366004611f0a565b610f0d565b61028560065481565b6101ef6103cc366004611e10565b610f25565b61020f7f000000000000000000000000000000000000000000000000000000000000000081565b6102857f000000000000000000000000000000000000000000000000000000000000000081565b6101d261042d366004611fe8565b6001600160a01b039182165f90815260056020908152604080832093909416825291909152205460ff1690565b61020f610468366004611e10565b60096020525f90815260409020546001600160a01b031681565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd00000000000000000000000000000000000000000000000000000000148061051457507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061056057507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60605f805461057490612019565b80601f01602080910402602001604051908101604052809291908181526020018280546105a090612019565b80156105eb5780601f106105c2576101008083540402835291602001916105eb565b820191905f5260205f20905b8154815290600101906020018083116105ce57829003601f168201915b5050505050905090565b5f6105ff82610f96565b505f828152600460205260409020546001600160a01b0316610560565b610627828233610fce565b5050565b6001600160a01b03821661065957604051633250574960e11b81525f60048201526024015b60405180910390fd5b5f610665838333610fdb565b9050836001600160a01b0316816001600160a01b0316146106cc576040517f64283d7b0000000000000000000000000000000000000000000000000000000081526001600160a01b0380861660048301526024820184905282166044820152606401610650565b50505050565b6106fe5f60027f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0061106e565b1561071b576040516282b42960e81b815260040160405180910390fd5b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614158061076c57505f818152600960205260409020546001600160a01b03838116911614155b806107915750816001600160a01b031661078582610cab565b6001600160a01b031614155b156107ae576040516282b42960e81b815260040160405180910390fd5b610627827f000000000000000000000000000000000000000000000000000000000000000083611075565b6107e161113b565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610829576040516282b42960e81b815260040160405180910390fd5b61083281611169565b61085b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50565b61086661113b565b61086f33611169565b61089860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b565b5f6108a361113b565b335f908152600a6020526040902054156108e9576040517f9d749a9200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610966573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061098a9190612051565b90506109e16001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633307f000000000000000000000000000000000000000000000000000000000000000061135a565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201527f00000000000000000000000000000000000000000000000000000000000000009082906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015610a80573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aa49190612051565b610aae919061207c565b14610ae5576040517f9d749a9200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60078054905f610af48361208f565b909155505f818152600960209081526040808320805473ffffffffffffffffffffffffffffffffffffffff1916339081179091558352600a8252808320849055838352600890915281204290556006805492945090610b528361208f565b9190505550610b6133836113a9565b604051829033907f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d905f90a350610bb760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b90565b610bd483838360405180602001604052805f815250610f0d565b505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016141580610c4b57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610c3f82610cab565b6001600160a01b031614155b15610c68576040516282b42960e81b815260040160405180910390fd5b5f8181526009602052604090205461085b907f0000000000000000000000000000000000000000000000000000000000000000906001600160a01b031683611075565b5f61056082610f96565b5f6001600160a01b038216610cf8576040517f89c62b640000000000000000000000000000000000000000000000000000000081525f6004820152602401610650565b506001600160a01b03165f9081526003602052604090205490565b610d1b61113b565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610d63576040516282b42960e81b815260040160405180910390fd5b6001600160a01b0381165f908152600a6020526040902054801580610da25750816001600160a01b0316610d9682610cab565b6001600160a01b031614155b15610dd9576040517f4d1bac4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60068054905f610de8836120a7565b90915550506001600160a01b0382165f908152600a6020908152604080832083905583835260098252808320805473ffffffffffffffffffffffffffffffffffffffff191690556008909152812055610e40816113c2565b610e946001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016837f00000000000000000000000000000000000000000000000000000000000000006113fa565b60405181906001600160a01b038416907f0f5bb82176feb1b5e747e28471aa92156a04d9f3ab9f45f28e2d704232b93f75905f90a35061085b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60606001805461057490612019565b610627338383611448565b610f1884848461062b565b6106cc338585858561155f565b6060610f3082610f96565b505f610f4660408051602081019091525f815290565b90505f815111610f645760405180602001604052805f815250610f8f565b80610f6e846116d1565b604051602001610f7f9291906120d3565b6040516020818303038152906040525b9392505050565b5f818152600260205260408120546001600160a01b03168061056057604051637e27328960e01b815260048101849052602401610650565b610bd4838383600161176e565b5f828152600260205260409020546001600160a01b0316801580159061100957506001600160a01b03841615155b801561103e5750336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614155b1561105b576040516282b42960e81b815260040160405180910390fd5b6110668484846118b6565b949350505050565b5414919050565b6001600160a01b03821661109e57604051633250574960e11b81525f6004820152602401610650565b5f6110aa83835f610fdb565b90506001600160a01b0381166110d657604051637e27328960e01b815260048101839052602401610650565b836001600160a01b0316816001600160a01b0316146106cc576040517f64283d7b0000000000000000000000000000000000000000000000000000000081526001600160a01b0380861660048301526024820184905282166044820152606401610650565b6111436119b5565b60027f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6001600160a01b0381165f908152600a6020526040812054908190036111a1576040516282b42960e81b815260040160405180910390fd5b816001600160a01b03166111b482610cab565b6001600160a01b0316146111f4576040517f4d1bac4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8181526008602052604090205461122d907f0000000000000000000000000000000000000000000000000000000000000000906120e7565b421015611266576040517f7c0ff39c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60068054905f611275836120a7565b90915550506001600160a01b0382165f908152600a6020908152604080832083905583835260098252808320805473ffffffffffffffffffffffffffffffffffffffff1916905560089091528120556112cd816113c2565b6113216001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016837f00000000000000000000000000000000000000000000000000000000000000006113fa565b60405181906001600160a01b038416907f0f5bb82176feb1b5e747e28471aa92156a04d9f3ab9f45f28e2d704232b93f75905f90a35050565b611368848484846001611a18565b6106cc576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401610650565b610627828260405180602001604052805f815250611a9e565b5f6113ce5f835f610fdb565b90506001600160a01b03811661062757604051637e27328960e01b815260048101839052602401610650565b6114078383836001611ab5565b610bd4576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401610650565b6001600160a01b03831661148a576040517fa9fbf51f0000000000000000000000000000000000000000000000000000000081525f6004820152602401610650565b6001600160a01b0382166114d5576040517f5b08ba180000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610650565b6001600160a01b038381165f8181526005602090815260408083209487168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383163b156116ca576040517f150b7a020000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063150b7a02906115ba9088908890879087906004016120fa565b6020604051808303815f875af19250505080156115f4575060408051601f3d908101601f191682019092526115f19181019061213a565b60015b61165b573d808015611621576040519150601f19603f3d011682016040523d82523d5f602084013e611626565b606091505b5080515f0361165357604051633250574960e11b81526001600160a01b0385166004820152602401610650565b805160208201fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081167f150b7a0200000000000000000000000000000000000000000000000000000000146116c857604051633250574960e11b81526001600160a01b0385166004820152602401610650565b505b5050505050565b60605f6116dd83611b30565b60010190505f8167ffffffffffffffff8111156116fc576116fc611ef6565b6040519080825280601f01601f191660200182016040528015611726576020820181803683370190505b5090508181016020015b5f19017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461173057509392505050565b808061178257506001600160a01b03821615155b1561187a575f61179184610f96565b90506001600160a01b038316158015906117bd5750826001600160a01b0316816001600160a01b031614155b80156117ee57506001600160a01b038082165f9081526005602090815260408083209387168352929052205460ff16155b15611830576040517fa9fbf51f0000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401610650565b81156118785783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b50505f908152600460205260409020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b5f828152600260205260408120546001600160a01b03908116908316156118e2576118e2818486611c11565b6001600160a01b0381161561191c576118fd5f855f5f61176e565b6001600160a01b0381165f90815260036020526040902080545f190190555b6001600160a01b0385161561194a576001600160a01b0385165f908152600360205260409020805460010190555b5f84815260026020526040808220805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b6119e15f60027f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0061106e565b15610898576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f23b872dd000000000000000000000000000000000000000000000000000000005f8181526001600160a01b038781166004528616602452604485905291602083606481808c5af1925060015f51148316611a8d578383151615611a81573d5f823e3d81fd5b5f883b113d1516831692505b604052505f60605295945050505050565b611aa88383611c8e565b610bd4335f85858561155f565b6040517fa9059cbb000000000000000000000000000000000000000000000000000000005f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f51148316611b24578383151615611b18573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b5f807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611b78577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310611ba4576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310611bc257662386f26fc10000830492506010015b6305f5e1008310611bda576305f5e100830492506008015b6127108310611bee57612710830492506004015b60648310611c00576064830492506002015b600a83106105605760010192915050565b611c1c838383611d08565b610bd4576001600160a01b038316611c4a57604051637e27328960e01b815260048101829052602401610650565b6040517f177e802f0000000000000000000000000000000000000000000000000000000081526001600160a01b038316600482015260248101829052604401610650565b6001600160a01b038216611cb757604051633250574960e11b81525f6004820152602401610650565b5f611cc383835f610fdb565b90506001600160a01b03811615610bd4576040517f73c6ac6e0000000000000000000000000000000000000000000000000000000081525f6004820152602401610650565b5f6001600160a01b038316158015906110665750826001600160a01b0316846001600160a01b03161480611d6057506001600160a01b038085165f9081526005602090815260408083209387168352929052205460ff165b806110665750505f908152600460205260409020546001600160a01b03908116911614919050565b7fffffffff000000000000000000000000000000000000000000000000000000008116811461085b575f5ffd5b5f60208284031215611dc5575f5ffd5b8135610f8f81611d88565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610f8f6020830184611dd0565b5f60208284031215611e20575f5ffd5b5035919050565b80356001600160a01b0381168114611e3d575f5ffd5b919050565b5f5f60408385031215611e53575f5ffd5b611e5c83611e27565b946020939093013593505050565b5f5f5f60608486031215611e7c575f5ffd5b611e8584611e27565b9250611e9360208501611e27565b929592945050506040919091013590565b5f60208284031215611eb4575f5ffd5b610f8f82611e27565b5f5f60408385031215611ece575f5ffd5b611ed783611e27565b915060208301358015158114611eeb575f5ffd5b809150509250929050565b634e487b7160e01b5f52604160045260245ffd5b5f5f5f5f60808587031215611f1d575f5ffd5b611f2685611e27565b9350611f3460208601611e27565b925060408501359150606085013567ffffffffffffffff811115611f56575f5ffd5b8501601f81018713611f66575f5ffd5b803567ffffffffffffffff811115611f8057611f80611ef6565b604051601f19603f601f19601f8501160116810181811067ffffffffffffffff82111715611fb057611fb0611ef6565b604052818152828201602001891015611fc7575f5ffd5b816020840160208301375f6020838301015280935050505092959194509250565b5f5f60408385031215611ff9575f5ffd5b61200283611e27565b915061201060208401611e27565b90509250929050565b600181811c9082168061202d57607f821691505b60208210810361204b57634e487b7160e01b5f52602260045260245ffd5b50919050565b5f60208284031215612061575f5ffd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561056057610560612068565b5f600182016120a0576120a0612068565b5060010190565b5f816120b5576120b5612068565b505f190190565b5f81518060208401855e5f93019283525090919050565b5f6110666120e183866120bc565b846120bc565b8082018082111561056057610560612068565b6001600160a01b03851681526001600160a01b0384166020820152826040820152608060608201525f6121306080830184611dd0565b9695505050505050565b5f6020828403121561214a575f5ffd5b8151610f8f81611d8856fea2646970667358221220c5128ad59e7968e2e3a46fcc8e1f20edc15c7a441b5cd08c78819c264249692564736f6c634300081c0033";
12
+ /** Creation bytecode for `RelayerVault`. Constructor: `(address owner)`. */
13
+ export const relayerVaultBytecode = "0x60c060405234801561000f575f5ffd5b506040516106c43803806106c483398101604081905261002e91610067565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00556001600160a01b03166080523360a052610094565b5f60208284031215610077575f5ffd5b81516001600160a01b038116811461008d575f5ffd5b9392505050565b60805160a0516105ee6100d65f395f818160510152818160da015261033601525f818161014801528181610191015281816103b5015261047301526105ee5ff3fe608060405260043610610041575f3560e01c80636739afca146100c957806372b0d90c146101185780638da5cb5b14610137578063aa81f4661461016a575f5ffd5b366100c557336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146100c35760405162461bcd60e51b815260206004820152600c60248201527f4e6574776f726b206f6e6c79000000000000000000000000000000000000000060448201526064015b60405180910390fd5b005b5f5ffd5b3480156100d4575f5ffd5b506100fc7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200160405180910390f35b348015610123575f5ffd5b506100c361013236600461058b565b61017e565b348015610142575f5ffd5b506100fc7f000000000000000000000000000000000000000000000000000000000000000081565b348015610175575f5ffd5b506100c3610323565b610186610502565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480156101c657506001600160a01b03811615155b6102125760405162461bcd60e51b815260206004820152601b60248201527f4f776e6572206f6e6c79202f207a65726f20726563697069656e74000000000060448201526064016100ba565b60405147905f906001600160a01b0384169083908381818185875af1925050503d805f811461025c576040519150601f19603f3d011682016040523d82523d5f602084013e610261565b606091505b50509050806102b25760405162461bcd60e51b815260206004820152600e60248201527f5061796d656e74206661696c656400000000000000000000000000000000000060448201526064016100ba565b826001600160a01b03167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5836040516102ed91815260200190565b60405180910390a2505061032060017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50565b61032b610502565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146103a35760405162461bcd60e51b815260206004820152600c60248201527f4e6574776f726b206f6e6c79000000000000000000000000000000000000000060448201526064016100ba565b475f8190036103b257506104d7565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826040515f6040518083038185875af1925050503d805f811461041b576040519150601f19603f3d011682016040523d82523d5f602084013e610420565b606091505b50509050806104715760405162461bcd60e51b815260206004820152600e60248201527f5061796d656e74206661696c656400000000000000000000000000000000000060448201526064016100ba565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5836040516104cc91815260200190565b60405180910390a250505b61050060017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b565b61050a610530565b60027f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0054600203610500576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6020828403121561059b575f5ffd5b81356001600160a01b03811681146105b1575f5ffd5b939250505056fea2646970667358221220e16ebaa6fcaa5dbe3d099ed394437979e9a8db406197ce6233110545da370dd464736f6c634300081c0033";
14
+ /** Creation bytecode for `RelayerNames`. Constructor: `()`. */
15
+ export const relayerNamesBytecode = "0x6080604052348015600e575f5ffd5b506107c38061001c5f395ff3fe608060405234801561000f575f5ffd5b506004361061003f575f3560e01c8063a6f9885c14610043578063c47f00271461005e578063f5c5738214610073575b5f5ffd5b61004b602081565b6040519081526020015b60405180910390f35b61007161006c3660046104f7565b610093565b005b610086610081366004610565565b610441565b604051610055919061059f565b818160208111156100b75760405163430f13b360e01b815260040160405180910390fd5b801580159061015a575081815f8181106100d3576100d36105d4565b9050013560f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916602060f81b148061015a575081816101186001826105e8565b818110610127576101276105d4565b9050013560f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916602060f81b145b156101785760405163430f13b360e01b815260040160405180910390fd5b5f5b818110156103d0575f838383818110610195576101956105d4565b909101356001600160f81b03191691505f90507f3000000000000000000000000000000000000000000000000000000000000000821080159061020257507f39000000000000000000000000000000000000000000000000000000000000006001600160f81b0319831611155b8061026c57507f41000000000000000000000000000000000000000000000000000000000000006001600160f81b031983161080159061026c57507f5a000000000000000000000000000000000000000000000000000000000000006001600160f81b0319831611155b806102d657507f61000000000000000000000000000000000000000000000000000000000000006001600160f81b03198316108015906102d657507f7a000000000000000000000000000000000000000000000000000000000000006001600160f81b0319831611155b8061030a57507f20000000000000000000000000000000000000000000000000000000000000006001600160f81b03198316145b8061033e57507f2d000000000000000000000000000000000000000000000000000000000000006001600160f81b03198316145b8061037257507f5f000000000000000000000000000000000000000000000000000000000000006001600160f81b03198316145b806103a657507f2e000000000000000000000000000000000000000000000000000000000000006001600160f81b03198316145b9050806103c65760405163430f13b360e01b815260040160405180910390fd5b505060010161017a565b50335f9081526020819052604090206103ea8486836106a5565b503373ffffffffffffffffffffffffffffffffffffffff167fa4cea56cd77acc2291276688ddfb9e3144c5dc056ada99eed3cd0460fbeda175858560405161043392919061075f565b60405180910390a250505050565b73ffffffffffffffffffffffffffffffffffffffff81165f90815260208190526040902080546060919061047490610621565b80601f01602080910402602001604051908101604052809291908181526020018280546104a090610621565b80156104eb5780601f106104c2576101008083540402835291602001916104eb565b820191905f5260205f20905b8154815290600101906020018083116104ce57829003601f168201915b50505050509050919050565b5f5f60208385031215610508575f5ffd5b823567ffffffffffffffff81111561051e575f5ffd5b8301601f8101851361052e575f5ffd5b803567ffffffffffffffff811115610544575f5ffd5b856020828401011115610555575f5ffd5b6020919091019590945092505050565b5f60208284031215610575575f5ffd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610598575f5ffd5b9392505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b634e487b7160e01b5f52603260045260245ffd5b8181038181111561060757634e487b7160e01b5f52601160045260245ffd5b92915050565b634e487b7160e01b5f52604160045260245ffd5b600181811c9082168061063557607f821691505b60208210810361065357634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156106a057805f5260205f20601f840160051c8101602085101561067e5750805b601f840160051c820191505b8181101561069d575f815560010161068a565b50505b505050565b67ffffffffffffffff8311156106bd576106bd61060d565b6106d1836106cb8354610621565b83610659565b5f601f841160018114610702575f85156106eb5750838201355b5f19600387901b1c1916600186901b17835561069d565b5f83815260208120601f198716915b828110156107315786850135825560209485019460019092019101610711565b508682101561074d575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b60208152816020820152818360408301375f818301604090810191909152601f909201601f1916010191905056fea26469706673582212200e2fce7c2c57ab0044cc702a0ecb111ad64910f9dfbc38173a4a3c0500cbd2aa64736f6c634300081c0033";
@@ -0,0 +1,8 @@
1
+ export { snailAbi } from "./snail.js";
2
+ export { sponsoredSmailAbi } from "./sponsoredSmail.js";
3
+ export { relayerNetworkAbi } from "./relayerNetwork.js";
4
+ export { shellStakeAbi } from "./shellStake.js";
5
+ export { relayerVaultAbi } from "./relayerVault.js";
6
+ export { relayerNamesAbi } from "./relayerNames.js";
7
+ export { privateSnailAbi } from "./privateSnail.js";
8
+ export { snailBytecode, sponsoredSmailBytecode, relayerNetworkBytecode, shellStakeBytecode, relayerVaultBytecode, relayerNamesBytecode } from "./bytecode.js";
@@ -0,0 +1,11 @@
1
+ // Generated by scripts/export-abi.mjs from contracts/out/Snail.sol/Snail.json.
2
+ // Do not edit: run `cd contracts && forge build && npm run export:abi`.
3
+ // Built with solc 0.8.28+commit.7893614a, optimizer on (2000 runs).
4
+ export { snailAbi } from "./snail.js";
5
+ export { sponsoredSmailAbi } from "./sponsoredSmail.js";
6
+ export { relayerNetworkAbi } from "./relayerNetwork.js";
7
+ export { shellStakeAbi } from "./shellStake.js";
8
+ export { relayerVaultAbi } from "./relayerVault.js";
9
+ export { relayerNamesAbi } from "./relayerNames.js";
10
+ export { privateSnailAbi } from "./privateSnail.js";
11
+ export { snailBytecode, sponsoredSmailBytecode, relayerNetworkBytecode, shellStakeBytecode, relayerVaultBytecode, relayerNamesBytecode } from "./bytecode.js";