508 txs
3.9k calls
constructor
constructor() payable
functions
allowance
viewfunction allowance(address owner, address spender, uint256 id) view returns (uint256 amount)
balanceOf
viewfunction balanceOf(address owner, uint256 id) view returns (uint256 amount)
isOperator
viewfunction isOperator(address owner, address spender) view returns (bool status)
lockups
viewfunction lockups(bytes32 lockHash) view returns (uint256 unlockTime)
orders
viewfunction orders(bytes32 orderHash) view returns (bool partialFill, uint56 deadline, uint96 inDone, uint96 outDone)
pools
viewfunction pools(uint256 poolId) view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast, uint256 price0CumulativeLast, uint256 price1CumulativeLast, uint256 kLast, uint256 supply)
supportsInterface
purefunction supportsInterface(bytes4 interfaceId) pure returns (bool result)
addLiquidity
payablefunction addLiquidity(tuple poolKey, uint256 amount0Desired, uint256 amount1Desired, uint256 amount0Min, uint256 amount1Min, address to, uint256 deadline) payable returns (uint256 amount0, uint256 amount1, uint256 liquidity)
approve
nonpayablefunction approve(address spender, uint256 id, uint256 amount) returns (bool)
cancelOrder
nonpayablefunction cancelOrder(address tokenIn, uint256 idIn, uint96 amtIn, address tokenOut, uint256 idOut, uint96 amtOut, uint56 deadline, bool partialFill)
coin
nonpayablefunction coin(address creator, uint256 supply, string uri) returns (uint256 coinId)
deposit
payablefunction deposit(address token, uint256 id, uint256 amount) payable
fillOrder
payablefunction fillOrder(address maker, address tokenIn, uint256 idIn, uint96 amtIn, address tokenOut, uint256 idOut, uint96 amtOut, uint56 deadline, bool partialFill, uint96 fillPart) payable
lockup
payablefunction lockup(address token, address to, uint256 id, uint256 amount, uint256 unlockTime) payable returns (bytes32 lockHash)
makeOrder
payablefunction makeOrder(address tokenIn, uint256 idIn, uint96 amtIn, address tokenOut, uint256 idOut, uint96 amtOut, uint56 deadline, bool partialFill) payable returns (bytes32 orderHash)
recoverTransientBalance
nonpayablefunction recoverTransientBalance(address token, uint256 id, address to) returns (uint256 amount)
removeLiquidity
nonpayablefunction removeLiquidity(tuple poolKey, uint256 liquidity, uint256 amount0Min, uint256 amount1Min, address to, uint256 deadline) returns (uint256 amount0, uint256 amount1)
setFeeTo
payablefunction setFeeTo(address feeTo) payable
setFeeToSetter
payablefunction setFeeToSetter(address feeToSetter) payable
setOperator
nonpayablefunction setOperator(address operator, bool approved) returns (bool)
swap
nonpayablefunction swap(tuple poolKey, uint256 amount0Out, uint256 amount1Out, address to, bytes data)
swapExactIn
payablefunction swapExactIn(tuple poolKey, uint256 amountIn, uint256 amountOutMin, bool zeroForOne, address to, uint256 deadline) payable returns (uint256 amountOut)
swapExactOut
payablefunction swapExactOut(tuple poolKey, uint256 amountOut, uint256 amountInMax, bool zeroForOne, address to, uint256 deadline) payable returns (uint256 amountIn)
transfer
nonpayablefunction transfer(address to, uint256 id, uint256 amount) returns (bool)
transferFrom
nonpayablefunction transferFrom(address from, address to, uint256 id, uint256 amount) returns (bool)
unlock
nonpayablefunction unlock(address token, address to, uint256 id, uint256 amount, uint256 unlockTime)
events
Burn
event Burn(uint256 indexed poolId, address indexed sender, uint256 amount0, uint256 amount1, address indexed to)
Cancel
event Cancel(address indexed maker, bytes32 indexed orderHash)
Fill
event Fill(address indexed taker, bytes32 indexed orderHash)
Lock
event Lock(address indexed sender, address indexed to, bytes32 indexed lockHash)
Make
event Make(address indexed maker, bytes32 indexed orderHash)
Mint
event Mint(uint256 indexed poolId, address indexed sender, uint256 amount0, uint256 amount1)
Swap
event Swap(uint256 indexed poolId, address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to)
Sync
event Sync(uint256 indexed poolId, uint112 reserve0, uint112 reserve1)
URI
event URI(string uri, uint256 indexed coinId)
errors
BadSize
error BadSize()
Expired
error Expired()
InsufficientInputAmount
error InsufficientInputAmount()
InsufficientLiquidity
error InsufficientLiquidity()
InsufficientLiquidityMinted
error InsufficientLiquidityMinted()
InsufficientOutputAmount
error InsufficientOutputAmount()
InvalidFeeOrHook
error InvalidFeeOrHook()
InvalidMsgVal
error InvalidMsgVal()
InvalidPoolTokens
error InvalidPoolTokens()
K
error K()
Overflow
error Overflow()
Pending
error Pending()
Reentrancy
error Reentrancy()
Unauthorized
error Unauthorized()
creation bytecode
0x608080604052325f5561490c90816100158239f3fe6080806040526004361015610031575b50361561001a575f80fd5b335f525f6020525f60405260605f2034815c01905d005b5f905f3560e01c908162fdd58e146137225750806301ffc9a7146136a857806307b990001461346b578063095bcdb6146133b75780630efe6a8b146133545780632dd1a516146130e2578063346cfccc1461309a57806338c3f8db14612a765780633c5eec50146124ad578063426a84931461244b5780634f05d57b14611d7557806350ab148f14611cbf578063558a729714611c2b578063598af9e714611bd557806376615b8014611ab85780638c1e8f57146117515780639c3f1e90146116d1578063a2e74af614611691578063a647fc2a146115ad578063a7b4919714610e3f578063ac4afa3814610d9a578063b6363cf214610d30578063c42957a8146104cd578063f46901ed1461047f578063f565b772146102945763fe99049a0361000f57346102915760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102915761018d613778565b9061019661379b565b916044359060643567edcaa89a82293940603452816028523360145260346020205415610258575b826014526040601420805480831161024b5782900390558460285282601452604060142080549082820191821061023e575533845260209081529373ffffffffffffffffffffffffffffffffffffffff90811691167f1b3d7edb2e9c0b0e7c525b20aaaef0f5940d2ed71663c7d39266ecafac728859604085a460018152f35b6389560ca186526004601cfd5b63f4d678b886526004601cfd5b82845260548420805460018101610271575b50506101be565b8083116102845782900390555f8061026a565b63deda903086526004601cfd5b80fd5b5061029e3661397e565b92939168929eee149b4bd212685c610472573068929eee149b4bd212685d4284111561044a5773ffffffffffffffffffffffffffffffffffffffff831615801561044457825b340361041c579061036e911561040a575b6103428560405194859389602086019889919273ffffffffffffffffffffffffffffffffffffffff60809497969592978160a0860199168552166020840152604083015260608201520152565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282613a14565b51902090818452600260205260408420546103e257926020938282526002855260408220558173ffffffffffffffffffffffffffffffffffffffff6040519416337f7375ddc9249cdd8667d03af7de29e75689d227d975eb90b025554cde79d6bf288480a468929eee149b4bd212685d8152f35b6004847f6df20390000000000000000000000000000000000000000000000000000000008152fd5b6104178382303388613c99565b6102f5565b6004877f85cf0a35000000000000000000000000000000000000000000000000000000008152fd5b866102e4565b6004867f203d82d8000000000000000000000000000000000000000000000000000000008152fd5b63ab143c0686526004601cfd5b5060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610291576104b2613778565b815433036104c05760205580f35b6382b4290082526004601cfd5b507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36016101608112610d2c5760a013610291576101243573ffffffffffffffffffffffffffffffffffffffff81168103610d285768929eee149b4bd212685c610d1b573068929eee149b4bd212685d426101443510610cf35760a06040518160048237209061055e608435613d67565b9250949094610c1f575b83815280602052604081209384549560048601548015155f14610c1257506105b56dffffffffffffffffffffffffffff8860701c166dffffffffffffffffffffffffffff891684896145cf565b936004870154965b87610b225760c4359560a435985b6105e08a6105d7613abb565b60043590613e8d565b80610af4575b15610a94575b610601886105f8613ade565b60243590613e8d565b15610a76575b806109da575073ffffffffffffffffffffffffffffffffffffffff61062a613abb565b16156109aa575b610639613abb565b73ffffffffffffffffffffffffffffffffffffffff80610657613ade565b16911610801561094a575b1561092257612710608435118015906108f6575b156108ce57610719610688888b613c3a565b8070ffffffffffffffffffffffffffffffffff1060071b81811c68ffffffffffffffffff1060061b1781811c64ffffffffff1060051b1781811c62ffffff1060041b1760b56201000083831c019160011c1b0260121c8082040160011c8082040160011c8082040160011c8082040160011c8082040160011c8082040160011c8082040160011c8080920410900390565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1881018181116108a15780998115610879579161075d60609d92896107a895614570565b60048501555b61077d6dffffffffffffffffffffffffffff82168c613b2f565b6dffffffffffffffffffffffffffff607083901c81169216906107a0838c613b2f565b908987613ffd565b61084d575b50610804575b50604051908582528360208301527f5a3e96f397e68b20a43c25f664b628805b877334dadfcc925c6c1a3ad434045860403393a368929eee149b4bd212685d60405192835260208301526040820152f35b61084790604051610816602082613a14565b84815286868933877fffffffff000000000000000000000000000000000000000000000000000000005f35166142cd565b5f6107b3565b600361087082546dffffffffffffffffffffffffffff808260701c169116613c3a565b9101555f6107ad565b6004897fd226f9d4000000000000000000000000000000000000000000000000000000008152fd5b6024887f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b6004867f2e1740be000000000000000000000000000000000000000000000000000000008152fd5b507f3fffffffffffffffffffffff00000000000000000000000000000000000000006084351615610676565b6004867f0ab6dd12000000000000000000000000000000000000000000000000000000008152fd5b50610953613abb565b73ffffffffffffffffffffffffffffffffffffffff80610971613ade565b169116148061099f575b80610994575b8015610662575060243560043510610662565b506024351515610981565b50600435151561097b565b60043515610631576004867f0ab6dd12000000000000000000000000000000000000000000000000000000008152fd5b97610a156109f96dffffffffffffffffffffffffffff8d168b8d614434565b996dffffffffffffffffffffffffffff8d60701c16908a614434565b898110908a1802808a189914610a4e5760609a610a368a886107a8946147c8565b610a448a6004860154613b2f565b6004850155610763565b6004877fd226f9d4000000000000000000000000000000000000000000000000000000008152fd5b610a8f88610a82613ade565b6024359030903390613c99565b610607565b73ffffffffffffffffffffffffffffffffffffffff610ab1613abb565b16610ad65789341061041c57893411610aca575b6105ec565b610ac58a340333613c65565b3461041c57610ac58a610ae7613abb565b6004359030903390613c99565b34156105e6576004887f85cf0a35000000000000000000000000000000000000000000000000000000008152fd5b610b526dffffffffffffffffffffffffffff8a166dffffffffffffffffffffffffffff8b60701c1660a435614434565b60c4358111610b9757610104358110610b6f579560a435986105cb565b6004867f42301c23000000000000000000000000000000000000000000000000000000008152fd5b50610bc86dffffffffffffffffffffffffffff8a60701c166dffffffffffffffffffffffffffff8b1660c435614434565b9560a4358711610be55760e4358710610b6f5760c43596986105cb565b6024867f4e487b710000000000000000000000000000000000000000000000000000000081526001600452fd5b95936020541515946105bd565b6040517f6e5f77300000000000000000000000000000000000000000000000000000000081525f80357fffffffff000000000000000000000000000000000000000000000000000000001660048301526024820186905233604483015260806064830152608482015260208160a4818573ffffffffffffffffffffffffffffffffffffffff8b165af18015610ce857610cb9575b50610568565b610cda9060203d602011610ce1575b610cd28183613a14565b810190613aac565b505f610cb3565b503d610cc8565b6040513d84823e3d90fd5b6004827f203d82d8000000000000000000000000000000000000000000000000000000008152fd5b63ab143c0682526004601cfd5b5f80fd5b5080fd5b50346102915760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610291576020610d90610d6d613778565b610d7561379b565b9067edcaa89a822939406020526014525f526034600c205490565b6040519015158152f35b50346102915760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261029157604060e0916004358152806020522080549060018101549060028101546004600383015492015492604051946dffffffffffffffffffffffffffff811686526dffffffffffffffffffffffffffff8160701c166020870152861c60408601526060850152608084015260a083015260c0820152f35b5034610291577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36016101208112610d2c5760a0136102915760e43573ffffffffffffffffffffffffffffffffffffffff81168103610d28576101043567ffffffffffffffff81116115a957610eb9903690600401613950565b919068929eee149b4bd212685c61159c573068929eee149b4bd212685d60a435159182158093611591575b156115695760a060405181600482372093610f00608435613d67565b90939293611479575b8789528860205260408920968754906dffffffffffffffffffffffffffff821660a4351015611451576dffffffffffffffffffffffffffff8260701c1660c435101561145157611433575b60c435611415575b83611346575b610f9b610f6d613abb565b610f96610f8060a435926004359061479c565b6dffffffffffffffffffffffffffff8516613b2f565b613b22565b97610fd3610fa7613ade565b610f96610fba60c435926024359061479c565b6dffffffffffffffffffffffffffff8660701c16613b2f565b60a4356dffffffffffffffffffffffffffff841603808b111561133e578a03995b60c4356dffffffffffffffffffffffffffff8560701c16038083115f14611336578203975b8b1580159061132d575b15611305578161271081020461271014821517156112d857611052611048828e613c3a565b6127108402613b22565b9061271084029084820461271014851517156112aa57611086929161107a611080928d613c3a565b90613b22565b90613c3a565b6110b36dffffffffffffffffffffffffffff8660701c166dffffffffffffffffffffffffffff8716613c3a565b906305f5e1008202918083046305f5e100149015171561127d571061125557908392918c6dffffffffffffffffffffffffffff806110f79760701c16951693613ffd565b611167575b505073ffffffffffffffffffffffffffffffffffffffff9250604051938452602084015260a435604084015260c435606084015216917ff51245804459075de3f63c42324c8ba2021175781c7477a5d8f4f08fb5584a5660803393a48068929eee149b4bd212685d80f35b61117360a43587613c4d565b61117f60c43585613c4d565b67ffffffffffffffff841161122857604051916111c4601f86017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200184613a14565b8483528a36868a0111610291576020866112219773ffffffffffffffffffffffffffffffffffffffff9b8388013785010152338a7fffffffff000000000000000000000000000000000000000000000000000000005f35166141a9565b5f806110fc565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60048d7fa932492f000000000000000000000000000000000000000000000000000000008152fd5b60248f7f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b5060248f7f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b60248e7f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b60048e7f098fb561000000000000000000000000000000000000000000000000000000008152fd5b50881515611023565b508c97611019565b508b99610ff4565b73ffffffffffffffffffffffffffffffffffffffff86163b15611404576040517ffe2cbab700000000000000000000000000000000000000000000000000000000815289600482015233602482015260a435604482015260c435606482015260a060848201528a8082806113bf8c8a60a4840191613b92565b03818373ffffffffffffffffffffffffffffffffffffffff8d165af18015611408576113ed575b5050610f62565b6113f691613a14565b895f12611404575f8a6113e6565b8980fd5b50604051903d90823e3d90fd5b61142e611420613ade565b60c435908860243591613eca565b610f5c565b61144c61143e613abb565b60a435908860043591613eca565b610f54565b60048b7fbb55fd27000000000000000000000000000000000000000000000000000000008152fd5b6040517f6e5f77300000000000000000000000000000000000000000000000000000000081527fffffffff000000000000000000000000000000000000000000000000000000005f3516600482015288602482015233604482015260806064820152602081806114ed60848201888c613b92565b03818d73ffffffffffffffffffffffffffffffffffffffff88165af190811561155e578a9161152c575b5080611524575b50610f09565b93505f61151e565b90506020813d602011611556575b8161154760209383613a14565b81010312610d2857515f611517565b3d915061153a565b6040513d8c823e3d90fd5b6004857f42301c23000000000000000000000000000000000000000000000000000000008152fd5b5060c4351515610ee4565b63ab143c0684526004601cfd5b8280fd5b50346102915760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610291576115e5613778565b9060443560243573ffffffffffffffffffffffffffffffffffffffff82168203610d285768929eee149b4bd212685c611684579282916020943068929eee149b4bd212685d60405191338552838752816040526060852092835c9687948561167c575b50506040528261166a575b5050505068929eee149b4bd212685d604051908152f35b61167393613eca565b5f828180611653565b5d855f611648565b63ab143c0683526004601cfd5b5060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610291576116c4613778565b815433036104c057815580f35b50346102915760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102915760406080916004358152600360205220546040519060ff81161515825266ffffffffffffff8160081c1660208301526bffffffffffffffffffffffff8160401c16604083015260a01c6060820152f35b5034610291577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36016101408112610d2c5760a0136102915760a435906101043573ffffffffffffffffffffffffffffffffffffffff811691828203610d285768929eee149b4bd212685c611aab573068929eee149b4bd212685d426101243510611a835760a0604051816004823720926117ed608435613d67565b9692509690966119bf575b8184528360205260408420968754966dffffffffffffffffffffffffffff8089169860701c16988861182d8b809b88856145cf565b90600483019961184a8b5461184381858b614434565b9d89614434565b9a60c4358d106119975760e4358c1061199757916118a58c60409f938f611893906118b29761187b8f8f903361472e565b8d8154039055611889613abb565b8360043591613eca565b61189b613ade565b9060243591613eca565b8b82038d82038a87613ffd565b61196b575b50611907575b50508551908582528460208301527fd72b7803f66104fa4755cf48b28b9408682e97a0b000dd97c8ee3219aa8454ec873393a468929eee149b4bd212685d82519182526020820152f35b6119649161191488613b3c565b9061192761192189613b3c565b91613b3c565b908a5192611936602085613a14565b88845233877fffffffff000000000000000000000000000000000000000000000000000000005f35166142cd565b5f806118bd565b600361198e82546dffffffffffffffffffffffffffff808260701c169116613c3a565b9101555f6118b7565b60048b7f42301c23000000000000000000000000000000000000000000000000000000008152fd5b6040517f6e5f77300000000000000000000000000000000000000000000000000000000081525f80357fffffffff000000000000000000000000000000000000000000000000000000001660048301526024820184905233604483015260806064830152608482015260208160a4818873ffffffffffffffffffffffffffffffffffffffff8d165af18015611a7857611a59575b506117f8565b611a719060203d602011610ce157610cd28183613a14565b505f611a53565b6040513d87823e3d90fd5b807f203d82d80000000000000000000000000000000000000000000000000000000060049252fd5b63ab143c0690526004601cfd5b503461029157611ac73661397e565b949368929eee149b4bd212689391935c611bc8573068929eee149b4bd212685d6040805173ffffffffffffffffffffffffffffffffffffffff8084166020830190815290851692820192909252606081018590526080810186905260a08101889052611b368160c08101610342565b519020958686526002602052604086205415611ba0574210611b78578495611b6995526002602052856040812055613eca565b8068929eee149b4bd212685d80f35b6004857f6df20390000000000000000000000000000000000000000000000000000000008152fd5b6004867f82b42900000000000000000000000000000000000000000000000000000000008152fd5b63ab143c0685526004601cfd5b50346102915760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610291576020611c23611c12613778565b611c1a61379b565b60443591613bd0565b604051908152f35b50346102915760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261029157611c63613778565b90602435801515809103610d285760209267edcaa89a822939408452336014528252806034600c20558252600c5160601c337fceb576d9f15e4e200fdb5096d64d5dfd667e16def20c1eefd14256d8e3faa2678480a360018152f35b50346102915760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261029157611cf7613778565b906044359067ffffffffffffffff8211610291576020611d55847f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b611d3f3660048801613950565b6001805401948594856001558560243591614570565b611d6a60405192839288845288840191613b92565b0390a2604051908152f35b506101407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261029157611da9613778565b90611db261379b565b91606435906bffffffffffffffffffffffff82168203610d28576084359373ffffffffffffffffffffffffffffffffffffffff851691828603610d285760c435916bffffffffffffffffffffffff83168303610d285760e4359666ffffffffffffff88168803610d28576101043597881580158a03610d285761012435966bffffffffffffffffffffffff88168803610d285768929eee149b4bd212685c61243e573068929eee149b4bd212685d612410575b6123a8575b6040805173ffffffffffffffffffffffffffffffffffffffff808716602083019081528187169383019390935260443560608301526bffffffffffffffffffffffff808b16608084015290851660a083015260a43560c0830152871660e082015266ffffffffffffff90921661010083015289151561012083015290611ef4816101408101610342565b51902095868852600360205260408820549566ffffffffffffff8760081c16156123805766ffffffffffffff8760081c164211612358578915612351576bffffffffffffffffffffffff811661234b57611f518760a01c87613a55565b995b6bffffffffffffffffffffffff8b16151580612319575b156122f157156122ea576bffffffffffffffffffffffff166122c457611fa2906bffffffffffffffffffffffff8760401c1690613a55565b905b6bffffffffffffffffffffffff821695861561229c578989828a9b9c889460a01c90611fcf91613b68565b611feb876bffffffffffffffffffffffff604085901c16613b68565b60405193611ff8856139f8565b60ff841615158552602085019360081c66ffffffffffffff16845260408501916bffffffffffffffffffffffff16825260608501926bffffffffffffffffffffffff169d8e8452815260036020526040902093511515928454905160081b67ffffffffffffff0016915160401b73ffffffffffffffffffffffff000000000000000016925160a01b7fffffffffffffffffffffffff0000000000000000000000000000000000000000169360ff16907fffffffffffffffffffffffff0000000000000000000000000000000000000000161773ffffffffffffffffffffffffffffffffffffffff16171717905560a4356120f193614457565b73ffffffffffffffffffffffffffffffffffffffff821630810361218857505050826121316bffffffffffffffffffffffff9461213a936044359061472e565b604435336147c8565b1614612175575b337fb9bc607e0e2118f141379d1e3c8ffcb670231b2fad00c82a9b48456501bd40fd8380a38068929eee149b4bd212685d80f35b8082526003602052816040812055612141565b919291806121b057505050506121ab6bffffffffffffffffffffffff9233613c65565b61213a565b6044356121d3575050926121ab916bffffffffffffffffffffffff943391614835565b6040517ffe99049a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909316600484015233602484015260448035908401526bffffffffffffffffffffffff90911660648301529093506020915083908188816084810103925af1918215611a78576bffffffffffffffffffffffff9261226d575b5061213a565b61228e9060203d602011612295575b6122868183613a14565b810190613c81565b505f612267565b503d61227c565b6004897f6cd3dc25000000000000000000000000000000000000000000000000000000008152fd5b6122e46bffffffffffffffffffffffff918287169083808d169116614434565b16611fa2565b5090611fa4565b60048a7f35278d12000000000000000000000000000000000000000000000000000000008152fd5b506bffffffffffffffffffffffff87166bffffffffffffffffffffffff6123438d8b60a01c613b68565b161115611f6a565b80611f51565b8599611f53565b6004897f203d82d8000000000000000000000000000000000000000000000000000000008152fd5b6004897f82b42900000000000000000000000000000000000000000000000000000000008152fd5b6bffffffffffffffffffffffff86161580156123eb575b611e6a576004887f6cd3dc25000000000000000000000000000000000000000000000000000000008152fd5b506bffffffffffffffffffffffff85166bffffffffffffffffffffffff8716146123bf565b3415611e65576004897f85cf0a35000000000000000000000000000000000000000000000000000000008152fd5b63ab143c068a526004601cfd5b50346102915760209061245d36613888565b909167edcaa89a82293940603452336028526014528183528060548420558252825160601c337fb3fd5071835887567a0671151121894ddccc2842f1d10bedad13e0d17cace9a78585a460018152f35b506124b7366138dd565b90959391929468929eee149b4bd212685c611bc8573068929eee149b4bd212685d83914211612a4e578215612a265760a06040518183823720936124fe6080830135613d67565b93929490919491612948575b8789528860205260408920908154926dffffffffffffffffffffffffffff8085169460701c1694805f14612928576125508a61254860408601613b01565b853590613e8d565b806128fa575b1561282d575b156126fa5761256d9085858b6143e9565b9a8b15611997578b106126d257838b10156126aa579273ffffffffffffffffffffffffffffffffffffffff9694926125dd926125c18d60209f999760208b906125b860608401613b01565b92013591613eca565b8c8b6125d76125d08d86613b2f565b9286613b22565b92613ffd565b612637575b5050604051928352848784015284604084015285606084015216917ff51245804459075de3f63c42324c8ba2021175781c7477a5d8f4f08fb5584a5660803393a45b68929eee149b4bd212685d604051908152f35b61268e91801561269b5785905b156126955761265289613b3c565b604051916126608c84613a14565b89835233897fffffffff000000000000000000000000000000000000000000000000000000005f35166141a9565b5f806125e2565b85612652565b6126a489613b3c565b90612644565b60048a7fbb55fd27000000000000000000000000000000000000000000000000000000008152fd5b60048a7f42301c23000000000000000000000000000000000000000000000000000000008152fd5b84959697508361270d929394958a6143e9565b998a156126d2578a1061280557828a10156127dd57928a94926127719261275c8c8760209f612754604073ffffffffffffffffffffffffffffffffffffffff9d9b01613b01565b913591613eca565b6127668c83613b22565b8a6125d78b86613b2f565b6127bb575b50604051928584528784015285604084015284606084015216917ff51245804459075de3f63c42324c8ba2021175781c7477a5d8f4f08fb5584a5660803393a4612624565b6127d7906127c888613b3c565b87156126955761265289613b3c565b5f612776565b6004897fbb55fd27000000000000000000000000000000000000000000000000000000008152fd5b6004897f42301c23000000000000000000000000000000000000000000000000000000008152fd5b80156128d6576040830173ffffffffffffffffffffffffffffffffffffffff61285582613b01565b166128905750893403612868575b61255c565b60048c7f85cf0a35000000000000000000000000000000000000000000000000000000008152fd5b346128ae578a6128a261286392613b01565b85359030903390613c99565b60048d7f85cf0a35000000000000000000000000000000000000000000000000000000008152fd5b34612868576128638a6128eb60608601613b01565b60208601359030903390613c99565b34156125565760048d7f85cf0a35000000000000000000000000000000000000000000000000000000008152fd5b6129438a61293860608601613b01565b602086013590613e8d565b612556565b6040517f6e5f77300000000000000000000000000000000000000000000000000000000081525f80357fffffffff00000000000000000000000000000000000000000000000000000000166004830152602482018a905233604483015260806064830152608482015260208160a4818d73ffffffffffffffffffffffffffffffffffffffff8b165af190811561155e578a916129f4575b50806129ec575b5061250a565b91505f6129e6565b90506020813d602011612a1e575b81612a0f60209383613a14565b81010312610d2857515f6129df565b3d9150612a02565b6004857f098fb561000000000000000000000000000000000000000000000000000000008152fd5b6004857f203d82d8000000000000000000000000000000000000000000000000000000008152fd5b50612a80366138dd565b90959391929468929eee149b4bd212685c61308d573068929eee149b4bd212685d8391421161306557821561303d5760a0604051818382372093612ac76080830135613d67565b93929490919491612f50575b875f525f60205260405f20908154926dffffffffffffffffffffffffffff8085169460701c16945f14612d66578489101561145157612b149085858b613e32565b9a8b11612d3e5760408101612b2881613b01565b90612b368d84358094613e8d565b80612d10575b15612c1f575b50509273ffffffffffffffffffffffffffffffffffffffff969492612b8f92612b7a8a60209f999760208b906125b860608401613b01565b612b848d83613b2f565b8b6125d78c86613b22565b612be8575b5050604051928684528588850152856040850152606084015216917ff51245804459075de3f63c42324c8ba2021175781c7477a5d8f4f08fb5584a5660803393a468929eee149b4bd212685d604051908152f35b612c03918015612c105788905b15612c0a5761265286613b3c565b5f80612b94565b88612652565b612c1986613b3c565b90612bf5565b73ffffffffffffffffffffffffffffffffffffffff612c3d82613b01565b16612cc85750508a3410612ca0579273ffffffffffffffffffffffffffffffffffffffff969492612b8f92612b7a8a60209f99978f803411612c8e575b505b9497999f505050928194969850612b42565b612c9a90340333613c65565b8f612c7a565b60048a7f85cf0a35000000000000000000000000000000000000000000000000000000008152fd5b346128685792612b7a8a60209f9997948f612d0b9073ffffffffffffffffffffffffffffffffffffffff9d9b9996612d02612b8f9a613b01565b30903390613c99565b612c7c565b3415612b3c5760048d7f85cf0a35000000000000000000000000000000000000000000000000000000008152fd5b60048a7f098fb561000000000000000000000000000000000000000000000000000000008152fd5b909192809c9750881015612f2857612d80908c858a613e32565b998a11612f005760608101612d9481613b01565b612da48c60208501358093613e8d565b15612ea6575b505099612ddc9291612dc7888d8960209f60406127549101613b01565b612dd18883613b22565b896125d78d86613b2f565b612e3c575b5073ffffffffffffffffffffffffffffffffffffffff90604051928584528688850152604084015284606084015216917ff51245804459075de3f63c42324c8ba2021175781c7477a5d8f4f08fb5584a5660803393a4612624565b935073ffffffffffffffffffffffffffffffffffffffff90612ea0612e6084613b3c565b955f968860405191612e728c84613a14565b5f835233897fffffffff000000000000000000000000000000000000000000000000000000005f35166141a9565b90612de1565b9b919392909b34612ed85788612ddc95612ecb60209f8f9094612d02612dc796613b01565b939d505081939450612daa565b7f85cf0a35000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f098fb561000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fbb55fd27000000000000000000000000000000000000000000000000000000005f5260045ffd5b6040517f6e5f77300000000000000000000000000000000000000000000000000000000081525f80357fffffffff00000000000000000000000000000000000000000000000000000000166004830152602482018a90523360448301526080606483015260848201526020818060a4810103815f73ffffffffffffffffffffffffffffffffffffffff8b165af1908115613032575f91613000575b5080612ff8575b50612ad3565b91505f612ff2565b90506020813d60201161302a575b8161301b60209383613a14565b81010312610d2857515f612feb565b3d915061300e565b6040513d5f823e3d90fd5b7f42301c23000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f203d82d8000000000000000000000000000000000000000000000000000000005f5260045ffd5b63ab143c065f526004601cfd5b34610d285760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610d28576004355f526002602052602060405f2054604051908152f35b6130eb366137be565b9591929096949368929eee149b4bd212685c61308d573068929eee149b4bd212685d66ffffffffffffff881697428911156130655773ffffffffffffffffffffffffffffffffffffffff8716613341576bffffffffffffffffffffffff865b163403612ed85761320f94610342938993604051988997602089019b338d979593919998969492909961012089019a73ffffffffffffffffffffffffffffffffffffffff16895273ffffffffffffffffffffffffffffffffffffffff16602089015260408801526bffffffffffffffffffffffff16606087015273ffffffffffffffffffffffffffffffffffffffff16608086015260a08501526bffffffffffffffffffffffff1660c084015266ffffffffffffff1660e08301521515906101000152565b51902090815f52600360205266ffffffffffffff60405f205460081c166133195760209260405191613240836139f8565b15158252838201908152604082015f815260608301905f8252845f526003865273ffffffffffffffffffffffffffffffffffffffff60405f2094511515937fffffffffffffffffffffffff000000000000000000000000000000000000000060ff8173ffffffffffffffffffffffff000000000000000067ffffffffffffff008a54955160081b16965160401b16965160a01b1696169116171617171790556040519080337f1fa192562e5fbdce807069b18275dc0d672cacd78576602b47d21730975635a15f80a35f68929eee149b4bd212685d8152f35b7f6df20390000000000000000000000000000000000000000000000000000000005f5260045ffd5b6bffffffffffffffffffffffff5f61314a565b61335d36613888565b9173ffffffffffffffffffffffffffffffffffffffff81161580156133b157835b3403612ed8571561339f575b335f5260205260405260605f2090815c01905d005b6133ac8383303385613c99565b61338a565b5f61337e565b34610d28576133c536613888565b909167edcaa89a8229394060205233601452825f5260405f20805480841161345e57839003905580601452825f5260405f209182548181019081106134515773ffffffffffffffffffffffffffffffffffffffff9355335f5260205216337f1b3d7edb2e9c0b0e7c525b20aaaef0f5940d2ed71663c7d39266ecafac72885960405fa460015f5260205ff35b6389560ca15f526004601cfd5b63f4d678b85f526004601cfd5b34610d2857613479366137be565b96949368929eee149b4bd21268969392965c61308d576103428861355b933068929eee149b4bd212685d87996040519687958a602088019a8d338d979593919998969492909961012089019a73ffffffffffffffffffffffffffffffffffffffff16895273ffffffffffffffffffffffffffffffffffffffff16602089015260408801526bffffffffffffffffffffffff16606087015273ffffffffffffffffffffffffffffffffffffffff16608086015260a08501526bffffffffffffffffffffffff1660c084015266ffffffffffffff1660e08301521515906101000152565b51902093845f52600360205260405f209060405191613579836139f8565b549160ff83161515815266ffffffffffffff8360081c1690816020820152606060408201946bffffffffffffffffffffffff8160401c16865260a01c9101521561368057855f5260036020525f6040812055613646575b505073ffffffffffffffffffffffffffffffffffffffff1615613622575b50337fdb2b33dd6349739e1f3cd6dc90cf093af6a3dfb1838aced380528b0aefe6093c5f80a35f68929eee149b4bd212685d005b6bffffffffffffffffffffffff1680156135ee576136409033613c65565b816135ee565b73ffffffffffffffffffffffffffffffffffffffff929350906bffffffffffffffffffffffff61367892511690613a55565b9190846135d0565b7f82b42900000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610d285760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610d28576004357fffffffff0000000000000000000000000000000000000000000000000000000081168103610d285760209060e01c604051906301ffc9a7630f632fb3821491141715158152f35b34610d285760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610d285760209061375c613778565b67edcaa89a8229394083526014526024355f5260405f20548152f35b6004359073ffffffffffffffffffffffffffffffffffffffff82168203610d2857565b6024359073ffffffffffffffffffffffffffffffffffffffff82168203610d2857565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc610100910112610d285760043573ffffffffffffffffffffffffffffffffffffffff81168103610d285790602435906044356bffffffffffffffffffffffff81168103610d28579060643573ffffffffffffffffffffffffffffffffffffffff81168103610d2857906084359060a4356bffffffffffffffffffffffff81168103610d28579060c43566ffffffffffffff81168103610d28579060e4358015158103610d285790565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc6060910112610d285760043573ffffffffffffffffffffffffffffffffffffffff81168103610d2857906024359060443590565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc016101408112610d285760a013610d285760049060a4359060c4359060e4358015158103610d2857906101043573ffffffffffffffffffffffffffffffffffffffff81168103610d2857906101243590565b9181601f84011215610d285782359167ffffffffffffffff8311610d285760208381860195010111610d2857565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60a0910112610d285760043573ffffffffffffffffffffffffffffffffffffffff81168103610d28579060243573ffffffffffffffffffffffffffffffffffffffff81168103610d285790604435906064359060843590565b6080810190811067ffffffffffffffff82111761122857604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761122857604052565b906bffffffffffffffffffffffff809116911603906bffffffffffffffffffffffff8211613a7f57565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b90816020910312610d28575190565b60443573ffffffffffffffffffffffffffffffffffffffff81168103610d285790565b60643573ffffffffffffffffffffffffffffffffffffffff81168103610d285790565b3573ffffffffffffffffffffffffffffffffffffffff81168103610d285790565b91908203918211613a7f57565b91908201809211613a7f57565b7f80000000000000000000000000000000000000000000000000000000000000008114613a7f575f0390565b906bffffffffffffffffffffffff809116911601906bffffffffffffffffffffffff8211613a7f57565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe093818652868601375f8582860101520116010190565b613bef828267edcaa89a822939406020526014525f526034600c205490565b613c135767edcaa89a822939406034526028526014525f5260545f2054905f603452565b5050507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90565b81810292918115918404141715613a7f57565b81810392915f138015828513169184121617613a7f57565b5f80809338935af115613c7457565b63b12d13eb5f526004601cfd5b90816020910312610d2857518015158103610d285790565b93929173ffffffffffffffffffffffffffffffffffffffff8516308103613cc8575050613cc6935061472e565b565b909280613cda575050613cc693614835565b73ffffffffffffffffffffffffffffffffffffffff939550608492916020955f9286604051998a9889977ffe99049a000000000000000000000000000000000000000000000000000000008952166004880152166024860152604485015260648401525af1801561303257613d4c5750565b613d649060203d602011612295576122868183613a14565b50565b5f9081908190816127108211613d7b575093565b94935080925073ffffffffffffffffffffffffffffffffffffffff915016917f8000000000000000000000000000000000000000000000000000000000000000821615907f40000000000000000000000000000000000000000000000000000000000000008215931615801592613def5750565b613df557565b60019150565b8115613e05570490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b919082613e3e91613c3a565b916127108302928084046127101490151715613a7f57613e5d91613b22565b9161271003916127108311613a7f57613e7f92613e7991613c3a565b90613dfb565b60018101809111613a7f5790565b9092915f9360405192335f5260205260405260605f2090815c81811015613eb7575b505050604052565b909192945003905d6001915f8080613eaf565b92919073ffffffffffffffffffffffffffffffffffffffff8116308103613f0957505060405192335f5260205260405260605f2090815c01905d604052565b73ffffffffffffffffffffffffffffffffffffffff8516308103613f33575050613cc693506147c8565b91929180613f4857505050613cc69250613c65565b82613fa8575050506014526034526fa9059cbb0000000000000000000000005f5260205f6044601082855af1908160015f51141615613f8a575b50505f603452565b3b153d171015613f9b575f80613f82565b6390b8ec185f526004601cfd5b602094955060649293505f9060405196879586947f095bcdb60000000000000000000000000000000000000000000000000000000086526004860152602485015260448401525af1801561303257613d4c5750565b9392949190946dffffffffffffffffffffffffffff8211614181576dffffffffffffffffffffffffffff811161418157846dffffffffffffffffffffffffffff7bffffffffffffffffffffffffffff00000000000000000000000000009481946040977f1857d6b557d31cf8c2bf0cb9e6bf60aaeb9d8a0c5829169328ccf950adc4496f99549263ffffffff8460e01c81421603169182151580614176575b8061416b575b61410e575b5050509091164260e01b7fffffffff00000000000000000000000000000000000000000000000000000000168117607085901b7bffffffffffffffffffffffffffff00000000000000000000000000001617909255508451908152911660208201529050a2565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff918a61415792858561414283858760701b1661489c565b160260018b0190815401905560701b1661489c565b1602600285019081540190555f80806140a7565b5085821615156140a2565b50858116151561409c565b7f35278d12000000000000000000000000000000000000000000000000000000005f5260045ffd5b94919573ffffffffffffffffffffffffffffffffffffffff90949194169283156142c457833b15610d28575f957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60207fffffffff00000000000000000000000000000000000000000000000000000000968a966101049673ffffffffffffffffffffffffffffffffffffffff6040519e8f9d8e9c8d9a7f66732472000000000000000000000000000000000000000000000000000000008c521660048b015260248a0152166044880152606487015260848601528660a486015260e060c486015280519182918260e4880152018686015e85858286010152011681010301925af18015613032576142ba5750565b5f613cc691613a14565b50505050505050565b919673ffffffffffffffffffffffffffffffffffffffff169590949193909286156143df57863b15610d285760405197889687967f667324720000000000000000000000000000000000000000000000000000000088527fffffffff00000000000000000000000000000000000000000000000000000000166004880152602487015273ffffffffffffffffffffffffffffffffffffffff1660448601526064850152608484015260a483015260c4820160e09052805180918160e485015260200161010484015e808201610104015f9052601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01681010361010401815a5f948591f18015613032576142ba5750565b5050505050505050565b90919261271003906127108211613a7f5761440e9161440791613c3a565b9283613c3a565b906127108102908082046127101490151715613a7f5761443192613e7991613b2f565b90565b818102918115918304141782021561444a570490565b63ad251c275f526004601cfd5b916bffffffffffffffffffffffff811692614473848483613e8d565b6145645773ffffffffffffffffffffffffffffffffffffffff81163081036144ac57505050613cc6926144a783833361472e565b6147c8565b90919281155f146144cb5750505050803403612ed857613cc691613c65565b929492806144e1575050613cc693503390614835565b6040517ffe99049a00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff909416602485015260448401526bffffffffffffffffffffffff90941660648301525091602091508290815f816084810103925af1801561303257613d4c5750565b505050505034612ed857565b73ffffffffffffffffffffffffffffffffffffffff919267edcaa89a8229394060205281601452835f528060405f2055335f52602052165f7f1b3d7edb2e9c0b0e7c525b20aaaef0f5940d2ed71663c7d39266ecafac728859604082a4565b6020548015801596959192919061471757600382015494856145f4575b505050505050565b610688614617916dffffffffffffffffffffffffffff806146a995169116613c3a565b948070ffffffffffffffffffffffffffffffffff1060071b81811c68ffffffffffffffffff1060061b1781811c64ffffffffff1060051b1781811c62ffffff1060041b1760b56201000083831c019160011c1b0260121c8082040160011c8082040160011c8082040160011c8082040160011c8082040160011c8082040160011c8082040160011c8080920410900390565b908185116146b8575b806145ec565b600401936146cb85546110808484613b22565b90600581029080820460051490151715613a7f576146ec92613e7991613b2f565b809281614706575b50505081540190555f808080806146b2565b61470f926147c8565b5f81816146f4565b50915050600391500180546147295750565b5f9055565b909167edcaa89a8229394060205281601452825f5260405f209182549182811161345e575f938173ffffffffffffffffffffffffffffffffffffffff94039055338452602052167f1b3d7edb2e9c0b0e7c525b20aaaef0f5940d2ed71663c7d39266ecafac728859604083a4565b919060405192335f5260205260405260605f2091825c92836147bf575b50604052565b5f905d5f6147b9565b91909167edcaa89a8229394060205280601452825f5260405f209182548181019081106134515773ffffffffffffffffffffffffffffffffffffffff9355335f52602052165f7f1b3d7edb2e9c0b0e7c525b20aaaef0f5940d2ed71663c7d39266ecafac728859604082a4565b916040519360605260405260601b602c526f23b872dd000000000000000000000000600c5260205f6064601c82855af1908160015f5114161561487e575b50505f606052604052565b3b153d17101561488f575f80614873565b637939f4245f526004601cfd5b906dffffffffffffffffffffffffffff16908115613e05577bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16049056fea26469706673582212203a02eefa188897f33a88b1a8cf404692b991e831b14c2e1ef632faeca93210da64736f6c634300081e0033