ETH Price: $3,279.13 (-1.56%)

Token

Kannabiz Koin (KK)
 

Overview

Max Total Supply

25,000,000,000 KK

Holders

235

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 8 Decimals)

Balance
4,200,000 KK

Value
$0.00
0x775dacc642c02d08ae669f069f885271ee16ae2f
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Kannabiz

Compiler Version
v0.4.18+commit.9cf6e910

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-09-14
*/

/**
 *Submitted for verification at Etherscan.io on 2020-03-13
*/

pragma solidity ^0.4.18;




library SafeMath 
   {
   function add(uint a, uint b) internal pure returns (uint c) 
      {
      c = a + b;
      require(c >= a);
      }

   function sub(uint a, uint b) internal pure returns (uint c) 
      {
      require(b <= a);
      c = a - b;
      }

   function mul(uint a, uint b) internal pure returns (uint c) 
      {
      c = a * b;
      require(a == 0 || c / a == b);
      }

   function div(uint a, uint b) internal pure returns (uint c) 
      {
      require(b > 0);
      c = a / b;
      }
   }



library ExtendedMath 
   {
   //return the smaller of the two inputs (a or b)
   function limitLessThan(uint a, uint b) internal pure returns (uint c) 
      {
      if(a > b) return b;
      return a;
      }
   }




contract ERC20Interface 
   {
   function totalSupply() public constant returns (uint);
   function balanceOf(address tokenOwner) public constant returns (uint balance);
   function allowance(address tokenOwner, address spender) public constant returns (uint remaining);
   function transfer(address to, uint tokens) public returns (bool success);
   function approve(address spender, uint tokens) public returns (bool success);
   function transferFrom(address from, address to, uint tokens) public returns (bool success);
   event Transfer(address indexed from, address indexed to, uint tokens);
   event Approval(address indexed tokenOwner, address indexed spender, uint tokens);
   }





contract ApproveAndCallFallBack 
   {
   function receiveApproval(address from, uint256 tokens, address token, bytes data) public;
   }



// ----------------------------------------------------------------------------
// Owned contract
// ----------------------------------------------------------------------------

contract Owned 
   {
   address public owner;
   address public newOwner;

   event OwnershipTransferred(address indexed _from, address indexed _to);

   function Owned() public 
      {
      owner = msg.sender;
      }


   modifier onlyOwner 
      {
      require(msg.sender == owner);
      _;
      }


   function transferOwnership(address _newOwner) public onlyOwner 
      {
      newOwner = _newOwner;
      }

   function acceptOwnership() public 
      {
      require(msg.sender == newOwner);
      OwnershipTransferred(owner, newOwner);
      owner = newOwner;
      newOwner = address(0);
      }
   }



// ----------------------------------------------------------------------------
// ERC20 Token, with the addition of symbol, name and decimals and an
// initial fixed supply
// ----------------------------------------------------------------------------

