More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 1,295 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer Ownersh... | 13243112 | 1212 days ago | IN | 0 ETH | 0.00169833 | ||||
Transfer | 12664571 | 1302 days ago | IN | 0.24928541 ETH | 0.000252 | ||||
Transfer | 12474054 | 1332 days ago | IN | 0.08425879 ETH | 0.00570393 | ||||
Transfer | 12460934 | 1334 days ago | IN | 0.2 ETH | 0.01514388 | ||||
Transfer | 12460932 | 1334 days ago | IN | 0.49 ETH | 0.01041141 | ||||
Transfer | 12460814 | 1334 days ago | IN | 0.15290214 ETH | 0.010989 | ||||
Transfer | 12460797 | 1334 days ago | IN | 0.16389114 ETH | 0.010791 | ||||
Transfer | 12460653 | 1334 days ago | IN | 0.29157154 ETH | 0.00525 | ||||
Transfer | 12460642 | 1334 days ago | IN | 0.29157154 ETH | 0.00336 | ||||
Transfer | 12460630 | 1334 days ago | IN | 0.29163786 ETH | 0.00375 | ||||
Transfer | 12460621 | 1334 days ago | IN | 0.29163786 ETH | 0.002793 | ||||
Transfer | 12460612 | 1334 days ago | IN | 0 ETH | 0.002793 | ||||
Transfer | 12460598 | 1334 days ago | IN | 0.29227374 ETH | 0.002562 | ||||
Transfer | 12460544 | 1334 days ago | IN | 0.29446147 ETH | 0.002436 | ||||
Transfer | 12460024 | 1334 days ago | IN | 0.1 ETH | 0.01892985 | ||||
Transfer | 12460012 | 1334 days ago | IN | 0 ETH | 0.00189024 | ||||
Transfer | 12459792 | 1334 days ago | IN | 0.08 ETH | 0.01514388 | ||||
Transfer | 12459737 | 1334 days ago | IN | 0.09 ETH | 0.002289 | ||||
Transfer | 12459716 | 1334 days ago | IN | 0.09 ETH | 0.002163 | ||||
Transfer | 12459661 | 1334 days ago | IN | 0.429 ETH | 0.01048788 | ||||
Transfer | 12459641 | 1334 days ago | IN | 0.12052 ETH | 0.01817265 | ||||
Transfer | 12459342 | 1334 days ago | IN | 0.15650005 ETH | 0.01060071 | ||||
Transfer | 12459264 | 1334 days ago | IN | 0.33 ETH | 0.01640587 | ||||
Transfer | 12459228 | 1334 days ago | IN | 0.145 ETH | 0.01539627 | ||||
Transfer | 12459198 | 1334 days ago | IN | 0.25203225 ETH | 0.01413428 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
12474054 | 1332 days ago | 0.08425879 ETH | ||||
12460934 | 1334 days ago | 0.2 ETH | ||||
12460932 | 1334 days ago | 0.49 ETH | ||||
12460024 | 1334 days ago | 0.1 ETH | ||||
12459792 | 1334 days ago | 0.08 ETH | ||||
12459661 | 1334 days ago | 0.429 ETH | ||||
12459641 | 1334 days ago | 0.12052 ETH | ||||
12459342 | 1334 days ago | 0.15650005 ETH | ||||
12459264 | 1334 days ago | 0.33 ETH | ||||
12459228 | 1334 days ago | 0.145 ETH | ||||
12459198 | 1334 days ago | 0.25203225 ETH | ||||
12458603 | 1334 days ago | 0.4 ETH | ||||
12458474 | 1334 days ago | 0.1013 ETH | ||||
12457960 | 1334 days ago | 0.07 ETH | ||||
12457480 | 1334 days ago | 0.9 ETH | ||||
12457367 | 1334 days ago | 3.98 ETH | ||||
12457178 | 1334 days ago | 0.69 ETH | ||||
12454000 | 1335 days ago | 0.01 ETH | ||||
12452625 | 1335 days ago | 0.15 ETH | ||||
12451913 | 1335 days ago | 0.270045 ETH | ||||
12451661 | 1335 days ago | 0.1 ETH | ||||
12445985 | 1336 days ago | 0.01791662 ETH | ||||
12444453 | 1336 days ago | 0.06175354 ETH | ||||
12444039 | 1336 days ago | 0.13 ETH | ||||
12443721 | 1336 days ago | 0.265 ETH |
Loading...
Loading
Contract Name:
ICO
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-08-31 */ /** *Submitted for verification at Etherscan.io on 2020-08-31 */ pragma solidity ^0.6.12; // SPDX-License-Identifier: GPL-3.0 /** * @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. */ constructor() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner, "Not authorized operation"); _; } /** * @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 { require(newOwner != address(0), "Address shouldn't be zero"); emit OwnershipTransferred(owner, newOwner); owner = newOwner; } } /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, "SafeMath: subtraction overflow"); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0, "SafeMath: division by zero"); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b != 0, "SafeMath: modulo by zero"); return a % b; } } interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address _owner) external view returns (uint256); event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to `approve`. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @dev Simple ERC20 Token example, with mintable token creation only during the deployement of the token contract */ contract TokenContract is Ownable{ using SafeMath for uint256; string public name; string public symbol; uint8 public decimals; uint256 public totalSupply; address public tokenOwner; address private ico; mapping(address => uint256) balances; mapping (address => mapping (address => uint256)) internal allowed; mapping(address => bool) public vestedlist; event SetICO(address indexed _ico); event Mint(address indexed to, uint256 amount); event MintFinished(); event UnlockToken(); event LockToken(); event Burn(); event Approval(address indexed owner, address indexed spender, uint256 value); event Transfer(address indexed from, address indexed to, uint256 value); event addedToVestedlist(address indexed _vestedAddress); event removedFromVestedlist(address indexed _vestedAddress); bool public mintingFinished = false; bool public locked = true; modifier canMint() { require(!mintingFinished); _; } modifier canTransfer() { require(!locked || msg.sender == owner || msg.sender == ico); _; } modifier onlyAuthorized() { require(msg.sender == owner || msg.sender == ico); _; } constructor(string memory _name, string memory _symbol, uint8 _decimals) public { require (_decimals != 0); name = _name; symbol = _symbol; decimals = _decimals; totalSupply = 0; balances[msg.sender] = totalSupply; emit Transfer(address(0), msg.sender, totalSupply); } /** * @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) public onlyAuthorized canMint returns (bool) { totalSupply = totalSupply.add(_amount); balances[_to] = balances[_to].add(_amount); emit Mint(_to, _amount); emit Transfer(address(this), _to, _amount); return true; } /** * @dev Function to stop minting new tokens. * @return True if the operation was successful. */ function finishMinting() public onlyAuthorized canMint returns (bool) { mintingFinished = true; emit MintFinished(); return true; } /** * @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 canTransfer returns (bool) { require(_to != address(0)); require (!isVestedlisted(msg.sender)); require(_value <= balances[msg.sender]); require (msg.sender != address(this)); // SafeMath.sub will throw if there is not enough balance. balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); emit Transfer(msg.sender, _to, _value); return true; } function burn(address _who, uint256 _value) onlyAuthorized public returns (bool){ require(_who != address(0)); totalSupply = totalSupply.sub(_value); balances[_who] = balances[_who].sub(_value); emit Burn(); emit Transfer(_who, address(0), _value); return true; } function balanceOf(address _owner) public view returns (uint256 balance) { return balances[_owner]; } /** * @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 canTransfer 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; } function transferFromERC20Contract(address _to, uint256 _value) public onlyOwner returns (bool) { require(_to != address(0)); require(_value <= balances[address(this)]); balances[address(this)] = balances[address(this)].sub(_value); balances[_to] = balances[_to].add(_value); emit Transfer(address(this), _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) * @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) * @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; } function unlockToken() public onlyAuthorized returns (bool) { locked = false; emit UnlockToken(); return true; } function lockToken() public onlyAuthorized returns (bool) { locked = true; emit LockToken(); return true; } function setICO(address _icocontract) public onlyOwner returns (bool) { require(_icocontract != address(0)); ico = _icocontract; emit SetICO(_icocontract); return true; } /** * @dev Adds list of addresses to Vestedlist. Not overloaded due to limitations with truffle testing. * @param _vestedAddress Addresses to be added to the Vestedlist */ function addToVestedlist(address[] memory _vestedAddress) public onlyOwner { for (uint256 i = 0; i < _vestedAddress.length; i++) { if (vestedlist[_vestedAddress[i]]) continue; vestedlist[_vestedAddress[i]] = true; } } /** * @dev Removes single address from Vestedlist. * @param _vestedAddress Address to be removed to the Vestedlist */ function removeFromVestedlist(address[] memory _vestedAddress) public onlyOwner { for (uint256 i = 0; i < _vestedAddress.length; i++) { if (!vestedlist[_vestedAddress[i]]) continue; vestedlist[_vestedAddress[i]] = false; } } function isVestedlisted(address _vestedAddress) internal view returns (bool) { return (vestedlist[_vestedAddress]); } } /** * @title PullPayment * @dev Base contract supporting async send for pull payments. Inherit from this * contract and use asyncSend instead of send. */ contract PullPayment { using SafeMath for uint256; mapping (address => uint256) public payments; uint256 public totalPayments; /** * @dev Called by the payer to store the sent amount as credit to be pulled. * @param dest The destination address of the funds. * @param amount The amount to transfer. */ function asyncSend(address dest, uint256 amount) internal{ payments[dest] = payments[dest].add(amount); totalPayments = totalPayments.add(amount); } /** * @dev withdraw accumulated balance, called by payee. */ function withdrawPayments() internal{ address payable payee = msg.sender; uint256 payment = payments[payee]; require(payment != 0); require(address(this).balance >= payment); totalPayments = totalPayments.sub(payment); payments[payee] = 0; assert(payee.send(payment)); } } /** * @title ICO * @dev ICO is a base contract for managing a public token sale, * 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 a public sale. They are *not* intended to be modified / overriden. * The internal interface conforms the extensible and modifiable surface of public token sales. Override * the methods to add functionality. Consider using 'super' where appropiate to concatenate * behavior. */ contract ICO is PullPayment, Ownable { using SafeMath for uint256; // The token being sold TokenContract public token; // Address where funds are collected address payable public wallet; // Address to receive project tokens address public projectOwner; // Refund period if the ICO failed uint256 public refundPeriod; // How many token units a buyer gets per ETH/wei during Pre sale. The ETH price is fixed at 400$ during Pre sale. uint256 public Presalerate = 0.00025 ether; // 1 DCASH Token = 0.10 $ = 0.00025 Ether // How many token units a buyer gets per ETH/wei during ICO. The ETH price is fixed at 400$ during the ICO to guarantee the 30 % discount rate with the presale rate uint256 public Icorate = 0.000325 ether; // 1 DCASH Token = 0.13 $ = 0.000325 Ether // Amount of ETH/Wei raised during the ICO period uint256 public EthRaisedIco; // Amount of ETH/wei raised during the Pre sale uint256 public EthRaisedpresale; // Token amount distributed during the ICO period uint256 public tokenDistributed; // Token amount distributed during the Pre sale uint256 public tokenDistributedpresale; // investors part according to the whitepaper 60 % (50% ICO + 10% PreSale) uint256 public investors = 60; // Min purchase size of incoming ETH during pre sale period fixed at 2 ETH valued at 800 $ uint256 public constant MIN_PURCHASE_Presale = 2 ether; // Minimum purchase size of incoming ETH during ICO at 1$ uint256 public constant MIN_PURCHASE_ICO = 0.0025 ether; // Hardcap cap in Ether raised during Pre sale fixed at $ 200 000 for ETH valued at 440$ uint256 public PresaleSalemaxCap1 = 500 ether; // Softcap funding goal during ICO in Ether raised fixed at $ 200 000 for ETH valued at 400$. uint256 public ICOminCap = 500 ether; // Hardcap goal in Ether during ICO in Ether raised fixed at $ 13 000 000 for ETH valued at 400$ uint256 public ICOmaxCap = 32500 ether; // presale start/end bool public presale = true; // State of the ongoing sales Pre sale // ICO start/end bool public ico = false; // State of the ongoing sales ICO period // Balances in incoming Ether mapping(address => uint256) balances; // Bool to check that the Presalesale period is launch only one time bool public statepresale = false; // Bool to check that the ico is launch only one time bool public stateico = true; /** * 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); event NewContract(address indexed _from, address indexed _contract, string _type); /** * @param _wallet Address where collected funds will be forwarded to * @param _token Address of the ERC20 Token * @param _project Address where the Token of the project will be sent */ constructor(address payable _wallet, address _token, address _project) public { require(_wallet != address(0) && _token != address(0) && _project != address(0)); wallet = _wallet; token = TokenContract(_token); projectOwner = _project; } // ----------------------------------------- // ICO external interface // ----------------------------------------- /** * @dev fallback function ***DO NOT OVERRIDE*** */ receive() external payable { if (presale) { buypresaleTokens(msg.sender); } if (ico) { buyICOTokens(msg.sender); } } function buypresaleTokens (address _beneficiary) internal { require(_beneficiary != address(0) , "Failed the wallet is not allowed"); require(msg.value >= MIN_PURCHASE_Presale, "Failed the amount is not respecting the minimum deposit of Presale "); // Check that if investors sends more than the MIN_PURCHASE_Presale uint256 weiAmount = msg.value; // According to the whitepaper the backers who invested on Presale Sale have not possibilities to be refunded. Their ETH Balance is updated to zero value. balances[msg.sender] = 0; // calculate token amount to be created uint256 tokensTocreate = _getTokenpresaleAmount(weiAmount); _getRemainingTokenStock(_beneficiary, tokensTocreate); emit TokenPurchase(msg.sender, _beneficiary, weiAmount, tokensTocreate); // update state EthRaisedpresale = EthRaisedpresale.add(weiAmount); tokenDistributedpresale = tokenDistributedpresale.add(tokensTocreate); // If Presale Sale softcap is reached then the ether on the ICO contract are send to project wallet if (EthRaisedpresale <= PresaleSalemaxCap1) { wallet.transfer(address(this).balance); } else { //If PresaleSalemaxCap1 is reached then the presale is closed if (EthRaisedpresale >= PresaleSalemaxCap1) { presale = false; } } } /** * @dev low level token purchase ***DO NOT OVERRIDE*** * @param _beneficiary Address performing the token purchase */ function buyICOTokens(address _beneficiary) internal { require(_beneficiary != address(0) , "Failed the wallet is not allowed"); require(msg.value >= MIN_PURCHASE_ICO, "Failed the amount is not respecting the minimum deposit of ICO"); // Check that if investors sends more than the MIN_PURCHASE_ICO uint256 weiAmount = msg.value; // calculate token amount to be created uint256 tokensTocreate = _getTokenAmount(weiAmount); // Look if there is token on the contract if he is not create the amount of token _getRemainingTokenStock(_beneficiary, tokensTocreate); emit TokenPurchase(msg.sender, _beneficiary, weiAmount, tokensTocreate); // update state EthRaisedIco = EthRaisedIco.add(weiAmount); // Creation of the token and transfer to beneficiary tokenDistributed = tokenDistributed.add(tokensTocreate); // Update the balance of benificiary balances[_beneficiary] = balances[_beneficiary].add(weiAmount); uint256 totalEthRaised = EthRaisedIco.add(EthRaisedpresale); // If ICOminCap is reached then the ether on the ICO contract are send to project wallet if (totalEthRaised >= ICOminCap && totalEthRaised <= ICOmaxCap) { wallet.transfer(address(this).balance); } //If ICOmaxCap is reached then the ICO close if (totalEthRaised >= ICOmaxCap) { ico = false; } } /* ADMINISTRATIVE FUNCTIONS */ // Update the ETH ICO rate function updateETHIcoRate(uint256 _EtherAmount) public onlyOwner { Icorate = (_EtherAmount).mul(1 wei); } // Update the ETH PreSale rate function updateETHPresaleRate(uint256 _EtherAmount) public onlyOwner { Presalerate = (_EtherAmount).mul(1 wei); } // Update the ETH ICO MAX CAP function updateICOMaxcap(uint256 _EtherAmount) public onlyOwner { ICOmaxCap = (_EtherAmount).mul(1 wei); } // start presale function startpresale() public onlyOwner { require(statepresale && !ico,"Failed the Presale was already started or another sale is ongoing"); presale = true; statepresale = false; token.lockToken(); } // close Presale function closepresale() public onlyOwner { require(presale && !ico, "Failed it was already closed"); presale = false; } // start ICO function startICO() public onlyOwner { // bool to see if the ico has already been launched and presale is not in progress require(stateico && !presale, "Failed the ICO was already started or another salae is ongoing"); refundPeriod = now.add(2764800); // 32 days in seconds ==> 32*24*3600 ico = true; token.lockToken(); // Put the bool to False to block the start of this function again stateico = false; } // close ICO function closeICO() public onlyOwner { require(!presale && ico,"Failed it was already closed"); ico = false; } /* When ICO MIN_CAP is not reach the smart contract will be credited to make refund possible by backers * 1) backer call the "refund" function of the ICO contract * 2) backer call the "reimburse" function of the ICO contract to get a refund in ETH */ function refund() public { require(_refundPeriod()); require(balances[msg.sender] > 0); uint256 ethToSend = balances[msg.sender]; balances[msg.sender] = 0; asyncSend(msg.sender, ethToSend); } function reimburse() public { require(_refundPeriod()); withdrawPayments(); EthRaisedIco = address(this).balance; } // Function to pay out if the ICO is successful function WithdrawFunds() public onlyOwner { require(!ico && !presale, "Failed a sales is ongoing"); require(now > refundPeriod.add(7776000) || _isSuccessful(), "Failed the refund period is not finished"); // 90 days in seconds ==> 2*30*24*3600 if (_isSuccessful()) { uint256 _tokensProjectToSend = _getTokenAmountToDistribute(100 - investors); _getRemainingTokenStock(projectOwner, _tokensProjectToSend); token.unlockToken(); } else { wallet.transfer(EthRaisedIco); } // burn in case that there is some not distributed tokens on the contract if (token.balanceOf(address(this)) > 0) { uint256 totalDistributedToken = tokenDistributed; token.burn(address(this),totalDistributedToken); } } // ----------------------------------------- // Internal interface (extensible) // ----------------------------------------- /** * @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 */ // Calcul the amount of token the benifiaciary will get by buying during Presale function _getTokenpresaleAmount(uint256 _weiAmount) internal view returns (uint256) { uint256 _amountToSend = _weiAmount.div(Presalerate).mul(10 ** 10); return _amountToSend; } // Calcul the amount of token the benifiaciary will get by buying during Sale function _getTokenAmount(uint256 _weiAmount) internal view returns (uint256) { uint256 _amountToSend = _weiAmount.div(Icorate).mul(10 ** 10); return _amountToSend; } // Calcul the token amount to distribute in the forwardFunds for the project (team, bounty ...) function _getTokenAmountToDistribute(uint _part) internal view returns (uint256) { uint256 _delivredTokens = tokenDistributed.add(tokenDistributedpresale); return (_part.mul(_delivredTokens).div(investors)); } // verify the remaining token stock & deliver tokens to the beneficiary function _getRemainingTokenStock(address _beneficiary, uint256 _tokenAmount) internal { if (token.balanceOf(address(this)) >= _tokenAmount) { require(token.transfer(_beneficiary, _tokenAmount)); } else { if (token.balanceOf(address(this)) == 0) { require(token.mint(_beneficiary, _tokenAmount)); } else { uint256 remainingTokenTocreate = _tokenAmount.sub(token.balanceOf(address(this))); require(token.transfer(_beneficiary, token.balanceOf(address(this)))); require(token.mint(_beneficiary, remainingTokenTocreate)); } } } // Function to check the refund period function _refundPeriod() internal view returns (bool){ require(!_isSuccessful(),"Failed refund period is not opened"); return ((!ico && !stateico) || (now > refundPeriod)); } // check if the ico is successful function _isSuccessful() internal view returns (bool){ return (EthRaisedIco.add(EthRaisedpresale) >= ICOminCap); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address payable","name":"_wallet","type":"address"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_project","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_contract","type":"address"},{"indexed":false,"internalType":"string","name":"_type","type":"string"}],"name":"NewContract","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"purchaser","type":"address"},{"indexed":true,"internalType":"address","name":"beneficiary","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokenPurchase","type":"event"},{"inputs":[],"name":"EthRaisedIco","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EthRaisedpresale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ICOmaxCap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ICOminCap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Icorate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIN_PURCHASE_ICO","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIN_PURCHASE_Presale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PresaleSalemaxCap1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Presalerate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WithdrawFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"closeICO","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"closepresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ico","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"investors","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"payments","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"projectOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"refund","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"refundPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reimburse","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startICO","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startpresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stateico","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"statepresale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"contract TokenContract","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenDistributedpresale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalPayments","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_EtherAmount","type":"uint256"}],"name":"updateETHIcoRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_EtherAmount","type":"uint256"}],"name":"updateETHPresaleRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_EtherAmount","type":"uint256"}],"name":"updateICOMaxcap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"wallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405265e35fa931a00060075566012795f58d5000600855603c600d55681b1ae4d6e2ef500000600e55681b1ae4d6e2ef500000600f556906e1d41a8f9ec35000006010556001601160006101000a81548160ff0219169083151502179055506000601160016101000a81548160ff0219169083151502179055506000601360006101000a81548160ff0219169083151502179055506001601360016101000a81548160ff021916908315150217905550348015620000bf57600080fd5b50604051620032013803806200320183398181016040526060811015620000e557600080fd5b8101908080519060200190929190805190602001909291908051906020019092919050505033600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015620001b65750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015620001f05750600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b620001fa57600080fd5b82600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050612f3180620002d06000396000f3fe6080604052600436106101fc5760003560e01c80637fa8c1581161010d578063d3927c15116100a0578063e4f8a6221161006f578063e4f8a6221461074b578063f2fde38b14610776578063f607493e146107c7578063fc0c546a146107f2578063fdea8e0b1461083357610241565b8063d3927c1514610677578063da3fca8d1461068e578063de78b109146106bb578063e2982c21146106e657610241565b8063a6a3b5b4116100dc578063a6a3b5b4146105cf578063a9af75fa146105fa578063b4a97fca14610635578063b6b4e4671461066057610241565b80637fa8c1581461050b5780638ac27f5f146105225780638da5cb5b1461054d578063a4475ce41461058e57610241565b806354238645116101905780635dfb98961161015f5780635dfb989614610436578063614138e414610471578063725504ab1461049c57806372959388146104c75780637adc7233146104f457610241565b806354238645146103b0578063590e1ae3146103c75780635c81fd48146103de5780635d4522011461040957610241565b806333128f8f116101cc57806333128f8f146103025780634862b6311461032d5780634c0aac9a14610358578063521eb2731461036f57610241565b80625b44871461024657806306466ec914610271578063215c38f51461029c5780632378bac6146102d757610241565b3661024157601160009054906101000a900460ff16156102205761021f33610860565b5b601160019054906101000a900460ff161561023f5761023e33610b0e565b5b005b600080fd5b34801561025257600080fd5b5061025b610e2e565b6040518082815260200191505060405180910390f35b34801561027d57600080fd5b50610286610e34565b6040518082815260200191505060405180910390f35b3480156102a857600080fd5b506102d5600480360360208110156102bf57600080fd5b8101908080359060200190929190505050610e3a565b005b3480156102e357600080fd5b506102ec610f1a565b6040518082815260200191505060405180910390f35b34801561030e57600080fd5b50610317610f20565b6040518082815260200191505060405180910390f35b34801561033957600080fd5b50610342610f2c565b6040518082815260200191505060405180910390f35b34801561036457600080fd5b5061036d610f37565b005b34801561037b57600080fd5b5061038461141d565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103bc57600080fd5b506103c5611443565b005b3480156103d357600080fd5b506103dc6115be565b005b3480156103ea57600080fd5b506103f36116b1565b6040518082815260200191505060405180910390f35b34801561041557600080fd5b5061041e6116b7565b60405180821515815260200191505060405180910390f35b34801561044257600080fd5b5061046f6004803603602081101561045957600080fd5b81019080803590602001909291905050506116ca565b005b34801561047d57600080fd5b506104866117aa565b6040518082815260200191505060405180910390f35b3480156104a857600080fd5b506104b16117b0565b6040518082815260200191505060405180910390f35b3480156104d357600080fd5b506104dc6117b6565b60405180821515815260200191505060405180910390f35b34801561050057600080fd5b506105096117c9565b005b34801561051757600080fd5b50610520611944565b005b34801561052e57600080fd5b50610537611b7f565b6040518082815260200191505060405180910390f35b34801561055957600080fd5b50610562611b85565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561059a57600080fd5b506105a3611bab565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156105db57600080fd5b506105e4611bd1565b6040518082815260200191505060405180910390f35b34801561060657600080fd5b506106336004803603602081101561061d57600080fd5b8101908080359060200190929190505050611bd7565b005b34801561064157600080fd5b5061064a611cb7565b6040518082815260200191505060405180910390f35b34801561066c57600080fd5b50610675611cbd565b005b34801561068357600080fd5b5061068c611edc565b005b34801561069a57600080fd5b506106a3611efe565b60405180821515815260200191505060405180910390f35b3480156106c757600080fd5b506106d0611f11565b6040518082815260200191505060405180910390f35b3480156106f257600080fd5b506107356004803603602081101561070957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f17565b6040518082815260200191505060405180910390f35b34801561075757600080fd5b50610760611f2f565b6040518082815260200191505060405180910390f35b34801561078257600080fd5b506107c56004803603602081101561079957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f35565b005b3480156107d357600080fd5b506107dc61215b565b6040518082815260200191505060405180910390f35b3480156107fe57600080fd5b50610807612161565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561083f57600080fd5b50610848612187565b60405180821515815260200191505060405180910390f35b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610903576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4661696c6564207468652077616c6c6574206973206e6f7420616c6c6f77656481525060200191505060405180910390fd5b671bc16d674ec80000341015610964576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526043815260200180612e7b6043913960600191505060405180910390fd5b60003490506000601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006109b98261219a565b90506109c583826121d4565b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f623b3804fa71d67900d064613da8f94b9617215ee90799290593e1745087ad188484604051808381526020018281526020019250505060405180910390a3610a4782600a5461287490919063ffffffff16565b600a81905550610a6281600c5461287490919063ffffffff16565b600c81905550600e54600a5411610ae157600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610adb573d6000803e3d6000fd5b50610b09565b600e54600a5410610b08576000601160006101000a81548160ff0219169083151502179055505b5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610bb1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4661696c6564207468652077616c6c6574206973206e6f7420616c6c6f77656481525060200191505060405180910390fd5b6608e1bc9bf04000341015610c11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e815260200180612db3603e913960400191505060405180910390fd5b60003490506000610c21826128fc565b9050610c2d83826121d4565b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f623b3804fa71d67900d064613da8f94b9617215ee90799290593e1745087ad188484604051808381526020018281526020019250505060405180910390a3610caf8260095461287490919063ffffffff16565b600981905550610cca81600b5461287490919063ffffffff16565b600b81905550610d2282601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461287490919063ffffffff16565b601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000610d7e600a5460095461287490919063ffffffff16565b9050600f548110158015610d9457506010548111155b15610e0357600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610e01573d6000803e3d6000fd5b505b6010548110610e28576000601160016101000a81548160ff0219169083151502179055505b50505050565b60015481565b600c5481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610efd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f4e6f7420617574686f72697a6564206f7065726174696f6e000000000000000081525060200191505060405180910390fd5b610f1160018261293690919063ffffffff16565b60108190555050565b600f5481565b671bc16d674ec8000081565b6608e1bc9bf0400081565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ffa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f4e6f7420617574686f72697a6564206f7065726174696f6e000000000000000081525060200191505060405180910390fd5b601160019054906101000a900460ff161580156110245750601160009054906101000a900460ff16155b611096576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4661696c656420612073616c6573206973206f6e676f696e670000000000000081525060200191505060405180910390fd5b6110ae6276a70060065461287490919063ffffffff16565b4211806110bf57506110be6129bc565b5b611114576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180612e536028913960400191505060405180910390fd5b61111c6129bc565b1561120b576000611131600d546064036129df565b905061115f600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826121d4565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318a24b5b6040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156111c957600080fd5b505af11580156111dd573d6000803e3d6000fd5b505050506040513d60208110156111f357600080fd5b81019080805190602001909291905050505050611277565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6009549081150290604051600060405180830381858888f19350505050158015611275573d6000803e3d6000fd5b505b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561130257600080fd5b505afa158015611316573d6000803e3d6000fd5b505050506040513d602081101561132c57600080fd5b8101908080519060200190929190505050111561141b576000600b549050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac30836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156113dd57600080fd5b505af11580156113f1573d6000803e3d6000fd5b505050506040513d602081101561140757600080fd5b810190808051906020019092919050505050505b565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611506576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f4e6f7420617574686f72697a6564206f7065726174696f6e000000000000000081525060200191505060405180910390fd5b601160009054906101000a900460ff1615801561152f5750601160019054906101000a900460ff165b6115a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4661696c65642069742077617320616c726561647920636c6f7365640000000081525060200191505060405180910390fd5b6000601160016101000a81548160ff021916908315150217905550565b6115c6612a2a565b6115cf57600080fd5b6000601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541161161b57600080fd5b6000601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506116ae3382612ac5565b50565b60085481565b601160019054906101000a900460ff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461178d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f4e6f7420617574686f72697a6564206f7065726174696f6e000000000000000081525060200191505060405180910390fd5b6117a160018261293690919063ffffffff16565b60088190555050565b600e5481565b60105481565b601360009054906101000a900460ff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461188c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f4e6f7420617574686f72697a6564206f7065726174696f6e000000000000000081525060200191505060405180910390fd5b601160009054906101000a900460ff1680156118b55750601160019054906101000a900460ff16155b611927576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4661696c65642069742077617320616c726561647920636c6f7365640000000081525060200191505060405180910390fd5b6000601160006101000a81548160ff021916908315150217905550565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f4e6f7420617574686f72697a6564206f7065726174696f6e000000000000000081525060200191505060405180910390fd5b601360019054906101000a900460ff168015611a305750601160009054906101000a900460ff16155b611a85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e815260200180612ebe603e913960400191505060405180910390fd5b611a9b622a30004261287490919063ffffffff16565b6006819055506001601160016101000a81548160ff021916908315150217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bca7a9e26040518163ffffffff1660e01b8152600401602060405180830381600087803b158015611b2657600080fd5b505af1158015611b3a573d6000803e3d6000fd5b505050506040513d6020811015611b5057600080fd5b8101908080519060200190929190505050506000601360016101000a81548160ff021916908315150217905550565b600d5481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60065481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c9a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f4e6f7420617574686f72697a6564206f7065726174696f6e000000000000000081525060200191505060405180910390fd5b611cae60018261293690919063ffffffff16565b60078190555050565b60095481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d80576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f4e6f7420617574686f72697a6564206f7065726174696f6e000000000000000081525060200191505060405180910390fd5b601360009054906101000a900460ff168015611da95750601160019054906101000a900460ff16155b611dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526041815260200180612df16041913960600191505060405180910390fd5b6001601160006101000a81548160ff0219169083151502179055506000601360006101000a81548160ff021916908315150217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bca7a9e26040518163ffffffff1660e01b8152600401602060405180830381600087803b158015611e9e57600080fd5b505af1158015611eb2573d6000803e3d6000fd5b505050506040513d6020811015611ec857600080fd5b810190808051906020019092919050505050565b611ee4612a2a565b611eed57600080fd5b611ef5612b77565b47600981905550565b601360019054906101000a900460ff1681565b600b5481565b60006020528060005260406000206000915090505481565b60075481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611ff8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f4e6f7420617574686f72697a6564206f7065726174696f6e000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561209b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f416464726573732073686f756c646e2774206265207a65726f0000000000000081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a5481565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601160009054906101000a900460ff1681565b6000806121c96402540be4006121bb60075486612c7890919063ffffffff16565b61293690919063ffffffff16565b905080915050919050565b80600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561225e57600080fd5b505afa158015612272573d6000803e3d6000fd5b505050506040513d602081101561228857600080fd5b81019080805190602001909291905050501061237a57600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561233157600080fd5b505af1158015612345573d6000803e3d6000fd5b505050506040513d602081101561235b57600080fd5b810190808051906020019092919050505061237557600080fd5b612870565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561240557600080fd5b505afa158015612419573d6000803e3d6000fd5b505050506040513d602081101561242f57600080fd5b8101908080519060200190929190505050141561252257600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1983836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156124d957600080fd5b505af11580156124ed573d6000803e3d6000fd5b505050506040513d602081101561250357600080fd5b810190808051906020019092919050505061251d57600080fd5b61286f565b60006125fa600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156125b057600080fd5b505afa1580156125c4573d6000803e3d6000fd5b505050506040513d60208110156125da57600080fd5b810190808051906020019092919050505083612d0790919063ffffffff16565b9050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156126c457600080fd5b505afa1580156126d8573d6000803e3d6000fd5b505050506040513d60208110156126ee57600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561275257600080fd5b505af1158015612766573d6000803e3d6000fd5b505050506040513d602081101561277c57600080fd5b810190808051906020019092919050505061279657600080fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1984836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561282957600080fd5b505af115801561283d573d6000803e3d6000fd5b505050506040513d602081101561285357600080fd5b810190808051906020019092919050505061286d57600080fd5b505b5b5050565b6000808284019050838110156128f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60008061292b6402540be40061291d60085486612c7890919063ffffffff16565b61293690919063ffffffff16565b905080915050919050565b60008083141561294957600090506129b6565b600082840290508284828161295a57fe5b04146129b1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180612e326021913960400191505060405180910390fd5b809150505b92915050565b6000600f546129d8600a5460095461287490919063ffffffff16565b1015905090565b6000806129f9600c54600b5461287490919063ffffffff16565b9050612a22600d54612a14838661293690919063ffffffff16565b612c7890919063ffffffff16565b915050919050565b6000612a346129bc565b15612a8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180612d916022913960400191505060405180910390fd5b601160019054906101000a900460ff16158015612ab45750601360019054906101000a900460ff16155b80612ac0575060065442115b905090565b612b16816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461287490919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612b6d8160015461287490919063ffffffff16565b6001819055505050565b600033905060008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811415612bcd57600080fd5b80471015612bda57600080fd5b612bef81600154612d0790919063ffffffff16565b60018190555060008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050612c7457fe5b5050565b6000808211612cef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525060200191505060405180910390fd5b6000828481612cfa57fe5b0490508091505092915050565b600082821115612d7f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525060200191505060405180910390fd5b60008284039050809150509291505056fe4661696c656420726566756e6420706572696f64206973206e6f74206f70656e65644661696c65642074686520616d6f756e74206973206e6f742072657370656374696e6720746865206d696e696d756d206465706f736974206f662049434f4661696c6564207468652050726573616c652077617320616c72656164792073746172746564206f7220616e6f746865722073616c65206973206f6e676f696e67536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774661696c65642074686520726566756e6420706572696f64206973206e6f742066696e69736865644661696c65642074686520616d6f756e74206973206e6f742072657370656374696e6720746865206d696e696d756d206465706f736974206f662050726573616c65204661696c6564207468652049434f2077617320616c72656164792073746172746564206f7220616e6f746865722073616c6165206973206f6e676f696e67a2646970667358221220f018810e0fd774f859bae9730f51529a368c8daaebc7280b9733b8bcc6a1fa9a64736f6c634300060c0033000000000000000000000000dded117f6d7197912bdf8158bc161694cef19fc5000000000000000000000000cf8f32e032f432b02393636b2092a6bef975fbf900000000000000000000000013bf02ec805b4dab043fe003224c518874006ba1
Deployed Bytecode
0x6080604052600436106101fc5760003560e01c80637fa8c1581161010d578063d3927c15116100a0578063e4f8a6221161006f578063e4f8a6221461074b578063f2fde38b14610776578063f607493e146107c7578063fc0c546a146107f2578063fdea8e0b1461083357610241565b8063d3927c1514610677578063da3fca8d1461068e578063de78b109146106bb578063e2982c21146106e657610241565b8063a6a3b5b4116100dc578063a6a3b5b4146105cf578063a9af75fa146105fa578063b4a97fca14610635578063b6b4e4671461066057610241565b80637fa8c1581461050b5780638ac27f5f146105225780638da5cb5b1461054d578063a4475ce41461058e57610241565b806354238645116101905780635dfb98961161015f5780635dfb989614610436578063614138e414610471578063725504ab1461049c57806372959388146104c75780637adc7233146104f457610241565b806354238645146103b0578063590e1ae3146103c75780635c81fd48146103de5780635d4522011461040957610241565b806333128f8f116101cc57806333128f8f146103025780634862b6311461032d5780634c0aac9a14610358578063521eb2731461036f57610241565b80625b44871461024657806306466ec914610271578063215c38f51461029c5780632378bac6146102d757610241565b3661024157601160009054906101000a900460ff16156102205761021f33610860565b5b601160019054906101000a900460ff161561023f5761023e33610b0e565b5b005b600080fd5b34801561025257600080fd5b5061025b610e2e565b6040518082815260200191505060405180910390f35b34801561027d57600080fd5b50610286610e34565b6040518082815260200191505060405180910390f35b3480156102a857600080fd5b506102d5600480360360208110156102bf57600080fd5b8101908080359060200190929190505050610e3a565b005b3480156102e357600080fd5b506102ec610f1a565b6040518082815260200191505060405180910390f35b34801561030e57600080fd5b50610317610f20565b6040518082815260200191505060405180910390f35b34801561033957600080fd5b50610342610f2c565b6040518082815260200191505060405180910390f35b34801561036457600080fd5b5061036d610f37565b005b34801561037b57600080fd5b5061038461141d565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103bc57600080fd5b506103c5611443565b005b3480156103d357600080fd5b506103dc6115be565b005b3480156103ea57600080fd5b506103f36116b1565b6040518082815260200191505060405180910390f35b34801561041557600080fd5b5061041e6116b7565b60405180821515815260200191505060405180910390f35b34801561044257600080fd5b5061046f6004803603602081101561045957600080fd5b81019080803590602001909291905050506116ca565b005b34801561047d57600080fd5b506104866117aa565b6040518082815260200191505060405180910390f35b3480156104a857600080fd5b506104b16117b0565b6040518082815260200191505060405180910390f35b3480156104d357600080fd5b506104dc6117b6565b60405180821515815260200191505060405180910390f35b34801561050057600080fd5b506105096117c9565b005b34801561051757600080fd5b50610520611944565b005b34801561052e57600080fd5b50610537611b7f565b6040518082815260200191505060405180910390f35b34801561055957600080fd5b50610562611b85565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561059a57600080fd5b506105a3611bab565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156105db57600080fd5b506105e4611bd1565b6040518082815260200191505060405180910390f35b34801561060657600080fd5b506106336004803603602081101561061d57600080fd5b8101908080359060200190929190505050611bd7565b005b34801561064157600080fd5b5061064a611cb7565b6040518082815260200191505060405180910390f35b34801561066c57600080fd5b50610675611cbd565b005b34801561068357600080fd5b5061068c611edc565b005b34801561069a57600080fd5b506106a3611efe565b60405180821515815260200191505060405180910390f35b3480156106c757600080fd5b506106d0611f11565b6040518082815260200191505060405180910390f35b3480156106f257600080fd5b506107356004803603602081101561070957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f17565b6040518082815260200191505060405180910390f35b34801561075757600080fd5b50610760611f2f565b6040518082815260200191505060405180910390f35b34801561078257600080fd5b506107c56004803603602081101561079957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f35565b005b3480156107d357600080fd5b506107dc61215b565b6040518082815260200191505060405180910390f35b3480156107fe57600080fd5b50610807612161565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561083f57600080fd5b50610848612187565b60405180821515815260200191505060405180910390f35b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610903576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4661696c6564207468652077616c6c6574206973206e6f7420616c6c6f77656481525060200191505060405180910390fd5b671bc16d674ec80000341015610964576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526043815260200180612e7b6043913960600191505060405180910390fd5b60003490506000601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006109b98261219a565b90506109c583826121d4565b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f623b3804fa71d67900d064613da8f94b9617215ee90799290593e1745087ad188484604051808381526020018281526020019250505060405180910390a3610a4782600a5461287490919063ffffffff16565b600a81905550610a6281600c5461287490919063ffffffff16565b600c81905550600e54600a5411610ae157600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610adb573d6000803e3d6000fd5b50610b09565b600e54600a5410610b08576000601160006101000a81548160ff0219169083151502179055505b5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610bb1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4661696c6564207468652077616c6c6574206973206e6f7420616c6c6f77656481525060200191505060405180910390fd5b6608e1bc9bf04000341015610c11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e815260200180612db3603e913960400191505060405180910390fd5b60003490506000610c21826128fc565b9050610c2d83826121d4565b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f623b3804fa71d67900d064613da8f94b9617215ee90799290593e1745087ad188484604051808381526020018281526020019250505060405180910390a3610caf8260095461287490919063ffffffff16565b600981905550610cca81600b5461287490919063ffffffff16565b600b81905550610d2282601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461287490919063ffffffff16565b601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000610d7e600a5460095461287490919063ffffffff16565b9050600f548110158015610d9457506010548111155b15610e0357600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610e01573d6000803e3d6000fd5b505b6010548110610e28576000601160016101000a81548160ff0219169083151502179055505b50505050565b60015481565b600c5481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610efd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f4e6f7420617574686f72697a6564206f7065726174696f6e000000000000000081525060200191505060405180910390fd5b610f1160018261293690919063ffffffff16565b60108190555050565b600f5481565b671bc16d674ec8000081565b6608e1bc9bf0400081565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ffa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f4e6f7420617574686f72697a6564206f7065726174696f6e000000000000000081525060200191505060405180910390fd5b601160019054906101000a900460ff161580156110245750601160009054906101000a900460ff16155b611096576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4661696c656420612073616c6573206973206f6e676f696e670000000000000081525060200191505060405180910390fd5b6110ae6276a70060065461287490919063ffffffff16565b4211806110bf57506110be6129bc565b5b611114576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180612e536028913960400191505060405180910390fd5b61111c6129bc565b1561120b576000611131600d546064036129df565b905061115f600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826121d4565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318a24b5b6040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156111c957600080fd5b505af11580156111dd573d6000803e3d6000fd5b505050506040513d60208110156111f357600080fd5b81019080805190602001909291905050505050611277565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6009549081150290604051600060405180830381858888f19350505050158015611275573d6000803e3d6000fd5b505b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561130257600080fd5b505afa158015611316573d6000803e3d6000fd5b505050506040513d602081101561132c57600080fd5b8101908080519060200190929190505050111561141b576000600b549050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac30836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156113dd57600080fd5b505af11580156113f1573d6000803e3d6000fd5b505050506040513d602081101561140757600080fd5b810190808051906020019092919050505050505b565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611506576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f4e6f7420617574686f72697a6564206f7065726174696f6e000000000000000081525060200191505060405180910390fd5b601160009054906101000a900460ff1615801561152f5750601160019054906101000a900460ff165b6115a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4661696c65642069742077617320616c726561647920636c6f7365640000000081525060200191505060405180910390fd5b6000601160016101000a81548160ff021916908315150217905550565b6115c6612a2a565b6115cf57600080fd5b6000601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541161161b57600080fd5b6000601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506116ae3382612ac5565b50565b60085481565b601160019054906101000a900460ff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461178d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f4e6f7420617574686f72697a6564206f7065726174696f6e000000000000000081525060200191505060405180910390fd5b6117a160018261293690919063ffffffff16565b60088190555050565b600e5481565b60105481565b601360009054906101000a900460ff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461188c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f4e6f7420617574686f72697a6564206f7065726174696f6e000000000000000081525060200191505060405180910390fd5b601160009054906101000a900460ff1680156118b55750601160019054906101000a900460ff16155b611927576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4661696c65642069742077617320616c726561647920636c6f7365640000000081525060200191505060405180910390fd5b6000601160006101000a81548160ff021916908315150217905550565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f4e6f7420617574686f72697a6564206f7065726174696f6e000000000000000081525060200191505060405180910390fd5b601360019054906101000a900460ff168015611a305750601160009054906101000a900460ff16155b611a85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e815260200180612ebe603e913960400191505060405180910390fd5b611a9b622a30004261287490919063ffffffff16565b6006819055506001601160016101000a81548160ff021916908315150217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bca7a9e26040518163ffffffff1660e01b8152600401602060405180830381600087803b158015611b2657600080fd5b505af1158015611b3a573d6000803e3d6000fd5b505050506040513d6020811015611b5057600080fd5b8101908080519060200190929190505050506000601360016101000a81548160ff021916908315150217905550565b600d5481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60065481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c9a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f4e6f7420617574686f72697a6564206f7065726174696f6e000000000000000081525060200191505060405180910390fd5b611cae60018261293690919063ffffffff16565b60078190555050565b60095481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d80576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f4e6f7420617574686f72697a6564206f7065726174696f6e000000000000000081525060200191505060405180910390fd5b601360009054906101000a900460ff168015611da95750601160019054906101000a900460ff16155b611dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526041815260200180612df16041913960600191505060405180910390fd5b6001601160006101000a81548160ff0219169083151502179055506000601360006101000a81548160ff021916908315150217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bca7a9e26040518163ffffffff1660e01b8152600401602060405180830381600087803b158015611e9e57600080fd5b505af1158015611eb2573d6000803e3d6000fd5b505050506040513d6020811015611ec857600080fd5b810190808051906020019092919050505050565b611ee4612a2a565b611eed57600080fd5b611ef5612b77565b47600981905550565b601360019054906101000a900460ff1681565b600b5481565b60006020528060005260406000206000915090505481565b60075481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611ff8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f4e6f7420617574686f72697a6564206f7065726174696f6e000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561209b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f416464726573732073686f756c646e2774206265207a65726f0000000000000081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a5481565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601160009054906101000a900460ff1681565b6000806121c96402540be4006121bb60075486612c7890919063ffffffff16565b61293690919063ffffffff16565b905080915050919050565b80600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561225e57600080fd5b505afa158015612272573d6000803e3d6000fd5b505050506040513d602081101561228857600080fd5b81019080805190602001909291905050501061237a57600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561233157600080fd5b505af1158015612345573d6000803e3d6000fd5b505050506040513d602081101561235b57600080fd5b810190808051906020019092919050505061237557600080fd5b612870565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561240557600080fd5b505afa158015612419573d6000803e3d6000fd5b505050506040513d602081101561242f57600080fd5b8101908080519060200190929190505050141561252257600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1983836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156124d957600080fd5b505af11580156124ed573d6000803e3d6000fd5b505050506040513d602081101561250357600080fd5b810190808051906020019092919050505061251d57600080fd5b61286f565b60006125fa600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156125b057600080fd5b505afa1580156125c4573d6000803e3d6000fd5b505050506040513d60208110156125da57600080fd5b810190808051906020019092919050505083612d0790919063ffffffff16565b9050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156126c457600080fd5b505afa1580156126d8573d6000803e3d6000fd5b505050506040513d60208110156126ee57600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561275257600080fd5b505af1158015612766573d6000803e3d6000fd5b505050506040513d602081101561277c57600080fd5b810190808051906020019092919050505061279657600080fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1984836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561282957600080fd5b505af115801561283d573d6000803e3d6000fd5b505050506040513d602081101561285357600080fd5b810190808051906020019092919050505061286d57600080fd5b505b5b5050565b6000808284019050838110156128f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60008061292b6402540be40061291d60085486612c7890919063ffffffff16565b61293690919063ffffffff16565b905080915050919050565b60008083141561294957600090506129b6565b600082840290508284828161295a57fe5b04146129b1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180612e326021913960400191505060405180910390fd5b809150505b92915050565b6000600f546129d8600a5460095461287490919063ffffffff16565b1015905090565b6000806129f9600c54600b5461287490919063ffffffff16565b9050612a22600d54612a14838661293690919063ffffffff16565b612c7890919063ffffffff16565b915050919050565b6000612a346129bc565b15612a8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180612d916022913960400191505060405180910390fd5b601160019054906101000a900460ff16158015612ab45750601360019054906101000a900460ff16155b80612ac0575060065442115b905090565b612b16816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461287490919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612b6d8160015461287490919063ffffffff16565b6001819055505050565b600033905060008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811415612bcd57600080fd5b80471015612bda57600080fd5b612bef81600154612d0790919063ffffffff16565b60018190555060008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050612c7457fe5b5050565b6000808211612cef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525060200191505060405180910390fd5b6000828481612cfa57fe5b0490508091505092915050565b600082821115612d7f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525060200191505060405180910390fd5b60008284039050809150509291505056fe4661696c656420726566756e6420706572696f64206973206e6f74206f70656e65644661696c65642074686520616d6f756e74206973206e6f742072657370656374696e6720746865206d696e696d756d206465706f736974206f662049434f4661696c6564207468652050726573616c652077617320616c72656164792073746172746564206f7220616e6f746865722073616c65206973206f6e676f696e67536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774661696c65642074686520726566756e6420706572696f64206973206e6f742066696e69736865644661696c65642074686520616d6f756e74206973206e6f742072657370656374696e6720746865206d696e696d756d206465706f736974206f662050726573616c65204661696c6564207468652049434f2077617320616c72656164792073746172746564206f7220616e6f746865722073616c6165206973206f6e676f696e67a2646970667358221220f018810e0fd774f859bae9730f51529a368c8daaebc7280b9733b8bcc6a1fa9a64736f6c634300060c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000dded117f6d7197912bdf8158bc161694cef19fc5000000000000000000000000cf8f32e032f432b02393636b2092a6bef975fbf900000000000000000000000013bf02ec805b4dab043fe003224c518874006ba1
-----Decoded View---------------
Arg [0] : _wallet (address): 0xDDeD117F6d7197912bDF8158bc161694CEF19FC5
Arg [1] : _token (address): 0xcF8f32e032f432B02393636B2092a6BEf975FBF9
Arg [2] : _project (address): 0x13bf02Ec805b4dab043FE003224C518874006BA1
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000dded117f6d7197912bdf8158bc161694cef19fc5
Arg [1] : 000000000000000000000000cf8f32e032f432b02393636b2092a6bef975fbf9
Arg [2] : 00000000000000000000000013bf02ec805b4dab043fe003224c518874006ba1
Deployed Bytecode Sourcemap
16374:12032:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20020:7;;;;;;;;;;;20016:58;;;20038:28;20055:10;20038:16;:28::i;:::-;20016:58;20086:3;;;;;;;;;;;20082:50;;;20100:24;20113:10;20100:12;:24::i;:::-;20082:50;16374:12032;;;;;14820:28;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17524:38;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23430:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;18207:36;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17781:54;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17903:55;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25267:783;;;;;;;;;;;;;:::i;:::-;;16551:29;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;24455:123;;;;;;;;;;;;;:::i;:::-;;24850:221;;;;;;;;;;;;;:::i;:::-;;17112:39;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18517:23;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;23107:113;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;18058:45;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18350:38;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18746:32;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;23819:132;;;;;;;;;;;;;:::i;:::-;;23973:460;;;;;;;;;;;;;:::i;:::-;;17648:29;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;357:20;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;16627:27;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;16699;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23266:121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17259:27;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23570:223;;;;;;;;;;;;;:::i;:::-;;25077:133;;;;;;;;;;;;;:::i;:::-;;18844:27;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;17435:31;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14767:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16850:42;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1050:221;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17344:31;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16478:26;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;18419;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;20143:1346;20240:1;20216:26;;:12;:26;;;;20208:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17828:7;20297:9;:33;;20289:113;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20482:17;20502:9;20482:29;;20695:1;20672:8;:20;20681:10;20672:20;;;;;;;;;;;;;;;:24;;;;20748:22;20773:33;20796:9;20773:22;:33::i;:::-;20748:58;;20813:53;20837:12;20851:14;20813:23;:53::i;:::-;20904:12;20878:66;;20892:10;20878:66;;;20918:9;20929:14;20878:66;;;;;;;;;;;;;;;;;;;;;;;;20993:31;21014:9;20993:16;;:20;;:31;;;;:::i;:::-;20974:16;:50;;;;21057:43;21085:14;21057:23;;:27;;:43;;;;:::i;:::-;21031:23;:69;;;;21238:18;;21218:16;;:38;21214:270;;21267:6;;;;;;;;;;;:15;;:38;21283:21;21267:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21214:270;;;21421:18;;21401:16;;:38;21397:80;;21462:5;21452:7;;:15;;;;;;;;;;;;;;;;;;21397:80;21214:270;20143:1346;;;:::o;21633:1400::-;21722:1;21698:26;;:12;:26;;;;21690:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17946:12;21779:9;:29;;21771:104;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21951:17;21971:9;21951:29;;22034:22;22059:26;22075:9;22059:15;:26::i;:::-;22034:51;;22181:53;22205:12;22219:14;22181:23;:53::i;:::-;22272:12;22246:66;;22260:10;22246:66;;;22286:9;22297:14;22246:66;;;;;;;;;;;;;;;;;;;;;;;;22357:27;22374:9;22357:12;;:16;;:27;;;;:::i;:::-;22342:12;:42;;;;22470:36;22491:14;22470:16;;:20;;:36;;;;:::i;:::-;22451:16;:55;;;;22582:37;22609:9;22582:8;:22;22591:12;22582:22;;;;;;;;;;;;;;;;:26;;:37;;;;:::i;:::-;22557:8;:22;22566:12;22557:22;;;;;;;;;;;;;;;:62;;;;22628:22;22653:34;22670:16;;22653:12;;:16;;:34;;;;:::i;:::-;22628:59;;22812:9;;22794:14;:27;;:58;;;;;22843:9;;22825:14;:27;;22794:58;22790:119;;;22863:6;;;;;;;;;;;:15;;:38;22879:21;22863:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22790:119;22989:9;;22971:14;:27;22967:61;;23015:5;23009:3;;:11;;;;;;;;;;;;;;;;;;22967:61;21633:1400;;;;:::o;14820:28::-;;;;:::o;17524:38::-;;;;:::o;23430:114::-;817:5;;;;;;;;;;;803:19;;:10;:19;;;795:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23513:25:::1;23532:5;23514:12;23513:18;;:25;;;;:::i;:::-;23501:9;:37;;;;23430:114:::0;:::o;18207:36::-;;;;:::o;17781:54::-;17828:7;17781:54;:::o;17903:55::-;17946:12;17903:55;:::o;25267:783::-;817:5;;;;;;;;;;;803:19;;:10;:19;;;795:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25325:3:::1;;;;;;;;;;;25324:4;:16;;;;;25333:7;;;;;;;;;;;25332:8;25324:16;25316:54;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;25391:25;25408:7;25391:12;;:16;;:25;;;;:::i;:::-;25385:3;:31;:50;;;;25420:15;:13;:15::i;:::-;25385:50;25377:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25536:15;:13;:15::i;:::-;25532:261;;;25562:28;25593:44;25627:9;;25621:3;:15;25593:27;:44::i;:::-;25562:75;;25646:59;25670:12;;;;;;;;;;;25684:20;25646:23;:59::i;:::-;25714:5;;;;;;;;;;;:17;;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;25532:261;;;;25756:6;;;;;;;;;;;:15;;:29;25772:12;;25756:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;25532:261;25921:1;25888:5;;;;;;;;;;;:15;;;25912:4;25888:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;:34;25884:161;;;25933:29;25965:16;;25933:48;;25990:5;;;;;;;;;;;:10;;;26009:4;26015:21;25990:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;25884:161;;25267:783::o:0;16551:29::-;;;;;;;;;;;;;:::o;24455:123::-;817:5;;;;;;;;;;;803:19;;:10;:19;;;795:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24508:7:::1;;;;;;;;;;;24507:8;:15;;;;;24519:3;;;;;;;;;;;24507:15;24499:55;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;24567:5;24561:3;;:11;;;;;;;;;;;;;;;;;;24455:123::o:0;24850:221::-;24890:15;:13;:15::i;:::-;24882:24;;;;;;24944:1;24921:8;:20;24930:10;24921:20;;;;;;;;;;;;;;;;:24;24913:33;;;;;;24955:17;24975:8;:20;24984:10;24975:20;;;;;;;;;;;;;;;;24955:40;;25025:1;25002:8;:20;25011:10;25002:20;;;;;;;;;;;;;;;:24;;;;25033:32;25043:10;25055:9;25033;:32::i;:::-;24850:221;:::o;17112:39::-;;;;:::o;18517:23::-;;;;;;;;;;;;;:::o;23107:113::-;817:5;;;;;;;;;;;803:19;;:10;:19;;;795:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23189:25:::1;23208:5;23190:12;23189:18;;:25;;;;:::i;:::-;23179:7;:35;;;;23107:113:::0;:::o;18058:45::-;;;;:::o;18350:38::-;;;;:::o;18746:32::-;;;;;;;;;;;;;:::o;23819:132::-;817:5;;;;;;;;;;;803:19;;:10;:19;;;795:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23875:7:::1;;;;;;;;;;;:15;;;;;23887:3;;;;;;;;;;;23886:4;23875:15;23867:56;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;23940:5;23930:7;;:15;;;;;;;;;;;;;;;;;;23819:132::o:0;23973:460::-;817:5;;;;;;;;;;;803:19;;:10;:19;;;795:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24116:8:::1;;;;;;;;;;;:20;;;;;24129:7;;;;;;;;;;;24128:8;24116:20;24108:95;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24227:16;24235:7;24227:3;:7;;:16;;;;:::i;:::-;24212:12;:31;;;;24302:4;24296:3;;:10;;;;;;;;;;;;;;;;;;24313:5;;;;;;;;;;;:15;;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;24422:5;24411:8;;:16;;;;;;;;;;;;;;;;;;23973:460::o:0;17648:29::-;;;;:::o;357:20::-;;;;;;;;;;;;;:::o;16627:27::-;;;;;;;;;;;;;:::o;16699:::-;;;;:::o;23266:121::-;817:5;;;;;;;;;;;803:19;;:10;:19;;;795:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23356:25:::1;23375:5;23357:12;23356:18;;:25;;;;:::i;:::-;23342:11;:39;;;;23266:121:::0;:::o;17259:27::-;;;;:::o;23570:223::-;817:5;;;;;;;;;;;803:19;;:10;:19;;;795:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23626:12:::1;;;;;;;;;;;:20;;;;;23643:3;;;;;;;;;;;23642:4;23626:20;23618:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23732:4;23722:7;;:14;;;;;;;;;;;;;;;;;;23758:5;23743:12;;:20;;;;;;;;;;;;;;;;;;23770:5;;;;;;;;;;;:15;;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;23570:223::o:0;25077:133::-;25120:15;:13;:15::i;:::-;25112:24;;;;;;25143:18;:16;:18::i;:::-;25183:21;25168:12;:36;;;;25077:133::o;18844:27::-;;;;;;;;;;;;;:::o;17435:31::-;;;;:::o;14767:44::-;;;;;;;;;;;;;;;;;:::o;16850:42::-;;;;:::o;1050:221::-;817:5;;;;;;;;;;;803:19;;:10;:19;;;795:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1151:1:::1;1131:22;;:8;:22;;;;1123:60;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;1227:8;1199:37;;1220:5;;;;;;;;;;;1199:37;;;;;;;;;;;;1255:8;1247:5;;:16;;;;;;;;;;;;;;;;;;1050:221:::0;:::o;17344:31::-;;;;:::o;16478:26::-;;;;;;;;;;;;;:::o;18419:::-;;;;;;;;;;;;;:::o;26518:189::-;26593:7;26609:21;26633:41;26665:8;26633:27;26648:11;;26633:10;:14;;:27;;;;:::i;:::-;:31;;:41;;;;:::i;:::-;26609:65;;26688:13;26681:20;;;26518:189;;;:::o;27384:617::-;27515:12;27481:5;;;;;;;;;;;:15;;;27505:4;27481:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:46;27477:519;;27546:5;;;;;;;;;;;:14;;;27561:12;27575;27546:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27538:51;;;;;;27477:519;;;27655:1;27621:5;;;;;;;;;;;:15;;;27645:4;27621:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:35;27617:372;;;27677:5;;;;;;;;;;;:10;;;27688:12;27702;27677:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27669:47;;;;;;27617:372;;;27750:30;27783:48;27800:5;;;;;;;;;;;:15;;;27824:4;27800:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27783:12;:16;;:48;;;;:::i;:::-;27750:81;;27850:5;;;;;;;;;;;:14;;;27865:12;27879:5;;;;;;;;;;;:15;;;27903:4;27879:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27850:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27842:69;;;;;;27930:5;;;;;;;;;;;:10;;;27941:12;27955:22;27930:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27922:57;;;;;;27617:372;;27477:519;27384:617;;:::o;2114:181::-;2172:7;2192:9;2208:1;2204;:5;2192:17;;2233:1;2228;:6;;2220:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2286:1;2279:8;;;2114:181;;;;:::o;26796:178::-;26864:7;26880:21;26904:37;26932:8;26904:23;26919:7;;26904:10;:14;;:23;;;;:::i;:::-;:27;;:37;;;;:::i;:::-;26880:61;;26955:13;26948:20;;;26796:178;;;:::o;3005:470::-;3063:7;3312:1;3307;:6;3303:47;;;3337:1;3330:8;;;;3303:47;3362:9;3378:1;3374;:5;3362:17;;3407:1;3402;3398;:5;;;;;;:10;3390:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3466:1;3459:8;;;3005:470;;;;;:::o;28279:122::-;28327:4;28385:9;;28347:34;28364:16;;28347:12;;:16;;:34;;;;:::i;:::-;:47;;28339:56;;28279:122;:::o;27079:224::-;27151:7;27167:23;27193:45;27214:23;;27193:16;;:20;;:45;;;;:::i;:::-;27167:71;;27253:41;27284:9;;27253:26;27263:15;27253:5;:9;;:26;;;;:::i;:::-;:30;;:41;;;;:::i;:::-;27245:50;;;27079:224;;;:::o;28049:187::-;28097:4;28118:15;:13;:15::i;:::-;28117:16;28109:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28188:3;;;;;;;;;;;28187:4;:17;;;;;28196:8;;;;;;;;;;;28195:9;28187:17;28186:43;;;;28216:12;;28210:3;:18;28186:43;28178:52;;28049:187;:::o;15057:171::-;15142:26;15161:6;15142:8;:14;15151:4;15142:14;;;;;;;;;;;;;;;;:18;;:26;;;;:::i;:::-;15125:8;:14;15134:4;15125:14;;;;;;;;;;;;;;;:43;;;;15195:25;15213:6;15195:13;;:17;;:25;;;;:::i;:::-;15179:13;:41;;;;15057:171;;:::o;15312:344::-;15359:21;15383:10;15359:34;;15404:15;15422:8;:15;15431:5;15422:15;;;;;;;;;;;;;;;;15404:33;;15469:1;15458:7;:12;;15450:21;;;;;;15515:7;15490:21;:32;;15482:41;;;;;;15552:26;15570:7;15552:13;;:17;;:26;;;;:::i;:::-;15536:13;:42;;;;15607:1;15589:8;:15;15598:5;15589:15;;;;;;;;;;;;;;;:19;;;;15628:5;:10;;:19;15639:7;15628:19;;;;;;;;;;;;;;;;;;;;;;;15621:27;;;;15312:344;;:::o;3943:333::-;4001:7;4100:1;4096;:5;4088:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4143:9;4159:1;4155;:5;;;;;;4143:17;;4267:1;4260:8;;;3943:333;;;;:::o;2570:184::-;2628:7;2661:1;2656;:6;;2648:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2708:9;2724:1;2720;:5;2708:17;;2745:1;2738:8;;;2570:184;;;;:::o
Swarm Source
ipfs://f018810e0fd774f859bae9730f51529a368c8daaebc7280b9733b8bcc6a1fa9a
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.