@huuduynvc/v3-periphery 1.3.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 (88) hide show
  1. package/LICENSE +339 -0
  2. package/README.md +52 -0
  3. package/artifacts/contracts/NonfungiblePositionManager.sol/NonfungiblePositionManager.json +1230 -0
  4. package/artifacts/contracts/NonfungibleTokenPositionDescriptor.sol/NonfungibleTokenPositionDescriptor.json +161 -0
  5. package/artifacts/contracts/SwapRouter.sol/SwapRouter.json +574 -0
  6. package/artifacts/contracts/V3Migrator.sol/V3Migrator.json +360 -0
  7. package/artifacts/contracts/examples/PairFlash.sol/PairFlash.json +196 -0
  8. package/artifacts/contracts/interfaces/IERC20Metadata.sol/IERC20Metadata.json +233 -0
  9. package/artifacts/contracts/interfaces/IERC721Permit.sol/IERC721Permit.json +360 -0
  10. package/artifacts/contracts/interfaces/IMulticall.sol/IMulticall.json +30 -0
  11. package/artifacts/contracts/interfaces/INonfungiblePositionManager.sol/INonfungiblePositionManager.json +998 -0
  12. package/artifacts/contracts/interfaces/INonfungibleTokenPositionDescriptor.sol/INonfungibleTokenPositionDescriptor.json +35 -0
  13. package/artifacts/contracts/interfaces/IPeripheryImmutableState.sol/IPeripheryImmutableState.json +37 -0
  14. package/artifacts/contracts/interfaces/IPeripheryPayments.sol/IPeripheryPayments.json +59 -0
  15. package/artifacts/contracts/interfaces/IPeripheryPaymentsWithFee.sol/IPeripheryPaymentsWithFee.json +120 -0
  16. package/artifacts/contracts/interfaces/IPoolInitializer.sol/IPoolInitializer.json +45 -0
  17. package/artifacts/contracts/interfaces/IQuoter.sol/IQuoter.json +137 -0
  18. package/artifacts/contracts/interfaces/IQuoterV2.sol/IQuoterV2.json +211 -0
  19. package/artifacts/contracts/interfaces/ISelfPermit.sol/ISelfPermit.json +163 -0
  20. package/artifacts/contracts/interfaces/ISwapRouter.sol/ISwapRouter.json +248 -0
  21. package/artifacts/contracts/interfaces/ITickLens.sol/ITickLens.json +52 -0
  22. package/artifacts/contracts/interfaces/IV3Migrator.sol/IV3Migrator.json +296 -0
  23. package/artifacts/contracts/interfaces/external/IERC1271.sol/IERC1271.json +35 -0
  24. package/artifacts/contracts/interfaces/external/IERC20PermitAllowed.sol/IERC20PermitAllowed.json +59 -0
  25. package/artifacts/contracts/interfaces/external/IWETH9.sol/IWETH9.json +214 -0
  26. package/artifacts/contracts/lens/Quoter.sol/Quoter.json +202 -0
  27. package/artifacts/contracts/lens/QuoterV2.sol/QuoterV2.json +276 -0
  28. package/artifacts/contracts/lens/TickLens.sol/TickLens.json +52 -0
  29. package/artifacts/contracts/lens/UniswapInterfaceMulticall.sol/UniswapInterfaceMulticall.json +101 -0
  30. package/artifacts/contracts/libraries/BytesLib.sol/BytesLib.json +10 -0
  31. package/artifacts/contracts/libraries/CallbackValidation.sol/CallbackValidation.json +10 -0
  32. package/artifacts/contracts/libraries/ChainId.sol/ChainId.json +10 -0
  33. package/artifacts/contracts/libraries/HexStrings.sol/HexStrings.json +10 -0
  34. package/artifacts/contracts/libraries/LiquidityAmounts.sol/LiquidityAmounts.json +10 -0
  35. package/artifacts/contracts/libraries/NFTDescriptor.sol/NFTDescriptor.json +102 -0
  36. package/artifacts/contracts/libraries/NFTSVG.sol/NFTSVG.json +10 -0
  37. package/artifacts/contracts/libraries/OracleLibrary.sol/OracleLibrary.json +10 -0
  38. package/artifacts/contracts/libraries/Path.sol/Path.json +10 -0
  39. package/artifacts/contracts/libraries/PoolAddress.sol/PoolAddress.json +10 -0
  40. package/artifacts/contracts/libraries/PoolTicksCounter.sol/PoolTicksCounter.json +10 -0
  41. package/artifacts/contracts/libraries/PositionKey.sol/PositionKey.json +10 -0
  42. package/artifacts/contracts/libraries/PositionValue.sol/PositionValue.json +10 -0
  43. package/artifacts/contracts/libraries/TokenRatioSortOrder.sol/TokenRatioSortOrder.json +10 -0
  44. package/artifacts/contracts/libraries/TransferHelper.sol/TransferHelper.json +10 -0
  45. package/contracts/base/BlockTimestamp.sol +12 -0
  46. package/contracts/base/ERC721Permit.sol +86 -0
  47. package/contracts/base/LiquidityManagement.sol +90 -0
  48. package/contracts/base/Multicall.sol +28 -0
  49. package/contracts/base/PeripheryImmutableState.sol +18 -0
  50. package/contracts/base/PeripheryPayments.sol +70 -0
  51. package/contracts/base/PeripheryPaymentsWithFee.sol +55 -0
  52. package/contracts/base/PeripheryValidation.sol +11 -0
  53. package/contracts/base/PoolInitializer.sol +32 -0
  54. package/contracts/base/SelfPermit.sol +63 -0
  55. package/contracts/interfaces/IERC20Metadata.sol +18 -0
  56. package/contracts/interfaces/IERC721Permit.sol +32 -0
  57. package/contracts/interfaces/IMulticall.sol +13 -0
  58. package/contracts/interfaces/INonfungiblePositionManager.sol +180 -0
  59. package/contracts/interfaces/INonfungibleTokenPositionDescriptor.sol +17 -0
  60. package/contracts/interfaces/IPeripheryImmutableState.sol +12 -0
  61. package/contracts/interfaces/IPeripheryPayments.sol +28 -0
  62. package/contracts/interfaces/IPeripheryPaymentsWithFee.sol +29 -0
  63. package/contracts/interfaces/IPoolInitializer.sol +22 -0
  64. package/contracts/interfaces/IQuoter.sol +51 -0
  65. package/contracts/interfaces/IQuoterV2.sol +98 -0
  66. package/contracts/interfaces/ISelfPermit.sol +76 -0
  67. package/contracts/interfaces/ISwapRouter.sol +67 -0
  68. package/contracts/interfaces/ITickLens.sol +25 -0
  69. package/contracts/interfaces/IV3Migrator.sol +34 -0
  70. package/contracts/interfaces/external/IERC1271.sol +16 -0
  71. package/contracts/interfaces/external/IERC20PermitAllowed.sol +27 -0
  72. package/contracts/interfaces/external/IWETH9.sol +13 -0
  73. package/contracts/libraries/BytesLib.sol +101 -0
  74. package/contracts/libraries/CallbackValidation.sol +36 -0
  75. package/contracts/libraries/ChainId.sol +13 -0
  76. package/contracts/libraries/HexStrings.sol +29 -0
  77. package/contracts/libraries/LiquidityAmounts.sol +137 -0
  78. package/contracts/libraries/NFTDescriptor.sol +477 -0
  79. package/contracts/libraries/NFTSVG.sol +406 -0
  80. package/contracts/libraries/OracleLibrary.sol +161 -0
  81. package/contracts/libraries/Path.sol +69 -0
  82. package/contracts/libraries/PoolAddress.sol +48 -0
  83. package/contracts/libraries/PoolTicksCounter.sol +97 -0
  84. package/contracts/libraries/PositionKey.sol +13 -0
  85. package/contracts/libraries/PositionValue.sol +167 -0
  86. package/contracts/libraries/TokenRatioSortOrder.sol +12 -0
  87. package/contracts/libraries/TransferHelper.sol +60 -0
  88. package/package.json +68 -0
