ERC-20
Overview
Max Total Supply
248,795,062.3565805 PMZ
Holders
4,592
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
CoinnupToken
Compiler Version
v0.4.23+commit.124ca40d
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2018-05-12 */ pragma solidity ^0.4.23; /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; assert(c / a == b); return c; } /** * @dev Integer division of two numbers, truncating the quotient. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 // uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return a / b; } /** * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of "user permissions". */ contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); emit OwnershipTransferred(owner, newOwner); owner = newOwner; } } /** * @title ERC20Basic * @dev Simpler version of ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/179 */ contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @title Basic token * @dev Basic version of StandardToken, with no allowances. */ contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) balances; uint256 public totalSupply_; /** * @dev total number of tokens in existence */ function totalSupply() public view returns (uint256) { return totalSupply_; } /** * @dev transfer token for a specified address * @param _to The address to transfer to. * @param _value The amount to be transferred. */ function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); emit Transfer(msg.sender, _to, _value); return true; } /** * @dev Gets the balance of the specified address. * @param _owner The address to query the the balance of. * @return An uint256 representing the amount owned by the passed address. */ function balanceOf(address _owner) public view returns (uint256 balance) { return balances[_owner]; } } /** * @title Standard ERC20 token * * @dev Implementation of the basic standard token. * @dev https://github.com/ethereum/EIPs/issues/20 * @dev Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol */ contract StandardToken is ERC20, BasicToken { mapping (address => mapping (address => uint256)) public allowed; /** * @dev Transfer tokens from one address to another * @param _from address The address which you want to send tokens from * @param _to address The address which you want to transfer to * @param _value uint256 the amount of tokens to be transferred */ function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); emit Transfer(_from, _to, _value); return true; } /** * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. * * Beware that changing an allowance with this method brings the risk that someone may use both the old * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * @param _spender The address which will spend the funds. * @param _value The amount of tokens to be spent. */ function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } /** * @dev Function to check the amount of tokens that an owner allowed to a spender. * @param _owner address The address which owns the funds. * @param _spender address The address which will spend the funds. * @return A uint256 specifying the amount of tokens still available for the spender. */ function allowance(address _owner, address _spender) public view returns (uint256) { return allowed[_owner][_spender]; } /** * @dev Increase the amount of tokens that an owner allowed to a spender. * * approve should be called when allowed[_spender] == 0. To increment * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * @param _spender The address which will spend the funds. * @param _addedValue The amount of tokens to increase the allowance by. */ function increaseApproval(address _spender, uint _addedValue) public returns (bool) { allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } /** * @dev Decrease the amount of tokens that an owner allowed to a spender. * * approve should be called when allowed[_spender] == 0. To decrement * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * @param _spender The address which will spend the funds. * @param _subtractedValue The amount of tokens to decrease the allowance by. */ function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) { uint oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } } /** * @title CoinnupCrowdsaleToken * @dev ERC20-compliant Token that can be minted. */ contract CoinnupToken is StandardToken, Ownable { using SafeMath for uint256; string public constant name = "Coinnup Coin"; // solium-disable-line uppercase string public constant symbol = "PMZ"; // solium-disable-line uppercase uint8 public constant decimals = 18; // solium-disable-line uppercase /// @dev store how much in eth users invested to give them a refund in case refund happens mapping ( address => uint256 ) public investments; /// @dev to have how much one user bought tokens mapping ( address => uint256 ) public tokensBought; /// @dev event when someone bought tokens by ETH event investmentReceived( address sender, uint weis, uint total ); uint256 public maxSupply = 298500000000000000000000000; uint256 public allowedToBeSold = 118056750000000000000000000; address public founder = address( 0x3abb86C7C1a533Eb0464E9BD870FD1b501C7A8A8 ); uint256 public rate = 2800; uint256 public bonus = 30; uint256 public softCap = 1850000000000000000000; uint256 public _sold; //eth sold via payable function /// @dev in this var we store eth when someone bought tokens /// not sending it to smart contract but buying it privately uint256 public _soldOutside; //wei sold not via SC uint256 public _soldOutsidePMZ; //PMZ tokens sold not via SC bool public isPaused; struct Round { uint256 openingTime; uint256 closingTime; uint256 allocatedCoins; uint256 minPurchase; uint256 maxPurchase; uint256 soldCoins; } Round[] public rounds; /** @dev Token cunstructor */ constructor () public { require(maxSupply > 0); require(founder != address(0)); require(rate > 0); require(bonus >= 0 && bonus <= 100); // in percentage require(allowedToBeSold > 0 && allowedToBeSold < maxSupply); require(softCap > 0); for (uint8 i = 0; i < 6; i++) { rounds.push( Round(0, 0, 0, 0, 0, 0) ); } // mint tokens which initially belongs to founder uint256 _forFounder = maxSupply.sub(allowedToBeSold); mint(founder, _forFounder); // waiting for admin to set round dates // and to unpause by admin triggerICOState(true); } /// @dev in payable we shold keep only forwarding call function () public onlyWhileOpen isNotPaused payable { require(_buyTokens(msg.sender, msg.value)); } /** * @dev gets `_sender` and `_value` as input and sells tokens with bonus * throws if not enough tokens after calculation * @return isSold bool whether tokens bought */ function _buyTokens(address _sender, uint256 _value) internal isNotPaused returns (bool) { uint256 amount = _getTokenAmount(_value, bonus); uint256 amount_without_bonus = _getTokenAmount(_value, 0); uint8 _currentRound = _getCurrentRound(now); require(rounds[_currentRound].allocatedCoins >= amount.add(rounds[_currentRound].soldCoins)); require(totalSupply_.add(amount) <= maxSupply); // if we have enough tokens to be minted require( rounds[_currentRound].minPurchase <= amount_without_bonus && rounds[_currentRound].maxPurchase >= amount_without_bonus ); _sold = _sold.add(_value); // in wei investments[_sender] = investments[_sender].add(_value); // in wei // minting tokens for investores // after we recorded how much he sent ether and other params mint(_sender, amount); rounds[_currentRound].soldCoins = rounds[_currentRound].soldCoins.add(amount); tokensBought[_sender] = tokensBought[_sender].add(amount); emit investmentReceived( _sender, _value, amount_without_bonus ); return true; } /// @dev system can mint tokens for users if they sent funds to BTC, LTC, etc wallets we allow function mintForInvestor(address _to, uint256 _tokens, uint256 _tokens_bonus) public onlyOwner onlyWhileOpen { uint8 _round = _getCurrentRound(now); uint256 _tokens_with_bonuses = _tokens.add(_tokens_bonus); require(_round >= 0 && _round <= 5); require(_to != address(0)); // handling incorrect values from system in addresses require(_tokens >= 0); // handling incorrect values from system in tokens calculation require(rounds[_round].allocatedCoins >= _tokens_with_bonuses.add(rounds[_round].soldCoins)); require(maxSupply >= _tokens_with_bonuses.add(totalSupply_)); require(_tokens > _tokens_bonus); require( rounds[_round].minPurchase <= _tokens && // Min Max purchases without bonuses rounds[_round].maxPurchase >= _tokens ); // minting tokens for investors mint(_to, _tokens_with_bonuses); // _tokens in wei rounds[_round].soldCoins = rounds[_round].soldCoins.add(_tokens_with_bonuses); tokensBought[_to] = tokensBought[_to].add(_tokens_with_bonuses); // tokens in wei uint256 _soldInETH = _tokens.div( rate ); // Calc without bonuses _sold = _sold.add(_soldInETH); // in wei _soldOutside = _soldOutside.add(_soldInETH); // eth _soldOutsidePMZ = _soldOutsidePMZ.add(_tokens_with_bonuses); // in PMZ } /** * @dev Function to mint tokens * @param _to The address that will receive the minted tokens. * @param _amount The amount of tokens to mint. * @return A boolean that indicates if the operation was successful. */ function mint(address _to, uint256 _amount) internal { totalSupply_ = totalSupply_.add(_amount); balances[_to] = balances[_to].add(_amount); emit Transfer(address(this), _to, _amount); } /** * @dev The way in which ether is converted to tokens. * @param _weiAmount Value in wei to be converted into tokens * @param _bonus Bonus in percents * @return Number of tokens that can be purchased with the specified _weiAmount */ function _getTokenAmount(uint256 _weiAmount, uint _bonus) internal view returns (uint256) { uint256 _coins_in_wei = rate.mul(_weiAmount); uint256 _bonus_value_in_wei = 0; uint256 bonusValue = 0; _bonus_value_in_wei = (_coins_in_wei.mul(_bonus)).div(100); bonusValue = _bonus_value_in_wei; uint256 coins = _coins_in_wei; uint256 total = coins.add(bonusValue); return total; } /** * @dev sets a rate for ico rounds * @param _rate Rate for token */ function setRate(uint256 _rate) public { require(msg.sender == owner); require(_rate > 0); rate = _rate; } /// @dev get total coins sold per current round function soldPerCurrentRound() public view returns (uint256) { return rounds[_getCurrentRound(now)].soldCoins; } /// @dev pause and unpause an ICO, only sender allowed to function triggerICOState(bool state) public onlyOwner { isPaused = state; } /** * @dev changes current bonus rate * @param _bonus Bonus to change * @return bool - Changed or not */ function setBonus(uint256 _bonus) onlyOwner public { require(_bonus >= 0 && _bonus <= 100); //% bonus = _bonus; } /// @dev gets number of current round function _getCurrentRound(uint256 _time) public view returns (uint8) { for (uint8 i = 0; i < 6; i++) { if (rounds[i].openingTime < _time && rounds[i].closingTime > _time) { return i; } } return 100; // if using 6 in 5 length array it will throw } function setRoundParams( uint8 _round, uint256 _openingTime, uint256 _closingTime, uint256 _maxPurchase, uint256 _minPurchase, uint256 _allocatedCoins ) public onlyOwner { rounds[_round].openingTime = _openingTime; rounds[_round].closingTime = _closingTime; rounds[_round].maxPurchase = _maxPurchase; rounds[_round].minPurchase = _minPurchase; rounds[_round].allocatedCoins = _allocatedCoins; } /** * @dev withdrawing funds to founder's wallet * @return bool Whether success or not */ function withdraw() public { // only founder is able to withdraw funds require(msg.sender == founder); founder.transfer(address(this).balance); } /** * @dev Claims for refund if ICO finished and soft cap not reached */ function refund() public whenICOFinished capNotReached { require(investments[msg.sender] > 0); msg.sender.transfer(investments[msg.sender]); investments[msg.sender] = 0; } modifier onlyWhileOpen { uint8 _round = _getCurrentRound(now); require(_round >= 0 && _round <= 5); // we have 6 rounds, other values are invalid _; } /// @dev when ico finishes we can perform other actions modifier whenICOFinished { uint8 _round = _getCurrentRound(now); require(_round < 0 || _round > 5); // if we do not get current valid round number ICO finished _; } /// @dev _sold in weis, softCap in weis modifier capNotReached { require(softCap > _sold); _; } /// @dev if isPaused true then investments cannot be accepted modifier isNotPaused { require(!isPaused); _; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":true,"inputs":[],"name":"allowedToBeSold","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_round","type":"uint8"},{"name":"_openingTime","type":"uint256"},{"name":"_closingTime","type":"uint256"},{"name":"_maxPurchase","type":"uint256"},{"name":"_minPurchase","type":"uint256"},{"name":"_allocatedCoins","type":"uint256"}],"name":"setRoundParams","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_bonus","type":"uint256"}],"name":"setBonus","outputs":[],"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":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"tokensBought","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply_","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_rate","type":"uint256"}],"name":"setRate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"founder","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"refund","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_time","type":"uint256"}],"name":"_getCurrentRound","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"address"}],"name":"allowed","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"soldPerCurrentRound","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_subtractedValue","type":"uint256"}],"name":"decreaseApproval","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"bonus","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_soldOutside","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"rounds","outputs":[{"name":"openingTime","type":"uint256"},{"name":"closingTime","type":"uint256"},{"name":"allocatedCoins","type":"uint256"},{"name":"minPurchase","type":"uint256"},{"name":"maxPurchase","type":"uint256"},{"name":"soldCoins","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"state","type":"bool"}],"name":"triggerICOState","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"softCap","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":true,"inputs":[{"name":"","type":"address"}],"name":"investments","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_soldOutsidePMZ","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"_sold","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isPaused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_tokens","type":"uint256"},{"name":"_tokens_bonus","type":"uint256"}],"name":"mintForInvestor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"maxSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_addedValue","type":"uint256"}],"name":"increaseApproval","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","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":"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":"sender","type":"address"},{"indexed":false,"name":"weis","type":"uint256"},{"indexed":false,"name":"total","type":"uint256"}],"name":"investmentReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","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"}]
Contract Creation Code
60806040526af6e9d56ca1f3143a8000006006556a61a77d3dc7bb254ff80000600755733abb86c7c1a533eb0464e9bd870fd1b501c7a8a8600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610af0600955601e600a55686449e84e47a8a80000600b553480156200009c57600080fd5b5060008033600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600654111515620000f357600080fd5b600073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515156200015257600080fd5b60006009541115156200016457600080fd5b6000600a54101580156200017b57506064600a5411155b15156200018757600080fd5b60006007541180156200019d5750600654600754105b1515620001a957600080fd5b6000600b54111515620001bb57600080fd5b600091505b60068260ff1610156200027b57601060c0604051908101604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090806001815401808255809150509060018203906000526020600020906006020160009091929091909150600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a082015181600501555050508180600101925050620001c0565b620002a26007546006546200030464010000000002620029b7179091906401000000009004565b9050620002e1600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826200031e640100000000026401000000009004565b620002fc600162000455640100000000026401000000009004565b5050620004ee565b60008282111515156200031357fe5b818303905092915050565b6200034381600154620004cf6401000000000262002882179091906401000000009004565b600181905550620003aa816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054620004cf6401000000000262002882179091906401000000009004565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515620004b257600080fd5b80600f60006101000a81548160ff02191690831515021790555050565b6000808284019050838110151515620004e457fe5b8091505092915050565b612a4d80620004fe6000396000f3006080604052600436106101cd576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630449aa401461023157806306fdde031461025c57806307dc6bd1146102ec578063095ea7b31461034e5780630b98f975146103b357806318160ddd146103e057806323b872dd1461040b578063264d7797146104905780632c4e722e146104e7578063313ce56714610512578063324536eb1461054357806334fcf4371461056e5780633ccfd60b1461059b5780634d853ee5146105b2578063590e1ae3146106095780635ac1caa0146106205780635c658165146106675780635e1eabd2146106de578063661884631461070957806370a082311461076e57806375b4d78c146107c557806384e8a7df146107f05780638c65c81f1461081b5780638c9e81e51461087f5780638da5cb5b146108ae578063906a26e01461090557806395d89b411461093057806396b98862146109c0578063a00f64d614610a17578063a9059cbb14610a42578063aabd5b8814610aa7578063b187bd2614610ad2578063c89231b314610b01578063d5abeb0114610b58578063d73dd62314610b83578063dd62ed3e14610be8578063f2fde38b14610c5f575b60006101d842610ca2565b905060008160ff16101580156101f2575060058160ff1611155b15156101fd57600080fd5b600f60009054906101000a900460ff1615151561021957600080fd5b6102233334610d2f565b151561022e57600080fd5b50005b34801561023d57600080fd5b50610246611090565b6040518082815260200191505060405180910390f35b34801561026857600080fd5b50610271611096565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102b1578082015181840152602081019050610296565b50505050905090810190601f1680156102de5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102f857600080fd5b5061034c600480360381019080803560ff16906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291905050506110cf565b005b34801561035a57600080fd5b50610399600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506111fb565b604051808215151515815260200191505060405180910390f35b3480156103bf57600080fd5b506103de600480360381019080803590602001909291905050506112ed565b005b3480156103ec57600080fd5b506103f5611370565b6040518082815260200191505060405180910390f35b34801561041757600080fd5b50610476600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061137a565b604051808215151515815260200191505060405180910390f35b34801561049c57600080fd5b506104d1600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611734565b6040518082815260200191505060405180910390f35b3480156104f357600080fd5b506104fc61174c565b6040518082815260200191505060405180910390f35b34801561051e57600080fd5b50610527611752565b604051808260ff1660ff16815260200191505060405180910390f35b34801561054f57600080fd5b50610558611757565b6040518082815260200191505060405180910390f35b34801561057a57600080fd5b506105996004803603810190808035906020019092919050505061175d565b005b3480156105a757600080fd5b506105b06117d2565b005b3480156105be57600080fd5b506105c76118b0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561061557600080fd5b5061061e6118d6565b005b34801561062c57600080fd5b5061064b60048036038101908080359060200190929190505050610ca2565b604051808260ff1660ff16815260200191505060405180910390f35b34801561067357600080fd5b506106c8600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a31565b6040518082815260200191505060405180910390f35b3480156106ea57600080fd5b506106f3611a56565b6040518082815260200191505060405180910390f35b34801561071557600080fd5b50610754600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611a89565b604051808215151515815260200191505060405180910390f35b34801561077a57600080fd5b506107af600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d1a565b6040518082815260200191505060405180910390f35b3480156107d157600080fd5b506107da611d62565b6040518082815260200191505060405180910390f35b3480156107fc57600080fd5b50610805611d68565b6040518082815260200191505060405180910390f35b34801561082757600080fd5b5061084660048036038101908080359060200190929190505050611d6e565b60405180878152602001868152602001858152602001848152602001838152602001828152602001965050505050505060405180910390f35b34801561088b57600080fd5b506108ac600480360381019080803515159060200190929190505050611db9565b005b3480156108ba57600080fd5b506108c3611e32565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561091157600080fd5b5061091a611e58565b6040518082815260200191505060405180910390f35b34801561093c57600080fd5b50610945611e5e565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561098557808201518184015260208101905061096a565b50505050905090810190601f1680156109b25780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156109cc57600080fd5b50610a01600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e97565b6040518082815260200191505060405180910390f35b348015610a2357600080fd5b50610a2c611eaf565b6040518082815260200191505060405180910390f35b348015610a4e57600080fd5b50610a8d600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611eb5565b604051808215151515815260200191505060405180910390f35b348015610ab357600080fd5b50610abc612087565b6040518082815260200191505060405180910390f35b348015610ade57600080fd5b50610ae761208d565b604051808215151515815260200191505060405180910390f35b348015610b0d57600080fd5b50610b56600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291905050506120a0565b005b348015610b6457600080fd5b50610b6d612428565b6040518082815260200191505060405180910390f35b348015610b8f57600080fd5b50610bce600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061242e565b604051808215151515815260200191505060405180910390f35b348015610bf457600080fd5b50610c49600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061262a565b6040518082815260200191505060405180910390f35b348015610c6b57600080fd5b50610ca0600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506126b1565b005b600080600090505b60068160ff161015610d24578260108260ff16815481101515610cc957fe5b906000526020600020906006020160000154108015610d0a57508260108260ff16815481101515610cf657fe5b906000526020600020906006020160010154115b15610d1757809150610d29565b8080600101915050610caa565b606491505b50919050565b600080600080600f60009054906101000a900460ff16151515610d5157600080fd5b610d5d85600a54612809565b9250610d6a856000612809565b9150610d7542610ca2565b9050610dad60108260ff16815481101515610d8c57fe5b9060005260206000209060060201600501548461288290919063ffffffff16565b60108260ff16815481101515610dbf57fe5b90600052602060002090600602016002015410151515610dde57600080fd5b600654610df68460015461288290919063ffffffff16565b11151515610e0357600080fd5b8160108260ff16815481101515610e1657fe5b90600052602060002090600602016003015411158015610e5957508160108260ff16815481101515610e4457fe5b90600052602060002090600602016004015410155b1515610e6457600080fd5b610e7985600c5461288290919063ffffffff16565b600c81905550610ed185600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461288290919063ffffffff16565b600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610f1e86846128a0565b610f548360108360ff16815481101515610f3457fe5b90600052602060002090600602016005015461288290919063ffffffff16565b60108260ff16815481101515610f6657fe5b906000526020600020906006020160050181905550610fcd83600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461288290919063ffffffff16565b600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507fdfab298122b6bc191b215b6bba072e1fec3b54d9736f0cd6986e0320d3aab24d868684604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a16001935050505092915050565b60075481565b6040805190810160405280600c81526020017f436f696e6e757020436f696e000000000000000000000000000000000000000081525081565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561112b57600080fd5b8460108760ff1681548110151561113e57fe5b9060005260206000209060060201600001819055508360108760ff1681548110151561116657fe5b9060005260206000209060060201600101819055508260108760ff1681548110151561118e57fe5b9060005260206000209060060201600401819055508160108760ff168154811015156111b657fe5b9060005260206000209060060201600301819055508060108760ff168154811015156111de57fe5b906000526020600020906006020160020181905550505050505050565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561134957600080fd5b6000811015801561135b575060648111155b151561136657600080fd5b80600a8190555050565b6000600154905090565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156113b757600080fd5b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115151561140457600080fd5b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115151561148f57600080fd5b6114e0826000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129b790919063ffffffff16565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611573826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461288290919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061164482600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129b790919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b60056020528060005260406000206000915090505481565b60095481565b601281565b60015481565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156117b957600080fd5b6000811115156117c857600080fd5b8060098190555050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561182e57600080fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f193505050501580156118ad573d6000803e3d6000fd5b50565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006118e142610ca2565b905060008160ff1610806118f8575060058160ff16115b151561190357600080fd5b600c54600b5411151561191557600080fd5b6000600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411151561196357600080fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549081150290604051600060405180830381858888f193505050501580156119e8573d6000803e3d6000fd5b506000600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050565b6002602052816000526040600020602052806000526040600020600091509150505481565b60006010611a6342610ca2565b60ff16815481101515611a7257fe5b906000526020600020906006020160050154905090565b600080600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905080831115611b9a576000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611c2e565b611bad83826129b790919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600191505092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600a5481565b600d5481565b601081815481101515611d7d57fe5b90600052602060002090600602016000915090508060000154908060010154908060020154908060030154908060040154908060050154905086565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611e1557600080fd5b80600f60006101000a81548160ff02191690831515021790555050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5481565b6040805190810160405280600381526020017f504d5a000000000000000000000000000000000000000000000000000000000081525081565b60046020528060005260406000206000915090505481565b600e5481565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611ef257600080fd5b611f43826000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129b790919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611fd6826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461288290919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b600c5481565b600f60009054906101000a900460ff1681565b6000806000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561210157600080fd5b600061210c42610ca2565b905060008160ff1610158015612126575060058160ff1611155b151561213157600080fd5b61213a42610ca2565b935061214f858761288290919063ffffffff16565b925060008460ff1610158015612169575060058460ff1611155b151561217457600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16141515156121b057600080fd5b600086101515156121c057600080fd5b6121f660108560ff168154811015156121d557fe5b9060005260206000209060060201600501548461288290919063ffffffff16565b60108560ff1681548110151561220857fe5b9060005260206000209060060201600201541015151561222757600080fd5b61223c6001548461288290919063ffffffff16565b6006541015151561224c57600080fd5b848611151561225a57600080fd5b8560108560ff1681548110151561226d57fe5b906000526020600020906006020160030154111580156122b057508560108560ff1681548110151561229b57fe5b90600052602060002090600602016004015410155b15156122bb57600080fd5b6122c587846128a0565b6122fb8360108660ff168154811015156122db57fe5b90600052602060002090600602016005015461288290919063ffffffff16565b60108560ff1681548110151561230d57fe5b90600052602060002090600602016005018190555061237483600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461288290919063ffffffff16565b600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506123cc600954876129d090919063ffffffff16565b91506123e382600c5461288290919063ffffffff16565b600c819055506123fe82600d5461288290919063ffffffff16565b600d8190555061241983600e5461288290919063ffffffff16565b600e8190555050505050505050565b60065481565b60006124bf82600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461288290919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561270d57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561274957600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080600080600080612827886009546129e690919063ffffffff16565b94506000935060009250612857606461284989886129e690919063ffffffff16565b6129d090919063ffffffff16565b9350839250849150612872838361288290919063ffffffff16565b9050809550505050505092915050565b600080828401905083811015151561289657fe5b8091505092915050565b6128b58160015461288290919063ffffffff16565b60018190555061290c816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461288290919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b60008282111515156129c557fe5b818303905092915050565b600081838115156129dd57fe5b04905092915050565b60008060008414156129fb5760009150612a1a565b8284029050828482811515612a0c57fe5b04141515612a1657fe5b8091505b50929150505600a165627a7a72305820694f4014f88b4881df99119e796ba40e2c15a9ee314ccd311d26b847e98017f40029
Deployed Bytecode
0x6080604052600436106101cd576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630449aa401461023157806306fdde031461025c57806307dc6bd1146102ec578063095ea7b31461034e5780630b98f975146103b357806318160ddd146103e057806323b872dd1461040b578063264d7797146104905780632c4e722e146104e7578063313ce56714610512578063324536eb1461054357806334fcf4371461056e5780633ccfd60b1461059b5780634d853ee5146105b2578063590e1ae3146106095780635ac1caa0146106205780635c658165146106675780635e1eabd2146106de578063661884631461070957806370a082311461076e57806375b4d78c146107c557806384e8a7df146107f05780638c65c81f1461081b5780638c9e81e51461087f5780638da5cb5b146108ae578063906a26e01461090557806395d89b411461093057806396b98862146109c0578063a00f64d614610a17578063a9059cbb14610a42578063aabd5b8814610aa7578063b187bd2614610ad2578063c89231b314610b01578063d5abeb0114610b58578063d73dd62314610b83578063dd62ed3e14610be8578063f2fde38b14610c5f575b60006101d842610ca2565b905060008160ff16101580156101f2575060058160ff1611155b15156101fd57600080fd5b600f60009054906101000a900460ff1615151561021957600080fd5b6102233334610d2f565b151561022e57600080fd5b50005b34801561023d57600080fd5b50610246611090565b6040518082815260200191505060405180910390f35b34801561026857600080fd5b50610271611096565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102b1578082015181840152602081019050610296565b50505050905090810190601f1680156102de5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102f857600080fd5b5061034c600480360381019080803560ff16906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291905050506110cf565b005b34801561035a57600080fd5b50610399600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506111fb565b604051808215151515815260200191505060405180910390f35b3480156103bf57600080fd5b506103de600480360381019080803590602001909291905050506112ed565b005b3480156103ec57600080fd5b506103f5611370565b6040518082815260200191505060405180910390f35b34801561041757600080fd5b50610476600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061137a565b604051808215151515815260200191505060405180910390f35b34801561049c57600080fd5b506104d1600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611734565b6040518082815260200191505060405180910390f35b3480156104f357600080fd5b506104fc61174c565b6040518082815260200191505060405180910390f35b34801561051e57600080fd5b50610527611752565b604051808260ff1660ff16815260200191505060405180910390f35b34801561054f57600080fd5b50610558611757565b6040518082815260200191505060405180910390f35b34801561057a57600080fd5b506105996004803603810190808035906020019092919050505061175d565b005b3480156105a757600080fd5b506105b06117d2565b005b3480156105be57600080fd5b506105c76118b0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561061557600080fd5b5061061e6118d6565b005b34801561062c57600080fd5b5061064b60048036038101908080359060200190929190505050610ca2565b604051808260ff1660ff16815260200191505060405180910390f35b34801561067357600080fd5b506106c8600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a31565b6040518082815260200191505060405180910390f35b3480156106ea57600080fd5b506106f3611a56565b6040518082815260200191505060405180910390f35b34801561071557600080fd5b50610754600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611a89565b604051808215151515815260200191505060405180910390f35b34801561077a57600080fd5b506107af600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d1a565b6040518082815260200191505060405180910390f35b3480156107d157600080fd5b506107da611d62565b6040518082815260200191505060405180910390f35b3480156107fc57600080fd5b50610805611d68565b6040518082815260200191505060405180910390f35b34801561082757600080fd5b5061084660048036038101908080359060200190929190505050611d6e565b60405180878152602001868152602001858152602001848152602001838152602001828152602001965050505050505060405180910390f35b34801561088b57600080fd5b506108ac600480360381019080803515159060200190929190505050611db9565b005b3480156108ba57600080fd5b506108c3611e32565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561091157600080fd5b5061091a611e58565b6040518082815260200191505060405180910390f35b34801561093c57600080fd5b50610945611e5e565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561098557808201518184015260208101905061096a565b50505050905090810190601f1680156109b25780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156109cc57600080fd5b50610a01600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e97565b6040518082815260200191505060405180910390f35b348015610a2357600080fd5b50610a2c611eaf565b6040518082815260200191505060405180910390f35b348015610a4e57600080fd5b50610a8d600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611eb5565b604051808215151515815260200191505060405180910390f35b348015610ab357600080fd5b50610abc612087565b6040518082815260200191505060405180910390f35b348015610ade57600080fd5b50610ae761208d565b604051808215151515815260200191505060405180910390f35b348015610b0d57600080fd5b50610b56600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291905050506120a0565b005b348015610b6457600080fd5b50610b6d612428565b6040518082815260200191505060405180910390f35b348015610b8f57600080fd5b50610bce600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061242e565b604051808215151515815260200191505060405180910390f35b348015610bf457600080fd5b50610c49600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061262a565b6040518082815260200191505060405180910390f35b348015610c6b57600080fd5b50610ca0600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506126b1565b005b600080600090505b60068160ff161015610d24578260108260ff16815481101515610cc957fe5b906000526020600020906006020160000154108015610d0a57508260108260ff16815481101515610cf657fe5b906000526020600020906006020160010154115b15610d1757809150610d29565b8080600101915050610caa565b606491505b50919050565b600080600080600f60009054906101000a900460ff16151515610d5157600080fd5b610d5d85600a54612809565b9250610d6a856000612809565b9150610d7542610ca2565b9050610dad60108260ff16815481101515610d8c57fe5b9060005260206000209060060201600501548461288290919063ffffffff16565b60108260ff16815481101515610dbf57fe5b90600052602060002090600602016002015410151515610dde57600080fd5b600654610df68460015461288290919063ffffffff16565b11151515610e0357600080fd5b8160108260ff16815481101515610e1657fe5b90600052602060002090600602016003015411158015610e5957508160108260ff16815481101515610e4457fe5b90600052602060002090600602016004015410155b1515610e6457600080fd5b610e7985600c5461288290919063ffffffff16565b600c81905550610ed185600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461288290919063ffffffff16565b600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610f1e86846128a0565b610f548360108360ff16815481101515610f3457fe5b90600052602060002090600602016005015461288290919063ffffffff16565b60108260ff16815481101515610f6657fe5b906000526020600020906006020160050181905550610fcd83600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461288290919063ffffffff16565b600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507fdfab298122b6bc191b215b6bba072e1fec3b54d9736f0cd6986e0320d3aab24d868684604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a16001935050505092915050565b60075481565b6040805190810160405280600c81526020017f436f696e6e757020436f696e000000000000000000000000000000000000000081525081565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561112b57600080fd5b8460108760ff1681548110151561113e57fe5b9060005260206000209060060201600001819055508360108760ff1681548110151561116657fe5b9060005260206000209060060201600101819055508260108760ff1681548110151561118e57fe5b9060005260206000209060060201600401819055508160108760ff168154811015156111b657fe5b9060005260206000209060060201600301819055508060108760ff168154811015156111de57fe5b906000526020600020906006020160020181905550505050505050565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561134957600080fd5b6000811015801561135b575060648111155b151561136657600080fd5b80600a8190555050565b6000600154905090565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156113b757600080fd5b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115151561140457600080fd5b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115151561148f57600080fd5b6114e0826000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129b790919063ffffffff16565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611573826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461288290919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061164482600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129b790919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b60056020528060005260406000206000915090505481565b60095481565b601281565b60015481565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156117b957600080fd5b6000811115156117c857600080fd5b8060098190555050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561182e57600080fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f193505050501580156118ad573d6000803e3d6000fd5b50565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006118e142610ca2565b905060008160ff1610806118f8575060058160ff16115b151561190357600080fd5b600c54600b5411151561191557600080fd5b6000600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411151561196357600080fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549081150290604051600060405180830381858888f193505050501580156119e8573d6000803e3d6000fd5b506000600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050565b6002602052816000526040600020602052806000526040600020600091509150505481565b60006010611a6342610ca2565b60ff16815481101515611a7257fe5b906000526020600020906006020160050154905090565b600080600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905080831115611b9a576000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611c2e565b611bad83826129b790919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600191505092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600a5481565b600d5481565b601081815481101515611d7d57fe5b90600052602060002090600602016000915090508060000154908060010154908060020154908060030154908060040154908060050154905086565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611e1557600080fd5b80600f60006101000a81548160ff02191690831515021790555050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5481565b6040805190810160405280600381526020017f504d5a000000000000000000000000000000000000000000000000000000000081525081565b60046020528060005260406000206000915090505481565b600e5481565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611ef257600080fd5b611f43826000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129b790919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611fd6826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461288290919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b600c5481565b600f60009054906101000a900460ff1681565b6000806000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561210157600080fd5b600061210c42610ca2565b905060008160ff1610158015612126575060058160ff1611155b151561213157600080fd5b61213a42610ca2565b935061214f858761288290919063ffffffff16565b925060008460ff1610158015612169575060058460ff1611155b151561217457600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16141515156121b057600080fd5b600086101515156121c057600080fd5b6121f660108560ff168154811015156121d557fe5b9060005260206000209060060201600501548461288290919063ffffffff16565b60108560ff1681548110151561220857fe5b9060005260206000209060060201600201541015151561222757600080fd5b61223c6001548461288290919063ffffffff16565b6006541015151561224c57600080fd5b848611151561225a57600080fd5b8560108560ff1681548110151561226d57fe5b906000526020600020906006020160030154111580156122b057508560108560ff1681548110151561229b57fe5b90600052602060002090600602016004015410155b15156122bb57600080fd5b6122c587846128a0565b6122fb8360108660ff168154811015156122db57fe5b90600052602060002090600602016005015461288290919063ffffffff16565b60108560ff1681548110151561230d57fe5b90600052602060002090600602016005018190555061237483600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461288290919063ffffffff16565b600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506123cc600954876129d090919063ffffffff16565b91506123e382600c5461288290919063ffffffff16565b600c819055506123fe82600d5461288290919063ffffffff16565b600d8190555061241983600e5461288290919063ffffffff16565b600e8190555050505050505050565b60065481565b60006124bf82600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461288290919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561270d57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561274957600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080600080600080612827886009546129e690919063ffffffff16565b94506000935060009250612857606461284989886129e690919063ffffffff16565b6129d090919063ffffffff16565b9350839250849150612872838361288290919063ffffffff16565b9050809550505050505092915050565b600080828401905083811015151561289657fe5b8091505092915050565b6128b58160015461288290919063ffffffff16565b60018190555061290c816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461288290919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b60008282111515156129c557fe5b818303905092915050565b600081838115156129dd57fe5b04905092915050565b60008060008414156129fb5760009150612a1a565b8284029050828482811515612a0c57fe5b04141515612a1657fe5b8091505b50929150505600a165627a7a72305820694f4014f88b4881df99119e796ba40e2c15a9ee314ccd311d26b847e98017f40029
Swarm Source
bzzr://694f4014f88b4881df99119e796ba40e2c15a9ee314ccd311d26b847e98017f4
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.