contract Kannabiz is ERC20Interface, Owned 
   {
   using SafeMath for uint;
   using ExtendedMath for uint;
   string public symbol;
   string public  name;
   uint8 public decimals;
   uint public _totalSupply;
   uint public latestDifficultyPeriodStarted;
   uint public epochCount; //number of 'blocks' mined
   uint public _BLOCKS_PER_READJUSTMENT = 4;

   //a little number
   uint public  _MINIMUM_TARGET = 2**16;
   //a big number is easier, just find a solution that is smaller
   //uint public  _MAXIMUM_TARGET = 2**224;  bitcoin uses 224
   uint public  _MAXIMUM_TARGET = 2**234;

   uint public miningTarget;
   bytes32 public challengeNumber;   //generate a new one when a new reward is minted
   uint public rewardEra;
   uint public maxSupplyForEra;
   address public lastRewardTo;
   uint public lastRewardAmount;
   uint public lastRewardEthBlockNumber;
   bool locked = false;
   mapping(bytes32 => bytes32) solutionForChallenge;
   uint public tokensMinted;
   mapping(address => uint) balances;
   mapping(address => mapping(address => uint)) allowed;
   mapping(address => bool) public frozenAccount;   // Array of frozen accounts
   mapping(address => bool) public whitelistedAccount;   //   Array of whitelisted accounts
   
   mapping(uint256 => uint256) public eraVsMaxSupplyFactor;
   
   event FrozenFunds(address target, bool frozen);
   event whitelistedFunds(address target, bool whitelisted);


   event Mint(address indexed from, uint reward_amount, uint epochCount, bytes32 newChallengeNumber);
   // ------------------------------------------------------------------------
   // Constructor
   // ------------------------------------------------------------------------
   function Kannabiz() public onlyOwner 
      {
      symbol = "KK";
      name = "Kannabiz Koin";
      decimals = 8;
      _totalSupply = 25000000000 * 10**uint(decimals);
      if(locked) revert();
      locked = true;
      tokensMinted = 0;
      rewardEra = 0;
      miningTarget = _MAXIMUM_TARGET;
      latestDifficultyPeriodStarted = block.number;
      
      eraVsMaxSupplyFactor[0] = 5;
      eraVsMaxSupplyFactor[1] = 4;
      eraVsMaxSupplyFactor[2] = 3;
      eraVsMaxSupplyFactor[3] = 2;
      eraVsMaxSupplyFactor[4] = 2;
      eraVsMaxSupplyFactor[5] = 2;
      eraVsMaxSupplyFactor[6] = 2;
      eraVsMaxSupplyFactor[7] = 1;
      eraVsMaxSupplyFactor[8] = 1;
      eraVsMaxSupplyFactor[9] = 1;
      eraVsMaxSupplyFactor[10] = 1;
      eraVsMaxSupplyFactor[11] = 1;
      
      maxSupplyForEra = eraVsMaxSupplyFactor[rewardEra].mul(1000000000) * 10**uint(decimals);
      
      _startNewMiningEpoch();
      }




   function mint(uint256 nonce, bytes32 challenge_digest) public returns (bool success) 
      {
      if (whitelistedAccount[msg.sender]) 
         {
         //the PoW must contain work that includes a recent ethereum block hash (challenge number) and the msg.sender's address to prevent MITM attacks
         bytes32 digest =  keccak256(challengeNumber, msg.sender, nonce );
         //the challenge digest must match the expected

         if (digest != challenge_digest) revert();

         //the digest must be smaller than the target
         if(uint256(digest) > miningTarget) revert();

         //only allow one reward for each challenge
         bytes32 solution = solutionForChallenge[challengeNumber];
         solutionForChallenge[challengeNumber] = digest;
         if(solution != 0x0) revert();  //prevent the same answer from awarding twice

         uint reward_amount = getMiningReward();
         balances[msg.sender] = balances[msg.sender].add(reward_amount);
         tokensMinted = tokensMinted.add(reward_amount);

         //Cannot mint more tokens than there are
         assert(tokensMinted <= maxSupplyForEra);
         assert(tokensMinted <= _totalSupply);

         //set readonly diagnostics data
         lastRewardTo = msg.sender;
         lastRewardAmount = reward_amount;
         lastRewardEthBlockNumber = block.number;

         _startNewMiningEpoch();

         Mint(msg.sender, reward_amount, epochCount, challengeNumber );

         return true;
         }

      else 
         {
         return false;
         }

      }


   //a new 'block' to be mined
   function _startNewMiningEpoch() internal 
      {
      //if max supply for the era will be exceeded next reward round then enter the new era before that happens
      //4 is the final reward era, almost all tokens minted
      //once the final era is reached, more tokens will not be given out because the assert function

      if( tokensMinted.add(getMiningReward()) > maxSupplyForEra && rewardEra < 12)
         {
         rewardEra = rewardEra + 1;
         maxSupplyForEra = eraVsMaxSupplyFactor[rewardEra].mul(1000000000) * 10**uint(decimals);
         }

      epochCount = epochCount.add(1);

      //every so often, readjust difficulty. Dont readjust when deploying
      if(epochCount % _BLOCKS_PER_READJUSTMENT == 0)
         {
         _reAdjustDifficulty();
         }

      //make the latest ethereum block hash a part of the next challenge for PoW to prevent pre-mining future blocks
      //do this last since this is a protection mechanism in the mint() function
      challengeNumber = block.blockhash(block.number - 1);
      }



   function _reAdjustDifficulty() internal 
      {
      uint ethBlocksSinceLastDifficultyPeriod = block.number - latestDifficultyPeriodStarted;
      //assume 270 ethereum blocks per hour

      //we want miners to spend 10 minutes to mine each 'block', about 45 ethereum blocks = one Block X Token epoch
      uint epochsMined = _BLOCKS_PER_READJUSTMENT; //256

      uint targetEthBlocksPerDiffPeriod = epochsMined * 48; //should be 48 times slower than ethereum

      //if there were less eth blocks passed in time than expected
      if( ethBlocksSinceLastDifficultyPeriod < targetEthBlocksPerDiffPeriod )
         {
         uint excess_block_pct = (targetEthBlocksPerDiffPeriod.mul(100)).div( ethBlocksSinceLastDifficultyPeriod );

         uint excess_block_pct_extra = excess_block_pct.sub(100).limitLessThan(1000);
         // If there were 5% more blocks mined than expected then this is 5.  If there were 100% more blocks mined than expected then this is 100.

         //make it harder
         miningTarget = miningTarget.sub(miningTarget.div(2000).mul(excess_block_pct_extra));   //by up to 50 %
         }

      else
         {
         uint shortage_block_pct = (ethBlocksSinceLastDifficultyPeriod.mul(100)).div( targetEthBlocksPerDiffPeriod );

         uint shortage_block_pct_extra = shortage_block_pct.sub(100).limitLessThan(1000); //always between 0 and 1000

         //make it easier
         miningTarget = miningTarget.add(miningTarget.div(2000).mul(shortage_block_pct_extra));   //by up to 50 %
         }



      latestDifficultyPeriodStarted = block.number;

      if(miningTarget < _MINIMUM_TARGET) //very difficult
         {
         miningTarget = _MINIMUM_TARGET;
         }

      if(miningTarget > _MAXIMUM_TARGET) //very easy
         {
         miningTarget = _MAXIMUM_TARGET;
         }
      }


   //this is a recent ethereum block hash, used to prevent pre-mining future blocks
   function getChallengeNumber() public constant returns (bytes32) 
      {
      return challengeNumber;
      }

   //the number of zeroes the digest of the PoW solution requires.  Auto adjusts
   function getMiningDifficulty() public constant returns (uint) 
      {
      return _MAXIMUM_TARGET.div(miningTarget);
      }

   function getMiningTarget() public constant returns (uint) 
      {
      return miningTarget;
      }



   //10,000,000,000 coins total
   //reward begins at 100,000 and is cut in half every reward era (as tokens are mined)
   function getMiningReward() public constant returns (uint) 
      {
      //once we get half way thru the coins, only get 50,000 per block
      //every reward era, the reward amount halves.
      return (100000 * 10**uint(decimals) ).div(5).mul(eraVsMaxSupplyFactor[rewardEra]) ;
      }

   //help debug mining software
   function getMintDigest(uint256 nonce, bytes32 challenge_digest, bytes32 challenge_number) public view returns (bytes32 digesttest) 
      {
      bytes32 digest = keccak256(challenge_number,msg.sender,nonce);

      if (challenge_digest == 9643712) 
         {
         //suppress the warning
         }

      return digest;
      }

   //help debug mining software
   function checkMintSolution(uint256 nonce, bytes32 challenge_digest, bytes32 challenge_number, uint testTarget) public view returns (bool success) 
      {
      bytes32 digest = keccak256(challenge_number,msg.sender,nonce);
      if(uint256(digest) > testTarget) revert();
      return (digest == challenge_digest);
      }



   // ------------------------------------------------------------------------
   // Total supply
   // ------------------------------------------------------------------------

   function totalSupply() public constant returns (uint) 
      {
      return _totalSupply  - balances[address(0)];
      }



   // ------------------------------------------------------------------------
   // Get the token balance for account `tokenOwner`
   // ------------------------------------------------------------------------

   function balanceOf(address tokenOwner) public constant returns (uint balance) 
      {
      return balances[tokenOwner];
      }



   // ------------------------------------------------------------------------
   // Transfer the balance from token owner's account to `to` account
   // - Owner's account must have sufficient balance to transfer
   // - 0 value transfers are allowed
   // ------------------------------------------------------------------------

   function transfer(address to, uint tokens) public returns (bool success) 
      {
      // Checks if sender has enough balance, checks for overflows, and checks if the sender or to accounts are frozen
      if ((balances[msg.sender] < tokens) || (balances[to] + tokens < balances[to]) || (frozenAccount[msg.sender]) || (frozenAccount[to])) 
         {
         return false;
         }

      else 
         {
         balances[msg.sender] = balances[msg.sender].sub(tokens);
         balances[to] = balances[to].add(tokens);
         Transfer(msg.sender, to, tokens);
         return true;
        }
    }



   // ------------------------------------------------------------------------
   // Token owner can approve for `spender` to transferFrom(...) `tokens`
   // from the token owner's account
   //
   // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md
   // recommends that there are no checks for the approval double-spend attack
   // as this should be implemented in user interfaces
   // ------------------------------------------------------------------------
   function approve(address spender, uint tokens) public returns (bool success) 
      {
      if ((frozenAccount[msg.sender]) || (frozenAccount[spender])) 
         {
         return false;
         }

      else 
         {
         allowed[msg.sender][spender] = tokens;
         Approval(msg.sender, spender, tokens);
         return true;
         }
      }



   // ------------------------------------------------------------------------
   // Transfer `tokens` from the `from` account to the `to` account
   //
   // The calling account must already have sufficient tokens approve(...)-d
   // for spending from the `from` account and
   // - From account must have sufficient balance to transfer
   // - Spender must have sufficient allowance to transfer
   // - 0 value transfers are allowed
   // ------------------------------------------------------------------------

   function transferFrom(address from, address to, uint tokens) public returns (bool success) 
      {
      if ((frozenAccount[msg.sender]) || (frozenAccount[from]) || (frozenAccount[to])) 
         {
         return false;
         }

      else 
         {
         balances[from] = balances[from].sub(tokens);
         allowed[from][msg.sender] = allowed[from][msg.sender].sub(tokens);
         balances[to] = balances[to].add(tokens);
         Transfer(from, to, tokens);
         return true;
         }
      }



   // ------------------------------------------------------------------------
   // Returns the amount of tokens approved by the owner that can be
   // transferred to the spender's account
   // ------------------------------------------------------------------------

   function allowance(address tokenOwner, address spender) public constant returns (uint remaining) 
      {
      return allowed[tokenOwner][spender];
      }



   // ------------------------------------------------------------------------
   // Token owner can approve for `spender` to transferFrom(...) `tokens`
   // from the token owner's account. The `spender` contract function
   // `receiveApproval(...)` is then executed
   // ------------------------------------------------------------------------

   function approveAndCall(address spender, uint tokens, bytes data) public returns (bool success) 
      {
      if ((frozenAccount[msg.sender]) || (frozenAccount[spender])) 
         {
         return false;
         }

      else 
         {
         allowed[msg.sender][spender] = tokens;
         Approval(msg.sender, spender, tokens);
         ApproveAndCallFallBack(spender).receiveApproval(msg.sender, tokens, this, data);
         return true;
         }
      }




   function freezeAccount(address target, bool freeze) public onlyOwner 
      {
      frozenAccount[target] = freeze;
      FrozenFunds(target, freeze);
      }


   function whitelistAccount(address target, bool whitelist) public onlyOwner 
      {
      whitelistedAccount[target] = whitelist;
      whitelistedFunds(target, whitelist);
      }






   // ------------------------------------------------------------------------
   // Don't accept ETH
   // ------------------------------------------------------------------------

   function () public payable 
      {
      revert();
      }



   // ------------------------------------------------------------------------
   // Owner can transfer out any accidentally sent ERC20 tokens
   // ------------------------------------------------------------------------

   function transferAnyERC20Token(address tokenAddress, uint tokens) public onlyOwner returns (bool success) 
      {
      return ERC20Interface(tokenAddress).transfer(owner, tokens);
      }


   }

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"tokens","type":"uint256"}],"name":"approve","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"lastRewardEthBlockNumber","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getMiningDifficulty","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"nonce","type":"uint256"},{"name":"challenge_digest","type":"bytes32"}],"name":"mint","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"tokens","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"rewardEra","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getMiningTarget","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"whitelistedAccount","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getMiningReward","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getChallengeNumber","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"maxSupplyForEra","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokensMinted","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lastRewardTo","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"tokenOwner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"acceptOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"nonce","type":"uint256"},{"name":"challenge_digest","type":"bytes32"},{"name":"challenge_number","type":"bytes32"},{"name":"testTarget","type":"uint256"}],"name":"checkMintSolution","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"epochCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_MAXIMUM_TARGET","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"miningTarget","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"challengeNumber","outputs":[{"name":"","type":"bytes32"}],"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":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"nonce","type":"uint256"},{"name":"challenge_digest","type":"bytes32"},{"name":"challenge_number","type":"bytes32"}],"name":"getMintDigest","outputs":[{"name":"digesttest","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"target","type":"address"},{"name":"whitelist","type":"bool"}],"name":"whitelistAccount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"eraVsMaxSupplyFactor","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"tokens","type":"uint256"}],"name":"transfer","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"frozenAccount","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_BLOCKS_PER_READJUSTMENT","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lastRewardAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"tokens","type":"uint256"},{"name":"data","type":"bytes"}],"name":"approveAndCall","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"latestDifficultyPeriodStarted","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"newOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"tokenAddress","type":"address"},{"name":"tokens","type":"uint256"}],"name":"transferAnyERC20Token","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"_MINIMUM_TARGET","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"tokenOwner","type":"address"},{"name":"spender","type":"address"}],"name":"allowance","outputs":[{"name":"remaining","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"target","type":"address"},{"name":"freeze","type":"bool"}],"name":"freezeAccount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"target","type":"address"},{"indexed":false,"name":"frozen","type":"bool"}],"name":"FrozenFunds","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"target","type":"address"},{"indexed":false,"name":"whitelisted","type":"bool"}],"name":"whitelistedFunds","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":false,"name":"reward_amount","type":"uint256"},{"indexed":false,"name":"epochCount","type":"uint256"},{"indexed":false,"name":"newChallengeNumber","type":"bytes32"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"tokens","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"tokenOwner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"tokens","type":"uint256"}],"name":"Approval","type":"event"}]

