0 txs
0 calls
constructor
constructor(address _vault, address _WETH9, address _signer)
functions
eip712Domain
viewfunction eip712Domain() view returns (bytes1 fields, string name, string version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] extensions)
isNativePools
viewfunction isNativePools(address) view returns (bool)
owner
viewfunction owner() view returns (address)
paused
viewfunction paused() view returns (bool)
pendingOwner
viewfunction pendingOwner() view returns (address)
signers
viewfunction signers(address) view returns (bool)
vault
viewfunction vault() view returns (address)
WETH9
viewfunction WETH9() view returns (address)
whitelistRouter
viewfunction whitelistRouter(address) view returns (bool)
acceptOwnership
nonpayablefunction acceptOwnership()
multicall
payablefunction multicall(bytes[] data) payable returns (bytes[] results)
multicall
payablefunction multicall(uint256 deadline, bytes[] data) payable returns (bytes[])
pause
nonpayablefunction pause()
refundERC20
payablefunction refundERC20(address token, address recipient, uint256 amount) payable
refundETH
payablefunction refundETH(address recipient, uint256 amount) payable
renounceOwnership
nonpayablefunction renounceOwnership()
setNativePool
nonpayablefunction setNativePool(address pool, bool isActive)
setSigner
nonpayablefunction setSigner(address signer, bool isSigner)
setWhitelistRouter
nonpayablefunction setWhitelistRouter(address[] routers, bool[] values)
tradeRFQT
payablefunction tradeRFQT(tuple quote, uint256 actualSellerAmount, uint256 actualMinOutputAmount) payable
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
unpause
nonpayablefunction unpause()
unwrapWETH9
payablefunction unwrapWETH9(address recipient) payable
events
EIP712DomainChanged
event EIP712DomainChanged()
ExternalSwapExecuted
event ExternalSwapExecuted(address externalRouter, address sender, address tokenIn, address tokenOut, int256 amountIn, int256 amountOut, bytes16 quoteId)
NativePoolUpdated
event NativePoolUpdated(address indexed pool, bool isActive)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
OwnershipTransferStarted
event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner)
Paused
event Paused(address account)
RefundERC20
event RefundERC20(address token, address recipient, uint256 amount)
RefundETH
event RefundETH(address recipient, uint256 amount)
SignerUpdated
event SignerUpdated(address signer, bool isSigner)
Unpaused
event Unpaused(address account)
UnwrapWETH9
event UnwrapWETH9(address indexed recipient, uint256 amount)
WhitelistRouterSet
event WhitelistRouterSet(address indexed router, bool isWhitelisted)
WidgetFeeTransfer
event WidgetFeeTransfer(address widgetFeeRecipient, uint256 widgetFeeRate, uint256 widgetFeeAmount, address widgetFeeToken)
errors
ArraysLengthMismatch
error ArraysLengthMismatch()
ExternalCallFailed
error ExternalCallFailed(address target, bytes4 selector)
InsufficientWETH9
error InsufficientWETH9()
InvalidAmount
error InvalidAmount()
InvalidNativePool
error InvalidNativePool()
InvalidShortString
error InvalidShortString()
InvalidSignature
error InvalidSignature()
InvalidWidgetFeeRate
error InvalidWidgetFeeRate()
NotEnoughAmountOut
error NotEnoughAmountOut(uint256 amountOut, uint256 amountOutMinimum)
NotEnoughTokenReceived
error NotEnoughTokenReceived()
OnlyWETH9
error OnlyWETH9()
OrderExpired
error OrderExpired()
QuoteExpired
error QuoteExpired()
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
StringTooLong
error StringTooLong(string str)
UnexpectedMsgValue
error UnexpectedMsgValue()
ZeroAddress
error ZeroAddress()
ZeroAmount
error ZeroAmount()
creation bytecode
0x610180604052348015610010575f5ffd5b506040516145cf3803806145cf83398101604081905261002f91610393565b604080518082018252600d81526c2730ba34bb32902937baba32b960991b602080830191909152825180840190935260018352603160f81b9083015290610076825f6101a6565b610120526100858160016101a6565b61014052815160208084019190912060e052815190820120610100524660a05261011160e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a08201525f9060c00160405160208183030381529060405280519060200120905090565b60805250503060c052610123336101d8565b6003805460ff60a01b191690556001600160a01b0383161580159061015057506001600160a01b03821615155b61016d5760405163d92e233d60e01b815260040160405180910390fd5b600480546001600160a01b0319166001600160a01b038581169190911790915582166101605261019e8160016101f4565b50505061057d565b5f6020835110156101c1576101ba83610285565b90506101d2565b816101cc848261046b565b5060ff90505b92915050565b600380546001600160a01b03191690556101f1816102cb565b50565b6101fc61031c565b6001600160a01b0382166102235760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0382165f81815260066020908152604091829020805460ff19168515159081179091558251938452908301527ffcaa24b1276bfa7dbf77797c0a984b9df924acbeaabd48cd2f1b0eca379b78fa910160405180910390a15050565b5f5f829050601f815111156102b8578260405163305a27a960e01b81526004016102af9190610525565b60405180910390fd5b80516102c38261055a565b179392505050565b600280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6002546001600160a01b031633146103765760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102af565b565b80516001600160a01b038116811461038e575f5ffd5b919050565b5f5f5f606084860312156103a5575f5ffd5b6103ae84610378565b92506103bc60208501610378565b91506103ca60408501610378565b90509250925092565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806103fb57607f821691505b60208210810361041957634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561046657805f5260205f20601f840160051c810160208510156104445750805b601f840160051c820191505b81811015610463575f8155600101610450565b50505b505050565b81516001600160401b03811115610484576104846103d3565b6104988161049284546103e7565b8461041f565b6020601f8211600181146104ca575f83156104b35750848201515b5f19600385901b1c1916600184901b178455610463565b5f84815260208120601f198516915b828110156104f957878501518255602094850194600190920191016104d9565b508482101561051657868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b80516020808301519190811015610419575f1960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051613fcd6106025f395f8181610198015281816102ae01528181610c8f01528181610d7901528181611bd801528181611c5a0152611c8701525f610b9f01525f610b7501525f612b1f01525f612af701525f612a5201525f612a7c01525f612aa60152613fcd5ff3fe60806040526004361061017b575f3560e01c806379ba5097116100d1578063ac9650d81161007c578063e30c397811610057578063e30c397814610498578063f2fde38b146104c2578063fbfa77cf146104e1575f5ffd5b8063ac9650d814610444578063af70653914610457578063db2c656b1461046a575f5ffd5b806384b0196e116100ac57806384b0196e146103e05780638da5cb5b14610407578063a1b7544614610431575f5ffd5b806379ba509714610399578063832eb648146103ad5780638456cb59146103cc575f5ffd5b80634aa4a4fc116101315780635c975abb1161010c5780635c975abb14610328578063715018a614610357578063736c0d5b1461036b575f5ffd5b80634aa4a4fc1461029d5780634bd22766146102f55780635ae401dc14610308575f5ffd5b80633f4ba83a116101615780633f4ba83a1461025757806348c447121461026b578063499276531461027e575f5ffd5b806314eaf7f4146101f557806331cb610514610238575f5ffd5b366101f1573373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146101ef576040517f21aba8c200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b005b5f5ffd5b348015610200575f5ffd5b5061022361020f366004613247565b60056020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b348015610243575f5ffd5b506101ef61025236600461327a565b61050d565b348015610262575f5ffd5b506101ef6105ef565b6101ef6102793660046132b1565b610601565b348015610289575f5ffd5b506101ef61029836600461327a565b610719565b3480156102a8575f5ffd5b506102d07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161022f565b6101ef6103033660046132ef565b6107f7565b61031b61031636600461335a565b610878565b60405161022f91906133ee565b348015610333575f5ffd5b5060035474010000000000000000000000000000000000000000900460ff16610223565b348015610362575f5ffd5b506101ef6108fd565b348015610376575f5ffd5b50610223610385366004613247565b60066020525f908152604090205460ff1681565b3480156103a4575f5ffd5b506101ef61090e565b3480156103b8575f5ffd5b506101ef6103c736600461346f565b6109c3565b3480156103d7575f5ffd5b506101ef610b58565b3480156103eb575f5ffd5b506103f4610b68565b60405161022f97969594939291906134db565b348015610412575f5ffd5b5060025473ffffffffffffffffffffffffffffffffffffffff166102d0565b6101ef61043f366004613247565b610c0a565b61031b61045236600461359a565b610e57565b6101ef61046536600461379c565b610fb8565b348015610475575f5ffd5b50610223610484366004613247565b60076020525f908152604090205460ff1681565b3480156104a3575f5ffd5b5060035473ffffffffffffffffffffffffffffffffffffffff166102d0565b3480156104cd575f5ffd5b506101ef6104dc366004613247565b611474565b3480156104ec575f5ffd5b506004546102d09073ffffffffffffffffffffffffffffffffffffffff1681565b610515611524565b73ffffffffffffffffffffffffffffffffffffffff8216610562576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82165f8181526006602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168515159081179091558251938452908301527ffcaa24b1276bfa7dbf77797c0a984b9df924acbeaabd48cd2f1b0eca379b78fa910160405180910390a15050565b6105f7611524565b6105ff6115a5565b565b610609611524565b610611611622565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526106a79073ffffffffffffffffffffffffffffffffffffffff8516906370a0823190602401602060405180830381865afa15801561067d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106a1919061393a565b826116a6565b90506106b48383836116bf565b6040805173ffffffffffffffffffffffffffffffffffffffff8086168252841660208201529081018290527fdbdf8eb487847e4c0f22847f5dac07f2d3690f96f581a6ae4b102769917645a89060600160405180910390a16107146116e0565b505050565b610721611524565b73ffffffffffffffffffffffffffffffffffffffff821661076e576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82165f8181526005602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151590811790915591519182527ffaf49cc693ce3c0463a5ee92d3dd6d6b1ee310fe10c4ccd1e345431f9b62f1cd910160405180910390a25050565b6107ff611524565b610807611622565b61081147826116a6565b905061081d828261170a565b6040805173ffffffffffffffffffffffffffffffffffffffff84168152602081018390527f289360176646a5f99cb4b6300628426dca46b723f40db3c04449d6ed1745a0e7910160405180910390a16108746116e0565b5050565b6060834211156108e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c640000000000000000000000000060448201526064015b60405180910390fd5b6108f38383610e57565b90505b9392505050565b610905611524565b6105ff5f6117ea565b600354339073ffffffffffffffffffffffffffffffffffffffff1681146109b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f74207468652060448201527f6e6577206f776e6572000000000000000000000000000000000000000000000060648201526084016108e0565b6109c0816117ea565b50565b6109cb611524565b828114610a04576040517ffc23596000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b83811015610b5157828282818110610a2057610a20613951565b9050602002016020810190610a35919061397e565b60075f878785818110610a4a57610a4a613951565b9050602002016020810190610a5f9190613247565b73ffffffffffffffffffffffffffffffffffffffff16815260208101919091526040015f2080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055848482818110610ac357610ac3613951565b9050602002016020810190610ad89190613247565b73ffffffffffffffffffffffffffffffffffffffff167f79add9381c7fcbebf829640f96bb6b401fd1455920a01d072260989d8675b7ca848484818110610b2157610b21613951565b9050602002016020810190610b36919061397e565b604051901515815260200160405180910390a2600101610a06565b5050505050565b610b60611524565b6105ff61181b565b5f60608082808083610b9a7f00000000000000000000000000000000000000000000000000000000000000008361188a565b610bc57f0000000000000000000000000000000000000000000000000000000000000000600161188a565b604080515f808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b610c12611622565b73ffffffffffffffffffffffffffffffffffffffff8116610c5f576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015610ce9573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d0d919061393a565b90505f8111610d48576040517f409a171f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f2e1a7d4d0000000000000000000000000000000000000000000000000000000081526004810182905247907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632e1a7d4d906024015f604051808303815f87803b158015610dcf575f5ffd5b505af1158015610de1573d5f5f3e3d5ffd5b505050508047610df191906139c6565b9150610dfd838361170a565b8273ffffffffffffffffffffffffffffffffffffffff167f788ab6452512428d16fe809d92c0dd69b99bc3db368437d73455c5e371638dcf83604051610e4591815260200190565b60405180910390a250506109c06116e0565b60608167ffffffffffffffff811115610e7257610e726135d9565b604051908082528060200260200182016040528015610ea557816020015b6060815260200190600190039081610e905790505b5090505f5b82811015610fb1575f8030868685818110610ec757610ec7613951565b9050602002810190610ed991906139d9565b604051610ee7929190613a3a565b5f60405180830381855af49150503d805f8114610f1f576040519150601f19603f3d011682016040523d82523d5f602084013e610f24565b606091505b509150915081610f8957604481511015610f3c575f5ffd5b60048101905080806020019051810190610f569190613a49565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e09190613abe565b80848481518110610f9c57610f9c613951565b60209081029190910101525050600101610eaa565b5092915050565b610fc0611622565b610fc8611933565b6107d083610180015160200151111561100d576040517f965a1fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260e0015142111561104b576040517f8727a7f900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611054836119b8565b825173ffffffffffffffffffffffffffffffffffffffff165f9081526005602052604081205460ff16908161108957306110f9565b845f015173ffffffffffffffffffffffffffffffffffffffff166361d027b36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110d5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110f99190613ad0565b60a086015190915084156111e75760a08601515f9080871161112a57868860a0015161112591906139c6565b611139565b60a088015161113990886139c6565b61114590612710613aeb565b61114f9190613b02565b90506103e881106111e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f61637475616c20616d6f756e7420646576696174696f6e20657863656564732060448201527f313025000000000000000000000000000000000000000000000000000000000060648201526084016108e0565b859150505b83156111f6576101e086018490525b611211866101400151838860600151848a6101800151611b3c565b905082156112a25785516040517ff1fbd69400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063f1fbd694906112709084908a90600401613b3a565b5f604051808303815f87803b158015611287575f5ffd5b505af1158015611299573d5f5f3e3d5ffd5b50505050611469565b855173ffffffffffffffffffffffffffffffffffffffff165f9081526007602052604090205460ff1615611437575f6040518061016001604052805f81526020015f73ffffffffffffffffffffffffffffffffffffffff168152602001885f015173ffffffffffffffffffffffffffffffffffffffff1681526020015f73ffffffffffffffffffffffffffffffffffffffff168152602001886080015173ffffffffffffffffffffffffffffffffffffffff168152602001886060015173ffffffffffffffffffffffffffffffffffffffff1681526020018860c0015181526020018860a0015181526020018860e0015181526020013373ffffffffffffffffffffffffffffffffffffffff1681526020018861012001516fffffffffffffffffffffffffffffffff191681525090505f6113e982848a60400151308c6101c00151611ce6565b6101e0890151909150819080821015611299576040517fa20e999d000000000000000000000000000000000000000000000000000000008152600481019290925260248201526044016108e0565b6040517f17c6676300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050506107146116e0565b61147c611524565b6003805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff000000000000000000000000000000000000000090911681179091556114df60025473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b60025473ffffffffffffffffffffffffffffffffffffffff1633146105ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108e0565b6115ad612368565b600380547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c1561167b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ff7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0060016123f1565b5f8183106116b457816116b6565b825b90505b92915050565b61071473ffffffffffffffffffffffffffffffffffffffff841683836123f8565b6105ff7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005f6123f1565b604080515f8082526020820190925273ffffffffffffffffffffffffffffffffffffffff84169083906040516117409190613d47565b5f6040518083038185875af1925050503d805f811461177a576040519150601f19603f3d011682016040523d82523d5f602084013e61177f565b606091505b5050905080610714576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f535445000000000000000000000000000000000000000000000000000000000060448201526064016108e0565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001690556109c0816124cc565b611823611933565b600380547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586115f83390565b606060ff83146118a45761189d83612542565b90506116b9565b8180546118b090613d5d565b80601f01602080910402602001604051908101604052809291908181526020018280546118dc90613d5d565b80156119275780601f106118fe57610100808354040283529160200191611927565b820191905f5260205f20905b81548152906001019060200180831161190a57829003601f168201915b505050505090506116b9565b60035474010000000000000000000000000000000000000000900460ff16156105ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016108e0565b80516020808301516040808501516060860151608087015160a088015160c089015160e08a01516101008b01516101408c01516101608d01516101c08e015199515f9d611a0b9d909c9b91339101613dae565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815282825280516020918201206101808601518051908301517ffd31a2912d3475581e84c29fe1c526bf62e33b9de527004478bffeae06bb217a9386019390935292840181905273ffffffffffffffffffffffffffffffffffffffff9092166060840152608083015291505f90611ac39060a0016040516020818303038152906040528051906020012061257f565b90505f611ad582856101a001516125c6565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526006602052604090205490915060ff16611b36576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b5f5f34118015611b4a575085155b15611cb25773ffffffffffffffffffffffffffffffffffffffff841615611b9d576040517fbd28e88900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b348314611bd6576040517f2c5211c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0846040518263ffffffff1660e01b81526004015f604051808303818588803b158015611c3c575f5ffd5b505af1158015611c4e573d5f5f3e3d5ffd5b5050505050611c8082847f000000000000000000000000000000000000000000000000000000000000000060016125e8565b9050611cad7f000000000000000000000000000000000000000000000000000000000000000086836116bf565b611cdd565b611cbe8284865f6125e8565b90508515611cd157611cad8486836116bf565b611cdd843387846126ba565b95945050505050565b5f5f8511611d20576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b428661010001511015611d5f576040517fc56873ba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080518082019091525f8082526020820152611d7c86886126dc565b6020830152815273ffffffffffffffffffffffffffffffffffffffff84163014611dd557611dd5843083602001518a60a0015173ffffffffffffffffffffffffffffffffffffffff16612798909392919063ffffffff16565b611e0c876040015182602001518960a0015173ffffffffffffffffffffffffffffffffffffffff166127f69092919063ffffffff16565b60808701516040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f9173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015611e7a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e9e919061393a565b60808901516040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff89811660048301529293505f92909116906370a0823190602401602060405180830381865afa158015611f13573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f37919061393a565b90505f896040015173ffffffffffffffffffffffffffffffffffffffff1686604051611f639190613d47565b5f604051808303815f865af19150503d805f8114611f9c576040519150601f19603f3d011682016040523d82523d5f602084013e611fa1565b606091505b50509050808a6040015187611fb590613e9a565b909161202d576040517f8a67d2ef00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90921660048301527fffffffff000000000000000000000000000000000000000000000000000000001660248201526044016108e0565b50505060808901516040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff89811660048301525f9284929116906370a0823190602401602060405180830381865afa1580156120a3573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120c7919061393a565b6120d191906139c6565b60808b01516040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529192505f91859173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015612144573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612168919061393a565b61217291906139c6565b9050808210156122475760808b01516121a29073ffffffffffffffffffffffffffffffffffffffff168a836123f8565b60808b01516040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152859216906370a0823190602401602060405180830381865afa158015612212573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612236919061393a565b61224091906139c6565b955061224b565b8195505b8451861015612286576040517fe3a58cca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50507f679a8e79c31ffa245861a334d96f7e721a18c6768899314967d6f0819322eb8589604001518a61012001518b60a001518c608001518760200151896122cd90613f06565b8f6101400151604051612354979695949392919073ffffffffffffffffffffffffffffffffffffffff978816815295871660208701529386166040860152919094166060840152608083019390935260a08201929092527fffffffffffffffffffffffffffffffff000000000000000000000000000000009190911660c082015260e00190565b60405180910390a150505095945050505050565b60035474010000000000000000000000000000000000000000900460ff166105ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016108e0565b905090565b80825d5050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526107149084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526128ec565b6002805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b60605f61254e836129f9565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b5f6116b961258b612a39565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b5f5f5f6125d38585612b6f565b915091506125e081612bae565b509392505050565b5f5f5f8660200151116125fb575f612618565b61271086602001518661260e9190613aeb565b6126189190613b02565b905080156126ad57612639848461262f5733612631565b305b8851846126ba565b85516020808801516040805173ffffffffffffffffffffffffffffffffffffffff948516815292830191909152810183905290851660608201527f55be346d3a3628b5060716bacd516632c5a911ce5835123ea18a84ea0ff3ea939060800160405180910390a16126aa81866139c6565b94505b849150505b949350505050565b611b3673ffffffffffffffffffffffffffffffffffffffff8516848484612798565b60c081015160e08201515f91829180158015906126f857505f82115b801561270357505f86115b612739576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808610156127525761274c868383612d60565b91508590505b5f821161278b576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b90925090505b9250929050565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052611b369085907f23b872dd000000000000000000000000000000000000000000000000000000009060840161244a565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff83811660248301525f919085169063dd62ed3e90604401602060405180830381865afa158015612869573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061288d919061393a565b9050611b36847f095ea7b300000000000000000000000000000000000000000000000000000000856128bf8686613f3c565b60405173ffffffffffffffffffffffffffffffffffffffff9092166024830152604482015260640161244a565b5f61294d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612f2d9092919063ffffffff16565b905080515f148061296d57508080602001905181019061296d9190613f4f565b610714576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016108e0565b5f60ff8216601f8111156116b9576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f3073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016148015612a9e57507f000000000000000000000000000000000000000000000000000000000000000046145b15612ac857507f000000000000000000000000000000000000000000000000000000000000000090565b6123ec604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a08201525f9060c00160405160208183030381529060405280519060200120905090565b5f5f8251604103612ba3576020830151604084015160608501515f1a612b9787828585612f3b565b94509450505050612791565b505f90506002612791565b5f816004811115612bc157612bc1613f6a565b03612bc95750565b6001816004811115612bdd57612bdd613f6a565b03612c44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016108e0565b6002816004811115612c5857612c58613f6a565b03612cbf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016108e0565b6003816004811115612cd357612cd3613f6a565b036109c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f756500000000000000000000000000000000000000000000000000000000000060648201526084016108e0565b5f80807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff858709858702925082811083820303915050805f03612e37575f8411612e2c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f46756c6c4d6174683a206d756c4469763a2064656e6f6d696e61746f72206d7560448201527f73742062652067726561746572207468656e207a65726f00000000000000000060648201526084016108e0565b5082900490506108f6565b808411612ec6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f46756c6c4d6174683a206d756c4469763a20726573756c74206772656174657260448201527f207468616e20322a2a323536000000000000000000000000000000000000000060648201526084016108e0565b5f8486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091025f889003889004909101858311909403939093029303949094049190911702949350505050565b60606108f384845f85613023565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115612f7057505f9050600361301a565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612fc1573d5f5f3e3d5ffd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116613014575f6001925092505061301a565b91505f90505b94509492505050565b6060824710156130b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016108e0565b5f5f8673ffffffffffffffffffffffffffffffffffffffff1685876040516130dd9190613d47565b5f6040518083038185875af1925050503d805f8114613117576040519150601f19603f3d011682016040523d82523d5f602084013e61311c565b606091505b509150915061312d87838387613138565b979650505050505050565b606083156131cd5782515f036131c65773ffffffffffffffffffffffffffffffffffffffff85163b6131c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108e0565b50816126b2565b6126b283838151156131e25781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e09190613abe565b73ffffffffffffffffffffffffffffffffffffffff811681146109c0575f5ffd5b803561324281613216565b919050565b5f60208284031215613257575f5ffd5b81356108f681613216565b80151581146109c0575f5ffd5b803561324281613262565b5f5f6040838503121561328b575f5ffd5b823561329681613216565b915060208301356132a681613262565b809150509250929050565b5f5f5f606084860312156132c3575f5ffd5b83356132ce81613216565b925060208401356132de81613216565b929592945050506040919091013590565b5f5f60408385031215613300575f5ffd5b823561330b81613216565b946020939093013593505050565b5f5f83601f840112613329575f5ffd5b50813567ffffffffffffffff811115613340575f5ffd5b6020830191508360208260051b8501011115612791575f5ffd5b5f5f5f6040848603121561336c575f5ffd5b83359250602084013567ffffffffffffffff811115613389575f5ffd5b61339586828701613319565b9497909650939450505050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b82811015613463577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845261344e8583516133a2565b94506020938401939190910190600101613414565b50929695505050505050565b5f5f5f5f60408587031215613482575f5ffd5b843567ffffffffffffffff811115613498575f5ffd5b6134a487828801613319565b909550935050602085013567ffffffffffffffff8111156134c3575f5ffd5b6134cf87828801613319565b95989497509550505050565b7fff000000000000000000000000000000000000000000000000000000000000008816815260e060208201525f61351560e08301896133a2565b828103604084015261352781896133a2565b6060840188905273ffffffffffffffffffffffffffffffffffffffff8716608085015260a0840186905283810360c0850152845180825260208087019350909101905f5b8181101561358957835183526020938401939092019160010161356b565b50909b9a5050505050505050505050565b5f5f602083850312156135ab575f5ffd5b823567ffffffffffffffff8111156135c1575f5ffd5b6135cd85828601613319565b90969095509350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051610200810167ffffffffffffffff8111828210171561362a5761362a6135d9565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613677576136776135d9565b604052919050565b80357fffffffffffffffffffffffffffffffff0000000000000000000000000000000081168114613242575f5ffd5b5f67ffffffffffffffff8211156136c7576136c76135d9565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f82601f830112613702575f5ffd5b8135613715613710826136ae565b613630565b818152846020838601011115613729575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f60408284031215613755575f5ffd5b6040805190810167ffffffffffffffff81118282101715613778576137786135d9565b604052905080823561378981613216565b8152602092830135920191909152919050565b5f5f5f606084860312156137ae575f5ffd5b833567ffffffffffffffff8111156137c4575f5ffd5b840161022081870312156137d6575f5ffd5b6137de613606565b6137e782613237565b81526137f560208301613237565b602082015261380660408301613237565b604082015261381760608301613237565b606082015261382860808301613237565b608082015260a0828101359082015260c0808301359082015260e080830135908201526101008083013590820152613863610120830161367f565b610120820152613876610140830161326f565b61014082015261016082013567ffffffffffffffff811115613896575f5ffd5b6138a2888285016136f3565b610160830152506138b7876101808401613745565b6101808201526101c082013567ffffffffffffffff8111156138d7575f5ffd5b6138e3888285016136f3565b6101a0830152506101e082013567ffffffffffffffff811115613904575f5ffd5b613910888285016136f3565b6101c08301525061020091909101356101e082015295602085013595506040909401359392505050565b5f6020828403121561394a575f5ffd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f6020828403121561398e575f5ffd5b81356108f681613262565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b818103818111156116b9576116b9613999565b5f5f83357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613a0c575f5ffd5b83018035915067ffffffffffffffff821115613a26575f5ffd5b602001915036819003821315612791575f5ffd5b818382375f9101908152919050565b5f60208284031215613a59575f5ffd5b815167ffffffffffffffff811115613a6f575f5ffd5b8201601f81018413613a7f575f5ffd5b8051613a8d613710826136ae565b818152856020838501011115613aa1575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b602081525f6116b660208301846133a2565b5f60208284031215613ae0575f5ffd5b81516108f681613216565b80820281158282048414176116b9576116b9613999565b5f82613b35577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b82815260406020820152613b6760408201835173ffffffffffffffffffffffffffffffffffffffff169052565b5f6020830151613b8f606084018273ffffffffffffffffffffffffffffffffffffffff169052565b50604083015173ffffffffffffffffffffffffffffffffffffffff8116608084015250606083015173ffffffffffffffffffffffffffffffffffffffff811660a084015250608083015173ffffffffffffffffffffffffffffffffffffffff811660c08401525060a083015160e083015260c083015161010083015260e0830151610120830152610100830151610140830152610120830151613c576101608401827fffffffffffffffffffffffffffffffff00000000000000000000000000000000169052565b5061014083015115156101808301526101608301516102206101a0840152613c836102608401826133a2565b610180850151805173ffffffffffffffffffffffffffffffffffffffff166101c0860152602001516101e08501526101a08501518482037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc001610200860152909150613cef82826133a2565b9150506101c08401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc084830301610220850152613d2d82826133a2565b9150506101e0840151610240840152809150509392505050565b5f82518060208501845e5f920191825250919050565b600181811c90821680613d7157607f821691505b602082108103613da8577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b73ffffffffffffffffffffffffffffffffffffffff8e811682528d811660208301528c16604082015273ffffffffffffffffffffffffffffffffffffffff8b16606082015273ffffffffffffffffffffffffffffffffffffffff8a1660808201528860a08201528760c08201528660e082015285610100820152613e3761012082018615159052565b6101a06101408201525f613e4f6101a08301866133a2565b828103610160840152613e6281866133a2565b915050613e8861018083018473ffffffffffffffffffffffffffffffffffffffff169052565b9e9d5050505050505050505050505050565b805160208201517fffffffff00000000000000000000000000000000000000000000000000000000811691906004821015613eff577fffffffff00000000000000000000000000000000000000000000000000000000808360040360031b1b82161692505b5050919050565b5f7f80000000000000000000000000000000000000000000000000000000000000008203613f3657613f36613999565b505f0390565b808201808211156116b9576116b9613999565b5f60208284031215613f5f575f5ffd5b81516108f681613262565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffdfea2646970667358221220e21a117e8efbcbb38a9cdcf3a0527df34f23ef1187566485a5e54f4cac7260b964736f6c634300081c0033000000000000000000000000097534f09eb81cc5b69adf36df3d3fa11b7fe1b100000000000000000000000042000000000000000000000000000000000000060000000000000000000000009ef0886f0a4c80a10cb5aa9c2386a634aea79535