@@ -0,0 +1,360 @@
1
+ {
2
+ "_format": "hh-sol-artifact-1",
3
+ "contractName": "V3Migrator",
4
+ "sourceName": "contracts/V3Migrator.sol",
5
+ "abi": [
6
+ {
7
+ "inputs": [
8
+ {
9
+ "internalType": "address",
10
+ "name": "_factory",
11
+ "type": "address"
12
+ },
13
+ {
14
+ "internalType": "address",
15
+ "name": "_WETH9",
16
+ "type": "address"
17
+ },
18
+ {
19
+ "internalType": "address",
20
+ "name": "_nonfungiblePositionManager",
21
+ "type": "address"
22
+ }
23
+ ],
24
+ "stateMutability": "nonpayable",
25
+ "type": "constructor"
26
+ },
27
+ {
28
+ "inputs": [],
29
+ "name": "WETH9",
30
+ "outputs": [
31
+ {
32
+ "internalType": "address",
33
+ "name": "",
34
+ "type": "address"
35
+ }
36
+ ],
37
+ "stateMutability": "view",
38
+ "type": "function"
39
+ },
40
+ {
41
+ "inputs": [
42
+ {
43
+ "internalType": "address",
44
+ "name": "token0",
45
+ "type": "address"
46
+ },
47
+ {
48
+ "internalType": "address",
49
+ "name": "token1",
50
+ "type": "address"
51
+ },
52
+ {
53
+ "internalType": "uint24",
54
+ "name": "fee",
55
+ "type": "uint24"
56
+ },
57
+ {
58
+ "internalType": "uint160",
59
+ "name": "sqrtPriceX96",
60
+ "type": "uint160"
61
+ }
62
+ ],
63
+ "name": "createAndInitializePoolIfNecessary",
64
+ "outputs": [
65
+ {
66
+ "internalType": "address",
67
+ "name": "pool",
68
+ "type": "address"
69
+ }
70
+ ],
71
+ "stateMutability": "payable",
72
+ "type": "function"
73
+ },
74
+ {
75
+ "inputs": [],
76
+ "name": "factory",
77
+ "outputs": [
78
+ {
79
+ "internalType": "address",
80
+ "name": "",
81
+ "type": "address"
82
+ }
83
+ ],
84
+ "stateMutability": "view",
85
+ "type": "function"
86
+ },
87
+ {
88
+ "inputs": [
89
+ {
90
+ "components": [
91
+ {
92
+ "internalType": "address",
93
+ "name": "pair",
94
+ "type": "address"
95
+ },
96
+ {
97
+ "internalType": "uint256",
98
+ "name": "liquidityToMigrate",
99
+ "type": "uint256"
100
+ },
101
+ {
102
+ "internalType": "uint8",
103
+ "name": "percentageToMigrate",
104
+ "type": "uint8"
105
+ },
106
+ {
107
+ "internalType": "address",
108
+ "name": "token0",
109
+ "type": "address"
110
+ },
111
+ {
112
+ "internalType": "address",
113
+ "name": "token1",
114
+ "type": "address"
115
+ },
116
+ {
117
+ "internalType": "uint24",
118
+ "name": "fee",
119
+ "type": "uint24"
120
+ },
121
+ {
122
+ "internalType": "int24",
123
+ "name": "tickLower",
124
+ "type": "int24"
125
+ },
126
+ {
127
+ "internalType": "int24",
128
+ "name": "tickUpper",
129
+ "type": "int24"
130
+ },
131
+ {
132
+ "internalType": "uint256",
133
+ "name": "amount0Min",
134
+ "type": "uint256"
135
+ },
136
+ {
137
+ "internalType": "uint256",
138
+ "name": "amount1Min",
139
+ "type": "uint256"
140
+ },
141
+ {
142
+ "internalType": "address",
143
+ "name": "recipient",
144
+ "type": "address"
145
+ },
146
+ {
147
+ "internalType": "uint256",
148
+ "name": "deadline",
149
+ "type": "uint256"
150
+ },
151
+ {
152
+ "internalType": "bool",
153
+ "name": "refundAsETH",
154
+ "type": "bool"
155
+ }
156
+ ],
157
+ "internalType": "struct IV3Migrator.MigrateParams",
158
+ "name": "params",
159
+ "type": "tuple"
160
+ }
161
+ ],
162
+ "name": "migrate",
163
+ "outputs": [],
164
+ "stateMutability": "nonpayable",
165
+ "type": "function"
166
+ },
167
+ {
168
+ "inputs": [
169
+ {
170
+ "internalType": "bytes[]",
171
+ "name": "data",
172
+ "type": "bytes[]"
173
+ }
174
+ ],
175
+ "name": "multicall",
176
+ "outputs": [
177
+ {
178
+ "internalType": "bytes[]",
179
+ "name": "results",
180
+ "type": "bytes[]"
181
+ }
182
+ ],
183
+ "stateMutability": "payable",
184
+ "type": "function"
185
+ },
186
+ {
187
+ "inputs": [],
188
+ "name": "nonfungiblePositionManager",
189
+ "outputs": [
190
+ {
191
+ "internalType": "address",
192
+ "name": "",
193
+ "type": "address"
194
+ }
195
+ ],
196
+ "stateMutability": "view",
197
+ "type": "function"
198
+ },
199
+ {
200
+ "inputs": [
201
+ {
202
+ "internalType": "address",
203
+ "name": "token",
204
+ "type": "address"
205
+ },
206
+ {
207
+ "internalType": "uint256",
208
+ "name": "value",
209
+ "type": "uint256"
210
+ },
211
+ {
212
+ "internalType": "uint256",
213
+ "name": "deadline",
214
+ "type": "uint256"
215
+ },
216
+ {
217
+ "internalType": "uint8",
218
+ "name": "v",
219
+ "type": "uint8"
220
+ },
221
+ {
222
+ "internalType": "bytes32",
223
+ "name": "r",
224
+ "type": "bytes32"
225
+ },
226
+ {
227
+ "internalType": "bytes32",
228
+ "name": "s",
229
+ "type": "bytes32"
230
+ }
231
+ ],
232
+ "name": "selfPermit",
233
+ "outputs": [],
234
+ "stateMutability": "payable",
235
+ "type": "function"
236
+ },
237
+ {
238
+ "inputs": [
239
+ {
240
+ "internalType": "address",
241
+ "name": "token",
242
+ "type": "address"
243
+ },
244
+ {
245
+ "internalType": "uint256",
246
+ "name": "nonce",
247
+ "type": "uint256"
248
+ },
249
+ {
250
+ "internalType": "uint256",
251
+ "name": "expiry",
252
+ "type": "uint256"
253
+ },
254
+ {
255
+ "internalType": "uint8",
256
+ "name": "v",
257
+ "type": "uint8"
258
+ },
259
+ {
260
+ "internalType": "bytes32",
261
+ "name": "r",
262
+ "type": "bytes32"
263
+ },
264
+ {
265
+ "internalType": "bytes32",
266
+ "name": "s",
267
+ "type": "bytes32"
268
+ }
269
+ ],
270
+ "name": "selfPermitAllowed",
271
+ "outputs": [],
272
+ "stateMutability": "payable",
273
+ "type": "function"
274
+ },
275
+ {
276
+ "inputs": [
277
+ {
278
+ "internalType": "address",
279
+ "name": "token",
280
+ "type": "address"
281
+ },
282
+ {
283
+ "internalType": "uint256",
284
+ "name": "nonce",
285
+ "type": "uint256"
286
+ },
287
+ {
288
+ "internalType": "uint256",
289
+ "name": "expiry",
290
+ "type": "uint256"
291
+ },
292
+ {
293
+ "internalType": "uint8",
294
+ "name": "v",
295
+ "type": "uint8"
296
+ },
297
+ {
298
+ "internalType": "bytes32",
299
+ "name": "r",
300
+ "type": "bytes32"
301
+ },
302
+ {
303
+ "internalType": "bytes32",
304
+ "name": "s",
305
+ "type": "bytes32"
306
+ }
307
+ ],
308
+ "name": "selfPermitAllowedIfNecessary",
309
+ "outputs": [],
310
+ "stateMutability": "payable",
311
+ "type": "function"
312
+ },
313
+ {
314
+ "inputs": [
315
+ {
316
+ "internalType": "address",
317
+ "name": "token",
318
+ "type": "address"
319
+ },
320
+ {
321
+ "internalType": "uint256",
322
+ "name": "value",
323
+ "type": "uint256"
324
+ },
325
+ {
326
+ "internalType": "uint256",
327
+ "name": "deadline",
328
+ "type": "uint256"
329
+ },
330
+ {
331
+ "internalType": "uint8",
332
+ "name": "v",
333
+ "type": "uint8"
334
+ },
335
+ {
336
+ "internalType": "bytes32",
337
+ "name": "r",
338
+ "type": "bytes32"
339
+ },
340
+ {
341
+ "internalType": "bytes32",
342
+ "name": "s",
343
+ "type": "bytes32"
344
+ }
345
+ ],
346
+ "name": "selfPermitIfNecessary",
347
+ "outputs": [],
348
+ "stateMutability": "payable",
349
+ "type": "function"
350
+ },
351
+ {
352
+ "stateMutability": "payable",
353
+ "type": "receive"
354
+ }
355
+ ],
356
+ "bytecode": "0x60e06040523480156200001157600080fd5b5060405162001f4238038062001f42833981016040819052620000349162000079565b6001600160601b0319606093841b811660805291831b821660a05290911b1660c052620000c2565b80516001600160a01b03811681146200007457600080fd5b919050565b6000806000606084860312156200008e578283fd5b62000099846200005c565b9250620000a9602085016200005c565b9150620000b9604085016200005c565b90509250925092565b60805160601c60a05160601c60c05160601c611e146200012e6000398061090d5280610c4c5280610c865280610cb05280610e8d52508060d252806106b25280610ee65280610f70528061105852806110e2525080610269528061036452806109e65250611e146000f3fe6080604052600436106100b55760003560e01c8063b44a272211610069578063c45a01551161004e578063c45a0155146101e5578063d44f2bf2146101fa578063f3995c671461021a57610134565b8063b44a2722146101bd578063c2e3140a146101d257610134565b80634aa4a4fc1161009a5780634aa4a4fc14610175578063a4a78f0c1461018a578063ac9650d81461019d57610134565b806313ead562146101395780634659a4941461016257610134565b36610134573373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610132576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161012990611c15565b60405180910390fd5b005b600080fd5b61014c610147366004611788565b61022d565b6040516101599190611afb565b60405180910390f35b6101326101703660046117e1565b6105f0565b34801561018157600080fd5b5061014c6106b0565b6101326101983660046117e1565b6106d4565b6101b06101ab36600461183a565b6107b1565b6040516101599190611b4d565b3480156101c957600080fd5b5061014c61090b565b6101326101e03660046117e1565b61092f565b3480156101f157600080fd5b5061014c6109e4565b34801561020657600080fd5b506101326102153660046119b7565b610a08565b6101326102283660046117e1565b611176565b60008373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161061026757600080fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16631698ee828686866040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018262ffffff168152602001935050505060206040518083038186803b15801561031957600080fd5b505afa15801561032d573d6000803e3d6000fd5b505050506040513d602081101561034357600080fd5b5051905073ffffffffffffffffffffffffffffffffffffffff81166104d3577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a16712958686866040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018262ffffff1681526020019350505050602060405180830381600087803b15801561041657600080fd5b505af115801561042a573d6000803e3d6000fd5b505050506040513d602081101561044057600080fd5b5051604080517ff637731d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015291519293509083169163f637731d9160248082019260009290919082900301818387803b1580156104b657600080fd5b505af11580156104ca573d6000803e3d6000fd5b505050506105e8565b60008173ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561051b57600080fd5b505afa15801561052f573d6000803e3d6000fd5b505050506040513d60e081101561054557600080fd5b5051905073ffffffffffffffffffffffffffffffffffffffff81166105e6578173ffffffffffffffffffffffffffffffffffffffff1663f637731d846040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b1580156105cd57600080fd5b505af11580156105e1573d6000803e3d6000fd5b505050505b505b949350505050565b604080517f8fcbaf0c00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101879052606481018690526001608482015260ff851660a482015260c4810184905260e48101839052905173ffffffffffffffffffffffffffffffffffffffff881691638fcbaf0c9161010480830192600092919082900301818387803b15801561069057600080fd5b505af11580156106a4573d6000803e3d6000fd5b50505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b604080517fdd62ed3e00000000000000000000000000000000000000000000000000000000815233600482015230602482015290517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9173ffffffffffffffffffffffffffffffffffffffff89169163dd62ed3e91604480820192602092909190829003018186803b15801561076957600080fd5b505afa15801561077d573d6000803e3d6000fd5b505050506040513d602081101561079357600080fd5b505110156107a9576107a98686868686866105f0565b505050505050565b60608167ffffffffffffffff811180156107ca57600080fd5b506040519080825280602002602001820160405280156107fe57816020015b60608152602001906001900390816107e95790505b50905060005b82811015610904576000803086868581811061081c57fe5b905060200281019061082e9190611d3a565b60405161083c929190611aeb565b600060405180830381855af49150503d8060008114610877576040519150601f19603f3d011682016040523d82523d6000602084013e61087c565b606091505b5091509150816108e25760448151101561089557600080fd5b600481019050808060200190518101906108af9190611902565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101299190611bcb565b808484815181106108ef57fe5b60209081029190910101525050600101610804565b5092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b604080517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523360048201523060248201529051869173ffffffffffffffffffffffffffffffffffffffff89169163dd62ed3e91604480820192602092909190829003018186803b1580156109a457600080fd5b505afa1580156109b8573d6000803e3d6000fd5b505050506040513d60208110156109ce57600080fd5b505110156107a9576107a9868686868686611176565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610a1a6060830160408401611a5d565b60ff1611610a54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161012990611bde565b6064610a666060830160408401611a5d565b60ff161115610aa1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161012990611c4c565b610aae6020820182611765565b73ffffffffffffffffffffffffffffffffffffffff166323b872dd33610ad76020850185611765565b84602001356040518463ffffffff1660e01b8152600401610afa93929190611b1c565b602060405180830381600087803b158015610b1457600080fd5b505af1158015610b28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b4c91906118c5565b50600080610b5d6020840184611765565b73ffffffffffffffffffffffffffffffffffffffff166389afcb44306040518263ffffffff1660e01b8152600401610b959190611afb565b6040805180830381600087803b158015610bae57600080fd5b505af1158015610bc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be69190611a3a565b909250905060006064610c0c610c026060870160408801611a5d565b859060ff1661120e565b81610c1357fe5b04905060006064610c2d610c026060880160408901611a5d565b81610c3457fe5b049050610c71610c4a6080870160608801611765565b7f000000000000000000000000000000000000000000000000000000000000000084611238565b610cab610c8460a0870160808801611765565b7f000000000000000000000000000000000000000000000000000000000000000083611238565b6000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663883164566040518061016001604052808a6060016020810190610d099190611765565b73ffffffffffffffffffffffffffffffffffffffff168152602001610d3460a08c0160808d01611765565b73ffffffffffffffffffffffffffffffffffffffff168152602001610d5f60c08c0160a08d016119cf565b62ffffff168152602001610d7960e08c0160c08d016118e1565b60020b8152602001610d926101008c0160e08d016118e1565b60020b815260208101889052604081018790526101008b013560608201526101208b0135608082015260a001610dd06101608c016101408d01611765565b73ffffffffffffffffffffffffffffffffffffffff1681526020018a61016001358152506040518263ffffffff1660e01b8152600401610e109190611c83565b608060405180830381600087803b158015610e2a57600080fd5b505af1158015610e3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e6291906119e9565b935093505050858210156110025783821015610eb357610eb3610e8b6080890160608a01611765565b7f00000000000000000000000000000000000000000000000000000000000000006000611238565b818603610ec86101a089016101808a016118a9565b8015610f2e575073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016610f1660808a0160608b01611765565b73ffffffffffffffffffffffffffffffffffffffff16145b15610fe6576040517f2e1a7d4d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632e1a7d4d90610fa5908490600401611d31565b600060405180830381600087803b158015610fbf57600080fd5b505af1158015610fd3573d6000803e3d6000fd5b50505050610fe13382611414565b611000565b611000610ff960808a0160608b01611765565b3383611567565b505b8481101561116d578281101561102557611025610e8b60a0890160808a01611765565b80850361103a6101a089016101808a016118a9565b80156110a0575073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001661108860a08a0160808b01611765565b73ffffffffffffffffffffffffffffffffffffffff16145b15611158576040517f2e1a7d4d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632e1a7d4d90611117908490600401611d31565b600060405180830381600087803b15801561113157600080fd5b505af1158015611145573d6000803e3d6000fd5b505050506111533382611414565b61116b565b61116b610ff960a08a0160808b01611765565b505b50505050505050565b604080517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018790526064810186905260ff8516608482015260a4810184905260c48101839052905173ffffffffffffffffffffffffffffffffffffffff88169163d505accf9160e480830192600092919082900301818387803b15801561069057600080fd5b60008215806112295750508181028183828161122657fe5b04145b61123257600080fd5b92915050565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b3000000000000000000000000000000000000000000000000000000001781529251825160009485949389169392918291908083835b6020831061130d57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016112d0565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461136f576040519150601f19603f3d011682016040523d82523d6000602084013e611374565b606091505b50915091508180156113a25750805115806113a2575080806020019051602081101561139f57600080fd5b50515b61140d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f5341000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b5050505050565b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff84169083906040518082805190602001908083835b6020831061148b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161144e565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146114ed576040519150601f19603f3d011682016040523d82523d6000602084013e6114f2565b606091505b505090508061156257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f5354450000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781529251825160009485949389169392918291908083835b6020831061163c57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016115ff565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461169e576040519150601f19603f3d011682016040523d82523d6000602084013e6116a3565b606091505b50915091508180156116d15750805115806116d157508080602001905160208110156116ce57600080fd5b50515b61140d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f5354000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b803562ffffff8116811461174f57600080fd5b919050565b803560ff8116811461174f57600080fd5b600060208284031215611776578081fd5b813561178181611dd4565b9392505050565b6000806000806080858703121561179d578283fd5b84356117a881611dd4565b935060208501356117b881611dd4565b92506117c66040860161173c565b915060608501356117d681611dd4565b939692955090935050565b60008060008060008060c087890312156117f9578182fd5b863561180481611dd4565b9550602087013594506040870135935061182060608801611754565b92506080870135915060a087013590509295509295509295565b6000806020838503121561184c578182fd5b823567ffffffffffffffff80821115611863578384fd5b818501915085601f830112611876578384fd5b813581811115611884578485fd5b8660208083028501011115611897578485fd5b60209290920196919550909350505050565b6000602082840312156118ba578081fd5b813561178181611df9565b6000602082840312156118d6578081fd5b815161178181611df9565b6000602082840312156118f2578081fd5b81358060020b8114611781578182fd5b600060208284031215611913578081fd5b815167ffffffffffffffff8082111561192a578283fd5b818401915084601f83011261193d578283fd5b81518181111561194957fe5b60405160207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116820101818110848211171561198557fe5b60405281815283820160200187101561199c578485fd5b6119ad826020830160208701611da4565b9695505050505050565b60006101a082840312156119c9578081fd5b50919050565b6000602082840312156119e0578081fd5b6117818261173c565b600080600080608085870312156119fe578384fd5b8451935060208501516fffffffffffffffffffffffffffffffff81168114611a24578384fd5b6040860151606090960151949790965092505050565b60008060408385031215611a4c578182fd5b505080516020909101519092909150565b600060208284031215611a6e578081fd5b61178182611754565b73ffffffffffffffffffffffffffffffffffffffff169052565b60008151808452611aa9816020860160208601611da4565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60020b9052565b62ffffff169052565b6000828483379101908152919050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff9384168152919092166020820152604081019190915260600190565b6000602080830181845280855180835260408601915060408482028701019250838701855b82811015611bbe577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452611bac858351611a91565b94509285019290850190600101611b72565b5092979650505050505050565b6000602082526117816020830184611a91565b60208082526014908201527f50657263656e7461676520746f6f20736d616c6c000000000000000000000000604082015260600190565b60208082526009908201527f4e6f742057455448390000000000000000000000000000000000000000000000604082015260600190565b60208082526014908201527f50657263656e7461676520746f6f206c61726765000000000000000000000000604082015260600190565b600061016082019050611c97828451611a77565b6020830151611ca96020840182611a77565b506040830151611cbc6040840182611ae2565b506060830151611ccf6060840182611adb565b506080830151611ce26080840182611adb565b5060a083015160a083015260c083015160c083015260e083015160e083015261010080840151818401525061012080840151611d2082850182611a77565b505061014092830151919092015290565b90815260200190565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112611d6e578283fd5b83018035915067ffffffffffffffff821115611d88578283fd5b602001915036819003821315611d9d57600080fd5b9250929050565b60005b83811015611dbf578181015183820152602001611da7565b83811115611dce576000848401525b50505050565b73ffffffffffffffffffffffffffffffffffffffff81168114611df657600080fd5b50565b8015158114611df657600080fdfea164736f6c6343000706000a",
357
+ "deployedBytecode": "0x6080604052600436106100b55760003560e01c8063b44a272211610069578063c45a01551161004e578063c45a0155146101e5578063d44f2bf2146101fa578063f3995c671461021a57610134565b8063b44a2722146101bd578063c2e3140a146101d257610134565b80634aa4a4fc1161009a5780634aa4a4fc14610175578063a4a78f0c1461018a578063ac9650d81461019d57610134565b806313ead562146101395780634659a4941461016257610134565b36610134573373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610132576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161012990611c15565b60405180910390fd5b005b600080fd5b61014c610147366004611788565b61022d565b6040516101599190611afb565b60405180910390f35b6101326101703660046117e1565b6105f0565b34801561018157600080fd5b5061014c6106b0565b6101326101983660046117e1565b6106d4565b6101b06101ab36600461183a565b6107b1565b6040516101599190611b4d565b3480156101c957600080fd5b5061014c61090b565b6101326101e03660046117e1565b61092f565b3480156101f157600080fd5b5061014c6109e4565b34801561020657600080fd5b506101326102153660046119b7565b610a08565b6101326102283660046117e1565b611176565b60008373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161061026757600080fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16631698ee828686866040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018262ffffff168152602001935050505060206040518083038186803b15801561031957600080fd5b505afa15801561032d573d6000803e3d6000fd5b505050506040513d602081101561034357600080fd5b5051905073ffffffffffffffffffffffffffffffffffffffff81166104d3577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a16712958686866040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018262ffffff1681526020019350505050602060405180830381600087803b15801561041657600080fd5b505af115801561042a573d6000803e3d6000fd5b505050506040513d602081101561044057600080fd5b5051604080517ff637731d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015291519293509083169163f637731d9160248082019260009290919082900301818387803b1580156104b657600080fd5b505af11580156104ca573d6000803e3d6000fd5b505050506105e8565b60008173ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561051b57600080fd5b505afa15801561052f573d6000803e3d6000fd5b505050506040513d60e081101561054557600080fd5b5051905073ffffffffffffffffffffffffffffffffffffffff81166105e6578173ffffffffffffffffffffffffffffffffffffffff1663f637731d846040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b1580156105cd57600080fd5b505af11580156105e1573d6000803e3d6000fd5b505050505b505b949350505050565b604080517f8fcbaf0c00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101879052606481018690526001608482015260ff851660a482015260c4810184905260e48101839052905173ffffffffffffffffffffffffffffffffffffffff881691638fcbaf0c9161010480830192600092919082900301818387803b15801561069057600080fd5b505af11580156106a4573d6000803e3d6000fd5b50505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b604080517fdd62ed3e00000000000000000000000000000000000000000000000000000000815233600482015230602482015290517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9173ffffffffffffffffffffffffffffffffffffffff89169163dd62ed3e91604480820192602092909190829003018186803b15801561076957600080fd5b505afa15801561077d573d6000803e3d6000fd5b505050506040513d602081101561079357600080fd5b505110156107a9576107a98686868686866105f0565b505050505050565b60608167ffffffffffffffff811180156107ca57600080fd5b506040519080825280602002602001820160405280156107fe57816020015b60608152602001906001900390816107e95790505b50905060005b82811015610904576000803086868581811061081c57fe5b905060200281019061082e9190611d3a565b60405161083c929190611aeb565b600060405180830381855af49150503d8060008114610877576040519150601f19603f3d011682016040523d82523d6000602084013e61087c565b606091505b5091509150816108e25760448151101561089557600080fd5b600481019050808060200190518101906108af9190611902565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101299190611bcb565b808484815181106108ef57fe5b60209081029190910101525050600101610804565b5092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b604080517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523360048201523060248201529051869173ffffffffffffffffffffffffffffffffffffffff89169163dd62ed3e91604480820192602092909190829003018186803b1580156109a457600080fd5b505afa1580156109b8573d6000803e3d6000fd5b505050506040513d60208110156109ce57600080fd5b505110156107a9576107a9868686868686611176565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610a1a6060830160408401611a5d565b60ff1611610a54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161012990611bde565b6064610a666060830160408401611a5d565b60ff161115610aa1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161012990611c4c565b610aae6020820182611765565b73ffffffffffffffffffffffffffffffffffffffff166323b872dd33610ad76020850185611765565b84602001356040518463ffffffff1660e01b8152600401610afa93929190611b1c565b602060405180830381600087803b158015610b1457600080fd5b505af1158015610b28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b4c91906118c5565b50600080610b5d6020840184611765565b73ffffffffffffffffffffffffffffffffffffffff166389afcb44306040518263ffffffff1660e01b8152600401610b959190611afb565b6040805180830381600087803b158015610bae57600080fd5b505af1158015610bc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be69190611a3a565b909250905060006064610c0c610c026060870160408801611a5d565b859060ff1661120e565b81610c1357fe5b04905060006064610c2d610c026060880160408901611a5d565b81610c3457fe5b049050610c71610c4a6080870160608801611765565b7f000000000000000000000000000000000000000000000000000000000000000084611238565b610cab610c8460a0870160808801611765565b7f000000000000000000000000000000000000000000000000000000000000000083611238565b6000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663883164566040518061016001604052808a6060016020810190610d099190611765565b73ffffffffffffffffffffffffffffffffffffffff168152602001610d3460a08c0160808d01611765565b73ffffffffffffffffffffffffffffffffffffffff168152602001610d5f60c08c0160a08d016119cf565b62ffffff168152602001610d7960e08c0160c08d016118e1565b60020b8152602001610d926101008c0160e08d016118e1565b60020b815260208101889052604081018790526101008b013560608201526101208b0135608082015260a001610dd06101608c016101408d01611765565b73ffffffffffffffffffffffffffffffffffffffff1681526020018a61016001358152506040518263ffffffff1660e01b8152600401610e109190611c83565b608060405180830381600087803b158015610e2a57600080fd5b505af1158015610e3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e6291906119e9565b935093505050858210156110025783821015610eb357610eb3610e8b6080890160608a01611765565b7f00000000000000000000000000000000000000000000000000000000000000006000611238565b818603610ec86101a089016101808a016118a9565b8015610f2e575073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016610f1660808a0160608b01611765565b73ffffffffffffffffffffffffffffffffffffffff16145b15610fe6576040517f2e1a7d4d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632e1a7d4d90610fa5908490600401611d31565b600060405180830381600087803b158015610fbf57600080fd5b505af1158015610fd3573d6000803e3d6000fd5b50505050610fe13382611414565b611000565b611000610ff960808a0160608b01611765565b3383611567565b505b8481101561116d578281101561102557611025610e8b60a0890160808a01611765565b80850361103a6101a089016101808a016118a9565b80156110a0575073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001661108860a08a0160808b01611765565b73ffffffffffffffffffffffffffffffffffffffff16145b15611158576040517f2e1a7d4d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632e1a7d4d90611117908490600401611d31565b600060405180830381600087803b15801561113157600080fd5b505af1158015611145573d6000803e3d6000fd5b505050506111533382611414565b61116b565b61116b610ff960a08a0160808b01611765565b505b50505050505050565b604080517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018790526064810186905260ff8516608482015260a4810184905260c48101839052905173ffffffffffffffffffffffffffffffffffffffff88169163d505accf9160e480830192600092919082900301818387803b15801561069057600080fd5b60008215806112295750508181028183828161122657fe5b04145b61123257600080fd5b92915050565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b3000000000000000000000000000000000000000000000000000000001781529251825160009485949389169392918291908083835b6020831061130d57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016112d0565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461136f576040519150601f19603f3d011682016040523d82523d6000602084013e611374565b606091505b50915091508180156113a25750805115806113a2575080806020019051602081101561139f57600080fd5b50515b61140d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f5341000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b5050505050565b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff84169083906040518082805190602001908083835b6020831061148b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161144e565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146114ed576040519150601f19603f3d011682016040523d82523d6000602084013e6114f2565b606091505b505090508061156257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f5354450000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781529251825160009485949389169392918291908083835b6020831061163c57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016115ff565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461169e576040519150601f19603f3d011682016040523d82523d6000602084013e6116a3565b606091505b50915091508180156116d15750805115806116d157508080602001905160208110156116ce57600080fd5b50515b61140d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f5354000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b803562ffffff8116811461174f57600080fd5b919050565b803560ff8116811461174f57600080fd5b600060208284031215611776578081fd5b813561178181611dd4565b9392505050565b6000806000806080858703121561179d578283fd5b84356117a881611dd4565b935060208501356117b881611dd4565b92506117c66040860161173c565b915060608501356117d681611dd4565b939692955090935050565b60008060008060008060c087890312156117f9578182fd5b863561180481611dd4565b9550602087013594506040870135935061182060608801611754565b92506080870135915060a087013590509295509295509295565b6000806020838503121561184c578182fd5b823567ffffffffffffffff80821115611863578384fd5b818501915085601f830112611876578384fd5b813581811115611884578485fd5b8660208083028501011115611897578485fd5b60209290920196919550909350505050565b6000602082840312156118ba578081fd5b813561178181611df9565b6000602082840312156118d6578081fd5b815161178181611df9565b6000602082840312156118f2578081fd5b81358060020b8114611781578182fd5b600060208284031215611913578081fd5b815167ffffffffffffffff8082111561192a578283fd5b818401915084601f83011261193d578283fd5b81518181111561194957fe5b60405160207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116820101818110848211171561198557fe5b60405281815283820160200187101561199c578485fd5b6119ad826020830160208701611da4565b9695505050505050565b60006101a082840312156119c9578081fd5b50919050565b6000602082840312156119e0578081fd5b6117818261173c565b600080600080608085870312156119fe578384fd5b8451935060208501516fffffffffffffffffffffffffffffffff81168114611a24578384fd5b6040860151606090960151949790965092505050565b60008060408385031215611a4c578182fd5b505080516020909101519092909150565b600060208284031215611a6e578081fd5b61178182611754565b73ffffffffffffffffffffffffffffffffffffffff169052565b60008151808452611aa9816020860160208601611da4565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60020b9052565b62ffffff169052565b6000828483379101908152919050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff9384168152919092166020820152604081019190915260600190565b6000602080830181845280855180835260408601915060408482028701019250838701855b82811015611bbe577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452611bac858351611a91565b94509285019290850190600101611b72565b5092979650505050505050565b6000602082526117816020830184611a91565b60208082526014908201527f50657263656e7461676520746f6f20736d616c6c000000000000000000000000604082015260600190565b60208082526009908201527f4e6f742057455448390000000000000000000000000000000000000000000000604082015260600190565b60208082526014908201527f50657263656e7461676520746f6f206c61726765000000000000000000000000604082015260600190565b600061016082019050611c97828451611a77565b6020830151611ca96020840182611a77565b506040830151611cbc6040840182611ae2565b506060830151611ccf6060840182611adb565b506080830151611ce26080840182611adb565b5060a083015160a083015260c083015160c083015260e083015160e083015261010080840151818401525061012080840151611d2082850182611a77565b505061014092830151919092015290565b90815260200190565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112611d6e578283fd5b83018035915067ffffffffffffffff821115611d88578283fd5b602001915036819003821315611d9d57600080fd5b9250929050565b60005b83811015611dbf578181015183820152602001611da7565b83811115611dce576000848401525b50505050565b73ffffffffffffffffffffffffffffffffffffffff81168114611df657600080fd5b50565b8015158114611df657600080fdfea164736f6c6343000706000a",
358
+ "linkReferences": {},
359
+ "deployedLinkReferences": {}
360
+ }
@@ -0,0 +1,196 @@
1
+ {
2
+ "_format": "hh-sol-artifact-1",
3
+ "contractName": "PairFlash",
4
+ "sourceName": "contracts/examples/PairFlash.sol",
5
+ "abi": [
6
+ {
7
+ "inputs": [
8
+ {
9
+ "internalType": "contract ISwapRouter",
10
+ "name": "_swapRouter",
11
+ "type": "address"
12
+ },
13
+ {
14
+ "internalType": "address",
15
+ "name": "_factory",
16
+ "type": "address"
17
+ },
18
+ {
19
+ "internalType": "address",
20
+ "name": "_WETH9",
21
+ "type": "address"
22
+ }
23
+ ],
24
+ "stateMutability": "nonpayable",
25
+ "type": "constructor"
26
+ },
27
+ {
28
+ "inputs": [],
29
+ "name": "WETH9",
30
+ "outputs": [
31
+ {
32
+ "internalType": "address",
33
+ "name": "",
34
+ "type": "address"
35
+ }
36
+ ],
37
+ "stateMutability": "view",
38
+ "type": "function"
39
+ },
40
+ {
41
+ "inputs": [],
42
+ "name": "factory",
43
+ "outputs": [
44
+ {
45
+ "internalType": "address",
46
+ "name": "",
47
+ "type": "address"
48
+ }
49
+ ],
50
+ "stateMutability": "view",
51
+ "type": "function"
52
+ },
53
+ {
54
+ "inputs": [
55
+ {
56
+ "components": [
57
+ {
58
+ "internalType": "address",
59
+ "name": "token0",
60
+ "type": "address"
61
+ },
62
+ {
63
+ "internalType": "address",
64
+ "name": "token1",
65
+ "type": "address"
66
+ },
67
+ {
68
+ "internalType": "uint24",
69
+ "name": "fee1",
70
+ "type": "uint24"
71
+ },
72
+ {
73
+ "internalType": "uint256",
74
+ "name": "amount0",
75
+ "type": "uint256"
76
+ },
77
+ {
78
+ "internalType": "uint256",
79
+ "name": "amount1",
80
+ "type": "uint256"
81
+ },
82
+ {
83
+ "internalType": "uint24",
84
+ "name": "fee2",
85
+ "type": "uint24"
86
+ },
87
+ {
88
+ "internalType": "uint24",
89
+ "name": "fee3",
90
+ "type": "uint24"
91
+ }
92
+ ],
93
+ "internalType": "struct PairFlash.FlashParams",
94
+ "name": "params",
95
+ "type": "tuple"
96
+ }
97
+ ],
98
+ "name": "initFlash",
99
+ "outputs": [],
100
+ "stateMutability": "nonpayable",
101
+ "type": "function"
102
+ },
103
+ {
104
+ "inputs": [],
105
+ "name": "refundETH",
106
+ "outputs": [],
107
+ "stateMutability": "payable",
108
+ "type": "function"
109
+ },
110
+ {
111
+ "inputs": [],
112
+ "name": "swapRouter",
113
+ "outputs": [
114
+ {
115
+ "internalType": "contract ISwapRouter",
116
+ "name": "",
117
+ "type": "address"
118
+ }
119
+ ],
120
+ "stateMutability": "view",
121
+ "type": "function"
122
+ },
123
+ {
124
+ "inputs": [
125
+ {
126
+ "internalType": "address",
127
+ "name": "token",
128
+ "type": "address"
129
+ },
130
+ {
131
+ "internalType": "uint256",
132
+ "name": "amountMinimum",
133
+ "type": "uint256"
134
+ },
135
+ {
136
+ "internalType": "address",
137
+ "name": "recipient",
138
+ "type": "address"
139
+ }
140
+ ],
141
+ "name": "sweepToken",
142
+ "outputs": [],
143
+ "stateMutability": "payable",
144
+ "type": "function"
145
+ },
146
+ {
147
+ "inputs": [
148
+ {
149
+ "internalType": "uint256",
150
+ "name": "fee0",
151
+ "type": "uint256"
152
+ },
153
+ {
154
+ "internalType": "uint256",
155
+ "name": "fee1",
156
+ "type": "uint256"
157
+ },
158
+ {
159
+ "internalType": "bytes",
160
+ "name": "data",
161
+ "type": "bytes"
162
+ }
163
+ ],
164
+ "name": "uniswapV3FlashCallback",
165
+ "outputs": [],
166
+ "stateMutability": "nonpayable",
167
+ "type": "function"
168
+ },
169
+ {
170
+ "inputs": [
171
+ {
172
+ "internalType": "uint256",
173
+ "name": "amountMinimum",
174
+ "type": "uint256"
175
+ },
176
+ {
177
+ "internalType": "address",
178
+ "name": "recipient",
179
+ "type": "address"
180
+ }
181
+ ],
182
+ "name": "unwrapWETH9",
183
+ "outputs": [],
184
+ "stateMutability": "payable",
185
+ "type": "function"
186
+ },
187
+ {
188
+ "stateMutability": "payable",
189
+ "type": "receive"
190
+ }
191
+ ],
192
+ "bytecode": "0x60e06040523480156200001157600080fd5b5060405162001a9338038062001a9383398101604081905262000034916200005c565b6001600160601b0319606092831b811660805290821b811660a05291901b1660c052620000c8565b60008060006060848603121562000071578283fd5b83516200007e81620000af565b60208501519093506200009181620000af565b6040850151909250620000a481620000af565b809150509250925092565b6001600160a01b0381168114620000c557600080fd5b50565b60805160601c60a05160601c60c05160601c61195a6200013960003980610573528061074b528061077852806108c85280610976525080609c528061038b52806104b5528061054f52806110f0528061115052806111d1525080610267528061059752806106eb525061195a6000f3fe60806040526004361061007f5760003560e01c8063c31c9c071161004e578063c31c9c0714610195578063c45a0155146101aa578063df2ab5bb146101bf578063e9cbafb0146101d25761012a565b806312210e8a1461012f5780632384463b1461013757806349404b7c146101575780634aa4a4fc1461016a5761012a565b3661012a573373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461012857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f742057455448390000000000000000000000000000000000000000000000604482015290519081900360640190fd5b005b600080fd5b6101286101f2565b34801561014357600080fd5b5061012861015236600461161f565b610204565b6101286101653660046116d2565b610387565b34801561017657600080fd5b5061017f61054d565b60405161018c9190611781565b60405180910390f35b3480156101a157600080fd5b5061017f610571565b3480156101b657600080fd5b5061017f610595565b6101286101cd3660046114e8565b6105b9565b3480156101de57600080fd5b506101286101ed3660046116fd565b6106d6565b4715610202576102023347610a73565b565b60006040518060600160405280836000015173ffffffffffffffffffffffffffffffffffffffff168152602001836020015173ffffffffffffffffffffffffffffffffffffffff168152602001836040015162ffffff168152509050600061028c7f000000000000000000000000000000000000000000000000000000000000000083610bc1565b90508073ffffffffffffffffffffffffffffffffffffffff1663490e6cbc30856060015186608001516040518060c0016040528089606001518152602001896080015181526020013373ffffffffffffffffffffffffffffffffffffffff1681526020018881526020018960a0015162ffffff1681526020018960c0015162ffffff1681525060405160200161032291906118bb565b6040516020818303038152906040526040518563ffffffff1660e01b815260040161035094939291906117a2565b600060405180830381600087803b15801561036a57600080fd5b505af115801561037e573d6000803e3d6000fd5b50505050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561041057600080fd5b505afa158015610424573d6000803e3d6000fd5b505050506040513d602081101561043a57600080fd5b50519050828110156104ad57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e742057455448390000000000000000000000000000604482015290519081900360640190fd5b8015610548577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561052657600080fd5b505af115801561053a573d6000803e3d6000fd5b505050506105488282610a73565b505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561062257600080fd5b505afa158015610636573d6000803e3d6000fd5b505050506040513d602081101561064c57600080fd5b50519050828110156106bf57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e7420746f6b656e0000000000000000000000000000604482015290519081900360640190fd5b80156106d0576106d0848383610cf7565b50505050565b60006106e482840184611523565b90506107147f00000000000000000000000000000000000000000000000000000000000000008260600151610ed3565b506060810151805160209091015182516000906107319089610f09565b90506000610743856020015189610f09565b9050610774837f00000000000000000000000000000000000000000000000000000000000000008760200151610f19565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663414bf3896040518061010001604052808773ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff168152602001896080015162ffffff1681526020013073ffffffffffffffffffffffffffffffffffffffff16815260200142815260200189602001518152602001868152602001600073ffffffffffffffffffffffffffffffffffffffff168152506040518263ffffffff1660e01b815260040161086e919061183f565b602060405180830381600087803b15801561088857600080fd5b505af115801561089c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c091906116ba565b90506108f1857f00000000000000000000000000000000000000000000000000000000000000008860000151610f19565b604080516101008101825273ffffffffffffffffffffffffffffffffffffffff8781168252868116602083015260a08981015162ffffff168385015230606084015242608084015289519083015260c08201859052600060e0830181905292517f414bf3890000000000000000000000000000000000000000000000000000000081527f00000000000000000000000000000000000000000000000000000000000000009091169163414bf389916109ac919060040161183f565b602060405180830381600087803b1580156109c657600080fd5b505af11580156109da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109fe91906116ba565b90508315610a1257610a12863033876110ee565b8215610a2457610a24853033866110ee565b83821115610a455760008483039050610a4387308a60400151846110ee565b505b82811115610a665760008382039050610a6486308a60400151846110ee565b505b5050505050505050505050565b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff84169083906040518082805190602001908083835b60208310610aea57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610aad565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114610b4c576040519150601f19603f3d011682016040523d82523d6000602084013e610b51565b606091505b505090508061054857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f5354450000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6000816020015173ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1610610c0357600080fd5b508051602080830151604093840151845173ffffffffffffffffffffffffffffffffffffffff94851681850152939091168385015262ffffff166060808401919091528351808403820181526080840185528051908301207fff0000000000000000000000000000000000000000000000000000000000000060a085015294901b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660a183015260b58201939093527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5460d5808301919091528251808303909101815260f5909101909152805191012090565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781529251825160009485949389169392918291908083835b60208310610dcc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d8f565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610e2e576040519150601f19603f3d011682016040523d82523d6000602084013e610e33565b606091505b5091509150818015610e61575080511580610e615750808060200190516020811015610e5e57600080fd5b50515b610ecc57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f5354000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b5050505050565b6000610edf8383610bc1565b90503373ffffffffffffffffffffffffffffffffffffffff821614610f0357600080fd5b92915050565b80820182811015610f0357600080fd5b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b3000000000000000000000000000000000000000000000000000000001781529251825160009485949389169392918291908083835b60208310610fee57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fb1565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611050576040519150601f19603f3d011682016040523d82523d6000602084013e611055565b606091505b5091509150818015611083575080511580611083575080806020019051602081101561108057600080fd5b50515b610ecc57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f5341000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156111495750804710155b15611292577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156111b657600080fd5b505af11580156111ca573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561126057600080fd5b505af1158015611274573d6000803e3d6000fd5b505050506040513d602081101561128a57600080fd5b506106d09050565b73ffffffffffffffffffffffffffffffffffffffff83163014156112c0576112bb848383610cf7565b6106d0565b6106d0848484846040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000178152925182516000948594938a169392918291908083835b602083106113a457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611367565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611406576040519150601f19603f3d011682016040523d82523d6000602084013e61140b565b606091505b5091509150818015611439575080511580611439575080806020019051602081101561143657600080fd5b50515b6114a457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f5354460000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b505050505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146114d057600080fd5b919050565b803562ffffff811681146114d057600080fd5b6000806000606084860312156114fc578283fd5b611505846114ac565b92506020840135915061151a604085016114ac565b90509250925092565b6000818303610100811215611536578182fd5b6040805160c0810167ffffffffffffffff828210818311171561155557fe5b81845286358352602087013560208401526115718488016114ac565b8484015260607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0860112156115a4578586fd5b8351945060608501915084821081831117156115bc57fe5b5082526115cb606086016114ac565b83526115d9608086016114ac565b60208401526115ea60a086016114d5565b8284015282606082015261160060c086016114d5565b608082015261161160e086016114d5565b60a082015295945050505050565b600060e08284031215611630578081fd5b60405160e0810181811067ffffffffffffffff8211171561164d57fe5b604052611659836114ac565b8152611667602084016114ac565b6020820152611678604084016114d5565b6040820152606083013560608201526080830135608082015261169d60a084016114d5565b60a08201526116ae60c084016114d5565b60c08201529392505050565b6000602082840312156116cb578081fd5b5051919050565b600080604083850312156116e4578182fd5b823591506116f4602084016114ac565b90509250929050565b60008060008060608587031215611712578081fd5b8435935060208501359250604085013567ffffffffffffffff80821115611737578283fd5b818701915087601f83011261174a578283fd5b813581811115611758578384fd5b886020828501011115611769578384fd5b95989497505060200194505050565b62ffffff169052565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b600073ffffffffffffffffffffffffffffffffffffffff8616825260208581840152846040840152608060608401528351806080850152825b818110156117f75785810183015185820160a0015282016117db565b81811115611808578360a083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160a0019695505050505050565b60006101008201905073ffffffffffffffffffffffffffffffffffffffff80845116835280602085015116602084015262ffffff60408501511660408401528060608501511660608401526080840151608084015260a084015160a084015260c084015160c08401528060e08501511660e08401525092915050565b6000610100820190508251825260208301516020830152604083015173ffffffffffffffffffffffffffffffffffffffff8082166040850152606085015191508082511660608501528060208301511660808501525062ffffff60408201511660a084015250608083015161193360c0840182611778565b5060a083015161194660e0840182611778565b509291505056fea164736f6c6343000706000a",
193
+ "deployedBytecode": "0x60806040526004361061007f5760003560e01c8063c31c9c071161004e578063c31c9c0714610195578063c45a0155146101aa578063df2ab5bb146101bf578063e9cbafb0146101d25761012a565b806312210e8a1461012f5780632384463b1461013757806349404b7c146101575780634aa4a4fc1461016a5761012a565b3661012a573373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461012857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f742057455448390000000000000000000000000000000000000000000000604482015290519081900360640190fd5b005b600080fd5b6101286101f2565b34801561014357600080fd5b5061012861015236600461161f565b610204565b6101286101653660046116d2565b610387565b34801561017657600080fd5b5061017f61054d565b60405161018c9190611781565b60405180910390f35b3480156101a157600080fd5b5061017f610571565b3480156101b657600080fd5b5061017f610595565b6101286101cd3660046114e8565b6105b9565b3480156101de57600080fd5b506101286101ed3660046116fd565b6106d6565b4715610202576102023347610a73565b565b60006040518060600160405280836000015173ffffffffffffffffffffffffffffffffffffffff168152602001836020015173ffffffffffffffffffffffffffffffffffffffff168152602001836040015162ffffff168152509050600061028c7f000000000000000000000000000000000000000000000000000000000000000083610bc1565b90508073ffffffffffffffffffffffffffffffffffffffff1663490e6cbc30856060015186608001516040518060c0016040528089606001518152602001896080015181526020013373ffffffffffffffffffffffffffffffffffffffff1681526020018881526020018960a0015162ffffff1681526020018960c0015162ffffff1681525060405160200161032291906118bb565b6040516020818303038152906040526040518563ffffffff1660e01b815260040161035094939291906117a2565b600060405180830381600087803b15801561036a57600080fd5b505af115801561037e573d6000803e3d6000fd5b50505050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561041057600080fd5b505afa158015610424573d6000803e3d6000fd5b505050506040513d602081101561043a57600080fd5b50519050828110156104ad57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e742057455448390000000000000000000000000000604482015290519081900360640190fd5b8015610548577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561052657600080fd5b505af115801561053a573d6000803e3d6000fd5b505050506105488282610a73565b505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561062257600080fd5b505afa158015610636573d6000803e3d6000fd5b505050506040513d602081101561064c57600080fd5b50519050828110156106bf57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e7420746f6b656e0000000000000000000000000000604482015290519081900360640190fd5b80156106d0576106d0848383610cf7565b50505050565b60006106e482840184611523565b90506107147f00000000000000000000000000000000000000000000000000000000000000008260600151610ed3565b506060810151805160209091015182516000906107319089610f09565b90506000610743856020015189610f09565b9050610774837f00000000000000000000000000000000000000000000000000000000000000008760200151610f19565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663414bf3896040518061010001604052808773ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff168152602001896080015162ffffff1681526020013073ffffffffffffffffffffffffffffffffffffffff16815260200142815260200189602001518152602001868152602001600073ffffffffffffffffffffffffffffffffffffffff168152506040518263ffffffff1660e01b815260040161086e919061183f565b602060405180830381600087803b15801561088857600080fd5b505af115801561089c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c091906116ba565b90506108f1857f00000000000000000000000000000000000000000000000000000000000000008860000151610f19565b604080516101008101825273ffffffffffffffffffffffffffffffffffffffff8781168252868116602083015260a08981015162ffffff168385015230606084015242608084015289519083015260c08201859052600060e0830181905292517f414bf3890000000000000000000000000000000000000000000000000000000081527f00000000000000000000000000000000000000000000000000000000000000009091169163414bf389916109ac919060040161183f565b602060405180830381600087803b1580156109c657600080fd5b505af11580156109da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109fe91906116ba565b90508315610a1257610a12863033876110ee565b8215610a2457610a24853033866110ee565b83821115610a455760008483039050610a4387308a60400151846110ee565b505b82811115610a665760008382039050610a6486308a60400151846110ee565b505b5050505050505050505050565b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff84169083906040518082805190602001908083835b60208310610aea57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610aad565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114610b4c576040519150601f19603f3d011682016040523d82523d6000602084013e610b51565b606091505b505090508061054857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f5354450000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6000816020015173ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1610610c0357600080fd5b508051602080830151604093840151845173ffffffffffffffffffffffffffffffffffffffff94851681850152939091168385015262ffffff166060808401919091528351808403820181526080840185528051908301207fff0000000000000000000000000000000000000000000000000000000000000060a085015294901b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660a183015260b58201939093527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5460d5808301919091528251808303909101815260f5909101909152805191012090565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781529251825160009485949389169392918291908083835b60208310610dcc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d8f565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610e2e576040519150601f19603f3d011682016040523d82523d6000602084013e610e33565b606091505b5091509150818015610e61575080511580610e615750808060200190516020811015610e5e57600080fd5b50515b610ecc57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f5354000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b5050505050565b6000610edf8383610bc1565b90503373ffffffffffffffffffffffffffffffffffffffff821614610f0357600080fd5b92915050565b80820182811015610f0357600080fd5b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b3000000000000000000000000000000000000000000000000000000001781529251825160009485949389169392918291908083835b60208310610fee57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fb1565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611050576040519150601f19603f3d011682016040523d82523d6000602084013e611055565b606091505b5091509150818015611083575080511580611083575080806020019051602081101561108057600080fd5b50515b610ecc57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f5341000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156111495750804710155b15611292577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156111b657600080fd5b505af11580156111ca573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561126057600080fd5b505af1158015611274573d6000803e3d6000fd5b505050506040513d602081101561128a57600080fd5b506106d09050565b73ffffffffffffffffffffffffffffffffffffffff83163014156112c0576112bb848383610cf7565b6106d0565b6106d0848484846040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000178152925182516000948594938a169392918291908083835b602083106113a457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611367565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611406576040519150601f19603f3d011682016040523d82523d6000602084013e61140b565b606091505b5091509150818015611439575080511580611439575080806020019051602081101561143657600080fd5b50515b6114a457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f5354460000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b505050505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146114d057600080fd5b919050565b803562ffffff811681146114d057600080fd5b6000806000606084860312156114fc578283fd5b611505846114ac565b92506020840135915061151a604085016114ac565b90509250925092565b6000818303610100811215611536578182fd5b6040805160c0810167ffffffffffffffff828210818311171561155557fe5b81845286358352602087013560208401526115718488016114ac565b8484015260607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0860112156115a4578586fd5b8351945060608501915084821081831117156115bc57fe5b5082526115cb606086016114ac565b83526115d9608086016114ac565b60208401526115ea60a086016114d5565b8284015282606082015261160060c086016114d5565b608082015261161160e086016114d5565b60a082015295945050505050565b600060e08284031215611630578081fd5b60405160e0810181811067ffffffffffffffff8211171561164d57fe5b604052611659836114ac565b8152611667602084016114ac565b6020820152611678604084016114d5565b6040820152606083013560608201526080830135608082015261169d60a084016114d5565b60a08201526116ae60c084016114d5565b60c08201529392505050565b6000602082840312156116cb578081fd5b5051919050565b600080604083850312156116e4578182fd5b823591506116f4602084016114ac565b90509250929050565b60008060008060608587031215611712578081fd5b8435935060208501359250604085013567ffffffffffffffff80821115611737578283fd5b818701915087601f83011261174a578283fd5b813581811115611758578384fd5b886020828501011115611769578384fd5b95989497505060200194505050565b62ffffff169052565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b600073ffffffffffffffffffffffffffffffffffffffff8616825260208581840152846040840152608060608401528351806080850152825b818110156117f75785810183015185820160a0015282016117db565b81811115611808578360a083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160a0019695505050505050565b60006101008201905073ffffffffffffffffffffffffffffffffffffffff80845116835280602085015116602084015262ffffff60408501511660408401528060608501511660608401526080840151608084015260a084015160a084015260c084015160c08401528060e08501511660e08401525092915050565b6000610100820190508251825260208301516020830152604083015173ffffffffffffffffffffffffffffffffffffffff8082166040850152606085015191508082511660608501528060208301511660808501525062ffffff60408201511660a084015250608083015161193360c0840182611778565b5060a083015161194660e0840182611778565b509291505056fea164736f6c6343000706000a",
194
+ "linkReferences": {},
195
+ "deployedLinkReferences": {}
196
+ }