Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 1 internal transaction
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
12868967 | 1292 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
TemplateCrowdsale
Compiler Version
v0.4.24+commit.e67f0147
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-07-21 */ /* * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ pragma solidity ^0.4.23; /** * @title ERC20Basic * @dev Simpler version of ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/179 */ contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20 is ERC20Basic { 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 Approval( address indexed owner, address indexed spender, uint256 value ); } /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { // Gas optimization: this is cheaper than asserting 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522 if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } /** * @dev Integer division of two numbers, truncating the quotient. */ 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 a / b; } /** * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } } /** * @title Crowdsale * @dev Crowdsale is a base contract for managing a token crowdsale, * allowing investors to purchase tokens with ether. This contract implements * such functionality in its most fundamental form and can be extended to provide additional * functionality and/or custom behavior. * The external interface represents the basic interface for purchasing tokens, and conform * the base architecture for crowdsales. They are *not* intended to be modified / overriden. * The internal interface conforms the extensible and modifiable surface of crowdsales. Override * the methods to add functionality. Consider using 'super' where appropiate to concatenate * behavior. */ contract Crowdsale { using SafeMath for uint256; // The token being sold ERC20 public token; // Address where funds are collected address public wallet; // How many token units a buyer gets per wei. // The rate is the conversion between wei and the smallest and indivisible token unit. // So, if you are using a rate of 1 with a DetailedERC20 token with 3 decimals called TOK // 1 wei will give you 1 unit, or 0.001 TOK. uint256 public rate; // Amount of wei raised 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 ); /** * @param _rate Number of token units a buyer gets per wei * @param _wallet Address where collected funds will be forwarded to * @param _token Address of the token being sold */ constructor(uint256 _rate, address _wallet, ERC20 _token) public { require(_rate > 0); require(_wallet != address(0)); require(_token != address(0)); rate = _rate; wallet = _wallet; token = _token; } // ----------------------------------------- // Crowdsale external interface // ----------------------------------------- /** * @dev fallback function ***DO NOT OVERRIDE*** */ function () external payable { buyTokens(msg.sender); } /** * @dev low level token purchase ***DO NOT OVERRIDE*** * @param _beneficiary Address performing the token purchase */ function buyTokens(address _beneficiary) public payable { uint256 weiAmount = msg.value; _preValidatePurchase(_beneficiary, weiAmount); // calculate token amount to be created uint256 tokens = _getTokenAmount(weiAmount); // update state weiRaised = weiRaised.add(weiAmount); _processPurchase(_beneficiary, tokens); emit TokenPurchase( msg.sender, _beneficiary, weiAmount, tokens ); _updatePurchasingState(_beneficiary, weiAmount); _forwardFunds(); _postValidatePurchase(_beneficiary, weiAmount); } // ----------------------------------------- // Internal interface (extensible) // ----------------------------------------- /** * @dev Validation of an incoming purchase. Use require statements to revert state when conditions are not met. Use super to concatenate validations. * @param _beneficiary Address performing the token purchase * @param _weiAmount Value in wei involved in the purchase */ function _preValidatePurchase( address _beneficiary, uint256 _weiAmount ) internal { require(_beneficiary != address(0)); require(_weiAmount != 0); } /** * @dev Validation of an executed purchase. Observe state and use revert statements to undo rollback when valid conditions are not met. * @param _beneficiary Address performing the token purchase * @param _weiAmount Value in wei involved in the purchase */ function _postValidatePurchase( address _beneficiary, uint256 _weiAmount ) internal { // optional override } /** * @dev Source of tokens. Override this method to modify the way in which the crowdsale ultimately gets and sends its tokens. * @param _beneficiary Address performing the token purchase * @param _tokenAmount Number of tokens to be emitted */ function _deliverTokens( address _beneficiary, uint256 _tokenAmount ) internal { token.transfer(_beneficiary, _tokenAmount); } /** * @dev Executed when a purchase has been validated and is ready to be executed. Not necessarily emits/sends tokens. * @param _beneficiary Address receiving the tokens * @param _tokenAmount Number of tokens to be purchased */ function _processPurchase( address _beneficiary, uint256 _tokenAmount ) internal { _deliverTokens(_beneficiary, _tokenAmount); } /** * @dev Override for extensions that require an internal state to check for validity (current user contributions, etc.) * @param _beneficiary Address receiving the tokens * @param _weiAmount Value in wei involved in the purchase */ function _updatePurchasingState( address _beneficiary, uint256 _weiAmount ) internal { // optional override } /** * @dev Override to extend the way in which ether is converted to tokens. * @param _weiAmount Value in wei to be converted into tokens * @return Number of tokens that can be purchased with the specified _weiAmount */ function _getTokenAmount(uint256 _weiAmount) internal view returns (uint256) { return _weiAmount.mul(rate); } /** * @dev Determines how ETH is stored/forwarded on purchases. */ function _forwardFunds() internal { wallet.transfer(msg.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 OwnershipRenounced(address indexed previousOwner); event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor() public { 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 relinquish control of the contract. */ function renounceOwnership() public onlyOwner { emit OwnershipRenounced(owner); owner = address(0); } /** * @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) public onlyOwner { _transferOwnership(_newOwner); } /** * @dev Transfers control of the contract to a newOwner. * @param _newOwner The address to transfer ownership to. */ function _transferOwnership(address _newOwner) internal { require(_newOwner != address(0)); emit OwnershipTransferred(owner, _newOwner); owner = _newOwner; } } /** * @title TimedCrowdsale * @dev Crowdsale accepting contributions only within a time frame. */ contract TimedCrowdsale is Crowdsale { using SafeMath for uint256; uint256 public openingTime; uint256 public closingTime; /** * @dev Reverts if not in crowdsale time range. */ modifier onlyWhileOpen { // solium-disable-next-line security/no-block-members require(block.timestamp >= openingTime && block.timestamp <= closingTime); _; } /** * @dev Constructor, takes crowdsale opening and closing times. * @param _openingTime Crowdsale opening time * @param _closingTime Crowdsale closing time */ constructor(uint256 _openingTime, uint256 _closingTime) public { // solium-disable-next-line security/no-block-members require(_openingTime >= block.timestamp); require(_closingTime >= _openingTime); openingTime = _openingTime; closingTime = _closingTime; } /** * @dev Checks whether the period in which the crowdsale is open has already elapsed. * @return Whether crowdsale period has elapsed */ function hasClosed() public view returns (bool) { // solium-disable-next-line security/no-block-members return block.timestamp > closingTime; } /** * @dev Extend parent behavior requiring to be within contributing period * @param _beneficiary Token purchaser * @param _weiAmount Amount of wei contributed */ function _preValidatePurchase( address _beneficiary, uint256 _weiAmount ) internal onlyWhileOpen { super._preValidatePurchase(_beneficiary, _weiAmount); } } /** * @title FinalizableCrowdsale * @dev Extension of Crowdsale where an owner can do extra work * after finishing. */ contract FinalizableCrowdsale is TimedCrowdsale, Ownable { using SafeMath for uint256; bool public isFinalized = false; event Finalized(); /** * @dev Must be called after crowdsale ends, to do some extra finalization * work. Calls the contract's finalization function. */ function finalize() onlyOwner public { require(!isFinalized); require(hasClosed()); finalization(); emit Finalized(); isFinalized = true; } /** * @dev Can be overridden to add finalization logic. The overriding function * should call super.finalization() to ensure the chain of finalization is * executed entirely. */ function finalization() internal { } } /** * @title RefundVault * @dev This contract is used for storing funds while a crowdsale * is in progress. Supports refunding the money if crowdsale fails, * and forwarding it if crowdsale is successful. */ contract RefundVault is Ownable { using SafeMath for uint256; enum State { Active, Refunding, Closed } mapping (address => uint256) public deposited; address public wallet; State public state; event Closed(); event RefundsEnabled(); event Refunded(address indexed beneficiary, uint256 weiAmount); /** * @param _wallet Vault address */ constructor(address _wallet) public { require(_wallet != address(0)); wallet = _wallet; state = State.Active; } /** * @param investor Investor address */ function deposit(address investor) onlyOwner public payable { require(state == State.Active); deposited[investor] = deposited[investor].add(msg.value); } function close() onlyOwner public { require(state == State.Active); state = State.Closed; emit Closed(); wallet.transfer(address(this).balance); } function enableRefunds() onlyOwner public { require(state == State.Active); state = State.Refunding; emit RefundsEnabled(); } /** * @param investor Investor address */ function refund(address investor) public { require(state == State.Refunding); uint256 depositedValue = deposited[investor]; deposited[investor] = 0; investor.transfer(depositedValue); emit Refunded(investor, depositedValue); } } /** * @title Basic token * @dev Basic version of StandardToken, with no allowances. */ contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) balances; uint256 totalSupply_; /** * @dev total number of tokens in existence */ function totalSupply() public view returns (uint256) { return totalSupply_; } /** * @dev transfer token for a specified address * @param _to The address to transfer to. * @param _value The amount to be transferred. */ function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[msg.sender]); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); emit Transfer(msg.sender, _to, _value); return true; } /** * @dev Gets the balance of the specified address. * @param _owner The address to query the the balance of. * @return An uint256 representing the amount owned by the passed address. */ function balanceOf(address _owner) public view returns (uint256) { return balances[_owner]; } } /** * @title Standard ERC20 token * * @dev Implementation of the basic standard token. * @dev https://github.com/ethereum/EIPs/issues/20 * @dev Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol */ contract StandardToken is ERC20, BasicToken { mapping (address => mapping (address => uint256)) internal allowed; /** * @dev Transfer tokens from one address to another * @param _from address The address which you want to send tokens from * @param _to address The address which you want to transfer to * @param _value uint256 the amount of tokens to be transferred */ function transferFrom( address _from, address _to, uint256 _value ) public returns (bool) { require(_to != address(0)); require(_value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); emit Transfer(_from, _to, _value); return true; } /** * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. * * Beware that changing an allowance with this method brings the risk that someone may use both the old * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * @param _spender The address which will spend the funds. * @param _value The amount of tokens to be spent. */ function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } /** * @dev Function to check the amount of tokens that an owner allowed to a spender. * @param _owner address The address which owns the funds. * @param _spender address The address which will spend the funds. * @return A uint256 specifying the amount of tokens still available for the spender. */ function allowance( address _owner, address _spender ) public view returns (uint256) { return allowed[_owner][_spender]; } /** * @dev Increase the amount of tokens that an owner allowed to a spender. * * approve should be called when allowed[_spender] == 0. To increment * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * @param _spender The address which will spend the funds. * @param _addedValue The amount of tokens to increase the allowance by. */ function increaseApproval( address _spender, uint _addedValue ) public returns (bool) { allowed[msg.sender][_spender] = ( allowed[msg.sender][_spender].add(_addedValue)); emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } /** * @dev Decrease the amount of tokens that an owner allowed to a spender. * * approve should be called when allowed[_spender] == 0. To decrement * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * @param _spender The address which will spend the funds. * @param _subtractedValue The amount of tokens to decrease the allowance by. */ function decreaseApproval( address _spender, uint _subtractedValue ) public returns (bool) { uint oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } } /** * @title Mintable token * @dev Simple ERC20 Token example, with mintable token creation * @dev Issue: * https://github.com/OpenZeppelin/openzeppelin-solidity/issues/120 * Based on code by TokenMarketNet: https://github.com/TokenMarketNet/ico/blob/master/contracts/MintableToken.sol */ contract MintableToken is StandardToken, Ownable { event Mint(address indexed to, uint256 amount); event MintFinished(); bool public mintingFinished = false; modifier canMint() { require(!mintingFinished); _; } modifier hasMintPermission() { require(msg.sender == owner); _; } /** * @dev Function to mint tokens * @param _to The address that will receive the minted tokens. * @param _amount The amount of tokens to mint. * @return A boolean that indicates if the operation was successful. */ function mint( address _to, uint256 _amount ) hasMintPermission canMint public returns (bool) { totalSupply_ = totalSupply_.add(_amount); balances[_to] = balances[_to].add(_amount); emit Mint(_to, _amount); emit Transfer(address(0), _to, _amount); return true; } /** * @dev Function to stop minting new tokens. * @return True if the operation was successful. */ function finishMinting() onlyOwner canMint public returns (bool) { mintingFinished = true; emit MintFinished(); return true; } } contract FreezableToken is StandardToken { // freezing chains mapping (bytes32 => uint64) internal chains; // freezing amounts for each chain mapping (bytes32 => uint) internal freezings; // total freezing balance per address mapping (address => uint) internal freezingBalance; event Freezed(address indexed to, uint64 release, uint amount); event Released(address indexed owner, uint amount); /** * @dev Gets the balance of the specified address include freezing tokens. * @param _owner The address to query the the balance of. * @return An uint256 representing the amount owned by the passed address. */ function balanceOf(address _owner) public view returns (uint256 balance) { return super.balanceOf(_owner) + freezingBalance[_owner]; } /** * @dev Gets the balance of the specified address without freezing tokens. * @param _owner The address to query the the balance of. * @return An uint256 representing the amount owned by the passed address. */ function actualBalanceOf(address _owner) public view returns (uint256 balance) { return super.balanceOf(_owner); } function freezingBalanceOf(address _owner) public view returns (uint256 balance) { return freezingBalance[_owner]; } /** * @dev gets freezing count * @param _addr Address of freeze tokens owner. */ function freezingCount(address _addr) public view returns (uint count) { uint64 release = chains[toKey(_addr, 0)]; while (release != 0) { count++; release = chains[toKey(_addr, release)]; } } /** * @dev gets freezing end date and freezing balance for the freezing portion specified by index. * @param _addr Address of freeze tokens owner. * @param _index Freezing portion index. It ordered by release date descending. */ function getFreezing(address _addr, uint _index) public view returns (uint64 _release, uint _balance) { for (uint i = 0; i < _index + 1; i++) { _release = chains[toKey(_addr, _release)]; if (_release == 0) { return; } } _balance = freezings[toKey(_addr, _release)]; } /** * @dev freeze your tokens to the specified address. * Be careful, gas usage is not deterministic, * and depends on how many freezes _to address already has. * @param _to Address to which token will be freeze. * @param _amount Amount of token to freeze. * @param _until Release date, must be in future. */ function freezeTo(address _to, uint _amount, uint64 _until) public { require(_to != address(0)); require(_amount <= balances[msg.sender]); balances[msg.sender] = balances[msg.sender].sub(_amount); bytes32 currentKey = toKey(_to, _until); freezings[currentKey] = freezings[currentKey].add(_amount); freezingBalance[_to] = freezingBalance[_to].add(_amount); freeze(_to, _until); emit Transfer(msg.sender, _to, _amount); emit Freezed(_to, _until, _amount); } /** * @dev release first available freezing tokens. */ function releaseOnce() public { bytes32 headKey = toKey(msg.sender, 0); uint64 head = chains[headKey]; require(head != 0); require(uint64(block.timestamp) > head); bytes32 currentKey = toKey(msg.sender, head); uint64 next = chains[currentKey]; uint amount = freezings[currentKey]; delete freezings[currentKey]; balances[msg.sender] = balances[msg.sender].add(amount); freezingBalance[msg.sender] = freezingBalance[msg.sender].sub(amount); if (next == 0) { delete chains[headKey]; } else { chains[headKey] = next; delete chains[currentKey]; } emit Released(msg.sender, amount); } /** * @dev release all available for release freezing tokens. Gas usage is not deterministic! * @return how many tokens was released */ function releaseAll() public returns (uint tokens) { uint release; uint balance; (release, balance) = getFreezing(msg.sender, 0); while (release != 0 && block.timestamp > release) { releaseOnce(); tokens += balance; (release, balance) = getFreezing(msg.sender, 0); } } function toKey(address _addr, uint _release) internal pure returns (bytes32 result) { // WISH masc to increase entropy result = 0x5749534800000000000000000000000000000000000000000000000000000000; assembly { result := or(result, mul(_addr, 0x10000000000000000)) result := or(result, and(_release, 0xffffffffffffffff)) } } function freeze(address _to, uint64 _until) internal { require(_until > block.timestamp); bytes32 key = toKey(_to, _until); bytes32 parentKey = toKey(_to, uint64(0)); uint64 next = chains[parentKey]; if (next == 0) { chains[parentKey] = _until; return; } bytes32 nextKey = toKey(_to, next); uint parent; while (next != 0 && _until > next) { parent = next; parentKey = nextKey; next = chains[nextKey]; nextKey = toKey(_to, next); } if (_until == next) { return; } if (next != 0) { chains[key] = next; } chains[parentKey] = _until; } } /** * @title Burnable Token * @dev Token that can be irreversibly burned (destroyed). */ contract BurnableToken is BasicToken { event Burn(address indexed burner, uint256 value); /** * @dev Burns a specific amount of tokens. * @param _value The amount of token to be burned. */ function burn(uint256 _value) public { _burn(msg.sender, _value); } function _burn(address _who, uint256 _value) internal { require(_value <= balances[_who]); // no need to require value <= totalSupply, since that would imply the // sender's balance is greater than the totalSupply, which *should* be an assertion failure balances[_who] = balances[_who].sub(_value); totalSupply_ = totalSupply_.sub(_value); emit Burn(_who, _value); emit Transfer(_who, address(0), _value); } } /** * @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; emit Pause(); } /** * @dev called by the owner to unpause, returns to normal state */ function unpause() onlyOwner whenPaused public { paused = false; emit Unpause(); } } contract FreezableMintableToken is FreezableToken, MintableToken { /** * @dev Mint the specified amount of token to the specified address and freeze it until the specified date. * Be careful, gas usage is not deterministic, * and depends on how many freezes _to address already has. * @param _to Address to which token will be freeze. * @param _amount Amount of token to mint and freeze. * @param _until Release date, must be in future. * @return A boolean that indicates if the operation was successful. */ function mintAndFreeze(address _to, uint _amount, uint64 _until) public onlyOwner canMint returns (bool) { totalSupply_ = totalSupply_.add(_amount); bytes32 currentKey = toKey(_to, _until); freezings[currentKey] = freezings[currentKey].add(_amount); freezingBalance[_to] = freezingBalance[_to].add(_amount); freeze(_to, _until); emit Mint(_to, _amount); emit Freezed(_to, _until, _amount); emit Transfer(msg.sender, _to, _amount); return true; } } contract Consts { uint public constant TOKEN_DECIMALS = 18; uint8 public constant TOKEN_DECIMALS_UINT8 = 18; uint public constant TOKEN_DECIMAL_MULTIPLIER = 10 ** TOKEN_DECIMALS; string public constant TOKEN_NAME = "Hsima"; string public constant TOKEN_SYMBOL = "SIMA"; bool public constant PAUSED = true; address public constant TARGET_USER = 0x956912b455240Ac5811f8Eda585a9176999e1F4F; uint public constant START_TIME = 1630453380; bool public constant CONTINUE_MINTING = true; } /** * @title CappedCrowdsale * @dev Crowdsale with a limit for total contributions. */ contract CappedCrowdsale is Crowdsale { using SafeMath for uint256; uint256 public cap; /** * @dev Constructor, takes maximum amount of wei accepted in the crowdsale. * @param _cap Max amount of wei to be contributed */ constructor(uint256 _cap) public { require(_cap > 0); cap = _cap; } /** * @dev Checks whether the cap has been reached. * @return Whether the cap was reached */ function capReached() public view returns (bool) { return weiRaised >= cap; } /** * @dev Extend parent behavior requiring purchase to respect the funding cap. * @param _beneficiary Token purchaser * @param _weiAmount Amount of wei contributed */ function _preValidatePurchase( address _beneficiary, uint256 _weiAmount ) internal { super._preValidatePurchase(_beneficiary, _weiAmount); require(weiRaised.add(_weiAmount) <= cap); } } /** * @title MintedCrowdsale * @dev Extension of Crowdsale contract whose tokens are minted in each purchase. * Token ownership should be transferred to MintedCrowdsale for minting. */ contract MintedCrowdsale is Crowdsale { /** * @dev Overrides delivery by minting tokens upon purchase. * @param _beneficiary Token purchaser * @param _tokenAmount Number of tokens to be minted */ function _deliverTokens( address _beneficiary, uint256 _tokenAmount ) internal { require(MintableToken(token).mint(_beneficiary, _tokenAmount)); } } contract MainToken is Consts, FreezableMintableToken, BurnableToken, Pausable { function name() public pure returns (string _name) { return TOKEN_NAME; } function symbol() public pure returns (string _symbol) { return TOKEN_SYMBOL; } function decimals() public pure returns (uint8 _decimals) { return TOKEN_DECIMALS_UINT8; } function transferFrom(address _from, address _to, uint256 _value) public returns (bool _success) { require(!paused); return super.transferFrom(_from, _to, _value); } function transfer(address _to, uint256 _value) public returns (bool _success) { require(!paused); return super.transfer(_to, _value); } } /** * @title RefundableCrowdsale * @dev Extension of Crowdsale contract that adds a funding goal, and * the possibility of users getting a refund if goal is not met. * Uses a RefundVault as the crowdsale's vault. */ contract RefundableCrowdsale is FinalizableCrowdsale { using SafeMath for uint256; // minimum amount of funds to be raised in weis uint256 public goal; // refund vault used to hold funds while crowdsale is running RefundVault public vault; /** * @dev Constructor, creates RefundVault. * @param _goal Funding goal */ constructor(uint256 _goal) public { require(_goal > 0); vault = new RefundVault(wallet); goal = _goal; } /** * @dev Investors can claim refunds here if crowdsale is unsuccessful */ function claimRefund() public { require(isFinalized); require(!goalReached()); vault.refund(msg.sender); } /** * @dev Checks whether funding goal was reached. * @return Whether funding goal was reached */ function goalReached() public view returns (bool) { return weiRaised >= goal; } /** * @dev vault finalization task, called when owner calls finalize() */ function finalization() internal { if (goalReached()) { vault.close(); } else { vault.enableRefunds(); } super.finalization(); } /** * @dev Overrides Crowdsale fund forwarding, sending funds to vault. */ function _forwardFunds() internal { vault.deposit.value(msg.value)(msg.sender); } } contract MainCrowdsale is Consts, FinalizableCrowdsale, MintedCrowdsale, CappedCrowdsale { function hasStarted() public view returns (bool) { return now >= openingTime; } function startTime() public view returns (uint256) { return openingTime; } function endTime() public view returns (uint256) { return closingTime; } function hasClosed() public view returns (bool) { return super.hasClosed() || capReached(); } function hasEnded() public view returns (bool) { return hasClosed(); } function finalization() internal { super.finalization(); if (PAUSED) { MainToken(token).unpause(); } if (!CONTINUE_MINTING) { require(MintableToken(token).finishMinting()); } Ownable(token).transferOwnership(TARGET_USER); } /** * @dev Override to extend the way in which ether is converted to tokens. * @param _weiAmount Value in wei to be converted into tokens * @return Number of tokens that can be purchased with the specified _weiAmount */ function _getTokenAmount(uint256 _weiAmount) internal view returns (uint256) { return _weiAmount.mul(rate).div(1 ether); } } contract TemplateCrowdsale is Consts, MainCrowdsale , RefundableCrowdsale { event Initialized(); event TimesChanged(uint startTime, uint endTime, uint oldStartTime, uint oldEndTime); bool public initialized = false; constructor(MintableToken _token) public Crowdsale(2500 * TOKEN_DECIMAL_MULTIPLIER, 0xE7324807764f967B9Ef682bE31a5bf8Ed64E1072, _token) TimedCrowdsale(START_TIME > now ? START_TIME : now, 1640911380) CappedCrowdsale(2000000000000000000000) RefundableCrowdsale(400000000000000000000) { } function init() public onlyOwner { require(!initialized); initialized = true; if (PAUSED) { MainToken(token).pause(); } address[4] memory addresses = [address(0xb60ddcc838965200f95ac213430e3d6ebbb0bf43),address(0xf25397842a78884320b193ee095ee6ac30608bd1),address(0x17260767d4f749bef49e0de0f17cd361e798383b),address(0x35815eac9e6e48e8caf1f5160f9e066a5e179d58)]; uint[4] memory amounts = [uint(75000000000000000000000),uint(400000000000000000000000),uint(100000000000000000000000),uint(500000000000000000000000)]; uint64[4] memory freezes = [uint64(0),uint64(0),uint64(0),uint64(1640911443)]; for (uint i = 0; i < addresses.length; i++) { if (freezes[i] == 0) { MainToken(token).mint(addresses[i], amounts[i]); } else { MainToken(token).mintAndFreeze(addresses[i], amounts[i], freezes[i]); } } transferOwnership(TARGET_USER); emit Initialized(); } /** * @dev override hasClosed to add minimal value logic * @return true if remained to achieve less than minimal */ function hasClosed() public view returns (bool) { bool remainValue = cap.sub(weiRaised) < 1000000000000000000; return super.hasClosed() || remainValue; } /** * @dev override purchase validation to add extra value logic. * @return true if sended more than minimal value */ function _preValidatePurchase( address _beneficiary, uint256 _weiAmount ) internal { require(msg.value >= 1000000000000000000); require(msg.value <= 10000000000000000000); super._preValidatePurchase(_beneficiary, _weiAmount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":true,"inputs":[],"name":"CONTINUE_MINTING","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"hasClosed","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"initialized","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TOKEN_NAME","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TOKEN_SYMBOL","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"endTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"cap","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"goal","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"weiRaised","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"hasStarted","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"closingTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"finalize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"capReached","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"wallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TOKEN_DECIMAL_MULTIPLIER","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TOKEN_DECIMALS","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"TARGET_USER","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"startTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"goalReached","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isFinalized","outputs":[{"name":"","type":"bool"}],"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":"PAUSED","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"claimRefund","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"openingTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TOKEN_DECIMALS_UINT8","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"START_TIME","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"init","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_beneficiary","type":"address"}],"name":"buyTokens","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"hasEnded","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"vault","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_token","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"startTime","type":"uint256"},{"indexed":false,"name":"endTime","type":"uint256"},{"indexed":false,"name":"oldStartTime","type":"uint256"},{"indexed":false,"name":"oldEndTime","type":"uint256"}],"name":"TimesChanged","type":"event"},{"anonymous":false,"inputs":[],"name":"Finalized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"}],"name":"OwnershipRenounced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"purchaser","type":"address"},{"indexed":true,"name":"beneficiary","type":"address"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"TokenPurchase","type":"event"}]
Contract Creation Code
60806040526006805460a060020a60ff021990811690915560098054909116905534801561002c57600080fd5b5060405160208062001a8783398101604052516815af1d78b58c400000686c6b935b8bbd4000004263612ebe8411610064574261006a565b63612ebe845b6361ce521468878678326eac90000073e7324807764f967b9ef682be31a5bf8ed64e107286600160a060020a03811615156100a457600080fd5b60029290925560018054600160a060020a03928316600160a060020a03199182161790915560008054929093169116179055428210156100e357600080fd5b818110156100f057600080fd5b60049190915560055560068054600160a060020a031916331790556000811161011857600080fd5b6007556000811161012857600080fd5b600154600160a060020a031661013c610193565b600160a060020a03909116815260405190819003602001906000f080158015610169573d6000803e3d6000fd5b5060098054600160a060020a031916600160a060020a0392909216919091179055600855506101a4565b60405161069080620013f783390190565b61124380620001b46000396000f3006080604052600436106101915763ffffffff60e060020a6000350416623fd35a811461019c5780631515bc2b146101c5578063158ef93e146101da57806318821400146101ef5780632a905318146102795780632c4e722e1461028e5780633197cbb6146102b5578063355274ea146102ca57806340193883146102df5780634042b66f146102f457806344691f7e146103095780634b6753bc1461031e5780634bb278f3146103335780634f93594514610348578063521eb2731461035d578063567800851461038e5780635b7f415c146103a3578063715018a6146103b8578063726a431a146103cd57806378e97925146103e25780637d3d6522146103f75780638d4e40831461040c5780638da5cb5b14610421578063a9aad58c1461019c578063b5545a3c14610436578063b7a8807c1461044b578063cf3b196714610460578063ddaa26ad1461048b578063e1c7392a146104a0578063ec8ac4d8146104b5578063ecb70fb7146104c9578063f2fde38b146104de578063fbfa77cf146104ff578063fc0c546a14610514575b61019a33610529565b005b3480156101a857600080fd5b506101b16105cb565b604080519115158252519081900360200190f35b3480156101d157600080fd5b506101b16105d0565b3480156101e657600080fd5b506101b161060c565b3480156101fb57600080fd5b5061020461061c565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561023e578181015183820152602001610226565b50505050905090810190601f16801561026b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561028557600080fd5b50610204610653565b34801561029a57600080fd5b506102a361068a565b60408051918252519081900360200190f35b3480156102c157600080fd5b506102a3610690565b3480156102d657600080fd5b506102a3610696565b3480156102eb57600080fd5b506102a361069c565b34801561030057600080fd5b506102a36106a2565b34801561031557600080fd5b506101b16106a8565b34801561032a57600080fd5b506102a36106b1565b34801561033f57600080fd5b5061019a6106b7565b34801561035457600080fd5b506101b161074f565b34801561036957600080fd5b5061037261075a565b60408051600160a060020a039092168252519081900360200190f35b34801561039a57600080fd5b506102a3610769565b3480156103af57600080fd5b506102a3610775565b3480156103c457600080fd5b5061019a61077a565b3480156103d957600080fd5b506103726107e8565b3480156103ee57600080fd5b506102a3610800565b34801561040357600080fd5b506101b1610806565b34801561041857600080fd5b506101b1610811565b34801561042d57600080fd5b50610372610821565b34801561044257600080fd5b5061019a610830565b34801561045757600080fd5b506102a36108d9565b34801561046c57600080fd5b50610475610775565b6040805160ff9092168252519081900360200190f35b34801561049757600080fd5b506102a36108df565b3480156104ac57600080fd5b5061019a6108e7565b61019a600160a060020a0360043516610529565b3480156104d557600080fd5b506101b1610cbb565b3480156104ea57600080fd5b5061019a600160a060020a0360043516610cca565b34801561050b57600080fd5b50610372610ced565b34801561052057600080fd5b50610372610cfc565b3460006105368383610d0b565b61053f82610d43565b600354909150610555908363ffffffff610d7816565b6003556105628382610d85565b60408051838152602081018390528151600160a060020a0386169233927f623b3804fa71d67900d064613da8f94b9617215ee90799290593e1745087ad18929081900390910190a36105b48383610d3f565b6105bc610d8f565b6105c68383610d3f565b505050565b600181565b600080670de0b6b3a76400006105f3600354600754610e1090919063ffffffff16565b1090506105fe610e22565b806106065750805b91505090565b60095460a060020a900460ff1681565b60408051808201909152600581527f4873696d61000000000000000000000000000000000000000000000000000000602082015281565b60408051808201909152600481527f53494d4100000000000000000000000000000000000000000000000000000000602082015281565b60025481565b60055490565b60075481565b60085481565b60035481565b60045442101590565b60055481565b600654600160a060020a031633146106ce57600080fd5b60065460a060020a900460ff16156106e557600080fd5b6106ed6105d0565b15156106f857600080fd5b610700610e3a565b6040517f6823b073d48d6e3a7d385eeb601452d680e74bb46afe3255a7d778f3a9b1768190600090a16006805474ff0000000000000000000000000000000000000000191660a060020a179055565b600754600354101590565b600154600160a060020a031681565b670de0b6b3a764000081565b601281565b600654600160a060020a0316331461079157600080fd5b600654604051600160a060020a03909116907ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482090600090a26006805473ffffffffffffffffffffffffffffffffffffffff19169055565b73956912b455240ac5811f8eda585a9176999e1f4f81565b60045490565b600854600354101590565b60065460a060020a900460ff1681565b600654600160a060020a031681565b60065460a060020a900460ff16151561084857600080fd5b610850610806565b1561085a57600080fd5b600954604080517ffa89401a0000000000000000000000000000000000000000000000000000000081523360048201529051600160a060020a039092169163fa89401a9160248082019260009290919082900301818387803b1580156108bf57600080fd5b505af11580156108d3573d6000803e3d6000fd5b50505050565b60045481565b63612ebe8481565b6108ef6111f8565b6108f76111f8565b6108ff6111f8565b600654600090600160a060020a0316331461091957600080fd5b60095460a060020a900460ff161561093057600080fd5b6009805474ff0000000000000000000000000000000000000000191660a060020a17905560008054604080517f8456cb590000000000000000000000000000000000000000000000000000000081529051600160a060020a0390921692638456cb599260048084019382900301818387803b1580156109ae57600080fd5b505af11580156109c2573d6000803e3d6000fd5b505050505050604080516080818101835273b60ddcc838965200f95ac213430e3d6ebbb0bf43825273f25397842a78884320b193ee095ee6ac30608bd16020808401919091527317260767d4f749bef49e0de0f17cd361e798383b838501527335815eac9e6e48e8caf1f5160f9e066a5e179d5860608085019190915284518084018652690fe1c215e8f838e0000081526954b40b1f852bda0000008184015269152d02c7e14af6800000818701526969e10de76676d0800000818301528551938401865260008085529284018390529483018290526361ce5253908301529194509192505b6004811015610c6f57818160048110610abd57fe5b602002015167ffffffffffffffff161515610b8957600054600160a060020a03166340c10f19858360048110610aef57fe5b6020020151858460048110610b0057fe5b60200201516040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b158015610b5757600080fd5b505af1158015610b6b573d6000803e3d6000fd5b505050506040513d6020811015610b8157600080fd5b50610c679050565b600054600160a060020a0316630bb2cd6b858360048110610ba657fe5b6020020151858460048110610bb757fe5b6020020151858560048110610bc857fe5b60200201516040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a031681526020018381526020018267ffffffffffffffff1667ffffffffffffffff1681526020019350505050602060405180830381600087803b158015610c3a57600080fd5b505af1158015610c4e573d6000803e3d6000fd5b505050506040513d6020811015610c6457600080fd5b50505b600101610aa8565b610c8c73956912b455240ac5811f8eda585a9176999e1f4f610cca565b6040517f5daa87a0e9463431830481fd4b6e3403442dfb9a12b9c07597e9f61d50b633c890600090a150505050565b6000610cc56105d0565b905090565b600654600160a060020a03163314610ce157600080fd5b610cea81610f2d565b50565b600954600160a060020a031681565b600054600160a060020a031681565b670de0b6b3a7640000341015610d2057600080fd5b678ac7230489e80000341115610d3557600080fd5b610d3f8282610fab565b5050565b6000610d72670de0b6b3a7640000610d6660025485610fd690919063ffffffff16565b9063ffffffff610fff16565b92915050565b81810182811015610d7257fe5b610d3f8282611014565b600954604080517ff340fa010000000000000000000000000000000000000000000000000000000081523360048201529051600160a060020a039092169163f340fa01913491602480830192600092919082900301818588803b158015610df557600080fd5b505af1158015610e09573d6000803e3d6000fd5b5050505050565b600082821115610e1c57fe5b50900390565b6000610e2c6110bd565b80610cc55750610cc561074f565b610e42610806565b15610eb757600960009054906101000a9004600160a060020a0316600160a060020a03166343d726d66040518163ffffffff1660e060020a028152600401600060405180830381600087803b158015610e9a57600080fd5b505af1158015610eae573d6000803e3d6000fd5b50505050610f23565b600960009054906101000a9004600160a060020a0316600160a060020a0316638c52dc416040518163ffffffff1660e060020a028152600401600060405180830381600087803b158015610f0a57600080fd5b505af1158015610f1e573d6000803e3d6000fd5b505050505b610f2b6110c5565b565b600160a060020a0381161515610f4257600080fd5b600654604051600160a060020a038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36006805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b610fb582826111b3565b600754600354610fcb908363ffffffff610d7816565b1115610d3f57600080fd5b6000821515610fe757506000610d72565b50818102818382811515610ff757fe5b0414610d7257fe5b6000818381151561100c57fe5b049392505050565b60008054604080517f40c10f19000000000000000000000000000000000000000000000000000000008152600160a060020a03868116600483015260248201869052915191909216926340c10f1992604480820193602093909283900390910190829087803b15801561108657600080fd5b505af115801561109a573d6000803e3d6000fd5b505050506040513d60208110156110b057600080fd5b50511515610d3f57600080fd5b600554421190565b6110cd610f2b565b60008054604080517f3f4ba83a0000000000000000000000000000000000000000000000000000000081529051600160a060020a0390921692633f4ba83a9260048084019382900301818387803b15801561112757600080fd5b505af115801561113b573d6000803e3d6000fd5b5050505060008054604080517ff2fde38b00000000000000000000000000000000000000000000000000000000815273956912b455240ac5811f8eda585a9176999e1f4f60048201529051600160a060020a039092169263f2fde38b9260248084019382900301818387803b1580156108bf57600080fd5b60045442101580156111c757506005544211155b15156111d257600080fd5b610d3f8282600160a060020a03821615156111ec57600080fd5b801515610d3f57600080fd5b60806040519081016040528060049060208202803883395091929150505600a165627a7a723058201c2adcda8450dfac98c6873e6715d42e0d71c2590cf5f2f826a3628f746bcc950029608060405234801561001057600080fd5b50604051602080610690833981016040525160008054600160a060020a03191633179055600160a060020a038116151561004957600080fd5b60028054600160a060020a031916600160a060020a03929092169190911760a060020a60ff021916905561060e806100826000396000f3006080604052600436106100a35763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166343d726d681146100a8578063521eb273146100bf578063715018a6146100f05780638c52dc41146101055780638da5cb5b1461011a578063c19d93fb1461012f578063cb13cddb14610168578063f2fde38b1461019b578063f340fa01146101bc578063fa89401a146101d0575b600080fd5b3480156100b457600080fd5b506100bd6101f1565b005b3480156100cb57600080fd5b506100d46102c7565b60408051600160a060020a039092168252519081900360200190f35b3480156100fc57600080fd5b506100bd6102d6565b34801561011157600080fd5b506100bd610342565b34801561012657600080fd5b506100d46103cc565b34801561013b57600080fd5b506101446103db565b6040518082600281111561015457fe5b60ff16815260200191505060405180910390f35b34801561017457600080fd5b50610189600160a060020a03600435166103eb565b60408051918252519081900360200190f35b3480156101a757600080fd5b506100bd600160a060020a03600435166103fd565b6100bd600160a060020a036004351661041d565b3480156101dc57600080fd5b506100bd600160a060020a036004351661049d565b600054600160a060020a0316331461020857600080fd5b60006002805460a060020a900460ff169081111561022257fe5b1461022c57600080fd5b6002805474ff00000000000000000000000000000000000000001916740200000000000000000000000000000000000000001790556040517f1cdde67b72a90f19919ac732a437ac2f7a10fc128d28c2a6e525d89ce5cd9d3a90600090a1600254604051600160a060020a0390911690303180156108fc02916000818181858888f193505050501580156102c4573d6000803e3d6000fd5b50565b600254600160a060020a031681565b600054600160a060020a031633146102ed57600080fd5b60008054604051600160a060020a03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a26000805473ffffffffffffffffffffffffffffffffffffffff19169055565b600054600160a060020a0316331461035957600080fd5b60006002805460a060020a900460ff169081111561037357fe5b1461037d57600080fd5b6002805474ff0000000000000000000000000000000000000000191660a060020a1790556040517f599d8e5a83cffb867d051598c4d70e805d59802d8081c1c7d6dffc5b6aca2b8990600090a1565b600054600160a060020a031681565b60025460a060020a900460ff1681565b60016020526000908152604090205481565b600054600160a060020a0316331461041457600080fd5b6102c481610552565b600054600160a060020a0316331461043457600080fd5b60006002805460a060020a900460ff169081111561044e57fe5b1461045857600080fd5b600160a060020a038116600090815260016020526040902054610481903463ffffffff6105cf16565b600160a060020a03909116600090815260016020526040902055565b600060016002805460a060020a900460ff16908111156104b957fe5b146104c357600080fd5b50600160a060020a038116600081815260016020526040808220805490839055905190929183156108fc02918491818181858888f1935050505015801561050e573d6000803e3d6000fd5b50604080518281529051600160a060020a038416917fd7dee2702d63ad89917b6a4da9981c90c4d24f8c2bdfd64c604ecae57d8d0651919081900360200190a25050565b600160a060020a038116151561056757600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b818101828110156105dc57fe5b929150505600a165627a7a72305820bedcec8e66341ed53ef3c6633e9ae6bcf0911b003b6577021cf5655cc204860b0029000000000000000000000000f6f11484d32ff8cff04bcdd92a94da22e5635eec
Deployed Bytecode
0x6080604052600436106101915763ffffffff60e060020a6000350416623fd35a811461019c5780631515bc2b146101c5578063158ef93e146101da57806318821400146101ef5780632a905318146102795780632c4e722e1461028e5780633197cbb6146102b5578063355274ea146102ca57806340193883146102df5780634042b66f146102f457806344691f7e146103095780634b6753bc1461031e5780634bb278f3146103335780634f93594514610348578063521eb2731461035d578063567800851461038e5780635b7f415c146103a3578063715018a6146103b8578063726a431a146103cd57806378e97925146103e25780637d3d6522146103f75780638d4e40831461040c5780638da5cb5b14610421578063a9aad58c1461019c578063b5545a3c14610436578063b7a8807c1461044b578063cf3b196714610460578063ddaa26ad1461048b578063e1c7392a146104a0578063ec8ac4d8146104b5578063ecb70fb7146104c9578063f2fde38b146104de578063fbfa77cf146104ff578063fc0c546a14610514575b61019a33610529565b005b3480156101a857600080fd5b506101b16105cb565b604080519115158252519081900360200190f35b3480156101d157600080fd5b506101b16105d0565b3480156101e657600080fd5b506101b161060c565b3480156101fb57600080fd5b5061020461061c565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561023e578181015183820152602001610226565b50505050905090810190601f16801561026b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561028557600080fd5b50610204610653565b34801561029a57600080fd5b506102a361068a565b60408051918252519081900360200190f35b3480156102c157600080fd5b506102a3610690565b3480156102d657600080fd5b506102a3610696565b3480156102eb57600080fd5b506102a361069c565b34801561030057600080fd5b506102a36106a2565b34801561031557600080fd5b506101b16106a8565b34801561032a57600080fd5b506102a36106b1565b34801561033f57600080fd5b5061019a6106b7565b34801561035457600080fd5b506101b161074f565b34801561036957600080fd5b5061037261075a565b60408051600160a060020a039092168252519081900360200190f35b34801561039a57600080fd5b506102a3610769565b3480156103af57600080fd5b506102a3610775565b3480156103c457600080fd5b5061019a61077a565b3480156103d957600080fd5b506103726107e8565b3480156103ee57600080fd5b506102a3610800565b34801561040357600080fd5b506101b1610806565b34801561041857600080fd5b506101b1610811565b34801561042d57600080fd5b50610372610821565b34801561044257600080fd5b5061019a610830565b34801561045757600080fd5b506102a36108d9565b34801561046c57600080fd5b50610475610775565b6040805160ff9092168252519081900360200190f35b34801561049757600080fd5b506102a36108df565b3480156104ac57600080fd5b5061019a6108e7565b61019a600160a060020a0360043516610529565b3480156104d557600080fd5b506101b1610cbb565b3480156104ea57600080fd5b5061019a600160a060020a0360043516610cca565b34801561050b57600080fd5b50610372610ced565b34801561052057600080fd5b50610372610cfc565b3460006105368383610d0b565b61053f82610d43565b600354909150610555908363ffffffff610d7816565b6003556105628382610d85565b60408051838152602081018390528151600160a060020a0386169233927f623b3804fa71d67900d064613da8f94b9617215ee90799290593e1745087ad18929081900390910190a36105b48383610d3f565b6105bc610d8f565b6105c68383610d3f565b505050565b600181565b600080670de0b6b3a76400006105f3600354600754610e1090919063ffffffff16565b1090506105fe610e22565b806106065750805b91505090565b60095460a060020a900460ff1681565b60408051808201909152600581527f4873696d61000000000000000000000000000000000000000000000000000000602082015281565b60408051808201909152600481527f53494d4100000000000000000000000000000000000000000000000000000000602082015281565b60025481565b60055490565b60075481565b60085481565b60035481565b60045442101590565b60055481565b600654600160a060020a031633146106ce57600080fd5b60065460a060020a900460ff16156106e557600080fd5b6106ed6105d0565b15156106f857600080fd5b610700610e3a565b6040517f6823b073d48d6e3a7d385eeb601452d680e74bb46afe3255a7d778f3a9b1768190600090a16006805474ff0000000000000000000000000000000000000000191660a060020a179055565b600754600354101590565b600154600160a060020a031681565b670de0b6b3a764000081565b601281565b600654600160a060020a0316331461079157600080fd5b600654604051600160a060020a03909116907ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482090600090a26006805473ffffffffffffffffffffffffffffffffffffffff19169055565b73956912b455240ac5811f8eda585a9176999e1f4f81565b60045490565b600854600354101590565b60065460a060020a900460ff1681565b600654600160a060020a031681565b60065460a060020a900460ff16151561084857600080fd5b610850610806565b1561085a57600080fd5b600954604080517ffa89401a0000000000000000000000000000000000000000000000000000000081523360048201529051600160a060020a039092169163fa89401a9160248082019260009290919082900301818387803b1580156108bf57600080fd5b505af11580156108d3573d6000803e3d6000fd5b50505050565b60045481565b63612ebe8481565b6108ef6111f8565b6108f76111f8565b6108ff6111f8565b600654600090600160a060020a0316331461091957600080fd5b60095460a060020a900460ff161561093057600080fd5b6009805474ff0000000000000000000000000000000000000000191660a060020a17905560008054604080517f8456cb590000000000000000000000000000000000000000000000000000000081529051600160a060020a0390921692638456cb599260048084019382900301818387803b1580156109ae57600080fd5b505af11580156109c2573d6000803e3d6000fd5b505050505050604080516080818101835273b60ddcc838965200f95ac213430e3d6ebbb0bf43825273f25397842a78884320b193ee095ee6ac30608bd16020808401919091527317260767d4f749bef49e0de0f17cd361e798383b838501527335815eac9e6e48e8caf1f5160f9e066a5e179d5860608085019190915284518084018652690fe1c215e8f838e0000081526954b40b1f852bda0000008184015269152d02c7e14af6800000818701526969e10de76676d0800000818301528551938401865260008085529284018390529483018290526361ce5253908301529194509192505b6004811015610c6f57818160048110610abd57fe5b602002015167ffffffffffffffff161515610b8957600054600160a060020a03166340c10f19858360048110610aef57fe5b6020020151858460048110610b0057fe5b60200201516040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b158015610b5757600080fd5b505af1158015610b6b573d6000803e3d6000fd5b505050506040513d6020811015610b8157600080fd5b50610c679050565b600054600160a060020a0316630bb2cd6b858360048110610ba657fe5b6020020151858460048110610bb757fe5b6020020151858560048110610bc857fe5b60200201516040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a031681526020018381526020018267ffffffffffffffff1667ffffffffffffffff1681526020019350505050602060405180830381600087803b158015610c3a57600080fd5b505af1158015610c4e573d6000803e3d6000fd5b505050506040513d6020811015610c6457600080fd5b50505b600101610aa8565b610c8c73956912b455240ac5811f8eda585a9176999e1f4f610cca565b6040517f5daa87a0e9463431830481fd4b6e3403442dfb9a12b9c07597e9f61d50b633c890600090a150505050565b6000610cc56105d0565b905090565b600654600160a060020a03163314610ce157600080fd5b610cea81610f2d565b50565b600954600160a060020a031681565b600054600160a060020a031681565b670de0b6b3a7640000341015610d2057600080fd5b678ac7230489e80000341115610d3557600080fd5b610d3f8282610fab565b5050565b6000610d72670de0b6b3a7640000610d6660025485610fd690919063ffffffff16565b9063ffffffff610fff16565b92915050565b81810182811015610d7257fe5b610d3f8282611014565b600954604080517ff340fa010000000000000000000000000000000000000000000000000000000081523360048201529051600160a060020a039092169163f340fa01913491602480830192600092919082900301818588803b158015610df557600080fd5b505af1158015610e09573d6000803e3d6000fd5b5050505050565b600082821115610e1c57fe5b50900390565b6000610e2c6110bd565b80610cc55750610cc561074f565b610e42610806565b15610eb757600960009054906101000a9004600160a060020a0316600160a060020a03166343d726d66040518163ffffffff1660e060020a028152600401600060405180830381600087803b158015610e9a57600080fd5b505af1158015610eae573d6000803e3d6000fd5b50505050610f23565b600960009054906101000a9004600160a060020a0316600160a060020a0316638c52dc416040518163ffffffff1660e060020a028152600401600060405180830381600087803b158015610f0a57600080fd5b505af1158015610f1e573d6000803e3d6000fd5b505050505b610f2b6110c5565b565b600160a060020a0381161515610f4257600080fd5b600654604051600160a060020a038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36006805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b610fb582826111b3565b600754600354610fcb908363ffffffff610d7816565b1115610d3f57600080fd5b6000821515610fe757506000610d72565b50818102818382811515610ff757fe5b0414610d7257fe5b6000818381151561100c57fe5b049392505050565b60008054604080517f40c10f19000000000000000000000000000000000000000000000000000000008152600160a060020a03868116600483015260248201869052915191909216926340c10f1992604480820193602093909283900390910190829087803b15801561108657600080fd5b505af115801561109a573d6000803e3d6000fd5b505050506040513d60208110156110b057600080fd5b50511515610d3f57600080fd5b600554421190565b6110cd610f2b565b60008054604080517f3f4ba83a0000000000000000000000000000000000000000000000000000000081529051600160a060020a0390921692633f4ba83a9260048084019382900301818387803b15801561112757600080fd5b505af115801561113b573d6000803e3d6000fd5b5050505060008054604080517ff2fde38b00000000000000000000000000000000000000000000000000000000815273956912b455240ac5811f8eda585a9176999e1f4f60048201529051600160a060020a039092169263f2fde38b9260248084019382900301818387803b1580156108bf57600080fd5b60045442101580156111c757506005544211155b15156111d257600080fd5b610d3f8282600160a060020a03821615156111ec57600080fd5b801515610d3f57600080fd5b60806040519081016040528060049060208202803883395091929150505600a165627a7a723058201c2adcda8450dfac98c6873e6715d42e0d71c2590cf5f2f826a3628f746bcc950029
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000f6f11484d32ff8cff04bcdd92a94da22e5635eec
-----Decoded View---------------
Arg [0] : _token (address): 0xf6f11484d32ff8Cff04bcdd92a94Da22e5635eec
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000f6f11484d32ff8cff04bcdd92a94da22e5635eec
Deployed Bytecode Sourcemap
35976:2566:0:-;;;;;;;;;-1:-1:-1;;;35976:2566:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5312:21;5322:10;5312:9;:21::i;:::-;35976:2566;30588:44;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30588:44:0;;;;;;;;;;;;;;;;;;;;;;37828:176;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37828:176:0;;;;36210:31;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36210:31:0;;;;30296:43;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30296:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;30296:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30346:44;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30346:44:0;;;;4183:19;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4183:19:0;;;;;;;;;;;;;;;;;;;;34943:86;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34943:86:0;;;;30816:18;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30816:18:0;;;;33440:19;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33440:19:0;;;;4236:24;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4236:24:0;;;;34746:93;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34746:93:0;;;;10651:26;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10651:26:0;;;;12534:171;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12534:171:0;;;;31182:85;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31182:85:0;;;;3875:21;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3875:21:0;;;;;;;;-1:-1:-1;;;;;3875:21:0;;;;;;;;;;;;;;30219:68;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30219:68:0;;;;30118:40;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30118:40:0;;;;9728:114;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9728:114:0;;;;30438:80;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30438:80:0;;;;34847:88;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34847:88:0;;;;34113:87;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34113:87:0;;;;12324:31;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12324:31:0;;;;9110:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9110:20:0;;;;33868:126;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33868:126:0;;;;10620:26;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10620:26:0;;;;30165:47;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30165:47:0;;;;;;;;;;;;;;;;;;;;;;;30531:44;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30531:44:0;;;;36610:1065;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36610:1065:0;;;;5481:600;;-1:-1:-1;;;;;5481:600:0;;;;;35152:84;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35152:84:0;;;;10010:105;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;10010:105:0;-1:-1:-1;;;;;10010:105:0;;;;;33531:24;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33531:24:0;;;;3810:18;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3810:18:0;;;;5481:600;5566:9;5546:17;5582:45;5603:12;5566:9;5582:20;:45::i;:::-;5698:26;5714:9;5698:15;:26::i;:::-;5766:9;;5681:43;;-1:-1:-1;5766:24:0;;5780:9;5766:24;:13;:24;:::i;:::-;5754:9;:36;5799:38;5816:12;5830:6;5799:16;:38::i;:::-;5849:93;;;;;;;;;;;;;;-1:-1:-1;;;;;5849:93:0;;;5871:10;;5849:93;;;;;;;;;;;5951:47;5974:12;5988:9;5951:22;:47::i;:::-;6007:15;:13;:15::i;:::-;6029:46;6051:12;6065:9;6029:21;:46::i;:::-;5481:600;;;:::o;30588:44::-;30628:4;30588:44;:::o;37828:176::-;37870:4;37887:16;37927:19;37906:18;37914:9;;37906:3;;:7;;:18;;;;:::i;:::-;:40;37887:59;;37964:17;:15;:17::i;:::-;:32;;;;37985:11;37964:32;37957:39;;37828:176;;:::o;36210:31::-;;;-1:-1:-1;;;36210:31:0;;;;;:::o;30296:43::-;;;;;;;;;;;;;;;;;;;:::o;30346:44::-;;;;;;;;;;;;;;;;;;;:::o;4183:19::-;;;;:::o;34943:86::-;35010:11;;34943:86;:::o;30816:18::-;;;;:::o;33440:19::-;;;;:::o;4236:24::-;;;;:::o;34746:93::-;34820:11;;34813:3;:18;;34746:93;:::o;10651:26::-;;;;:::o;12534:171::-;9613:5;;-1:-1:-1;;;;;9613:5:0;9599:10;:19;9591:28;;;;;;12587:11;;-1:-1:-1;;;12587:11:0;;;;12586:12;12578:21;;;;;;12614:11;:9;:11::i;:::-;12606:20;;;;;;;;12635:14;:12;:14::i;:::-;12661:11;;;;;;;12681;:18;;-1:-1:-1;;12681:18:0;-1:-1:-1;;;12681:18:0;;;12534:171::o;31182:85::-;31258:3;;31245:9;;:16;;31182:85;:::o;3875:21::-;;;-1:-1:-1;;;;;3875:21:0;;:::o;30219:68::-;30267:20;30219:68;:::o;30118:40::-;30156:2;30118:40;:::o;9728:114::-;9613:5;;-1:-1:-1;;;;;9613:5:0;9599:10;:19;9591:28;;;;;;9805:5;;9786:25;;-1:-1:-1;;;;;9805:5:0;;;;9786:25;;9805:5;;9786:25;9818:5;:18;;-1:-1:-1;;9818:18:0;;;9728:114::o;30438:80::-;30476:42;30438:80;:::o;34847:88::-;34916:11;;34847:88;:::o;34113:87::-;34190:4;;34177:9;;:17;;34113:87;:::o;12324:31::-;;;-1:-1:-1;;;12324:31:0;;;;;:::o;9110:20::-;;;-1:-1:-1;;;;;9110:20:0;;:::o;33868:126::-;33913:11;;-1:-1:-1;;;33913:11:0;;;;33905:20;;;;;;;;33941:13;:11;:13::i;:::-;33940:14;33932:23;;;;;;33964:5;;:24;;;;;;33977:10;33964:24;;;;;;-1:-1:-1;;;;;33964:5:0;;;;:12;;:24;;;;;:5;;:24;;;;;;;;:5;;:24;;;5:2:-1;;;;30:1;27;20:12;5:2;33964:24:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;33964:24:0;;;;33868:126::o;10620:26::-;;;;:::o;30531:44::-;30565:10;30531:44;:::o;36610:1065::-;36802:27;;:::i;:::-;37052:22;;:::i;:::-;37212:24;;:::i;:::-;9613:5;;37307:6;;-1:-1:-1;;;;;9613:5:0;9599:10;:19;9591:28;;;;;;36663:11;;-1:-1:-1;;;36663:11:0;;;;36662:12;36654:21;;;;;;36686:11;:18;;-1:-1:-1;;36686:18:0;-1:-1:-1;;;36686:18:0;;;36754:5;;;36744:24;;;;;;;;-1:-1:-1;;;;;36754:5:0;;;;36744:22;;:24;;;;;;;;;;36754:5;;36744:24;;;5:2:-1;;;;30:1;27;20:12;5:2;36744:24:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;36744:24:0;;;;-1:-1:-1;;36802:239:0;;;;;;;;;36841:42;36802:239;;36893:42;36802:239;;;;;;;;36945:42;36802:239;;;;36997:42;36802:239;;;;;;;;37052:149;;;;;;;37083:23;37052:149;;37113:24;37052:149;;;;37144:24;37052:149;;;;37175:24;37052:149;;;;37212:77;;;;;;;-1:-1:-1;37212:77:0;;;;;;;;;;;;;;;37277:10;37212:77;;;;36802:239;;-1:-1:-1;37052:149:0;;-1:-1:-1;37302:282:0;37323:16;37319:1;:20;37302:282;;;37365:7;37373:1;37365:10;;;;;;;;;;;:15;;;37361:212;;;37411:5;;-1:-1:-1;;;;;37411:5:0;37401:21;37423:9;37433:1;37423:12;;;;;;;;;;;37437:7;37445:1;37437:10;;;;;;;;;;;37401:47;;;;;-1:-1:-1;;;37401:47:0;;;;;;;-1:-1:-1;;;;;37401:47:0;-1:-1:-1;;;;;37401:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37401:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;37401:47:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;37361:212:0;;-1:-1:-1;37361:212:0;;37499:5;;-1:-1:-1;;;;;37499:5:0;37489:30;37520:9;37530:1;37520:12;;;;;;;;;;;37534:7;37542:1;37534:10;;;;;;;;;;;37546:7;37554:1;37546:10;;;;;;;;;;;37489:68;;;;;-1:-1:-1;;;37489:68:0;;;;;;;-1:-1:-1;;;;;37489:68:0;-1:-1:-1;;;;;37489:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37489:68:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;37489:68:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;37361:212:0;37341:3;;37302:282;;;37606:30;30476:42;37606:17;:30::i;:::-;37654:13;;;;;;;36610:1065;;;;:::o;35152:84::-;35193:4;35217:11;:9;:11::i;:::-;35210:18;;35152:84;:::o;10010:105::-;9613:5;;-1:-1:-1;;;;;9613:5:0;9599:10;:19;9591:28;;;;;;10080:29;10099:9;10080:18;:29::i;:::-;10010:105;:::o;33531:24::-;;;-1:-1:-1;;;;;33531:24:0;;:::o;3810:18::-;;;-1:-1:-1;;;;;3810:18:0;;:::o;38197:336::-;38359:19;38346:9;:32;;38338:41;;;;;;38431:20;38418:9;:33;;38410:42;;;;;;38473:52;38500:12;38514:10;38473:26;:52::i;:::-;38197:336;;:::o;35815:150::-;35892:7;35924:33;35949:7;35924:20;35939:4;;35924:10;:14;;:20;;;;:::i;:::-;:24;:33;:24;:33;:::i;:::-;35917:40;35815:150;-1:-1:-1;;35815:150:0:o;2882:127::-;2962:5;;;2981:6;;;;2974:14;;;7800:157;7909:42;7924:12;7938;7909:14;:42::i;34550:89::-;34591:5;;:42;;;;;;34622:10;34591:42;;;;;;-1:-1:-1;;;;;34591:5:0;;;;:13;;34611:9;;34591:42;;;;;:5;;:42;;;;;;;34611:9;34591:5;:42;;;5:2:-1;;;;30:1;27;20:12;5:2;34591:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34591:42:0;;;;;34550:89::o;2702:113::-;2760:7;2783:6;;;;2776:14;;;;-1:-1:-1;2804:5:0;;;2702:113::o;35037:107::-;35079:4;35103:17;:15;:17::i;:::-;:33;;;;35124:12;:10;:12::i;34291:167::-;34335:13;:11;:13::i;:::-;34331:93;;;34359:5;;;;;;;;;-1:-1:-1;;;;;34359:5:0;-1:-1:-1;;;;;34359:11:0;;:13;;;;;-1:-1:-1;;;34359:13:0;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34359:13:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34359:13:0;;;;34331:93;;;34395:5;;;;;;;;;-1:-1:-1;;;;;34395:5:0;-1:-1:-1;;;;;34395:19:0;;:21;;;;;-1:-1:-1;;;34395:21:0;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34395:21:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34395:21:0;;;;34331:93;34432:20;:18;:20::i;:::-;34291:167::o;10256:175::-;-1:-1:-1;;;;;10327:23:0;;;;10319:32;;;;;;10384:5;;10363:38;;-1:-1:-1;;;;;10363:38:0;;;;10384:5;;10363:38;;10384:5;;10363:38;10408:5;:17;;-1:-1:-1;;10408:17:0;-1:-1:-1;;;;;10408:17:0;;;;;;;;;;10256:175::o;31460:217::-;31571:52;31598:12;31612:10;31571:26;:52::i;:::-;31667:3;;31638:9;;:25;;31652:10;31638:25;:13;:25;:::i;:::-;:32;;31630:41;;;;;1837:384;1895:9;2125:6;;2121:37;;;-1:-1:-1;2149:1:0;2142:8;;2121:37;-1:-1:-1;2170:5:0;;;2174:1;2170;:5;2189;;;;;;;;:10;2182:18;;;2308:277;2366:7;2578:1;2574;:5;;;;;;;;;2308:277;-1:-1:-1;;;2308:277:0:o;32102:175::-;32231:5;;;32217:53;;;;;;-1:-1:-1;;;;;32217:53:0;;;;;;;;;;;;;;;32231:5;;;;;32217:25;;:53;;;;;;;;;;;;;;;;;;32231:5;32217:53;;;5:2:-1;;;;30:1;27;20:12;5:2;32217:53:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32217:53:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;32217:53:0;32209:62;;;;;;;11557:156;11696:11;;11678:15;:29;11557:156;:::o;35244:314::-;35288:20;:18;:20::i;:::-;35358:5;;;35348:26;;;;;;;;-1:-1:-1;;;;;35358:5:0;;;;35348:24;;:26;;;;;;;;;;35358:5;;35348:26;;;5:2:-1;;;;30:1;27;20:12;5:2;35348:26:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35348:26:0;;;;35513:5;;;35505:45;;;;;;30476:42;35505:45;;;;;;-1:-1:-1;;;;;35513:5:0;;;;35505:32;;:45;;;;;;;;;;35513:5;;35505:45;;;5:2:-1;;;;30:1;27;20:12;11902:188:0;10865:11;;10846:15;:30;;:64;;;;;10899:11;;10880:15;:30;;10846:64;10838:73;;;;;;;;12032:52;12059:12;12073:10;-1:-1:-1;;;;;6635:26:0;;;;6627:35;;;;;;6677:15;;;6669:24;;;;;35976:2566;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;-1:-1;35976:2566:0;;;-1:-1:-1;;35976:2566:0:o
Swarm Source
bzzr://bedcec8e66341ed53ef3c6633e9ae6bcf0911b003b6577021cf5655cc204860b
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.