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 43 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Revoke Grant | 7123981 | 2128 days ago | IN | 0 ETH | 0.00070618 | ||||
Unpause | 6731590 | 2195 days ago | IN | 0 ETH | 0.00008505 | ||||
Set Etheal Token | 6731576 | 2195 days ago | IN | 0 ETH | 0.00022001 | ||||
Pause | 6678371 | 2204 days ago | IN | 0 ETH | 0.00014374 | ||||
Revoke Grant | 6488085 | 2235 days ago | IN | 0 ETH | 0.00039856 | ||||
Create Grant | 6263755 | 2272 days ago | IN | 0 ETH | 0.00207041 | ||||
Create Grant | 6263755 | 2272 days ago | IN | 0 ETH | 0.00213234 | ||||
Create Grant | 6263750 | 2272 days ago | IN | 0 ETH | 0.0020706 | ||||
Create Grant | 6263750 | 2272 days ago | IN | 0 ETH | 0.00213234 | ||||
Create Grant | 6263748 | 2272 days ago | IN | 0 ETH | 0.00213234 | ||||
Create Grant | 6263744 | 2272 days ago | IN | 0 ETH | 0.00276059 | ||||
Create Grant | 6263744 | 2272 days ago | IN | 0 ETH | 0.00213237 | ||||
Create Grant | 6263735 | 2272 days ago | IN | 0 ETH | 0.00213237 | ||||
Create Grant | 6263697 | 2272 days ago | IN | 0 ETH | 0.00213237 | ||||
Create Grant | 6263690 | 2272 days ago | IN | 0 ETH | 0.00213237 | ||||
Create Grant | 6263672 | 2272 days ago | IN | 0 ETH | 0.00213237 | ||||
Create Grant | 6263669 | 2272 days ago | IN | 0 ETH | 0.00213256 | ||||
Create Grant | 6263647 | 2272 days ago | IN | 0 ETH | 0.00213237 | ||||
Create Grant | 6263640 | 2272 days ago | IN | 0 ETH | 0.00207044 | ||||
Create Grant | 6263640 | 2272 days ago | IN | 0 ETH | 0.00213256 | ||||
Create Grant | 6263622 | 2272 days ago | IN | 0 ETH | 0.00213237 | ||||
Create Grant | 6263537 | 2272 days ago | IN | 0 ETH | 0.00207044 | ||||
Create Grant | 6263537 | 2272 days ago | IN | 0 ETH | 0.00213237 | ||||
Revoke Grant | 6263501 | 2272 days ago | IN | 0 ETH | 0.00033663 | ||||
Create Grant | 6263501 | 2272 days ago | IN | 0 ETH | 0.00207044 |
Latest 25 internal transactions (View All)
Advanced mode:
Loading...
Loading
Contract Name:
EthealController
Compiler Version
v0.4.18+commit.9cf6e910
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2017-11-29 */ pragma solidity ^0.4.17; /** * @title ERC20 * @dev ERC20 interface */ contract ERC20 { function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of "user permissions". */ contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ function Ownable() { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) onlyOwner public { require(newOwner != address(0)); OwnershipTransferred(owner, newOwner); owner = newOwner; } } /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract Controlled { /// @notice The address of the controller is the only address that can call /// a function with this modifier modifier onlyController { require(msg.sender == controller); _; } address public controller; function Controlled() public { controller = msg.sender;} /// @notice Changes the controller of the contract /// @param _newController The new controller of the contract function changeController(address _newController) public onlyController { controller = _newController; } } /** * @title MiniMe interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20MiniMe is ERC20, Controlled { function approveAndCall(address _spender, uint256 _amount, bytes _extraData) public returns (bool); function totalSupply() public view returns (uint); function balanceOfAt(address _owner, uint _blockNumber) public view returns (uint); function totalSupplyAt(uint _blockNumber) public view returns(uint); function createCloneToken(string _cloneTokenName, uint8 _cloneDecimalUnits, string _cloneTokenSymbol, uint _snapshotBlock, bool _transfersEnabled) public returns(address); function generateTokens(address _owner, uint _amount) public returns (bool); function destroyTokens(address _owner, uint _amount) public returns (bool); function enableTransfers(bool _transfersEnabled) public; function isContract(address _addr) internal view returns(bool); function claimTokens(address _token) public; event ClaimedTokens(address indexed _token, address indexed _controller, uint _amount); event NewCloneToken(address indexed _cloneToken, uint _snapshotBlock); } /** * @title Crowdsale * @dev Crowdsale is a base contract for managing a token crowdsale. * Crowdsales have a start and end timestamps, where investors can make * token purchases and the crowdsale will assign them tokens based * on a token per ETH rate. Funds collected are forwarded to a wallet * as they arrive. */ contract Crowdsale { using SafeMath for uint256; // The token being sold ERC20MiniMe public token; // start and end timestamps where investments are allowed (both inclusive) uint256 public startTime; uint256 public endTime; // address where funds are collected address public wallet; // how many token units a buyer gets per wei uint256 public rate; // amount of raised money in wei uint256 public weiRaised; /** * event for token purchase logging * @param purchaser who paid for the tokens * @param beneficiary who got the tokens * @param value weis paid for purchase * @param amount amount of tokens purchased */ event TokenPurchase(address indexed purchaser, address indexed beneficiary, uint256 value, uint256 amount); function Crowdsale(uint256 _startTime, uint256 _endTime, uint256 _rate, address _wallet) { require(_startTime >= now); require(_endTime >= _startTime); require(_rate > 0); require(_wallet != 0x0); startTime = _startTime; endTime = _endTime; rate = _rate; wallet = _wallet; } // fallback function can be used to buy tokens function () payable { buyTokens(msg.sender); } // low level token purchase function function buyTokens(address beneficiary) public payable { buyTokens(beneficiary, msg.value); } // implementation of low level token purchase function function buyTokens(address beneficiary, uint256 weiAmount) internal { require(beneficiary != 0x0); require(validPurchase(weiAmount)); // update state weiRaised = weiRaised.add(weiAmount); transferToken(beneficiary, weiAmount); forwardFunds(weiAmount); } // low level transfer token // override to create custom token transfer mechanism, eg. pull pattern function transferToken(address beneficiary, uint256 weiAmount) internal { // calculate token amount to be created uint256 tokens = weiAmount.mul(rate); token.generateTokens(beneficiary, tokens); TokenPurchase(msg.sender, beneficiary, weiAmount, tokens); } // send ether to the fund collection wallet // override to create custom fund forwarding mechanisms function forwardFunds(uint256 weiAmount) internal { wallet.transfer(weiAmount); } // @return true if the transaction can buy tokens function validPurchase(uint256 weiAmount) internal view returns (bool) { bool withinPeriod = now >= startTime && now <= endTime; bool nonZeroPurchase = weiAmount != 0; return withinPeriod && nonZeroPurchase; } // @return true if crowdsale event has ended function hasEnded() public view returns (bool) { return now > endTime; } // @return true if crowdsale has started function hasStarted() public view returns (bool) { return now >= startTime; } } /// @dev The token controller contract must implement these functions contract TokenController { ERC20MiniMe public ethealToken; address public SALE; // address where sale tokens are located /// @notice needed for hodler handling function addHodlerStake(address _beneficiary, uint _stake) public; function setHodlerStake(address _beneficiary, uint256 _stake) public; function setHodlerTime(uint256 _time) public; /// @notice Called when `_owner` sends ether to the MiniMe Token contract /// @param _owner The address that sent the ether to create tokens /// @return True if the ether is accepted, false if it throws function proxyPayment(address _owner) public payable returns(bool); /// @notice Notifies the controller about a token transfer allowing the /// controller to react if desired /// @param _from The origin of the transfer /// @param _to The destination of the transfer /// @param _amount The amount of the transfer /// @return False if the controller does not authorize the transfer function onTransfer(address _from, address _to, uint _amount) public returns(bool); /// @notice Notifies the controller about an approval allowing the /// controller to react if desired /// @param _owner The address that calls `approve()` /// @param _spender The spender in the `approve()` call /// @param _amount The amount in the `approve()` call /// @return False if the controller does not authorize the approval function onApprove(address _owner, address _spender, uint _amount) public returns(bool); } /** * @title Pausable * @dev Base contract which allows children to implement an emergency stop mechanism. */ contract Pausable is Ownable { event Pause(); event Unpause(); bool public paused = false; /** * @dev Modifier to make a function callable only when the contract is not paused. */ modifier whenNotPaused() { require(!paused); _; } /** * @dev Modifier to make a function callable only when the contract is paused. */ modifier whenPaused() { require(paused); _; } /** * @dev called by the owner to pause, triggers stopped state */ function pause() onlyOwner whenNotPaused public { paused = true; Pause(); } /** * @dev called by the owner to unpause, returns to normal state */ function unpause() onlyOwner whenPaused public { paused = false; Unpause(); } } /** * @title Hodler * @dev Handles hodler reward, TokenController should create and own it. */ contract Hodler is Ownable { using SafeMath for uint; // HODLER reward tracker // stake amount per address struct HODL { uint256 stake; // moving ANY funds invalidates hodling of the address bool invalid; bool claimed3M; bool claimed6M; bool claimed9M; } mapping (address => HODL) public hodlerStakes; // total current staking value and hodler addresses uint256 public hodlerTotalValue; uint256 public hodlerTotalCount; // store dates and total stake values for 3 - 6 - 9 months after normal sale uint256 public hodlerTotalValue3M; uint256 public hodlerTotalValue6M; uint256 public hodlerTotalValue9M; uint256 public hodlerTimeStart; uint256 public hodlerTime3M; uint256 public hodlerTime6M; uint256 public hodlerTime9M; // reward HEAL token amount uint256 public TOKEN_HODL_3M; uint256 public TOKEN_HODL_6M; uint256 public TOKEN_HODL_9M; // total amount of tokens claimed so far uint256 public claimedTokens; event LogHodlSetStake(address indexed _setter, address indexed _beneficiary, uint256 _value); event LogHodlClaimed(address indexed _setter, address indexed _beneficiary, uint256 _value); event LogHodlStartSet(address indexed _setter, uint256 _time); /// @dev Only before hodl is started modifier beforeHodlStart() { if (hodlerTimeStart == 0 || now <= hodlerTimeStart) _; } /// @dev Contructor, it should be created by a TokenController function Hodler(uint256 _stake3m, uint256 _stake6m, uint256 _stake9m) { TOKEN_HODL_3M = _stake3m; TOKEN_HODL_6M = _stake6m; TOKEN_HODL_9M = _stake9m; } /// @notice Adding hodler stake to an account /// @dev Only owner contract can call it and before hodling period starts /// @param _beneficiary Recepient address of hodler stake /// @param _stake Amount of additional hodler stake function addHodlerStake(address _beneficiary, uint256 _stake) public onlyOwner beforeHodlStart { // real change and valid _beneficiary is needed if (_stake == 0 || _beneficiary == address(0)) return; // add stake and maintain count if (hodlerStakes[_beneficiary].stake == 0) hodlerTotalCount = hodlerTotalCount.add(1); hodlerStakes[_beneficiary].stake = hodlerStakes[_beneficiary].stake.add(_stake); hodlerTotalValue = hodlerTotalValue.add(_stake); LogHodlSetStake(msg.sender, _beneficiary, hodlerStakes[_beneficiary].stake); } /// @notice Setting hodler stake of an account /// @dev Only owner contract can call it and before hodling period starts /// @param _beneficiary Recepient address of hodler stake /// @param _stake Amount to set the hodler stake function setHodlerStake(address _beneficiary, uint256 _stake) public onlyOwner beforeHodlStart { // real change and valid _beneficiary is needed if (hodlerStakes[_beneficiary].stake == _stake || _beneficiary == address(0)) return; // add stake and maintain count if (hodlerStakes[_beneficiary].stake == 0 && _stake > 0) { hodlerTotalCount = hodlerTotalCount.add(1); } else if (hodlerStakes[_beneficiary].stake > 0 && _stake == 0) { hodlerTotalCount = hodlerTotalCount.sub(1); } uint256 _diff = _stake > hodlerStakes[_beneficiary].stake ? _stake.sub(hodlerStakes[_beneficiary].stake) : hodlerStakes[_beneficiary].stake.sub(_stake); if (_stake > hodlerStakes[_beneficiary].stake) { hodlerTotalValue = hodlerTotalValue.add(_diff); } else { hodlerTotalValue = hodlerTotalValue.sub(_diff); } hodlerStakes[_beneficiary].stake = _stake; LogHodlSetStake(msg.sender, _beneficiary, _stake); } /// @notice Setting hodler start period. /// @param _time The time when hodler reward starts counting function setHodlerTime(uint256 _time) public onlyOwner beforeHodlStart { require(_time >= now); hodlerTimeStart = _time; hodlerTime3M = _time.add(90 days); hodlerTime6M = _time.add(180 days); hodlerTime9M = _time.add(270 days); LogHodlStartSet(msg.sender, _time); } /// @notice Invalidates hodler account /// @dev Gets called by EthealController#onTransfer before every transaction function invalidate(address _account) public onlyOwner { if (hodlerStakes[_account].stake > 0 && !hodlerStakes[_account].invalid) { hodlerStakes[_account].invalid = true; hodlerTotalValue = hodlerTotalValue.sub(hodlerStakes[_account].stake); hodlerTotalCount = hodlerTotalCount.sub(1); } // update hodl total values "automatically" - whenever someone sends funds thus updateAndGetHodlTotalValue(); } /// @notice Claiming HODL reward for msg.sender function claimHodlReward() public { claimHodlRewardFor(msg.sender); } /// @notice Claiming HODL reward for an address function claimHodlRewardFor(address _beneficiary) public { // only when the address has a valid stake require(hodlerStakes[_beneficiary].stake > 0 && !hodlerStakes[_beneficiary].invalid); uint256 _stake = 0; // update hodl total values updateAndGetHodlTotalValue(); // claim hodl if not claimed if (!hodlerStakes[_beneficiary].claimed3M && now >= hodlerTime3M) { _stake = _stake.add(hodlerStakes[_beneficiary].stake.mul(TOKEN_HODL_3M).div(hodlerTotalValue3M)); hodlerStakes[_beneficiary].claimed3M = true; } if (!hodlerStakes[_beneficiary].claimed6M && now >= hodlerTime6M) { _stake = _stake.add(hodlerStakes[_beneficiary].stake.mul(TOKEN_HODL_6M).div(hodlerTotalValue6M)); hodlerStakes[_beneficiary].claimed6M = true; } if (!hodlerStakes[_beneficiary].claimed9M && now >= hodlerTime9M) { _stake = _stake.add(hodlerStakes[_beneficiary].stake.mul(TOKEN_HODL_9M).div(hodlerTotalValue9M)); hodlerStakes[_beneficiary].claimed9M = true; } if (_stake > 0) { // increasing claimed tokens claimedTokens = claimedTokens.add(_stake); // transferring tokens require(TokenController(owner).ethealToken().transfer(_beneficiary, _stake)); // log LogHodlClaimed(msg.sender, _beneficiary, _stake); } } /// @notice claimHodlRewardFor() for multiple addresses /// @dev Anyone can call this function and distribute hodl rewards /// @param _beneficiaries Array of addresses for which we want to claim hodl rewards function claimHodlRewardsFor(address[] _beneficiaries) external { for (uint256 i = 0; i < _beneficiaries.length; i++) claimHodlRewardFor(_beneficiaries[i]); } /// @notice Setting 3 - 6 - 9 months total staking hodl value if time is come function updateAndGetHodlTotalValue() public returns (uint) { if (now >= hodlerTime3M && hodlerTotalValue3M == 0) { hodlerTotalValue3M = hodlerTotalValue; } if (now >= hodlerTime6M && hodlerTotalValue6M == 0) { hodlerTotalValue6M = hodlerTotalValue; } if (now >= hodlerTime9M && hodlerTotalValue9M == 0) { hodlerTotalValue9M = hodlerTotalValue; // since we can transfer more tokens to this contract, make it possible to retain more than the predefined limit TOKEN_HODL_9M = TokenController(owner).ethealToken().balanceOf(this).sub(TOKEN_HODL_3M).sub(TOKEN_HODL_6M).add(claimedTokens); } return hodlerTotalValue; } } /** * @title TokenVesting * @dev A token holder contract that can release its token balance gradually like a * typical vesting scheme, with a cliff and vesting period. Optionally revocable by the * owner. */ contract TokenVesting is Ownable { using SafeMath for uint256; event Released(uint256 amount); event Revoked(); // beneficiary of tokens after they are released address public beneficiary; uint256 public cliff; uint256 public start; uint256 public duration; bool public revocable; mapping (address => uint256) public released; mapping (address => bool) public revoked; /** * @dev Creates a vesting contract that vests its balance of any ERC20 token to the * _beneficiary, gradually in a linear fashion until _start + _duration. By then all * of the balance will have vested. * @param _beneficiary address of the beneficiary to whom vested tokens are transferred * @param _cliff duration in seconds of the cliff in which tokens will begin to vest * @param _duration duration in seconds of the period in which the tokens will vest * @param _revocable whether the vesting is revocable or not */ function TokenVesting(address _beneficiary, uint256 _start, uint256 _cliff, uint256 _duration, bool _revocable) { require(_beneficiary != address(0)); require(_cliff <= _duration); beneficiary = _beneficiary; revocable = _revocable; duration = _duration; cliff = _start.add(_cliff); start = _start; } /** * @notice Transfers vested tokens to beneficiary. * @param token ERC20 token which is being vested */ function release(ERC20MiniMe token) public { uint256 unreleased = releasableAmount(token); require(unreleased > 0); released[token] = released[token].add(unreleased); require(token.transfer(beneficiary, unreleased)); Released(unreleased); } /** * @notice Allows the owner to revoke the vesting. Tokens already vested * remain in the contract, the rest are returned to the owner. * @param token ERC20MiniMe token which is being vested */ function revoke(ERC20MiniMe token) public onlyOwner { require(revocable); require(!revoked[token]); uint256 balance = token.balanceOf(this); uint256 unreleased = releasableAmount(token); uint256 refund = balance.sub(unreleased); revoked[token] = true; require(token.transfer(owner, refund)); Revoked(); } /** * @dev Calculates the amount that has already vested but hasn't been released yet. * @param token ERC20MiniMe token which is being vested */ function releasableAmount(ERC20MiniMe token) public view returns (uint256) { return vestedAmount(token).sub(released[token]); } /** * @dev Calculates the amount that has already vested. * @param token ERC20MiniMe token which is being vested */ function vestedAmount(ERC20MiniMe token) public view returns (uint256) { uint256 currentBalance = token.balanceOf(this); uint256 totalBalance = currentBalance.add(released[token]); if (now < cliff) { return 0; } else if (now >= start.add(duration) || revoked[token]) { return totalBalance; } else { return totalBalance.mul(now.sub(start)).div(duration); } } } /** * @title claim accidentally sent tokens */ contract HasNoTokens is Ownable { event ExtractedTokens(address indexed _token, address indexed _claimer, uint _amount); /// @notice This method can be used to extract mistakenly /// sent tokens to this contract. /// @param _token The address of the token contract that you want to recover /// set to 0 in case you want to extract ether. /// @param _claimer Address that tokens will be send to function extractTokens(address _token, address _claimer) onlyOwner public { if (_token == 0x0) { _claimer.transfer(this.balance); return; } ERC20 token = ERC20(_token); uint balance = token.balanceOf(this); token.transfer(_claimer, balance); ExtractedTokens(_token, _claimer, balance); } } /** * @title EthealController * @author thesved * @notice Controller of the Etheal Token * @dev Crowdsale can be only replaced when no active crowdsale is running. * The contract is paused by default. It has to be unpaused to enable token transfer. */ contract EthealController is Pausable, HasNoTokens, TokenController { using SafeMath for uint; // when migrating this contains the address of the new controller TokenController public newController; // token contract ERC20MiniMe public ethealToken; // distribution of tokens uint256 public constant ETHEAL_UNIT = 10**18; uint256 public constant THOUSAND = 10**3; uint256 public constant MILLION = 10**6; uint256 public constant TOKEN_SALE1_PRE = 9 * MILLION * ETHEAL_UNIT; uint256 public constant TOKEN_SALE1_NORMAL = 20 * MILLION * ETHEAL_UNIT; uint256 public constant TOKEN_SALE2 = 9 * MILLION * ETHEAL_UNIT; uint256 public constant TOKEN_SALE3 = 5 * MILLION * ETHEAL_UNIT; uint256 public constant TOKEN_HODL_3M = 1 * MILLION * ETHEAL_UNIT; uint256 public constant TOKEN_HODL_6M = 2 * MILLION * ETHEAL_UNIT; uint256 public constant TOKEN_HODL_9M = 7 * MILLION * ETHEAL_UNIT; uint256 public constant TOKEN_REFERRAL = 2 * MILLION * ETHEAL_UNIT; uint256 public constant TOKEN_BOUNTY = 1500 * THOUSAND * ETHEAL_UNIT; uint256 public constant TOKEN_COMMUNITY = 20 * MILLION * ETHEAL_UNIT; uint256 public constant TOKEN_TEAM = 14 * MILLION * ETHEAL_UNIT; uint256 public constant TOKEN_FOUNDERS = 6500 * THOUSAND * ETHEAL_UNIT; uint256 public constant TOKEN_INVESTORS = 3 * MILLION * ETHEAL_UNIT; // addresses only SALE will remain, the others will be real eth addresses address public SALE = 0X1; address public FOUNDER1 = 0x296dD2A2879fEBe2dF65f413999B28C053397fC5; address public FOUNDER2 = 0x0E2feF8e4125ed0f49eD43C94b2B001C373F74Bf; address public INVESTOR1 = 0xAAd27eD6c93d91aa60Dc827bE647e672d15e761A; address public INVESTOR2 = 0xb906665f4ef609189A31CE55e01C267EC6293Aa5; // addresses for multisig and crowdsale address public ethealMultisigWallet; Crowdsale public crowdsale; // hodler reward contract Hodler public hodlerReward; // token grants TokenVesting[] public tokenGrants; uint256 public constant VESTING_TEAM_CLIFF = 365 days; uint256 public constant VESTING_TEAM_DURATION = 4 * 365 days; uint256 public constant VESTING_ADVISOR_CLIFF = 3 * 30 days; uint256 public constant VESTING_ADVISOR_DURATION = 6 * 30 days; /// @dev only the crowdsale can call it modifier onlyCrowdsale() { require(msg.sender == address(crowdsale)); _; } /// @dev only the crowdsale can call it modifier onlyEthealMultisig() { require(msg.sender == address(ethealMultisigWallet)); _; } //////////////// // Constructor, overrides //////////////// /// @notice Constructor for Etheal Controller function EthealController(address _wallet) { require(_wallet != address(0)); paused = true; ethealMultisigWallet = _wallet; } /// @dev overrides HasNoTokens#extractTokens to make it possible to extract any tokens after migration or before that any tokens except etheal function extractTokens(address _token, address _claimer) onlyOwner public { require(newController != address(0) || _token != address(ethealToken)); super.extractTokens(_token, _claimer); } //////////////// // Manage crowdsale //////////////// /// @notice Set crowdsale address and transfer HEAL tokens from ethealController's SALE address /// @dev Crowdsale can be only set when the current crowdsale is not active and ethealToken is set function setCrowdsaleTransfer(address _sale, uint256 _amount) public onlyOwner { require (_sale != address(0) && !isCrowdsaleOpen() && address(ethealToken) != address(0)); crowdsale = Crowdsale(_sale); // transfer HEAL tokens to crowdsale account from the account of controller require(ethealToken.transferFrom(SALE, _sale, _amount)); } /// @notice Is there a not ended crowdsale? /// @return true if there is no crowdsale or the current crowdsale is not yet ended but started function isCrowdsaleOpen() public view returns (bool) { return address(crowdsale) != address(0) && !crowdsale.hasEnded() && crowdsale.hasStarted(); } //////////////// // Manage grants //////////////// /// @notice Grant vesting token to an address function createGrant(address _beneficiary, uint256 _start, uint256 _amount, bool _revocable, bool _advisor) public onlyOwner { require(_beneficiary != address(0) && _amount > 0 && _start >= now); // create token grant if (_advisor) { tokenGrants.push(new TokenVesting(_beneficiary, _start, VESTING_ADVISOR_CLIFF, VESTING_ADVISOR_DURATION, _revocable)); } else { tokenGrants.push(new TokenVesting(_beneficiary, _start, VESTING_TEAM_CLIFF, VESTING_TEAM_DURATION, _revocable)); } // transfer funds to the grant transferToGrant(tokenGrants.length.sub(1), _amount); } /// @notice Transfer tokens to a grant until it is starting function transferToGrant(uint256 _id, uint256 _amount) public onlyOwner { require(_id < tokenGrants.length && _amount > 0 && now <= tokenGrants[_id].start()); // transfer funds to the grant require(ethealToken.transfer(address(tokenGrants[_id]), _amount)); } /// @dev Revoking grant function revokeGrant(uint256 _id) public onlyOwner { require(_id < tokenGrants.length); tokenGrants[_id].revoke(ethealToken); } /// @notice Returns the token grant count function getGrantCount() view public returns (uint) { return tokenGrants.length; } //////////////// // BURN, handle ownership - only multsig can call these functions! //////////////// /// @notice contract can burn its own or its sale tokens function burn(address _where, uint256 _amount) public onlyEthealMultisig { require(_where == address(this) || _where == SALE); require(ethealToken.destroyTokens(_where, _amount)); } /// @notice replaces controller when it was not yet replaced, only multisig can do it function setNewController(address _controller) public onlyEthealMultisig { require(_controller != address(0) && newController == address(0)); newController = TokenController(_controller); ethealToken.changeController(_controller); hodlerReward.transferOwnership(_controller); // send eth uint256 _stake = this.balance; if (_stake > 0) { _controller.transfer(_stake); } // send tokens _stake = ethealToken.balanceOf(this); if (_stake > 0) { ethealToken.transfer(_controller, _stake); } } /// @notice Set new multisig wallet, to make it upgradable. function setNewMultisig(address _wallet) public onlyEthealMultisig { require(_wallet != address(0)); ethealMultisigWallet = _wallet; } //////////////// // When PAUSED //////////////// /// @notice set the token, if no hodler provided then creates a hodler reward contract function setEthealToken(address _token, address _hodler) public onlyOwner whenPaused { require(_token != address(0)); ethealToken = ERC20MiniMe(_token); if (_hodler != address(0)) { // set hodler reward contract if provided hodlerReward = Hodler(_hodler); } else if (hodlerReward == address(0)) { // create hodler reward contract if not yet created hodlerReward = new Hodler(TOKEN_HODL_3M, TOKEN_HODL_6M, TOKEN_HODL_9M); } // MINT tokens if not minted yet if (ethealToken.totalSupply() == 0) { // sale ethealToken.generateTokens(SALE, TOKEN_SALE1_PRE.add(TOKEN_SALE1_NORMAL).add(TOKEN_SALE2).add(TOKEN_SALE3)); // hodler reward ethealToken.generateTokens(address(hodlerReward), TOKEN_HODL_3M.add(TOKEN_HODL_6M).add(TOKEN_HODL_9M)); // bounty + referral ethealToken.generateTokens(owner, TOKEN_BOUNTY.add(TOKEN_REFERRAL)); // community fund ethealToken.generateTokens(address(ethealMultisigWallet), TOKEN_COMMUNITY); // team -> grantable ethealToken.generateTokens(address(this), TOKEN_FOUNDERS.add(TOKEN_TEAM)); // investors ethealToken.generateTokens(INVESTOR1, TOKEN_INVESTORS.div(3).mul(2)); ethealToken.generateTokens(INVESTOR2, TOKEN_INVESTORS.div(3)); } } //////////////// // Proxy for Hodler contract //////////////// /// @notice Proxy call for setting hodler start time function setHodlerTime(uint256 _time) public onlyCrowdsale { hodlerReward.setHodlerTime(_time); } /// @notice Proxy call for adding hodler stake function addHodlerStake(address _beneficiary, uint256 _stake) public onlyCrowdsale { hodlerReward.addHodlerStake(_beneficiary, _stake); } /// @notice Proxy call for setting hodler stake function setHodlerStake(address _beneficiary, uint256 _stake) public onlyCrowdsale { hodlerReward.setHodlerStake(_beneficiary, _stake); } //////////////// // MiniMe Controller functions //////////////// /// @notice No eth payment to the token contract function proxyPayment(address _owner) payable public returns (bool) { revert(); } /// @notice Before transfers are enabled for everyone, only this and the crowdsale contract is allowed to distribute HEAL function onTransfer(address _from, address _to, uint256 _amount) public returns (bool) { // moving any funds makes hodl participation invalid hodlerReward.invalidate(_from); return !paused || _from == address(this) || _to == address(this) || _from == address(crowdsale) || _to == address(crowdsale); } function onApprove(address _owner, address _spender, uint256 _amount) public returns (bool) { return !paused; } /// @notice Retrieve mistakenly sent tokens (other than the etheal token) from the token contract function claimTokenTokens(address _token) public onlyOwner { require(_token != address(ethealToken)); ethealToken.claimTokens(_token); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":false,"inputs":[{"name":"_beneficiary","type":"address"},{"name":"_stake","type":"uint256"}],"name":"setHodlerStake","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"TOKEN_SALE1_PRE","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ethealToken","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TOKEN_HODL_6M","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TOKEN_SALE2","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_id","type":"uint256"}],"name":"revokeGrant","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"hodlerReward","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TOKEN_HODL_9M","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TOKEN_BOUNTY","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_token","type":"address"},{"name":"_hodler","type":"address"}],"name":"setEthealToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"MILLION","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_beneficiary","type":"address"},{"name":"_start","type":"uint256"},{"name":"_amount","type":"uint256"},{"name":"_revocable","type":"bool"},{"name":"_advisor","type":"bool"}],"name":"createGrant","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"newController","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"VESTING_ADVISOR_DURATION","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"name":"onTransfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"VESTING_ADVISOR_CLIFF","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"SALE","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"VESTING_TEAM_CLIFF","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_controller","type":"address"}],"name":"setNewController","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"isCrowdsaleOpen","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TOKEN_FOUNDERS","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"tokenGrants","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TOKEN_REFERRAL","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TOKEN_SALE1_NORMAL","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getGrantCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ethealMultisigWallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"THOUSAND","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TOKEN_TEAM","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ETHEAL_UNIT","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_beneficiary","type":"address"},{"name":"_stake","type":"uint256"}],"name":"addHodlerStake","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"crowdsale","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_where","type":"address"},{"name":"_amount","type":"uint256"}],"name":"burn","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_id","type":"uint256"},{"name":"_amount","type":"uint256"}],"name":"transferToGrant","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"FOUNDER2","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TOKEN_SALE3","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_wallet","type":"address"}],"name":"setNewMultisig","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_time","type":"uint256"}],"name":"setHodlerTime","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"VESTING_TEAM_DURATION","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TOKEN_INVESTORS","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_token","type":"address"}],"name":"claimTokenTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"INVESTOR2","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TOKEN_COMMUNITY","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_sale","type":"address"},{"name":"_amount","type":"uint256"}],"name":"setCrowdsaleTransfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"FOUNDER1","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"},{"name":"_amount","type":"uint256"}],"name":"onApprove","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_token","type":"address"},{"name":"_claimer","type":"address"}],"name":"extractTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"}],"name":"proxyPayment","outputs":[{"name":"","type":"bool"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"INVESTOR1","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TOKEN_HODL_3M","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_wallet","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_token","type":"address"},{"indexed":true,"name":"_claimer","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"}],"name":"ExtractedTokens","type":"event"},{"anonymous":false,"inputs":[],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpause","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]
Contract Creation Code
60606040526000805460a060020a60ff021916905560058054600160a060020a031990811660011790915560068054821673296dd2a2879febe2df65f413999b28c053397fc5179055600780548216730e2fef8e4125ed0f49ed43c94b2b001c373f74bf17905560088054821673aad27ed6c93d91aa60dc827be647e672d15e761a1790556009805490911673b906665f4ef609189a31ce55e01c267ec6293aa517905534156100ae57600080fd5b604051602080613b668339810160405280805160008054600160a060020a03191633600160a060020a03908116919091179091559092508216151590506100f457600080fd5b6000805460a060020a60ff02191674010000000000000000000000000000000000000000179055600a8054600160a060020a03909216600160a060020a0319909216919091179055613a1b8061014b6000396000f300606060405260043610620002a45763ffffffff60e060020a600035041662346b578114620002a95780630224dc1814620002d057806303d756cb14620002f857806304c80c3c146200032a5780631b8b478714620002d05780631d33267a14620003405780631f816c6d146200035957806328262dd1146200036f578063299c55f714620003855780632f5c5a08146200039b57806332bc934c14620003c357806332f402c514620003d95780633a02263c146200040b5780633f4ba83a1462000421578063471b37cf14620004375780634a393149146200044d5780634bc1aa42146200048c5780634db08aea14620004a257806356c2c1f614620004b857806359baef4014620004ce5780635a3320ff14620004f05780635c975abb146200050657806363302789146200051c5780636fc559bb146200053257806372f4f5f9146200032a5780637a4690fb146200054b5780637c1b6afe14620005615780638059e80414620005775780638456cb59146200058d578063851cad9014620005a35780638cac193914620005b95780638da5cb5b14620005cf5780638f382a0014620005e557806393a378da14620005fb5780639c1e03a014620006205780639dc29fac14620006365780639f95de64146200065b578063a804903a1462000677578063ac60da79146200068d578063aebb254014620006a3578063b0e9a1ef14620006c5578063b2cb0a3d14620006de578063b3922c4214620006f4578063b5c7b1fe146200070a578063b8a4b858146200072c578063bd1fac00146200054b578063ca94452d1462000742578063d16c4cf51462000767578063da682aeb146200077d578063ed6b2d7d14620007a8578063f2fde38b14620007d0578063f48c305414620007f2578063f5459d6b1462000808578063fbd7d081146200081e575b600080fd5b3415620002b557600080fd5b620002ce600160a060020a036004351660243562000834565b005b3415620002dc57600080fd5b620002e6620008bf565b60405190815260200160405180910390f35b34156200030457600080fd5b6200030e620008ce565b604051600160a060020a03909116815260200160405180910390f35b34156200033657600080fd5b620002e6620008dd565b34156200034c57600080fd5b620002ce600435620008ec565b34156200036557600080fd5b6200030e6200099f565b34156200037b57600080fd5b620002e6620009ae565b34156200039157600080fd5b620002e6620009bd565b3415620003a757600080fd5b620002ce600160a060020a0360043581169060243516620009cc565b3415620003cf57600080fd5b620002e662001011565b3415620003e557600080fd5b620002ce600160a060020a03600435166024356044356064351515608435151562001018565b34156200041757600080fd5b6200030e620011de565b34156200042d57600080fd5b620002ce620011ed565b34156200044357600080fd5b620002e66200126e565b34156200045957600080fd5b62000478600160a060020a036004358116906024351660443562001275565b604051901515815260200160405180910390f35b34156200049857600080fd5b620002e662001361565b3415620004ae57600080fd5b6200030e62001368565b3415620004c457600080fd5b620002e662001377565b3415620004da57600080fd5b620002ce600160a060020a03600435166200137f565b3415620004fc57600080fd5b62000478620015db565b34156200051257600080fd5b62000478620016cf565b34156200052857600080fd5b620002e6620016df565b34156200053e57600080fd5b6200030e600435620016ee565b34156200055757600080fd5b620002e662001717565b34156200056d57600080fd5b620002e662001726565b34156200058357600080fd5b6200030e6200172c565b34156200059957600080fd5b620002ce6200173b565b3415620005af57600080fd5b620002e6620017c1565b3415620005c557600080fd5b620002e6620017c7565b3415620005db57600080fd5b6200030e620017d6565b3415620005f157600080fd5b620002e6620017e5565b34156200060757600080fd5b620002ce600160a060020a0360043516602435620017f1565b34156200062c57600080fd5b6200030e62001864565b34156200064257600080fd5b620002ce600160a060020a036004351660243562001873565b34156200066757600080fd5b620002ce60043560243562001951565b34156200068357600080fd5b6200030e62001a9a565b34156200069957600080fd5b620002e662001aa9565b3415620006af57600080fd5b620002ce600160a060020a036004351662001ab8565b3415620006d157600080fd5b620002ce60043562001b0c565b3415620006ea57600080fd5b620002e662001b71565b34156200070057600080fd5b620002e662001b79565b34156200071657600080fd5b620002ce600160a060020a036004351662001b88565b34156200073857600080fd5b6200030e62001c11565b34156200074e57600080fd5b620002ce600160a060020a036004351660243562001c20565b34156200077357600080fd5b6200030e62001d0b565b34156200078957600080fd5b62000478600160a060020a036004358116906024351660443562001d1a565b3415620007b457600080fd5b620002ce600160a060020a036004358116906024351662001d2f565b3415620007dc57600080fd5b620002ce600160a060020a036004351662001d8b565b62000478600160a060020a036004351662001e1b565b34156200081457600080fd5b6200030e62001e22565b34156200082a57600080fd5b620002e662001e31565b600b5433600160a060020a039081169116146200085057600080fd5b600c54600160a060020a031662346b57838360405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b1515620008a657600080fd5b6102c65a03f11515620008b857600080fd5b5050505050565b6a0771d2fa45345aa900000081565b600454600160a060020a031681565b6a01a784379d99db4200000081565b60005433600160a060020a039081169116146200090857600080fd5b600d5481106200091757600080fd5b600d8054829081106200092657fe5b600091825260209091200154600454600160a060020a03918216916374a8f103911660405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b15156200098757600080fd5b6102c65a03f115156200099957600080fd5b50505050565b600c54600160a060020a031681565b6a05ca4ec2a79a7f6700000081565b6a013da329b633647180000081565b60005433600160a060020a03908116911614620009e857600080fd5b60005460a060020a900460ff16151562000a0157600080fd5b600160a060020a038216151562000a1757600080fd5b60048054600160a060020a031916600160a060020a038481169190911790915581161562000a6057600c8054600160a060020a031916600160a060020a03831617905562000af0565b600c54600160a060020a0316151562000af05769d3c21bcecceda10000006a01a784379d99db420000006a05ca4ec2a79a7f6700000062000aa06200205c565b808481526020018381526020018281526020019350505050604051809103906000f080151562000acf57600080fd5b600c8054600160a060020a031916600160a060020a03929092169190911790555b600454600160a060020a03166318160ddd6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151562000b3957600080fd5b6102c65a03f1151562000b4b57600080fd5b5050506040518051151590506200100d57600454600554600160a060020a039182169163827f32c0911662000bbc6a0422ca8b0a00a42500000062000baf6a0771d2fa45345aa900000081816a108b2a2c2802909400000063ffffffff62001e3f16565b9063ffffffff62001e3f16565b60006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151562000c0957600080fd5b6102c65a03f1151562000c1b57600080fd5b50505060405180515050600454600c54600160a060020a039182169163827f32c0911662000c756a05ca4ec2a79a7f6700000062000baf69d3c21bcecceda10000006a01a784379d99db4200000063ffffffff62001e3f16565b60006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151562000cc257600080fd5b6102c65a03f1151562000cd457600080fd5b50505060405180515050600454600054600160a060020a039182169163827f32c0911662000d1f6a013da329b63364718000006a01a784379d99db4200000063ffffffff62001e3f16565b60006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151562000d6c57600080fd5b6102c65a03f1151562000d7e57600080fd5b50505060405180515050600454600a54600160a060020a039182169163827f32c091166a108b2a2c2802909400000060006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151562000dfa57600080fd5b6102c65a03f1151562000e0c57600080fd5b50505060405180515050600454600160a060020a031663827f32c03062000e506a05606db4c03408968000006a0b949d854f34fece00000063ffffffff62001e3f16565b60006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151562000e9d57600080fd5b6102c65a03f1151562000eaf57600080fd5b50505060405180515050600454600854600160a060020a039182169163827f32c0911662000f03600262000ef66a027b46536c66c8e3000000600363ffffffff62001e5616565b9063ffffffff62001e6e16565b60006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151562000f5057600080fd5b6102c65a03f1151562000f6257600080fd5b50505060405180515050600454600954600160a060020a039182169163827f32c0911662000fa36a027b46536c66c8e3000000600363ffffffff62001e5616565b60006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151562000ff057600080fd5b6102c65a03f115156200100257600080fd5b505050604051805150505b5050565b620f424081565b60005433600160a060020a039081169116146200103457600080fd5b600160a060020a038516158015906200104d5750600083115b80156200105a5750428410155b15156200106657600080fd5b80156200111657600d8054600181016200108183826200206d565b9160005260206000209001600087876276a70062ed4e0088620010a362002099565b600160a060020a03909516855260208501939093526040808501929092526060840152901515608083015260a09091019051809103906000f0801515620010e957600080fd5b909190916101000a815481600160a060020a030219169083600160a060020a0316021790555050620011bc565b600d8054600181016200112a83826200206d565b9160005260206000209001600087876301e13380630784ce00886200114e62002099565b600160a060020a03909516855260208501939093526040808501929092526060840152901515608083015260a09091019051809103906000f08015156200119457600080fd5b909190916101000a815481600160a060020a030219169083600160a060020a03160217905550505b600d54620008b890620011d790600163ffffffff62001e9516565b8462001951565b600354600160a060020a031681565b60005433600160a060020a039081169116146200120957600080fd5b60005460a060020a900460ff1615156200122257600080fd5b6000805474ff0000000000000000000000000000000000000000191690557f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3360405160405180910390a1565b62ed4e0081565b600c54600090600160a060020a03166337a3931f8560405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b1515620012c957600080fd5b6102c65a03f11515620012db57600080fd5b505060005460a060020a900460ff16159050806200130a575030600160a060020a031684600160a060020a0316145b8062001327575030600160a060020a031683600160a060020a0316145b80620013405750600b54600160a060020a038581169116145b80620013595750600b54600160a060020a038481169116145b949350505050565b6276a70081565b600554600160a060020a031681565b6301e1338081565b600a5460009033600160a060020a039081169116146200139e57600080fd5b600160a060020a03821615801590620013c05750600354600160a060020a0316155b1515620013cc57600080fd5b60038054600160a060020a031916600160a060020a038481169190911790915560045416633cebb8238360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b15156200143557600080fd5b6102c65a03f115156200144757600080fd5b5050600c54600160a060020a0316905063f2fde38b8360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b15156200149c57600080fd5b6102c65a03f11515620014ae57600080fd5b50505030600160a060020a03163190506000811115620014fa57600160a060020a03821681156108fc0282604051600060405180830381858888f193505050501515620014fa57600080fd5b600454600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156200155457600080fd5b6102c65a03f115156200156657600080fd5b505050604051805191505060008111156200100d57600454600160a060020a031663a9059cbb838360006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151562000ff057600080fd5b600b54600090600160a060020a0316158015906200165b5750600b54600160a060020a031663ecb70fb76000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156200163d57600080fd5b6102c65a03f115156200164f57600080fd5b50505060405180519050155b8015620016c95750600b54600160a060020a03166344691f7e6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515620016ac57600080fd5b6102c65a03f11515620016be57600080fd5b505050604051805190505b90505b90565b60005460a060020a900460ff1681565b6a05606db4c034089680000081565b600d805482908110620016fd57fe5b600091825260209091200154600160a060020a0316905081565b6a108b2a2c2802909400000081565b600d5490565b600a54600160a060020a031681565b60005433600160a060020a039081169116146200175757600080fd5b60005460a060020a900460ff16156200176f57600080fd5b6000805474ff0000000000000000000000000000000000000000191660a060020a1790557f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a1565b6103e881565b6a0b949d854f34fece00000081565b600054600160a060020a031681565b670de0b6b3a764000081565b600b5433600160a060020a039081169116146200180d57600080fd5b600c54600160a060020a03166393a378da838360405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b1515620008a657600080fd5b600b54600160a060020a031681565b600a5433600160a060020a039081169116146200188f57600080fd5b30600160a060020a031682600160a060020a03161480620018bd5750600554600160a060020a038381169116145b1515620018c957600080fd5b600454600160a060020a031663d3ce77fe838360006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156200192957600080fd5b6102c65a03f115156200193b57600080fd5b5050506040518051905015156200100d57600080fd5b60005433600160a060020a039081169116146200196d57600080fd5b600d54821080156200197f5750600081115b801562001a075750600d8054839081106200199657fe5b6000918252602082200154600160a060020a03169063be9a655590604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515620019e757600080fd5b6102c65a03f11515620019f957600080fd5b505050604051805190504211155b151562001a1357600080fd5b600454600d8054600160a060020a039092169163a9059cbb91908590811062001a3857fe5b6000918252602082200154600160a060020a03169084906040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156200192957600080fd5b600754600160a060020a031681565b6a0422ca8b0a00a42500000081565b600a5433600160a060020a0390811691161462001ad457600080fd5b600160a060020a038116151562001aea57600080fd5b600a8054600160a060020a031916600160a060020a0392909216919091179055565b600b5433600160a060020a0390811691161462001b2857600080fd5b600c54600160a060020a031663b0e9a1ef8260405160e060020a63ffffffff84160281526004810191909152602401600060405180830381600087803b15156200098757600080fd5b630784ce0081565b6a027b46536c66c8e300000081565b60005433600160a060020a0390811691161462001ba457600080fd5b600454600160a060020a038281169116141562001bc057600080fd5b600454600160a060020a031663df8de3e78260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b15156200098757600080fd5b600954600160a060020a031681565b60005433600160a060020a0390811691161462001c3c57600080fd5b600160a060020a0382161580159062001c5c575062001c5a620015db565b155b801562001c735750600454600160a060020a031615155b151562001c7f57600080fd5b600b8054600160a060020a031916600160a060020a0384811691909117909155600454600554908216916323b872dd9116848460006040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b15156200192957600080fd5b600654600160a060020a031681565b505060005460a060020a900460ff1615919050565b60005433600160a060020a0390811691161462001d4b57600080fd5b600354600160a060020a031615158062001d735750600454600160a060020a03838116911614155b151562001d7f57600080fd5b6200100d828262001ea8565b60005433600160a060020a0390811691161462001da757600080fd5b600160a060020a038116151562001dbd57600080fd5b600054600160a060020a0380831691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008054600160a060020a031916600160a060020a0392909216919091179055565b6000806000fd5b600854600160a060020a031681565b69d3c21bcecceda100000081565b60008282018381101562001e4f57fe5b9392505050565b600080828481151562001e6557fe5b04949350505050565b600082820283158062001e8c575082848281151562001e8957fe5b04145b151562001e4f57fe5b60008282111562001ea257fe5b50900390565b60008054819033600160a060020a0390811691161462001ec757600080fd5b600160a060020a038416151562001f1c5782600160a060020a03166108fc30600160a060020a0316319081150290604051600060405180830381858888f19350505050151562001f1657600080fd5b62000999565b83915081600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151562001f7757600080fd5b6102c65a03f1151562001f8957600080fd5b5050506040518051915050600160a060020a03821663a9059cbb848360006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151562001ff257600080fd5b6102c65a03f115156200200457600080fd5b505050604051805190505082600160a060020a031684600160a060020a03167f21e9b296e283cad208b551b3c383bb74e34086eb5691fee8392dcce6794521c28360405190815260200160405180910390a350505050565b60405161101580620020cc83390190565b815481835581811511620020945760008381526020902062002094918101908301620020aa565b505050565b60405161090f80620030e183390190565b620016cc91905b80821115620020c75760008155600101620020b1565b509056006060604052341561000f57600080fd5b60405160608061101583398101604052808051919060200180519190602001805160008054600160a060020a033316600160a060020a0319909116179055600b949094555050600c55600d55610fab8061006a6000396000f3006060604052600436106101235763ffffffff60e060020a600035041662346b57811461012857806304c80c3c1461014c5780630d92e3e8146101715780630eb6f5431461018457806326c43d8f1461019757806328262dd1146101aa57806337a3931f146101bd57806342ef4c1a146101dc5780634a48314f146101ef5780634b86faba14610202578063685a73e0146102155780638da5cb5b1461023357806391e79c721461026257806393a378da14610275578063b0e9a1ef14610297578063b40d8d58146102ad578063be2b1047146102c0578063c899fa77146102d3578063d228cfc5146102e6578063d43a0b4c14610305578063d6192c6c14610318578063e2c208361461036e578063f2fde38b14610381578063fbd7d081146103a0575b600080fd5b341561013357600080fd5b61014a600160a060020a03600435166024356103b3565b005b341561015757600080fd5b61015f6105cc565b60405190815260200160405180910390f35b341561017c57600080fd5b61015f6105d2565b341561018f57600080fd5b61015f6105d8565b34156101a257600080fd5b61015f6105de565b34156101b557600080fd5b61015f6105e4565b34156101c857600080fd5b61014a600160a060020a03600435166105ea565b34156101e757600080fd5b61015f6106b1565b34156101fa57600080fd5b61015f6106b7565b341561020d57600080fd5b61014a6106bd565b341561022057600080fd5b61014a60048035602481019101356106c8565b341561023e57600080fd5b6102466106ff565b604051600160a060020a03909116815260200160405180910390f35b341561026d57600080fd5b61015f61070e565b341561028057600080fd5b61014a600160a060020a0360043516602435610714565b34156102a257600080fd5b61014a600435610848565b34156102b857600080fd5b61015f61090f565b34156102cb57600080fd5b61015f610915565b34156102de57600080fd5b61015f61091b565b34156102f157600080fd5b61014a600160a060020a0360043516610921565b341561031057600080fd5b61015f610cc6565b341561032357600080fd5b610337600160a060020a0360043516610ccc565b60405194855292151560208501529015156040808501919091529015156060840152901515608083015260a0909101905180910390f35b341561037957600080fd5b61015f610d04565b341561038c57600080fd5b61014a600160a060020a0360043516610e7b565b34156103ab57600080fd5b61015f610f16565b6000805433600160a060020a039081169116146103cf57600080fd5b60075415806103e057506007544211155b156105c757600160a060020a0383166000908152600160205260409020548214806104125750600160a060020a038316155b1561041c576105c7565b600160a060020a0383166000908152600160205260409020541580156104425750600082115b156104635760035461045b90600163ffffffff610f1c16565b6003556104a4565b600160a060020a038316600090815260016020526040812054118015610487575081155b156104a4576003546104a090600163ffffffff610f3216565b6003555b600160a060020a03831660009081526001602052604090205482116104f157600160a060020a0383166000908152600160205260409020546104ec908363ffffffff610f3216565b61051b565b600160a060020a03831660009081526001602052604090205461051b90839063ffffffff610f3216565b600160a060020a03841660009081526001602052604090205490915082111561055957600254610551908263ffffffff610f1c16565b600255610570565b60025461056c908263ffffffff610f3216565b6002555b600160a060020a038084166000818152600160205260409081902085905590913316907f531b6d98182f354ef73d680007a0fa84a81fa4a320e289e4f826150ad104fb1a9085905190815260200160405180910390a35b505050565b600c5481565b600e5481565b60055481565b60035481565b600d5481565b60005433600160a060020a0390811691161461060557600080fd5b600160a060020a0381166000908152600160205260408120541180156106485750600160a060020a0381166000908152600160208190526040909120015460ff16155b156106a557600160a060020a0381166000908152600160208190526040909120808201805460ff19169092179091555460025461068a9163ffffffff610f3216565b6002556003546106a190600163ffffffff610f3216565b6003555b6106ad610d04565b5050565b60095481565b60085481565b6106c633610921565b565b60005b818110156105c7576106f78383838181106106e257fe5b90506020020135600160a060020a0316610921565b6001016106cb565b600054600160a060020a031681565b60025481565b60005433600160a060020a0390811691161461072f57600080fd5b600754158061074057506007544211155b156106ad578015806107595750600160a060020a038216155b15610763576106ad565b600160a060020a038216600090815260016020526040902054151561079a5760035461079690600163ffffffff610f1c16565b6003555b600160a060020a0382166000908152600160205260409020546107c3908263ffffffff610f1c16565b600160a060020a0383166000908152600160205260409020556002546107ef908263ffffffff610f1c16565b600255600160a060020a03808316600081815260016020526040908190205491923316917f531b6d98182f354ef73d680007a0fa84a81fa4a320e289e4f826150ad104fb1a915190815260200160405180910390a35050565b60005433600160a060020a0390811691161461086357600080fd5b600754158061087457506007544211155b1561090c574281101561088657600080fd5b600781905561089e816276a70063ffffffff610f1c16565b6008556108b48162ed4e0063ffffffff610f1c16565b6009556108cb81630163f50063ffffffff610f1c16565b600a55600160a060020a0333167fc7ad31b0c99a40aa43822fbc49a68cf7f3eb3d52152a5c01a7f636e4481cf43f8260405190815260200160405180910390a25b50565b600a5481565b60075481565b60045481565b600160a060020a03811660009081526001602052604081205481901180156109665750600160a060020a0382166000908152600160208190526040909120015460ff16155b151561097157600080fd5b50600061097c610d04565b50600160a060020a03821660009081526001602081905260409091200154610100900460ff161580156109b157506008544210155b15610a3357600454600b54600160a060020a038416600090815260016020526040902054610a07926109fa9290916109ee9163ffffffff610f4416565b9063ffffffff610f6816565b829063ffffffff610f1c16565b600160a060020a038316600090815260016020819052604090912001805461ff00191661010017905590505b600160a060020a0382166000908152600160208190526040909120015462010000900460ff16158015610a6857506009544210155b15610ad357600554600c54600160a060020a038416600090815260016020526040902054610aa5926109fa9290916109ee9163ffffffff610f4416565b600160a060020a038316600090815260016020819052604090912001805462ff000019166201000017905590505b600160a060020a038216600090815260016020819052604090912001546301000000900460ff16158015610b095750600a544210155b15610b7657600654600d54600160a060020a038416600090815260016020526040902054610b46926109fa9290916109ee9163ffffffff610f4416565b600160a060020a038316600090815260016020819052604090912001805463ff0000001916630100000017905590505b60008111156106ad57600e54610b92908263ffffffff610f1c16565b600e5560008054600160a060020a0316906303d756cb90604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610bde57600080fd5b6102c65a03f11515610bef57600080fd5b50505060405180519050600160a060020a031663a9059cbb838360006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610c5557600080fd5b6102c65a03f11515610c6657600080fd5b505050604051805190501515610c7b57600080fd5b81600160a060020a031633600160a060020a03167fd06980f1b54006ca63e8ddd2f4dafe76e8bcd6e7d7f333296f778781626af4268360405190815260200160405180910390a35050565b60065481565b6001602081905260009182526040909120805491015460ff808216916101008104821691620100008204811691630100000090041685565b60006008544210158015610d185750600454155b15610d24576002546004555b6009544210158015610d365750600554155b15610d42576002546005555b600a544210158015610d545750600654155b15610e7457600254600655600e54600c54600b5460008054610e709493610e64939092610e5892600160a060020a0316906303d756cb90604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610dc057600080fd5b6102c65a03f11515610dd157600080fd5b50505060405180519050600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610e3157600080fd5b6102c65a03f11515610e4257600080fd5b505050604051805191905063ffffffff610f3216565b9063ffffffff610f3216565b9063ffffffff610f1c16565b600d555b5060025490565b60005433600160a060020a03908116911614610e9657600080fd5b600160a060020a0381161515610eab57600080fd5b600054600160a060020a0380831691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600b5481565b600082820183811015610f2b57fe5b9392505050565b600082821115610f3e57fe5b50900390565b6000828202831580610f605750828482811515610f5d57fe5b04145b1515610f2b57fe5b6000808284811515610f7657fe5b049493505050505600a165627a7a72305820b13878352c4505507a0469068cef25077583c2b2fd96737ede4cf449af3c69b800296060604052341561000f57600080fd5b60405160a08061090f833981016040528080519190602001805191906020018051919060200180519190602001805160008054600160a060020a03191633600160a060020a039081169190911790915590925086161515905061007157600080fd5b8183111561007e57600080fd5b60018054600160a060020a031916600160a060020a0387161790556005805460ff191682151517905560048290556100c384846401000000006100d2810261079b1704565b600255505050600355506100e8565b6000828201838110156100e157fe5b9392505050565b610818806100f76000396000f3006060604052600436106100ab5763ffffffff60e060020a6000350416630fb5a6b481146100b057806313d033c0146100d55780631726cbc8146100e85780631916558714610107578063384711cc1461012857806338af3eed1461014757806374a8f10314610176578063872a7810146101955780638da5cb5b146101bc5780639852595c146101cf578063be9a6555146101ee578063f2fde38b14610201578063fa01dc0614610220575b600080fd5b34156100bb57600080fd5b6100c361023f565b60405190815260200160405180910390f35b34156100e057600080fd5b6100c3610245565b34156100f357600080fd5b6100c3600160a060020a036004351661024b565b341561011257600080fd5b610126600160a060020a0360043516610283565b005b341561013357600080fd5b6100c3600160a060020a036004351661039c565b341561015257600080fd5b61015a6104dd565b604051600160a060020a03909116815260200160405180910390f35b341561018157600080fd5b610126600160a060020a03600435166104ec565b34156101a057600080fd5b6101a86106a9565b604051901515815260200160405180910390f35b34156101c757600080fd5b61015a6106b2565b34156101da57600080fd5b6100c3600160a060020a03600435166106c1565b34156101f957600080fd5b6100c36106d3565b341561020c57600080fd5b610126600160a060020a03600435166106d9565b341561022b57600080fd5b6101a8600160a060020a0360043516610774565b60045481565b60025481565b600160a060020a03811660009081526006602052604081205461027d906102718461039c565b9063ffffffff61078916565b92915050565b600061028e8261024b565b90506000811161029d57600080fd5b600160a060020a0382166000908152600660205260409020546102c6908263ffffffff61079b16565b600160a060020a0380841660008181526006602052604080822094909455600154919363a9059cbb939290921691859190516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561033f57600080fd5b6102c65a03f1151561035057600080fd5b50505060405180519050151561036557600080fd5b7ffb81f9b30d73d830c3544b34d827c08142579ee75710b490bab0b3995468c5658160405190815260200160405180910390a15050565b600080600083600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156103f857600080fd5b6102c65a03f1151561040957600080fd5b5050506040518051600160a060020a03861660009081526006602052604090205490935061043f9150839063ffffffff61079b16565b905060025442101561045457600092506104d6565b6004546003546104699163ffffffff61079b16565b4210158061048f5750600160a060020a03841660009081526007602052604090205460ff165b1561049c578092506104d6565b6104d36004546104c76104ba6003544261078990919063ffffffff16565b849063ffffffff6107b116565b9063ffffffff6107d516565b92505b5050919050565b600154600160a060020a031681565b600080548190819033600160a060020a0390811691161461050c57600080fd5b60055460ff16151561051d57600080fd5b600160a060020a03841660009081526007602052604090205460ff161561054357600080fd5b83600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561059a57600080fd5b6102c65a03f115156105ab57600080fd5b5050506040518051905092506105c08461024b565b91506105d2838363ffffffff61078916565b600160a060020a03808616600081815260076020526040808220805460ff191660011790558154949550919363a9059cbb931691859190516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561065157600080fd5b6102c65a03f1151561066257600080fd5b50505060405180519050151561067757600080fd5b7f44825a4b2df8acb19ce4e1afba9aa850c8b65cdb7942e2078f27d0b0960efee660405160405180910390a150505050565b60055460ff1681565b600054600160a060020a031681565b60066020526000908152604090205481565b60035481565b60005433600160a060020a039081169116146106f457600080fd5b600160a060020a038116151561070957600080fd5b600054600160a060020a0380831691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60076020526000908152604090205460ff1681565b60008282111561079557fe5b50900390565b6000828201838110156107aa57fe5b9392505050565b60008282028315806107cd57508284828115156107ca57fe5b04145b15156107aa57fe5b60008082848115156107e357fe5b049493505050505600a165627a7a7230582009649e1f374e51bd346858160f9ce8785feb3bfeb10e4f09b72214fac4485c0e0029a165627a7a7230582092a1f27c76560e9a5c435886caece0a86173198ab75681be3e0196811ebb45d30029000000000000000000000000fc5c6c8015962e7035f3bdc5fe7ec94bedc77833
Deployed Bytecode
0x606060405260043610620002a45763ffffffff60e060020a600035041662346b578114620002a95780630224dc1814620002d057806303d756cb14620002f857806304c80c3c146200032a5780631b8b478714620002d05780631d33267a14620003405780631f816c6d146200035957806328262dd1146200036f578063299c55f714620003855780632f5c5a08146200039b57806332bc934c14620003c357806332f402c514620003d95780633a02263c146200040b5780633f4ba83a1462000421578063471b37cf14620004375780634a393149146200044d5780634bc1aa42146200048c5780634db08aea14620004a257806356c2c1f614620004b857806359baef4014620004ce5780635a3320ff14620004f05780635c975abb146200050657806363302789146200051c5780636fc559bb146200053257806372f4f5f9146200032a5780637a4690fb146200054b5780637c1b6afe14620005615780638059e80414620005775780638456cb59146200058d578063851cad9014620005a35780638cac193914620005b95780638da5cb5b14620005cf5780638f382a0014620005e557806393a378da14620005fb5780639c1e03a014620006205780639dc29fac14620006365780639f95de64146200065b578063a804903a1462000677578063ac60da79146200068d578063aebb254014620006a3578063b0e9a1ef14620006c5578063b2cb0a3d14620006de578063b3922c4214620006f4578063b5c7b1fe146200070a578063b8a4b858146200072c578063bd1fac00146200054b578063ca94452d1462000742578063d16c4cf51462000767578063da682aeb146200077d578063ed6b2d7d14620007a8578063f2fde38b14620007d0578063f48c305414620007f2578063f5459d6b1462000808578063fbd7d081146200081e575b600080fd5b3415620002b557600080fd5b620002ce600160a060020a036004351660243562000834565b005b3415620002dc57600080fd5b620002e6620008bf565b60405190815260200160405180910390f35b34156200030457600080fd5b6200030e620008ce565b604051600160a060020a03909116815260200160405180910390f35b34156200033657600080fd5b620002e6620008dd565b34156200034c57600080fd5b620002ce600435620008ec565b34156200036557600080fd5b6200030e6200099f565b34156200037b57600080fd5b620002e6620009ae565b34156200039157600080fd5b620002e6620009bd565b3415620003a757600080fd5b620002ce600160a060020a0360043581169060243516620009cc565b3415620003cf57600080fd5b620002e662001011565b3415620003e557600080fd5b620002ce600160a060020a03600435166024356044356064351515608435151562001018565b34156200041757600080fd5b6200030e620011de565b34156200042d57600080fd5b620002ce620011ed565b34156200044357600080fd5b620002e66200126e565b34156200045957600080fd5b62000478600160a060020a036004358116906024351660443562001275565b604051901515815260200160405180910390f35b34156200049857600080fd5b620002e662001361565b3415620004ae57600080fd5b6200030e62001368565b3415620004c457600080fd5b620002e662001377565b3415620004da57600080fd5b620002ce600160a060020a03600435166200137f565b3415620004fc57600080fd5b62000478620015db565b34156200051257600080fd5b62000478620016cf565b34156200052857600080fd5b620002e6620016df565b34156200053e57600080fd5b6200030e600435620016ee565b34156200055757600080fd5b620002e662001717565b34156200056d57600080fd5b620002e662001726565b34156200058357600080fd5b6200030e6200172c565b34156200059957600080fd5b620002ce6200173b565b3415620005af57600080fd5b620002e6620017c1565b3415620005c557600080fd5b620002e6620017c7565b3415620005db57600080fd5b6200030e620017d6565b3415620005f157600080fd5b620002e6620017e5565b34156200060757600080fd5b620002ce600160a060020a0360043516602435620017f1565b34156200062c57600080fd5b6200030e62001864565b34156200064257600080fd5b620002ce600160a060020a036004351660243562001873565b34156200066757600080fd5b620002ce60043560243562001951565b34156200068357600080fd5b6200030e62001a9a565b34156200069957600080fd5b620002e662001aa9565b3415620006af57600080fd5b620002ce600160a060020a036004351662001ab8565b3415620006d157600080fd5b620002ce60043562001b0c565b3415620006ea57600080fd5b620002e662001b71565b34156200070057600080fd5b620002e662001b79565b34156200071657600080fd5b620002ce600160a060020a036004351662001b88565b34156200073857600080fd5b6200030e62001c11565b34156200074e57600080fd5b620002ce600160a060020a036004351660243562001c20565b34156200077357600080fd5b6200030e62001d0b565b34156200078957600080fd5b62000478600160a060020a036004358116906024351660443562001d1a565b3415620007b457600080fd5b620002ce600160a060020a036004358116906024351662001d2f565b3415620007dc57600080fd5b620002ce600160a060020a036004351662001d8b565b62000478600160a060020a036004351662001e1b565b34156200081457600080fd5b6200030e62001e22565b34156200082a57600080fd5b620002e662001e31565b600b5433600160a060020a039081169116146200085057600080fd5b600c54600160a060020a031662346b57838360405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b1515620008a657600080fd5b6102c65a03f11515620008b857600080fd5b5050505050565b6a0771d2fa45345aa900000081565b600454600160a060020a031681565b6a01a784379d99db4200000081565b60005433600160a060020a039081169116146200090857600080fd5b600d5481106200091757600080fd5b600d8054829081106200092657fe5b600091825260209091200154600454600160a060020a03918216916374a8f103911660405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b15156200098757600080fd5b6102c65a03f115156200099957600080fd5b50505050565b600c54600160a060020a031681565b6a05ca4ec2a79a7f6700000081565b6a013da329b633647180000081565b60005433600160a060020a03908116911614620009e857600080fd5b60005460a060020a900460ff16151562000a0157600080fd5b600160a060020a038216151562000a1757600080fd5b60048054600160a060020a031916600160a060020a038481169190911790915581161562000a6057600c8054600160a060020a031916600160a060020a03831617905562000af0565b600c54600160a060020a0316151562000af05769d3c21bcecceda10000006a01a784379d99db420000006a05ca4ec2a79a7f6700000062000aa06200205c565b808481526020018381526020018281526020019350505050604051809103906000f080151562000acf57600080fd5b600c8054600160a060020a031916600160a060020a03929092169190911790555b600454600160a060020a03166318160ddd6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151562000b3957600080fd5b6102c65a03f1151562000b4b57600080fd5b5050506040518051151590506200100d57600454600554600160a060020a039182169163827f32c0911662000bbc6a0422ca8b0a00a42500000062000baf6a0771d2fa45345aa900000081816a108b2a2c2802909400000063ffffffff62001e3f16565b9063ffffffff62001e3f16565b60006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151562000c0957600080fd5b6102c65a03f1151562000c1b57600080fd5b50505060405180515050600454600c54600160a060020a039182169163827f32c0911662000c756a05ca4ec2a79a7f6700000062000baf69d3c21bcecceda10000006a01a784379d99db4200000063ffffffff62001e3f16565b60006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151562000cc257600080fd5b6102c65a03f1151562000cd457600080fd5b50505060405180515050600454600054600160a060020a039182169163827f32c0911662000d1f6a013da329b63364718000006a01a784379d99db4200000063ffffffff62001e3f16565b60006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151562000d6c57600080fd5b6102c65a03f1151562000d7e57600080fd5b50505060405180515050600454600a54600160a060020a039182169163827f32c091166a108b2a2c2802909400000060006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151562000dfa57600080fd5b6102c65a03f1151562000e0c57600080fd5b50505060405180515050600454600160a060020a031663827f32c03062000e506a05606db4c03408968000006a0b949d854f34fece00000063ffffffff62001e3f16565b60006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151562000e9d57600080fd5b6102c65a03f1151562000eaf57600080fd5b50505060405180515050600454600854600160a060020a039182169163827f32c0911662000f03600262000ef66a027b46536c66c8e3000000600363ffffffff62001e5616565b9063ffffffff62001e6e16565b60006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151562000f5057600080fd5b6102c65a03f1151562000f6257600080fd5b50505060405180515050600454600954600160a060020a039182169163827f32c0911662000fa36a027b46536c66c8e3000000600363ffffffff62001e5616565b60006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151562000ff057600080fd5b6102c65a03f115156200100257600080fd5b505050604051805150505b5050565b620f424081565b60005433600160a060020a039081169116146200103457600080fd5b600160a060020a038516158015906200104d5750600083115b80156200105a5750428410155b15156200106657600080fd5b80156200111657600d8054600181016200108183826200206d565b9160005260206000209001600087876276a70062ed4e0088620010a362002099565b600160a060020a03909516855260208501939093526040808501929092526060840152901515608083015260a09091019051809103906000f0801515620010e957600080fd5b909190916101000a815481600160a060020a030219169083600160a060020a0316021790555050620011bc565b600d8054600181016200112a83826200206d565b9160005260206000209001600087876301e13380630784ce00886200114e62002099565b600160a060020a03909516855260208501939093526040808501929092526060840152901515608083015260a09091019051809103906000f08015156200119457600080fd5b909190916101000a815481600160a060020a030219169083600160a060020a03160217905550505b600d54620008b890620011d790600163ffffffff62001e9516565b8462001951565b600354600160a060020a031681565b60005433600160a060020a039081169116146200120957600080fd5b60005460a060020a900460ff1615156200122257600080fd5b6000805474ff0000000000000000000000000000000000000000191690557f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3360405160405180910390a1565b62ed4e0081565b600c54600090600160a060020a03166337a3931f8560405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b1515620012c957600080fd5b6102c65a03f11515620012db57600080fd5b505060005460a060020a900460ff16159050806200130a575030600160a060020a031684600160a060020a0316145b8062001327575030600160a060020a031683600160a060020a0316145b80620013405750600b54600160a060020a038581169116145b80620013595750600b54600160a060020a038481169116145b949350505050565b6276a70081565b600554600160a060020a031681565b6301e1338081565b600a5460009033600160a060020a039081169116146200139e57600080fd5b600160a060020a03821615801590620013c05750600354600160a060020a0316155b1515620013cc57600080fd5b60038054600160a060020a031916600160a060020a038481169190911790915560045416633cebb8238360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b15156200143557600080fd5b6102c65a03f115156200144757600080fd5b5050600c54600160a060020a0316905063f2fde38b8360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b15156200149c57600080fd5b6102c65a03f11515620014ae57600080fd5b50505030600160a060020a03163190506000811115620014fa57600160a060020a03821681156108fc0282604051600060405180830381858888f193505050501515620014fa57600080fd5b600454600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156200155457600080fd5b6102c65a03f115156200156657600080fd5b505050604051805191505060008111156200100d57600454600160a060020a031663a9059cbb838360006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151562000ff057600080fd5b600b54600090600160a060020a0316158015906200165b5750600b54600160a060020a031663ecb70fb76000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156200163d57600080fd5b6102c65a03f115156200164f57600080fd5b50505060405180519050155b8015620016c95750600b54600160a060020a03166344691f7e6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515620016ac57600080fd5b6102c65a03f11515620016be57600080fd5b505050604051805190505b90505b90565b60005460a060020a900460ff1681565b6a05606db4c034089680000081565b600d805482908110620016fd57fe5b600091825260209091200154600160a060020a0316905081565b6a108b2a2c2802909400000081565b600d5490565b600a54600160a060020a031681565b60005433600160a060020a039081169116146200175757600080fd5b60005460a060020a900460ff16156200176f57600080fd5b6000805474ff0000000000000000000000000000000000000000191660a060020a1790557f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a1565b6103e881565b6a0b949d854f34fece00000081565b600054600160a060020a031681565b670de0b6b3a764000081565b600b5433600160a060020a039081169116146200180d57600080fd5b600c54600160a060020a03166393a378da838360405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b1515620008a657600080fd5b600b54600160a060020a031681565b600a5433600160a060020a039081169116146200188f57600080fd5b30600160a060020a031682600160a060020a03161480620018bd5750600554600160a060020a038381169116145b1515620018c957600080fd5b600454600160a060020a031663d3ce77fe838360006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156200192957600080fd5b6102c65a03f115156200193b57600080fd5b5050506040518051905015156200100d57600080fd5b60005433600160a060020a039081169116146200196d57600080fd5b600d54821080156200197f5750600081115b801562001a075750600d8054839081106200199657fe5b6000918252602082200154600160a060020a03169063be9a655590604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515620019e757600080fd5b6102c65a03f11515620019f957600080fd5b505050604051805190504211155b151562001a1357600080fd5b600454600d8054600160a060020a039092169163a9059cbb91908590811062001a3857fe5b6000918252602082200154600160a060020a03169084906040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156200192957600080fd5b600754600160a060020a031681565b6a0422ca8b0a00a42500000081565b600a5433600160a060020a0390811691161462001ad457600080fd5b600160a060020a038116151562001aea57600080fd5b600a8054600160a060020a031916600160a060020a0392909216919091179055565b600b5433600160a060020a0390811691161462001b2857600080fd5b600c54600160a060020a031663b0e9a1ef8260405160e060020a63ffffffff84160281526004810191909152602401600060405180830381600087803b15156200098757600080fd5b630784ce0081565b6a027b46536c66c8e300000081565b60005433600160a060020a0390811691161462001ba457600080fd5b600454600160a060020a038281169116141562001bc057600080fd5b600454600160a060020a031663df8de3e78260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b15156200098757600080fd5b600954600160a060020a031681565b60005433600160a060020a0390811691161462001c3c57600080fd5b600160a060020a0382161580159062001c5c575062001c5a620015db565b155b801562001c735750600454600160a060020a031615155b151562001c7f57600080fd5b600b8054600160a060020a031916600160a060020a0384811691909117909155600454600554908216916323b872dd9116848460006040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b15156200192957600080fd5b600654600160a060020a031681565b505060005460a060020a900460ff1615919050565b60005433600160a060020a0390811691161462001d4b57600080fd5b600354600160a060020a031615158062001d735750600454600160a060020a03838116911614155b151562001d7f57600080fd5b6200100d828262001ea8565b60005433600160a060020a0390811691161462001da757600080fd5b600160a060020a038116151562001dbd57600080fd5b600054600160a060020a0380831691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008054600160a060020a031916600160a060020a0392909216919091179055565b6000806000fd5b600854600160a060020a031681565b69d3c21bcecceda100000081565b60008282018381101562001e4f57fe5b9392505050565b600080828481151562001e6557fe5b04949350505050565b600082820283158062001e8c575082848281151562001e8957fe5b04145b151562001e4f57fe5b60008282111562001ea257fe5b50900390565b60008054819033600160a060020a0390811691161462001ec757600080fd5b600160a060020a038416151562001f1c5782600160a060020a03166108fc30600160a060020a0316319081150290604051600060405180830381858888f19350505050151562001f1657600080fd5b62000999565b83915081600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151562001f7757600080fd5b6102c65a03f1151562001f8957600080fd5b5050506040518051915050600160a060020a03821663a9059cbb848360006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151562001ff257600080fd5b6102c65a03f115156200200457600080fd5b505050604051805190505082600160a060020a031684600160a060020a03167f21e9b296e283cad208b551b3c383bb74e34086eb5691fee8392dcce6794521c28360405190815260200160405180910390a350505050565b60405161101580620020cc83390190565b815481835581811511620020945760008381526020902062002094918101908301620020aa565b505050565b60405161090f80620030e183390190565b620016cc91905b80821115620020c75760008155600101620020b1565b509056006060604052341561000f57600080fd5b60405160608061101583398101604052808051919060200180519190602001805160008054600160a060020a033316600160a060020a0319909116179055600b949094555050600c55600d55610fab8061006a6000396000f3006060604052600436106101235763ffffffff60e060020a600035041662346b57811461012857806304c80c3c1461014c5780630d92e3e8146101715780630eb6f5431461018457806326c43d8f1461019757806328262dd1146101aa57806337a3931f146101bd57806342ef4c1a146101dc5780634a48314f146101ef5780634b86faba14610202578063685a73e0146102155780638da5cb5b1461023357806391e79c721461026257806393a378da14610275578063b0e9a1ef14610297578063b40d8d58146102ad578063be2b1047146102c0578063c899fa77146102d3578063d228cfc5146102e6578063d43a0b4c14610305578063d6192c6c14610318578063e2c208361461036e578063f2fde38b14610381578063fbd7d081146103a0575b600080fd5b341561013357600080fd5b61014a600160a060020a03600435166024356103b3565b005b341561015757600080fd5b61015f6105cc565b60405190815260200160405180910390f35b341561017c57600080fd5b61015f6105d2565b341561018f57600080fd5b61015f6105d8565b34156101a257600080fd5b61015f6105de565b34156101b557600080fd5b61015f6105e4565b34156101c857600080fd5b61014a600160a060020a03600435166105ea565b34156101e757600080fd5b61015f6106b1565b34156101fa57600080fd5b61015f6106b7565b341561020d57600080fd5b61014a6106bd565b341561022057600080fd5b61014a60048035602481019101356106c8565b341561023e57600080fd5b6102466106ff565b604051600160a060020a03909116815260200160405180910390f35b341561026d57600080fd5b61015f61070e565b341561028057600080fd5b61014a600160a060020a0360043516602435610714565b34156102a257600080fd5b61014a600435610848565b34156102b857600080fd5b61015f61090f565b34156102cb57600080fd5b61015f610915565b34156102de57600080fd5b61015f61091b565b34156102f157600080fd5b61014a600160a060020a0360043516610921565b341561031057600080fd5b61015f610cc6565b341561032357600080fd5b610337600160a060020a0360043516610ccc565b60405194855292151560208501529015156040808501919091529015156060840152901515608083015260a0909101905180910390f35b341561037957600080fd5b61015f610d04565b341561038c57600080fd5b61014a600160a060020a0360043516610e7b565b34156103ab57600080fd5b61015f610f16565b6000805433600160a060020a039081169116146103cf57600080fd5b60075415806103e057506007544211155b156105c757600160a060020a0383166000908152600160205260409020548214806104125750600160a060020a038316155b1561041c576105c7565b600160a060020a0383166000908152600160205260409020541580156104425750600082115b156104635760035461045b90600163ffffffff610f1c16565b6003556104a4565b600160a060020a038316600090815260016020526040812054118015610487575081155b156104a4576003546104a090600163ffffffff610f3216565b6003555b600160a060020a03831660009081526001602052604090205482116104f157600160a060020a0383166000908152600160205260409020546104ec908363ffffffff610f3216565b61051b565b600160a060020a03831660009081526001602052604090205461051b90839063ffffffff610f3216565b600160a060020a03841660009081526001602052604090205490915082111561055957600254610551908263ffffffff610f1c16565b600255610570565b60025461056c908263ffffffff610f3216565b6002555b600160a060020a038084166000818152600160205260409081902085905590913316907f531b6d98182f354ef73d680007a0fa84a81fa4a320e289e4f826150ad104fb1a9085905190815260200160405180910390a35b505050565b600c5481565b600e5481565b60055481565b60035481565b600d5481565b60005433600160a060020a0390811691161461060557600080fd5b600160a060020a0381166000908152600160205260408120541180156106485750600160a060020a0381166000908152600160208190526040909120015460ff16155b156106a557600160a060020a0381166000908152600160208190526040909120808201805460ff19169092179091555460025461068a9163ffffffff610f3216565b6002556003546106a190600163ffffffff610f3216565b6003555b6106ad610d04565b5050565b60095481565b60085481565b6106c633610921565b565b60005b818110156105c7576106f78383838181106106e257fe5b90506020020135600160a060020a0316610921565b6001016106cb565b600054600160a060020a031681565b60025481565b60005433600160a060020a0390811691161461072f57600080fd5b600754158061074057506007544211155b156106ad578015806107595750600160a060020a038216155b15610763576106ad565b600160a060020a038216600090815260016020526040902054151561079a5760035461079690600163ffffffff610f1c16565b6003555b600160a060020a0382166000908152600160205260409020546107c3908263ffffffff610f1c16565b600160a060020a0383166000908152600160205260409020556002546107ef908263ffffffff610f1c16565b600255600160a060020a03808316600081815260016020526040908190205491923316917f531b6d98182f354ef73d680007a0fa84a81fa4a320e289e4f826150ad104fb1a915190815260200160405180910390a35050565b60005433600160a060020a0390811691161461086357600080fd5b600754158061087457506007544211155b1561090c574281101561088657600080fd5b600781905561089e816276a70063ffffffff610f1c16565b6008556108b48162ed4e0063ffffffff610f1c16565b6009556108cb81630163f50063ffffffff610f1c16565b600a55600160a060020a0333167fc7ad31b0c99a40aa43822fbc49a68cf7f3eb3d52152a5c01a7f636e4481cf43f8260405190815260200160405180910390a25b50565b600a5481565b60075481565b60045481565b600160a060020a03811660009081526001602052604081205481901180156109665750600160a060020a0382166000908152600160208190526040909120015460ff16155b151561097157600080fd5b50600061097c610d04565b50600160a060020a03821660009081526001602081905260409091200154610100900460ff161580156109b157506008544210155b15610a3357600454600b54600160a060020a038416600090815260016020526040902054610a07926109fa9290916109ee9163ffffffff610f4416565b9063ffffffff610f6816565b829063ffffffff610f1c16565b600160a060020a038316600090815260016020819052604090912001805461ff00191661010017905590505b600160a060020a0382166000908152600160208190526040909120015462010000900460ff16158015610a6857506009544210155b15610ad357600554600c54600160a060020a038416600090815260016020526040902054610aa5926109fa9290916109ee9163ffffffff610f4416565b600160a060020a038316600090815260016020819052604090912001805462ff000019166201000017905590505b600160a060020a038216600090815260016020819052604090912001546301000000900460ff16158015610b095750600a544210155b15610b7657600654600d54600160a060020a038416600090815260016020526040902054610b46926109fa9290916109ee9163ffffffff610f4416565b600160a060020a038316600090815260016020819052604090912001805463ff0000001916630100000017905590505b60008111156106ad57600e54610b92908263ffffffff610f1c16565b600e5560008054600160a060020a0316906303d756cb90604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610bde57600080fd5b6102c65a03f11515610bef57600080fd5b50505060405180519050600160a060020a031663a9059cbb838360006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610c5557600080fd5b6102c65a03f11515610c6657600080fd5b505050604051805190501515610c7b57600080fd5b81600160a060020a031633600160a060020a03167fd06980f1b54006ca63e8ddd2f4dafe76e8bcd6e7d7f333296f778781626af4268360405190815260200160405180910390a35050565b60065481565b6001602081905260009182526040909120805491015460ff808216916101008104821691620100008204811691630100000090041685565b60006008544210158015610d185750600454155b15610d24576002546004555b6009544210158015610d365750600554155b15610d42576002546005555b600a544210158015610d545750600654155b15610e7457600254600655600e54600c54600b5460008054610e709493610e64939092610e5892600160a060020a0316906303d756cb90604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610dc057600080fd5b6102c65a03f11515610dd157600080fd5b50505060405180519050600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610e3157600080fd5b6102c65a03f11515610e4257600080fd5b505050604051805191905063ffffffff610f3216565b9063ffffffff610f3216565b9063ffffffff610f1c16565b600d555b5060025490565b60005433600160a060020a03908116911614610e9657600080fd5b600160a060020a0381161515610eab57600080fd5b600054600160a060020a0380831691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600b5481565b600082820183811015610f2b57fe5b9392505050565b600082821115610f3e57fe5b50900390565b6000828202831580610f605750828482811515610f5d57fe5b04145b1515610f2b57fe5b6000808284811515610f7657fe5b049493505050505600a165627a7a72305820b13878352c4505507a0469068cef25077583c2b2fd96737ede4cf449af3c69b800296060604052341561000f57600080fd5b60405160a08061090f833981016040528080519190602001805191906020018051919060200180519190602001805160008054600160a060020a03191633600160a060020a039081169190911790915590925086161515905061007157600080fd5b8183111561007e57600080fd5b60018054600160a060020a031916600160a060020a0387161790556005805460ff191682151517905560048290556100c384846401000000006100d2810261079b1704565b600255505050600355506100e8565b6000828201838110156100e157fe5b9392505050565b610818806100f76000396000f3006060604052600436106100ab5763ffffffff60e060020a6000350416630fb5a6b481146100b057806313d033c0146100d55780631726cbc8146100e85780631916558714610107578063384711cc1461012857806338af3eed1461014757806374a8f10314610176578063872a7810146101955780638da5cb5b146101bc5780639852595c146101cf578063be9a6555146101ee578063f2fde38b14610201578063fa01dc0614610220575b600080fd5b34156100bb57600080fd5b6100c361023f565b60405190815260200160405180910390f35b34156100e057600080fd5b6100c3610245565b34156100f357600080fd5b6100c3600160a060020a036004351661024b565b341561011257600080fd5b610126600160a060020a0360043516610283565b005b341561013357600080fd5b6100c3600160a060020a036004351661039c565b341561015257600080fd5b61015a6104dd565b604051600160a060020a03909116815260200160405180910390f35b341561018157600080fd5b610126600160a060020a03600435166104ec565b34156101a057600080fd5b6101a86106a9565b604051901515815260200160405180910390f35b34156101c757600080fd5b61015a6106b2565b34156101da57600080fd5b6100c3600160a060020a03600435166106c1565b34156101f957600080fd5b6100c36106d3565b341561020c57600080fd5b610126600160a060020a03600435166106d9565b341561022b57600080fd5b6101a8600160a060020a0360043516610774565b60045481565b60025481565b600160a060020a03811660009081526006602052604081205461027d906102718461039c565b9063ffffffff61078916565b92915050565b600061028e8261024b565b90506000811161029d57600080fd5b600160a060020a0382166000908152600660205260409020546102c6908263ffffffff61079b16565b600160a060020a0380841660008181526006602052604080822094909455600154919363a9059cbb939290921691859190516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561033f57600080fd5b6102c65a03f1151561035057600080fd5b50505060405180519050151561036557600080fd5b7ffb81f9b30d73d830c3544b34d827c08142579ee75710b490bab0b3995468c5658160405190815260200160405180910390a15050565b600080600083600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156103f857600080fd5b6102c65a03f1151561040957600080fd5b5050506040518051600160a060020a03861660009081526006602052604090205490935061043f9150839063ffffffff61079b16565b905060025442101561045457600092506104d6565b6004546003546104699163ffffffff61079b16565b4210158061048f5750600160a060020a03841660009081526007602052604090205460ff165b1561049c578092506104d6565b6104d36004546104c76104ba6003544261078990919063ffffffff16565b849063ffffffff6107b116565b9063ffffffff6107d516565b92505b5050919050565b600154600160a060020a031681565b600080548190819033600160a060020a0390811691161461050c57600080fd5b60055460ff16151561051d57600080fd5b600160a060020a03841660009081526007602052604090205460ff161561054357600080fd5b83600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561059a57600080fd5b6102c65a03f115156105ab57600080fd5b5050506040518051905092506105c08461024b565b91506105d2838363ffffffff61078916565b600160a060020a03808616600081815260076020526040808220805460ff191660011790558154949550919363a9059cbb931691859190516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561065157600080fd5b6102c65a03f1151561066257600080fd5b50505060405180519050151561067757600080fd5b7f44825a4b2df8acb19ce4e1afba9aa850c8b65cdb7942e2078f27d0b0960efee660405160405180910390a150505050565b60055460ff1681565b600054600160a060020a031681565b60066020526000908152604090205481565b60035481565b60005433600160a060020a039081169116146106f457600080fd5b600160a060020a038116151561070957600080fd5b600054600160a060020a0380831691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60076020526000908152604090205460ff1681565b60008282111561079557fe5b50900390565b6000828201838110156107aa57fe5b9392505050565b60008282028315806107cd57508284828115156107ca57fe5b04145b15156107aa57fe5b60008082848115156107e357fe5b049493505050505600a165627a7a7230582009649e1f374e51bd346858160f9ce8785feb3bfeb10e4f09b72214fac4485c0e0029a165627a7a7230582092a1f27c76560e9a5c435886caece0a86173198ab75681be3e0196811ebb45d30029
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000fc5c6c8015962e7035f3bdc5fe7ec94bedc77833
-----Decoded View---------------
Arg [0] : _wallet (address): 0xFc5c6c8015962E7035f3BDc5fE7eC94BEDc77833
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000fc5c6c8015962e7035f3bdc5fe7ec94bedc77833
Swarm Source
bzzr://92a1f27c76560e9a5c435886caece0a86173198ab75681be3e0196811ebb45d3
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.