Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 609 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
WITHDRAW | 19544822 | 166 days ago | IN | 0 ETH | 0.00041075 | ||||
CLAIMREWARD | 19525331 | 169 days ago | IN | 0 ETH | 0.00075952 | ||||
CLAIMREWARD | 19525319 | 169 days ago | IN | 0 ETH | 0.00068626 | ||||
CLAIMREWARD | 19493737 | 173 days ago | IN | 0 ETH | 0.00046918 | ||||
CLAIMREWARD | 19491612 | 174 days ago | IN | 0 ETH | 0.00067618 | ||||
CLAIMREWARD | 19489305 | 174 days ago | IN | 0 ETH | 0.0006381 | ||||
CLAIMREWARD | 19462020 | 178 days ago | IN | 0 ETH | 0.0014253 | ||||
CLAIMREWARD | 19363906 | 192 days ago | IN | 0 ETH | 0.00345262 | ||||
CLAIMREWARD | 19362205 | 192 days ago | IN | 0 ETH | 0.0016051 | ||||
CLAIMREWARD | 19359909 | 192 days ago | IN | 0 ETH | 0.00149896 | ||||
CLAIMREWARD | 19359185 | 192 days ago | IN | 0 ETH | 0.00130598 | ||||
CLAIMREWARD | 19354869 | 193 days ago | IN | 0 ETH | 0.00120615 | ||||
CLAIMREWARD | 19353653 | 193 days ago | IN | 0 ETH | 0.00114276 | ||||
CLAIMREWARD | 19343183 | 194 days ago | IN | 0 ETH | 0.00130806 | ||||
CLAIMREWARD | 19342152 | 195 days ago | IN | 0 ETH | 0.00159361 | ||||
CLAIMREWARD | 19340453 | 195 days ago | IN | 0 ETH | 0.00127655 | ||||
CLAIMREWARD | 19340048 | 195 days ago | IN | 0 ETH | 0.00116077 | ||||
CLAIMREWARD | 19338589 | 195 days ago | IN | 0 ETH | 0.00113097 | ||||
CLAIMREWARD | 19338583 | 195 days ago | IN | 0 ETH | 0.00118203 | ||||
CLAIMREWARD | 19338564 | 195 days ago | IN | 0 ETH | 0.00118203 | ||||
CLAIMREWARD | 19338561 | 195 days ago | IN | 0 ETH | 0.00133584 | ||||
CLAIMREWARD | 19338553 | 195 days ago | IN | 0 ETH | 0.00115473 | ||||
CLAIMREWARD | 19335436 | 195 days ago | IN | 0 ETH | 0.00161447 | ||||
CLAIMREWARD | 19335373 | 195 days ago | IN | 0 ETH | 0.00164435 | ||||
CLAIMREWARD | 19331456 | 196 days ago | IN | 0 ETH | 0.0014462 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
PabloStake
Compiler Version
v0.7.4+commit.3f05b770
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-11-22 */ // SPDX-License-Identifier: UNLICENSED pragma solidity 0.7.4; library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } function ceil(uint a, uint m) internal pure returns (uint r) { return (a + m - 1) / m * m; } } // ---------------------------------------------------------------------------- // Owned contract // ---------------------------------------------------------------------------- contract Owned { address payable public owner; event OwnershipTransferred(address indexed _from, address indexed _to); constructor() { owner = msg.sender; } modifier onlyOwner { require(msg.sender == owner); _; } function transferOwnership(address payable _newOwner) public onlyOwner { require(_newOwner != address(0), "ERC20: sending to the zero address"); owner = _newOwner; emit OwnershipTransferred(msg.sender, _newOwner); } } // ---------------------------------------------------------------------------- // ERC Token Standard #20 Interface // ---------------------------------------------------------------------------- interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address tokenOwner) external view returns (uint256 balance); function allowance(address tokenOwner, address spender) external view returns (uint256 remaining); function transfer(address to, uint256 tokens) external returns (bool success); function approve(address spender, uint256 tokens) external returns (bool success); function transferFrom(address from, address to, uint256 tokens) external returns (bool success); function burnTokens(uint256 _amount) external; event Transfer(address indexed from, address indexed to, uint256 tokens); event Approval(address indexed tokenOwner, address indexed spender, uint256 tokens); } // ---------------------------------------------------------------------------- // ERC20 Token, with the addition of symbol, name and decimals and assisted // token transfers // ---------------------------------------------------------------------------- contract PabloStake is Owned { using SafeMath for uint256; address public Pablo = 0x89DBFD81c99cAd2C6cb2C374A5622dD1135eFAaF; modifier onlyToken { require(msg.sender == Pablo); _; } uint256 public totalStakes = 0; uint256 unstakingFee = 0; // 0% uint256 public totalDividends = 0; uint256 private scaledRemainder = 0; uint256 private scaling = uint256(10) ** 12; uint public round = 1; bool public breaker = false; // unlocked mapping(address => uint256) public farmTime; address[] public farmers; uint256 public profitGenerated = 0; struct USER{ uint256 stakedTokens; uint256 lastDividends; uint256 fromTotalDividend; uint round; uint256 remainder; bool initialized; } address[] internal stakeholders; mapping(address => USER) stakers; mapping (uint => uint256) public payouts; // keeps record of each payout event STAKED(address staker, uint256 tokens, uint256 time); event EARNED(address staker, uint256 tokens); event UNSTAKED(address staker, uint256 tokens, uint256 time); event PAYOUT(uint256 round, uint256 tokens, address sender); event CLAIMEDREWARD(address staker, uint256 reward); event WithdrawalLockDurationSet(uint256 value, address sender); function setPABLO(address _token) external onlyOwner { require(_token != address(0), "ERC20: Setting Zero Address"); Pablo = _token; } function unlockTime(address _staker) public view returns(uint256){ return farmTime[_staker]+30 days; } function setBreaker(bool _breaker) external onlyOwner { breaker = _breaker; } function getFarmersLength() public view returns (uint256) { return farmers.length; } function isStakeholder(address _address) public view returns(bool) { if(stakers[_address].initialized) return true; else return false; } function addStakeholder(address _stakeholder) internal { (bool _isStakeholder) = isStakeholder(_stakeholder); if(!_isStakeholder) { stakers[_stakeholder].initialized = true; farmers.push(_stakeholder); } farmTime[_stakeholder] = block.timestamp; } // ------------------------------------------------------------------------ // Token holders can stake their tokens using this function // @param tokens number of tokens to stake // ------------------------------------------------------------------------ function STAKE(uint256 tokens) external { require(IERC20(Pablo).transferFrom(msg.sender, address(this), tokens), "Tokens cannot be transferred from user account"); uint256 owing = pendingReward(msg.sender); stakers[msg.sender].remainder += owing; stakers[msg.sender].stakedTokens = tokens.add(stakers[msg.sender].stakedTokens); stakers[msg.sender].lastDividends = owing; stakers[msg.sender].fromTotalDividend= totalDividends; stakers[msg.sender].round = round; totalStakes = totalStakes.add(tokens); addStakeholder(msg.sender); emit STAKED(msg.sender, tokens, block.timestamp); } // ------------------------------------------------------------------------ // Owners can send the funds to be distributed to stakers using this function // @param tokens number of tokens to distribute // ------------------------------------------------------------------------ function ADDFUNDS(uint256 tokens) external { require(IERC20(Pablo).transferFrom(msg.sender, address(this), tokens), "Tokens cannot be transferred from funder account"); profitGenerated = profitGenerated.add(tokens); _addPayout(tokens); } // ------------------------------------------------------------------------ // Owners can send the funds to be distributed to stakers using this function // @param tokens number of tokens to distribute // ------------------------------------------------------------------------ function ADDFUNDSby(uint256 tokens) external onlyToken{ profitGenerated = profitGenerated.add(tokens); _addPayout(tokens); } // ------------------------------------------------------------------------ // Private function to register payouts // ------------------------------------------------------------------------ function _addPayout(uint256 tokens) private{ // divide the funds among the currently staked tokens // scale the deposit and add the previous remainder uint256 available = (tokens.mul(scaling)).add(scaledRemainder); uint256 dividendPerToken = available.div(totalStakes); scaledRemainder = available.mod(totalStakes); totalDividends = totalDividends.add(dividendPerToken); payouts[round] = payouts[round - 1].add(dividendPerToken); emit PAYOUT(round, tokens, msg.sender); round++; } // ------------------------------------------------------------------------ // Stakers can claim their pending rewards using this function // ------------------------------------------------------------------------ function CLAIMREWARD() public { if(totalDividends > stakers[msg.sender].fromTotalDividend){ uint256 owing = pendingReward(msg.sender); owing = owing.add(stakers[msg.sender].remainder); stakers[msg.sender].remainder = 0; IERC20(Pablo).approve(address(this), owing); require(IERC20(Pablo).transferFrom(address(this), msg.sender,owing), "ERROR: error in sending reward from contract"); emit CLAIMEDREWARD(msg.sender, owing); stakers[msg.sender].lastDividends = owing; // unscaled stakers[msg.sender].round = round; // update the round stakers[msg.sender].fromTotalDividend = totalDividends; // scaled } } // ------------------------------------------------------------------------ // Get the pending rewards of the staker // @param _staker the address of the staker // ------------------------------------------------------------------------ function pendingReward(address staker) private returns (uint256) { require(staker != address(0), "ERC20: sending to the zero address"); uint stakersRound = stakers[staker].round; uint256 amount = ((totalDividends.sub(payouts[stakersRound - 1])).mul(stakers[staker].stakedTokens)).div(scaling); stakers[staker].remainder += ((totalDividends.sub(payouts[stakersRound - 1])).mul(stakers[staker].stakedTokens)) % scaling ; return amount; } function getPendingReward(address staker) public view returns(uint256 _pendingReward) { require(staker != address(0), "ERC20: sending to the zero address"); uint stakersRound = stakers[staker].round; uint256 amount = ((totalDividends.sub(payouts[stakersRound - 1])).mul(stakers[staker].stakedTokens)).div(scaling); amount += ((totalDividends.sub(payouts[stakersRound - 1])).mul(stakers[staker].stakedTokens)) % scaling ; return (amount.add(stakers[staker].remainder)); } // ------------------------------------------------------------------------ // Stakers can un stake the staked tokens using this function // @param tokens the number of tokens to withdraw // ------------------------------------------------------------------------ function WITHDRAW(uint256 tokens) external { require(breaker == false, "Admin Restricted WITHDRAW"); require(stakers[msg.sender].stakedTokens >= tokens && tokens > 0, "Invalid token amount to withdraw"); if(unlockTime(msg.sender) >= block.timestamp){ unstakingFee = 500; //50% } uint256 _unstakingFee = (onePercent(tokens).mul(unstakingFee)).div(10); uint256 owing = pendingReward(msg.sender); stakers[msg.sender].remainder += owing; stakers[msg.sender].stakedTokens = stakers[msg.sender].stakedTokens.sub(tokens); stakers[msg.sender].lastDividends = owing; stakers[msg.sender].fromTotalDividend= totalDividends; stakers[msg.sender].round = round; totalStakes = totalStakes.sub(tokens); if(_unstakingFee > 0){ require(IERC20(Pablo).transfer(owner, (_unstakingFee)), "Error in sending tokens"); } require(IERC20(Pablo).transfer(msg.sender, tokens.sub(_unstakingFee)), "Error in un-staking tokens"); if(stakers[msg.sender].stakedTokens == 0){ farmTime[msg.sender] = 0; } emit UNSTAKED(msg.sender, tokens.sub(_unstakingFee), block.timestamp); } // ------------------------------------------------------------------------ // Private function to calculate 1% percentage // ------------------------------------------------------------------------ function onePercent(uint256 _tokens) private pure returns (uint256){ uint256 roundValue = _tokens.ceil(100); uint onePercentofTokens = roundValue.mul(100).div(100 * 10**uint(2)); return onePercentofTokens; } // ------------------------------------------------------------------------ // Get the number of tokens staked by a staker // @param _staker the address of the staker // ------------------------------------------------------------------------ function StakedPabloTokens(address staker) public view returns(uint256 stakedPablo){ require(staker != address(0), "ERC20: sending to the zero address"); return stakers[staker].stakedTokens; } function saveEmergencyTokens(address tokenAddress) external onlyOwner { IERC20 token = IERC20(tokenAddress); uint256 tokenBalance = token.balanceOf(address(this)); token.transfer(owner, tokenBalance); } // Function to withdraw ETH sent to the contract by mistake function saveETH() external onlyOwner { payable(owner).transfer(address(this).balance); } // Fallback function to receive ETH receive() external payable {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"staker","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"CLAIMEDREWARD","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"staker","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"EARNED","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"round","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"},{"indexed":false,"internalType":"address","name":"sender","type":"address"}],"name":"PAYOUT","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"staker","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"STAKED","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"staker","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"UNSTAKED","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"address","name":"sender","type":"address"}],"name":"WithdrawalLockDurationSet","type":"event"},{"inputs":[{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"ADDFUNDS","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"ADDFUNDSby","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"CLAIMREWARD","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Pablo","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"STAKE","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"StakedPabloTokens","outputs":[{"internalType":"uint256","name":"stakedPablo","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"WITHDRAW","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"breaker","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"farmTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"farmers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFarmersLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"getPendingReward","outputs":[{"internalType":"uint256","name":"_pendingReward","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"isStakeholder","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"payouts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"profitGenerated","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"round","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"saveETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"saveEmergencyTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_breaker","type":"bool"}],"name":"setBreaker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"setPABLO","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalDividends","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalStakes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_staker","type":"address"}],"name":"unlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052600180546001600160a01b0319167389dbfd81c99cad2c6cb2c374a5622dd1135efaaf1781556000600281905560038190556004819055600581905564e8d4a510006006556007919091556008805460ff19169055600b5534801561006857600080fd5b50600080546001600160a01b031916331790556119518061008a6000396000f3fe60806040526004361061016a5760003560e01c806376b467b7116100d1578063bf9befb11161008a578063e7572fe911610064578063e7572fe9146104a7578063ef037b90146104bc578063f055862d146104ef578063f2fde38b1461051957610171565b8063bf9befb114610435578063c3f344a81461044a578063ca84d5911461047d57610171565b806376b467b714610353578063896f1a95146103865780638afdd6691461039b5780638da5cb5b146103e1578063997664d7146103f6578063b53d6c241461040b57610171565b80634baf782e116101235780634baf782e146102645780634df9d6ba146102795780634e11e06f146102ac5780634f6c8f8e146102df5780635c0aeb0e146102f45780636b9703111461032057610171565b80630f41e0d214610176578063146ca5311461019f57806329652e86146101c65780632c75bcda146101f05780633b88eccf1461021c5780634af0b4eb1461024f57610171565b3661017157005b600080fd5b34801561018257600080fd5b5061018b61054c565b604080519115158252519081900360200190f35b3480156101ab57600080fd5b506101b4610555565b60408051918252519081900360200190f35b3480156101d257600080fd5b506101b4600480360360208110156101e957600080fd5b503561055b565b3480156101fc57600080fd5b5061021a6004803603602081101561021357600080fd5b503561056d565b005b34801561022857600080fd5b5061021a6004803603602081101561023f57600080fd5b50356001600160a01b031661091d565b34801561025b57600080fd5b506101b46109b1565b34801561027057600080fd5b5061021a6109b7565b34801561028557600080fd5b506101b46004803603602081101561029c57600080fd5b50356001600160a01b0316610bbe565b3480156102b857600080fd5b5061021a600480360360208110156102cf57600080fd5b50356001600160a01b0316610cd7565b3480156102eb57600080fd5b506101b4610df1565b34801561030057600080fd5b5061021a6004803603602081101561031757600080fd5b50351515610df7565b34801561032c57600080fd5b506101b46004803603602081101561034357600080fd5b50356001600160a01b0316610e21565b34801561035f57600080fd5b506101b46004803603602081101561037657600080fd5b50356001600160a01b0316610e84565b34801561039257600080fd5b5061021a610ea4565b3480156103a757600080fd5b506103c5600480360360208110156103be57600080fd5b5035610ef8565b604080516001600160a01b039092168252519081900360200190f35b3480156103ed57600080fd5b506103c5610f22565b34801561040257600080fd5b506101b4610f31565b34801561041757600080fd5b5061021a6004803603602081101561042e57600080fd5b5035610f37565b34801561044157600080fd5b506101b4611011565b34801561045657600080fd5b506101b46004803603602081101561046d57600080fd5b50356001600160a01b0316611017565b34801561048957600080fd5b5061021a600480360360208110156104a057600080fd5b5035611029565b3480156104b357600080fd5b506103c56111a8565b3480156104c857600080fd5b5061018b600480360360208110156104df57600080fd5b50356001600160a01b03166111b7565b3480156104fb57600080fd5b5061021a6004803603602081101561051257600080fd5b50356111eb565b34801561052557600080fd5b5061021a6004803603602081101561053c57600080fd5b50356001600160a01b0316611202565b60085460ff1681565b60075481565b600e6020526000908152604090205481565b60085460ff16156105c5576040805162461bcd60e51b815260206004820152601960248201527f41646d696e205265737472696374656420574954484452415700000000000000604482015290519081900360640190fd5b336000908152600d602052604090205481118015906105e45750600081115b610635576040805162461bcd60e51b815260206004820181905260248201527f496e76616c696420746f6b656e20616d6f756e7420746f207769746864726177604482015290519081900360640190fd5b4261063f33610e84565b1061064b576101f46003555b600061066d600a610667600354610661866112a9565b906112c8565b9061132a565b9050600061067a3361136c565b336000908152600d6020526040902060048101805483019055549091506106a1908461147a565b336000908152600d6020526040902090815560018101829055600454600280830191909155600754600390920191909155546106dd908461147a565b60025581156107c057600154600080546040805163a9059cbb60e01b81526001600160a01b039283166004820152602481018790529051919093169263a9059cbb9260448083019360209390929083900390910190829087803b15801561074357600080fd5b505af1158015610757573d6000803e3d6000fd5b505050506040513d602081101561076d57600080fd5b50516107c0576040805162461bcd60e51b815260206004820152601760248201527f4572726f7220696e2073656e64696e6720746f6b656e73000000000000000000604482015290519081900360640190fd5b6001546001600160a01b031663a9059cbb336107dc868661147a565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561082257600080fd5b505af1158015610836573d6000803e3d6000fd5b505050506040513d602081101561084c57600080fd5b505161089f576040805162461bcd60e51b815260206004820152601a60248201527f4572726f7220696e20756e2d7374616b696e6720746f6b656e73000000000000604482015290519081900360640190fd5b336000908152600d60205260409020546108c457336000908152600960205260408120555b7faeb913af138cc126643912346d844a49a83761eb58fcfc9e571fc99e1b3d9fa2336108f0858561147a565b604080516001600160a01b03909316835260208301919091524282820152519081900360600190a1505050565b6000546001600160a01b0316331461093457600080fd5b6001600160a01b03811661098f576040805162461bcd60e51b815260206004820152601b60248201527f45524332303a2053657474696e67205a65726f20416464726573730000000000604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b600b5481565b336000908152600d60205260409020600201546004541115610bbc5760006109de3361136c565b336000908152600d60205260409020600401549091506109ff9082906114bc565b336000908152600d602090815260408083206004908101849055600154825163095ea7b360e01b815230928101929092526024820186905291519495506001600160a01b039091169363095ea7b393604480840194938390030190829087803b158015610a6b57600080fd5b505af1158015610a7f573d6000803e3d6000fd5b505050506040513d6020811015610a9557600080fd5b5050600154604080516323b872dd60e01b81523060048201523360248201526044810184905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b158015610af157600080fd5b505af1158015610b05573d6000803e3d6000fd5b505050506040513d6020811015610b1b57600080fd5b5051610b585760405162461bcd60e51b815260040180806020018281038252602c81526020018061184f602c913960400191505060405180910390fd5b604080513381526020810183905281517f8a0128b5f12decc7d739e546c0521c3388920368915393f80120bc5b408c7c9e929181900390910190a1336000908152600d60205260409020600181019190915560075460038201556004546002909101555b565b60006001600160a01b038216610c055760405162461bcd60e51b815260040180806020018281038252602281526020018061187b6022913960400191505060405180910390fd5b6001600160a01b0382166000908152600d602090815260408083206003810154600654915460001982018652600e90945291842054600454929493610c529361066792610661919061147a565b6006546001600160a01b0386166000908152600d602090815260408083205460001988018452600e909252909120546004549394509192610c9792610661919061147a565b81610c9e57fe5b6001600160a01b0386166000908152600d60205260409020600401549190069190910190610ccd9082906114bc565b925050505b919050565b6000546001600160a01b03163314610cee57600080fd5b604080516370a0823160e01b8152306004820152905182916000916001600160a01b038416916370a08231916024808301926020929190829003018186803b158015610d3957600080fd5b505afa158015610d4d573d6000803e3d6000fd5b505050506040513d6020811015610d6357600080fd5b5051600080546040805163a9059cbb60e01b81526001600160a01b0392831660048201526024810185905290519394509085169263a9059cbb92604480840193602093929083900390910190829087803b158015610dc057600080fd5b505af1158015610dd4573d6000803e3d6000fd5b505050506040513d6020811015610dea57600080fd5b5050505050565b600a5490565b6000546001600160a01b03163314610e0e57600080fd5b6008805460ff1916911515919091179055565b60006001600160a01b038216610e685760405162461bcd60e51b815260040180806020018281038252602281526020018061187b6022913960400191505060405180910390fd5b506001600160a01b03166000908152600d602052604090205490565b6001600160a01b031660009081526009602052604090205462278d000190565b6000546001600160a01b03163314610ebb57600080fd5b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015610ef5573d6000803e3d6000fd5b50565b600a8181548110610f0857600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b031681565b60045481565b600154604080516323b872dd60e01b81523360048201523060248201526044810184905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b158015610f9157600080fd5b505af1158015610fa5573d6000803e3d6000fd5b505050506040513d6020811015610fbb57600080fd5b5051610ff85760405162461bcd60e51b81526004018080602001828103825260308152602001806118ec6030913960400191505060405180910390fd5b600b5461100590826114bc565b600b55610ef581611516565b60025481565b60096020526000908152604090205481565b600154604080516323b872dd60e01b81523360048201523060248201526044810184905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b15801561108357600080fd5b505af1158015611097573d6000803e3d6000fd5b505050506040513d60208110156110ad57600080fd5b50516110ea5760405162461bcd60e51b815260040180806020018281038252602e8152602001806118be602e913960400191505060405180910390fd5b60006110f53361136c565b336000908152600d60205260409020600481018054830190555490915061111d9083906114bc565b336000908152600d60205260409020908155600181018290556004546002808301919091556007546003909201919091555461115990836114bc565b60025561116533611601565b6040805133815260208101849052428183015290517f99b6f4b247a06a3dbcda8d2244b818e254005608c2455221a00383939a119e7c9181900360600190a15050565b6001546001600160a01b031681565b6001600160a01b0381166000908152600d602052604081206005015460ff16156111e357506001610cd2565b506000610cd2565b6001546001600160a01b03163314610ff857600080fd5b6000546001600160a01b0316331461121957600080fd5b6001600160a01b03811661125e5760405162461bcd60e51b815260040180806020018281038252602281526020018061187b6022913960400191505060405180910390fd5b600080546001600160a01b0319166001600160a01b0383169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000806112b7836064611699565b90506000610ccd6127106106678460645b6000826112d757506000611324565b828202828482816112e457fe5b04146113215760405162461bcd60e51b815260040180806020018281038252602181526020018061189d6021913960400191505060405180910390fd5b90505b92915050565b600061132183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506116b3565b60006001600160a01b0382166113b35760405162461bcd60e51b815260040180806020018281038252602281526020018061187b6022913960400191505060405180910390fd5b6001600160a01b0382166000908152600d602090815260408083206003810154600654915460001982018652600e909452918420546004549294936114009361066792610661919061147a565b6006546001600160a01b0386166000908152600d602090815260408083205460001988018452600e90925290912054600454939450919261144592610661919061147a565b8161144c57fe5b6001600160a01b03959095166000908152600d60205260409020600401805491909506019093555090919050565b600061132183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611755565b600082820183811015611321576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000611539600554611533600654856112c890919063ffffffff16565b906114bc565b905060006115526002548361132a90919063ffffffff16565b9050611569600254836117af90919063ffffffff16565b60055560045461157990826114bc565b600455600754600019016000908152600e602052604090205461159c90826114bc565b600780546000908152600e602090815260409182902093909355905481519081529182018590523382820152517fddf8c05dcee82ec75482e095e6c06768c848d5a7df7147686033433d141328b69181900360600190a1505060078054600101905550565b600061160c826111b7565b90508061167c576001600160a01b0382166000818152600d60205260408120600501805460ff19166001908117909155600a805491820181559091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b03191690911790555b506001600160a01b03166000908152600960205260409020429055565b60008182600184860103816116aa57fe5b04029392505050565b6000818361173f5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156117045781810151838201526020016116ec565b50505050905090810190601f1680156117315780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161174b57fe5b0495945050505050565b600081848411156117a75760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156117045781810151838201526020016116ec565b505050900390565b600061132183836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f00000000000000008152506000818361183b5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156117045781810151838201526020016116ec565b5082848161184557fe5b0694935050505056fe4552524f523a206572726f7220696e2073656e64696e67207265776172642066726f6d20636f6e747261637445524332303a2073656e64696e6720746f20746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77546f6b656e732063616e6e6f74206265207472616e736665727265642066726f6d2075736572206163636f756e74546f6b656e732063616e6e6f74206265207472616e736665727265642066726f6d2066756e646572206163636f756e74a2646970667358221220c90dda625bf365bab74d942eeeb7ba19fbacb02e427fa5452c8936243d19f24564736f6c63430007040033
Deployed Bytecode
0x60806040526004361061016a5760003560e01c806376b467b7116100d1578063bf9befb11161008a578063e7572fe911610064578063e7572fe9146104a7578063ef037b90146104bc578063f055862d146104ef578063f2fde38b1461051957610171565b8063bf9befb114610435578063c3f344a81461044a578063ca84d5911461047d57610171565b806376b467b714610353578063896f1a95146103865780638afdd6691461039b5780638da5cb5b146103e1578063997664d7146103f6578063b53d6c241461040b57610171565b80634baf782e116101235780634baf782e146102645780634df9d6ba146102795780634e11e06f146102ac5780634f6c8f8e146102df5780635c0aeb0e146102f45780636b9703111461032057610171565b80630f41e0d214610176578063146ca5311461019f57806329652e86146101c65780632c75bcda146101f05780633b88eccf1461021c5780634af0b4eb1461024f57610171565b3661017157005b600080fd5b34801561018257600080fd5b5061018b61054c565b604080519115158252519081900360200190f35b3480156101ab57600080fd5b506101b4610555565b60408051918252519081900360200190f35b3480156101d257600080fd5b506101b4600480360360208110156101e957600080fd5b503561055b565b3480156101fc57600080fd5b5061021a6004803603602081101561021357600080fd5b503561056d565b005b34801561022857600080fd5b5061021a6004803603602081101561023f57600080fd5b50356001600160a01b031661091d565b34801561025b57600080fd5b506101b46109b1565b34801561027057600080fd5b5061021a6109b7565b34801561028557600080fd5b506101b46004803603602081101561029c57600080fd5b50356001600160a01b0316610bbe565b3480156102b857600080fd5b5061021a600480360360208110156102cf57600080fd5b50356001600160a01b0316610cd7565b3480156102eb57600080fd5b506101b4610df1565b34801561030057600080fd5b5061021a6004803603602081101561031757600080fd5b50351515610df7565b34801561032c57600080fd5b506101b46004803603602081101561034357600080fd5b50356001600160a01b0316610e21565b34801561035f57600080fd5b506101b46004803603602081101561037657600080fd5b50356001600160a01b0316610e84565b34801561039257600080fd5b5061021a610ea4565b3480156103a757600080fd5b506103c5600480360360208110156103be57600080fd5b5035610ef8565b604080516001600160a01b039092168252519081900360200190f35b3480156103ed57600080fd5b506103c5610f22565b34801561040257600080fd5b506101b4610f31565b34801561041757600080fd5b5061021a6004803603602081101561042e57600080fd5b5035610f37565b34801561044157600080fd5b506101b4611011565b34801561045657600080fd5b506101b46004803603602081101561046d57600080fd5b50356001600160a01b0316611017565b34801561048957600080fd5b5061021a600480360360208110156104a057600080fd5b5035611029565b3480156104b357600080fd5b506103c56111a8565b3480156104c857600080fd5b5061018b600480360360208110156104df57600080fd5b50356001600160a01b03166111b7565b3480156104fb57600080fd5b5061021a6004803603602081101561051257600080fd5b50356111eb565b34801561052557600080fd5b5061021a6004803603602081101561053c57600080fd5b50356001600160a01b0316611202565b60085460ff1681565b60075481565b600e6020526000908152604090205481565b60085460ff16156105c5576040805162461bcd60e51b815260206004820152601960248201527f41646d696e205265737472696374656420574954484452415700000000000000604482015290519081900360640190fd5b336000908152600d602052604090205481118015906105e45750600081115b610635576040805162461bcd60e51b815260206004820181905260248201527f496e76616c696420746f6b656e20616d6f756e7420746f207769746864726177604482015290519081900360640190fd5b4261063f33610e84565b1061064b576101f46003555b600061066d600a610667600354610661866112a9565b906112c8565b9061132a565b9050600061067a3361136c565b336000908152600d6020526040902060048101805483019055549091506106a1908461147a565b336000908152600d6020526040902090815560018101829055600454600280830191909155600754600390920191909155546106dd908461147a565b60025581156107c057600154600080546040805163a9059cbb60e01b81526001600160a01b039283166004820152602481018790529051919093169263a9059cbb9260448083019360209390929083900390910190829087803b15801561074357600080fd5b505af1158015610757573d6000803e3d6000fd5b505050506040513d602081101561076d57600080fd5b50516107c0576040805162461bcd60e51b815260206004820152601760248201527f4572726f7220696e2073656e64696e6720746f6b656e73000000000000000000604482015290519081900360640190fd5b6001546001600160a01b031663a9059cbb336107dc868661147a565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561082257600080fd5b505af1158015610836573d6000803e3d6000fd5b505050506040513d602081101561084c57600080fd5b505161089f576040805162461bcd60e51b815260206004820152601a60248201527f4572726f7220696e20756e2d7374616b696e6720746f6b656e73000000000000604482015290519081900360640190fd5b336000908152600d60205260409020546108c457336000908152600960205260408120555b7faeb913af138cc126643912346d844a49a83761eb58fcfc9e571fc99e1b3d9fa2336108f0858561147a565b604080516001600160a01b03909316835260208301919091524282820152519081900360600190a1505050565b6000546001600160a01b0316331461093457600080fd5b6001600160a01b03811661098f576040805162461bcd60e51b815260206004820152601b60248201527f45524332303a2053657474696e67205a65726f20416464726573730000000000604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b600b5481565b336000908152600d60205260409020600201546004541115610bbc5760006109de3361136c565b336000908152600d60205260409020600401549091506109ff9082906114bc565b336000908152600d602090815260408083206004908101849055600154825163095ea7b360e01b815230928101929092526024820186905291519495506001600160a01b039091169363095ea7b393604480840194938390030190829087803b158015610a6b57600080fd5b505af1158015610a7f573d6000803e3d6000fd5b505050506040513d6020811015610a9557600080fd5b5050600154604080516323b872dd60e01b81523060048201523360248201526044810184905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b158015610af157600080fd5b505af1158015610b05573d6000803e3d6000fd5b505050506040513d6020811015610b1b57600080fd5b5051610b585760405162461bcd60e51b815260040180806020018281038252602c81526020018061184f602c913960400191505060405180910390fd5b604080513381526020810183905281517f8a0128b5f12decc7d739e546c0521c3388920368915393f80120bc5b408c7c9e929181900390910190a1336000908152600d60205260409020600181019190915560075460038201556004546002909101555b565b60006001600160a01b038216610c055760405162461bcd60e51b815260040180806020018281038252602281526020018061187b6022913960400191505060405180910390fd5b6001600160a01b0382166000908152600d602090815260408083206003810154600654915460001982018652600e90945291842054600454929493610c529361066792610661919061147a565b6006546001600160a01b0386166000908152600d602090815260408083205460001988018452600e909252909120546004549394509192610c9792610661919061147a565b81610c9e57fe5b6001600160a01b0386166000908152600d60205260409020600401549190069190910190610ccd9082906114bc565b925050505b919050565b6000546001600160a01b03163314610cee57600080fd5b604080516370a0823160e01b8152306004820152905182916000916001600160a01b038416916370a08231916024808301926020929190829003018186803b158015610d3957600080fd5b505afa158015610d4d573d6000803e3d6000fd5b505050506040513d6020811015610d6357600080fd5b5051600080546040805163a9059cbb60e01b81526001600160a01b0392831660048201526024810185905290519394509085169263a9059cbb92604480840193602093929083900390910190829087803b158015610dc057600080fd5b505af1158015610dd4573d6000803e3d6000fd5b505050506040513d6020811015610dea57600080fd5b5050505050565b600a5490565b6000546001600160a01b03163314610e0e57600080fd5b6008805460ff1916911515919091179055565b60006001600160a01b038216610e685760405162461bcd60e51b815260040180806020018281038252602281526020018061187b6022913960400191505060405180910390fd5b506001600160a01b03166000908152600d602052604090205490565b6001600160a01b031660009081526009602052604090205462278d000190565b6000546001600160a01b03163314610ebb57600080fd5b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015610ef5573d6000803e3d6000fd5b50565b600a8181548110610f0857600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b031681565b60045481565b600154604080516323b872dd60e01b81523360048201523060248201526044810184905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b158015610f9157600080fd5b505af1158015610fa5573d6000803e3d6000fd5b505050506040513d6020811015610fbb57600080fd5b5051610ff85760405162461bcd60e51b81526004018080602001828103825260308152602001806118ec6030913960400191505060405180910390fd5b600b5461100590826114bc565b600b55610ef581611516565b60025481565b60096020526000908152604090205481565b600154604080516323b872dd60e01b81523360048201523060248201526044810184905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b15801561108357600080fd5b505af1158015611097573d6000803e3d6000fd5b505050506040513d60208110156110ad57600080fd5b50516110ea5760405162461bcd60e51b815260040180806020018281038252602e8152602001806118be602e913960400191505060405180910390fd5b60006110f53361136c565b336000908152600d60205260409020600481018054830190555490915061111d9083906114bc565b336000908152600d60205260409020908155600181018290556004546002808301919091556007546003909201919091555461115990836114bc565b60025561116533611601565b6040805133815260208101849052428183015290517f99b6f4b247a06a3dbcda8d2244b818e254005608c2455221a00383939a119e7c9181900360600190a15050565b6001546001600160a01b031681565b6001600160a01b0381166000908152600d602052604081206005015460ff16156111e357506001610cd2565b506000610cd2565b6001546001600160a01b03163314610ff857600080fd5b6000546001600160a01b0316331461121957600080fd5b6001600160a01b03811661125e5760405162461bcd60e51b815260040180806020018281038252602281526020018061187b6022913960400191505060405180910390fd5b600080546001600160a01b0319166001600160a01b0383169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000806112b7836064611699565b90506000610ccd6127106106678460645b6000826112d757506000611324565b828202828482816112e457fe5b04146113215760405162461bcd60e51b815260040180806020018281038252602181526020018061189d6021913960400191505060405180910390fd5b90505b92915050565b600061132183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506116b3565b60006001600160a01b0382166113b35760405162461bcd60e51b815260040180806020018281038252602281526020018061187b6022913960400191505060405180910390fd5b6001600160a01b0382166000908152600d602090815260408083206003810154600654915460001982018652600e909452918420546004549294936114009361066792610661919061147a565b6006546001600160a01b0386166000908152600d602090815260408083205460001988018452600e90925290912054600454939450919261144592610661919061147a565b8161144c57fe5b6001600160a01b03959095166000908152600d60205260409020600401805491909506019093555090919050565b600061132183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611755565b600082820183811015611321576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000611539600554611533600654856112c890919063ffffffff16565b906114bc565b905060006115526002548361132a90919063ffffffff16565b9050611569600254836117af90919063ffffffff16565b60055560045461157990826114bc565b600455600754600019016000908152600e602052604090205461159c90826114bc565b600780546000908152600e602090815260409182902093909355905481519081529182018590523382820152517fddf8c05dcee82ec75482e095e6c06768c848d5a7df7147686033433d141328b69181900360600190a1505060078054600101905550565b600061160c826111b7565b90508061167c576001600160a01b0382166000818152600d60205260408120600501805460ff19166001908117909155600a805491820181559091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b03191690911790555b506001600160a01b03166000908152600960205260409020429055565b60008182600184860103816116aa57fe5b04029392505050565b6000818361173f5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156117045781810151838201526020016116ec565b50505050905090810190601f1680156117315780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161174b57fe5b0495945050505050565b600081848411156117a75760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156117045781810151838201526020016116ec565b505050900390565b600061132183836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f00000000000000008152506000818361183b5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156117045781810151838201526020016116ec565b5082848161184557fe5b0694935050505056fe4552524f523a206572726f7220696e2073656e64696e67207265776172642066726f6d20636f6e747261637445524332303a2073656e64696e6720746f20746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77546f6b656e732063616e6e6f74206265207472616e736665727265642066726f6d2075736572206163636f756e74546f6b656e732063616e6e6f74206265207472616e736665727265642066726f6d2066756e646572206163636f756e74a2646970667358221220c90dda625bf365bab74d942eeeb7ba19fbacb02e427fa5452c8936243d19f24564736f6c63430007040033
Deployed Bytecode Sourcemap
6855:10773:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7329:27;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;7295:21;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;7781:40;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7781:40:0;;:::i;14849:1321::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14849:1321:0;;:::i;:::-;;8261:157;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8261:157:0;-1:-1:-1;;;;;8261:157:0;;:::i;7457:34::-;;;;;;;;;;;;;:::i;12436:803::-;;;;;;;;;;;;;:::i;14020:533::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14020:533:0;-1:-1:-1;;;;;14020:533:0;;:::i;17133:234::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17133:234:0;-1:-1:-1;;;;;17133:234:0;;:::i;8647:98::-;;;;;;;;;;;;;:::i;8548:91::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8548:91:0;;;;:::i;16910:215::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16910:215:0;-1:-1:-1;;;;;16910:215:0;;:::i;8426:116::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8426:116:0;-1:-1:-1;;;;;8426:116:0;;:::i;17440:103::-;;;;;;;;;;;;;:::i;7426:24::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7426:24:0;;:::i;:::-;;;;-1:-1:-1;;;;;7426:24:0;;;;;;;;;;;;;;5112:28;;;;;;;;;;;;;:::i;7163:33::-;;;;;;;;;;;;;:::i;10656:279::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10656:279:0;;:::i;7088:30::-;;;;;;;;;;;;;:::i;7376:43::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7376:43:0;-1:-1:-1;;;;;7376:43:0;;:::i;9573:773::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9573:773:0;;:::i;6930:65::-;;;;;;;;;;;;;:::i;8759:193::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8759:193:0;-1:-1:-1;;;;;8759:193:0;;:::i;11241:147::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11241:147:0;;:::i;5373:247::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5373:247:0;-1:-1:-1;;;;;5373:247:0;;:::i;7329:27::-;;;;;;:::o;7295:21::-;;;;:::o;7781:40::-;;;;;;;;;;;;;:::o;14849:1321::-;14911:7;;;;:16;14903:54;;;;;-1:-1:-1;;;14903:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14984:10;14976:19;;;;:7;:19;;;;;:32;:42;-1:-1:-1;14976:42:0;;;:56;;;15031:1;15022:6;:10;14976:56;14968:101;;;;;-1:-1:-1;;;14968:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15119:15;15093:22;15104:10;15093;:22::i;:::-;:41;15090:96;;15165:3;15150:12;:18;15090:96;15196:21;15220:46;15263:2;15221:36;15244:12;;15221:18;15232:6;15221:10;:18::i;:::-;:22;;:36::i;:::-;15220:42;;:46::i;:::-;15196:70;;15287:13;15303:25;15317:10;15303:13;:25::i;:::-;15347:10;15339:19;;;;:7;:19;;;;;:29;;;:38;;;;;;15451:32;15287:41;;-1:-1:-1;15451:44:0;;15488:6;15451:36;:44::i;:::-;15424:10;15416:19;;;;:7;:19;;;;;:79;;;15506:33;;;:41;;;15597:14;;15558:37;;;;:53;;;;15651:5;;15622:25;;;;:34;;;;15691:11;:23;;15707:6;15691:15;:23::i;:::-;15677:11;:37;15738:17;;15735:130;;15786:5;;;15802;;15779:46;;;-1:-1:-1;;;15779:46:0;;-1:-1:-1;;;;;15802:5:0;;;15779:46;;;;;;;;;;;;15786:5;;;;;15779:22;;:46;;;;;;;;;;;;;;;;;;;15786:5;15779:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15779:46:0;15771:82;;;;;-1:-1:-1;;;15771:82:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;15890:5;;-1:-1:-1;;;;;15890:5:0;15883:22;15906:10;15918:25;:6;15929:13;15918:10;:25::i;:::-;15883:61;;;;;;;;;;;;;-1:-1:-1;;;;;15883:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15883:61:0;15875:100;;;;;-1:-1:-1;;;15875:100:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;15999:10;15991:19;;;;:7;:19;;;;;:32;15988:93;;16053:10;16068:1;16044:20;;;:8;:20;;;;;:25;15988:93;16098:64;16107:10;16119:25;:6;16130:13;16119:10;:25::i;:::-;16098:64;;;-1:-1:-1;;;;;16098:64:0;;;;;;;;;;;;16146:15;16098:64;;;;;;;;;;;;;14849:1321;;;:::o;8261:157::-;5339:5;;-1:-1:-1;;;;;5339:5:0;5325:10;:19;5317:28;;;;;;-1:-1:-1;;;;;8333:20:0;::::1;8325:60;;;::::0;;-1:-1:-1;;;8325:60:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;8396:5;:14:::0;;-1:-1:-1;;;;;;8396:14:0::1;-1:-1:-1::0;;;;;8396:14:0;;;::::1;::::0;;;::::1;::::0;;8261:157::o;7457:34::-;;;;:::o;12436:803::-;12515:10;12507:19;;;;:7;:19;;;;;:37;;;12490:14;;:54;12487:745;;;12560:13;12576:25;12590:10;12576:13;:25::i;:::-;12652:10;12644:19;;;;:7;:19;;;;;:29;;;12560:41;;-1:-1:-1;12634:40:0;;12560:41;;12634:9;:40::i;:::-;12697:10;12721:1;12689:19;;;:7;:19;;;;;;;;:29;;;;:33;;;12754:5;;12747:43;;-1:-1:-1;;;12747:43:0;;12777:4;12747:43;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;12754:5:0;;;;12747:21;;:43;;;;;12689:19;12747:43;;;;;;;12754:5;12747:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12832:5:0;;12825:59;;;-1:-1:-1;;;12825:59:0;;12860:4;12825:59;;;;12867:10;12825:59;;;;;;;;;;;;-1:-1:-1;;;;;12832:5:0;;;;12825:26;;:59;;;;;12747:43;;12825:59;;;;;;;;12832:5;;12825:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12825:59:0;12817:116;;;;-1:-1:-1;;;12817:116:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12963:32;;;12977:10;12963:32;;;;;;;;;;;;;;;;;;;;;13028:10;13020:19;;;;:7;:19;;;;;:33;;;:41;;;;13116:5;;13088:25;;;:33;13196:14;;13156:37;;;;:54;12487:745;12436:803::o;14020:533::-;14082:22;-1:-1:-1;;;;;14125:20:0;;14117:67;;;;-1:-1:-1;;;14117:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14216:15:0;;14196:17;14216:15;;;:7;:15;;;;;;;;:21;;;;14365:7;;14330:28;;-1:-1:-1;;14306:16:0;;14298:25;;:7;:25;;;;;;;14279:14;;14216:21;;14196:17;14277:96;;14278:81;;14279:45;;:14;:18;:45::i;14277:96::-;14480:7;;-1:-1:-1;;;;;14447:15:0;;;;;;:7;:15;;;;;;;;:28;-1:-1:-1;;14423:16:0;;14415:25;;:7;:25;;;;;;;14396:14;;14259:114;;-1:-1:-1;14480:7:0;;14395:81;;14396:45;;:14;:18;:45::i;14395:81::-;14394:93;;;;;-1:-1:-1;;;;;14518:15:0;;;;;;:7;:15;;;;;:25;;;14394:93;;;14384:103;;;;;14507:37;;14384:103;;14507:10;:37::i;:::-;14499:46;;;;14020:533;;;;:::o;17133:234::-;5339:5;;-1:-1:-1;;;;;5339:5:0;5325:10;:19;5317:28;;;;;;17283:30:::1;::::0;;-1:-1:-1;;;17283:30:0;;17307:4:::1;17283:30;::::0;::::1;::::0;;;17236:12;;17214::::1;::::0;-1:-1:-1;;;;;17283:15:0;::::1;::::0;::::1;::::0;:30;;;;;::::1;::::0;;;;;;;;:15;:30;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;17283:30:0;17339:5:::1;::::0;;17324:35:::1;::::0;;-1:-1:-1;;;17324:35:0;;-1:-1:-1;;;;;17339:5:0;;::::1;17324:35;::::0;::::1;::::0;;;;;;;;;17283:30;;-1:-1:-1;17324:14:0;;::::1;::::0;::::1;::::0;:35;;;;;17283:30:::1;::::0;17324:35;;;;;;;;;;;:14;:35;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;;;;17133:234:0:o;8647:98::-;8723:7;:14;8647:98;:::o;8548:91::-;5339:5;;-1:-1:-1;;;;;5339:5:0;5325:10;:19;5317:28;;;;;;8613:7:::1;:18:::0;;-1:-1:-1;;8613:18:0::1;::::0;::::1;;::::0;;;::::1;::::0;;8548:91::o;16910:215::-;16973:19;-1:-1:-1;;;;;17012:20:0;;17004:67;;;;-1:-1:-1;;;17004:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;17089:15:0;;;;;:7;:15;;;;;:28;;16910:215::o;8426:116::-;-1:-1:-1;;;;;8509:17:0;8483:7;8509:17;;;:8;:17;;;;;;8527:7;8509:25;;8426:116::o;17440:103::-;5339:5;;-1:-1:-1;;;;;5339:5:0;5325:10;:19;5317:28;;;;;;17497:5:::1;::::0;;17489:46:::1;::::0;-1:-1:-1;;;;;17497:5:0;;::::1;::::0;17513:21:::1;17489:46:::0;::::1;;;::::0;17513:21;;17489:46;17497:5;17489:46;17513:21;17497:5;17489:46;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;17440:103::o:0;7426:24::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7426:24:0;;-1:-1:-1;7426:24:0;:::o;5112:28::-;;;-1:-1:-1;;;;;5112:28:0;;:::o;7163:33::-;;;;:::o;10656:279::-;10735:5;;10728:61;;;-1:-1:-1;;;10728:61:0;;10755:10;10728:61;;;;10775:4;10728:61;;;;;;;;;;;;-1:-1:-1;;;;;10735:5:0;;;;10728:26;;:61;;;;;;;;;;;;;;;10735:5;;10728:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10728:61:0;10720:122;;;;-1:-1:-1;;;10720:122:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10871:15;;:27;;10891:6;10871:19;:27::i;:::-;10853:15;:45;10909:18;10920:6;10909:10;:18::i;7088:30::-;;;;:::o;7376:43::-;;;;;;;;;;;;;:::o;9573:773::-;9639:5;;9632:61;;;-1:-1:-1;;;9632:61:0;;9659:10;9632:61;;;;9679:4;9632:61;;;;;;;;;;;;-1:-1:-1;;;;;9639:5:0;;;;9632:26;;:61;;;;;;;;;;;;;;;9639:5;;9632:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9632:61:0;9624:120;;;;-1:-1:-1;;;9624:120:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9769:13;9785:25;9799:10;9785:13;:25::i;:::-;9833:10;9825:19;;;;:7;:19;;;;;:29;;;:38;;;;;;9938:32;9769:41;;-1:-1:-1;9927:44:0;;:6;;:10;:44::i;:::-;9900:10;9892:19;;;;:7;:19;;;;;:79;;;9986:33;;;:41;;;10081:14;;10042:37;;;;:53;;;;10139:5;;10110:25;;;;:34;;;;10187:11;:23;;10203:6;10187:15;:23::i;:::-;10173:11;:37;10225:26;10240:10;10225:14;:26::i;:::-;10285:43;;;10292:10;10285:43;;;;;;;;10312:15;10285:43;;;;;;;;;;;;;;;9573:773;;:::o;6930:65::-;;;-1:-1:-1;;;;;6930:65:0;;:::o;8759:193::-;-1:-1:-1;;;;;8876:17:0;;8844:4;8876:17;;;:7;:17;;;;;:29;;;;;8873:72;;;-1:-1:-1;8914:4:0;8907:11;;8873:72;-1:-1:-1;8940:5:0;8933:12;;11241:147;7054:5;;-1:-1:-1;;;;;7054:5:0;7040:10;:19;7032:28;;;;;5373:247;5339:5;;-1:-1:-1;;;;;5339:5:0;5325:10;:19;5317:28;;;;;;-1:-1:-1;;;;;5463:23:0;::::1;5455:70;;;;-1:-1:-1::0;;;5455:70:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5536:5;:17:::0;;-1:-1:-1;;;;;;5536:17:0::1;-1:-1:-1::0;;;;;5536:17:0;::::1;::::0;;::::1;::::0;;5569:43:::1;::::0;5536:17;;5590:10:::1;::::0;5569:43:::1;::::0;5536:5;5569:43:::1;5373:247:::0;:::o;16396:239::-;16455:7;;16495:17;:7;16508:3;16495:12;:17::i;:::-;16474:38;-1:-1:-1;16523:23:0;16549:42;16573:17;16549:19;16474:38;16579:11;1685:471;1743:7;1988:6;1984:47;;-1:-1:-1;2018:1:0;2011:8;;1984:47;2055:5;;;2059:1;2055;:5;:1;2079:5;;;;;:10;2071:56;;;;-1:-1:-1;;;2071:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2147:1;-1:-1:-1;1685:471:0;;;;;:::o;2632:132::-;2690:7;2717:39;2721:1;2724;2717:39;;;;;;;;;;;;;;;;;:3;:39::i;13512:496::-;13568:7;-1:-1:-1;;;;;13596:20:0;;13588:67;;;;-1:-1:-1;;;13588:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13696:15:0;;13676:17;13696:15;;;:7;:15;;;;;;;;:21;;;;13834:7;;13799:28;;-1:-1:-1;;13775:16:0;;13767:25;;:7;:25;;;;;;;13748:14;;13696:21;;13676:17;13746:96;;13747:81;;13748:45;;:14;:18;:45::i;13746:96::-;13968:7;;-1:-1:-1;;;;;13935:15:0;;;;;;:7;:15;;;;;;;;:28;-1:-1:-1;;13911:16:0;;13903:25;;:7;:25;;;;;;;13884:14;;13728:114;;-1:-1:-1;13968:7:0;;13883:81;;13884:45;;:14;:18;:45::i;13883:81::-;13882:93;;;;;-1:-1:-1;;;;;13853:15:0;;;;;;;;:7;:15;;;;;:25;;:122;;13882:93;;;;13853:122;;;;-1:-1:-1;13994:6:0;;13512:496;-1:-1:-1;13512:496:0:o;795:136::-;853:7;880:43;884:1;887;880:43;;;;;;;;;;;;;;;;;:3;:43::i;331:181::-;389:7;421:5;;;445:6;;;;437:46;;;;;-1:-1:-1;;;437:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;11607:587;11785:17;11805:42;11831:15;;11806:19;11817:7;;11806:6;:10;;:19;;;;:::i;:::-;11805:25;;:42::i;:::-;11785:62;;11859:24;11886:26;11900:11;;11886:9;:13;;:26;;;;:::i;:::-;11859:53;;11941:26;11955:11;;11941:9;:13;;:26;;;;:::i;:::-;11923:15;:44;12005:14;;:36;;12024:16;12005:18;:36::i;:::-;11988:14;:53;12077:5;;-1:-1:-1;;12077:9:0;12069:18;;;;:7;:18;;;;;;:40;;12092:16;12069:22;:40::i;:::-;12060:5;;;12052:14;;;;:7;:14;;;;;;;;;:57;;;;12142:5;;12135:33;;;;;;;;;;;12157:10;12135:33;;;;;;;;;;;;;;-1:-1:-1;;12179:5:0;:7;;;;;;-1:-1:-1;11607:587:0:o;8962:323::-;9040:19;9063:27;9077:12;9063:13;:27::i;:::-;9039:51;;9104:14;9100:126;;-1:-1:-1;;;;;9134:21:0;;;;;;:7;:21;;;;;:33;;:40;;-1:-1:-1;;9134:40:0;9170:4;9134:40;;;;;;9189:7;:26;;;;;;;;;;;;;;-1:-1:-1;;;;;;9189:26:0;;;;;;9100:126;-1:-1:-1;;;;;;9237:22:0;;;;;:8;:22;;;;;9263:15;9237:41;;8962:323::o;4796:106::-;4849:6;4893:1;4889;4884;4880;4876;:5;:9;4875:15;;;;;;:19;;4796:106;-1:-1:-1;;;4796:106:0:o;3260:278::-;3346:7;3381:12;3374:5;3366:28;;;;-1:-1:-1;;;3366:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3405:9;3421:1;3417;:5;;;;;;;3260:278;-1:-1:-1;;;;;3260:278:0:o;1234:192::-;1320:7;1356:12;1348:6;;;;1340:29;;;;-1:-1:-1;;;1340:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1392:5:0;;;1234:192::o;4003:130::-;4061:7;4088:37;4092:1;4095;4088:37;;;;;;;;;;;;;;;;;4704:7;4740:12;4732:6;4724:29;;;;-1:-1:-1;;;4724:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4775:1;4771;:5;;;;;;;4618:166;-1:-1:-1;;;;4618:166:0:o
Swarm Source
ipfs://c90dda625bf365bab74d942eeeb7ba19fbacb02e427fa5452c8936243d19f245
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ 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.