0 txs
130 calls
constructor
No constructor.
functions
chain
viewfunction chain() view returns (string)
config
viewfunction config() view returns (address assetFactory, address ussi, address positionManager, address quoteToken, string chain, address swapRouter)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
getQuoteBalance
viewfunction getQuoteBalance() view returns (uint256 balance, uint256 pendingIn, uint256 pendingOut)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getSSIBalance
viewfunction getSSIBalance(uint256 assetID) view returns (uint256 balance, uint256 pendingIn, uint256 pendingOut)
getSSIPoolBalance
viewfunction getSSIPoolBalance(uint256 assetID) view returns (uint256 ssiAmount, uint256 quoteAmount)
getUSSIBalance
viewfunction getUSSIBalance() view returns (uint256 balance, uint256 pendingIn, uint256 pendingOut)
getUSSIPoolBalance
viewfunction getUSSIPoolBalance() view returns (uint256 ussiAmount, uint256 quoteAmount)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
owner
viewfunction owner() view returns (address)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
TRADER_ROLE
viewfunction TRADER_ROLE() view returns (bytes32)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
addOrRebalanceLiquidity
nonpayablefunction addOrRebalanceLiquidity(tuple addOrRebalanceLiquidityParams) returns (bool needToAdd, bool needToRemove, uint256 poolID, uint128 poolLiquidity, uint256 poolAmount0, uint256 poolAmount1)
arbitrageSSI
nonpayablefunction arbitrageSSI(tuple arbitrageParams) returns (uint256 outAmount, int256 earn)
arbitrageUSSI
nonpayablefunction arbitrageUSSI(tuple arbitrageParams) returns (uint256 outAmount, int256 earn)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
initialize
nonpayablefunction initialize(address owner, string chain_)
mintSSI
nonpayablefunction mintSSI(uint256 assetID, tuple orderInfo) returns (uint256 nonce, uint256 inAmount, uint256 outAmount)
mintUSSI
nonpayablefunction mintUSSI(tuple hedgeOrder, bytes hedgeOrderSign) returns (bytes32 orderHash, uint256 inAmount, uint256 outAmount)
rebalanceSSI
nonpayablefunction rebalanceSSI(tuple rebalanceSSIParams) returns (bool needToIssue, bool isMint, uint256 targetQuote, uint256 nonce, uint256 inAmount, uint256 outAmount)
rebalanceUSSI
nonpayablefunction rebalanceUSSI(tuple rebalanceUSSIParams) returns (bool needToIssueSSI, bool needToIssueUSSI, bool isMint, uint256 targetQuote, uint256 nonce, bytes32 orderHash, uint256 inAmount, uint256 outAmount)
redeemSSI
nonpayablefunction redeemSSI(uint256 assetID, tuple orderInfo) returns (uint256 nonce, uint256 inAmount, uint256 outAmount)
redeemUSSI
nonpayablefunction redeemUSSI(tuple hedgeOrder, bytes hedgeOrderSign) returns (bytes32 orderHash, uint256 inAmount, uint256 outAmount)
renounceOwnership
nonpayablefunction renounceOwnership()
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
updateConfig
nonpayablefunction updateConfig(tuple config_)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
withDraw
nonpayablefunction withDraw(address tokenAddress)
events
AddOrRebalanceLiquidity
event AddOrRebalanceLiquidity(bool needToAdd, bool needToRemove, uint256 poolID, uint128 poolLiquidity, uint256 poolAmount0, uint256 poolAmount1)
ArbitrageSSI
event ArbitrageSSI(uint256 outAmount, int256 earn)
ArbitrageUSSI
event ArbitrageUSSI(uint256 outAmount, int256 earn)
Initialized
event Initialized(uint64 version)
MintSSI
event MintSSI(uint256 nonce, uint256 inAmount, uint256 outAmount)
MintUSSI
event MintUSSI(bytes32 orderHash, uint256 inAmount, uint256 outAmount)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
RebalanceSSI
event RebalanceSSI(bool needToIssue, bool isMint, uint256 nonce, uint256 inAmount, uint256 outAmount)
RebalanceUSSI
event RebalanceUSSI(bool needToIssueSSI, bool needToIssueUSSI, bool isMint, uint256 nonce, bytes32 orderHash, uint256 inAmount, uint256 outAmount)
RedeemSSI
event RedeemSSI(uint256 nonce, uint256 inAmount, uint256 outAmount)
RedeemUSSI
event RedeemUSSI(bytes32 orderHash, uint256 inAmount, uint256 outAmount)
RemoveLiquidity
event RemoveLiquidity(uint256 tokenId)
RoleAdminChanged
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
SwapUniPool
event SwapUniPool(uint256 outAmount)
Upgraded
event Upgraded(address indexed implementation)
Withdraw
event Withdraw(address tokenAddress, uint256 balance)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
AddressEmptyCode
error AddressEmptyCode(address target)
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
FailedCall
error FailedCall()
InvalidInitialization
error InvalidInitialization()
NotInitializing
error NotInitializing()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
creation bytecode
0x60a0806040523460295730608052612e42908161002e823960805181818161187e01526119200152f35b5f80fdfe6080806040526004361015610012575f80fd5b5f3560e01c90816301ffc9a714611ff25750806307115d4e14611fb75780630a67d2c714611e1657806319ff24c014611da1578063248a9ca314611d625780632f2ff15d14611d1857806336568abe14611cd4578063469bf64614611c055780634aeae99814611ad75780634f1ef286146118d257806352d1902d1461186c5780635a530641146113fe5780635eee777a1461137857806361aec2f414611161578063715018a6146110fa57806379502c551461107157806380bf3e7d14610f265780638da5cb5b14610ef25780639065c82214610e5657806391d1485414610e01578063a217fddf14610de7578063ad1003c414610d30578063ad3cb1cc14610ce9578063bfa8619714610b33578063c763e5a114610a58578063d0dbd5f414610988578063d46aeab9146108b8578063d547741f14610869578063df6e2b2114610766578063f0a56fc81461072c578063f2fde38b14610701578063f399e22e146104155763fca4826914610187575f80fd5b346103fe5760203660031901126103fe576004356001600160401b0381116103fe578060040161010060031983360301126103fe576102cc91610100916101cc612a5f565b60405163a0d66f3960e01b8152600760048201526060602482015293849283926102be6101fb6064860161231d565b858103600319016044870152823581529160ff61021a60248601612586565b16602084015260e46102b661029c61028161026761024d61023e60448b018861286b565b8e60408b01528e8a01906126c7565b61025a60648b018861286b565b89820360608b01526126c7565b61027460848a01876128b0565b88820360808a01526128c5565b61028e60a4890186612501565b9088830360a08a0152612532565b6102a960c48801856128b0565b86820360c08801526128c5565b940190612501565b9160e0818503910152612532565b03817345c8a0191fa8f07422b278e9c056a36d673c1cbb5af4801561040a575f905f915f905f5f905f925f945f96610387575b61010098507f0adf7b4e283ce273398b0c651c034d910d9ab3146574a17c84c592fa0fe528a760e0604051931515998a85521515928360208601521515938460408201528660608201528760808201528860a08201528960c0820152a1604051978852602088015260408701526060860152608085015260a084015260c083015260e0820152f35b5050505050505050610100813d8211610402575b816103a961010093836120f0565b810103126103fe57806103be610100926128a3565b6103ca602083016128a3565b906103d7604084016128a3565b6060840151608085015160a086015160c087015160e09097015195969490939192916102ff565b5f80fd5b3d915061039b565b6040513d5f823e3d90fd5b346103fe5760403660031901126103fe5761042e612045565b6024356001600160401b0381116103fe57366023820112156103fe5761045e90369060248160040135910161212c565b905f516020612ded5f395f51905f525460ff8160401c1615916001600160401b038216801590816106f9575b60011490816106ef575b1590816106e6575b506106d75767ffffffffffffffff1982166001175f516020612ded5f395f51905f52556104f891836106ab575b506104d2612d03565b6104da612d03565b6104e3816129bb565b6104eb612d03565b6104f3612d03565b612b14565b5081516001600160401b038111610697576105135f54612195565b601f8111610635575b50602092601f82116001146105b85761054d929382915f926105ad575b50508160011b915f199060031b1c19161790565b5f555b61055657005b68ff0000000000000000195f516020612ded5f395f51905f5254165f516020612ded5f395f51905f52557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b015190508480610539565b601f198216935f80527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563915f5b86811061061d5750836001959610610605575b505050811b015f55610550565b01515f1960f88460031b161c191690558380806105f8565b919260206001819286850151815501940192016105e5565b5f80527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563601f830160051c8101916020841061068d575b601f0160051c01905b818110610682575061051c565b5f8155600101610675565b909150819061066c565b634e487b7160e01b5f52604160045260245ffd5b68ffffffffffffffffff191668010000000000000001175f516020612ded5f395f51905f5255846104c9565b63f92ee8a960e01b5f5260045ffd5b9050158561049c565b303b159150610494565b84915061048a565b346103fe5760203660031901126103fe5761072a61071d612045565b610725612a2c565b6129bb565b005b346103fe575f3660031901126103fe5760206040517ffacaf2747a7486cf5730e9265973fb54447d3ace6e7e4711f6360826b07319418152f35b346103fe5761079d606061077936612085565b90610782612a5f565b6040516324c4955160e01b8152938492839260048401612819565b03817345c8a0191fa8f07422b278e9c056a36d673c1cbb5af4801561040a575f905f925f91610832575b5061082e907fa277b61b4fda7882fe923e89a01ebf71031c6604e7640f88262db47ecc12f6a16040518061080e848888846040919493926060820195825260208201520152565b0390a1604051938493846040919493926060820195825260208201520152565b0390f35b905061082e925061085b915060603d606011610862575b61085381836120f0565b810190612302565b90926107c7565b503d610849565b346103fe5760403660031901126103fe5761072a60043561088861205b565b906108b36108ae825f525f516020612dcd5f395f51905f52602052600160405f20015490565b612ace565b612c67565b346103fe5760606108c836612290565b92916108d2612a5f565b6108f06040519485938493630dcff22160e31b85526004850161297d565b03817345c8a0191fa8f07422b278e9c056a36d673c1cbb5af4801561040a575f905f925f91610961575b5061082e907fb45016689f77564badd6fec1b486928f7cd97fe8091c49843a5e8430e0ddaaf16040518061080e848888846040919493926060820195825260208201520152565b905061082e9250610981915060603d6060116108625761085381836120f0565b909261091a565b346103fe57606061099836612290565b92916109a2612a5f565b6109c06040519485938493635844472160e01b85526004850161297d565b03817345c8a0191fa8f07422b278e9c056a36d673c1cbb5af4801561040a575f905f925f91610a31575b5061082e907fb90f2f3bf005bc57113ed02487d9f842099ccd5a17b3878b9d5d3736425effc76040518061080e848888846040919493926060820195825260208201520152565b905061082e9250610a51915060603d6060116108625761085381836120f0565b90926109ea565b346103fe575f3660031901126103fe576040515f5f54610a7781612195565b8084529060018116908115610b0f5750600114610ab3575b61082e83610a9f818503826120f0565b60405191829160208352602083019061226c565b5f8080527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563939250905b808210610af557509091508101602001610a9f610a8f565b919260018160209254838588010152019101909291610add565b60ff191660208086019190915291151560051b84019091019150610a9f9050610a8f565b346103fe57610be460c0610b46366120bd565b610b4e612a5f565b6040518093819263568b363b60e11b83526007600484015260606024840152610b796064840161231d565b600319848203016044850152813581526020820135602082015260ff610ba160408401612586565b166040820152610bd6610bcb610bba606085018561286b565b60a0606085015260a08401906126c7565b92608081019061286b565b9060808184039101526126c7565b03817345c8a0191fa8f07422b278e9c056a36d673c1cbb5af4801561040a575f905f915f5f905f925f94610c81575b60c096507fee8dc27eaa2a33240d172c6ca09f7880229777a426017807993dac3826e471df60a060405192151597888452151592836020820152856040820152866060820152876080820152a1604051958652602086015260408501526060840152608083015260a0820152f35b50505050505060c0813d60c011610ce1575b81610ca060c093836120f0565b810103126103fe5780610cb460c0926128a3565b610cc0602083016128a3565b60408301516060840151608085015160a09095015192949293909190610c13565b3d9150610c93565b346103fe575f3660031901126103fe5761082e604051610d0a6040826120f0565b60058152640352e302e360dc1b602082015260405191829160208352602083019061226c565b346103fe5760203660031901126103fe5760405163fd23a54360e01b8152600760048201526060602482018190528180610d6c6064820161231d565b600435604483015203817345c8a0191fa8f07422b278e9c056a36d673c1cbb5af4801561040a575f905f925f91610dc0575b5061082e90604051938493846040919493926060820195825260208201520152565b905061082e9250610de0915060603d6060116108625761085381836120f0565b9092610d9e565b346103fe575f3660031901126103fe5760206040515f8152f35b346103fe5760403660031901126103fe57610e1a61205b565b6004355f525f516020612dcd5f395f51905f5260205260405f209060018060a01b03165f52602052602060ff60405f2054166040519015158152f35b346103fe575f3660031901126103fe57604080516310451d5160e11b815260206004820152908180610e8a6024820161231d565b038173212a558e31964da939f472ea6bc42f5abcaa44725af490811561040a576040915f915f91610ec3575b5082519182526020820152f35b9050610ee59150823d8411610eeb575b610edd81836120f0565b8101906124eb565b83610eb6565b503d610ed3565b346103fe575f3660031901126103fe575f516020612d8d5f395f51905f52546040516001600160a01b039091168152602090f35b346103fe57610f3436612162565b610f3c612a5f565b60405190632bed246b60e21b825260406004830152610f5d6044830161231d565b82810360031901602484015281358152602082013560028110156103fe5760409282610f9086949360208695019061284a565b60a062ffffff610fe782610fd6610fbc610fac8b89018961286b565b60c08c89015260c08801906126c7565b610fc960608901896128b0565b87820360608901526128c5565b95608081013560808701520161287f565b169101520381730052187874340d944599ccfb4268c3093a4b5f575af490811561040a576040915f915f91611052575b507fc71807aa70a6f2e85c41c021366c5d328083f7fcc5510f5019f260415d1699d4838051848152836020820152a182519182526020820152f35b905061106b9150823d8411610eeb57610edd81836120f0565b83611017565b346103fe575f3660031901126103fe576001546002546003546004546040516001600160a01b0393841694841693928316926110f092166110bc826110b5816121cd565b03836120f0565b60018060a01b036006541693604051968796875260208701526040860152606085015260c0608085015260c084019061226c565b9060a08301520390f35b346103fe575f3660031901126103fe57611112612a2c565b5f516020612d8d5f395f51905f5280546001600160a01b031981169091555f906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b346103fe576101003660031901126103fe5761117b612a5f565b604051632c13b70960e21b8152610120600482015261119d610124820161231d565b600435602483015260243562ffffff81168091036103fe576044830152604435606483015260643560ff81168091036103fe5760848301526084358060020b8091036103fe5760a483015260a43560018060a01b0381168091036103fe5760c483015260c43562ffffff81168091036103fe5760e483015260e435908115158092036103fe5782809160c093610104830152038173212a558e31964da939f472ea6bc42f5abcaa44725af4801561040a575f5f915f5f5f915f936112fd575b60408051861515815287151560208201529081018290526001600160801b03831660608201526080810184905260a08101859052959650939461082e94907fd41ac30fcafe5ac287773590004f5d637ced900f234ea1b662d6f486f599e5029060c090a160405196879687929360a0946001600160801b03929897969360c08601991515865215156020860152604085015216606083015260808201520152565b50505050505060c0813d60c011611370575b8161131c60c093836120f0565b810103126103fe5761132d816128a3565b9061133a602082016128a3565b906040810151926060820151906001600160801b03821682036103fe57608083015160a09093015193948594919391929061125c565b3d915061130f565b346103fe575f3660031901126103fe57604051632314ffff60e11b81526007600482015260406024820152606081806113b36044820161231d565b03817345c8a0191fa8f07422b278e9c056a36d673c1cbb5af4801561040a575f905f925f91610dc0575061082e90604051938493846040919493926060820195825260208201520152565b346103fe5761140c36612162565b611414612a2c565b6001600160a01b036114258261288f565b1615158061184f575b80611832575b80611815575b156117d05760405160208082019081529091906001600160a01b0361145e83612071565b166040840152602082016001600160a01b0361147982612071565b166060850152604083016001600160a01b0361149482612071565b16608086015260608401916001600160a01b036114b084612071565b1660a087015260808501936114d96114c88688612501565b60c0808b01526101008a0191612532565b60a08701979061150a9082906001600160a01b036114f68c612071565b1660e083015203601f1981018352826120f0565b5190206040805160208082019081526001546001600160a01b0380821694840194909452600254841660608401526003548416608084015260045490931660a083015260c080830152919291906115878161156861010082016121cd565b6006546001600160a01b031660e083015203601f1981018352826120f0565b51902014611797576001600160a01b036115a08761288f565b6001600160a01b03199092169116176001556001600160a01b03906115c49061288f565b166001600160601b0360a01b60025416176002556115e860018060a01b039161288f565b166001600160601b0360a01b600354161760035561160c60018060a01b039161288f565b166001600160601b0360a01b60045416176004553590601e19813603018212156103fe57019081356001600160401b0381116103fe5780360360208401136103fe57611659600554612195565b601f8111611751575b505f601f82116001146116cc57819061169093945f926116be5750508160011b915f199060031b1c19161790565b6005555b6001600160a01b03906116a69061288f565b166001600160601b0360a01b60065416176006555f80f35b602092500101358480610539565b601f1982169360055f527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0915f5b868110611737575083600195961061171b575b505050811b01600555611694565b01602001355f19600384901b60f8161c1916905583808061170d565b9092602060018192828787010135815501940191016116fa565b60055f5260205f20601f830160051c8101916020841061178d575b601f0160051c01905b8181106117825750611662565b5f8155600101611775565b909150819061176c565b60405162461bcd60e51b8152602060048201526011602482015270636f6e666967206e6f74206368616e676560781b6044820152606490fd5b60405162461bcd60e51b815260206004820152601760248201527f636f6e66696720686173207a65726f20616464726573730000000000000000006044820152606490fd5b506001600160a01b0361182a6060830161288f565b16151561143a565b506001600160a01b036118476040830161288f565b161515611434565b506001600160a01b036118646020830161288f565b16151561142e565b346103fe575f3660031901126103fe577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031630036118c35760206040515f516020612dad5f395f51905f528152f35b63703e46dd60e11b5f5260045ffd5b60403660031901126103fe576118e6612045565b6024356001600160401b0381116103fe57366023820112156103fe5761191690369060248160040135910161212c565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016308114908115611ab5575b506118c357611958612a2c565b6040516352d1902d60e01b81526001600160a01b0383169290602081600481875afa5f9181611a81575b5061199a5783634c9c8ce360e01b5f5260045260245ffd5b805f516020612dad5f395f51905f52859203611a6f5750813b15611a5d575f516020612dad5f395f51905f5280546001600160a01b031916821790557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2815115611a45575f8083602061072a95519101845af43d15611a3d573d91611a2183612111565b92611a2f60405194856120f0565b83523d5f602085013e612d2e565b606091612d2e565b505034611a4e57005b63b398979f60e01b5f5260045ffd5b634c9c8ce360e01b5f5260045260245ffd5b632a87526960e21b5f5260045260245ffd5b9091506020813d602011611aad575b81611a9d602093836120f0565b810103126103fe57519085611982565b3d9150611a90565b5f516020612dad5f395f51905f52546001600160a01b0316141590508361194b565b346103fe57611ae5366120bd565b611aed612a5f565b604051906312084fcb60e31b825260406004830152611b0e6044830161231d565b82810360031901602484015281358152602082013560028110156103fe5760409282611b4186949360208695019061284a565b608062ffffff611b7b82611b6a611b5a8a88018861286b565b60a08b88015260a08701906126c7565b95606081013560608701520161287f565b169101520381730052187874340d944599ccfb4268c3093a4b5f575af490811561040a576040915f915f91611be6575b507f8a52c969441a6e7c913020da0dbfa17611485f98735d3ef78d1194801b1569e8838051848152836020820152a182519182526020820152f35b9050611bff9150823d8411610eeb57610edd81836120f0565b83611bab565b346103fe57611c3c6060611c1836612085565b90611c21612a5f565b60405163b50958ed60e01b8152938492839260048401612819565b03817345c8a0191fa8f07422b278e9c056a36d673c1cbb5af4801561040a575f905f925f91611cad575b5061082e907f2f5a2f7823e95fdfe770b2560c1d5fef692c051116208a319f7dfd8de3a742e36040518061080e848888846040919493926060820195825260208201520152565b905061082e9250611ccd915060603d6060116108625761085381836120f0565b9092611c66565b346103fe5760403660031901126103fe57611ced61205b565b336001600160a01b03821603611d095761072a90600435612c67565b63334bd91960e11b5f5260045ffd5b346103fe5760403660031901126103fe5761072a600435611d3761205b565b90611d5d6108ae825f525f516020612dcd5f395f51905f52602052600160405f20015490565b612bc3565b346103fe5760203660031901126103fe576020611d996004355f525f516020612dcd5f395f51905f52602052600160405f20015490565b604051908152f35b346103fe5760203660031901126103fe5760405163c74424b760e01b81526040600482015260408180611dd66044820161231d565b6004356024830152038173212a558e31964da939f472ea6bc42f5abcaa44725af490811561040a576040915f915f91610ec3575082519182526020820152f35b346103fe5760203660031901126103fe57611e2f612045565b611e37612a2c565b6040516370a0823160e01b81523060048201526001600160a01b03821691602082602481865afa91821561040a575f92611f83575b508115611f33575f516020612d8d5f395f51905f525460405163a9059cbb60e01b60208083019182526001600160a01b039093166024830152604480830186905282525f91611ebc6064826120f0565b519082875af11561040a575f513d611f2a5750823b155b611f1757604080516001600160a01b0392909216825260208201929092527f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243649250a1005b82635274afe760e01b5f5260045260245ffd5b60011415611ed3565b60405162461bcd60e51b815260206004820152602260248201527f4e6f20746f6b656e7320617661696c61626c6520666f72207769746864726177604482015261185b60f21b6064820152608490fd5b9091506020813d602011611faf575b81611f9f602093836120f0565b810103126103fe57519083611e6c565b3d9150611f92565b346103fe575f3660031901126103fe5760405163f61f448b60e01b81526007600482015260406024820152606081806113b36044820161231d565b346103fe5760203660031901126103fe576004359063ffffffff60e01b82168092036103fe57602091637965db0b60e01b8114908115612034575b5015158152f35b6301ffc9a760e01b1490508361202d565b600435906001600160a01b03821682036103fe57565b602435906001600160a01b03821682036103fe57565b35906001600160a01b03821682036103fe57565b9060406003198301126103fe5760043591602435906001600160401b0382116103fe5760609082900360031901126103fe5760040190565b60206003198201126103fe57600435906001600160401b0382116103fe5760a09082900360031901126103fe5760040190565b90601f801991011681019081106001600160401b0382111761069757604052565b6001600160401b03811161069757601f01601f191660200190565b92919261213882612111565b9161214660405193846120f0565b8294818452818301116103fe578281602093845f960137010152565b60206003198201126103fe57600435906001600160401b0382116103fe5760c09082900360031901126103fe5760040190565b90600182811c921680156121c3575b60208310146121af57565b634e487b7160e01b5f52602260045260245ffd5b91607f16916121a4565b6005545f92916121dc82612195565b808252916001811690811561225057506001146121f7575050565b60055f9081529293509091907f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db05b838310612236575060209250010190565b600181602092949394548385870101520191019190612225565b9050602093945060ff929192191683830152151560051b010190565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b60406003198201126103fe576004356001600160401b0381116103fe5761014081830360031901126103fe57600401916024356001600160401b0381116103fe57826023820112156103fe578060040135926001600160401b0384116103fe57602484830101116103fe576024019190565b908160609103126103fe578051916040602083015192015190565b6001546001600160a01b039081168252600254811660208301526003548116604083015260045416606082015260c060808201526005545f919061236081612195565b908160c08401526001811690815f146123ec5750600114612393575b506006546001600160a01b031660a0919091015290565b60055f908152919250907f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db05b8282106123d5575060e09150820101905f61237c565b6001816020925460e08588010152019101906123bf565b905060e092935060ff191682840152151560051b820101905f61237c565b80546001600160a01b039081168352600182015481166020840152600282015481166040840152600382015416606083015260c060808301526004810180545f93929161245682612195565b918260c08601526001811690815f146124c7575060011461248b575b5050600501546001600160a01b031660a0919091015290565b909193505f5260205f205f905b8282106124b05750820160e00192905060a05f612472565b6001816020925460e0858801015201910190612498565b905060a093955060e092915060ff191682850152151560051b83010192905f612472565b91908260409103126103fe576020825192015190565b9035601e19823603018112156103fe5701602081359101916001600160401b0382116103fe5781360383136103fe57565b908060209392818452848401375f828201840152601f01601f1916010190565b9035601e19823603018112156103fe5701602081359101916001600160401b0382116103fe578160051b360383136103fe57565b359060ff821682036103fe57565b90602083828152019160208260051b8501019381935f915b8483106125bc5750505050505090565b909192939495601f19828203018352863590609e19863603018212156103fe576020809187600194019060808061263e61262361260a6125fc8780612501565b60a0885260a0880191612532565b61261688880188612501565b908783038a890152612532565b6126306040870187612501565b908683036040880152612532565b9360ff61264d60608301612586565b166060850152013591015298019301930191949392906125ac565b90602083828152019260208260051b82010193835f925b84841061268f5750505050505090565b9091929394956020806126b7600193601f198682030188526126b18b88612501565b90612532565b980194019401929493919061267f565b80359161015e19823603018312156103fe5761280882612816940192606083526127b56127956127756127566127136127008980612501565b61016060608b01526101c08a0191612532565b6001600160a01b0361272760208b01612071565b166080890152604089013560a089015261274460608a018a612552565b898303605f190160c08b015290612594565b6127636080890189612552565b888303605f190160e08a015290612594565b61278260a0880188612552565b878303605f190161010089015290612668565b6127a260c0870187612552565b868303605f190161012088015290612668565b9360e08101356101408501526101008101356101608501526101208101356101808501526127ed61014060018060a01b039201612071565b166101a0840152602081013560208401526040810190612501565b916040818503910152612532565b90565b9161281692600781526080602082015261283760808201600161240a565b92604082015260608184039101526126c7565b9060028210156128575752565b634e487b7160e01b5f52602160045260245ffd5b9035605e19823603018112156103fe570190565b359062ffffff821682036103fe57565b356001600160a01b03811681036103fe5790565b519081151582036103fe57565b903561013e19823603018112156103fe570190565b906128e36128d38380612501565b6101408452610140840191612532565b9160208101359060038210156103fe576101209160208401526040810135604084015260018060a01b0361291960608301612071565b1660608401526080810135608084015260a081013560a084015260c081013560c084015260e081013560e084015260018060a01b0361295b6101008301612071565b166101008401526001600160a01b0390612976908301612071565b1691015290565b916129ad6128169492600785526080602086015261299f60808601600161240a565b9085820360408701526128c5565b926060818503910152612532565b6001600160a01b03168015612a19575f516020612d8d5f395f51905f5280546001600160a01b0319811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b631e4fbdf760e01b5f525f60045260245ffd5b5f516020612d8d5f395f51905f52546001600160a01b03163303612a4c57565b63118cdaa760e01b5f523360045260245ffd5b335f9081527ff606e684ad9d4695315d4c1d83180a79ca1e5fc34d503cff501b8f4b9410207c602052604090205460ff1615612a9757565b63e2517d3f60e01b5f52336004527ffacaf2747a7486cf5730e9265973fb54447d3ace6e7e4711f6360826b073194160245260445ffd5b5f8181525f516020612dcd5f395f51905f526020908152604080832033845290915290205460ff1615612afe5750565b63e2517d3f60e01b5f523360045260245260445ffd5b6001600160a01b0381165f9081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604090205460ff16612bbe576001600160a01b03165f8181527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d60205260408120805460ff191660011790553391907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8180a4600190565b505f90565b5f8181525f516020612dcd5f395f51905f52602090815260408083206001600160a01b038616845290915290205460ff16612c61575f8181525f516020612dcd5f395f51905f52602090815260408083206001600160a01b0395909516808452949091528120805460ff19166001179055339291907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9080a4600190565b50505f90565b5f8181525f516020612dcd5f395f51905f52602090815260408083206001600160a01b038616845290915290205460ff1615612c61575f8181525f516020612dcd5f395f51905f52602090815260408083206001600160a01b0395909516808452949091528120805460ff19169055339291907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9080a4600190565b60ff5f516020612ded5f395f51905f525460401c1615612d1f57565b631afcd79f60e31b5f5260045ffd5b90612d525750805115612d4357805190602001fd5b63d6bda27560e01b5f5260045ffd5b81511580612d83575b612d63575090565b639996b31560e01b5f9081526001600160a01b0391909116600452602490fd5b50803b15612d5b56fe9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a2646970667358221220293c796bd89091500646a6eeb020f267b86ab8e0f0376ce585ba955e44cd5b5c64736f6c634300081c0033