Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 247 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Swap Token To To... | 10328166 | 1644 days ago | IN | 0.0138 ETH | 0.02494465 | ||||
Swap Token To To... | 10298035 | 1649 days ago | IN | 0.0105 ETH | 0.01624104 | ||||
Swap Token To To... | 10290258 | 1650 days ago | IN | 0.2132 ETH | 0.01143682 | ||||
Swap Token To To... | 10290132 | 1650 days ago | IN | 8.7123 ETH | 0.01943319 | ||||
Swap Token To To... | 10281004 | 1652 days ago | IN | 0.0054 ETH | 0.02497824 | ||||
Swap Token To To... | 10278907 | 1652 days ago | IN | 5.2884 ETH | 0.01205555 | ||||
Swap Token To To... | 10277559 | 1652 days ago | IN | 0.0567 ETH | 0.08273913 | ||||
Swap Token To To... | 10277531 | 1652 days ago | IN | 0.0159 ETH | 0.03218691 | ||||
Swap Token To To... | 10277502 | 1652 days ago | IN | 0.00795 ETH | 0.05129775 | ||||
Swap Token To To... | 10277472 | 1652 days ago | IN | 0.0078 ETH | 0.06588705 | ||||
Swap Token To To... | 10277215 | 1652 days ago | IN | 0.0081 ETH | 0.05126155 | ||||
Swap Token To To... | 10276920 | 1652 days ago | IN | 0.00675 ETH | 0.04383405 | ||||
Swap Token To To... | 10276868 | 1652 days ago | IN | 0.00675 ETH | 0.04501741 | ||||
Swap Token To To... | 10276382 | 1652 days ago | IN | 0.0123 ETH | 0.02775012 | ||||
Swap Token To To... | 10276375 | 1652 days ago | IN | 0.00615 ETH | 0.0251938 | ||||
Swap Token To To... | 10276081 | 1652 days ago | IN | 0.018 ETH | 0.04238026 | ||||
Swap Token To To... | 10276071 | 1652 days ago | IN | 0.01845 ETH | 0.05721936 | ||||
Swap Token To To... | 10276000 | 1652 days ago | IN | 0.006 ETH | 0.04189232 | ||||
Swap Token To To... | 10275980 | 1652 days ago | IN | 0.018 ETH | 0.05244497 | ||||
Swap Token To To... | 10275905 | 1652 days ago | IN | 0.036 ETH | 0.06174731 | ||||
Swap Token To To... | 10275847 | 1652 days ago | IN | 0.0117 ETH | 0.02449839 | ||||
Swap Token To To... | 10269833 | 1653 days ago | IN | 0.0075 ETH | 0.05624074 | ||||
Swap Token To To... | 10264424 | 1654 days ago | IN | 0.003105 ETH | 0.01933047 | ||||
Swap Token To To... | 10259315 | 1655 days ago | IN | 0.002265 ETH | 0.00673192 | ||||
Swap Token To To... | 10254247 | 1656 days ago | IN | 21.903015 ETH | 0.04463362 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
10328166 | 1644 days ago | 0.42686525 ETH | ||||
10328166 | 1644 days ago | 0.41996525 ETH | ||||
10328166 | 1644 days ago | 0.0069 ETH | ||||
10328166 | 1644 days ago | 0.0138 ETH | ||||
10298035 | 1649 days ago | 0.4478626 ETH | ||||
10298035 | 1649 days ago | 0.4418626 ETH | ||||
10298035 | 1649 days ago | 0.006 ETH | ||||
10298035 | 1649 days ago | 0.0105 ETH | ||||
10290258 | 1650 days ago | 0.0132 ETH | ||||
10290258 | 1650 days ago | 0.19975 ETH | ||||
10290258 | 1650 days ago | 0.00025 ETH | ||||
10290132 | 1650 days ago | 0.0123 ETH | ||||
10290132 | 1650 days ago | 8.689125 ETH | ||||
10290132 | 1650 days ago | 0.010875 ETH | ||||
10281004 | 1652 days ago | 25.84013295 ETH | ||||
10281004 | 1652 days ago | 25.84013295 ETH | ||||
10281004 | 1652 days ago | 0.0054 ETH | ||||
10278907 | 1652 days ago | 0.0084 ETH | ||||
10278907 | 1652 days ago | 5.2734 ETH | ||||
10278907 | 1652 days ago | 0.0066 ETH | ||||
10277559 | 1652 days ago | 147.47173298 ETH | ||||
10277559 | 1652 days ago | 147.45328298 ETH | ||||
10277559 | 1652 days ago | 0.01845 ETH | ||||
10277559 | 1652 days ago | 0.0567 ETH | ||||
10277531 | 1652 days ago | 0.11051633 ETH |
Loading...
Loading
Contract Name:
SaverExchange
Compiler Version
v0.5.7+commit.6da8b019
Optimization Enabled:
Yes with 20000 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-04-20 */ pragma solidity ^0.5.0; interface ERC20 { function totalSupply() external view returns (uint256 supply); function balanceOf(address _owner) external view returns (uint256 balance); function transfer(address _to, uint256 _value) external returns (bool success); function transferFrom(address _from, address _to, uint256 _value) external returns (bool success); function approve(address _spender, uint256 _value) external returns (bool success); function allowance(address _owner, address _spender) external view returns (uint256 remaining); function decimals() external view returns (uint256 digits); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } interface ExchangeInterface { function swapEtherToToken(uint256 _ethAmount, address _tokenAddress, uint256 _maxAmount) external payable returns (uint256, uint256); function swapTokenToEther(address _tokenAddress, uint256 _amount, uint256 _maxAmount) external returns (uint256); function swapTokenToToken(address _src, address _dest, uint256 _amount) external payable returns (uint256); function getExpectedRate(address src, address dest, uint256 srcQty) external view returns (uint256 expectedRate); } contract TokenInterface { function allowance(address, address) public returns (uint256); function balanceOf(address) public returns (uint256); function approve(address, uint256) public; function transfer(address, uint256) public returns (bool); function transferFrom(address, address, uint256) public returns (bool); function deposit() public payable; function withdraw(uint256) public; } contract DSMath { function add(uint256 x, uint256 y) internal pure returns (uint256 z) { require((z = x + y) >= x); } function sub(uint256 x, uint256 y) internal pure returns (uint256 z) { require((z = x - y) <= x); } function mul(uint256 x, uint256 y) internal pure returns (uint256 z) { require(y == 0 || (z = x * y) / y == x); } function div(uint256 x, uint256 y) internal pure returns (uint256 z) { return x / y; } function min(uint256 x, uint256 y) internal pure returns (uint256 z) { return x <= y ? x : y; } function max(uint256 x, uint256 y) internal pure returns (uint256 z) { return x >= y ? x : y; } function imin(int256 x, int256 y) internal pure returns (int256 z) { return x <= y ? x : y; } function imax(int256 x, int256 y) internal pure returns (int256 z) { return x >= y ? x : y; } uint256 constant WAD = 10**18; uint256 constant RAY = 10**27; function wmul(uint256 x, uint256 y) internal pure returns (uint256 z) { z = add(mul(x, y), WAD / 2) / WAD; } function rmul(uint256 x, uint256 y) internal pure returns (uint256 z) { z = add(mul(x, y), RAY / 2) / RAY; } function wdiv(uint256 x, uint256 y) internal pure returns (uint256 z) { z = add(mul(x, WAD), y / 2) / y; } function rdiv(uint256 x, uint256 y) internal pure returns (uint256 z) { z = add(mul(x, RAY), y / 2) / y; } function rpow(uint256 x, uint256 n) internal pure returns (uint256 z) { z = n % 2 != 0 ? x : RAY; for (n /= 2; n != 0; n /= 2) { x = rmul(x, x); if (n % 2 != 0) { z = rmul(z, x); } } } } contract SaverExchangeConstantAddresses { address public constant KYBER_ETH_ADDRESS = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE; address public constant WETH_ADDRESS = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2; address payable public constant WALLET_ID = 0x322d58b9E75a6918f7e7849AEe0fF09369977e08; address public constant DISCOUNT_ADDRESS = 0x1b14E8D511c9A4395425314f849bD737BAF8208F; address public constant KYBER_WRAPPER = 0x8F337bD3b7F2b05d9A8dC8Ac518584e833424893; address public constant UNISWAP_WRAPPER = 0x1e30124FDE14533231216D95F7798cD0061e5cf8; address public constant OASIS_WRAPPER = 0x891f5A171f865031b0f3Eb9723bb8f68C901c9FE; address public constant ERC20_PROXY_0X = 0x95E6F48254609A6ee006F7D493c8e5fB97094ceF; } contract Discount { address public owner; mapping(address => CustomServiceFee) public serviceFees; uint256 constant MAX_SERVICE_FEE = 400; struct CustomServiceFee { bool active; uint256 amount; } constructor() public { owner = msg.sender; } function isCustomFeeSet(address _user) public view returns (bool) { return serviceFees[_user].active; } function getCustomServiceFee(address _user) public view returns (uint256) { return serviceFees[_user].amount; } function setServiceFee(address _user, uint256 _fee) public { require(msg.sender == owner, "Only owner"); require(_fee >= MAX_SERVICE_FEE || _fee == 0); serviceFees[_user] = CustomServiceFee({active: true, amount: _fee}); } function disableServiceFee(address _user) public { require(msg.sender == owner, "Only owner"); serviceFees[_user] = CustomServiceFee({active: false, amount: 0}); } } contract SaverExchange is DSMath, SaverExchangeConstantAddresses { uint256 public constant SERVICE_FEE = 800; event Swap( address src, address dest, uint256 amountSold, uint256 amountBought, address wrapper ); function swapTokenToToken( address _src, address _dest, uint256 _amount, uint256 _minPrice, uint256 _exchangeType, address _exchangeAddress, bytes memory _callData, uint256 _0xPrice ) public payable { address[3] memory orderAddresses = [_exchangeAddress, _src, _dest]; if (orderAddresses[1] == KYBER_ETH_ADDRESS) { require(msg.value >= _amount, "msg.value smaller than amount"); } else { require( ERC20(orderAddresses[1]).transferFrom(msg.sender, address(this), _amount), "Not able to withdraw wanted amount" ); } uint256 fee = takeFee(_amount, orderAddresses[1]); _amount = sub(_amount, fee); uint256[2] memory tokens; address wrapper; uint256 price; bool success; tokens[1] = _amount; if (_exchangeType == 4) { if (orderAddresses[1] != KYBER_ETH_ADDRESS) { ERC20(orderAddresses[1]).approve(address(ERC20_PROXY_0X), _amount); } (success, tokens[0], ) = takeOrder( orderAddresses, _callData, address(this).balance, _amount ); require(success && tokens[0] > 0, "0x transaction failed"); wrapper = address(_exchangeAddress); } if (tokens[0] == 0) { (wrapper, price) = getBestPrice( _amount, orderAddresses[1], orderAddresses[2], _exchangeType ); require(price > _minPrice || _0xPrice > _minPrice, "Slippage hit"); if (_0xPrice >= price) { if (orderAddresses[1] != KYBER_ETH_ADDRESS) { ERC20(orderAddresses[1]).approve(address(ERC20_PROXY_0X), _amount); } (success, tokens[0], tokens[1]) = takeOrder( orderAddresses, _callData, address(this).balance, _amount ); if (success && tokens[0] > 0) { wrapper = address(_exchangeAddress); emit Swap(orderAddresses[1], orderAddresses[2], _amount, tokens[0], wrapper); } } if (tokens[1] > 0) { if (tokens[1] != _amount) { (wrapper, price) = getBestPrice( tokens[1], orderAddresses[1], orderAddresses[2], _exchangeType ); } require(price > _minPrice, "Slippage hit onchain price"); if (orderAddresses[1] == KYBER_ETH_ADDRESS) { (tokens[0], ) = ExchangeInterface(wrapper).swapEtherToToken.value(tokens[1])( tokens[1], orderAddresses[2], uint256(-1) ); } else { ERC20(orderAddresses[1]).transfer(wrapper, tokens[1]); if (orderAddresses[2] == KYBER_ETH_ADDRESS) { tokens[0] = ExchangeInterface(wrapper).swapTokenToEther( orderAddresses[1], tokens[1], uint256(-1) ); } else { tokens[0] = ExchangeInterface(wrapper).swapTokenToToken( orderAddresses[1], orderAddresses[2], tokens[1] ); } } emit Swap(orderAddresses[1], orderAddresses[2], _amount, tokens[0], wrapper); } } if (address(this).balance > 0) { msg.sender.transfer(address(this).balance); } if (orderAddresses[2] != KYBER_ETH_ADDRESS) { if (ERC20(orderAddresses[2]).balanceOf(address(this)) > 0) { ERC20(orderAddresses[2]).transfer( msg.sender, ERC20(orderAddresses[2]).balanceOf(address(this)) ); } } if (orderAddresses[1] != KYBER_ETH_ADDRESS) { if (ERC20(orderAddresses[1]).balanceOf(address(this)) > 0) { ERC20(orderAddresses[1]).transfer( msg.sender, ERC20(orderAddresses[1]).balanceOf(address(this)) ); } } } function takeOrder( address[3] memory _addresses, bytes memory _data, uint256 _value, uint256 _amount ) private returns (bool, uint256, uint256) { bool success; (success, ) = _addresses[0].call.value(_value)(_data); uint256 tokensLeft = _amount; uint256 tokensReturned = 0; if (success) { if (_addresses[1] == KYBER_ETH_ADDRESS) { tokensLeft = address(this).balance; } else { tokensLeft = ERC20(_addresses[1]).balanceOf(address(this)); } if (_addresses[2] == KYBER_ETH_ADDRESS) { TokenInterface(WETH_ADDRESS).withdraw( TokenInterface(WETH_ADDRESS).balanceOf(address(this)) ); tokensReturned = address(this).balance; } else { tokensReturned = ERC20(_addresses[2]).balanceOf(address(this)); } } return (success, tokensReturned, tokensLeft); } function getBestPrice( uint256 _amount, address _srcToken, address _destToken, uint256 _exchangeType ) public returns (address, uint256) { uint256 expectedRateKyber; uint256 expectedRateUniswap; uint256 expectedRateOasis; if (_exchangeType == 1) { return (OASIS_WRAPPER, getExpectedRate(OASIS_WRAPPER, _srcToken, _destToken, _amount)); } if (_exchangeType == 2) { return (KYBER_WRAPPER, getExpectedRate(KYBER_WRAPPER, _srcToken, _destToken, _amount)); } if (_exchangeType == 3) { expectedRateUniswap = getExpectedRate(UNISWAP_WRAPPER, _srcToken, _destToken, _amount); expectedRateUniswap = expectedRateUniswap * (10**(18 - getDecimals(_destToken))); return (UNISWAP_WRAPPER, expectedRateUniswap); } expectedRateKyber = getExpectedRate(KYBER_WRAPPER, _srcToken, _destToken, _amount); expectedRateUniswap = getExpectedRate(UNISWAP_WRAPPER, _srcToken, _destToken, _amount); expectedRateUniswap = expectedRateUniswap * (10**(18 - getDecimals(_destToken))); expectedRateOasis = getExpectedRate(OASIS_WRAPPER, _srcToken, _destToken, _amount); expectedRateOasis = expectedRateOasis * (10**(18 - getDecimals(_destToken))); if ( (expectedRateKyber >= expectedRateUniswap) && (expectedRateKyber >= expectedRateOasis) ) { return (KYBER_WRAPPER, expectedRateKyber); } if ( (expectedRateOasis >= expectedRateKyber) && (expectedRateOasis >= expectedRateUniswap) ) { return (OASIS_WRAPPER, expectedRateOasis); } if ( (expectedRateUniswap >= expectedRateKyber) && (expectedRateUniswap >= expectedRateOasis) ) { return (UNISWAP_WRAPPER, expectedRateUniswap); } } function getExpectedRate( address _wrapper, address _srcToken, address _destToken, uint256 _amount ) public returns (uint256) { bool success; bytes memory result; (success, result) = _wrapper.call( abi.encodeWithSignature( "getExpectedRate(address,address,uint256)", _srcToken, _destToken, _amount ) ); if (success) { return sliceUint(result, 0); } else { return 0; } } function takeFee(uint256 _amount, address _token) internal returns (uint256 feeAmount) { uint256 fee = SERVICE_FEE; if (Discount(DISCOUNT_ADDRESS).isCustomFeeSet(msg.sender)) { fee = Discount(DISCOUNT_ADDRESS).getCustomServiceFee(msg.sender); } if (fee == 0) { feeAmount = 0; } else { feeAmount = _amount / SERVICE_FEE; if (_token == KYBER_ETH_ADDRESS) { WALLET_ID.transfer(feeAmount); } else { ERC20(_token).transfer(WALLET_ID, feeAmount); } } } function getDecimals(address _token) internal view returns (uint256) { if (_token == address(0xE0B7927c4aF23765Cb51314A0E0521A9645F0E2A)) { return 9; } if (_token == address(0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48)) { return 6; } if (_token == address(0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599)) { return 8; } return 18; } function sliceUint(bytes memory bs, uint256 start) internal pure returns (uint256) { require(bs.length >= start + 32, "slicing out of range"); uint256 x; assembly { x := mload(add(bs, add(0x20, start))) } return x; } function() external payable {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":true,"inputs":[],"name":"WETH_ADDRESS","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"KYBER_ETH_ADDRESS","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_amount","type":"uint256"},{"name":"_srcToken","type":"address"},{"name":"_destToken","type":"address"},{"name":"_exchangeType","type":"uint256"}],"name":"getBestPrice","outputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"SERVICE_FEE","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_wrapper","type":"address"},{"name":"_srcToken","type":"address"},{"name":"_destToken","type":"address"},{"name":"_amount","type":"uint256"}],"name":"getExpectedRate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_src","type":"address"},{"name":"_dest","type":"address"},{"name":"_amount","type":"uint256"},{"name":"_minPrice","type":"uint256"},{"name":"_exchangeType","type":"uint256"},{"name":"_exchangeAddress","type":"address"},{"name":"_callData","type":"bytes"},{"name":"_0xPrice","type":"uint256"}],"name":"swapTokenToToken","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"DISCOUNT_ADDRESS","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"KYBER_WRAPPER","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"OASIS_WRAPPER","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ERC20_PROXY_0X","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"WALLET_ID","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"UNISWAP_WRAPPER","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"src","type":"address"},{"indexed":false,"name":"dest","type":"address"},{"indexed":false,"name":"amountSold","type":"uint256"},{"indexed":false,"name":"amountBought","type":"uint256"},{"indexed":false,"name":"wrapper","type":"address"}],"name":"Swap","type":"event"}]
Contract Creation Code
608060405234801561001057600080fd5b50611fa6806100206000396000f3fe6080604052600436106100c75760003560e01c8063a46a66c911610074578063d0cc72891161004e578063d0cc728914610347578063d3661fa51461035c578063ddaa293c14610371576100c7565b8063a46a66c914610308578063b175afa11461031d578063c917c2d314610332576100c7565b806350c86de5116100a557806350c86de5146101a25780637474ff5e146101c9578063874072611461021f576100c7565b8063040141e5146100c957806329f7fc9e146101075780632ec1f0091461011c575b005b3480156100d557600080fd5b506100de610386565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561011357600080fd5b506100de61039e565b34801561012857600080fd5b506101726004803603608081101561013f57600080fd5b5080359073ffffffffffffffffffffffffffffffffffffffff6020820135811691604081013590911690606001356103b6565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260208301919091528051918290030190f35b3480156101ae57600080fd5b506101b76105de565b60408051918252519081900360200190f35b3480156101d557600080fd5b506101b7600480360360808110156101ec57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201351690606001356105e4565b6100c7600480360361010081101561023657600080fd5b73ffffffffffffffffffffffffffffffffffffffff8235811692602081013582169260408201359260608301359260808101359260a08201359092169181019060e0810160c082013564010000000081111561029157600080fd5b8201836020820111156102a357600080fd5b803590602001918460018302840111640100000000831117156102c557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550509135925061075a915050565b34801561031457600080fd5b506100de611716565b34801561032957600080fd5b506100de61172e565b34801561033e57600080fd5b506100de611746565b34801561035357600080fd5b506100de61175e565b34801561036857600080fd5b506100de611776565b34801561037d57600080fd5b506100de61178e565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b600080600080600085600114156104085773891f5a171f865031b0f3eb9723bb8f68c901c9fe6103fc73891f5a171f865031b0f3eb9723bb8f68c901c9fe8a8a8d6105e4565b945094505050506105d5565b856002141561044657738f337bd3b7f2b05d9a8dc8ac518584e8334248936103fc738f337bd3b7f2b05d9a8dc8ac518584e8334248938a8a8d6105e4565b85600314156104a55761046f731e30124fde14533231216d95f7798cd0061e5cf889898c6105e4565b915061047a876117a6565b731e30124fde14533231216d95f7798cd0061e5cf89550601203600a0a9190910292506105d5915050565b6104c5738f337bd3b7f2b05d9a8dc8ac518584e83342489389898c6105e4565b92506104e7731e30124fde14533231216d95f7798cd0061e5cf889898c6105e4565b91506104f2876117a6565b601203600a0a8202915061051c73891f5a171f865031b0f3eb9723bb8f68c901c9fe89898c6105e4565b9050610527876117a6565b601203600a0a0281831080159061053e5750808310155b1561056557738f337bd3b7f2b05d9a8dc8ac518584e83342489383945094505050506105d5565b8281101580156105755750818110155b1561059b5773891f5a171f865031b0f3eb9723bb8f68c901c9fe945092506105d5915050565b8282101580156105ab5750808210155b156105d15750731e30124fde14533231216d95f7798cd0061e5cf8935091506105d59050565b5050505b94509492505050565b61032081565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f809a9e55000000000000000000000000000000000000000000000000000000001781529251825160009485946060948b16939092909182918083835b602083106106c457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610687565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610726576040519150601f19603f3d011682016040523d82523d6000602084013e61072b565b606091505b509092509050811561074b5761074281600061185f565b92505050610752565b6000925050505b949350505050565b610762611f1c565b506040805160608101825273ffffffffffffffffffffffffffffffffffffffff85811682528a811660208301819052908a16928201929092529073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141561082b578634101561082657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f6d73672e76616c756520736d616c6c6572207468616e20616d6f756e74000000604482015290519081900360640190fd5b610929565b602080820151604080517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018b9052905173ffffffffffffffffffffffffffffffffffffffff909216926323b872dd926064808401938290030181600087803b1580156108a857600080fd5b505af11580156108bc573d6000803e3d6000fd5b505050506040513d60208110156108d257600080fd5b5051610929576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180611f596022913960400191505060405180910390fd5b600061093c8883600160200201516118e3565b90506109488882611b69565b9750610952611f3a565b602081018990526000808060048a1415610af857602086015173ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14610a6a57856001602002015173ffffffffffffffffffffffffffffffffffffffff1663095ea7b37395e6f48254609a6ee006f7d493c8e5fb97094cef8e6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610a3d57600080fd5b505af1158015610a51573d6000803e3d6000fd5b505050506040513d6020811015610a6757600080fd5b50505b610a77868930318f611b79565b5085529050808015610a895750835115155b610af457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f3078207472616e73616374696f6e206661696c65640000000000000000000000604482015290519081900360640190fd5b8892505b83516112c857610b168c8760015b602002015160408901518d6103b6565b90935091508a821180610b2857508a87115b610b9357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f536c697070616765206869740000000000000000000000000000000000000000604482015290519081900360640190fd5b818710610dba57602086015173ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14610c9e57856001602002015173ffffffffffffffffffffffffffffffffffffffff1663095ea7b37395e6f48254609a6ee006f7d493c8e5fb97094cef8e6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610c7157600080fd5b505af1158015610c85573d6000803e3d6000fd5b505050506040513d6020811015610c9b57600080fd5b50505b610cab868930318f611b79565b602087015285529050808015610cc15750835115155b15610dba578892507fb39c9bc43f811e1a7ce159c5f147458fdb80266bf23c17322013316e27e086d0866001602002015187600260200201518e876000602002015187604051808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019550505050505060405180910390a15b6020840151156112c85760208401518c14610de6576020840151610de090876001610b06565b90935091505b8a8211610e5457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f536c69707061676520686974206f6e636861696e207072696365000000000000604482015290519081900360640190fd5b602086015173ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415610f6857602084015160408088015181517f43ac1dc60000000000000000000000000000000000000000000000000000000081526004810184905273ffffffffffffffffffffffffffffffffffffffff91821660248201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60448201528251918716936343ac1dc693909260648084019382900301818588803b158015610f2d57600080fd5b505af1158015610f41573d6000803e3d6000fd5b50505050506040513d6040811015610f5857600080fd5b50518460005b60200201526111d7565b60208087015185820151604080517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff888116600483015260248201939093529051919092169263a9059cbb92604480820193918290030181600087803b158015610fe857600080fd5b505af1158015610ffc573d6000803e3d6000fd5b505050506040513d602081101561101257600080fd5b5050604086015173ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14156111215760208087015185820151604080517f3bba21dc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff938416600482015260248101929092527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60448301525191861692633bba21dc926064808401938290030181600087803b1580156110ed57600080fd5b505af1158015611101573d6000803e3d6000fd5b505050506040513d602081101561111757600080fd5b5051846000610f5e565b6020808701516040808901518784015182517f13712c9f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9485166004820152918416602483015260448201529051918616926313712c9f926064808401938290030181600087803b1580156111a857600080fd5b505af11580156111bc573d6000803e3d6000fd5b505050506040513d60208110156111d257600080fd5b505184525b7fb39c9bc43f811e1a7ce159c5f147458fdb80266bf23c17322013316e27e086d0866001602002015187600260200201518e876000602002015187604051808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019550505050505060405180910390a15b3031156112fe576040513390303180156108fc02916000818181858888f193505050501580156112fc573d6000803e3d6000fd5b505b604086015173ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee146115055760408087015181517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152915160009273ffffffffffffffffffffffffffffffffffffffff909216916370a08231916024808301926020929190829003018186803b1580156113a757600080fd5b505afa1580156113bb573d6000803e3d6000fd5b505050506040513d60208110156113d157600080fd5b505111156115055760408087015181517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152915173ffffffffffffffffffffffffffffffffffffffff9091169163a9059cbb91339184916370a0823191602480820192602092909190829003018186803b15801561145557600080fd5b505afa158015611469573d6000803e3d6000fd5b505050506040513d602081101561147f57600080fd5b50516040805163ffffffff851660e01b815273ffffffffffffffffffffffffffffffffffffffff909316600484015260248301919091525160448083019260209291908290030181600087803b1580156114d857600080fd5b505af11580156114ec573d6000803e3d6000fd5b505050506040513d602081101561150257600080fd5b50505b602086015173ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1461170657602080870151604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905160009373ffffffffffffffffffffffffffffffffffffffff909316926370a082319260248082019391829003018186803b1580156115ac57600080fd5b505afa1580156115c0573d6000803e3d6000fd5b505050506040513d60208110156115d657600080fd5b5051111561170657602080870151604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff9092169263a9059cbb92339285926370a0823192602480840193829003018186803b15801561165657600080fd5b505afa15801561166a573d6000803e3d6000fd5b505050506040513d602081101561168057600080fd5b50516040805163ffffffff851660e01b815273ffffffffffffffffffffffffffffffffffffffff909316600484015260248301919091525160448083019260209291908290030181600087803b1580156116d957600080fd5b505af11580156116ed573d6000803e3d6000fd5b505050506040513d602081101561170357600080fd5b50505b5050505050505050505050505050565b731b14e8d511c9a4395425314f849bd737baf8208f81565b738f337bd3b7f2b05d9a8dc8ac518584e83342489381565b73891f5a171f865031b0f3eb9723bb8f68c901c9fe81565b7395e6f48254609a6ee006f7d493c8e5fb97094cef81565b73322d58b9e75a6918f7e7849aee0ff09369977e0881565b731e30124fde14533231216d95f7798cd0061e5cf881565b600073ffffffffffffffffffffffffffffffffffffffff821673e0b7927c4af23765cb51314a0e0521a9645f0e2a14156117e25750600961185a565b73ffffffffffffffffffffffffffffffffffffffff821673a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48141561181c5750600661185a565b73ffffffffffffffffffffffffffffffffffffffff8216732260fac5e5542a773aa44fbcfedf7c193bc2c59914156118565750600861185a565b5060125b919050565b600081602001835110156118d457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f736c6963696e67206f7574206f662072616e6765000000000000000000000000604482015290519081900360640190fd5b50818101602001515b92915050565b604080517fb371deac000000000000000000000000000000000000000000000000000000008152336004820152905160009161032091731b14e8d511c9a4395425314f849bd737baf8208f9163b371deac916024808301926020929190829003018186803b15801561195457600080fd5b505afa158015611968573d6000803e3d6000fd5b505050506040513d602081101561197e57600080fd5b505115611a1e57604080517f6eeb54310000000000000000000000000000000000000000000000000000000081523360048201529051731b14e8d511c9a4395425314f849bd737baf8208f91636eeb5431916024808301926020929190829003018186803b1580156119ef57600080fd5b505afa158015611a03573d6000803e3d6000fd5b505050506040513d6020811015611a1957600080fd5b505190505b80611a2c5760009150611b62565b6103208404915073ffffffffffffffffffffffffffffffffffffffff831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415611aac5760405173322d58b9e75a6918f7e7849aee0ff09369977e089083156108fc029084906000818181858888f19350505050158015611aa6573d6000803e3d6000fd5b50611b62565b604080517fa9059cbb00000000000000000000000000000000000000000000000000000000815273322d58b9e75a6918f7e7849aee0ff09369977e08600482015260248101849052905173ffffffffffffffffffffffffffffffffffffffff85169163a9059cbb9160448083019260209291908290030181600087803b158015611b3557600080fd5b505af1158015611b49573d6000803e3d6000fd5b505050506040513d6020811015611b5f57600080fd5b50505b5092915050565b808203828111156118dd57600080fd5b60008080808781602002015173ffffffffffffffffffffffffffffffffffffffff1686886040518082805190602001908083835b60208310611bea57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611bad565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114611c4c576040519150601f19603f3d011682016040523d82523d6000602084013e611c51565b606091505b5090915085905060008215611f0d5760208a015173ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415611c9f5730319150611d3c565b6020808b0151604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff909216926370a0823192602480840193829003018186803b158015611d0d57600080fd5b505afa158015611d21573d6000803e3d6000fd5b505050506040513d6020811015611d3757600080fd5b505191505b60408a015173ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415611e6d57604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173c02aaa39b223fe8d0a0e5c4f27ead9083c756cc291632e1a7d4d9183916370a082319160248083019260209291908290030181600087803b158015611de657600080fd5b505af1158015611dfa573d6000803e3d6000fd5b505050506040513d6020811015611e1057600080fd5b50516040805163ffffffff841660e01b8152600481019290925251602480830192600092919082900301818387803b158015611e4b57600080fd5b505af1158015611e5f573d6000803e3d6000fd5b505030319250611f0d915050565b6040808b015181517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152915173ffffffffffffffffffffffffffffffffffffffff909116916370a08231916024808301926020929190829003018186803b158015611ede57600080fd5b505afa158015611ef2573d6000803e3d6000fd5b505050506040513d6020811015611f0857600080fd5b505190505b91999198509650945050505050565b60405180606001604052806003906020820280388339509192915050565b6040518060400160405280600290602082028038833950919291505056fe4e6f742061626c6520746f2077697468647261772077616e74656420616d6f756e74a165627a7a72305820fc1890355dec31c5e20f09f797962686ea85bb6f5e9a613356b2dee5598fcff30029
Deployed Bytecode
0x6080604052600436106100c75760003560e01c8063a46a66c911610074578063d0cc72891161004e578063d0cc728914610347578063d3661fa51461035c578063ddaa293c14610371576100c7565b8063a46a66c914610308578063b175afa11461031d578063c917c2d314610332576100c7565b806350c86de5116100a557806350c86de5146101a25780637474ff5e146101c9578063874072611461021f576100c7565b8063040141e5146100c957806329f7fc9e146101075780632ec1f0091461011c575b005b3480156100d557600080fd5b506100de610386565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561011357600080fd5b506100de61039e565b34801561012857600080fd5b506101726004803603608081101561013f57600080fd5b5080359073ffffffffffffffffffffffffffffffffffffffff6020820135811691604081013590911690606001356103b6565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260208301919091528051918290030190f35b3480156101ae57600080fd5b506101b76105de565b60408051918252519081900360200190f35b3480156101d557600080fd5b506101b7600480360360808110156101ec57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201351690606001356105e4565b6100c7600480360361010081101561023657600080fd5b73ffffffffffffffffffffffffffffffffffffffff8235811692602081013582169260408201359260608301359260808101359260a08201359092169181019060e0810160c082013564010000000081111561029157600080fd5b8201836020820111156102a357600080fd5b803590602001918460018302840111640100000000831117156102c557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550509135925061075a915050565b34801561031457600080fd5b506100de611716565b34801561032957600080fd5b506100de61172e565b34801561033e57600080fd5b506100de611746565b34801561035357600080fd5b506100de61175e565b34801561036857600080fd5b506100de611776565b34801561037d57600080fd5b506100de61178e565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b600080600080600085600114156104085773891f5a171f865031b0f3eb9723bb8f68c901c9fe6103fc73891f5a171f865031b0f3eb9723bb8f68c901c9fe8a8a8d6105e4565b945094505050506105d5565b856002141561044657738f337bd3b7f2b05d9a8dc8ac518584e8334248936103fc738f337bd3b7f2b05d9a8dc8ac518584e8334248938a8a8d6105e4565b85600314156104a55761046f731e30124fde14533231216d95f7798cd0061e5cf889898c6105e4565b915061047a876117a6565b731e30124fde14533231216d95f7798cd0061e5cf89550601203600a0a9190910292506105d5915050565b6104c5738f337bd3b7f2b05d9a8dc8ac518584e83342489389898c6105e4565b92506104e7731e30124fde14533231216d95f7798cd0061e5cf889898c6105e4565b91506104f2876117a6565b601203600a0a8202915061051c73891f5a171f865031b0f3eb9723bb8f68c901c9fe89898c6105e4565b9050610527876117a6565b601203600a0a0281831080159061053e5750808310155b1561056557738f337bd3b7f2b05d9a8dc8ac518584e83342489383945094505050506105d5565b8281101580156105755750818110155b1561059b5773891f5a171f865031b0f3eb9723bb8f68c901c9fe945092506105d5915050565b8282101580156105ab5750808210155b156105d15750731e30124fde14533231216d95f7798cd0061e5cf8935091506105d59050565b5050505b94509492505050565b61032081565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f809a9e55000000000000000000000000000000000000000000000000000000001781529251825160009485946060948b16939092909182918083835b602083106106c457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610687565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610726576040519150601f19603f3d011682016040523d82523d6000602084013e61072b565b606091505b509092509050811561074b5761074281600061185f565b92505050610752565b6000925050505b949350505050565b610762611f1c565b506040805160608101825273ffffffffffffffffffffffffffffffffffffffff85811682528a811660208301819052908a16928201929092529073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141561082b578634101561082657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f6d73672e76616c756520736d616c6c6572207468616e20616d6f756e74000000604482015290519081900360640190fd5b610929565b602080820151604080517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018b9052905173ffffffffffffffffffffffffffffffffffffffff909216926323b872dd926064808401938290030181600087803b1580156108a857600080fd5b505af11580156108bc573d6000803e3d6000fd5b505050506040513d60208110156108d257600080fd5b5051610929576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180611f596022913960400191505060405180910390fd5b600061093c8883600160200201516118e3565b90506109488882611b69565b9750610952611f3a565b602081018990526000808060048a1415610af857602086015173ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14610a6a57856001602002015173ffffffffffffffffffffffffffffffffffffffff1663095ea7b37395e6f48254609a6ee006f7d493c8e5fb97094cef8e6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610a3d57600080fd5b505af1158015610a51573d6000803e3d6000fd5b505050506040513d6020811015610a6757600080fd5b50505b610a77868930318f611b79565b5085529050808015610a895750835115155b610af457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f3078207472616e73616374696f6e206661696c65640000000000000000000000604482015290519081900360640190fd5b8892505b83516112c857610b168c8760015b602002015160408901518d6103b6565b90935091508a821180610b2857508a87115b610b9357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f536c697070616765206869740000000000000000000000000000000000000000604482015290519081900360640190fd5b818710610dba57602086015173ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14610c9e57856001602002015173ffffffffffffffffffffffffffffffffffffffff1663095ea7b37395e6f48254609a6ee006f7d493c8e5fb97094cef8e6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610c7157600080fd5b505af1158015610c85573d6000803e3d6000fd5b505050506040513d6020811015610c9b57600080fd5b50505b610cab868930318f611b79565b602087015285529050808015610cc15750835115155b15610dba578892507fb39c9bc43f811e1a7ce159c5f147458fdb80266bf23c17322013316e27e086d0866001602002015187600260200201518e876000602002015187604051808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019550505050505060405180910390a15b6020840151156112c85760208401518c14610de6576020840151610de090876001610b06565b90935091505b8a8211610e5457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f536c69707061676520686974206f6e636861696e207072696365000000000000604482015290519081900360640190fd5b602086015173ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415610f6857602084015160408088015181517f43ac1dc60000000000000000000000000000000000000000000000000000000081526004810184905273ffffffffffffffffffffffffffffffffffffffff91821660248201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60448201528251918716936343ac1dc693909260648084019382900301818588803b158015610f2d57600080fd5b505af1158015610f41573d6000803e3d6000fd5b50505050506040513d6040811015610f5857600080fd5b50518460005b60200201526111d7565b60208087015185820151604080517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff888116600483015260248201939093529051919092169263a9059cbb92604480820193918290030181600087803b158015610fe857600080fd5b505af1158015610ffc573d6000803e3d6000fd5b505050506040513d602081101561101257600080fd5b5050604086015173ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14156111215760208087015185820151604080517f3bba21dc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff938416600482015260248101929092527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60448301525191861692633bba21dc926064808401938290030181600087803b1580156110ed57600080fd5b505af1158015611101573d6000803e3d6000fd5b505050506040513d602081101561111757600080fd5b5051846000610f5e565b6020808701516040808901518784015182517f13712c9f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9485166004820152918416602483015260448201529051918616926313712c9f926064808401938290030181600087803b1580156111a857600080fd5b505af11580156111bc573d6000803e3d6000fd5b505050506040513d60208110156111d257600080fd5b505184525b7fb39c9bc43f811e1a7ce159c5f147458fdb80266bf23c17322013316e27e086d0866001602002015187600260200201518e876000602002015187604051808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019550505050505060405180910390a15b3031156112fe576040513390303180156108fc02916000818181858888f193505050501580156112fc573d6000803e3d6000fd5b505b604086015173ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee146115055760408087015181517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152915160009273ffffffffffffffffffffffffffffffffffffffff909216916370a08231916024808301926020929190829003018186803b1580156113a757600080fd5b505afa1580156113bb573d6000803e3d6000fd5b505050506040513d60208110156113d157600080fd5b505111156115055760408087015181517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152915173ffffffffffffffffffffffffffffffffffffffff9091169163a9059cbb91339184916370a0823191602480820192602092909190829003018186803b15801561145557600080fd5b505afa158015611469573d6000803e3d6000fd5b505050506040513d602081101561147f57600080fd5b50516040805163ffffffff851660e01b815273ffffffffffffffffffffffffffffffffffffffff909316600484015260248301919091525160448083019260209291908290030181600087803b1580156114d857600080fd5b505af11580156114ec573d6000803e3d6000fd5b505050506040513d602081101561150257600080fd5b50505b602086015173ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1461170657602080870151604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905160009373ffffffffffffffffffffffffffffffffffffffff909316926370a082319260248082019391829003018186803b1580156115ac57600080fd5b505afa1580156115c0573d6000803e3d6000fd5b505050506040513d60208110156115d657600080fd5b5051111561170657602080870151604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff9092169263a9059cbb92339285926370a0823192602480840193829003018186803b15801561165657600080fd5b505afa15801561166a573d6000803e3d6000fd5b505050506040513d602081101561168057600080fd5b50516040805163ffffffff851660e01b815273ffffffffffffffffffffffffffffffffffffffff909316600484015260248301919091525160448083019260209291908290030181600087803b1580156116d957600080fd5b505af11580156116ed573d6000803e3d6000fd5b505050506040513d602081101561170357600080fd5b50505b5050505050505050505050505050565b731b14e8d511c9a4395425314f849bd737baf8208f81565b738f337bd3b7f2b05d9a8dc8ac518584e83342489381565b73891f5a171f865031b0f3eb9723bb8f68c901c9fe81565b7395e6f48254609a6ee006f7d493c8e5fb97094cef81565b73322d58b9e75a6918f7e7849aee0ff09369977e0881565b731e30124fde14533231216d95f7798cd0061e5cf881565b600073ffffffffffffffffffffffffffffffffffffffff821673e0b7927c4af23765cb51314a0e0521a9645f0e2a14156117e25750600961185a565b73ffffffffffffffffffffffffffffffffffffffff821673a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48141561181c5750600661185a565b73ffffffffffffffffffffffffffffffffffffffff8216732260fac5e5542a773aa44fbcfedf7c193bc2c59914156118565750600861185a565b5060125b919050565b600081602001835110156118d457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f736c6963696e67206f7574206f662072616e6765000000000000000000000000604482015290519081900360640190fd5b50818101602001515b92915050565b604080517fb371deac000000000000000000000000000000000000000000000000000000008152336004820152905160009161032091731b14e8d511c9a4395425314f849bd737baf8208f9163b371deac916024808301926020929190829003018186803b15801561195457600080fd5b505afa158015611968573d6000803e3d6000fd5b505050506040513d602081101561197e57600080fd5b505115611a1e57604080517f6eeb54310000000000000000000000000000000000000000000000000000000081523360048201529051731b14e8d511c9a4395425314f849bd737baf8208f91636eeb5431916024808301926020929190829003018186803b1580156119ef57600080fd5b505afa158015611a03573d6000803e3d6000fd5b505050506040513d6020811015611a1957600080fd5b505190505b80611a2c5760009150611b62565b6103208404915073ffffffffffffffffffffffffffffffffffffffff831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415611aac5760405173322d58b9e75a6918f7e7849aee0ff09369977e089083156108fc029084906000818181858888f19350505050158015611aa6573d6000803e3d6000fd5b50611b62565b604080517fa9059cbb00000000000000000000000000000000000000000000000000000000815273322d58b9e75a6918f7e7849aee0ff09369977e08600482015260248101849052905173ffffffffffffffffffffffffffffffffffffffff85169163a9059cbb9160448083019260209291908290030181600087803b158015611b3557600080fd5b505af1158015611b49573d6000803e3d6000fd5b505050506040513d6020811015611b5f57600080fd5b50505b5092915050565b808203828111156118dd57600080fd5b60008080808781602002015173ffffffffffffffffffffffffffffffffffffffff1686886040518082805190602001908083835b60208310611bea57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611bad565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114611c4c576040519150601f19603f3d011682016040523d82523d6000602084013e611c51565b606091505b5090915085905060008215611f0d5760208a015173ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415611c9f5730319150611d3c565b6020808b0151604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff909216926370a0823192602480840193829003018186803b158015611d0d57600080fd5b505afa158015611d21573d6000803e3d6000fd5b505050506040513d6020811015611d3757600080fd5b505191505b60408a015173ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415611e6d57604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173c02aaa39b223fe8d0a0e5c4f27ead9083c756cc291632e1a7d4d9183916370a082319160248083019260209291908290030181600087803b158015611de657600080fd5b505af1158015611dfa573d6000803e3d6000fd5b505050506040513d6020811015611e1057600080fd5b50516040805163ffffffff841660e01b8152600481019290925251602480830192600092919082900301818387803b158015611e4b57600080fd5b505af1158015611e5f573d6000803e3d6000fd5b505030319250611f0d915050565b6040808b015181517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152915173ffffffffffffffffffffffffffffffffffffffff909116916370a08231916024808301926020929190829003018186803b158015611ede57600080fd5b505afa158015611ef2573d6000803e3d6000fd5b505050506040513d6020811015611f0857600080fd5b505190505b91999198509650945050505050565b60405180606001604052806003906020820280388339509192915050565b6040518060400160405280600290602082028038833950919291505056fe4e6f742061626c6520746f2077697468647261772077616e74656420616d6f756e74a165627a7a72305820fc1890355dec31c5e20f09f797962686ea85bb6f5e9a613356b2dee5598fcff30029
Loading...
Loading
Loading...
Loading
OVERVIEW
Smart contract containing DeFi Saver Exchange logic.Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.