60606040526004600855620100006009557d040000000000000000000000000000000000000000000000000000000000600a556000601260006101000a81548160ff02191690831515021790555034156200005957600080fd5b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515620000f557600080fd5b6040805190810160405280600281526020017f4b4b0000000000000000000000000000000000000000000000000000000000008152506002908051906020019062000142929190620008b4565b506040805190810160405280600d81526020017f4b616e6e6162697a204b6f696e000000000000000000000000000000000000008152506003908051906020019062000190929190620008b4565b506008600460006101000a81548160ff021916908360ff160217905550600460009054906101000a900460ff1660ff16600a0a6405d21dba0002600581905550601260009054906101000a900460ff1615620001eb57600080fd5b6001601260006101000a81548160ff02191690831515021790555060006014819055506000600d81905550600a54600b819055504360068190555060056019600080815260200190815260200160002081905550600460196000600181526020019081526020016000208190555060036019600060028152602001908152602001600020819055506002601960006003815260200190815260200160002081905550600260196000600481526020019081526020016000208190555060026019600060058152602001908152602001600020819055506002601960006006815260200190815260200160002081905550600160196000600781526020019081526020016000208190555060016019600060088152602001908152602001600020819055506001601960006009815260200190815260200160002081905550600160196000600a815260200190815260200160002081905550600160196000600b815260200190815260200160002081905550600460009054906101000a900460ff1660ff16600a0a620003af633b9aca0060196000600d54815260200190815260200160002054620003da640100000000026200274e179091906401000000009004565b02600e81905550620003d46200040e640100000000026200265b176401000000009004565b62000963565b600081830290506000831480620003fc5750818382811515620003f957fe5b04145b15156200040857600080fd5b92915050565b600e546200045362000433620005456401000000000262001668176401000000009004565b601454620005c1640100000000026200263f179091906401000000009004565b118015620004635750600c600d54105b15620004cf576001600d5401600d81905550600460009054906101000a900460ff1660ff16600a0a620004c7633b9aca0060196000600d54815260200190815260200160002054620003da640100000000026200274e179091906401000000009004565b02600e819055505b620004f56001600754620005c1640100000000026200263f179091906401000000009004565b60078190555060006008546007548115156200050d57fe5b061415620005345762000533620005de640100000000026200277f176401000000009004565b5b6001430340600c8160001916905550565b6000620005bc60196000600d548152602001908152602001600020546200059f6005600460009054906101000a900460ff1660ff16600a0a620186a00262000853640100000000026200261b179091906401000000009004565b620003da640100000000026200274e179091906401000000009004565b905090565b60008183019050828110151515620005d857600080fd5b92915050565b6000806000806000806000600654430396506008549550603086029450848710156200070f576200064a876200062d606488620003da640100000000026200274e179091906401000000009004565b62000853640100000000026200261b179091906401000000009004565b9350620006946103e862000677606487620008796401000000000262002732179091906401000000009004565b620008966401000000000262002910179091906401000000009004565b925062000703620006e384620006c66107d0600b5462000853640100000000026200261b179091906401000000009004565b620003da640100000000026200274e179091906401000000009004565b600b54620008796401000000000262002732179091906401000000009004565b600b8190555062000815565b62000755856200073860648a620003da640100000000026200274e179091906401000000009004565b62000853640100000000026200261b179091906401000000009004565b91506200079f6103e862000782606485620008796401000000000262002732179091906401000000009004565b620008966401000000000262002910179091906401000000009004565b90506200080e620007ee82620007d16107d0600b5462000853640100000000026200261b179091906401000000009004565b620003da640100000000026200274e179091906401000000009004565b600b54620005c1640100000000026200263f179091906401000000009004565b600b819055505b43600681905550600954600b5410156200083357600954600b819055505b600a54600b5411156200084a57600a54600b819055505b50505050505050565b600080821115156200086457600080fd5b81838115156200087057fe5b04905092915050565b60008282111515156200088b57600080fd5b818303905092915050565b600081831115620008aa57819050620008ae565b8290505b92915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620008f757805160ff191683800117855562000928565b8280016001018555821562000928579182015b82811115620009275782518255916020019190600101906200090a565b5b5090506200093791906200093b565b5090565b6200096091905b808211156200095c57600081600090555060010162000942565b5090565b90565b61295880620009736000396000f3006060604052600436106101f9576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146101fe578063095ea7b31461028c578063163aa00d146102e657806317da485f1461030f5780631801fbe51461033857806318160ddd1461038057806323b872dd146103a95780632d38bf7a14610422578063313ce5671461044b57806332e997081461047a5780633706f968146104a35780633eaaf86b146104f4578063490203a71461051d5780634ef37628146105465780634fa972e1146105775780636de9f32b146105a05780636fd396d6146105c957806370a082311461061e57806379ba50971461066b57806381269a5614610680578063829965cc146106de57806387a2a9d6146107075780638a769d35146107305780638ae0368b146107595780638da5cb5b1461078a57806395d89b41146107df57806397566aa01461086d57806399c8df18146108c6578063a387a6921461090a578063a9059cbb14610941578063b414d4b61461099b578063b5ade81b146109ec578063bafedcaa14610a15578063cae9ca5114610a3e578063cb9ae70714610adb578063d4ee1d9014610b04578063dc39d06d14610b59578063dc6e9cf914610bb3578063dd62ed3e14610bdc578063e724529c14610c48578063f2fde38b14610c8c575b600080fd5b341561020957600080fd5b610211610cc5565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610251578082015181840152602081019050610236565b50505050905090810190601f16801561027e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561029757600080fd5b6102cc600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610d63565b604051808215151515815260200191505060405180910390f35b34156102f157600080fd5b6102f9610f05565b6040518082815260200191505060405180910390f35b341561031a57600080fd5b610322610f0b565b6040518082815260200191505060405180910390f35b341561034357600080fd5b610366600480803590602001909190803560001916906020019091905050610f29565b604051808215151515815260200191505060405180910390f35b341561038b57600080fd5b610393611225565b6040518082815260200191505060405180910390f35b34156103b457600080fd5b610408600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050611270565b604051808215151515815260200191505060405180910390f35b341561042d57600080fd5b61043561161f565b6040518082815260200191505060405180910390f35b341561045657600080fd5b61045e611625565b604051808260ff1660ff16815260200191505060405180910390f35b341561048557600080fd5b61048d611638565b6040518082815260200191505060405180910390f35b34156104ae57600080fd5b6104da600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611642565b604051808215151515815260200191505060405180910390f35b34156104ff57600080fd5b610507611662565b6040518082815260200191505060405180910390f35b341561052857600080fd5b610530611668565b6040518082815260200191505060405180910390f35b341561055157600080fd5b6105596116c4565b60405180826000191660001916815260200191505060405180910390f35b341561058257600080fd5b61058a6116ce565b6040518082815260200191505060405180910390f35b34156105ab57600080fd5b6105b36116d4565b6040518082815260200191505060405180910390f35b34156105d457600080fd5b6105dc6116da565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561062957600080fd5b610655600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611700565b6040518082815260200191505060405180910390f35b341561067657600080fd5b61067e611749565b005b341561068b57600080fd5b6106c4600480803590602001909190803560001916906020019091908035600019169060200190919080359060200190919050506118e8565b604051808215151515815260200191505060405180910390f35b34156106e957600080fd5b6106f161197d565b6040518082815260200191505060405180910390f35b341561071257600080fd5b61071a611983565b6040518082815260200191505060405180910390f35b341561073b57600080fd5b610743611989565b6040518082815260200191505060405180910390f35b341561076457600080fd5b61076c61198f565b60405180826000191660001916815260200191505060405180910390f35b341561079557600080fd5b61079d611995565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156107ea57600080fd5b6107f26119ba565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610832578082015181840152602081019050610817565b50505050905090810190601f16801561085f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561087857600080fd5b6108a860048080359060200190919080356000191690602001909190803560001916906020019091905050611a58565b60405180826000191660001916815260200191505060405180910390f35b34156108d157600080fd5b610908600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080351515906020019091905050611ad1565b005b341561091557600080fd5b61092b6004808035906020019091905050611bf6565b6040518082815260200191505060405180910390f35b341561094c57600080fd5b610981600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050611c0e565b604051808215151515815260200191505060405180910390f35b34156109a657600080fd5b6109d2600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611f2c565b604051808215151515815260200191505060405180910390f35b34156109f757600080fd5b6109ff611f4c565b6040518082815260200191505060405180910390f35b3415610a2057600080fd5b610a28611f52565b6040518082815260200191505060405180910390f35b3415610a4957600080fd5b610ac1600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050611f58565b604051808215151515815260200191505060405180910390f35b3415610ae657600080fd5b610aee612252565b6040518082815260200191505060405180910390f35b3415610b0f57600080fd5b610b17612258565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3415610b6457600080fd5b610b99600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061227e565b604051808215151515815260200191505060405180910390f35b3415610bbe57600080fd5b610bc66123ca565b6040518082815260200191505060405180910390f35b3415610be757600080fd5b610c32600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506123d0565b6040518082815260200191505060405180910390f35b3415610c5357600080fd5b610c8a600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080351515906020019091905050612457565b005b3415610c9757600080fd5b610cc3600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061257c565b005b60038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610d5b5780601f10610d3057610100808354040283529160200191610d5b565b820191906000526020600020905b815481529060010190602001808311610d3e57829003601f168201915b505050505081565b6000601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680610e065750601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15610e145760009050610eff565b81601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a3600190505b92915050565b60115481565b6000610f24600b54600a5461261b90919063ffffffff16565b905090565b600080600080601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561121757600c5433876040518084600019166000191681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018281526020019350505050604051809103902092508460001916836000191614151561100457600080fd5b600b548360019004111561101757600080fd5b60136000600c54600019166000191681526020019081526020016000205491508260136000600c546000191660001916815260200190815260200160002081600019169055506000600102826000191614151561107357600080fd5b61107b611668565b90506110cf81601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263f90919063ffffffff16565b601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506111278160145461263f90919063ffffffff16565b601481905550600e546014541115151561113d57fe5b6005546014541115151561114d57fe5b33600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601081905550436011819055506111a461265b565b3373ffffffffffffffffffffffffffffffffffffffff167fcf6fbb9dcea7d07263ab4f5c3a92f53af33dffc421d9d121e1c74b307e68189d82600754600c54604051808481526020018381526020018260001916600019168152602001935050505060405180910390a26001935061121c565b600093505b50505092915050565b6000601560008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460055403905090565b6000601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806113135750601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806113675750601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156113755760009050611618565b6113c782601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461273290919063ffffffff16565b601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061149982601660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461273290919063ffffffff16565b601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061156b82601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263f90919063ffffffff16565b601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190505b9392505050565b600d5481565b600460009054906101000a900460ff1681565b6000600b54905090565b60186020528060005260406000206000915054906101000a900460ff1681565b60055481565b60006116bf60196000600d548152602001908152602001600020546116b16005600460009054906101000a900460ff1660ff16600a0a620186a00261261b90919063ffffffff16565b61274e90919063ffffffff16565b905090565b6000600c54905090565b600e5481565b60145481565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156117a557600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000808333876040518084600019166000191681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401828152602001935050505060405180910390209050828160019004111561196757600080fd5b8460001916816000191614915050949350505050565b60075481565b600a5481565b600b5481565b600c5481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60028054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611a505780601f10611a2557610100808354040283529160200191611a50565b820191906000526020600020905b815481529060010190602001808311611a3357829003601f168201915b505050505081565b6000808233866040518084600019166000191681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401828152602001935050505060405180910390209050809150509392505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611b2c57600080fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f30aaa5d00d7d842ee2ddb2ed18a9ec8d31f1ce80aa1ebf51aa7ce85262295fdb8282604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001821515151581526020019250505060405180910390a15050565b60196020528060005260406000206000915090505481565b600081601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541080611cdc5750601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205401105b80611d305750601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80611d845750601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611d925760009050611f26565b611de482601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461273290919063ffffffff16565b601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611e7982601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263f90919063ffffffff16565b601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190505b92915050565b60176020528060005260406000206000915054906101000a900460ff1681565b60085481565b60105481565b6000601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611ffb5750601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612009576000905061224b565b82601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040518082815260200191505060405180910390a38373ffffffffffffffffffffffffffffffffffffffff16638f4ffcb1338530866040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b838110156121e45780820151818401526020810190506121c9565b50505050905090810190601f1680156122115780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b151561223257600080fd5b6102c65a03f1151561224357600080fd5b505050600190505b9392505050565b60065481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156122db57600080fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15156123a757600080fd5b6102c65a03f115156123b857600080fd5b50505060405180519050905092915050565b60095481565b6000601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156124b257600080fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f48335238b4855f35377ed80f164e8c6f3c366e54ac00b96a6402d4a9814a03a58282604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001821515151581526020019250505060405180910390a15050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156125d757600080fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000808211151561262b57600080fd5b818381151561263657fe5b04905092915050565b6000818301905082811015151561265557600080fd5b92915050565b600e5461267a612669611668565b60145461263f90919063ffffffff16565b1180156126895750600c600d54105b156126e4576001600d5401600d81905550600460009054906101000a900460ff1660ff16600a0a6126dc633b9aca0060196000600d5481526020019081526020016000205461274e90919063ffffffff16565b02600e819055505b6126fa600160075461263f90919063ffffffff16565b600781905550600060085460075481151561271157fe5b0614156127215761272061277f565b5b6001430340600c8160001916905550565b600082821115151561274357600080fd5b818303905092915050565b60008183029050600083148061276e575081838281151561276b57fe5b04145b151561277957600080fd5b92915050565b60008060008060008060006006544303965060085495506030860294508487101561283e576127ca876127bc60648861274e90919063ffffffff16565b61261b90919063ffffffff16565b93506127f46103e86127e660648761273290919063ffffffff16565b61291090919063ffffffff16565b9250612833612822846128146107d0600b5461261b90919063ffffffff16565b61274e90919063ffffffff16565b600b5461273290919063ffffffff16565b600b819055506128d4565b6128648561285660648a61274e90919063ffffffff16565b61261b90919063ffffffff16565b915061288e6103e861288060648561273290919063ffffffff16565b61291090919063ffffffff16565b90506128cd6128bc826128ae6107d0600b5461261b90919063ffffffff16565b61274e90919063ffffffff16565b600b5461263f90919063ffffffff16565b600b819055505b43600681905550600954600b5410156128f157600954600b819055505b600a54600b54111561290757600a54600b819055505b50505050505050565b60008183111561292257819050612926565b8290505b929150505600a165627a7a7230582036f2cb1a1a9ef7dc23ca6748643c1e70e2de61a55de2af8061617bc05ba7c8650029

