Contract Overview
My Name Tag:
Not Available, login to update
[ Download CSV Export ]
Latest 25 internal transaction
[ Download CSV Export ]
Contract Name:
DODORouteProxy
Compiler Version
v0.6.9+commit.3e3065ac
Contract Source Code (Solidity)
/** *Submitted for verification at moonriver.moonscan.io on 2021-11-05 */ // File: contracts/intf/IDODOApprove.sol /* Copyright 2020 DODO ZOO. SPDX-License-Identifier: Apache-2.0 */ pragma solidity 0.6.9; pragma experimental ABIEncoderV2; interface IDODOApprove { function claimTokens(address token,address who,address dest,uint256 amount) external; function getDODOProxy() external view returns (address); } // File: contracts/lib/InitializableOwnable.sol /** * @title Ownable * @author DODO Breeder * * @notice Ownership related functions */ contract InitializableOwnable { address public _OWNER_; address public _NEW_OWNER_; bool internal _INITIALIZED_; // ============ Events ============ event OwnershipTransferPrepared(address indexed previousOwner, address indexed newOwner); event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); // ============ Modifiers ============ modifier notInitialized() { require(!_INITIALIZED_, "DODO_INITIALIZED"); _; } modifier onlyOwner() { require(msg.sender == _OWNER_, "NOT_OWNER"); _; } // ============ Functions ============ function initOwner(address newOwner) public notInitialized { _INITIALIZED_ = true; _OWNER_ = newOwner; } function transferOwnership(address newOwner) public onlyOwner { emit OwnershipTransferPrepared(_OWNER_, newOwner); _NEW_OWNER_ = newOwner; } function claimOwnership() public { require(msg.sender == _NEW_OWNER_, "INVALID_CLAIM"); emit OwnershipTransferred(_OWNER_, _NEW_OWNER_); _OWNER_ = _NEW_OWNER_; _NEW_OWNER_ = address(0); } } // File: contracts/SmartRoute/DODOApproveProxy.sol interface IDODOApproveProxy { function isAllowedProxy(address _proxy) external view returns (bool); function claimTokens(address token,address who,address dest,uint256 amount) external; } /** * @title DODOApproveProxy * @author DODO Breeder * * @notice Allow different version dodoproxy to claim from DODOApprove */ contract DODOApproveProxy is InitializableOwnable { // ============ Storage ============ uint256 private constant _TIMELOCK_DURATION_ = 3 days; mapping (address => bool) public _IS_ALLOWED_PROXY_; uint256 public _TIMELOCK_; address public _PENDING_ADD_DODO_PROXY_; address public immutable _DODO_APPROVE_; // ============ Modifiers ============ modifier notLocked() { require( _TIMELOCK_ <= block.timestamp, "SetProxy is timelocked" ); _; } constructor(address dodoApporve) public { _DODO_APPROVE_ = dodoApporve; } function init(address owner, address[] memory proxies) external { initOwner(owner); for(uint i = 0; i < proxies.length; i++) _IS_ALLOWED_PROXY_[proxies[i]] = true; } function unlockAddProxy(address newDodoProxy) public onlyOwner { _TIMELOCK_ = block.timestamp + _TIMELOCK_DURATION_; _PENDING_ADD_DODO_PROXY_ = newDodoProxy; } function lockAddProxy() public onlyOwner { _PENDING_ADD_DODO_PROXY_ = address(0); _TIMELOCK_ = 0; } function addDODOProxy() external onlyOwner notLocked() { _IS_ALLOWED_PROXY_[_PENDING_ADD_DODO_PROXY_] = true; lockAddProxy(); } function removeDODOProxy (address oldDodoProxy) public onlyOwner { _IS_ALLOWED_PROXY_[oldDodoProxy] = false; } function claimTokens( address token, address who, address dest, uint256 amount ) external { require(_IS_ALLOWED_PROXY_[msg.sender], "DODOApproveProxy:Access restricted"); IDODOApprove(_DODO_APPROVE_).claimTokens( token, who, dest, amount ); } function isAllowedProxy(address _proxy) external view returns (bool) { return _IS_ALLOWED_PROXY_[_proxy]; } } // File: contracts/intf/IERC20.sol /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); function decimals() external view returns (uint8); function name() external view returns (string memory); function symbol() external view returns (string memory); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); } // File: contracts/intf/IWETH.sol interface IWETH { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom( address src, address dst, uint256 wad ) external returns (bool); function deposit() external payable; function withdraw(uint256 wad) external; } // File: contracts/lib/SafeMath.sol /** * @title SafeMath * @author DODO Breeder * * @notice Math operations with safety checks that revert on error */ library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "MUL_ERROR"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "DIVIDING_ERROR"); return a / b; } function divCeil(uint256 a, uint256 b) internal pure returns (uint256) { uint256 quotient = div(a, b); uint256 remainder = a - quotient * b; if (remainder > 0) { return quotient + 1; } else { return quotient; } } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, "SUB_ERROR"); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "ADD_ERROR"); return c; } function sqrt(uint256 x) internal pure returns (uint256 y) { uint256 z = x / 2 + 1; y = x; while (z < y) { y = z; z = (x / z + z) / 2; } } } // File: contracts/lib/SafeERC20.sol /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using SafeMath for uint256; function safeTransfer( IERC20 token, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom( IERC20 token, address from, address to, uint256 value ) internal { _callOptionalReturn( token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value) ); } function safeApprove( IERC20 token, address spender, uint256 value ) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length require( (value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. // A Solidity high level call has three parts: // 1. The target address is checked to verify it contains contract code // 2. The call itself is made, and success asserted // 3. The return value is decoded, which in turn checks the size of the returned data. // solhint-disable-next-line max-line-length // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = address(token).call(data); require(success, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } // File: contracts/SmartRoute/lib/UniversalERC20.sol library UniversalERC20 { using SafeMath for uint256; using SafeERC20 for IERC20; IERC20 private constant ETH_ADDRESS = IERC20(0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE); function universalTransfer( IERC20 token, address payable to, uint256 amount ) internal { if (amount > 0) { if (isETH(token)) { to.transfer(amount); } else { token.safeTransfer(to, amount); } } } function universalApproveMax( IERC20 token, address to, uint256 amount ) internal { uint256 allowance = token.allowance(address(this), to); if (allowance < amount) { if (allowance > 0) { token.safeApprove(to, 0); } token.safeApprove(to, uint256(-1)); } } function universalBalanceOf(IERC20 token, address who) internal view returns (uint256) { if (isETH(token)) { return who.balance; } else { return token.balanceOf(who); } } function tokenBalanceOf(IERC20 token, address who) internal view returns (uint256) { return token.balanceOf(who); } function isETH(IERC20 token) internal pure returns (bool) { return token == ETH_ADDRESS; } } // File: contracts/SmartRoute/intf/IDODOAdapter.sol interface IDODOAdapter { function sellBase(address to, address pool, bytes memory data) external; function sellQuote(address to, address pool, bytes memory data) external; } // File: contracts/SmartRoute/proxies/DODORouteProxy.sol /** * @title DODORouteProxy * @author DODO Breeder * * @notice Entrance of Split trading in DODO platform */ contract DODORouteProxy is InitializableOwnable { using SafeMath for uint256; using UniversalERC20 for IERC20; // ============ Storage ============ address constant _ETH_ADDRESS_ = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE; address public _WETH_; address public immutable _DODO_APPROVE_PROXY_; struct PoolInfo { uint256 direction; uint256 poolEdition; uint256 weight; address pool; address adapter; bytes moreInfo; } // ============ Events ============ event OrderHistory( address fromToken, address toToken, address sender, uint256 fromAmount, uint256 returnAmount ); // ============ Modifiers ============ modifier judgeExpired(uint256 deadLine) { require(deadLine >= block.timestamp, "DODORouteProxy: EXPIRED"); _; } fallback() external payable {} receive() external payable {} function replaceWETH (address newWeth) public onlyOwner { _WETH_ = newWeth; } constructor ( address payable weth, address dodoApproveProxy ) public { _WETH_ = weth; _DODO_APPROVE_PROXY_ = dodoApproveProxy; } function mixSwap( address fromToken, address toToken, uint256 fromTokenAmount, uint256 minReturnAmount, address[] memory mixAdapters, address[] memory mixPairs, address[] memory assetTo, uint256 directions, bytes[] memory moreInfos, uint256 deadLine ) external payable judgeExpired(deadLine) returns (uint256 returnAmount) { require(mixPairs.length > 0, "DODORouteProxy: PAIRS_EMPTY"); require(mixPairs.length == mixAdapters.length, "DODORouteProxy: PAIR_ADAPTER_NOT_MATCH"); require(mixPairs.length == assetTo.length - 1, "DODORouteProxy: PAIR_ASSETTO_NOT_MATCH"); require(minReturnAmount > 0, "DODORouteProxy: RETURN_AMOUNT_ZERO"); address _fromToken = fromToken; address _toToken = toToken; uint256 _fromTokenAmount = fromTokenAmount; uint256 toTokenOriginBalance = IERC20(_toToken).universalBalanceOf(msg.sender); _deposit(msg.sender, assetTo[0], _fromToken, _fromTokenAmount, _fromToken == _ETH_ADDRESS_); for (uint256 i = 0; i < mixPairs.length; i++) { if (directions & 1 == 0) { IDODOAdapter(mixAdapters[i]).sellBase(assetTo[i + 1],mixPairs[i], moreInfos[i]); } else { IDODOAdapter(mixAdapters[i]).sellQuote(assetTo[i + 1],mixPairs[i], moreInfos[i]); } directions = directions >> 1; } if(_toToken == _ETH_ADDRESS_) { returnAmount = IWETH(_WETH_).balanceOf(address(this)); IWETH(_WETH_).withdraw(returnAmount); msg.sender.transfer(returnAmount); }else { returnAmount = IERC20(_toToken).tokenBalanceOf(msg.sender).sub(toTokenOriginBalance); } require(returnAmount >= minReturnAmount, "DODORouteProxy: Return amount is not enough"); emit OrderHistory( _fromToken, _toToken, msg.sender, _fromTokenAmount, returnAmount ); } function dodoMutliSwap( uint256 fromTokenAmount, uint256 minReturnAmount, uint256[] memory totalWeight, uint256[] memory splitNumber, address[] memory midToken, address[] memory assetFrom, bytes[] memory sequence, uint256 deadLine ) external payable judgeExpired(deadLine) returns (uint256 returnAmount) { require(assetFrom.length == splitNumber.length, 'DODORouteProxy: PAIR_ASSETTO_NOT_MATCH'); require(minReturnAmount > 0, "DODORouteProxy: RETURN_AMOUNT_ZERO"); uint256 _fromTokenAmount = fromTokenAmount; address fromToken = midToken[0]; address toToken = midToken[midToken.length - 1]; uint256 toTokenOriginBalance = IERC20(toToken).universalBalanceOf(msg.sender); _deposit(msg.sender, assetFrom[0], fromToken, _fromTokenAmount, fromToken == _ETH_ADDRESS_); _multiSwap(totalWeight, midToken, splitNumber, sequence, assetFrom); if(toToken == _ETH_ADDRESS_) { returnAmount = IWETH(_WETH_).balanceOf(address(this)); IWETH(_WETH_).withdraw(returnAmount); msg.sender.transfer(returnAmount); }else { returnAmount = IERC20(toToken).tokenBalanceOf(msg.sender).sub(toTokenOriginBalance); } require(returnAmount >= minReturnAmount, "DODORouteProxy: Return amount is not enough"); emit OrderHistory( fromToken, toToken, msg.sender, _fromTokenAmount, returnAmount ); } //====================== internal ======================= function _multiSwap( uint256[] memory totalWeight, address[] memory midToken, uint256[] memory splitNumber, bytes[] memory swapSequence, address[] memory assetFrom ) internal { for(uint256 i = 1; i < splitNumber.length; i++) { // define midtoken address, ETH -> WETH address uint256 curTotalAmount = IERC20(midToken[i]).tokenBalanceOf(assetFrom[i-1]); uint256 curTotalWeight = totalWeight[i-1]; for(uint256 j = splitNumber[i-1]; j < splitNumber[i]; j++) { PoolInfo memory curPoolInfo; { (address pool, address adapter, uint256 mixPara, bytes memory moreInfo) = abi.decode(swapSequence[j], (address, address, uint256, bytes)); curPoolInfo.direction = mixPara >> 17; curPoolInfo.weight = (0xffff & mixPara) >> 9; curPoolInfo.poolEdition = (0xff & mixPara); curPoolInfo.pool = pool; curPoolInfo.adapter = adapter; curPoolInfo.moreInfo = moreInfo; } if(assetFrom[i-1] == address(this)) { uint256 curAmount = curTotalAmount.mul(curPoolInfo.weight).div(curTotalWeight); if(curPoolInfo.poolEdition == 1) { //For using transferFrom pool (like dodoV1, Curve) IERC20(midToken[i]).transfer(curPoolInfo.adapter, curAmount); } else { //For using transfer pool (like dodoV2) IERC20(midToken[i]).transfer(curPoolInfo.pool, curAmount); } } if(curPoolInfo.direction == 0) { IDODOAdapter(curPoolInfo.adapter).sellBase(assetFrom[i], curPoolInfo.pool, curPoolInfo.moreInfo); } else { IDODOAdapter(curPoolInfo.adapter).sellQuote(assetFrom[i], curPoolInfo.pool, curPoolInfo.moreInfo); } } } } function _deposit( address from, address to, address token, uint256 amount, bool isETH ) internal { if (isETH) { if (amount > 0) { IWETH(_WETH_).deposit{value: amount}(); if (to != address(this)) SafeERC20.safeTransfer(IERC20(_WETH_), to, amount); } } else { IDODOApproveProxy(_DODO_APPROVE_PROXY_).claimTokens(token, from, to, amount); } } }
[{"inputs":[{"internalType":"address payable","name":"weth","type":"address"},{"internalType":"address","name":"dodoApproveProxy","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"fromToken","type":"address"},{"indexed":false,"internalType":"address","name":"toToken","type":"address"},{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"fromAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"returnAmount","type":"uint256"}],"name":"OrderHistory","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferPrepared","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"_DODO_APPROVE_PROXY_","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_NEW_OWNER_","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_OWNER_","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_WETH_","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fromTokenAmount","type":"uint256"},{"internalType":"uint256","name":"minReturnAmount","type":"uint256"},{"internalType":"uint256[]","name":"totalWeight","type":"uint256[]"},{"internalType":"uint256[]","name":"splitNumber","type":"uint256[]"},{"internalType":"address[]","name":"midToken","type":"address[]"},{"internalType":"address[]","name":"assetFrom","type":"address[]"},{"internalType":"bytes[]","name":"sequence","type":"bytes[]"},{"internalType":"uint256","name":"deadLine","type":"uint256"}],"name":"dodoMutliSwap","outputs":[{"internalType":"uint256","name":"returnAmount","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"initOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"fromToken","type":"address"},{"internalType":"address","name":"toToken","type":"address"},{"internalType":"uint256","name":"fromTokenAmount","type":"uint256"},{"internalType":"uint256","name":"minReturnAmount","type":"uint256"},{"internalType":"address[]","name":"mixAdapters","type":"address[]"},{"internalType":"address[]","name":"mixPairs","type":"address[]"},{"internalType":"address[]","name":"assetTo","type":"address[]"},{"internalType":"uint256","name":"directions","type":"uint256"},{"internalType":"bytes[]","name":"moreInfos","type":"bytes[]"},{"internalType":"uint256","name":"deadLine","type":"uint256"}],"name":"mixSwap","outputs":[{"internalType":"uint256","name":"returnAmount","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"newWeth","type":"address"}],"name":"replaceWETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60a06040523480156200001157600080fd5b5060405162001d1638038062001d1683398101604081905262000034916200006b565b600280546001600160a01b0319166001600160a01b03939093169290921790915560601b6001600160601b031916608052620000c2565b600080604083850312156200007e578182fd5b82516200008b81620000a9565b60208401519092506200009e81620000a9565b809150509250929050565b6001600160a01b0381168114620000bf57600080fd5b50565b60805160601c611c31620000e560003980610a755280610c7b5250611c316000f3fe6080604052600436106100955760003560e01c8063817917881161005957806381791788146101335780638456db1514610146578063c67f873d1461015b578063eb99be121461017b578063f2fde38b146101905761009c565b80630d0092971461009e5780630d4eec8f146100be57806316048bc4146100e95780634e71e0c8146100fe5780637617b389146101135761009c565b3661009c57005b005b3480156100aa57600080fd5b5061009c6100b936600461148f565b6101b0565b3480156100ca57600080fd5b506100d3610219565b6040516100e09190611783565b60405180910390f35b3480156100f557600080fd5b506100d3610228565b34801561010a57600080fd5b5061009c610237565b610126610121366004611552565b6102c5565b6040516100e09190611b43565b61012661014136600461167e565b610739565b34801561015257600080fd5b506100d3610a18565b34801561016757600080fd5b5061009c61017636600461148f565b610a27565b34801561018757600080fd5b506100d3610a73565b34801561019c57600080fd5b5061009c6101ab36600461148f565b610a97565b600154600160a01b900460ff16156101e35760405162461bcd60e51b81526004016101da90611a89565b60405180910390fd5b6001805460ff60a01b1916600160a01b179055600080546001600160a01b039092166001600160a01b0319909216919091179055565b6002546001600160a01b031681565b6000546001600160a01b031681565b6001546001600160a01b031633146102615760405162461bcd60e51b81526004016101da9061195a565b600154600080546040516001600160a01b0393841693909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a360018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b600081428110156102e85760405162461bcd60e51b81526004016101da9061185b565b60008751116103095760405162461bcd60e51b81526004016101da90611892565b875187511461032a5760405162461bcd60e51b81526004016101da906118c9565b600186510387511461034e5760405162461bcd60e51b81526004016101da90611a43565b6000891161036e5760405162461bcd60e51b81526004016101da906119de565b8b8b8b600061038c6001600160a01b0384163363ffffffff610b1c16565b90506103d7338b60008151811061039f57fe5b6020026020010151868573eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b0316896001600160a01b031614610bc2565b60005b8b5181101561055f5760018a166104a1578c81815181106103f757fe5b60200260200101516001600160a01b03166330e6ae318c836001018151811061041c57fe5b60200260200101518e848151811061043057fe5b60200260200101518c858151811061044457fe5b60200260200101516040518463ffffffff1660e01b815260040161046a939291906117f5565b600060405180830381600087803b15801561048457600080fd5b505af1158015610498573d6000803e3d6000fd5b50505050610553565b8c81815181106104ad57fe5b60200260200101516001600160a01b0316636f7929f28c83600101815181106104d257fe5b60200260200101518e84815181106104e657fe5b60200260200101518c85815181106104fa57fe5b60200260200101516040518463ffffffff1660e01b8152600401610520939291906117f5565b600060405180830381600087803b15801561053a57600080fd5b505af115801561054e573d6000803e3d6000fd5b505050505b6001998a1c99016103da565b506001600160a01b03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141561069b576002546040516370a0823160e01b81526001600160a01b03909116906370a08231906105b5903090600401611783565b60206040518083038186803b1580156105cd57600080fd5b505afa1580156105e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106059190611666565b600254604051632e1a7d4d60e01b81529197506001600160a01b031690632e1a7d4d90610636908990600401611b43565b600060405180830381600087803b15801561065057600080fd5b505af1158015610664573d6000803e3d6000fd5b505060405133925088156108fc02915088906000818181858888f19350505050158015610695573d6000803e3d6000fd5b506106c7565b6106c4816106b86001600160a01b0386163363ffffffff610cf016565b9063ffffffff610d1f16565b95505b8c8610156106e75760405162461bcd60e51b81526004016101da9061190f565b7f92ceb067a9883c85aba061e46b9edf505a0d6e81927c4b966ebed543a5221787848433858a60405161071e959493929190611797565b60405180910390a150505050509a9950505050505050505050565b6000814281101561075c5760405162461bcd60e51b81526004016101da9061185b565b865185511461077d5760405162461bcd60e51b81526004016101da90611a43565b6000891161079d5760405162461bcd60e51b81526004016101da906119de565b60008a90506000876000815181106107b157fe5b6020026020010151905060008860018a5103815181106107cd57fe5b6020026020010151905060006107f533836001600160a01b0316610b1c90919063ffffffff16565b9050610840338a60008151811061080857fe5b6020026020010151858773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b0316886001600160a01b031614610bc2565b61084d8c8b8d8b8d610d47565b6001600160a01b03821673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415610988576002546040516370a0823160e01b81526001600160a01b03909116906370a08231906108a2903090600401611783565b60206040518083038186803b1580156108ba57600080fd5b505afa1580156108ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f29190611666565b600254604051632e1a7d4d60e01b81529197506001600160a01b031690632e1a7d4d90610923908990600401611b43565b600060405180830381600087803b15801561093d57600080fd5b505af1158015610951573d6000803e3d6000fd5b505060405133925088156108fc02915088906000818181858888f19350505050158015610982573d6000803e3d6000fd5b506109a8565b6109a5816106b86001600160a01b0385163363ffffffff610cf016565b95505b8c8610156109c85760405162461bcd60e51b81526004016101da9061190f565b7f92ceb067a9883c85aba061e46b9edf505a0d6e81927c4b966ebed543a5221787838333878a6040516109ff959493929190611797565b60405180910390a1505050505098975050505050505050565b6001546001600160a01b031681565b6000546001600160a01b03163314610a515760405162461bcd60e51b81526004016101da90611ab3565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000546001600160a01b03163314610ac15760405162461bcd60e51b81526004016101da90611ab3565b600080546040516001600160a01b03808516939216917fdcf55418cee3220104fef63f979ff3c4097ad240c0c43dcb33ce837748983e6291a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000610b2783611127565b15610b3d57506001600160a01b03811631610bbc565b6040516370a0823160e01b81526001600160a01b038416906370a0823190610b69908590600401611783565b60206040518083038186803b158015610b8157600080fd5b505afa158015610b95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb99190611666565b90505b92915050565b8015610c64578115610c5f57600260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015610c1e57600080fd5b505af1158015610c32573d6000803e3d6000fd5b505050506001600160a01b03851630149050610c5f57600254610c5f906001600160a01b0316858461114c565b610ce9565b60405163052f523360e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690630a5ea46690610cb69086908990899088906004016117cb565b600060405180830381600087803b158015610cd057600080fd5b505af1158015610ce4573d6000803e3d6000fd5b505050505b5050505050565b6040516370a0823160e01b81526000906001600160a01b038416906370a0823190610b69908590600401611783565b600082821115610d415760405162461bcd60e51b81526004016101da90611a20565b50900390565b60015b835181101561111f576000610d9a836001840381518110610d6757fe5b6020026020010151878481518110610d7b57fe5b60200260200101516001600160a01b0316610cf090919063ffffffff16565b90506000876001840381518110610dad57fe5b602002602001015190506000866001850381518110610dc857fe5b602002602001015190505b868481518110610ddf57fe5b602002602001015181101561111457610df66112d0565b600080600060608a8681518110610e0957fe5b6020026020010151806020019051810190610e2491906114ab565b601182901c8952607f600983901c1660408a015260ff90911660208901526001600160a01b0392831660608901529116608087015260a0860152505087513092508891506000198801908110610e7657fe5b60200260200101516001600160a01b03161415610ffd576000610eb684610eaa8460400151886111a790919063ffffffff16565b9063ffffffff6111e116565b9050816020015160011415610f6257898681518110610ed157fe5b60200260200101516001600160a01b031663a9059cbb8360800151836040518363ffffffff1660e01b8152600401610f0a929190611842565b602060405180830381600087803b158015610f2457600080fd5b505af1158015610f38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5c9190611646565b50610ffb565b898681518110610f6e57fe5b60200260200101516001600160a01b031663a9059cbb8360600151836040518363ffffffff1660e01b8152600401610fa7929190611842565b602060405180830381600087803b158015610fc157600080fd5b505af1158015610fd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff99190611646565b505b505b80516110895780608001516001600160a01b03166330e6ae3187878151811061102257fe5b602002602001015183606001518460a001516040518463ffffffff1660e01b8152600401611052939291906117f5565b600060405180830381600087803b15801561106c57600080fd5b505af1158015611080573d6000803e3d6000fd5b5050505061110b565b80608001516001600160a01b0316636f7929f28787815181106110a857fe5b602002602001015183606001518460a001516040518463ffffffff1660e01b81526004016110d8939291906117f5565b600060405180830381600087803b1580156110f257600080fd5b505af1158015611106573d6000803e3d6000fd5b505050505b50600101610dd3565b505050600101610d4a565b505050505050565b6001600160a01b03811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14919050565b6111a28363a9059cbb60e01b848460405160240161116b929190611842565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611213565b505050565b6000826111b657506000610bbc565b828202828482816111c357fe5b0414610bb95760405162461bcd60e51b81526004016101da90611b20565b60008082116112025760405162461bcd60e51b81526004016101da906119b6565b81838161120b57fe5b049392505050565b60006060836001600160a01b03168360405161122f9190611767565b6000604051808303816000865af19150503d806000811461126c576040519150601f19603f3d011682016040523d82523d6000602084013e611271565b606091505b5091509150816112935760405162461bcd60e51b81526004016101da90611981565b8051156112ca57808060200190518101906112ae9190611646565b6112ca5760405162461bcd60e51b81526004016101da90611ad6565b50505050565b6040518060c0016040528060008152602001600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b03168152602001606081525090565b8035610bbc81611be3565b600082601f830112611333578081fd5b813561134661134182611b73565b611b4c565b81815291506020808301908481018184028601820187101561136757600080fd5b60005b8481101561138f57813561137d81611be3565b8452928201929082019060010161136a565b505050505092915050565b600082601f8301126113aa578081fd5b81356113b861134182611b73565b818152915060208083019084810160005b8481101561138f578135870188603f8201126113e457600080fd5b838101356113f461134182611b93565b81815260408b8184860101111561140a57600080fd5b828185018884013750600091810186019190915285525092820192908201906001016113c9565b600082601f830112611441578081fd5b813561144f61134182611b73565b81815291506020808301908481018184028601820187101561147057600080fd5b60005b8481101561138f57813584529282019290820190600101611473565b6000602082840312156114a0578081fd5b8135610bb981611be3565b600080600080608085870312156114c0578283fd5b84516114cb81611be3565b60208601519094506114dc81611be3565b60408601516060870151919450925067ffffffffffffffff8111156114ff578182fd5b80860187601f820112611510578283fd5b8051915061152061134183611b93565b828152886020848401011115611534578384fd5b611545836020830160208501611bb7565b9598949750929550505050565b6000806000806000806000806000806101408b8d031215611571578586fd5b61157b8c8c611318565b995061158a8c60208d01611318565b985060408b0135975060608b0135965060808b013567ffffffffffffffff808211156115b4578788fd5b6115c08e838f01611323565b975060a08d01359150808211156115d5578687fd5b6115e18e838f01611323565b965060c08d01359150808211156115f6578586fd5b6116028e838f01611323565b955060e08d013594506101008d013591508082111561161f578384fd5b5061162c8d828e0161139a565b9250506101208b013590509295989b9194979a5092959850565b600060208284031215611657578081fd5b81518015158114610bb9578182fd5b600060208284031215611677578081fd5b5051919050565b600080600080600080600080610100898b03121561169a578384fd5b8835975060208901359650604089013567ffffffffffffffff808211156116bf578586fd5b6116cb8c838d01611431565b975060608b01359150808211156116e0578586fd5b6116ec8c838d01611431565b965060808b0135915080821115611701578586fd5b61170d8c838d01611323565b955060a08b0135915080821115611722578485fd5b61172e8c838d01611323565b945060c08b0135915080821115611743578384fd5b506117508b828c0161139a565b92505060e089013590509295985092959890939650565b60008251611779818460208701611bb7565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03958616815293851660208501529190931660408301526060820192909252608081019190915260a00190565b6001600160a01b039485168152928416602084015292166040820152606081019190915260800190565b600060018060a01b03808616835280851660208401525060606040830152825180606084015261182c816080850160208701611bb7565b601f01601f191691909101608001949350505050565b6001600160a01b03929092168252602082015260400190565b60208082526017908201527f444f444f526f75746550726f78793a2045585049524544000000000000000000604082015260600190565b6020808252601b908201527f444f444f526f75746550726f78793a2050414952535f454d5054590000000000604082015260600190565b60208082526026908201527f444f444f526f75746550726f78793a20504149525f414441505445525f4e4f546040820152650be9a82a886960d31b606082015260800190565b6020808252602b908201527f444f444f526f75746550726f78793a2052657475726e20616d6f756e7420697360408201526a040dcdee840cadcdeeaced60ab1b606082015260800190565b6020808252600d908201526c494e56414c49445f434c41494d60981b604082015260600190565b6020808252818101527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604082015260600190565b6020808252600e908201526d2224ab24a224a723afa2a92927a960911b604082015260600190565b60208082526022908201527f444f444f526f75746550726f78793a2052455455524e5f414d4f554e545f5a45604082015261524f60f01b606082015260800190565b60208082526009908201526829aaa12fa2a92927a960b91b604082015260600190565b60208082526026908201527f444f444f526f75746550726f78793a20504149525f4153534554544f5f4e4f546040820152650be9a82a886960d31b606082015260800190565b60208082526010908201526f1113d113d7d25392551250531256915160821b604082015260600190565b6020808252600990820152682727aa2fa7aba722a960b91b604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b60208082526009908201526826aaa62fa2a92927a960b91b604082015260600190565b90815260200190565b60405181810167ffffffffffffffff81118282101715611b6b57600080fd5b604052919050565b600067ffffffffffffffff821115611b89578081fd5b5060209081020190565b600067ffffffffffffffff821115611ba9578081fd5b50601f01601f191660200190565b60005b83811015611bd2578181015183820152602001611bba565b838111156112ca5750506000910152565b6001600160a01b0381168114611bf857600080fd5b5056fea2646970667358221220d6f7c73760cdcac7bebec15c56e8f055195bfd62464d58ca6fe11ad9ad0321d264736f6c63430006090033000000000000000000000000f50225a84382c74cbdea10b0c176f71fc3de0c4d0000000000000000000000007737fd30535c69545deeea54ab8dd590ccaebd3c
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000f50225a84382c74cbdea10b0c176f71fc3de0c4d0000000000000000000000007737fd30535c69545deeea54ab8dd590ccaebd3c
-----Decoded View---------------
Arg [0] : weth (address): 0xf50225a84382c74cbdea10b0c176f71fc3de0c4d
Arg [1] : dodoApproveProxy (address): 0x7737fd30535c69545deeea54ab8dd590ccaebd3c
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000f50225a84382c74cbdea10b0c176f71fc3de0c4d
Arg [1] : 0000000000000000000000007737fd30535c69545deeea54ab8dd590ccaebd3c
Deployed ByteCode Sourcemap
13745:7805:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1193:127;;;;;;;;;;-1:-1:-1;1193:127:0;;;;;;;;:::i;13999:21::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;560:22;;;;;;;;;;;;;:::i;1499:228::-;;;;;;;;;;;;;:::i;15032:2111::-;;;;;;;;;:::i;:::-;;;;;;;;17151:1626;;;;;;;;;:::i;589:26::-;;;;;;;;;;;;;:::i;14750:91::-;;;;;;;;;;-1:-1:-1;14750:91:0;;;;;;;;:::i;14027:45::-;;;;;;;;;;;;;:::i;1328:163::-;;;;;;;;;;-1:-1:-1;1328:163:0;;;;;;;;:::i;1193:127::-;982:13;;-1:-1:-1;;;982:13:0;;;;981:14;973:43;;;;-1:-1:-1;;;973:43:0;;;;;;;;;;;;;;;;;1279:4:::1;1263:20:::0;;-1:-1:-1;;;;1263:20:0::1;-1:-1:-1::0;;;1263:20:0::1;::::0;;;1294:18;;-1:-1:-1;;;;;1294:18:0;;::::1;-1:-1:-1::0;;;;;;1294:18:0;;::::1;::::0;;;::::1;::::0;;1193:127::o;13999:21::-;;;-1:-1:-1;;;;;13999:21:0;;:::o;560:22::-;;;-1:-1:-1;;;;;560:22:0;;:::o;1499:228::-;1565:11;;-1:-1:-1;;;;;1565:11:0;1551:10;:25;1543:51;;;;-1:-1:-1;;;1543:51:0;;;;;;;;;1640:11;;;1631:7;;1610:42;;-1:-1:-1;;;;;1640:11:0;;;;1631:7;;;;1610:42;;;1673:11;;;;1663:21;;-1:-1:-1;;;;;;1663:21:0;;;-1:-1:-1;;;;;1673:11:0;;1663:21;;;;1695:24;;;1499:228::o;15032:2111::-;15428:20;15409:8;14604:15;14592:8;:27;;14584:63;;;;-1:-1:-1;;;14584:63:0;;;;;;;;;15487:1:::1;15469:8;:15;:19;15461:59;;;;-1:-1:-1::0;;;15461:59:0::1;;;;;;;;;15558:11;:18;15539:8;:15;:37;15531:88;;;;-1:-1:-1::0;;;15531:88:0::1;;;;;;;;;15674:1;15657:7;:14;:18;15638:8;:15;:37;15630:88;;;;-1:-1:-1::0;;;15630:88:0::1;;;;;;;;;15755:1;15737:15;:19;15729:66;;;;-1:-1:-1::0;;;15729:66:0::1;;;;;;;;;15829:9:::0;15868:7;15913:15;15808:18:::1;15980:47;-1:-1:-1::0;;;;;15980:35:0;::::1;16016:10;15980:47;:35;:47;:::i;:::-;15949:78;;16048:91;16057:10;16069:7;16077:1;16069:10;;;;;;;;;;;;;;16081;16093:16;13950:42;-1:-1:-1::0;;;;;16111:27:0::1;:10;-1:-1:-1::0;;;;;16111:27:0::1;;16048:8;:91::i;:::-;16157:9;16152:375;16176:8;:15;16172:1;:19;16152:375;;;16230:1;16217:14:::0;::::1;16213:260;;16270:11;16282:1;16270:14;;;;;;;;;;;;;;-1:-1:-1::0;;;;;16257:37:0::1;;16295:7;16303:1;16307;16303:5;16295:14;;;;;;;;;;;;;;16310:8;16319:1;16310:11;;;;;;;;;;;;;;16323:9;16333:1;16323:12;;;;;;;;;;;;;;16257:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;16213:260;;;16390:11;16402:1;16390:14;;;;;;;;;;;;;;-1:-1:-1::0;;;;;16377:38:0::1;;16416:7;16424:1;16428;16424:5;16416:14;;;;;;;;;;;;;;16431:8;16440:1;16431:11;;;;;;;;;;;;;;16444:9;16454:1;16444:12;;;;;;;;;;;;;;16377:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;16213:260;16514:1;16500:15:::0;;::::1;::::0;16193:3:::1;16152:375;;;-1:-1:-1::0;;;;;;16542:25:0;::::1;13950:42;16542:25;16539:325;;;16605:6;::::0;16599:38:::1;::::0;-1:-1:-1;;;16599:38:0;;-1:-1:-1;;;;;16605:6:0;;::::1;::::0;16599:23:::1;::::0;:38:::1;::::0;16631:4:::1;::::0;16599:38:::1;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16658:6;::::0;16652:36:::1;::::0;-1:-1:-1;;;16652:36:0;;16584:53;;-1:-1:-1;;;;;;16658:6:0::1;::::0;16652:22:::1;::::0;:36:::1;::::0;16584:53;;16652:36:::1;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;16703:33:0::1;::::0;:10:::1;::::0;-1:-1:-1;16703:33:0;::::1;;;::::0;-1:-1:-1;16723:12:0;;16703:33:::1;::::0;;;16723:12;16703:10;:33;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;16539:325;;;16783:69;16831:20:::0;16783:43:::1;-1:-1:-1::0;;;;;16783:31:0;::::1;16815:10;16783:43;:31;:43;:::i;:::-;:47:::0;:69:::1;:47;:69;:::i;:::-;16768:84;;16539:325;16900:15;16884:12;:31;;16876:87;;;;-1:-1:-1::0;;;16876:87:0::1;;;;;;;;;16981:154;17008:10;17033:8;17056:10;17081:16;17112:12;16981:154;;;;;;;;;;;;;;;;;;;14658:1;;;;15032:2111:::0;;;;;;;;;;;;;:::o;17151:1626::-;17510:20;17491:8;14604:15;14592:8;:27;;14584:63;;;;-1:-1:-1;;;14584:63:0;;;;;;;;;17571:11:::1;:18;17551:9;:16;:38;17543:89;;;;-1:-1:-1::0;;;17543:89:0::1;;;;;;;;;17677:1;17659:15;:19;17651:66;;;;-1:-1:-1::0;;;17651:66:0::1;;;;;;;;;17738:24;17765:15;17738:42;;17791:17;17811:8;17820:1;17811:11;;;;;;;;;;;;;;17791:31;;17833:15;17851:8;17878:1;17860:8;:15;:19;17851:29;;;;;;;;;;;;;;17833:47;;17893:28;17924:46;17959:10;17931:7;-1:-1:-1::0;;;;;17924:34:0::1;;;:46;;;;:::i;:::-;17893:77;;17981:91;17990:10;18002:9;18012:1;18002:12;;;;;;;;;;;;;;18016:9;18027:16;13950:42;-1:-1:-1::0;;;;;18045:26:0::1;:9;-1:-1:-1::0;;;;;18045:26:0::1;;17981:8;:91::i;:::-;18085:67;18096:11;18109:8;18119:11;18132:8;18142:9;18085:10;:67::i;:::-;-1:-1:-1::0;;;;;18172:24:0;::::1;13950:42;18172:24;18169:323;;;18234:6;::::0;18228:38:::1;::::0;-1:-1:-1;;;18228:38:0;;-1:-1:-1;;;;;18234:6:0;;::::1;::::0;18228:23:::1;::::0;:38:::1;::::0;18260:4:::1;::::0;18228:38:::1;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18287:6;::::0;18281:36:::1;::::0;-1:-1:-1;;;18281:36:0;;18213:53;;-1:-1:-1;;;;;;18287:6:0::1;::::0;18281:22:::1;::::0;:36:::1;::::0;18213:53;;18281:36:::1;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;18332:33:0::1;::::0;:10:::1;::::0;-1:-1:-1;18332:33:0;::::1;;;::::0;-1:-1:-1;18352:12:0;;18332:33:::1;::::0;;;18352:12;18332:10;:33;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;18169:323;;;18412:68;18459:20:::0;18412:42:::1;-1:-1:-1::0;;;;;18412:30:0;::::1;18443:10;18412:42;:30;:42;:::i;:68::-;18397:83;;18169:323;18528:15;18512:12;:31;;18504:87;;;;-1:-1:-1::0;;;18504:87:0::1;;;;;;;;;18613:152;18640:9;18664:7;18686:10;18711:16;18742:12;18613:152;;;;;;;;;;;;;;;;;;;14658:1;;;;17151:1626:::0;;;;;;;;;;;:::o;589:26::-;;;-1:-1:-1;;;;;589:26:0;;:::o;14750:91::-;1098:7;;-1:-1:-1;;;;;1098:7:0;1084:10;:21;1076:43;;;;-1:-1:-1;;;1076:43:0;;;;;;;;;14817:6:::1;:16:::0;;-1:-1:-1;;;;;;14817:16:0::1;-1:-1:-1::0;;;;;14817:16:0;;;::::1;::::0;;;::::1;::::0;;14750:91::o;14027:45::-;;;:::o;1328:163::-;1098:7;;-1:-1:-1;;;;;1098:7:0;1084:10;:21;1076:43;;;;-1:-1:-1;;;1076:43:0;;;;;;;;;1432:7:::1;::::0;;1406:44:::1;::::0;-1:-1:-1;;;;;1406:44:0;;::::1;::::0;1432:7;::::1;::::0;1406:44:::1;::::0;::::1;1461:11;:22:::0;;-1:-1:-1;;;;;;1461:22:0::1;-1:-1:-1::0;;;;;1461:22:0;;;::::1;::::0;;;::::1;::::0;;1328:163::o;12824:228::-;12902:7;12926:12;12932:5;12926;:12::i;:::-;12922:123;;;-1:-1:-1;;;;;;12962:11:0;;;12955:18;;12922:123;13013:20;;-1:-1:-1;;;13013:20:0;;-1:-1:-1;;;;;13013:15:0;;;;;:20;;13029:3;;13013:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13006:27;;12922:123;12824:228;;;;:::o;21052:495::-;21215:5;21211:329;;;21241:10;;21237:183;;21278:6;;;;;;;;;-1:-1:-1;;;;;21278:6:0;-1:-1:-1;;;;;21272:21:0;;21301:6;21272:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;21333:19:0;;21347:4;21333:19;;-1:-1:-1;21329:75:0;;21384:6;;21354:50;;-1:-1:-1;;;;;21384:6:0;21393:2;21397:6;21354:22;:50::i;:::-;21211:329;;;21452:76;;-1:-1:-1;;;21452:76:0;;-1:-1:-1;;;;;21470:20:0;21452:51;;;;:76;;21504:5;;21511:4;;21517:2;;21521:6;;21452:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21211:329;21052:495;;;;;:::o;13060:129::-;13161:20;;-1:-1:-1;;;13161:20:0;;13134:7;;-1:-1:-1;;;;;13161:15:0;;;;;:20;;13177:3;;13161:20;;;;8136:137;8194:7;8227:1;8222;:6;;8214:28;;;;-1:-1:-1;;;8214:28:0;;;;;;;;;-1:-1:-1;8260:5:0;;;8136:137::o;18856:2188::-;19109:1;19093:1944;19116:11;:18;19112:1;:22;19093:1944;;;19218:22;19243:50;19278:9;19290:1;19288;:3;19278:14;;;;;;;;;;;;;;19250:8;19259:1;19250:11;;;;;;;;;;;;;;-1:-1:-1;;;;;19243:34:0;;;:50;;;;:::i;:::-;19218:75;;19308:22;19333:11;19347:1;19345;:3;19333:16;;;;;;;;;;;;;;19308:41;;19382:9;19394:11;19408:1;19406;:3;19394:16;;;;;;;;;;;;;;19382:28;;19378:1648;19416:11;19428:1;19416:14;;;;;;;;;;;;;;19412:1;:18;19378:1648;;;19456:27;;:::i;:::-;19526:12;19540:15;19557;19574:21;19610:12;19623:1;19610:15;;;;;;;;;;;;;;19599:63;;;;;;;;;;;;;;19738:2;19727:13;;;19703:37;;19784:23;19806:1;19784:23;;;;19763:18;;;:44;19857:4;:14;;;19830:23;;;:42;-1:-1:-1;;;;;19895:23:0;;;:16;;;:23;19941:29;;:19;;;:29;19993:20;;;:31;-1:-1:-1;;20067:14:0;;20093:4;;-1:-1:-1;20067:9:0;;-1:-1:-1;;;20077:3:0;;;20067:14;;;;;;;;;;;;-1:-1:-1;;;;;20067:31:0;;20064:595;;;20123:17;20143:58;20186:14;20143:38;20162:11;:18;;;20143:14;:18;;:38;;;;:::i;:::-;:42;:58;:42;:58;:::i;:::-;20123:78;;20241:11;:23;;;20268:1;20241:28;20238:402;;;20384:8;20393:1;20384:11;;;;;;;;;;;;;;-1:-1:-1;;;;;20377:28:0;;20406:11;:19;;;20427:9;20377:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20238:402;;;20566:8;20575:1;20566:11;;;;;;;;;;;;;;-1:-1:-1;;;;;20559:28:0;;20588:11;:16;;;20606:9;20559:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20238:402;20064:595;;20698:21;;20695:316;;20762:11;:19;;;-1:-1:-1;;;;;20749:42:0;;20792:9;20802:1;20792:12;;;;;;;;;;;;;;20806:11;:16;;;20824:11;:20;;;20749:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20695:316;;;20907:11;:19;;;-1:-1:-1;;;;;20894:43:0;;20938:9;20948:1;20938:12;;;;;;;;;;;;;;20952:11;:16;;;20970:11;:20;;;20894:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20695:316;-1:-1:-1;19432:3:0;;19378:1648;;;-1:-1:-1;;;19136:3:0;;19093:1944;;;;18856:2188;;;;;:::o;13197:104::-;-1:-1:-1;;;;;13273:20:0;;12059:42;13273:20;13197:104;;;:::o;9230:211::-;9347:86;9367:5;9397:23;;;9422:2;9426:5;9374:58;;;;;;;;;;;;;;-1:-1:-1;;9374:58:0;;;;;;;;;;;;;;-1:-1:-1;;;;;9374:58:0;-1:-1:-1;;;;;;9374:58:0;;;;;;;;;;9347:19;:86::i;:::-;9230:211;;;:::o;7457:226::-;7515:7;7539:6;7535:47;;-1:-1:-1;7569:1:0;7562:8;;7535:47;7606:5;;;7610:1;7606;:5;:1;7630:5;;;;;:10;7622:32;;;;-1:-1:-1;;;7622:32:0;;;;;;;;7691:141;7749:7;7781:1;7777;:5;7769:32;;;;-1:-1:-1;;;7769:32:0;;;;;;;;;7823:1;7819;:5;;;;;;;7691:141;-1:-1:-1;;;7691:141:0:o;10803:1046::-;11463:12;11477:23;11512:5;-1:-1:-1;;;;;11504:19:0;11524:4;11504:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11462:67;;;;11548:7;11540:52;;;;-1:-1:-1;;;11540:52:0;;;;;;;;;11609:17;;:21;11605:237;;11764:10;11753:30;;;;;;;;;;;;;;11745:85;;;;-1:-1:-1;;;11745:85:0;;;;;;;;;10803:1046;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5:130::-;72:20;;97:33;72:20;97:33;;317:707;;434:3;427:4;419:6;415:17;411:27;401:2;;-1:-1;;442:12;401:2;489:6;476:20;511:80;526:64;583:6;526:64;;;511:80;;;619:21;;;502:89;-1:-1;663:4;676:14;;;;651:17;;;765;;;756:27;;;;753:36;-1:-1;750:2;;;802:1;;792:12;750:2;827:1;812:206;837:6;834:1;831:13;812:206;;;85:6;72:20;97:33;124:5;97:33;;;905:50;;969:14;;;;997;;;;859:1;852:9;812:206;;;816:14;;;;;394:630;;;;;1048:705;;1174:3;1167:4;1159:6;1155:17;1151:27;1141:2;;-1:-1;;1182:12;1141:2;1229:6;1216:20;1251:89;1266:73;1332:6;1266:73;;1251:89;1368:21;;;1242:98;-1:-1;1412:4;1425:14;;;;1400:17;;;1520:1;1505:242;1530:6;1527:1;1524:13;1505:242;;;1613:3;1600:17;1404:6;1588:30;2731:3;2712:17;1588:30;2712:17;2708:27;2698:2;;1520:1;;2739:12;2698:2;1412:4;1588:30;;2773:20;2808:64;2823:48;2864:6;2823:48;;2808:64;2892:6;2885:5;2878:21;2916:17;2996:3;2916:17;2987:6;1588:30;2978:16;;2975:25;2972:2;;;1520:1;;3003:12;2972:2;27275:6;2916:17;1588:30;2916:17;1412:4;2954:5;2950:16;27252:30;-1:-1;1520:1;27313:16;;;;;27306:27;;;;1625:59;;-1:-1;1698:14;;;;1726;;;;1552:1;1545:9;1505:242;;1779:707;;1896:3;1889:4;1881:6;1877:17;1873:27;1863:2;;-1:-1;;1904:12;1863:2;1951:6;1938:20;1973:80;1988:64;2045:6;1988:64;;1973:80;2081:21;;;1964:89;-1:-1;2125:4;2138:14;;;;2113:17;;;2227;;;2218:27;;;;2215:36;-1:-1;2212:2;;;2264:1;;2254:12;2212:2;2289:1;2274:206;2299:6;2296:1;2293:13;2274:206;;;3596:20;;2367:50;;2431:14;;;;2459;;;;2321:1;2314:9;2274:206;;3807:241;;3911:2;3899:9;3890:7;3886:23;3882:32;3879:2;;;-1:-1;;3917:12;3879:2;85:6;72:20;97:33;124:5;97:33;;4055:801;;;;;4246:3;4234:9;4225:7;4221:23;4217:33;4214:2;;;-1:-1;;4253:12;4214:2;234:6;228:13;246:41;281:5;246:41;;;4424:2;4482:22;;228:13;4305:82;;-1:-1;246:41;228:13;246:41;;;4551:2;4601:22;;3744:13;4691:2;4676:18;;4670:25;4432:82;;-1:-1;3744:13;-1:-1;4715:18;4704:30;;4701:2;;;-1:-1;;4737:12;4701:2;4823:6;4812:9;4808:22;3191:3;3184:4;3176:6;3172:17;3168:27;3158:2;;-1:-1;;3199:12;3158:2;3239:6;3233:13;3219:27;;3261:64;3276:48;3317:6;3276:48;;3261:64;3345:6;3338:5;3331:21;3449:3;4424:2;3440:6;3373;3431:16;;3428:25;3425:2;;;-1:-1;;3456:12;3425:2;3476:39;3508:6;4424:2;3407:5;3403:16;4424:2;3373:6;3369:17;3476:39;;;4208:648;;;;-1:-1;4208:648;;-1:-1;;;;4208:648;4863:1935;;;;;;;;;;;5229:3;5217:9;5208:7;5204:23;5200:33;5197:2;;;-1:-1;;5236:12;5197:2;5298:53;5343:7;5319:22;5298:53;;;5288:63;;5406:53;5451:7;5388:2;5431:9;5427:22;5406:53;;;5396:63;;5496:2;5539:9;5535:22;3596:20;5504:63;;5604:2;5647:9;5643:22;3596:20;5612:63;;5740:3;5729:9;5725:19;5712:33;5765:18;;5757:6;5754:30;5751:2;;;-1:-1;;5787:12;5751:2;5817:78;5887:7;5878:6;5867:9;5863:22;5817:78;;;5807:88;;5960:3;5949:9;5945:19;5932:33;5918:47;;5765:18;5977:6;5974:30;5971:2;;;-1:-1;;6007:12;5971:2;6037:78;6107:7;6098:6;6087:9;6083:22;6037:78;;;6027:88;;6180:3;6169:9;6165:19;6152:33;6138:47;;5765:18;6197:6;6194:30;6191:2;;;-1:-1;;6227:12;6191:2;6257:78;6327:7;6318:6;6307:9;6303:22;6257:78;;;6247:88;;6372:3;6416:9;6412:22;3596:20;6381:63;;6509:3;6498:9;6494:19;6481:33;6467:47;;5765:18;6526:6;6523:30;6520:2;;;-1:-1;;6556:12;6520:2;;6586:87;6665:7;6656:6;6645:9;6641:22;6586:87;;;6576:97;;;6710:3;6754:9;6750:22;3596:20;6719:63;;5191:1607;;;;;;;;;;;;;;6805:257;;6917:2;6905:9;6896:7;6892:23;6888:32;6885:2;;;-1:-1;;6923:12;6885:2;2575:6;2569:13;28074:5;26581:13;26574:21;28052:5;28049:32;28039:2;;-1:-1;;28085:12;7069:263;;7184:2;7172:9;7163:7;7159:23;7155:32;7152:2;;;-1:-1;;7190:12;7152:2;-1:-1;3744:13;;7146:186;-1:-1;7146:186;7339:1819;;;;;;;;;7696:3;7684:9;7675:7;7671:23;7667:33;7664:2;;;-1:-1;;7703:12;7664:2;7786:22;3596:20;7755:63;;7855:2;7898:9;7894:22;3596:20;7863:63;;7991:2;7980:9;7976:18;7963:32;8015:18;;8007:6;8004:30;8001:2;;;-1:-1;;8037:12;8001:2;8067:78;8137:7;8128:6;8117:9;8113:22;8067:78;;;8057:88;;8210:2;8199:9;8195:18;8182:32;8168:46;;8015:18;8226:6;8223:30;8220:2;;;-1:-1;;8256:12;8220:2;8286:78;8356:7;8347:6;8336:9;8332:22;8286:78;;;8276:88;;8429:3;8418:9;8414:19;8401:33;8387:47;;8015:18;8446:6;8443:30;8440:2;;;-1:-1;;8476:12;8440:2;8506:78;8576:7;8567:6;8556:9;8552:22;8506:78;;;8496:88;;8649:3;8638:9;8634:19;8621:33;8607:47;;8015:18;8666:6;8663:30;8660:2;;;-1:-1;;8696:12;8660:2;8726:78;8796:7;8787:6;8776:9;8772:22;8726:78;;;8716:88;;8869:3;8858:9;8854:19;8841:33;8827:47;;8015:18;8886:6;8883:30;8880:2;;;-1:-1;;8916:12;8880:2;;8946:87;9025:7;9016:6;9005:9;9001:22;8946:87;;;8936:97;;;9070:3;9114:9;9110:22;3596:20;9079:63;;7658:1500;;;;;;;;;;;;15122:271;;9944:5;25774:12;10055:52;10100:6;10095:3;10088:4;10081:5;10077:16;10055:52;;;10119:16;;;;;15256:137;-1:-1;;15256:137;15400:222;-1:-1;;;;;26669:54;;;;9385:37;;15527:2;15512:18;;15498:124;15874:684;-1:-1;;;;;26669:54;;;9385:37;;26669:54;;;16286:2;16271:18;;9385:37;26669:54;;;;16377:2;16362:18;;9244:58;16460:2;16445:18;;15073:37;;;;16543:3;16528:19;;15073:37;;;;16121:3;16106:19;;16092:466;16565:556;-1:-1;;;;;26669:54;;;9385:37;;26669:54;;;16941:2;16926:18;;9385:37;26669:54;;17024:2;17009:18;;9385:37;17107:2;17092:18;;15073:37;;;;16776:3;16761:19;;16747:374;17128:528;;4715:18;;26680:42;;;;26673:5;26669:54;9392:3;9385:37;26680:42;26673:5;26669:54;17493:2;17482:9;17478:18;9385:37;;17329:2;17530;17519:9;17515:18;17508:48;9576:5;25774:12;25930:6;17329:2;17318:9;17314:18;25918:19;9669:52;9714:6;25958:14;17318:9;25958:14;17493:2;9695:5;9691:16;9669:52;;;27708:7;27692:14;-1:-1;;27688:28;9733:39;;;;25958:14;9733:39;;17300:356;-1:-1;;;;17300:356;17663:333;-1:-1;;;;;26669:54;;;;9385:37;;17982:2;17967:18;;15073:37;17818:2;17803:18;;17789:207;18003:416;18203:2;18217:47;;;10372:2;18188:18;;;25918:19;10408:25;25958:14;;;10388:46;10453:12;;;18174:245;18426:416;18626:2;18640:47;;;10704:2;18611:18;;;25918:19;10740:29;25958:14;;;10720:50;10789:12;;;18597:245;18849:416;19049:2;19063:47;;;11040:2;19034:18;;;25918:19;11076:34;25958:14;;;11056:55;-1:-1;;;11131:12;;;11124:30;11173:12;;;19020:245;19272:416;19472:2;19486:47;;;11424:2;19457:18;;;25918:19;11460:34;25958:14;;;11440:55;-1:-1;;;11515:12;;;11508:35;11562:12;;;19443:245;19695:416;19895:2;19909:47;;;11813:2;19880:18;;;25918:19;-1:-1;;;25958:14;;;11829:36;11884:12;;;19866:245;20118:416;20318:2;20332:47;;;20303:18;;;25918:19;12171:34;25958:14;;;12151:55;12225:12;;;20289:245;20541:416;20741:2;20755:47;;;12476:2;20726:18;;;25918:19;-1:-1;;;25958:14;;;12492:37;12548:12;;;20712:245;20964:416;21164:2;21178:47;;;12799:2;21149:18;;;25918:19;12835:34;25958:14;;;12815:55;-1:-1;;;12890:12;;;12883:26;12928:12;;;21135:245;21387:416;21587:2;21601:47;;;13179:1;21572:18;;;25918:19;-1:-1;;;25958:14;;;13194:32;13245:12;;;21558:245;21810:416;22010:2;22024:47;;;13496:2;21995:18;;;25918:19;13532:34;25958:14;;;13512:55;-1:-1;;;13587:12;;;13580:30;13629:12;;;21981:245;22233:416;22433:2;22447:47;;;13880:2;22418:18;;;25918:19;-1:-1;;;25958:14;;;13896:39;13954:12;;;22404:245;22656:416;22856:2;22870:47;;;14205:1;22841:18;;;25918:19;-1:-1;;;25958:14;;;14220:32;14271:12;;;22827:245;23079:416;23279:2;23293:47;;;14522:2;23264:18;;;25918:19;14558:34;25958:14;;;14538:55;-1:-1;;;14613:12;;;14606:34;14659:12;;;23250:245;23502:416;23702:2;23716:47;;;14910:1;23687:18;;;25918:19;-1:-1;;;25958:14;;;14925:32;14976:12;;;23673:245;23925:222;15073:37;;;24052:2;24037:18;;24023:124;24154:256;24216:2;24210:9;24242:17;;;24317:18;24302:34;;24338:22;;;24299:62;24296:2;;;24374:1;;24364:12;24296:2;24216;24383:22;24194:216;;-1:-1;24194:216;24417:304;;24576:18;24568:6;24565:30;24562:2;;;-1:-1;;24598:12;24562:2;-1:-1;24643:4;24631:17;;;24696:15;;24499:222;25359:321;;25502:18;25494:6;25491:30;25488:2;;;-1:-1;;25524:12;25488:2;-1:-1;27708:7;25578:17;-1:-1;;25574:33;25665:4;25655:15;;25425:255;27348:268;27413:1;27420:101;27434:6;27431:1;27428:13;27420:101;;;27501:11;;;27495:18;27482:11;;;27475:39;27456:2;27449:10;27420:101;;;27536:6;27533:1;27530:13;27527:2;;;-1:-1;;27413:1;27583:16;;27576:27;27397:219;27729:117;-1:-1;;;;;26669:54;;27788:35;;27778:2;;27837:1;;27827:12;27778:2;27772:74;
Swarm Source
ipfs://d6f7c73760cdcac7bebec15c56e8f055195bfd62464d58ca6fe11ad9ad0321d2
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.