Feature Tip: Add private address tag to any address under My Name Tag !
More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 915 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Unstake | 16740587 | 780 days ago | IN | 0 ETH | 0.00841675 | ||||
Claim | 16554565 | 806 days ago | IN | 0 ETH | 0.00452752 | ||||
Stake | 16548777 | 807 days ago | IN | 0 ETH | 0.00779896 | ||||
Unstake | 16525727 | 810 days ago | IN | 0 ETH | 0.00369452 | ||||
Claim | 16520455 | 811 days ago | IN | 0 ETH | 0.0036522 | ||||
Claim | 16519164 | 811 days ago | IN | 0 ETH | 0.00261627 | ||||
Unstake | 16519127 | 811 days ago | IN | 0 ETH | 0.00286221 | ||||
Claim | 16515633 | 811 days ago | IN | 0 ETH | 0.00323977 | ||||
Unstake | 16515093 | 812 days ago | IN | 0 ETH | 0.00423851 | ||||
Claim | 16515090 | 812 days ago | IN | 0 ETH | 0.00311614 | ||||
Claim | 16513669 | 812 days ago | IN | 0 ETH | 0.00354949 | ||||
Unstake | 16505151 | 813 days ago | IN | 0 ETH | 0.00288989 | ||||
Claim | 16505148 | 813 days ago | IN | 0 ETH | 0.00270743 | ||||
Unstake | 16498283 | 814 days ago | IN | 0 ETH | 0.00275618 | ||||
Unstake | 16498266 | 814 days ago | IN | 0 ETH | 0.00283064 | ||||
Claim | 16498265 | 814 days ago | IN | 0 ETH | 0.00192379 | ||||
Unstake | 16498257 | 814 days ago | IN | 0 ETH | 0.00340319 | ||||
Claim | 16498255 | 814 days ago | IN | 0 ETH | 0.00315966 | ||||
Unstake | 16497798 | 814 days ago | IN | 0 ETH | 0.00033389 | ||||
Claim | 16497736 | 814 days ago | IN | 0 ETH | 0.002101 | ||||
Unstake | 16497721 | 814 days ago | IN | 0 ETH | 0.00296437 | ||||
Claim | 16497719 | 814 days ago | IN | 0 ETH | 0.00253792 | ||||
Claim | 16497699 | 814 days ago | IN | 0 ETH | 0.0021637 | ||||
Claim | 16497648 | 814 days ago | IN | 0 ETH | 0.0052409 | ||||
Unstake | 16497133 | 814 days ago | IN | 0 ETH | 0.00030638 |
Latest 1 internal transaction
Advanced mode:
Parent Transaction Hash | Method | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|---|
Transfer | 16182938 | 858 days ago | 0.00801455 ETH |
Loading...
Loading
Contract Name:
EHIVE_ETHDIST
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./contract.sol"; contract EHIVE_ETHDIST is Ownable { using SafeMath for uint256; EHIVE public eHive; bool public stakingEnabled = false; uint256 public totalStaked; uint256 public totalClaimed; uint256[] public monthlyReward; // [timestamp, totalStaked, weekly eth] struct Staker { address staker; uint256 start; uint256 staked; uint256 earned; uint256 ethEarned; } struct ClaimHistory { uint256[] dates; uint256[] amounts; } // stake data mapping(address => Staker) public stakers; mapping(address => ClaimHistory) private _claimHistory; mapping(address => mapping(uint256 => bool)) public userMonthlyClaimed; //specific to the months timestmap event Stake(uint256 amount); event Claim(uint256 amount); constructor (EHIVE native) { eHive = native; } modifier isStakingEnabled() { require(stakingEnabled, "Staking is not enabled."); _; } /** * @dev Checks if holder is staking */ function isStaking(address stakerAddr) public view returns (bool) { return stakers[stakerAddr].staker == stakerAddr; } /** * @dev Returns how much staker is staking */ function userStaked(address staker) public view returns (uint256) { return stakers[staker].staked; } /** * @dev Returns how much staker has claimed over time */ function userClaimHistory(address staker) public view returns (ClaimHistory memory) { return _claimHistory[staker]; } /** * @dev Returns how much staker has earned */ function userEarned(address staker) public view returns (uint256) { uint256 currentlyEarned = _userEarned(staker); uint256 previouslyEarned = stakers[msg.sender].earned; if (previouslyEarned > 0) return currentlyEarned.add(previouslyEarned); return currentlyEarned; } function _userEarned(address staker) private view returns (uint256) { require(isStaking(staker), "User is not staking."); uint256 staked = userStaked(staker); uint256 stakersStartInSeconds = stakers[staker].start.div(1 seconds); uint256 blockTimestampInSeconds = block.timestamp.div(1 seconds); uint256 secondsStaked = blockTimestampInSeconds.sub(stakersStartInSeconds); uint256 earn = staked.mul(eHive.apr()).div(100); uint256 rewardPerSec = earn.div(365).div(24).div(60).div(60); uint256 earned = rewardPerSec.mul(secondsStaked); return earned; } /** * @dev Stake tokens in validator */ function stake(uint256 stakeAmount) external isStakingEnabled { require(eHive.totalSupply() <= eHive.maxSupply(), "There are no more rewards left to be claimed."); // Check user is registered as staker if (isStaking(msg.sender)) { stakers[msg.sender].earned += _userEarned(msg.sender); stakers[msg.sender].staked += stakeAmount; stakers[msg.sender].start = block.timestamp; } else { stakers[msg.sender] = Staker(msg.sender, block.timestamp, stakeAmount, 0, 0); } totalStaked += stakeAmount; eHive.transferFrom(msg.sender, address(this), stakeAmount); eHive.stake(stakeAmount, 0); emit Stake(stakeAmount); } /** * @dev Claim earned tokens from stake in validator */ function claim() external isStakingEnabled { require(isStaking(msg.sender), "You are not staking!?"); require(eHive.totalSupply() <= eHive.maxSupply(), "There are no more rewards left to be claimed."); uint256 reward = userEarned(msg.sender); _claimHistory[msg.sender].dates.push(block.timestamp); _claimHistory[msg.sender].amounts.push(reward); totalClaimed += reward; if (eHive.balanceOf(address(this)) < reward) eHive.claim(0); eHive.transfer(msg.sender, reward); stakers[msg.sender].start = block.timestamp; stakers[msg.sender].earned = 0; } /** * @dev Claim earned and staked tokens from validator */ function unstake() external { require(isStaking(msg.sender), "You are not staking!?"); uint256 toStake = eHive.userStaked(address(this), 0); uint256 reward = userEarned(msg.sender); uint256 staked = stakers[msg.sender].staked; uint256 unstakeAmt = staked.add(reward); if (eHive.balanceOf(address(this)) < unstakeAmt) eHive.unstake(0); if (eHive.totalSupply().add(reward) < eHive.maxSupply() && stakingEnabled) { _claimHistory[msg.sender].dates.push(block.timestamp); _claimHistory[msg.sender].amounts.push(reward); totalClaimed += reward; eHive.transfer(msg.sender, unstakeAmt); } else { eHive.transfer(msg.sender, staked); } totalStaked -= staked; delete stakers[msg.sender]; eHive.stake(toStake.sub(staked), 0); } /** * @dev Add monthly eth reward for stakers */ function addRewards() external payable onlyOwner { monthlyReward = [block.timestamp, totalStaked, msg.value]; } /** * @dev Claiming of eth rewards */ function claimETHRewards() external { require(!userMonthlyClaimed[msg.sender][monthlyReward[0]], "You already claimed your monthly reward."); require(stakers[msg.sender].start < monthlyReward[0]); uint256 staked = stakers[msg.sender].staked; uint256 total = monthlyReward[1]; uint256 P = (staked * 1e18) / total; uint256 reward = monthlyReward[2] * P / 1e18; userMonthlyClaimed[msg.sender][monthlyReward[0]] = true; stakers[msg.sender].ethEarned += reward; payable(msg.sender).transfer(reward); emit Claim(reward); } /** * @dev Enables/disables staking */ function setStakingState(bool onoff) external onlyOwner { stakingEnabled = onoff; } }
/** *Submitted for verification at Etherscan.io on 2022-09-08 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address to, 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 from, address to, uint256 amount ) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } interface IERC20Metadata is IERC20 { function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); } contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } function name() public view virtual override returns (string memory) { return _name; } function symbol() public view virtual override returns (string memory) { return _symbol; } function decimals() public view virtual override returns (uint8) { return 18; } function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } function transfer(address to, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, amount); return true; } function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, spender, amount); return true; } function transferFrom( address from, address to, uint256 amount ) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, _allowances[owner][spender] + addedValue); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { address owner = _msgSender(); uint256 currentAllowance = _allowances[owner][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } function _transfer( address from, address to, uint256 amount ) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[from] = fromBalance - amount; } _balances[to] += amount; emit Transfer(from, to, amount); _afterTokenTransfer(from, to, amount); } function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _spendAllowance( address owner, address spender, uint256 amount ) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require(currentAllowance >= amount, "ERC20: insufficient allowance"); unchecked { _approve(owner, spender, currentAllowance - amount); } } } function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor() { _transferOwnership(_msgSender()); } function owner() public view virtual returns (address) { return _owner; } modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } library SafeMath { function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // 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 (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } contract EHIVE is ERC20, Ownable { using SafeMath for uint256; uint256 public maxSupply; // what the total supply can reach and not go beyond IUniswapV2Router02 private uniswapV2Router; address private uniswapV2Pair; bool private _swapping; address private _swapFeeReceiver; uint256 public maxTransactionAmount; uint256 public maxWallet; uint256 public swapTokensThreshold; bool public limitsInEffect = true; uint256 public totalFees; uint256 private _marketingFee; uint256 private _liquidityFee; uint256 private _validatorFee; uint256 private _tokensForMarketing; uint256 private _tokensForLiquidity; uint256 private _tokensForValidator; // staking vars uint256 public totalStaked; address public stakingToken; address public rewardToken; uint256 public apr; bool public stakingEnabled = false; uint256 public totalClaimed; struct Validator { uint256 creationTime; uint256 staked; } struct Staker { address staker; uint256 start; uint256 staked; uint256 earned; } struct ClaimHistory { uint256[] dates; uint256[] amounts; } // exlcude from fees and max transaction amount mapping (address => bool) private _isExcludedFromFees; mapping (address => bool) private _isExcludedMaxTransactionAmount; // store addresses that a automatic market maker pairs. Any transfer *to* these addresses // could be subject to a maximum transfer amount mapping (address => bool) private _automatedMarketMakerPairs; // to stop bot spam buys and sells on launch mapping(address => uint256) private _holderLastTransferBlock; // stake data mapping(address => mapping(uint256 => Staker)) private _stakers; mapping(address => ClaimHistory) private _claimHistory; Validator[] public validators; /** * @dev Throws if called by any account other than the _swapFeeReceiver */ modifier teamOROwner() { require(_swapFeeReceiver == _msgSender() || owner() == _msgSender(), "Caller is not the _swapFeeReceiver address nor owner."); _; } modifier isStakingEnabled() { require(stakingEnabled, "Staking is not enabled."); _; } constructor() ERC20("Ethereum Hive", "EHIVE") payable { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); _isExcludedMaxTransactionAmount[address(_uniswapV2Router)] = true; uniswapV2Router = _uniswapV2Router; uint256 marketingFee = 2; uint256 liquidityFee = 1; uint256 validatorFee = 3; uint256 totalSupply = 5e11 * 1e18; maxSupply = 1e12 * 1e18; maxTransactionAmount = totalSupply * 4 / 1000; maxWallet = totalSupply * 1 / 100; swapTokensThreshold = totalSupply * 1 / 1000; _marketingFee = marketingFee; _liquidityFee = liquidityFee; _validatorFee = validatorFee; totalFees = _marketingFee + _liquidityFee + _validatorFee; _swapFeeReceiver = owner(); // exclude from paying fees or having max transaction amount excludeFromFees(owner(), true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); _isExcludedMaxTransactionAmount[owner()] = true; _isExcludedMaxTransactionAmount[address(this)] = true; _isExcludedMaxTransactionAmount[address(0xdead)] = true; stakingToken = address(this); rewardToken = address(this); apr = 50; _mint(address(this), totalSupply.sub(17e10 * 1e18)); _mint(msg.sender, 17e10 * 1e18); } /** * @dev Once live, can never be switched off */ function startTrading() external teamOROwner { uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH()); _isExcludedMaxTransactionAmount[address(uniswapV2Pair)] = true; _automatedMarketMakerPairs[address(uniswapV2Pair)] = true; _approve(address(this), address(uniswapV2Router), balanceOf(address(this))); uniswapV2Router.addLiquidityETH{value: address(this).balance} ( address(this), balanceOf(address(this)), 0, 0, owner(), block.timestamp ); } /** * @dev Remove limits after token is somewhat stable */ function removeLimits() external teamOROwner { limitsInEffect = false; } /** * @dev Exclude from fee calculation */ function excludeFromFees(address account, bool excluded) public teamOROwner { _isExcludedFromFees[account] = excluded; } /** * @dev Update token fees (max set to initial fee) */ function updateFees(uint256 marketingFee, uint256 liquidityFee, uint256 validatorFee) external onlyOwner { _marketingFee = marketingFee; _liquidityFee = liquidityFee; _validatorFee = validatorFee; totalFees = _marketingFee + _liquidityFee + _validatorFee; require(totalFees <= 6, "Must keep fees at 6% or less"); } /** * @dev Update wallet that receives fees and newly added LP */ function updateFeeReceiver(address newWallet) external teamOROwner { _swapFeeReceiver = newWallet; } /** * @dev Very important function. * Updates the threshold of how many tokens that must be in the contract calculation for fees to be taken */ function updateSwapTokensThreshold(uint256 newThreshold) external teamOROwner returns (bool) { require(newThreshold >= totalSupply() * 1 / 100000, "Swap threshold cannot be lower than 0.001% total supply."); require(newThreshold <= totalSupply() * 5 / 1000, "Swap threshold cannot be higher than 0.5% total supply."); swapTokensThreshold = newThreshold; return true; } /** * @dev Check if an address is excluded from the fee calculation */ function isExcludedFromFees(address account) external view returns(bool) { return _isExcludedFromFees[account]; } function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); if (amount == 0) { super._transfer(from, to, 0); return; } // all to secure a smooth launch if (limitsInEffect) { if ( from != owner() && to != owner() && to != address(0xdead) && !_swapping ) { if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){ require(_holderLastTransferBlock[tx.origin] < block.number, "_transfer:: Transfer Delay enabled. Only one purchase per block allowed."); _holderLastTransferBlock[tx.origin] = block.number; } // on buy if (_automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) { require(amount <= maxTransactionAmount, "_transfer:: Buy transfer amount exceeds the maxTransactionAmount."); require(amount + balanceOf(to) <= maxWallet, "_transfer:: Max wallet exceeded"); } // on sell else if (_automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) { require(amount <= maxTransactionAmount, "_transfer:: Sell transfer amount exceeds the maxTransactionAmount."); } else if (!_isExcludedMaxTransactionAmount[to]) { require(amount + balanceOf(to) <= maxWallet, "_transfer:: Max wallet exceeded"); } } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensThreshold; if ( canSwap && !_swapping && !_automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { _swapping = true; swapBack(); _swapping = false; } bool takeFee = !_swapping; // if any addy belongs to _isExcludedFromFee or isn't a swap then remove the fee if ( _isExcludedFromFees[from] || _isExcludedFromFees[to] || (!_automatedMarketMakerPairs[from] && !_automatedMarketMakerPairs[to]) ) takeFee = false; uint256 fees = 0; if (takeFee) { fees = amount.mul(totalFees).div(100); _tokensForLiquidity += fees * _liquidityFee / totalFees; _tokensForValidator += fees * _validatorFee / totalFees; _tokensForMarketing += fees * _marketingFee / totalFees; if (fees > 0) { super._transfer(from, address(this), fees); } amount -= fees; } super._transfer(from, to, amount); } function _swapTokensForEth(uint256 tokenAmount) internal { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, path, address(this), block.timestamp ); } function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) internal { _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, 0, _swapFeeReceiver, block.timestamp ); } function swapBack() internal { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = _tokensForLiquidity + _tokensForMarketing + _tokensForValidator; if (contractBalance == 0 || totalTokensToSwap == 0) return; if (contractBalance > swapTokensThreshold) contractBalance = swapTokensThreshold; // Halve the amount of liquidity tokens uint256 liquidityTokens = contractBalance * _tokensForLiquidity / totalTokensToSwap / 2; uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens); uint256 initialETHBalance = address(this).balance; _swapTokensForEth(amountToSwapForETH); uint256 ethBalance = address(this).balance.sub(initialETHBalance); uint256 ethForMarketing = ethBalance.mul(_tokensForMarketing).div(totalTokensToSwap); uint256 ethForValidator = ethBalance.mul(_tokensForValidator).div(totalTokensToSwap); uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForValidator; _tokensForLiquidity = 0; _tokensForMarketing = 0; _tokensForValidator = 0; payable(_swapFeeReceiver).transfer(ethForMarketing.add(ethForValidator)); if (liquidityTokens > 0 && ethForLiquidity > 0) { _addLiquidity(liquidityTokens, ethForLiquidity); } } /** * @dev Transfer eth stuck in contract to _swapFeeReceiver */ function withdrawContractETH() external { payable(_swapFeeReceiver).transfer(address(this).balance); } /** * @dev In case swap wont do it and sells/buys might be blocked */ function forceSwap() external teamOROwner { _swapTokensForEth(balanceOf(address(this))); } /** * * @dev Staking part starts here * */ /** * @dev Checks if holder is staking */ function isStaking(address stakerAddr, uint256 validator) public view returns (bool) { return _stakers[stakerAddr][validator].staker == stakerAddr; } /** * @dev Returns how much staker is staking */ function userStaked(address staker, uint256 validator) public view returns (uint256) { return _stakers[staker][validator].staked; } /** * @dev Returns how much staker has claimed over time */ function userClaimHistory(address staker) public view returns (ClaimHistory memory) { return _claimHistory[staker]; } /** * @dev Returns how much staker has earned */ function userEarned(address staker, uint256 validator) public view returns (uint256) { uint256 currentlyEarned = _userEarned(staker, validator); uint256 previouslyEarned = _stakers[msg.sender][validator].earned; if (previouslyEarned > 0) return currentlyEarned.add(previouslyEarned); return currentlyEarned; } function _userEarned(address staker, uint256 validator) private view returns (uint256) { require(isStaking(staker, validator), "User is not staking."); uint256 staked = userStaked(staker, validator); uint256 stakersStartInSeconds = _stakers[staker][validator].start.div(1 seconds); uint256 blockTimestampInSeconds = block.timestamp.div(1 seconds); uint256 secondsStaked = blockTimestampInSeconds.sub(stakersStartInSeconds); uint256 earn = staked.mul(apr).div(100); uint256 rewardPerSec = earn.div(365).div(24).div(60).div(60); uint256 earned = rewardPerSec.mul(secondsStaked); return earned; } /** * @dev Stake tokens in validator */ function stake(uint256 stakeAmount, uint256 validator) external isStakingEnabled { require(totalSupply() <= maxSupply, "There are no more rewards left to be claimed."); // Check user is registered as staker if (isStaking(msg.sender, validator)) { _stakers[msg.sender][validator].staked += stakeAmount; _stakers[msg.sender][validator].earned += _userEarned(msg.sender, validator); _stakers[msg.sender][validator].start = block.timestamp; } else { _stakers[msg.sender][validator] = Staker(msg.sender, block.timestamp, stakeAmount, 0); } validators[validator].staked += stakeAmount; totalStaked += stakeAmount; _burn(msg.sender, stakeAmount); } /** * @dev Claim earned tokens from stake in validator */ function claim(uint256 validator) external isStakingEnabled { require(isStaking(msg.sender, validator), "You are not staking!?"); require(totalSupply() <= maxSupply, "There are no more rewards left to be claimed."); uint256 reward = userEarned(msg.sender, validator); _claimHistory[msg.sender].dates.push(block.timestamp); _claimHistory[msg.sender].amounts.push(reward); totalClaimed += reward; _mint(msg.sender, reward); _stakers[msg.sender][validator].start = block.timestamp; _stakers[msg.sender][validator].earned = 0; } /** * @dev Claim earned and staked tokens from validator */ function unstake(uint256 validator) external { require(isStaking(msg.sender, validator), "You are not staking!?"); uint256 reward = userEarned(msg.sender, validator); if (totalSupply().add(reward) < maxSupply && stakingEnabled) { _claimHistory[msg.sender].dates.push(block.timestamp); _claimHistory[msg.sender].amounts.push(reward); totalClaimed += reward; _mint(msg.sender, _stakers[msg.sender][validator].staked.add(reward)); } else { _mint(msg.sender, _stakers[msg.sender][validator].staked); } validators[validator].staked -= _stakers[msg.sender][validator].staked; totalStaked -= _stakers[msg.sender][validator].staked; delete _stakers[msg.sender][validator]; } /** * @dev Creates validator */ function createValidator() external teamOROwner { Validator memory validator = Validator(block.timestamp, 0); validators.push(validator); } /** * @dev Returns amount of validators */ function amountOfValidators() public view returns (uint256) { return validators.length; } /** * @dev Enables/disables staking */ function setStakingState(bool onoff) external teamOROwner { stakingEnabled = onoff; } receive() external payable {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"contract EHIVE","name":"native","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Claim","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Stake","type":"event"},{"inputs":[],"name":"addRewards","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimETHRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"eHive","outputs":[{"internalType":"contract EHIVE","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"stakerAddr","type":"address"}],"name":"isStaking","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"monthlyReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setStakingState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"stakeAmount","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"stakers","outputs":[{"internalType":"address","name":"staker","type":"address"},{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"staked","type":"uint256"},{"internalType":"uint256","name":"earned","type":"uint256"},{"internalType":"uint256","name":"ethEarned","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"userClaimHistory","outputs":[{"components":[{"internalType":"uint256[]","name":"dates","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"internalType":"struct EHIVE_ETHDIST.ClaimHistory","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"userEarned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"userMonthlyClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"userStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040526000600160146101000a81548160ff0219169083151502179055503480156200002c57600080fd5b50604051620031a5380380620031a583398181016040528101906200005291906200019d565b6200007262000066620000ba60201b60201c565b620000c260201b60201c565b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505062000236565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008151905062000197816200021c565b92915050565b600060208284031215620001b657620001b562000217565b5b6000620001c68482850162000186565b91505092915050565b6000620001dc82620001f7565b9050919050565b6000620001f082620001cf565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600080fd5b6200022781620001e3565b81146200023357600080fd5b50565b612f5f80620002466000396000f3fe60806040526004361061011f5760003560e01c8063817b1cd2116100a0578063b4b72c1d11610064578063b4b72c1d146103a6578063c350f6ca146103bd578063cba72540146103fa578063d54ad2a114610437578063f2fde38b146104625761011f565b8063817b1cd2146102a95780638da5cb5b146102d45780639168ae72146102ff578063a694fc3a14610340578063acc3a939146103695761011f565b806362f21aad116100e757806362f21aad146101b05780636ceb23a1146101db5780636e0df713146102185780636f49712b14610255578063715018a6146102925761011f565b806314d6aed0146101245780631cfff51b1461012e5780632def6620146101595780633b51e5cf146101705780634e71d92d14610199575b600080fd5b61012c61048b565b005b34801561013a57600080fd5b50610143610537565b604051610150919061293b565b60405180910390f35b34801561016557600080fd5b5061016e61054a565b005b34801561017c57600080fd5b5061019760048036038101906101929190612587565b610cfb565b005b3480156101a557600080fd5b506101ae610d94565b005b3480156101bc57600080fd5b506101c5611327565b6040516101d29190612956565b60405180910390f35b3480156101e757600080fd5b5061020260048036038101906101fd919061251a565b61134d565b60405161020f9190612a6c565b60405180910390f35b34801561022457600080fd5b5061023f600480360381019061023a91906125e1565b611456565b60405161024c9190612a8e565b60405180910390f35b34801561026157600080fd5b5061027c6004803603810190610277919061251a565b61147a565b604051610289919061293b565b60405180910390f35b34801561029e57600080fd5b506102a7611514565b005b3480156102b557600080fd5b506102be61159c565b6040516102cb9190612a8e565b60405180910390f35b3480156102e057600080fd5b506102e96115a2565b6040516102f69190612844565b60405180910390f35b34801561030b57600080fd5b506103266004803603810190610321919061251a565b6115cb565b6040516103379594939291906128e8565b60405180910390f35b34801561034c57600080fd5b50610367600480360381019061036291906125e1565b611621565b005b34801561037557600080fd5b50610390600480360381019061038b919061251a565b611b8b565b60405161039d9190612a8e565b60405180910390f35b3480156103b257600080fd5b506103bb611bd7565b005b3480156103c957600080fd5b506103e460048036038101906103df9190612547565b611f36565b6040516103f1919061293b565b60405180910390f35b34801561040657600080fd5b50610421600480360381019061041c919061251a565b611f65565b60405161042e9190612a8e565b60405180910390f35b34801561044357600080fd5b5061044c611fea565b6040516104599190612a8e565b60405180910390f35b34801561046e57600080fd5b506104896004803603810190610484919061251a565b611ff0565b005b6104936120e8565b73ffffffffffffffffffffffffffffffffffffffff166104b16115a2565b73ffffffffffffffffffffffffffffffffffffffff1614610507576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104fe90612a2c565b60405180910390fd5b6040518060600160405280428152602001600254815260200134815250600490600361053492919061242d565b50565b600160149054906101000a900460ff1681565b6105533361147a565b610592576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161058990612a4c565b60405180910390fd5b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a39b21533060006040518363ffffffff1660e01b81526004016105f2929190612896565b60206040518083038186803b15801561060a57600080fd5b505afa15801561061e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610642919061260e565b9050600061064f33611f65565b90506000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154905060006106ad83836120f090919063ffffffff16565b905080600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161070b9190612844565b60206040518083038186803b15801561072357600080fd5b505afa158015610737573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061075b919061260e565b10156107f057600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632e17de7860006040518263ffffffff1660e01b81526004016107bd9190612971565b600060405180830381600087803b1580156107d757600080fd5b505af11580156107eb573d6000803e3d6000fd5b505050505b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d5abeb016040518163ffffffff1660e01b815260040160206040518083038186803b15801561085857600080fd5b505afa15801561086c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610890919061260e565b61094284600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156108fc57600080fd5b505afa158015610910573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610934919061260e565b6120f090919063ffffffff16565b10801561095b5750600160149054906101000a900460ff165b15610b0057600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001429080600181540180825580915050600190039060005260206000200160009091909190915055600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018390806001815401808255809150506001900390600052602060002001600090919091909150558260036000828254610a449190612b1c565b92505081905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401610aa89291906128bf565b602060405180830381600087803b158015610ac257600080fd5b505af1158015610ad6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610afa91906125b4565b50610bb1565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401610b5d9291906128bf565b602060405180830381600087803b158015610b7757600080fd5b505af1158015610b8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610baf91906125b4565b505b8160026000828254610bc39190612bfd565b92505081905550600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905560018201600090556002820160009055600382016000905560048201600090555050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637b0472f0610ca4848761210690919063ffffffff16565b60006040518363ffffffff1660e01b8152600401610cc3929190612aa9565b600060405180830381600087803b158015610cdd57600080fd5b505af1158015610cf1573d6000803e3d6000fd5b5050505050505050565b610d036120e8565b73ffffffffffffffffffffffffffffffffffffffff16610d216115a2565b73ffffffffffffffffffffffffffffffffffffffff1614610d77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6e90612a2c565b60405180910390fd5b80600160146101000a81548160ff02191690831515021790555050565b600160149054906101000a900460ff16610de3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dda90612a0c565b60405180910390fd5b610dec3361147a565b610e2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2290612a4c565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d5abeb016040518163ffffffff1660e01b815260040160206040518083038186803b158015610e9357600080fd5b505afa158015610ea7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ecb919061260e565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610f3357600080fd5b505afa158015610f47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6b919061260e565b1115610fac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa3906129ac565b60405180910390fd5b6000610fb733611f65565b9050600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001429080600181540180825580915050600190039060005260206000200160009091909190915055600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819080600181540180825580915050600190039060005260206000200160009091909190915055806003600082825461109d9190612b1c565b9250508190555080600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016111009190612844565b60206040518083038186803b15801561111857600080fd5b505afa15801561112c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611150919061260e565b10156111e557600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663379607f560006040518263ffffffff1660e01b81526004016111b29190612971565b600060405180830381600087803b1580156111cc57600080fd5b505af11580156111e0573d6000803e3d6000fd5b505050505b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016112429291906128bf565b602060405180830381600087803b15801561125c57600080fd5b505af1158015611270573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061129491906125b4565b5042600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055506000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003018190555050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61135561247a565b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020604051806040016040529081600082018054806020026020016040519081016040528092919081815260200182805480156113ee57602002820191906000526020600020905b8154815260200190600101908083116113da575b505050505081526020016001820180548060200260200160405190810160405280929190818152602001828054801561144657602002820191906000526020600020905b815481526020019060010190808311611432575b5050505050815250509050919050565b6004818154811061146657600080fd5b906000526020600020016000915090505481565b60008173ffffffffffffffffffffffffffffffffffffffff16600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16149050919050565b61151c6120e8565b73ffffffffffffffffffffffffffffffffffffffff1661153a6115a2565b73ffffffffffffffffffffffffffffffffffffffff1614611590576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158790612a2c565b60405180910390fd5b61159a600061211c565b565b60025481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60056020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030154908060040154905085565b600160149054906101000a900460ff16611670576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166790612a0c565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d5abeb016040518163ffffffff1660e01b815260040160206040518083038186803b1580156116d857600080fd5b505afa1580156116ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611710919061260e565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561177857600080fd5b505afa15801561178c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b0919061260e565b11156117f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e8906129ac565b60405180910390fd5b6117fa3361147a565b1561190557611808336121e0565b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160008282546118599190612b1c565b9250508190555080600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160008282546118b29190612b1c565b9250508190555042600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055506119f6565b6040518060a001604052803373ffffffffffffffffffffffffffffffffffffffff168152602001428152602001828152602001600081526020016000815250600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602082015181600101556040820151816002015560608201518160030155608082015181600401559050505b8060026000828254611a089190612b1c565b92505081905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401611a6e9392919061285f565b602060405180830381600087803b158015611a8857600080fd5b505af1158015611a9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ac091906125b4565b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637b0472f08260006040518363ffffffff1660e01b8152600401611b1f929190612aa9565b600060405180830381600087803b158015611b3957600080fd5b505af1158015611b4d573d6000803e3d6000fd5b505050507f227a473b70d2f893cc7659219575c030a63b5743024fe1e0c1a680e708b1525a81604051611b809190612a8e565b60405180910390a150565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201549050919050565b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006004600081548110611c2d57611c2c612d1f565b5b9060005260206000200154815260200190815260200160002060009054906101000a900460ff1615611c94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8b906129ec565b60405180910390fd5b6004600081548110611ca957611ca8612d1f565b5b9060005260206000200154600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015410611d0157600080fd5b6000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154905060006004600181548110611d5f57611d5e612d1f565b5b90600052602060002001549050600081670de0b6b3a764000084611d839190612ba3565b611d8d9190612b72565b90506000670de0b6b3a7640000826004600281548110611db057611daf612d1f565b5b9060005260206000200154611dc59190612ba3565b611dcf9190612b72565b90506001600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006004600081548110611e2957611e28612d1f565b5b9060005260206000200154815260200190815260200160002060006101000a81548160ff02191690831515021790555080600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206004016000828254611eab9190612b1c565b925050819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611ef8573d6000803e3d6000fd5b507f7bb2b3c10797baccb6f8c4791f1edd6ca2f0d028ee0eda64b01a9a57e3a653f781604051611f289190612a8e565b60405180910390a150505050565b60076020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b600080611f71836121e0565b90506000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003015490506000811115611fdf57611fd681836120f090919063ffffffff16565b92505050611fe5565b81925050505b919050565b60035481565b611ff86120e8565b73ffffffffffffffffffffffffffffffffffffffff166120166115a2565b73ffffffffffffffffffffffffffffffffffffffff161461206c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206390612a2c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156120dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d3906129cc565b60405180910390fd5b6120e58161211c565b50565b600033905090565b600081836120fe9190612b1c565b905092915050565b600081836121149190612bfd565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006121eb8261147a565b61222a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122219061298c565b60405180910390fd5b600061223583611b8b565b9050600061228f6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015461240190919063ffffffff16565b905060006122a760014261240190919063ffffffff16565b905060006122be838361210690919063ffffffff16565b905060006123876064612379600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166357ded9c96040518163ffffffff1660e01b815260040160206040518083038186803b15801561233257600080fd5b505afa158015612346573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061236a919061260e565b8861241790919063ffffffff16565b61240190919063ffffffff16565b905060006123d9603c6123cb603c6123bd60186123af61016d8961240190919063ffffffff16565b61240190919063ffffffff16565b61240190919063ffffffff16565b61240190919063ffffffff16565b905060006123f0848361241790919063ffffffff16565b905080975050505050505050919050565b6000818361240f9190612b72565b905092915050565b600081836124259190612ba3565b905092915050565b828054828255906000526020600020908101928215612469579160200282015b8281111561246857825182559160200191906001019061244d565b5b5090506124769190612494565b5090565b604051806040016040528060608152602001606081525090565b5b808211156124ad576000816000905550600101612495565b5090565b6000813590506124c081612ee4565b92915050565b6000813590506124d581612efb565b92915050565b6000815190506124ea81612efb565b92915050565b6000813590506124ff81612f12565b92915050565b60008151905061251481612f12565b92915050565b6000602082840312156125305761252f612d4e565b5b600061253e848285016124b1565b91505092915050565b6000806040838503121561255e5761255d612d4e565b5b600061256c858286016124b1565b925050602061257d858286016124f0565b9150509250929050565b60006020828403121561259d5761259c612d4e565b5b60006125ab848285016124c6565b91505092915050565b6000602082840312156125ca576125c9612d4e565b5b60006125d8848285016124db565b91505092915050565b6000602082840312156125f7576125f6612d4e565b5b6000612605848285016124f0565b91505092915050565b60006020828403121561262457612623612d4e565b5b600061263284828501612505565b91505092915050565b60006126478383612826565b60208301905092915050565b61265c81612c31565b82525050565b600061266d82612ae2565b6126778185612afa565b935061268283612ad2565b8060005b838110156126b357815161269a888261263b565b97506126a583612aed565b925050600181019050612686565b5085935050505092915050565b6126c981612c43565b82525050565b6126d881612c79565b82525050565b6126e781612c8b565b82525050565b60006126fa601483612b0b565b915061270582612d53565b602082019050919050565b600061271d602d83612b0b565b915061272882612d7c565b604082019050919050565b6000612740602683612b0b565b915061274b82612dcb565b604082019050919050565b6000612763602883612b0b565b915061276e82612e1a565b604082019050919050565b6000612786601783612b0b565b915061279182612e69565b602082019050919050565b60006127a9602083612b0b565b91506127b482612e92565b602082019050919050565b60006127cc601583612b0b565b91506127d782612ebb565b602082019050919050565b600060408301600083015184820360008601526127ff8282612662565b915050602083015184820360208601526128198282612662565b9150508091505092915050565b61282f81612c6f565b82525050565b61283e81612c6f565b82525050565b60006020820190506128596000830184612653565b92915050565b60006060820190506128746000830186612653565b6128816020830185612653565b61288e6040830184612835565b949350505050565b60006040820190506128ab6000830185612653565b6128b860208301846126de565b9392505050565b60006040820190506128d46000830185612653565b6128e16020830184612835565b9392505050565b600060a0820190506128fd6000830188612653565b61290a6020830187612835565b6129176040830186612835565b6129246060830185612835565b6129316080830184612835565b9695505050505050565b600060208201905061295060008301846126c0565b92915050565b600060208201905061296b60008301846126cf565b92915050565b600060208201905061298660008301846126de565b92915050565b600060208201905081810360008301526129a5816126ed565b9050919050565b600060208201905081810360008301526129c581612710565b9050919050565b600060208201905081810360008301526129e581612733565b9050919050565b60006020820190508181036000830152612a0581612756565b9050919050565b60006020820190508181036000830152612a2581612779565b9050919050565b60006020820190508181036000830152612a458161279c565b9050919050565b60006020820190508181036000830152612a65816127bf565b9050919050565b60006020820190508181036000830152612a8681846127e2565b905092915050565b6000602082019050612aa36000830184612835565b92915050565b6000604082019050612abe6000830185612835565b612acb60208301846126de565b9392505050565b6000819050602082019050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000612b2782612c6f565b9150612b3283612c6f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612b6757612b66612cc1565b5b828201905092915050565b6000612b7d82612c6f565b9150612b8883612c6f565b925082612b9857612b97612cf0565b5b828204905092915050565b6000612bae82612c6f565b9150612bb983612c6f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612bf257612bf1612cc1565b5b828202905092915050565b6000612c0882612c6f565b9150612c1383612c6f565b925082821015612c2657612c25612cc1565b5b828203905092915050565b6000612c3c82612c4f565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000612c8482612c9d565b9050919050565b6000612c9682612c6f565b9050919050565b6000612ca882612caf565b9050919050565b6000612cba82612c4f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b7f55736572206973206e6f74207374616b696e672e000000000000000000000000600082015250565b7f546865726520617265206e6f206d6f72652072657761726473206c656674207460008201527f6f20626520636c61696d65642e00000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f596f7520616c726561647920636c61696d656420796f7572206d6f6e74686c7960008201527f207265776172642e000000000000000000000000000000000000000000000000602082015250565b7f5374616b696e67206973206e6f7420656e61626c65642e000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f596f7520617265206e6f74207374616b696e67213f0000000000000000000000600082015250565b612eed81612c31565b8114612ef857600080fd5b50565b612f0481612c43565b8114612f0f57600080fd5b50565b612f1b81612c6f565b8114612f2657600080fd5b5056fea26469706673582212208085aa8597c3247e39fb59ae95d4a0595afaed4d9e44df03cd9ffca3b5a9ec3664736f6c634300080700330000000000000000000000004ae2cd1f5b8806a973953b76f9ce6d5fab9cdcfd
Deployed Bytecode
0x60806040526004361061011f5760003560e01c8063817b1cd2116100a0578063b4b72c1d11610064578063b4b72c1d146103a6578063c350f6ca146103bd578063cba72540146103fa578063d54ad2a114610437578063f2fde38b146104625761011f565b8063817b1cd2146102a95780638da5cb5b146102d45780639168ae72146102ff578063a694fc3a14610340578063acc3a939146103695761011f565b806362f21aad116100e757806362f21aad146101b05780636ceb23a1146101db5780636e0df713146102185780636f49712b14610255578063715018a6146102925761011f565b806314d6aed0146101245780631cfff51b1461012e5780632def6620146101595780633b51e5cf146101705780634e71d92d14610199575b600080fd5b61012c61048b565b005b34801561013a57600080fd5b50610143610537565b604051610150919061293b565b60405180910390f35b34801561016557600080fd5b5061016e61054a565b005b34801561017c57600080fd5b5061019760048036038101906101929190612587565b610cfb565b005b3480156101a557600080fd5b506101ae610d94565b005b3480156101bc57600080fd5b506101c5611327565b6040516101d29190612956565b60405180910390f35b3480156101e757600080fd5b5061020260048036038101906101fd919061251a565b61134d565b60405161020f9190612a6c565b60405180910390f35b34801561022457600080fd5b5061023f600480360381019061023a91906125e1565b611456565b60405161024c9190612a8e565b60405180910390f35b34801561026157600080fd5b5061027c6004803603810190610277919061251a565b61147a565b604051610289919061293b565b60405180910390f35b34801561029e57600080fd5b506102a7611514565b005b3480156102b557600080fd5b506102be61159c565b6040516102cb9190612a8e565b60405180910390f35b3480156102e057600080fd5b506102e96115a2565b6040516102f69190612844565b60405180910390f35b34801561030b57600080fd5b506103266004803603810190610321919061251a565b6115cb565b6040516103379594939291906128e8565b60405180910390f35b34801561034c57600080fd5b50610367600480360381019061036291906125e1565b611621565b005b34801561037557600080fd5b50610390600480360381019061038b919061251a565b611b8b565b60405161039d9190612a8e565b60405180910390f35b3480156103b257600080fd5b506103bb611bd7565b005b3480156103c957600080fd5b506103e460048036038101906103df9190612547565b611f36565b6040516103f1919061293b565b60405180910390f35b34801561040657600080fd5b50610421600480360381019061041c919061251a565b611f65565b60405161042e9190612a8e565b60405180910390f35b34801561044357600080fd5b5061044c611fea565b6040516104599190612a8e565b60405180910390f35b34801561046e57600080fd5b506104896004803603810190610484919061251a565b611ff0565b005b6104936120e8565b73ffffffffffffffffffffffffffffffffffffffff166104b16115a2565b73ffffffffffffffffffffffffffffffffffffffff1614610507576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104fe90612a2c565b60405180910390fd5b6040518060600160405280428152602001600254815260200134815250600490600361053492919061242d565b50565b600160149054906101000a900460ff1681565b6105533361147a565b610592576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161058990612a4c565b60405180910390fd5b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a39b21533060006040518363ffffffff1660e01b81526004016105f2929190612896565b60206040518083038186803b15801561060a57600080fd5b505afa15801561061e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610642919061260e565b9050600061064f33611f65565b90506000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154905060006106ad83836120f090919063ffffffff16565b905080600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161070b9190612844565b60206040518083038186803b15801561072357600080fd5b505afa158015610737573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061075b919061260e565b10156107f057600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632e17de7860006040518263ffffffff1660e01b81526004016107bd9190612971565b600060405180830381600087803b1580156107d757600080fd5b505af11580156107eb573d6000803e3d6000fd5b505050505b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d5abeb016040518163ffffffff1660e01b815260040160206040518083038186803b15801561085857600080fd5b505afa15801561086c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610890919061260e565b61094284600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156108fc57600080fd5b505afa158015610910573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610934919061260e565b6120f090919063ffffffff16565b10801561095b5750600160149054906101000a900460ff165b15610b0057600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001429080600181540180825580915050600190039060005260206000200160009091909190915055600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018390806001815401808255809150506001900390600052602060002001600090919091909150558260036000828254610a449190612b1c565b92505081905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401610aa89291906128bf565b602060405180830381600087803b158015610ac257600080fd5b505af1158015610ad6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610afa91906125b4565b50610bb1565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401610b5d9291906128bf565b602060405180830381600087803b158015610b7757600080fd5b505af1158015610b8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610baf91906125b4565b505b8160026000828254610bc39190612bfd565b92505081905550600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905560018201600090556002820160009055600382016000905560048201600090555050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637b0472f0610ca4848761210690919063ffffffff16565b60006040518363ffffffff1660e01b8152600401610cc3929190612aa9565b600060405180830381600087803b158015610cdd57600080fd5b505af1158015610cf1573d6000803e3d6000fd5b5050505050505050565b610d036120e8565b73ffffffffffffffffffffffffffffffffffffffff16610d216115a2565b73ffffffffffffffffffffffffffffffffffffffff1614610d77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6e90612a2c565b60405180910390fd5b80600160146101000a81548160ff02191690831515021790555050565b600160149054906101000a900460ff16610de3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dda90612a0c565b60405180910390fd5b610dec3361147a565b610e2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2290612a4c565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d5abeb016040518163ffffffff1660e01b815260040160206040518083038186803b158015610e9357600080fd5b505afa158015610ea7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ecb919061260e565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610f3357600080fd5b505afa158015610f47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6b919061260e565b1115610fac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa3906129ac565b60405180910390fd5b6000610fb733611f65565b9050600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001429080600181540180825580915050600190039060005260206000200160009091909190915055600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819080600181540180825580915050600190039060005260206000200160009091909190915055806003600082825461109d9190612b1c565b9250508190555080600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016111009190612844565b60206040518083038186803b15801561111857600080fd5b505afa15801561112c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611150919061260e565b10156111e557600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663379607f560006040518263ffffffff1660e01b81526004016111b29190612971565b600060405180830381600087803b1580156111cc57600080fd5b505af11580156111e0573d6000803e3d6000fd5b505050505b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016112429291906128bf565b602060405180830381600087803b15801561125c57600080fd5b505af1158015611270573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061129491906125b4565b5042600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055506000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003018190555050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61135561247a565b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020604051806040016040529081600082018054806020026020016040519081016040528092919081815260200182805480156113ee57602002820191906000526020600020905b8154815260200190600101908083116113da575b505050505081526020016001820180548060200260200160405190810160405280929190818152602001828054801561144657602002820191906000526020600020905b815481526020019060010190808311611432575b5050505050815250509050919050565b6004818154811061146657600080fd5b906000526020600020016000915090505481565b60008173ffffffffffffffffffffffffffffffffffffffff16600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16149050919050565b61151c6120e8565b73ffffffffffffffffffffffffffffffffffffffff1661153a6115a2565b73ffffffffffffffffffffffffffffffffffffffff1614611590576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158790612a2c565b60405180910390fd5b61159a600061211c565b565b60025481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60056020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030154908060040154905085565b600160149054906101000a900460ff16611670576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166790612a0c565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d5abeb016040518163ffffffff1660e01b815260040160206040518083038186803b1580156116d857600080fd5b505afa1580156116ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611710919061260e565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561177857600080fd5b505afa15801561178c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b0919061260e565b11156117f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e8906129ac565b60405180910390fd5b6117fa3361147a565b1561190557611808336121e0565b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160008282546118599190612b1c565b9250508190555080600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160008282546118b29190612b1c565b9250508190555042600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055506119f6565b6040518060a001604052803373ffffffffffffffffffffffffffffffffffffffff168152602001428152602001828152602001600081526020016000815250600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602082015181600101556040820151816002015560608201518160030155608082015181600401559050505b8060026000828254611a089190612b1c565b92505081905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401611a6e9392919061285f565b602060405180830381600087803b158015611a8857600080fd5b505af1158015611a9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ac091906125b4565b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637b0472f08260006040518363ffffffff1660e01b8152600401611b1f929190612aa9565b600060405180830381600087803b158015611b3957600080fd5b505af1158015611b4d573d6000803e3d6000fd5b505050507f227a473b70d2f893cc7659219575c030a63b5743024fe1e0c1a680e708b1525a81604051611b809190612a8e565b60405180910390a150565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201549050919050565b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006004600081548110611c2d57611c2c612d1f565b5b9060005260206000200154815260200190815260200160002060009054906101000a900460ff1615611c94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8b906129ec565b60405180910390fd5b6004600081548110611ca957611ca8612d1f565b5b9060005260206000200154600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015410611d0157600080fd5b6000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154905060006004600181548110611d5f57611d5e612d1f565b5b90600052602060002001549050600081670de0b6b3a764000084611d839190612ba3565b611d8d9190612b72565b90506000670de0b6b3a7640000826004600281548110611db057611daf612d1f565b5b9060005260206000200154611dc59190612ba3565b611dcf9190612b72565b90506001600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006004600081548110611e2957611e28612d1f565b5b9060005260206000200154815260200190815260200160002060006101000a81548160ff02191690831515021790555080600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206004016000828254611eab9190612b1c565b925050819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611ef8573d6000803e3d6000fd5b507f7bb2b3c10797baccb6f8c4791f1edd6ca2f0d028ee0eda64b01a9a57e3a653f781604051611f289190612a8e565b60405180910390a150505050565b60076020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b600080611f71836121e0565b90506000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003015490506000811115611fdf57611fd681836120f090919063ffffffff16565b92505050611fe5565b81925050505b919050565b60035481565b611ff86120e8565b73ffffffffffffffffffffffffffffffffffffffff166120166115a2565b73ffffffffffffffffffffffffffffffffffffffff161461206c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206390612a2c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156120dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d3906129cc565b60405180910390fd5b6120e58161211c565b50565b600033905090565b600081836120fe9190612b1c565b905092915050565b600081836121149190612bfd565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006121eb8261147a565b61222a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122219061298c565b60405180910390fd5b600061223583611b8b565b9050600061228f6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015461240190919063ffffffff16565b905060006122a760014261240190919063ffffffff16565b905060006122be838361210690919063ffffffff16565b905060006123876064612379600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166357ded9c96040518163ffffffff1660e01b815260040160206040518083038186803b15801561233257600080fd5b505afa158015612346573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061236a919061260e565b8861241790919063ffffffff16565b61240190919063ffffffff16565b905060006123d9603c6123cb603c6123bd60186123af61016d8961240190919063ffffffff16565b61240190919063ffffffff16565b61240190919063ffffffff16565b61240190919063ffffffff16565b905060006123f0848361241790919063ffffffff16565b905080975050505050505050919050565b6000818361240f9190612b72565b905092915050565b600081836124259190612ba3565b905092915050565b828054828255906000526020600020908101928215612469579160200282015b8281111561246857825182559160200191906001019061244d565b5b5090506124769190612494565b5090565b604051806040016040528060608152602001606081525090565b5b808211156124ad576000816000905550600101612495565b5090565b6000813590506124c081612ee4565b92915050565b6000813590506124d581612efb565b92915050565b6000815190506124ea81612efb565b92915050565b6000813590506124ff81612f12565b92915050565b60008151905061251481612f12565b92915050565b6000602082840312156125305761252f612d4e565b5b600061253e848285016124b1565b91505092915050565b6000806040838503121561255e5761255d612d4e565b5b600061256c858286016124b1565b925050602061257d858286016124f0565b9150509250929050565b60006020828403121561259d5761259c612d4e565b5b60006125ab848285016124c6565b91505092915050565b6000602082840312156125ca576125c9612d4e565b5b60006125d8848285016124db565b91505092915050565b6000602082840312156125f7576125f6612d4e565b5b6000612605848285016124f0565b91505092915050565b60006020828403121561262457612623612d4e565b5b600061263284828501612505565b91505092915050565b60006126478383612826565b60208301905092915050565b61265c81612c31565b82525050565b600061266d82612ae2565b6126778185612afa565b935061268283612ad2565b8060005b838110156126b357815161269a888261263b565b97506126a583612aed565b925050600181019050612686565b5085935050505092915050565b6126c981612c43565b82525050565b6126d881612c79565b82525050565b6126e781612c8b565b82525050565b60006126fa601483612b0b565b915061270582612d53565b602082019050919050565b600061271d602d83612b0b565b915061272882612d7c565b604082019050919050565b6000612740602683612b0b565b915061274b82612dcb565b604082019050919050565b6000612763602883612b0b565b915061276e82612e1a565b604082019050919050565b6000612786601783612b0b565b915061279182612e69565b602082019050919050565b60006127a9602083612b0b565b91506127b482612e92565b602082019050919050565b60006127cc601583612b0b565b91506127d782612ebb565b602082019050919050565b600060408301600083015184820360008601526127ff8282612662565b915050602083015184820360208601526128198282612662565b9150508091505092915050565b61282f81612c6f565b82525050565b61283e81612c6f565b82525050565b60006020820190506128596000830184612653565b92915050565b60006060820190506128746000830186612653565b6128816020830185612653565b61288e6040830184612835565b949350505050565b60006040820190506128ab6000830185612653565b6128b860208301846126de565b9392505050565b60006040820190506128d46000830185612653565b6128e16020830184612835565b9392505050565b600060a0820190506128fd6000830188612653565b61290a6020830187612835565b6129176040830186612835565b6129246060830185612835565b6129316080830184612835565b9695505050505050565b600060208201905061295060008301846126c0565b92915050565b600060208201905061296b60008301846126cf565b92915050565b600060208201905061298660008301846126de565b92915050565b600060208201905081810360008301526129a5816126ed565b9050919050565b600060208201905081810360008301526129c581612710565b9050919050565b600060208201905081810360008301526129e581612733565b9050919050565b60006020820190508181036000830152612a0581612756565b9050919050565b60006020820190508181036000830152612a2581612779565b9050919050565b60006020820190508181036000830152612a458161279c565b9050919050565b60006020820190508181036000830152612a65816127bf565b9050919050565b60006020820190508181036000830152612a8681846127e2565b905092915050565b6000602082019050612aa36000830184612835565b92915050565b6000604082019050612abe6000830185612835565b612acb60208301846126de565b9392505050565b6000819050602082019050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000612b2782612c6f565b9150612b3283612c6f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612b6757612b66612cc1565b5b828201905092915050565b6000612b7d82612c6f565b9150612b8883612c6f565b925082612b9857612b97612cf0565b5b828204905092915050565b6000612bae82612c6f565b9150612bb983612c6f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612bf257612bf1612cc1565b5b828202905092915050565b6000612c0882612c6f565b9150612c1383612c6f565b925082821015612c2657612c25612cc1565b5b828203905092915050565b6000612c3c82612c4f565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000612c8482612c9d565b9050919050565b6000612c9682612c6f565b9050919050565b6000612ca882612caf565b9050919050565b6000612cba82612c4f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b7f55736572206973206e6f74207374616b696e672e000000000000000000000000600082015250565b7f546865726520617265206e6f206d6f72652072657761726473206c656674207460008201527f6f20626520636c61696d65642e00000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f596f7520616c726561647920636c61696d656420796f7572206d6f6e74686c7960008201527f207265776172642e000000000000000000000000000000000000000000000000602082015250565b7f5374616b696e67206973206e6f7420656e61626c65642e000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f596f7520617265206e6f74207374616b696e67213f0000000000000000000000600082015250565b612eed81612c31565b8114612ef857600080fd5b50565b612f0481612c43565b8114612f0f57600080fd5b50565b612f1b81612c6f565b8114612f2657600080fd5b5056fea26469706673582212208085aa8597c3247e39fb59ae95d4a0595afaed4d9e44df03cd9ffca3b5a9ec3664736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000004ae2cd1f5b8806a973953b76f9ce6d5fab9cdcfd
-----Decoded View---------------
Arg [0] : native (address): 0x4Ae2Cd1F5B8806a973953B76f9Ce6d5FAB9cdcfd
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000004ae2cd1f5b8806a973953b76f9ce6d5fab9cdcfd
Deployed Bytecode Sourcemap
90:6225:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5348:125;;;:::i;:::-;;191:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4371:905;;;;;;;;;;;;;:::i;:::-;;6215:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3640:648;;;;;;;;;;;;;:::i;:::-;;166:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1580:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;299:30;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1179:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15066:103:0;;;;;;;;;;;;;:::i;:::-;;232:26:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14843:87:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;644:41:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;2805:750;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1383:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5534:619;;;;;;;;;;;;;:::i;:::-;;753:70;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1783:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;265:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15177:201:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5348:125:1;14989:12:0;:10;:12::i;:::-;14978:23;;:7;:5;:7::i;:::-;:23;;;14970:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5408:57:1::1;;;;;;;;5425:15;5408:57;;;;5442:11;;5408:57;;;;5455:9;5408:57;;::::0;:13:::1;:57;;;;;;;:::i;:::-;;5348:125::o:0;191:34::-;;;;;;;;;;;;;:::o;4371:905::-;4418:21;4428:10;4418:9;:21::i;:::-;4410:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;4478:15;4496:5;;;;;;;;;;;:16;;;4521:4;4528:1;4496:34;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4478:52;;4541:14;4558:22;4569:10;4558;:22::i;:::-;4541:39;;4591:14;4608:7;:19;4616:10;4608:19;;;;;;;;;;;;;;;:26;;;4591:43;;4645:18;4666;4677:6;4666;:10;;:18;;;;:::i;:::-;4645:39;;4732:10;4699:5;;;;;;;;;;;:15;;;4723:4;4699:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:43;4695:65;;;4744:5;;;;;;;;;;;:13;;;4758:1;4744:16;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4695:65;4811:5;;;;;;;;;;;:15;;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4777:31;4801:6;4777:5;;;;;;;;;;;:17;;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:23;;:31;;;;:::i;:::-;:51;:69;;;;;4832:14;;;;;;;;;;;4777:69;4773:375;;;4863:13;:25;4877:10;4863:25;;;;;;;;;;;;;;;:31;;4900:15;4863:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4931:13;:25;4945:10;4931:25;;;;;;;;;;;;;;;:33;;4970:6;4931:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5008:6;4992:12;;:22;;;;;;;:::i;:::-;;;;;;;;5031:5;;;;;;;;;;;:14;;;5046:10;5058;5031:38;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4773:375;;;5102:5;;;;;;;;;;;:14;;;5117:10;5129:6;5102:34;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4773:375;5175:6;5160:11;;:21;;;;;;;:::i;:::-;;;;;;;;5201:7;:19;5209:10;5201:19;;;;;;;;;;;;;;;;5194:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5233:5;;;;;;;;;;;:11;;;5245:19;5257:6;5245:7;:11;;:19;;;;:::i;:::-;5266:1;5233:35;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4399:877;;;;4371:905::o;6215:97::-;14989:12:0;:10;:12::i;:::-;14978:23;;:7;:5;:7::i;:::-;:23;;;14970:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6299:5:1::1;6282:14;;:22;;;;;;;;;;;;;;;;;;6215:97:::0;:::o;3640:648::-;1052:14;;;;;;;;;;;1044:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;3702:21:::1;3712:10;3702:9;:21::i;:::-;3694:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;3791:5;;;;;;;;;;;:15;;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3768:5;;;;;;;;;;;:17;;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:40;;3760:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;3871:14;3888:22;3899:10;3888;:22::i;:::-;3871:39;;3923:13;:25;3937:10;3923:25;;;;;;;;;;;;;;;:31;;3960:15;3923:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3987:13;:25;4001:10;3987:25;;;;;;;;;;;;;;;:33;;4026:6;3987:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4060:6;4044:12;;:22;;;;;;;:::i;:::-;;;;;;;;4116:6;4083:5;;;;;;;;;;;:15;;;4107:4;4083:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:39;4079:59;;;4124:5;;;;;;;;;;;:11;;;4136:1;4124:14;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;4079:59;4149:5;;;;;;;;;;;:14;;;4164:10;4176:6;4149:34;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4224:15;4196:7;:19;4204:10;4196:19;;;;;;;;;;;;;;;:25;;:43;;;;4279:1;4250:7;:19;4258:10;4250:19;;;;;;;;;;;;;;;:26;;:30;;;;3683:605;3640:648::o:0;166:18::-;;;;;;;;;;;;;:::o;1580:131::-;1643:19;;:::i;:::-;1682:13;:21;1696:6;1682:21;;;;;;;;;;;;;;;1675:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1580:131;;;:::o;299:30::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1179:132::-;1239:4;1293:10;1263:40;;:7;:19;1271:10;1263:19;;;;;;;;;;;;;;;:26;;;;;;;;;;;;:40;;;1256:47;;1179:132;;;:::o;15066:103:0:-;14989:12;:10;:12::i;:::-;14978:23;;:7;:5;:7::i;:::-;:23;;;14970:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15131:30:::1;15158:1;15131:18;:30::i;:::-;15066:103::o:0;232:26:1:-;;;;:::o;14843:87:0:-;14889:7;14916:6;;;;;;;;;;;14909:13;;14843:87;:::o;644:41:1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2805:750::-;1052:14;;;;;;;;;;;1044:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;2909:5:::1;;;;;;;;;;;:15;;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2886:5;;;;;;;;;;;:17;;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:40;;2878:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;3040:21;3050:10;3040:9;:21::i;:::-;3036:330;;;3108:23;3120:10;3108:11;:23::i;:::-;3078:7;:19;3086:10;3078:19;;;;;;;;;;;;;;;:26;;;:53;;;;;;;:::i;:::-;;;;;;;;3176:11;3146:7;:19;3154:10;3146:19;;;;;;;;;;;;;;;:26;;;:41;;;;;;;:::i;:::-;;;;;;;;3230:15;3202:7;:19;3210:10;3202:19;;;;;;;;;;;;;;;:25;;:43;;;;3036:330;;;3300:54;;;;;;;;3307:10;3300:54;;;;;;3319:15;3300:54;;;;3336:11;3300:54;;;;3349:1;3300:54;;;;3352:1;3300:54;;::::0;3278:7:::1;:19;3286:10;3278:19;;;;;;;;;;;;;;;:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3036:330;3393:11;3378;;:26;;;;;;;:::i;:::-;;;;;;;;3415:5;;;;;;;;;;;:18;;;3434:10;3454:4;3461:11;3415:58;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;3484:5;;;;;;;;;;;:11;;;3496;3509:1;3484:27;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;3529:18;3535:11;3529:18;;;;;;:::i;:::-;;;;;;;;2805:750:::0;:::o;1383:114::-;1440:7;1467;:15;1475:6;1467:15;;;;;;;;;;;;;;;:22;;;1460:29;;1383:114;;;:::o;5534:619::-;5590:18;:30;5609:10;5590:30;;;;;;;;;;;;;;;:48;5621:13;5635:1;5621:16;;;;;;;;:::i;:::-;;;;;;;;;;5590:48;;;;;;;;;;;;;;;;;;;;;5589:49;5581:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;5730:13;5744:1;5730:16;;;;;;;;:::i;:::-;;;;;;;;;;5702:7;:19;5710:10;5702:19;;;;;;;;;;;;;;;:25;;;:44;5694:53;;;;;;5760:14;5777:7;:19;5785:10;5777:19;;;;;;;;;;;;;;;:26;;;5760:43;;5814:13;5830;5844:1;5830:16;;;;;;;;:::i;:::-;;;;;;;;;;5814:32;;5857:9;5887:5;5879:4;5870:6;:13;;;;:::i;:::-;5869:23;;;;:::i;:::-;5857:35;;5903:14;5943:4;5939:1;5920:13;5934:1;5920:16;;;;;;;;:::i;:::-;;;;;;;;;;:20;;;;:::i;:::-;:27;;;;:::i;:::-;5903:44;;6011:4;5960:18;:30;5979:10;5960:30;;;;;;;;;;;;;;;:48;5991:13;6005:1;5991:16;;;;;;;;:::i;:::-;;;;;;;;;;5960:48;;;;;;;;;;;;:55;;;;;;;;;;;;;;;;;;6061:6;6028:7;:19;6036:10;6028:19;;;;;;;;;;;;;;;:29;;;:39;;;;;;;:::i;:::-;;;;;;;;6086:10;6078:28;;:36;6107:6;6078:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6132:13;6138:6;6132:13;;;;;;:::i;:::-;;;;;;;;5570:583;;;;5534:619::o;753:70::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1783:310::-;1840:7;1860:23;1886:19;1898:6;1886:11;:19::i;:::-;1860:45;;1916:24;1943:7;:19;1951:10;1943:19;;;;;;;;;;;;;;;:26;;;1916:53;;2005:1;1986:16;:20;1982:70;;;2015:37;2035:16;2015:15;:19;;:37;;;;:::i;:::-;2008:44;;;;;;1982:70;2070:15;2063:22;;;;1783:310;;;;:::o;265:27::-;;;;:::o;15177:201:0:-;14989:12;:10;:12::i;:::-;14978:23;;:7;:5;:7::i;:::-;:23;;;14970:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15286:1:::1;15266:22;;:8;:22;;;;15258:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;15342:28;15361:8;15342:18;:28::i;:::-;15177:201:::0;:::o;166:98::-;219:7;246:10;239:17;;166:98;:::o;16957:::-;17015:7;17046:1;17042;:5;;;;:::i;:::-;17035:12;;16957:98;;;;:::o;17063:::-;17121:7;17152:1;17148;:5;;;;:::i;:::-;17141:12;;17063:98;;;;:::o;15386:191::-;15460:16;15479:6;;;;;;;;;;;15460:25;;15505:8;15496:6;;:17;;;;;;;;;;;;;;;;;;15560:8;15529:40;;15550:8;15529:40;;;;;;;;;;;;15449:128;15386:191;:::o;2101:640:1:-;2160:7;2188:17;2198:6;2188:9;:17::i;:::-;2180:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;2243:14;2260:18;2271:6;2260:10;:18::i;:::-;2243:35;;2289:29;2321:36;2347:9;2321:7;:15;2329:6;2321:15;;;;;;;;;;;;;;;:21;;;:25;;:36;;;;:::i;:::-;2289:68;;2368:31;2402:30;2422:9;2402:15;:19;;:30;;;;:::i;:::-;2368:64;;2443:21;2467:50;2495:21;2467:23;:27;;:50;;;;:::i;:::-;2443:74;;2530:12;2545:32;2573:3;2545:23;2556:5;;;;;;;;;;;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2545:6;:10;;:23;;;;:::i;:::-;:27;;:32;;;;:::i;:::-;2530:47;;2588:20;2611:37;2645:2;2611:29;2637:2;2611:21;2629:2;2611:13;2620:3;2611:4;:8;;:13;;;;:::i;:::-;:17;;:21;;;;:::i;:::-;:25;;:29;;;;:::i;:::-;:33;;:37;;;;:::i;:::-;2588:60;;2659:14;2676:31;2693:13;2676:12;:16;;:31;;;;:::i;:::-;2659:48;;2727:6;2720:13;;;;;;;;;2101:640;;;:::o;17275:98:0:-;17333:7;17364:1;17360;:5;;;;:::i;:::-;17353:12;;17275:98;;;;:::o;17169:::-;17227:7;17258:1;17254;:5;;;;:::i;:::-;17247:12;;17169:98;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:139:2:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;7:139;;;;:::o;152:133::-;195:5;233:6;220:20;211:29;;249:30;273:5;249:30;:::i;:::-;152:133;;;;:::o;291:137::-;345:5;376:6;370:13;361:22;;392:30;416:5;392:30;:::i;:::-;291:137;;;;:::o;434:139::-;480:5;518:6;505:20;496:29;;534:33;561:5;534:33;:::i;:::-;434:139;;;;:::o;579:143::-;636:5;667:6;661:13;652:22;;683:33;710:5;683:33;:::i;:::-;579:143;;;;:::o;728:329::-;787:6;836:2;824:9;815:7;811:23;807:32;804:119;;;842:79;;:::i;:::-;804:119;962:1;987:53;1032:7;1023:6;1012:9;1008:22;987:53;:::i;:::-;977:63;;933:117;728:329;;;;:::o;1063:474::-;1131:6;1139;1188:2;1176:9;1167:7;1163:23;1159:32;1156:119;;;1194:79;;:::i;:::-;1156:119;1314:1;1339:53;1384:7;1375:6;1364:9;1360:22;1339:53;:::i;:::-;1329:63;;1285:117;1441:2;1467:53;1512:7;1503:6;1492:9;1488:22;1467:53;:::i;:::-;1457:63;;1412:118;1063:474;;;;;:::o;1543:323::-;1599:6;1648:2;1636:9;1627:7;1623:23;1619:32;1616:119;;;1654:79;;:::i;:::-;1616:119;1774:1;1799:50;1841:7;1832:6;1821:9;1817:22;1799:50;:::i;:::-;1789:60;;1745:114;1543:323;;;;:::o;1872:345::-;1939:6;1988:2;1976:9;1967:7;1963:23;1959:32;1956:119;;;1994:79;;:::i;:::-;1956:119;2114:1;2139:61;2192:7;2183:6;2172:9;2168:22;2139:61;:::i;:::-;2129:71;;2085:125;1872:345;;;;:::o;2223:329::-;2282:6;2331:2;2319:9;2310:7;2306:23;2302:32;2299:119;;;2337:79;;:::i;:::-;2299:119;2457:1;2482:53;2527:7;2518:6;2507:9;2503:22;2482:53;:::i;:::-;2472:63;;2428:117;2223:329;;;;:::o;2558:351::-;2628:6;2677:2;2665:9;2656:7;2652:23;2648:32;2645:119;;;2683:79;;:::i;:::-;2645:119;2803:1;2828:64;2884:7;2875:6;2864:9;2860:22;2828:64;:::i;:::-;2818:74;;2774:128;2558:351;;;;:::o;2915:179::-;2984:10;3005:46;3047:3;3039:6;3005:46;:::i;:::-;3083:4;3078:3;3074:14;3060:28;;2915:179;;;;:::o;3100:118::-;3187:24;3205:5;3187:24;:::i;:::-;3182:3;3175:37;3100:118;;:::o;3254:712::-;3363:3;3392:54;3440:5;3392:54;:::i;:::-;3462:76;3531:6;3526:3;3462:76;:::i;:::-;3455:83;;3562:56;3612:5;3562:56;:::i;:::-;3641:7;3672:1;3657:284;3682:6;3679:1;3676:13;3657:284;;;3758:6;3752:13;3785:63;3844:3;3829:13;3785:63;:::i;:::-;3778:70;;3871:60;3924:6;3871:60;:::i;:::-;3861:70;;3717:224;3704:1;3701;3697:9;3692:14;;3657:284;;;3661:14;3957:3;3950:10;;3368:598;;;3254:712;;;;:::o;3972:109::-;4053:21;4068:5;4053:21;:::i;:::-;4048:3;4041:34;3972:109;;:::o;4087:175::-;4196:59;4249:5;4196:59;:::i;:::-;4191:3;4184:72;4087:175;;:::o;4268:147::-;4363:45;4402:5;4363:45;:::i;:::-;4358:3;4351:58;4268:147;;:::o;4421:366::-;4563:3;4584:67;4648:2;4643:3;4584:67;:::i;:::-;4577:74;;4660:93;4749:3;4660:93;:::i;:::-;4778:2;4773:3;4769:12;4762:19;;4421:366;;;:::o;4793:::-;4935:3;4956:67;5020:2;5015:3;4956:67;:::i;:::-;4949:74;;5032:93;5121:3;5032:93;:::i;:::-;5150:2;5145:3;5141:12;5134:19;;4793:366;;;:::o;5165:::-;5307:3;5328:67;5392:2;5387:3;5328:67;:::i;:::-;5321:74;;5404:93;5493:3;5404:93;:::i;:::-;5522:2;5517:3;5513:12;5506:19;;5165:366;;;:::o;5537:::-;5679:3;5700:67;5764:2;5759:3;5700:67;:::i;:::-;5693:74;;5776:93;5865:3;5776:93;:::i;:::-;5894:2;5889:3;5885:12;5878:19;;5537:366;;;:::o;5909:::-;6051:3;6072:67;6136:2;6131:3;6072:67;:::i;:::-;6065:74;;6148:93;6237:3;6148:93;:::i;:::-;6266:2;6261:3;6257:12;6250:19;;5909:366;;;:::o;6281:::-;6423:3;6444:67;6508:2;6503:3;6444:67;:::i;:::-;6437:74;;6520:93;6609:3;6520:93;:::i;:::-;6638:2;6633:3;6629:12;6622:19;;6281:366;;;:::o;6653:::-;6795:3;6816:67;6880:2;6875:3;6816:67;:::i;:::-;6809:74;;6892:93;6981:3;6892:93;:::i;:::-;7010:2;7005:3;7001:12;6994:19;;6653:366;;;:::o;7103:751::-;7232:3;7268:4;7263:3;7259:14;7356:4;7349:5;7345:16;7339:23;7409:3;7403:4;7399:14;7392:4;7387:3;7383:14;7376:38;7435:103;7533:4;7519:12;7435:103;:::i;:::-;7427:111;;7283:266;7634:4;7627:5;7623:16;7617:23;7687:3;7681:4;7677:14;7670:4;7665:3;7661:14;7654:38;7713:103;7811:4;7797:12;7713:103;:::i;:::-;7705:111;;7559:268;7844:4;7837:11;;7237:617;7103:751;;;;:::o;7860:108::-;7937:24;7955:5;7937:24;:::i;:::-;7932:3;7925:37;7860:108;;:::o;7974:118::-;8061:24;8079:5;8061:24;:::i;:::-;8056:3;8049:37;7974:118;;:::o;8098:222::-;8191:4;8229:2;8218:9;8214:18;8206:26;;8242:71;8310:1;8299:9;8295:17;8286:6;8242:71;:::i;:::-;8098:222;;;;:::o;8326:442::-;8475:4;8513:2;8502:9;8498:18;8490:26;;8526:71;8594:1;8583:9;8579:17;8570:6;8526:71;:::i;:::-;8607:72;8675:2;8664:9;8660:18;8651:6;8607:72;:::i;:::-;8689;8757:2;8746:9;8742:18;8733:6;8689:72;:::i;:::-;8326:442;;;;;;:::o;8774:348::-;8903:4;8941:2;8930:9;8926:18;8918:26;;8954:71;9022:1;9011:9;9007:17;8998:6;8954:71;:::i;:::-;9035:80;9111:2;9100:9;9096:18;9087:6;9035:80;:::i;:::-;8774:348;;;;;:::o;9128:332::-;9249:4;9287:2;9276:9;9272:18;9264:26;;9300:71;9368:1;9357:9;9353:17;9344:6;9300:71;:::i;:::-;9381:72;9449:2;9438:9;9434:18;9425:6;9381:72;:::i;:::-;9128:332;;;;;:::o;9466:664::-;9671:4;9709:3;9698:9;9694:19;9686:27;;9723:71;9791:1;9780:9;9776:17;9767:6;9723:71;:::i;:::-;9804:72;9872:2;9861:9;9857:18;9848:6;9804:72;:::i;:::-;9886;9954:2;9943:9;9939:18;9930:6;9886:72;:::i;:::-;9968;10036:2;10025:9;10021:18;10012:6;9968:72;:::i;:::-;10050:73;10118:3;10107:9;10103:19;10094:6;10050:73;:::i;:::-;9466:664;;;;;;;;:::o;10136:210::-;10223:4;10261:2;10250:9;10246:18;10238:26;;10274:65;10336:1;10325:9;10321:17;10312:6;10274:65;:::i;:::-;10136:210;;;;:::o;10352:266::-;10467:4;10505:2;10494:9;10490:18;10482:26;;10518:93;10608:1;10597:9;10593:17;10584:6;10518:93;:::i;:::-;10352:266;;;;:::o;10624:238::-;10725:4;10763:2;10752:9;10748:18;10740:26;;10776:79;10852:1;10841:9;10837:17;10828:6;10776:79;:::i;:::-;10624:238;;;;:::o;10868:419::-;11034:4;11072:2;11061:9;11057:18;11049:26;;11121:9;11115:4;11111:20;11107:1;11096:9;11092:17;11085:47;11149:131;11275:4;11149:131;:::i;:::-;11141:139;;10868:419;;;:::o;11293:::-;11459:4;11497:2;11486:9;11482:18;11474:26;;11546:9;11540:4;11536:20;11532:1;11521:9;11517:17;11510:47;11574:131;11700:4;11574:131;:::i;:::-;11566:139;;11293:419;;;:::o;11718:::-;11884:4;11922:2;11911:9;11907:18;11899:26;;11971:9;11965:4;11961:20;11957:1;11946:9;11942:17;11935:47;11999:131;12125:4;11999:131;:::i;:::-;11991:139;;11718:419;;;:::o;12143:::-;12309:4;12347:2;12336:9;12332:18;12324:26;;12396:9;12390:4;12386:20;12382:1;12371:9;12367:17;12360:47;12424:131;12550:4;12424:131;:::i;:::-;12416:139;;12143:419;;;:::o;12568:::-;12734:4;12772:2;12761:9;12757:18;12749:26;;12821:9;12815:4;12811:20;12807:1;12796:9;12792:17;12785:47;12849:131;12975:4;12849:131;:::i;:::-;12841:139;;12568:419;;;:::o;12993:::-;13159:4;13197:2;13186:9;13182:18;13174:26;;13246:9;13240:4;13236:20;13232:1;13221:9;13217:17;13210:47;13274:131;13400:4;13274:131;:::i;:::-;13266:139;;12993:419;;;:::o;13418:::-;13584:4;13622:2;13611:9;13607:18;13599:26;;13671:9;13665:4;13661:20;13657:1;13646:9;13642:17;13635:47;13699:131;13825:4;13699:131;:::i;:::-;13691:139;;13418:419;;;:::o;13843:393::-;13996:4;14034:2;14023:9;14019:18;14011:26;;14083:9;14077:4;14073:20;14069:1;14058:9;14054:17;14047:47;14111:118;14224:4;14215:6;14111:118;:::i;:::-;14103:126;;13843:393;;;;:::o;14242:222::-;14335:4;14373:2;14362:9;14358:18;14350:26;;14386:71;14454:1;14443:9;14439:17;14430:6;14386:71;:::i;:::-;14242:222;;;;:::o;14470:348::-;14599:4;14637:2;14626:9;14622:18;14614:26;;14650:71;14718:1;14707:9;14703:17;14694:6;14650:71;:::i;:::-;14731:80;14807:2;14796:9;14792:18;14783:6;14731:80;:::i;:::-;14470:348;;;;;:::o;14905:132::-;14972:4;14995:3;14987:11;;15025:4;15020:3;15016:14;15008:22;;14905:132;;;:::o;15043:114::-;15110:6;15144:5;15138:12;15128:22;;15043:114;;;:::o;15163:113::-;15233:4;15265;15260:3;15256:14;15248:22;;15163:113;;;:::o;15282:174::-;15371:11;15405:6;15400:3;15393:19;15445:4;15440:3;15436:14;15421:29;;15282:174;;;;:::o;15462:169::-;15546:11;15580:6;15575:3;15568:19;15620:4;15615:3;15611:14;15596:29;;15462:169;;;;:::o;15637:305::-;15677:3;15696:20;15714:1;15696:20;:::i;:::-;15691:25;;15730:20;15748:1;15730:20;:::i;:::-;15725:25;;15884:1;15816:66;15812:74;15809:1;15806:81;15803:107;;;15890:18;;:::i;:::-;15803:107;15934:1;15931;15927:9;15920:16;;15637:305;;;;:::o;15948:185::-;15988:1;16005:20;16023:1;16005:20;:::i;:::-;16000:25;;16039:20;16057:1;16039:20;:::i;:::-;16034:25;;16078:1;16068:35;;16083:18;;:::i;:::-;16068:35;16125:1;16122;16118:9;16113:14;;15948:185;;;;:::o;16139:348::-;16179:7;16202:20;16220:1;16202:20;:::i;:::-;16197:25;;16236:20;16254:1;16236:20;:::i;:::-;16231:25;;16424:1;16356:66;16352:74;16349:1;16346:81;16341:1;16334:9;16327:17;16323:105;16320:131;;;16431:18;;:::i;:::-;16320:131;16479:1;16476;16472:9;16461:20;;16139:348;;;;:::o;16493:191::-;16533:4;16553:20;16571:1;16553:20;:::i;:::-;16548:25;;16587:20;16605:1;16587:20;:::i;:::-;16582:25;;16626:1;16623;16620:8;16617:34;;;16631:18;;:::i;:::-;16617:34;16676:1;16673;16669:9;16661:17;;16493:191;;;;:::o;16690:96::-;16727:7;16756:24;16774:5;16756:24;:::i;:::-;16745:35;;16690:96;;;:::o;16792:90::-;16826:7;16869:5;16862:13;16855:21;16844:32;;16792:90;;;:::o;16888:126::-;16925:7;16965:42;16958:5;16954:54;16943:65;;16888:126;;;:::o;17020:77::-;17057:7;17086:5;17075:16;;17020:77;;;:::o;17103:156::-;17175:9;17208:45;17247:5;17208:45;:::i;:::-;17195:58;;17103:156;;;:::o;17265:121::-;17323:9;17356:24;17374:5;17356:24;:::i;:::-;17343:37;;17265:121;;;:::o;17392:134::-;17450:9;17483:37;17514:5;17483:37;:::i;:::-;17470:50;;17392:134;;;:::o;17532:113::-;17582:9;17615:24;17633:5;17615:24;:::i;:::-;17602:37;;17532:113;;;:::o;17651:180::-;17699:77;17696:1;17689:88;17796:4;17793:1;17786:15;17820:4;17817:1;17810:15;17837:180;17885:77;17882:1;17875:88;17982:4;17979:1;17972:15;18006:4;18003:1;17996:15;18023:180;18071:77;18068:1;18061:88;18168:4;18165:1;18158:15;18192:4;18189:1;18182:15;18332:117;18441:1;18438;18431:12;18455:170;18595:22;18591:1;18583:6;18579:14;18572:46;18455:170;:::o;18631:232::-;18771:34;18767:1;18759:6;18755:14;18748:58;18840:15;18835:2;18827:6;18823:15;18816:40;18631:232;:::o;18869:225::-;19009:34;19005:1;18997:6;18993:14;18986:58;19078:8;19073:2;19065:6;19061:15;19054:33;18869:225;:::o;19100:227::-;19240:34;19236:1;19228:6;19224:14;19217:58;19309:10;19304:2;19296:6;19292:15;19285:35;19100:227;:::o;19333:173::-;19473:25;19469:1;19461:6;19457:14;19450:49;19333:173;:::o;19512:182::-;19652:34;19648:1;19640:6;19636:14;19629:58;19512:182;:::o;19700:171::-;19840:23;19836:1;19828:6;19824:14;19817:47;19700:171;:::o;19877:122::-;19950:24;19968:5;19950:24;:::i;:::-;19943:5;19940:35;19930:63;;19989:1;19986;19979:12;19930:63;19877:122;:::o;20005:116::-;20075:21;20090:5;20075:21;:::i;:::-;20068:5;20065:32;20055:60;;20111:1;20108;20101:12;20055:60;20005:116;:::o;20127:122::-;20200:24;20218:5;20200:24;:::i;:::-;20193:5;20190:35;20180:63;;20239:1;20236;20229:12;20180:63;20127:122;:::o
Swarm Source
ipfs://8085aa8597c3247e39fb59ae95d4a0595afaed4d9e44df03cd9ffca3b5a9ec36
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.