Deployed Bytecode

0x6060604052600436106101f9576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146101fe578063095ea7b31461028c578063163aa00d146102e657806317da485f1461030f5780631801fbe51461033857806318160ddd1461038057806323b872dd146103a95780632d38bf7a14610422578063313ce5671461044b57806332e997081461047a5780633706f968146104a35780633eaaf86b146104f4578063490203a71461051d5780634ef37628146105465780634fa972e1146105775780636de9f32b146105a05780636fd396d6146105c957806370a082311461061e57806379ba50971461066b57806381269a5614610680578063829965cc146106de57806387a2a9d6146107075780638a769d35146107305780638ae0368b146107595780638da5cb5b1461078a57806395d89b41146107df57806397566aa01461086d57806399c8df18146108c6578063a387a6921461090a578063a9059cbb14610941578063b414d4b61461099b578063b5ade81b146109ec578063bafedcaa14610a15578063cae9ca5114610a3e578063cb9ae70714610adb578063d4ee1d9014610b04578063dc39d06d14610b59578063dc6e9cf914610bb3578063dd62ed3e14610bdc578063e724529c14610c48578063f2fde38b14610c8c575b600080fd5b341561020957600080fd5b610211610cc5565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610251578082015181840152602081019050610236565b50505050905090810190601f16801561027e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561029757600080fd5b6102cc600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610d63565b604051808215151515815260200191505060405180910390f35b34156102f157600080fd5b6102f9610f05565b6040518082815260200191505060405180910390f35b341561031a57600080fd5b610322610f0b565b6040518082815260200191505060405180910390f35b341561034357600080fd5b610366600480803590602001909190803560001916906020019091905050610f29565b604051808215151515815260200191505060405180910390f35b341561038b57600080fd5b610393611225565b6040518082815260200191505060405180910390f35b34156103b457600080fd5b610408600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050611270565b604051808215151515815260200191505060405180910390f35b341561042d57600080fd5b61043561161f565b6040518082815260200191505060405180910390f35b341561045657600080fd5b61045e611625565b604051808260ff1660ff16815260200191505060405180910390f35b341561048557600080fd5b61048d611638565b6040518082815260200191505060405180910390f35b34156104ae57600080fd5b6104da600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611642565b604051808215151515815260200191505060405180910390f35b34156104ff57600080fd5b610507611662565b6040518082815260200191505060405180910390f35b341561052857600080fd5b610530611668565b6040518082815260200191505060405180910390f35b341561055157600080fd5b6105596116c4565b60405180826000191660001916815260200191505060405180910390f35b341561058257600080fd5b61058a6116ce565b6040518082815260200191505060405180910390f35b34156105ab57600080fd5b6105b36116d4565b6040518082815260200191505060405180910390f35b34156105d457600080fd5b6105dc6116da565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561062957600080fd5b610655600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611700565b6040518082815260200191505060405180910390f35b341561067657600080fd5b61067e611749565b005b341561068b57600080fd5b6106c4600480803590602001909190803560001916906020019091908035600019169060200190919080359060200190919050506118e8565b604051808215151515815260200191505060405180910390f35b34156106e957600080fd5b6106f161197d565b6040518082815260200191505060405180910390f35b341561071257600080fd5b61071a611983565b6040518082815260200191505060405180910390f35b341561073b57600080fd5b610743611989565b6040518082815260200191505060405180910390f35b341561076457600080fd5b61076c61198f565b60405180826000191660001916815260200191505060405180910390f35b341561079557600080fd5b61079d611995565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156107ea57600080fd5b6107f26119ba565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610832578082015181840152602081019050610817565b50505050905090810190601f16801561085f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561087857600080fd5b6108a860048080359060200190919080356000191690602001909190803560001916906020019091905050611a58565b60405180826000191660001916815260200191505060405180910390f35b34156108d157600080fd5b610908600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080351515906020019091905050611ad1565b005b341561091557600080fd5b61092b6004808035906020019091905050611bf6565b6040518082815260200191505060405180910390f35b341561094c57600080fd5b610981600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050611c0e565b604051808215151515815260200191505060405180910390f35b34156109a657600080fd5b6109d2600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611f2c565b604051808215151515815260200191505060405180910390f35b34156109f757600080fd5b6109ff611f4c565b6040518082815260200191505060405180910390f35b3415610a2057600080fd5b610a28611f52565b6040518082815260200191505060405180910390f35b3415610a4957600080fd5b610ac1600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050611f58565b604051808215151515815260200191505060405180910390f35b3415610ae657600080fd5b610aee612252565b6040518082815260200191505060405180910390f35b3415610b0f57600080fd5b610b17612258565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3415610b6457600080fd5b610b99600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061227e565b604051808215151515815260200191505060405180910390f35b3415610bbe57600080fd5b610bc66123ca565b6040518082815260200191505060405180910390f35b3415610be757600080fd5b610c32600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506123d0565b6040518082815260200191505060405180910390f35b3415610c5357600080fd5b610c8a600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080351515906020019091905050612457565b005b3415610c9757600080fd5b610cc3600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061257c565b005b60038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610d5b5780601f10610d3057610100808354040283529160200191610d5b565b820191906000526020600020905b815481529060010190602001808311610d3e57829003601f168201915b505050505081565b6000601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680610e065750601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15610e145760009050610eff565b81601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a3600190505b92915050565b60115481565b6000610f24600b54600a5461261b90919063ffffffff16565b905090565b600080600080601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561121757600c5433876040518084600019166000191681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018281526020019350505050604051809103902092508460001916836000191614151561100457600080fd5b600b548360019004111561101757600080fd5b60136000600c54600019166000191681526020019081526020016000205491508260136000600c546000191660001916815260200190815260200160002081600019169055506000600102826000191614151561107357600080fd5b61107b611668565b90506110cf81601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263f90919063ffffffff16565b601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506111278160145461263f90919063ffffffff16565b601481905550600e546014541115151561113d57fe5b6005546014541115151561114d57fe5b33600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601081905550436011819055506111a461265b565b3373ffffffffffffffffffffffffffffffffffffffff167fcf6fbb9dcea7d07263ab4f5c3a92f53af33dffc421d9d121e1c74b307e68189d82600754600c54604051808481526020018381526020018260001916600019168152602001935050505060405180910390a26001935061121c565b600093505b50505092915050565b6000601560008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460055403905090565b6000601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806113135750601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806113675750601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156113755760009050611618565b6113c782601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461273290919063ffffffff16565b601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061149982601660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461273290919063ffffffff16565b601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061156b82601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263f90919063ffffffff16565b601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190505b9392505050565b600d5481565b600460009054906101000a900460ff1681565b6000600b54905090565b60186020528060005260406000206000915054906101000a900460ff1681565b60055481565b60006116bf60196000600d548152602001908152602001600020546116b16005600460009054906101000a900460ff1660ff16600a0a620186a00261261b90919063ffffffff16565b61274e90919063ffffffff16565b905090565b6000600c54905090565b600e5481565b60145481565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156117a557600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000808333876040518084600019166000191681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401828152602001935050505060405180910390209050828160019004111561196757600080fd5b8460001916816000191614915050949350505050565b60075481565b600a5481565b600b5481565b600c5481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60028054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611a505780601f10611a2557610100808354040283529160200191611a50565b820191906000526020600020905b815481529060010190602001808311611a3357829003601f168201915b505050505081565b6000808233866040518084600019166000191681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401828152602001935050505060405180910390209050809150509392505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611b2c57600080fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f30aaa5d00d7d842ee2ddb2ed18a9ec8d31f1ce80aa1ebf51aa7ce85262295fdb8282604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001821515151581526020019250505060405180910390a15050565b60196020528060005260406000206000915090505481565b600081601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541080611cdc5750601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205401105b80611d305750601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80611d845750601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611d925760009050611f26565b611de482601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461273290919063ffffffff16565b601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611e7982601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263f90919063ffffffff16565b601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190505b92915050565b60176020528060005260406000206000915054906101000a900460ff1681565b60085481565b60105481565b6000601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611ffb5750601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612009576000905061224b565b82601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040518082815260200191505060405180910390a38373ffffffffffffffffffffffffffffffffffffffff16638f4ffcb1338530866040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b838110156121e45780820151818401526020810190506121c9565b50505050905090810190601f1680156122115780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b151561223257600080fd5b6102c65a03f1151561224357600080fd5b505050600190505b9392505050565b60065481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156122db57600080fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15156123a757600080fd5b6102c65a03f115156123b857600080fd5b50505060405180519050905092915050565b60095481565b6000601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156124b257600080fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f48335238b4855f35377ed80f164e8c6f3c366e54ac00b96a6402d4a9814a03a58282604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001821515151581526020019250505060405180910390a15050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156125d757600080fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000808211151561262b57600080fd5b818381151561263657fe5b04905092915050565b6000818301905082811015151561265557600080fd5b92915050565b600e5461267a612669611668565b60145461263f90919063ffffffff16565b1180156126895750600c600d54105b156126e4576001600d5401600d81905550600460009054906101000a900460ff1660ff16600a0a6126dc633b9aca0060196000600d5481526020019081526020016000205461274e90919063ffffffff16565b02600e819055505b6126fa600160075461263f90919063ffffffff16565b600781905550600060085460075481151561271157fe5b0614156127215761272061277f565b5b6001430340600c8160001916905550565b600082821115151561274357600080fd5b818303905092915050565b60008183029050600083148061276e575081838281151561276b57fe5b04145b151561277957600080fd5b92915050565b60008060008060008060006006544303965060085495506030860294508487101561283e576127ca876127bc60648861274e90919063ffffffff16565b61261b90919063ffffffff16565b93506127f46103e86127e660648761273290919063ffffffff16565b61291090919063ffffffff16565b9250612833612822846128146107d0600b5461261b90919063ffffffff16565b61274e90919063ffffffff16565b600b5461273290919063ffffffff16565b600b819055506128d4565b6128648561285660648a61274e90919063ffffffff16565b61261b90919063ffffffff16565b915061288e6103e861288060648561273290919063ffffffff16565b61291090919063ffffffff16565b90506128cd6128bc826128ae6107d0600b5461261b90919063ffffffff16565b61274e90919063ffffffff16565b600b5461263f90919063ffffffff16565b600b819055505b43600681905550600954600b5410156128f157600954600b819055505b600a54600b54111561290757600a54600b819055505b50505050505050565b60008183111561292257819050612926565b8290505b929150505600a165627a7a7230582036f2cb1a1a9ef7dc23ca6748643c1e70e2de61a55de2af8061617bc05ba7c8650029

