ERC-20
Overview
Max Total Supply
1,000,000,000 BCDC
Holders
4,135
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
224.5000029 BCDCValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
BCDCToken
Compiler Version
v0.4.18+commit.9cf6e910
Optimization Enabled:
No with 0 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2017-11-19 */ pragma solidity ^0.4.11; // accepted from zeppelin-solidity https://github.com/OpenZeppelin/zeppelin-solidity /* * ERC20 interface * see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20 { uint public totalSupply; function balanceOf(address who) constant returns (uint); function allowance(address owner, address spender) constant returns (uint); function transfer(address to, uint value) returns (bool ok); function transferFrom(address from, address to, uint value) returns (bool ok); function approve(address spender, uint value) returns (bool ok); event Transfer(address indexed from, address indexed to, uint value); event Approval(address indexed owner, address indexed spender, uint value); } // accepted from zeppelin-solidity https://github.com/OpenZeppelin/zeppelin-solidity /** * Math operations with safety checks */ contract SafeMath { function safeMul(uint a, uint b) internal returns (uint) { uint c = a * b; assert(a == 0 || c / a == b); return c; } function safeDiv(uint a, uint b) internal returns (uint) { assert(b > 0); uint c = a / b; assert(a == b * c + a % b); return c; } function safeSub(uint a, uint b) internal returns (uint) { assert(b <= a); return a - b; } function safeAdd(uint a, uint b) internal returns (uint) { uint c = a + b; assert(c>=a && c>=b); return c; } function max64(uint64 a, uint64 b) internal constant returns (uint64) { return a >= b ? a : b; } function min64(uint64 a, uint64 b) internal constant returns (uint64) { return a < b ? a : b; } function max256(uint256 a, uint256 b) internal constant returns (uint256) { return a >= b ? a : b; } function min256(uint256 a, uint256 b) internal constant returns (uint256) { return a < b ? a : b; } function assert(bool assertion) internal { if (!assertion) { throw; } } } /// @title Multisignature wallet - Allows multiple parties to agree on transactions before execution. /// @author Stefan George - <[email protected]> contract MultiSigWallet { // flag to determine if address is for a real contract or not bool public isMultiSigWallet = false; uint constant public MAX_OWNER_COUNT = 50; event Confirmation(address indexed sender, uint indexed transactionId); event Revocation(address indexed sender, uint indexed transactionId); event Submission(uint indexed transactionId); event Execution(uint indexed transactionId); event ExecutionFailure(uint indexed transactionId); event Deposit(address indexed sender, uint value); event OwnerAddition(address indexed owner); event OwnerRemoval(address indexed owner); event RequirementChange(uint required); mapping (uint => Transaction) public transactions; mapping (uint => mapping (address => bool)) public confirmations; mapping (address => bool) public isOwner; address[] public owners; uint public required; uint public transactionCount; struct Transaction { address destination; uint value; bytes data; bool executed; } modifier onlyWallet() { if (msg.sender != address(this)) throw; _; } modifier ownerDoesNotExist(address owner) { if (isOwner[owner]) throw; _; } modifier ownerExists(address owner) { if (!isOwner[owner]) throw; _; } modifier transactionExists(uint transactionId) { if (transactions[transactionId].destination == 0) throw; _; } modifier confirmed(uint transactionId, address owner) { if (!confirmations[transactionId][owner]) throw; _; } modifier notConfirmed(uint transactionId, address owner) { if (confirmations[transactionId][owner]) throw; _; } modifier notExecuted(uint transactionId) { if (transactions[transactionId].executed) throw; _; } modifier notNull(address _address) { if (_address == 0) throw; _; } modifier validRequirement(uint ownerCount, uint _required) { if (ownerCount > MAX_OWNER_COUNT) throw; if (_required > ownerCount) throw; if (_required == 0) throw; if (ownerCount == 0) throw; _; } /// @dev Fallback function allows to deposit ether. function() payable { if (msg.value > 0) Deposit(msg.sender, msg.value); } /* * Public functions */ /// @dev Contract constructor sets initial owners and required number of confirmations. /// @param _owners List of initial owners. /// @param _required Number of required confirmations. function MultiSigWallet(address[] _owners, uint _required) public validRequirement(_owners.length, _required) { for (uint i=0; i<_owners.length; i++) { if (isOwner[_owners[i]] || _owners[i] == 0) throw; isOwner[_owners[i]] = true; } isMultiSigWallet = true; owners = _owners; required = _required; } /// @dev Allows to add a new owner. Transaction has to be sent by wallet. /// @param owner Address of new owner. function addOwner(address owner) public onlyWallet ownerDoesNotExist(owner) notNull(owner) validRequirement(owners.length + 1, required) { isOwner[owner] = true; owners.push(owner); OwnerAddition(owner); } /// @dev Allows to remove an owner. Transaction has to be sent by wallet. /// @param owner Address of owner. function removeOwner(address owner) public onlyWallet ownerExists(owner) { isOwner[owner] = false; for (uint i=0; i<owners.length - 1; i++) if (owners[i] == owner) { owners[i] = owners[owners.length - 1]; break; } owners.length -= 1; if (required > owners.length) changeRequirement(owners.length); OwnerRemoval(owner); } /// @dev Allows to replace an owner with a new owner. Transaction has to be sent by wallet. /// @param owner Address of owner to be replaced. /// @param owner Address of new owner. function replaceOwner(address owner, address newOwner) public onlyWallet ownerExists(owner) ownerDoesNotExist(newOwner) { for (uint i=0; i<owners.length; i++) if (owners[i] == owner) { owners[i] = newOwner; break; } isOwner[owner] = false; isOwner[newOwner] = true; OwnerRemoval(owner); OwnerAddition(newOwner); } /// @dev Allows to change the number of required confirmations. Transaction has to be sent by wallet. /// @param _required Number of required confirmations. function changeRequirement(uint _required) public onlyWallet validRequirement(owners.length, _required) { required = _required; RequirementChange(_required); } /// @dev Allows an owner to submit and confirm a transaction. /// @param destination Transaction target address. /// @param value Transaction ether value. /// @param data Transaction data payload. /// @return Returns transaction ID. function submitTransaction(address destination, uint value, bytes data) public returns (uint transactionId) { transactionId = addTransaction(destination, value, data); confirmTransaction(transactionId); } /// @dev Allows an owner to confirm a transaction. /// @param transactionId Transaction ID. function confirmTransaction(uint transactionId) public ownerExists(msg.sender) transactionExists(transactionId) notConfirmed(transactionId, msg.sender) { confirmations[transactionId][msg.sender] = true; Confirmation(msg.sender, transactionId); executeTransaction(transactionId); } /// @dev Allows an owner to revoke a confirmation for a transaction. /// @param transactionId Transaction ID. function revokeConfirmation(uint transactionId) public ownerExists(msg.sender) confirmed(transactionId, msg.sender) notExecuted(transactionId) { confirmations[transactionId][msg.sender] = false; Revocation(msg.sender, transactionId); } /// @dev Returns the confirmation status of a transaction. /// @param transactionId Transaction ID. /// @return Confirmation status. function isConfirmed(uint transactionId) public constant returns (bool) { uint count = 0; for (uint i=0; i<owners.length; i++) { if (confirmations[transactionId][owners[i]]) count += 1; if (count == required) return true; } } /* * Internal functions */ /// @dev Allows anyone to execute a confirmed transaction. /// @param transactionId Transaction ID. function executeTransaction(uint transactionId) internal notExecuted(transactionId) { if (isConfirmed(transactionId)) { Transaction tx = transactions[transactionId]; tx.executed = true; if (tx.destination.call.value(tx.value)(tx.data)) Execution(transactionId); else { ExecutionFailure(transactionId); tx.executed = false; } } } /// @dev Adds a new transaction to the transaction mapping, if transaction does not exist yet. /// @param destination Transaction target address. /// @param value Transaction ether value. /// @param data Transaction data payload. /// @return Returns transaction ID. function addTransaction(address destination, uint value, bytes data) internal notNull(destination) returns (uint transactionId) { transactionId = transactionCount; transactions[transactionId] = Transaction({ destination: destination, value: value, data: data, executed: false }); transactionCount += 1; Submission(transactionId); } /* * Web3 call functions */ /// @dev Returns number of confirmations of a transaction. /// @param transactionId Transaction ID. /// @return Number of confirmations. function getConfirmationCount(uint transactionId) public constant returns (uint count) { for (uint i=0; i<owners.length; i++) if (confirmations[transactionId][owners[i]]) count += 1; } /// @dev Returns total number of transactions after filers are applied. /// @param pending Include pending transactions. /// @param executed Include executed transactions. /// @return Total number of transactions after filters are applied. function getTransactionCount(bool pending, bool executed) public constant returns (uint count) { for (uint i=0; i<transactionCount; i++) if ((pending && !transactions[i].executed) || (executed && transactions[i].executed)) count += 1; } /// @dev Returns list of owners. /// @return List of owner addresses. function getOwners() public constant returns (address[]) { return owners; } /// @dev Returns array with owner addresses, which confirmed transaction. /// @param transactionId Transaction ID. /// @return Returns array of owner addresses. function getConfirmations(uint transactionId) public constant returns (address[] _confirmations) { address[] memory confirmationsTemp = new address[](owners.length); uint count = 0; uint i; for (i=0; i<owners.length; i++) if (confirmations[transactionId][owners[i]]) { confirmationsTemp[count] = owners[i]; count += 1; } _confirmations = new address[](count); for (i=0; i<count; i++) _confirmations[i] = confirmationsTemp[i]; } /// @dev Returns list of transaction IDs in defined range. /// @param from Index start position of transaction array. /// @param to Index end position of transaction array. /// @param pending Include pending transactions. /// @param executed Include executed transactions. /// @return Returns array of transaction IDs. function getTransactionIds(uint from, uint to, bool pending, bool executed) public constant returns (uint[] _transactionIds) { uint[] memory transactionIdsTemp = new uint[](transactionCount); uint count = 0; uint i; for (i=0; i<transactionCount; i++) if ((pending && !transactions[i].executed) || (executed && transactions[i].executed)) { transactionIdsTemp[count] = i; count += 1; } _transactionIds = new uint[](to - from); for (i=from; i<to; i++) _transactionIds[i - from] = transactionIdsTemp[i]; } } contract UpgradeAgent is SafeMath { address public owner; bool public isUpgradeAgent; function upgradeFrom(address _from, uint256 _value) public; function setOriginalSupply() public; } // @title BCDC Token vault, locked tokens for 1 month (Dev Team) and 1 year for Founders contract BCDCVault is SafeMath { // flag to determine if address is for a real contract or not bool public isBCDCVault = false; BCDCToken bcdcToken; // address of our private MultiSigWallet contract address bcdcMultisig; // number of block unlock for developers uint256 public unlockedBlockForDev; // number of block unlock for founders uint256 public unlockedBlockForFounders; // It should be 1 * 30 days * 24 hours * 60 minutes * 60 seconds / 17 // We can set small for testing purpose uint256 public numBlocksLockedDev; // It should be 12 months * 30 days * 24 hours * 60 minutes * 60 seconds / 17 // We can set small for testing purpose uint256 public numBlocksLockedFounders; // flag to determine all the token for developers already unlocked or not bool public unlockedAllTokensForDev = false; // flag to determine all the token for founders already unlocked or not bool public unlockedAllTokensForFounders = false; // Constructor function sets the BCDC Multisig address and // total number of locked tokens to transfer function BCDCVault(address _bcdcMultisig,uint256 _numBlocksLockedForDev,uint256 _numBlocksLockedForFounders) { // If it's not bcdcMultisig address then throw if (_bcdcMultisig == 0x0) throw; // Initalized bcdcToken bcdcToken = BCDCToken(msg.sender); // Initalized bcdcMultisig address bcdcMultisig = _bcdcMultisig; // Mark it as BCDCVault isBCDCVault = true; //Initalized numBlocksLockedDev and numBlocksLockedFounders with block number numBlocksLockedDev = _numBlocksLockedForDev; numBlocksLockedFounders = _numBlocksLockedForFounders; // Initalized unlockedBlockForDev with block number // according to current block unlockedBlockForDev = safeAdd(block.number, numBlocksLockedDev); // 30 days of blocks later // Initalized unlockedBlockForFounders with block number // according to current block unlockedBlockForFounders = safeAdd(block.number, numBlocksLockedFounders); // 365 days of blocks later } // Transfer Development Team Tokens To MultiSigWallet - 30 Days Locked function unlockForDevelopment() external { // If it has not reached 30 days mark do not transfer if (block.number < unlockedBlockForDev) throw; // If it is already unlocked then do not allowed if (unlockedAllTokensForDev) throw; // Mark it as unlocked unlockedAllTokensForDev = true; // Will fail if allocation (and therefore toTransfer) is 0. uint256 totalBalance = bcdcToken.balanceOf(this); // transfer half of token to development team uint256 developmentTokens = safeDiv(safeMul(totalBalance, 50), 100); if (!bcdcToken.transfer(bcdcMultisig, developmentTokens)) throw; } // Transfer Founders Team Tokens To MultiSigWallet - 365 Days Locked function unlockForFounders() external { // If it has not reached 365 days mark do not transfer if (block.number < unlockedBlockForFounders) throw; // If it is already unlocked then do not allowed if (unlockedAllTokensForFounders) throw; // Mark it as unlocked unlockedAllTokensForFounders = true; // Will fail if allocation (and therefore toTransfer) is 0. if (!bcdcToken.transfer(bcdcMultisig, bcdcToken.balanceOf(this))) throw; // So that ether will not be trapped here. if (!bcdcMultisig.send(this.balance)) throw; } // disallow payment after unlock block function () payable { if (block.number >= unlockedBlockForFounders) throw; } } // @title BCDC Token Contract with Token Sale Functionality as well contract BCDCToken is SafeMath, ERC20 { // flag to determine if address is for a real contract or not bool public isBCDCToken = false; bool public upgradeAgentStatus = false; // Address of Owner for this Contract address public owner; // Define the current state of crowdsale enum State{PreFunding, Funding, Success, Failure} // Token related information string public constant name = "BCDC Token"; string public constant symbol = "BCDC"; uint256 public constant decimals = 18; // decimal places // Mapping of token balance and allowed address for each address with transfer limit mapping (address => uint256) balances; // This is only for refund purpose, as we have price range during different weeks of Crowdfunding, // need to maintain total investment done so refund would be exactly same. mapping (address => uint256) investment; mapping (address => mapping (address => uint256)) allowed; // Crowdsale information bool public finalizedCrowdfunding = false; // flag to determine is perallocation done or not bool public preallocated = false; uint256 public fundingStartBlock; // crowdsale start block uint256 public fundingEndBlock; // crowdsale end block // change price of token when current block reached // Maximum Token Sale (Crowdsale + Early Sale + Supporters) // Approximate 250 millions ITS + 125 millions for early investors + 75 Millions to Supports uint256 public tokenSaleMax; // Min tokens needs to be sold out for success // Approximate 1/4 of 250 millions uint256 public tokenSaleMin; //1 Billion BCDC Tokens uint256 public constant maxTokenSupply = 1000000000 ether; // Team token percentages to store in time vault uint256 public constant vaultPercentOfTotal = 5; // Project Reserved Fund Token % uint256 public constant reservedPercentTotal = 25; // Multisig Wallet Address address public bcdcMultisig; // Project Reserve Fund address address bcdcReserveFund; // BCDC's time-locked vault BCDCVault public timeVault; // Events for refund process event Refund(address indexed _from, uint256 _value); event Upgrade(address indexed _from, address indexed _to, uint256 _value); event UpgradeFinalized(address sender, address upgradeAgent); event UpgradeAgentSet(address agent); // BCDC:ETH exchange rate uint256 tokensPerEther; // @dev To Halt in Emergency Condition bool public halted; bool public finalizedUpgrade = false; address public upgradeMaster; UpgradeAgent public upgradeAgent; uint256 public totalUpgraded; // Constructor function sets following // @param bcdcMultisig address of bcdcMultisigWallet // @param fundingStartBlock block number at which funding will start // @param fundingEndBlock block number at which funding will end // @param tokenSaleMax maximum number of token to sale // @param tokenSaleMin minimum number of token to sale // @param tokensPerEther number of token to sale per ether function BCDCToken(address _bcdcMultiSig, address _upgradeMaster, uint256 _fundingStartBlock, uint256 _fundingEndBlock, uint256 _tokenSaleMax, uint256 _tokenSaleMin, uint256 _tokensPerEther, uint256 _numBlocksLockedForDev, uint256 _numBlocksLockedForFounders) { // Is not bcdcMultisig address correct then throw if (_bcdcMultiSig == 0) throw; // Is funding already started then throw if (_upgradeMaster == 0) throw; if (_fundingStartBlock <= block.number) throw; // If fundingEndBlock or fundingStartBlock value is not correct then throw if (_fundingEndBlock <= _fundingStartBlock) throw; // If tokenSaleMax or tokenSaleMin value is not correct then throw if (_tokenSaleMax <= _tokenSaleMin) throw; // If tokensPerEther value is 0 then throw if (_tokensPerEther == 0) throw; // Mark it is BCDCToken isBCDCToken = true; // Initalized all param upgradeMaster = _upgradeMaster; fundingStartBlock = _fundingStartBlock; fundingEndBlock = _fundingEndBlock; tokenSaleMax = _tokenSaleMax; tokenSaleMin = _tokenSaleMin; tokensPerEther = _tokensPerEther; // Initalized timeVault as BCDCVault timeVault = new BCDCVault(_bcdcMultiSig,_numBlocksLockedForDev,_numBlocksLockedForFounders); // If timeVault is not BCDCVault then throw if (!timeVault.isBCDCVault()) throw; // Initalized bcdcMultisig address bcdcMultisig = _bcdcMultiSig; // Initalized owner owner = msg.sender; // MultiSigWallet is not bcdcMultisig then throw if (!MultiSigWallet(bcdcMultisig).isMultiSigWallet()) throw; } // Ownership related modifer and functions // @dev Throws if called by any account other than the owner modifier onlyOwner() { if (msg.sender != owner) { throw; } _; } // @dev Allows the current owner to transfer control of the contract to a newOwner. // @param newOwner The address to transfer ownership to. function transferOwnership(address newOwner) onlyOwner { if (newOwner != address(0)) { owner = newOwner; } } // @param _bcdcReserveFund Ether Address for Project Reserve Fund // This has to be called before preAllocation // Only to be called by Owner of this contract function setBcdcReserveFund(address _bcdcReserveFund) onlyOwner{ if (getState() != State.PreFunding) throw; if (preallocated) throw; // Has to be done before preallocation if (_bcdcReserveFund == 0x0) throw; bcdcReserveFund = _bcdcReserveFund; } // @param who The address of the investor to check balance // @return balance tokens of investor address function balanceOf(address who) constant returns (uint) { return balances[who]; } // @param who The address of the investor to check investment amount // @return total investment done by ethereum address // This method is only usable up to Crowdfunding ends (Success or Fail) // So if tokens are transfered post crowdsale investment will not change. function checkInvestment(address who) constant returns (uint) { return investment[who]; } // @param owner The address of the account owning tokens // @param spender The address of the account able to transfer the tokens // @return Amount of remaining tokens allowed to spent function allowance(address owner, address spender) constant returns (uint) { return allowed[owner][spender]; } // Transfer `value` BCDC tokens from sender's account // `msg.sender` to provided account address `to`. // @dev Required state: Success // @param to The address of the recipient // @param value The number of BCDC tokens to transfer // @return Whether the transfer was successful or not function transfer(address to, uint value) returns (bool ok) { if (getState() != State.Success) throw; // Abort if crowdfunding was not a success. uint256 senderBalance = balances[msg.sender]; if ( senderBalance >= value && value > 0) { senderBalance = safeSub(senderBalance, value); balances[msg.sender] = senderBalance; balances[to] = safeAdd(balances[to], value); Transfer(msg.sender, to, value); return true; } return false; } // Transfer `value` BCDC tokens from sender 'from' // to provided account address `to`. // @dev Required state: Success // @param from The address of the sender // @param to The address of the recipient // @param value The number of BCDC to transfer // @return Whether the transfer was successful or not function transferFrom(address from, address to, uint value) returns (bool ok) { if (getState() != State.Success) throw; // Abort if crowdfunding was not a success. if (balances[from] >= value && allowed[from][msg.sender] >= value && value > 0) { balances[to] = safeAdd(balances[to], value); balances[from] = safeSub(balances[from], value); allowed[from][msg.sender] = safeSub(allowed[from][msg.sender], value); Transfer(from, to, value); return true; } else { return false; } } // `msg.sender` approves `spender` to spend `value` tokens // @param spender The address of the account able to transfer the tokens // @param value The amount of wei to be approved for transfer // @return Whether the approval was successful or not function approve(address spender, uint value) returns (bool ok) { if (getState() != State.Success) throw; // Abort if not in Success state. allowed[msg.sender][spender] = value; Approval(msg.sender, spender, value); return true; } // Sale of the tokens. Investors can call this method to invest into BCDC Tokens // Only when it's in funding mode. In case of emergecy it will be halted. function() payable stopIfHalted external { // Allow only to invest in funding state if (getState() != State.Funding) throw; // Sorry !! We do not allow to invest with 0 as value if (msg.value == 0) throw; // multiply by exchange rate to get newly created token amount uint256 createdTokens = safeMul(msg.value, tokensPerEther); // Wait we crossed maximum token sale goal. It's successful token sale !! if (safeAdd(createdTokens, totalSupply) > tokenSaleMax) throw; // Call to Internal function to assign tokens assignTokens(msg.sender, createdTokens); // Track the investment for each address till crowdsale ends investment[msg.sender] = safeAdd(investment[msg.sender], msg.value); } // To allocate tokens to Project Fund - eg. RecycleToCoin before Token Sale // Tokens allocated to these will not be count in totalSupply till the Token Sale Success and Finalized in finalizeCrowdfunding() function preAllocation() onlyOwner stopIfHalted external { // Allow only in Pre Funding Mode if (getState() != State.PreFunding) throw; // Check if BCDC Reserve Fund is set or not if (bcdcReserveFund == 0x0) throw; // To prevent multiple call by mistake if (preallocated) throw; preallocated = true; // 25% of overall Token Supply to project reseve fund uint256 projectTokens = safeDiv(safeMul(maxTokenSupply, reservedPercentTotal), 100); // At this time we will not add to totalSupply because these are not part of Sale // It will be added in totalSupply once the Token Sale is Finalized balances[bcdcReserveFund] = projectTokens; // Log the event Transfer(0, bcdcReserveFund, projectTokens); } // BCDC accepts Early Investment through manual process in Fiat Currency // BCDC Team will assign the tokens to investors manually through this function function earlyInvestment(address earlyInvestor, uint256 assignedTokens) onlyOwner stopIfHalted external { // Allow only in Pre Funding Mode And Funding Mode if (getState() != State.PreFunding && getState() != State.Funding) throw; // Check if earlyInvestor address is set or not if (earlyInvestor == 0x0) throw; // By mistake tokens mentioned as 0, save the cost of assigning tokens. if (assignedTokens == 0 ) throw; // Call to Internal function to assign tokens assignTokens(earlyInvestor, assignedTokens); // Track the investment for each address // Refund for this investor is taken care by out side the contract.because they are investing in their fiat currency //investment[earlyInvestor] = safeAdd(investment[earlyInvestor], etherValue); } // Function will transfer the tokens to investor's address // Common function code for Early Investor and Crowdsale Investor function assignTokens(address investor, uint256 tokens) internal { // Creating tokens and increasing the totalSupply totalSupply = safeAdd(totalSupply, tokens); // Assign new tokens to the sender balances[investor] = safeAdd(balances[investor], tokens); // Finally token created for sender, log the creation event Transfer(0, investor, tokens); } // Finalize crowdfunding // Finally - Transfer the Ether to Multisig Wallet function finalizeCrowdfunding() stopIfHalted external { // Abort if not in Funding Success state. if (getState() != State.Success) throw; // don't finalize unless we won if (finalizedCrowdfunding) throw; // can't finalize twice (so sneaky!) // prevent more creation of tokens finalizedCrowdfunding = true; // Check if Unsold tokens out 450 millions // 250 Millions Sale + 125 Millions for Early Investors + 75 Millions for Supporters uint256 unsoldTokens = safeSub(tokenSaleMax, totalSupply); // Founders and Tech Team Tokens Goes to Vault, Locked for 1 month (Tech) and 1 year(Team) uint256 vaultTokens = safeDiv(safeMul(maxTokenSupply, vaultPercentOfTotal), 100); totalSupply = safeAdd(totalSupply, vaultTokens); balances[timeVault] = safeAdd(balances[timeVault], vaultTokens); Transfer(0, timeVault, vaultTokens); // Only transact if there are any unsold tokens if(unsoldTokens > 0) { totalSupply = safeAdd(totalSupply, unsoldTokens); // Remaining unsold tokens assign to multisig wallet balances[bcdcMultisig] = safeAdd(balances[bcdcMultisig], unsoldTokens);// Assign Reward Tokens to Multisig wallet Transfer(0, bcdcMultisig, unsoldTokens); } // Add pre allocated tokens to project reserve fund to totalSupply uint256 preallocatedTokens = safeDiv(safeMul(maxTokenSupply, reservedPercentTotal), 100); // project tokens already counted, so only add preallcated tokens totalSupply = safeAdd(totalSupply, preallocatedTokens); // 250 millions reward tokens to multisig (equal to reservefund prellocation). // Reward to token holders on their commitment with BCDC (25 % of 1 billion = 250 millions) uint256 rewardTokens = safeDiv(safeMul(maxTokenSupply, reservedPercentTotal), 100); balances[bcdcMultisig] = safeAdd(balances[bcdcMultisig], rewardTokens);// Assign Reward Tokens to Multisig wallet totalSupply = safeAdd(totalSupply, rewardTokens); // Total Supply Should not be greater than 1 Billion if (totalSupply > maxTokenSupply) throw; // Transfer ETH to the BCDC Multisig address. if (!bcdcMultisig.send(this.balance)) throw; } // Call this function to get the refund of investment done during Crowdsale // Refund can be done only when Min Goal has not reached and Crowdsale is over function refund() external { // Abort if not in Funding Failure state. if (getState() != State.Failure) throw; uint256 bcdcValue = balances[msg.sender]; if (bcdcValue == 0) throw; balances[msg.sender] = 0; totalSupply = safeSub(totalSupply, bcdcValue); uint256 ethValue = investment[msg.sender]; investment[msg.sender] = 0; Refund(msg.sender, ethValue); if (!msg.sender.send(ethValue)) throw; } // This will return the current state of Token Sale // Read only method so no transaction fees function getState() public constant returns (State){ if (block.number < fundingStartBlock) return State.PreFunding; else if (block.number <= fundingEndBlock && totalSupply < tokenSaleMax) return State.Funding; else if (totalSupply >= tokenSaleMin || upgradeAgentStatus) return State.Success; else return State.Failure; } // Token upgrade functionality /// @notice Upgrade tokens to the new token contract. /// @dev Required state: Success /// @param value The number of tokens to upgrade function upgrade(uint256 value) external { if (!upgradeAgentStatus) throw; /*if (getState() != State.Success) throw; // Abort if not in Success state.*/ if (upgradeAgent.owner() == 0x0) throw; // need a real upgradeAgent address if (finalizedUpgrade) throw; // cannot upgrade if finalized // Validate input value. if (value == 0) throw; if (value > balances[msg.sender]) throw; // update the balances here first before calling out (reentrancy) balances[msg.sender] = safeSub(balances[msg.sender], value); totalSupply = safeSub(totalSupply, value); totalUpgraded = safeAdd(totalUpgraded, value); upgradeAgent.upgradeFrom(msg.sender, value); Upgrade(msg.sender, upgradeAgent, value); } /// @notice Set address of upgrade target contract and enable upgrade /// process. /// @dev Required state: Success /// @param agent The address of the UpgradeAgent contract function setUpgradeAgent(address agent) external { if (getState() != State.Success) throw; // Abort if not in Success state. if (agent == 0x0) throw; // don't set agent to nothing if (msg.sender != upgradeMaster) throw; // Only a master can designate the next agent upgradeAgent = UpgradeAgent(agent); if (!upgradeAgent.isUpgradeAgent()) throw; // this needs to be called in success condition to guarantee the invariant is true upgradeAgentStatus = true; upgradeAgent.setOriginalSupply(); UpgradeAgentSet(upgradeAgent); } /// @notice Set address of upgrade target contract and enable upgrade /// process. /// @dev Required state: Success /// @param master The address that will manage upgrades, not the upgradeAgent contract address function setUpgradeMaster(address master) external { if (getState() != State.Success) throw; // Abort if not in Success state. if (master == 0x0) throw; if (msg.sender != upgradeMaster) throw; // Only a master can designate the next master upgradeMaster = master; } // These modifier and functions related to halt the sale in case of emergency // @dev Use this as function modifier that should not execute if contract state Halted modifier stopIfHalted { if(halted) throw; _; } // @dev Use this as function modifier that should execute only if contract state Halted modifier runIfHalted{ if(!halted) throw; _; } // @dev called by only owner in case of any emergecy situation function halt() external onlyOwner{ halted = true; } // @dev called by only owner to stop the emergency situation function unhalt() external onlyOwner{ halted = false; } // This method is only use for transfer bcdctoken from bcdcReserveFund // @dev Required state: is bcdcReserveFund set // @param to The address of the recipient // @param value The number of BCDC tokens to transfer // @return Whether the transfer was successful or not function reserveTokenClaim(address claimAddress,uint256 token) onlyBcdcReserve returns (bool ok){ // Check if BCDC Reserve Fund is set or not if ( bcdcReserveFund == 0x0) throw; uint256 senderBalance = balances[msg.sender]; if(senderBalance >= token && token>0){ senderBalance = safeSub(senderBalance, token); balances[msg.sender] = senderBalance; balances[claimAddress] = safeAdd(balances[claimAddress], token); Transfer(msg.sender, claimAddress, token); return true; } return false; } // This method is for getting bcdctoken as rewards // @param tokens The number of tokens back for rewards function backTokenForRewards(uint256 tokens) external{ // Check that token available for transfer if(balances[msg.sender] < tokens && tokens <= 0) throw; // Debit tokens from msg.sender balances[msg.sender] = safeSub(balances[msg.sender], tokens); // Credit tokens into bcdcReserveFund balances[bcdcReserveFund] = safeAdd(balances[bcdcReserveFund], tokens); Transfer(msg.sender, bcdcReserveFund, tokens); } // bcdcReserveFund related modifer and functions // @dev Throws if called by any account other than the bcdcReserveFund owner modifier onlyBcdcReserve() { if (msg.sender != bcdcReserveFund) { throw; } _; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"vaultPercentOfTotal","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"value","type":"uint256"}],"name":"approve","outputs":[{"name":"ok","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getState","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"upgradeAgentStatus","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"finalizeCrowdfunding","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"ok","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"preallocated","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokenSaleMax","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"value","type":"uint256"}],"name":"upgrade","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"finalizedUpgrade","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"maxTokenSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"refund","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"bcdcMultisig","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"upgradeAgent","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"halt","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"upgradeMaster","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"earlyInvestor","type":"address"},{"name":"assignedTokens","type":"uint256"}],"name":"earlyInvestment","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"finalizedCrowdfunding","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"reservedPercentTotal","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"who","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"fundingEndBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"transfer","outputs":[{"name":"ok","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_bcdcReserveFund","type":"address"}],"name":"setBcdcReserveFund","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"halted","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"tokens","type":"uint256"}],"name":"backTokenForRewards","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalUpgraded","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"unhalt","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"isBCDCToken","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"preAllocation","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"fundingStartBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"agent","type":"address"}],"name":"setUpgradeAgent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"tokenSaleMin","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"},{"name":"spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"claimAddress","type":"address"},{"name":"token","type":"uint256"}],"name":"reserveTokenClaim","outputs":[{"name":"ok","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"timeVault","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"who","type":"address"}],"name":"checkInvestment","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"master","type":"address"}],"name":"setUpgradeMaster","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_bcdcMultiSig","type":"address"},{"name":"_upgradeMaster","type":"address"},{"name":"_fundingStartBlock","type":"uint256"},{"name":"_fundingEndBlock","type":"uint256"},{"name":"_tokenSaleMax","type":"uint256"},{"name":"_tokenSaleMin","type":"uint256"},{"name":"_tokensPerEther","type":"uint256"},{"name":"_numBlocksLockedForDev","type":"uint256"},{"name":"_numBlocksLockedForFounders","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"Refund","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"Upgrade","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"sender","type":"address"},{"indexed":false,"name":"upgradeAgent","type":"address"}],"name":"UpgradeFinalized","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"agent","type":"address"}],"name":"UpgradeAgentSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"}]
Contract Creation Code
60606040526000600160006101000a81548160ff02191690831515021790555060006001806101000a81548160ff0219169083151502179055506000600560006101000a81548160ff0219169083151502179055506000600560016101000a81548160ff0219169083151502179055506000600e60016101000a81548160ff02191690831515021790555034156200009657600080fd5b60405161012080620041078339810160405280805190602001909190805190602001909190805190602001909190805190602001909190805190602001909190805190602001909190805190602001909190805190602001909190805190602001909190505060008973ffffffffffffffffffffffffffffffffffffffff1614156200012157600080fd5b60008873ffffffffffffffffffffffffffffffffffffffff1614156200014657600080fd5b43871115156200015557600080fd5b86861115156200016457600080fd5b83851115156200017357600080fd5b60008314156200018257600080fd5b60018060006101000a81548160ff02191690831515021790555087600e60026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508660068190555085600781905550846008819055508360098190555082600d819055508882826200020d620004a7565b808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019350505050604051809103906000f08015156200026857600080fd5b600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663178f4da66000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15156200033757600080fd5b6102c65a03f115156200034957600080fd5b5050506040518051905015156200035f57600080fd5b88600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600160026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634c3a6ae06000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15156200047057600080fd5b6102c65a03f115156200048257600080fd5b5050506040518051905015156200049857600080fd5b505050505050505050620004b8565b604051610a3d80620036ca83390190565b61320280620004c86000396000f30060606040526004361061020f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde031461032657806308e496ea146103b4578063095ea7b3146103dd57806318160ddd146104375780631865c57d1461046057806318d0122a146104975780631ed692c0146104c457806323b872dd146104d95780632925827c14610552578063313ce5671461057f578063427982f2146105a857806345977d03146105d157806347858c79146105f457806350f7c20414610621578063590e1ae31461064a5780635b0dad8e1461065f5780635de4ccb0146106b45780635ed7ca5b14610709578063600440cb1461071e578063686d31ac1461077357806368f67330146107b55780636bce6569146107e257806370a082311461080b5780638da5cb5b1461085857806391b43d13146108ad57806395d89b41146108d6578063a9059cbb14610964578063b6c4a2f1146109be578063b9b8af0b146109f7578063bce23a7814610a24578063c752ff6214610a47578063cb3e64fd14610a70578063ccb6499714610a85578063d3b7bcf114610ab2578063d648a64714610ac7578063d7e7088a14610af0578063d873f0d614610b29578063dd62ed3e14610b52578063dda0463714610bbe578063f2fde38b14610c18578063f4660ff514610c51578063fb05ed3714610ca6578063ffeb7d7514610cf3575b6000600e60009054906101000a900460ff161561022b57600080fd5b6001600381111561023857fe5b610240610d2c565b600381111561024b57fe5b14151561025757600080fd5b600034141561026557600080fd5b61027134600d54610d98565b905060085461028282600054610dcb565b111561028d57600080fd5b6102973382610df5565b6102e0600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205434610dcb565b600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050005b341561033157600080fd5b610339610ee7565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561037957808201518184015260208101905061035e565b50505050905090810190601f1680156103a65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156103bf57600080fd5b6103c7610f20565b6040518082815260200191505060405180910390f35b34156103e857600080fd5b61041d600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610f25565b604051808215151515815260200191505060405180910390f35b341561044257600080fd5b61044a611043565b6040518082815260200191505060405180910390f35b341561046b57600080fd5b610473610d2c565b6040518082600381111561048357fe5b60ff16815260200191505060405180910390f35b34156104a257600080fd5b6104aa611049565b604051808215151515815260200191505060405180910390f35b34156104cf57600080fd5b6104d761105b565b005b34156104e457600080fd5b610538600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050611595565b604051808215151515815260200191505060405180910390f35b341561055d57600080fd5b610565611937565b604051808215151515815260200191505060405180910390f35b341561058a57600080fd5b61059261194a565b6040518082815260200191505060405180910390f35b34156105b357600080fd5b6105bb61194f565b6040518082815260200191505060405180910390f35b34156105dc57600080fd5b6105f26004808035906020019091905050611955565b005b34156105ff57600080fd5b610607611cc1565b604051808215151515815260200191505060405180910390f35b341561062c57600080fd5b610634611cd4565b6040518082815260200191505060405180910390f35b341561065557600080fd5b61065d611ce4565b005b341561066a57600080fd5b610672611ed2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156106bf57600080fd5b6106c7611ef8565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561071457600080fd5b61071c611f1e565b005b341561072957600080fd5b610731611f97565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561077e57600080fd5b6107b3600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050611fbd565b005b34156107c057600080fd5b6107c86120c9565b604051808215151515815260200191505060405180910390f35b34156107ed57600080fd5b6107f56120dc565b6040518082815260200191505060405180910390f35b341561081657600080fd5b610842600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506120e1565b6040518082815260200191505060405180910390f35b341561086357600080fd5b61086b61212a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156108b857600080fd5b6108c0612150565b6040518082815260200191505060405180910390f35b34156108e157600080fd5b6108e9612156565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561092957808201518184015260208101905061090e565b50505050905090810190601f1680156109565780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561096f57600080fd5b6109a4600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061218f565b604051808215151515815260200191505060405180910390f35b34156109c957600080fd5b6109f5600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061236b565b005b3415610a0257600080fd5b610a0a612475565b604051808215151515815260200191505060405180910390f35b3415610a2f57600080fd5b610a456004808035906020019091905050612488565b005b3415610a5257600080fd5b610a5a6126c7565b6040518082815260200191505060405180910390f35b3415610a7b57600080fd5b610a836126cd565b005b3415610a9057600080fd5b610a98612746565b604051808215151515815260200191505060405180910390f35b3415610abd57600080fd5b610ac5612759565b005b3415610ad257600080fd5b610ada612976565b6040518082815260200191505060405180910390f35b3415610afb57600080fd5b610b27600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061297c565b005b3415610b3457600080fd5b610b3c612c58565b6040518082815260200191505060405180910390f35b3415610b5d57600080fd5b610ba8600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612c5e565b6040518082815260200191505060405180910390f35b3415610bc957600080fd5b610bfe600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050612ce5565b604051808215151515815260200191505060405180910390f35b3415610c2357600080fd5b610c4f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612f37565b005b3415610c5c57600080fd5b610c6461300e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3415610cb157600080fd5b610cdd600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050613034565b6040518082815260200191505060405180910390f35b3415610cfe57600080fd5b610d2a600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061307d565b005b6000600654431015610d415760009050610d95565b6007544311158015610d565750600854600054105b15610d645760019050610d95565b600954600054101580610d8257506001809054906101000a900460ff165b15610d905760029050610d95565b600390505b90565b6000808284029050610dc16000851480610dbc5750838583811515610db957fe5b04145b61316d565b8091505092915050565b6000808284019050610deb848210158015610de65750838210155b61316d565b8091505092915050565b610e0160005482610dcb565b600081905550610e50600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482610dcb565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff1660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b6040805190810160405280600a81526020017f4243444320546f6b656e0000000000000000000000000000000000000000000081525081565b600581565b600060026003811115610f3457fe5b610f3c610d2c565b6003811115610f4757fe5b141515610f5357600080fd5b81600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b60005481565b6001809054906101000a900460ff1681565b600080600080600e60009054906101000a900460ff161561107b57600080fd5b6002600381111561108857fe5b611090610d2c565b600381111561109b57fe5b1415156110a757600080fd5b600560009054906101000a900460ff16156110c157600080fd5b6001600560006101000a81548160ff0219169083151502179055506110ea60085460005461317c565b935061110d6111066b033b2e3c9fd0803ce80000006005610d98565b6064613195565b925061111b60005484610dcb565b60008190555061118c60026000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484610dcb565b60026000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a360008411156113c15761127860005485610dcb565b6000819055506112e960026000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205485610dcb565b60026000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a35b6113e26113db6b033b2e3c9fd0803ce80000006019610d98565b6064613195565b91506113f060005483610dcb565b6000819055506114176114106b033b2e3c9fd0803ce80000006019610d98565b6064613195565b905061148460026000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482610dcb565b60026000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506114f560005482610dcb565b6000819055506b033b2e3c9fd0803ce8000000600054111561151657600080fd5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f19350505050151561158f57600080fd5b50505050565b6000600260038111156115a457fe5b6115ac610d2c565b60038111156115b757fe5b1415156115c357600080fd5b81600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015801561168e575081600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b801561169a5750600082115b1561192b576116e8600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483610dcb565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611774600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361317c565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061183d600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361317c565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050611930565b600090505b9392505050565b600560019054906101000a900460ff1681565b601281565b60085481565b6001809054906101000a900460ff16151561196f57600080fd5b6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15156119ff57600080fd5b6102c65a03f11515611a1057600080fd5b5050506040518051905073ffffffffffffffffffffffffffffffffffffffff161415611a3b57600080fd5b600e60019054906101000a900460ff1615611a5557600080fd5b6000811415611a6357600080fd5b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054811115611aaf57600080fd5b611af8600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548261317c565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611b476000548261317c565b600081905550611b5960105482610dcb565b601081905550600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663753e88e533836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b1515611c2357600080fd5b6102c65a03f11515611c3457600080fd5b505050600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f7e5c344a8141a805725cb476f76c6953b842222b967edd1f78ddb6e8b3f397ac836040518082815260200191505060405180910390a350565b600e60019054906101000a900460ff1681565b6b033b2e3c9fd0803ce800000081565b600080600380811115611cf357fe5b611cfb610d2c565b6003811115611d0657fe5b141515611d1257600080fd5b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205491506000821415611d6257600080fd5b6000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611db36000548361317c565b600081905550600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff167fbb28353e4598c3b9199101a66e0989549b659a59a54d2c27fbb183f1932c8e6d826040518082815260200191505060405180910390a23373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501515611ece57600080fd5b5050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611f7a57600080fd5b6001600e60006101000a81548160ff021916908315150217905550565b600e60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561201957600080fd5b600e60009054906101000a900460ff161561203357600080fd5b6000600381111561204057fe5b612048610d2c565b600381111561205357fe5b1415801561207f57506001600381111561206957fe5b612071610d2c565b600381111561207c57fe5b14155b1561208957600080fd5b60008273ffffffffffffffffffffffffffffffffffffffff1614156120ad57600080fd5b60008114156120bb57600080fd5b6120c58282610df5565b5050565b600560009054906101000a900460ff1681565b601981565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600160029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60075481565b6040805190810160405280600481526020017f424344430000000000000000000000000000000000000000000000000000000081525081565b6000806002600381111561219f57fe5b6121a7610d2c565b60038111156121b257fe5b1415156121be57600080fd5b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101580156122105750600083115b1561235f5761221f818461317c565b905080600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506122ae600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484610dcb565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a360019150612364565b600091505b5092915050565b600160029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156123c757600080fd5b600060038111156123d457fe5b6123dc610d2c565b60038111156123e757fe5b1415156123f357600080fd5b600560019054906101000a900460ff161561240d57600080fd5b60008173ffffffffffffffffffffffffffffffffffffffff16141561243157600080fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600e60009054906101000a900460ff1681565b80600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541080156124d7575060008111155b156124e157600080fd5b61252a600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548261317c565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506125d860026000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482610dcb565b60026000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a350565b60105481565b600160029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561272957600080fd5b6000600e60006101000a81548160ff021916908315150217905550565b600160009054906101000a900460ff1681565b6000600160029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156127b757600080fd5b600e60009054906101000a900460ff16156127d157600080fd5b600060038111156127de57fe5b6127e6610d2c565b60038111156127f157fe5b1415156127fd57600080fd5b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561284357600080fd5b600560019054906101000a900460ff161561285d57600080fd5b6001600560016101000a81548160ff0219169083151502179055506128996128926b033b2e3c9fd0803ce80000006019610d98565b6064613195565b90508060026000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a350565b60065481565b6002600381111561298957fe5b612991610d2c565b600381111561299c57fe5b1415156129a857600080fd5b60008173ffffffffffffffffffffffffffffffffffffffff1614156129cc57600080fd5b600e60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612a2857600080fd5b80600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166361d3d7a66000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1515612af757600080fd5b6102c65a03f11515612b0857600080fd5b505050604051805190501515612b1d57600080fd5b60018060016101000a81548160ff021916908315150217905550600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639ef916ab6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401600060405180830381600087803b1515612bbc57600080fd5b6102c65a03f11515612bcd57600080fd5b5050507f7845d5aa74cc410e35571258d954f23b82276e160fe8c188fa80566580f279cc600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b60095481565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600080600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612d4457600080fd5b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612d8a57600080fd5b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110158015612ddc5750600083115b15612f2b57612deb818461317c565b905080600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612e7a600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484610dcb565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a360019150612f30565b600091505b5092915050565b600160029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612f9357600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151561300b5780600160026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6002600381111561308a57fe5b613092610d2c565b600381111561309d57fe5b1415156130a957600080fd5b60008173ffffffffffffffffffffffffffffffffffffffff1614156130cd57600080fd5b600e60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561312957600080fd5b80600e60026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b80151561317957600080fd5b50565b600061318a8383111561316d565b818303905092915050565b6000806131a46000841161316d565b82848115156131af57fe5b0490506131cc83858115156131c057fe5b0682850201851461316d565b80915050929150505600a165627a7a723058202b27988bab4bbb73b18a76853e45265712aadb2a107f3556d8b299da0d5e68120029606060405260008060006101000a81548160ff0219169083151502179055506000600660006101000a81548160ff0219169083151502179055506000600660016101000a81548160ff021916908315150217905550341561005f57600080fd5b604051606080610a3d8339810160405280805190602001909190805190602001909190805190602001909190505060008373ffffffffffffffffffffffffffffffffffffffff1614156100b157600080fd5b33600060016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016000806101000a81548160ff021916908315150217905550816004819055508060058190555061017a436004546101ad640100000000026107df176401000000009004565b60028190555061019f436005546101ad640100000000026107df176401000000009004565b6003819055505050506101f9565b60008082840190506101e08482101580156101c85750838210155b6101ea640100000000026107d0176401000000009004565b8091505092915050565b8015156101f657600080fd5b50565b610835806102086000396000f300606060405260043610610099576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063178f4da6146100ab5780631a5d708e146100d85780634117b6af14610101578063558fafc51461012a5780635b262eb21461015757806377b35b4714610180578063829c0095146101ad5780639009e123146101c2578063a1fc2a2e146101eb575b600354431015156100a957600080fd5b005b34156100b657600080fd5b6100be610200565b604051808215151515815260200191505060405180910390f35b34156100e357600080fd5b6100eb610212565b6040518082815260200191505060405180910390f35b341561010c57600080fd5b610114610218565b6040518082815260200191505060405180910390f35b341561013557600080fd5b61013d61021e565b604051808215151515815260200191505060405180910390f35b341561016257600080fd5b61016a610231565b6040518082815260200191505060405180910390f35b341561018b57600080fd5b610193610237565b604051808215151515815260200191505060405180910390f35b34156101b857600080fd5b6101c061024a565b005b34156101cd57600080fd5b6101d56104fd565b6040518082815260200191505060405180910390f35b34156101f657600080fd5b6101fe610503565b005b6000809054906101000a900460ff1681565b60035481565b60045481565b600660019054906101000a900460ff1681565b60025481565b600660009054906101000a900460ff1681565b60035443101561025957600080fd5b600660019054906101000a900460ff161561027357600080fd5b6001600660016101000a81548160ff021916908315150217905550600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15156103b457600080fd5b6102c65a03f115156103c557600080fd5b505050604051805190506000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b151561045c57600080fd5b6102c65a03f1151561046d57600080fd5b50505060405180519050151561048257600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f1935050505015156104fb57600080fd5b565b60055481565b60008060025443101561051557600080fd5b600660009054906101000a900460ff161561052f57600080fd5b6001600660006101000a81548160ff021916908315150217905550600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b151561060f57600080fd5b6102c65a03f1151561062057600080fd5b50505060405180519050915061064161063a83603261075c565b606461078f565b9050600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b151561073257600080fd5b6102c65a03f1151561074357600080fd5b50505060405180519050151561075857600080fd5b5050565b60008082840290506107856000851480610780575083858381151561077d57fe5b04145b6107d0565b8091505092915050565b60008061079e600084116107d0565b82848115156107a957fe5b0490506107c683858115156107ba57fe5b068285020185146107d0565b8091505092915050565b8015156107dc57600080fd5b50565b60008082840190506107ff8482101580156107fa5750838210155b6107d0565b80915050929150505600a165627a7a72305820607ad7668db15fb233fe35276b9ccc9d7aee2b531a4511cf275e0580875e88010029000000000000000000000000ec71c55893ee571d2eb8592f0b7b2816c115a4a20000000000000000000000005adc335afa4f6f97d5920996f0f0ff06ace3b998000000000000000000000000000000000000000000000000000000000046151d000000000000000000000000000000000000000000000000000000000046c21d000000000000000000000000000000000000000001743b34e18439b50200000000000000000000000000000000000000000000000001a784379d99db420000000000000000000000000000000000000000000000000000000000000000000190000000000000000000000000000000000000000000000000000000000003c068000000000000000000000000000000000000000000000000000000000021197a
Deployed Bytecode
0x60606040526004361061020f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde031461032657806308e496ea146103b4578063095ea7b3146103dd57806318160ddd146104375780631865c57d1461046057806318d0122a146104975780631ed692c0146104c457806323b872dd146104d95780632925827c14610552578063313ce5671461057f578063427982f2146105a857806345977d03146105d157806347858c79146105f457806350f7c20414610621578063590e1ae31461064a5780635b0dad8e1461065f5780635de4ccb0146106b45780635ed7ca5b14610709578063600440cb1461071e578063686d31ac1461077357806368f67330146107b55780636bce6569146107e257806370a082311461080b5780638da5cb5b1461085857806391b43d13146108ad57806395d89b41146108d6578063a9059cbb14610964578063b6c4a2f1146109be578063b9b8af0b146109f7578063bce23a7814610a24578063c752ff6214610a47578063cb3e64fd14610a70578063ccb6499714610a85578063d3b7bcf114610ab2578063d648a64714610ac7578063d7e7088a14610af0578063d873f0d614610b29578063dd62ed3e14610b52578063dda0463714610bbe578063f2fde38b14610c18578063f4660ff514610c51578063fb05ed3714610ca6578063ffeb7d7514610cf3575b6000600e60009054906101000a900460ff161561022b57600080fd5b6001600381111561023857fe5b610240610d2c565b600381111561024b57fe5b14151561025757600080fd5b600034141561026557600080fd5b61027134600d54610d98565b905060085461028282600054610dcb565b111561028d57600080fd5b6102973382610df5565b6102e0600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205434610dcb565b600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050005b341561033157600080fd5b610339610ee7565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561037957808201518184015260208101905061035e565b50505050905090810190601f1680156103a65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156103bf57600080fd5b6103c7610f20565b6040518082815260200191505060405180910390f35b34156103e857600080fd5b61041d600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610f25565b604051808215151515815260200191505060405180910390f35b341561044257600080fd5b61044a611043565b6040518082815260200191505060405180910390f35b341561046b57600080fd5b610473610d2c565b6040518082600381111561048357fe5b60ff16815260200191505060405180910390f35b34156104a257600080fd5b6104aa611049565b604051808215151515815260200191505060405180910390f35b34156104cf57600080fd5b6104d761105b565b005b34156104e457600080fd5b610538600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050611595565b604051808215151515815260200191505060405180910390f35b341561055d57600080fd5b610565611937565b604051808215151515815260200191505060405180910390f35b341561058a57600080fd5b61059261194a565b6040518082815260200191505060405180910390f35b34156105b357600080fd5b6105bb61194f565b6040518082815260200191505060405180910390f35b34156105dc57600080fd5b6105f26004808035906020019091905050611955565b005b34156105ff57600080fd5b610607611cc1565b604051808215151515815260200191505060405180910390f35b341561062c57600080fd5b610634611cd4565b6040518082815260200191505060405180910390f35b341561065557600080fd5b61065d611ce4565b005b341561066a57600080fd5b610672611ed2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156106bf57600080fd5b6106c7611ef8565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561071457600080fd5b61071c611f1e565b005b341561072957600080fd5b610731611f97565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561077e57600080fd5b6107b3600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050611fbd565b005b34156107c057600080fd5b6107c86120c9565b604051808215151515815260200191505060405180910390f35b34156107ed57600080fd5b6107f56120dc565b6040518082815260200191505060405180910390f35b341561081657600080fd5b610842600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506120e1565b6040518082815260200191505060405180910390f35b341561086357600080fd5b61086b61212a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156108b857600080fd5b6108c0612150565b6040518082815260200191505060405180910390f35b34156108e157600080fd5b6108e9612156565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561092957808201518184015260208101905061090e565b50505050905090810190601f1680156109565780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561096f57600080fd5b6109a4600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061218f565b604051808215151515815260200191505060405180910390f35b34156109c957600080fd5b6109f5600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061236b565b005b3415610a0257600080fd5b610a0a612475565b604051808215151515815260200191505060405180910390f35b3415610a2f57600080fd5b610a456004808035906020019091905050612488565b005b3415610a5257600080fd5b610a5a6126c7565b6040518082815260200191505060405180910390f35b3415610a7b57600080fd5b610a836126cd565b005b3415610a9057600080fd5b610a98612746565b604051808215151515815260200191505060405180910390f35b3415610abd57600080fd5b610ac5612759565b005b3415610ad257600080fd5b610ada612976565b6040518082815260200191505060405180910390f35b3415610afb57600080fd5b610b27600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061297c565b005b3415610b3457600080fd5b610b3c612c58565b6040518082815260200191505060405180910390f35b3415610b5d57600080fd5b610ba8600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612c5e565b6040518082815260200191505060405180910390f35b3415610bc957600080fd5b610bfe600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050612ce5565b604051808215151515815260200191505060405180910390f35b3415610c2357600080fd5b610c4f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612f37565b005b3415610c5c57600080fd5b610c6461300e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3415610cb157600080fd5b610cdd600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050613034565b6040518082815260200191505060405180910390f35b3415610cfe57600080fd5b610d2a600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061307d565b005b6000600654431015610d415760009050610d95565b6007544311158015610d565750600854600054105b15610d645760019050610d95565b600954600054101580610d8257506001809054906101000a900460ff165b15610d905760029050610d95565b600390505b90565b6000808284029050610dc16000851480610dbc5750838583811515610db957fe5b04145b61316d565b8091505092915050565b6000808284019050610deb848210158015610de65750838210155b61316d565b8091505092915050565b610e0160005482610dcb565b600081905550610e50600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482610dcb565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff1660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b6040805190810160405280600a81526020017f4243444320546f6b656e0000000000000000000000000000000000000000000081525081565b600581565b600060026003811115610f3457fe5b610f3c610d2c565b6003811115610f4757fe5b141515610f5357600080fd5b81600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b60005481565b6001809054906101000a900460ff1681565b600080600080600e60009054906101000a900460ff161561107b57600080fd5b6002600381111561108857fe5b611090610d2c565b600381111561109b57fe5b1415156110a757600080fd5b600560009054906101000a900460ff16156110c157600080fd5b6001600560006101000a81548160ff0219169083151502179055506110ea60085460005461317c565b935061110d6111066b033b2e3c9fd0803ce80000006005610d98565b6064613195565b925061111b60005484610dcb565b60008190555061118c60026000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484610dcb565b60026000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a360008411156113c15761127860005485610dcb565b6000819055506112e960026000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205485610dcb565b60026000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a35b6113e26113db6b033b2e3c9fd0803ce80000006019610d98565b6064613195565b91506113f060005483610dcb565b6000819055506114176114106b033b2e3c9fd0803ce80000006019610d98565b6064613195565b905061148460026000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482610dcb565b60026000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506114f560005482610dcb565b6000819055506b033b2e3c9fd0803ce8000000600054111561151657600080fd5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f19350505050151561158f57600080fd5b50505050565b6000600260038111156115a457fe5b6115ac610d2c565b60038111156115b757fe5b1415156115c357600080fd5b81600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015801561168e575081600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b801561169a5750600082115b1561192b576116e8600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483610dcb565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611774600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361317c565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061183d600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361317c565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050611930565b600090505b9392505050565b600560019054906101000a900460ff1681565b601281565b60085481565b6001809054906101000a900460ff16151561196f57600080fd5b6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15156119ff57600080fd5b6102c65a03f11515611a1057600080fd5b5050506040518051905073ffffffffffffffffffffffffffffffffffffffff161415611a3b57600080fd5b600e60019054906101000a900460ff1615611a5557600080fd5b6000811415611a6357600080fd5b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054811115611aaf57600080fd5b611af8600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548261317c565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611b476000548261317c565b600081905550611b5960105482610dcb565b601081905550600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663753e88e533836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b1515611c2357600080fd5b6102c65a03f11515611c3457600080fd5b505050600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f7e5c344a8141a805725cb476f76c6953b842222b967edd1f78ddb6e8b3f397ac836040518082815260200191505060405180910390a350565b600e60019054906101000a900460ff1681565b6b033b2e3c9fd0803ce800000081565b600080600380811115611cf357fe5b611cfb610d2c565b6003811115611d0657fe5b141515611d1257600080fd5b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205491506000821415611d6257600080fd5b6000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611db36000548361317c565b600081905550600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff167fbb28353e4598c3b9199101a66e0989549b659a59a54d2c27fbb183f1932c8e6d826040518082815260200191505060405180910390a23373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501515611ece57600080fd5b5050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611f7a57600080fd5b6001600e60006101000a81548160ff021916908315150217905550565b600e60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561201957600080fd5b600e60009054906101000a900460ff161561203357600080fd5b6000600381111561204057fe5b612048610d2c565b600381111561205357fe5b1415801561207f57506001600381111561206957fe5b612071610d2c565b600381111561207c57fe5b14155b1561208957600080fd5b60008273ffffffffffffffffffffffffffffffffffffffff1614156120ad57600080fd5b60008114156120bb57600080fd5b6120c58282610df5565b5050565b600560009054906101000a900460ff1681565b601981565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600160029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60075481565b6040805190810160405280600481526020017f424344430000000000000000000000000000000000000000000000000000000081525081565b6000806002600381111561219f57fe5b6121a7610d2c565b60038111156121b257fe5b1415156121be57600080fd5b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101580156122105750600083115b1561235f5761221f818461317c565b905080600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506122ae600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484610dcb565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a360019150612364565b600091505b5092915050565b600160029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156123c757600080fd5b600060038111156123d457fe5b6123dc610d2c565b60038111156123e757fe5b1415156123f357600080fd5b600560019054906101000a900460ff161561240d57600080fd5b60008173ffffffffffffffffffffffffffffffffffffffff16141561243157600080fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600e60009054906101000a900460ff1681565b80600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541080156124d7575060008111155b156124e157600080fd5b61252a600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548261317c565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506125d860026000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482610dcb565b60026000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a350565b60105481565b600160029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561272957600080fd5b6000600e60006101000a81548160ff021916908315150217905550565b600160009054906101000a900460ff1681565b6000600160029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156127b757600080fd5b600e60009054906101000a900460ff16156127d157600080fd5b600060038111156127de57fe5b6127e6610d2c565b60038111156127f157fe5b1415156127fd57600080fd5b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561284357600080fd5b600560019054906101000a900460ff161561285d57600080fd5b6001600560016101000a81548160ff0219169083151502179055506128996128926b033b2e3c9fd0803ce80000006019610d98565b6064613195565b90508060026000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a350565b60065481565b6002600381111561298957fe5b612991610d2c565b600381111561299c57fe5b1415156129a857600080fd5b60008173ffffffffffffffffffffffffffffffffffffffff1614156129cc57600080fd5b600e60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612a2857600080fd5b80600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166361d3d7a66000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1515612af757600080fd5b6102c65a03f11515612b0857600080fd5b505050604051805190501515612b1d57600080fd5b60018060016101000a81548160ff021916908315150217905550600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639ef916ab6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401600060405180830381600087803b1515612bbc57600080fd5b6102c65a03f11515612bcd57600080fd5b5050507f7845d5aa74cc410e35571258d954f23b82276e160fe8c188fa80566580f279cc600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b60095481565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600080600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612d4457600080fd5b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612d8a57600080fd5b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110158015612ddc5750600083115b15612f2b57612deb818461317c565b905080600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612e7a600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484610dcb565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a360019150612f30565b600091505b5092915050565b600160029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612f9357600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151561300b5780600160026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6002600381111561308a57fe5b613092610d2c565b600381111561309d57fe5b1415156130a957600080fd5b60008173ffffffffffffffffffffffffffffffffffffffff1614156130cd57600080fd5b600e60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561312957600080fd5b80600e60026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b80151561317957600080fd5b50565b600061318a8383111561316d565b818303905092915050565b6000806131a46000841161316d565b82848115156131af57fe5b0490506131cc83858115156131c057fe5b0682850201851461316d565b80915050929150505600a165627a7a723058202b27988bab4bbb73b18a76853e45265712aadb2a107f3556d8b299da0d5e68120029
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000ec71c55893ee571d2eb8592f0b7b2816c115a4a20000000000000000000000005adc335afa4f6f97d5920996f0f0ff06ace3b998000000000000000000000000000000000000000000000000000000000046151d000000000000000000000000000000000000000000000000000000000046c21d000000000000000000000000000000000000000001743b34e18439b50200000000000000000000000000000000000000000000000001a784379d99db420000000000000000000000000000000000000000000000000000000000000000000190000000000000000000000000000000000000000000000000000000000003c068000000000000000000000000000000000000000000000000000000000021197a
-----Decoded View---------------
Arg [0] : _bcdcMultiSig (address): 0xec71C55893eE571d2Eb8592f0B7b2816c115a4a2
Arg [1] : _upgradeMaster (address): 0x5adc335aFA4f6F97d5920996f0f0fF06ACe3b998
Arg [2] : _fundingStartBlock (uint256): 4592925
Arg [3] : _fundingEndBlock (uint256): 4637213
Arg [4] : _tokenSaleMax (uint256): 450000000000000000000000000
Arg [5] : _tokenSaleMin (uint256): 2000000000000000000000000
Arg [6] : _tokensPerEther (uint256): 400
Arg [7] : _numBlocksLockedForDev (uint256): 245864
Arg [8] : _numBlocksLockedForFounders (uint256): 2169210
-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 000000000000000000000000ec71c55893ee571d2eb8592f0b7b2816c115a4a2
Arg [1] : 0000000000000000000000005adc335afa4f6f97d5920996f0f0ff06ace3b998
Arg [2] : 000000000000000000000000000000000000000000000000000000000046151d
Arg [3] : 000000000000000000000000000000000000000000000000000000000046c21d
Arg [4] : 000000000000000000000000000000000000000001743b34e18439b502000000
Arg [5] : 00000000000000000000000000000000000000000001a784379d99db42000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000190
Arg [7] : 000000000000000000000000000000000000000000000000000000000003c068
Arg [8] : 000000000000000000000000000000000000000000000000000000000021197a
Swarm Source
bzzr://607ad7668db15fb233fe35276b9ccc9d7aee2b531a4511cf275e0580875e8801
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.