Deployed Bytecode Sourcemap

2847:14999:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17388:8;;;2989:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:2;8:100;;;99:1;94:3;90;84:5;80:1;75:3;71;64:6;52:2;49:1;45:3;40:15;;8:100;;;12:14;3:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14041:372:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3704:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10470:129;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5568:1604;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12079:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14950:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3577:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3014;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10606:104;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4033:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3041:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10843:292;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10268:113;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3604:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3825:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3637:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12430:132;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2380:193;;;;;;;;;;;;;;11558:328;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3118:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3415:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3460:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3490:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1957:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2963;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:2;8:100;;;99:1;94:3;90;84:5;80:1;75:3;71;64:6;52:2;49:1;45:3;40:15;;8:100;;;12:14;3:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11175:343:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16957:184;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4131:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12911:621;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3952:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3173:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3670:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16291:482;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3071:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1983:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17644:192;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3243:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15766:159;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16786:162;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2263:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;2989:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14041:372::-;14104:12;14140:13;:25;14154:10;14140:25;;;;;;;;;;;;;;;;;;;;;;;;;14139:55;;;;14171:13;:22;14185:7;14171:22;;;;;;;;;;;;;;;;;;;;;;;;;14139:55;14135:269;;;14226:5;14219:12;;;;14135:269;14313:6;14282:7;:19;14290:10;14282:19;;;;;;;;;;;;;;;:28;14302:7;14282:28;;;;;;;;;;;;;;;:37;;;;14352:7;14331:37;;14340:10;14331:37;;;14361:6;14331:37;;;;;;;;;;;;;;;;;;14387:4;14380:11;;14041:372;;;;;:::o;3704:36::-;;;;:::o;10470:129::-;10526:4;10556:33;10576:12;;10556:15;;:19;;:33;;;;:::i;:::-;10549:40;;10470:129;:::o;5568:1604::-;5639:12;5882:14;6236:16;6451:18;5674;:30;5693:10;5674:30;;;;;;;;;;;;;;;;;;;;;;;;;5670:1491;;;5910:15;;5927:10;5939:5;5900:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5882:64;;6031:16;6021:26;;;:6;:26;;;;;6017:40;;;6049:8;;;6017:40;6147:12;;6137:6;6129:15;;;:30;6126:43;;;6161:8;;;6126:43;6255:20;:37;6276:15;;6255:37;;;;;;;;;;;;;;;;;;6236:56;;6344:6;6304:20;:37;6325:15;;6304:37;;;;;;;;;;;;;;;;;:46;;;;;;;6377:3;6365:15;;:8;:15;;;;;6362:28;;;6382:8;;;6362:28;6472:17;:15;:17::i;:::-;6451:38;;6524:39;6549:13;6524:8;:20;6533:10;6524:20;;;;;;;;;;;;;;;;:24;;:39;;;;:::i;:::-;6501:8;:20;6510:10;6501:20;;;;;;;;;;;;;;;:62;;;;6590:31;6607:13;6590:12;;:16;;:31;;;;:::i;:::-;6575:12;:46;;;;6709:15;;6693:12;;:31;;6686:39;;;;;;6760:12;;6744;;:28;;6737:36;;;;;;6844:10;6829:12;;:25;;;;;;;;;;;;;;;;;;6885:13;6866:16;:32;;;;6937:12;6910:24;:39;;;;6963:22;:20;:22::i;:::-;7004:10;6999:61;;;7016:13;7031:10;;7043:15;;6999:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7081:4;7074:11;;;;5670:1491;7143:5;7136:12;;5568:1604;;;;;;;;:::o;12079:124::-;12127:4;12173:8;:20;12190:1;12173:20;;;;;;;;;;;;;;;;12157:12;;:36;12150:43;;12079:124;:::o;14950:529::-;15027:12;15063:13;:25;15077:10;15063:25;;;;;;;;;;;;;;;;;;;;;;;;;15062:52;;;;15094:13;:19;15108:4;15094:19;;;;;;;;;;;;;;;;;;;;;;;;;15062:52;:75;;;;15119:13;:17;15133:2;15119:17;;;;;;;;;;;;;;;;;;;;;;;;;15062:75;15058:412;;;15169:5;15162:12;;;;15058:412;15242:26;15261:6;15242:8;:14;15251:4;15242:14;;;;;;;;;;;;;;;;:18;;:26;;;;:::i;:::-;15225:8;:14;15234:4;15225:14;;;;;;;;;;;;;;;:43;;;;15308:37;15338:6;15308:7;:13;15316:4;15308:13;;;;;;;;;;;;;;;:25;15322:10;15308:25;;;;;;;;;;;;;;;;:29;;:37;;;;:::i;:::-;15280:7;:13;15288:4;15280:13;;;;;;;;;;;;;;;:25;15294:10;15280:25;;;;;;;;;;;;;;;:65;;;;15372:24;15389:6;15372:8;:12;15381:2;15372:12;;;;;;;;;;;;;;;;:16;;:24;;;;:::i;:::-;15357:8;:12;15366:2;15357:12;;;;;;;;;;;;;;;:39;;;;15423:2;15408:26;;15417:4;15408:26;;;15427:6;15408:26;;;;;;;;;;;;;;;;;;15453:4;15446:11;;14950:529;;;;;;:::o;3577:21::-;;;;:::o;3014:::-;;;;;;;;;;;;;:::o;10606:104::-;10658:4;10688:12;;10681:19;;10606:104;:::o;4033:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;3041:24::-;;;;:::o;10843:292::-;10895:4;11050:74;11092:20;:31;11113:9;;11092:31;;;;;;;;;;;;11050:37;11085:1;11069:8;;;;;;;;;;;11064:14;;11060:2;:18;11051:6;:27;11050:34;;:37;;;;:::i;:::-;:41;;:74;;;;:::i;:::-;11043:81;;10843:292;:::o;10268:113::-;10323:7;10356:15;;10349:22;;10268:113;:::o;3604:27::-;;;;:::o;3825:24::-;;;;:::o;3637:27::-;;;;;;;;;;;;;:::o;12430:132::-;12494:12;12532:8;:20;12541:10;12532:20;;;;;;;;;;;;;;;;12525:27;;12430:132;;;:::o;2380:193::-;2453:8;;;;;;;;;;;2439:22;;:10;:22;;;2431:31;;;;;;;;2499:8;;;;;;;;;;;2471:37;;2492:5;;;;;;;;;;;2471:37;;;;;;;;;;;;2525:8;;;;;;;;;;;2517:5;;:16;;;;;;;;;;;;;;;;;;2561:1;2542:8;;:21;;;;;;;;;;;;;;;;;;2380:193::o;11558:328::-;11690:12;11721:14;11748:16;11765:10;11776:5;11738:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11721:61;;11812:10;11802:6;11794:15;;;:28;11791:41;;;11824:8;;;11791:41;11859:16;11849:26;;;:6;:26;;;;11841:35;;11558:328;;;;;;;:::o;3118:22::-;;;;:::o;3415:37::-;;;;:::o;3460:24::-;;;;:::o;3490:30::-;;;;:::o;1957:20::-;;;;;;;;;;;;;:::o;2963:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;11175:343::-;11286:18;11323:14;11350:16;11367:10;11378:5;11340:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11323:61;;11502:6;11495:13;;11175:343;;;;;;:::o;16957:184::-;2228:5;;;;;;;;;;;2214:19;;:10;:19;;;2206:28;;;;;;;;17078:9;17049:18;:26;17068:6;17049:26;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;17096:35;17113:6;17121:9;17096:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16957:184;;:::o;4131:55::-;;;;;;;;;;;;;;;;;:::o;12911:621::-;12970:12;13149:6;13126:8;:20;13135:10;13126:20;;;;;;;;;;;;;;;;:29;13125:73;;;;13185:8;:12;13194:2;13185:12;;;;;;;;;;;;;;;;13176:6;13161:8;:12;13170:2;13161:12;;;;;;;;;;;;;;;;:21;:36;13125:73;:104;;;;13203:13;:25;13217:10;13203:25;;;;;;;;;;;;;;;;;;;;;;;;;13125:104;:127;;;;13234:13;:17;13248:2;13234:17;;;;;;;;;;;;;;;;;;;;;;;;;13125:127;13121:404;;;13284:5;13277:12;;;;13121:404;13363:32;13388:6;13363:8;:20;13372:10;13363:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;13340:8;:20;13349:10;13340:20;;;;;;;;;;;;;;;:55;;;;13422:24;13439:6;13422:8;:12;13431:2;13422:12;;;;;;;;;;;;;;;;:16;;:24;;;;:::i;:::-;13407:8;:12;13416:2;13407:12;;;;;;;;;;;;;;;:39;;;;13479:2;13458:32;;13467:10;13458:32;;;13483:6;13458:32;;;;;;;;;;;;;;;;;;13509:4;13502:11;;12911:621;;;;;:::o;3952:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;3173:40::-;;;;:::o;3670:28::-;;;;:::o;16291:482::-;16373:12;16409:13;:25;16423:10;16409:25;;;;;;;;;;;;;;;;;;;;;;;;;16408:55;;;;16440:13;:22;16454:7;16440:22;;;;;;;;;;;;;;;;;;;;;;;;;16408:55;16404:360;;;16495:5;16488:12;;;;16404:360;16582:6;16551:7;:19;16559:10;16551:19;;;;;;;;;;;;;;;:28;16571:7;16551:28;;;;;;;;;;;;;;;:37;;;;16621:7;16600:37;;16609:10;16600:37;;;16630:6;16600:37;;;;;;;;;;;;;;;;;;16672:7;16649:47;;;16697:10;16709:6;16717:4;16723;16649:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:2;8:100;;;99:1;94:3;90;84:5;80:1;75:3;71;64:6;52:2;49:1;45:3;40:15;;8:100;;;12:14;3:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16747:4:0;16740:11;;16291:482;;;;;;:::o;3071:41::-;;;;:::o;1983:23::-;;;;;;;;;;;;;:::o;17644:192::-;17736:12;2228:5;;;;;;;;;;;2214:19;;:10;:19;;;2206:28;;;;;;;;17789:12;17774:37;;;17812:5;;;;;;;;;;;17819:6;17774:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17767:59;;17644:192;;;;:::o;3243:36::-;;;;:::o;15766:159::-;15847:14;15887:7;:19;15895:10;15887:19;;;;;;;;;;;;;;;:28;15907:7;15887:28;;;;;;;;;;;;;;;;15880:35;;15766:159;;;;:::o;16786:162::-;2228:5;;;;;;;;;;;2214:19;;:10;:19;;;2206:28;;;;;;;;16896:6;16872:13;:21;16886:6;16872:21;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;16911:27;16923:6;16931;16911:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16786:162;;:::o;2263:110::-;2228:5;;;;;;;;;;;2214:19;;:10;:19;;;2206:28;;;;;;;;2354:9;2343:8;;:20;;;;;;;;;;;;;;;;;;2263:110;:::o;528:119::-;580:6;617:1;613;:5;605:14;;;;;;;;636:1;632;:5;;;;;;;;628:9;;528:119;;;;:::o;133:120::-;185:6;218:1;214;:5;210:9;;241:1;236;:6;;228:15;;;;;;;;133:120;;;;:::o;7213:1071::-;7591:15;;7553:35;7570:17;:15;:17::i;:::-;7553:12;;:16;;:35;;;;:::i;:::-;:53;:71;;;;;7622:2;7610:9;;:14;7553:71;7549:235;;;7672:1;7660:9;;:13;7648:9;:25;;;;7762:8;;;;;;;;;;;7757:14;;7753:2;:18;7703:47;7739:10;7703:20;:31;7724:9;;7703:31;;;;;;;;;;;;:35;;:47;;;;:::i;:::-;:68;7685:15;:86;;;;7549:235;7807:17;7822:1;7807:10;;:14;;:17;;;;:::i;:::-;7794:10;:30;;;;7954:1;7926:24;;7913:10;;:37;;;;;;;;:42;7910:103;;;7979:21;:19;:21::i;:::-;7910:103;8272:1;8257:12;:16;8241:33;8223:15;:51;;;;;;;7213:1071::o;260:120::-;312:6;350:1;345;:6;;337:15;;;;;;;;369:1;365;:5;361:9;;260:120;;;;:::o;387:134::-;439:6;472:1;468;:5;464:9;;495:1;490;:6;:20;;;;509:1;504;500;:5;;;;;;;;:10;490:20;482:29;;;;;;;;387:134;;;;:::o;8295:1879::-;8352:39;8611:16;8671:33;8938:21;9057:27;9472:23;9593:29;8409;;8394:12;:44;8352:86;;8630:24;;8611:43;;8721:2;8707:11;:16;8671:52;;8885:28;8848:34;:65;8844:1013;;;8962:81;9007:34;8963:37;8996:3;8963:28;:32;;:37;;;;:::i;:::-;8962:43;;:81;;;;:::i;:::-;8938:105;;9087:45;9127:4;9087:25;9108:3;9087:16;:20;;:25;;;;:::i;:::-;:39;;:45;;;;:::i;:::-;9057:75;;9336:68;9353:50;9380:22;9353;9370:4;9353:12;;:16;;:22;;;;:::i;:::-;:26;;:50;;;;:::i;:::-;9336:12;;:16;;:68;;;;:::i;:::-;9321:12;:83;;;;8844:1013;;;9498:81;9549:28;9499:43;9538:3;9499:34;:38;;:43;;;;:::i;:::-;9498:49;;:81;;;;:::i;:::-;9472:107;;9625:47;9667:4;9625:27;9648:3;9625:18;:22;;:27;;;;:::i;:::-;:41;;:47;;;;:::i;:::-;9593:79;;9756:70;9773:52;9800:24;9773:22;9790:4;9773:12;;:16;;:22;;;;:::i;:::-;:26;;:52;;;;:::i;:::-;9756:12;;:16;;:70;;;;:::i;:::-;9741:12;:85;;;;8844:1013;9903:12;9871:29;:44;;;;9944:15;;9929:12;;:30;9926:117;;;10015:15;;10000:12;:30;;;;9926:117;10071:15;;10056:12;;:30;10053:112;;;10137:15;;10122:12;:30;;;;10053:112;8295:1879;;;;;;;:::o;745:132::-;807:6;839:1;835;:5;832:18;;;849:1;842:8;;;;832:18;866:1;859:8;;745:132;;;;;:::o

Swarm Source

bzzr://36f2cb1a1a9ef7dc23ca6748643c1e70e2de61a55de2af8061617bc05ba7c865
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.