ETH Price: $3,294.13 (-4.90%)

Token

ESZCoin (ESZ)
 

Overview

Max Total Supply

10,000,000 ESZ

Holders

538 (0.00%)

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

EtherSportz is being developed as an online based eSports tournament platform for popular games.

ICO Information

ICO Start Date : Jan 09, 2018   
Soft Cap  : $500,000
Raised : $3,500,000
ICO Price  : $0.5 | 0.00038785 ETH | 0.00003456 BTC
Country : US

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
ESZCoin

Compiler Version
v0.4.19+commit.c4cbbb05

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
/**
 *Submitted for verification at Etherscan.io on 2018-01-11
*/

pragma solidity 0.4.19;

// implement safemath as a library
library SafeMath {

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

  function div(uint256 a, uint256 b) internal pure returns (uint256) {
    uint256 c = a / b;
    return c;
  }

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

  function add(uint256 a, uint256 b) internal pure returns (uint256) {
    uint256 c = a + b;
    require(c >= a);
    return c;
  }
  
}

contract ESZCoin {

    using SafeMath for uint256;

    address     public      owner;
    string      public      name;
    string      public      symbol;
    uint256     public      totalSupply;
    uint8       public      decimals;
    bool        public      globalTransferLock;

    mapping (address => bool)                           public      accountLock;
    mapping (address => uint256)                        public      balances;
    mapping (address => mapping(address => uint256))    public      allowed;

    event Transfer(address indexed _sender, address indexed _recipient, uint256 _amount);
    event Approval(address indexed _owner, address indexed _spender, uint256 _amount);
    event GlobalTransfersLocked(bool indexed _transfersFrozenGlobally);
    event GlobalTransfersUnlocked(bool indexed _transfersThawedGlobally);
    event AccountTransfersFrozen(address indexed _eszHolder, bool indexed _accountTransfersFrozen);
    event AccountTransfersThawed(address indexed _eszHolder, bool indexed _accountTransfersThawed);

    /**
        @dev Checks to ensure that msg.sender is the owner
    */
    modifier onlyOwner() {
        require(msg.sender == owner);
        _;
    }

    /**
        @dev Checks to ensure that global transfers are not locked
    */
    modifier transfersUnlocked() {
        require(!globalTransferLock);
        _;
    }

    /**CONSTRUCTOR*/
    function ESZCoin() {
        owner = msg.sender;
        totalSupply = 10000000000000000000000000;
        balances[msg.sender] = totalSupply;
        name = "ESZCoin";
        symbol = "ESZ";
        decimals = 18;
        globalTransferLock = false;
    } 

    /**
        @dev Freezes transfers globally
    */
    function freezeGlobalTansfers()
        public
        onlyOwner
        returns (bool)
    {
        globalTransferLock = true;
        GlobalTransfersLocked(true);
        return true;
    }

    /**
        @dev Thaws transfers globally
    */
    function thawGlobalTransfers()
        public
        onlyOwner
        returns (bool)
    {
        globalTransferLock = false;
        GlobalTransfersUnlocked(true);
    }

    /**
        @dev Freezes a particular account, preventing them from making transfers
    */
    function freezeAccountTransfers(
        address _eszHolder
    )
        public
        onlyOwner
        returns (bool)
    {
        accountLock[_eszHolder] = true;
        AccountTransfersFrozen(_eszHolder, true);
        return true;
    }

    /**
        @dev Thaws a particular account, allowing them to make transfers again
    */
    function thawAccountTransfers(
        address _eszHolder
    )
        public
        onlyOwner
        returns (bool)
    {
        accountLock[_eszHolder] = false;
        AccountTransfersThawed(_eszHolder, true);
        return true;
    }

    /**
        @dev Used to transfers tokens
    */
    function transfer(
        address _recipient,
        uint256 _amount
    )
        public
        returns (bool)
    {
        require(accountLock[msg.sender] == false);
        require(transferCheck(msg.sender, _recipient, _amount));
        balances[msg.sender] = balances[msg.sender].sub(_amount);
        balances[_recipient] = balances[_recipient].add(_amount);
        Transfer(msg.sender, _recipient, _amount);
        return true;
    }

    /**
        @dev Used to transfers tokens to someone on behalf of the owner account. Must be approved
    */
    function transferFrom(
        address _owner,
        address _recipient,
        uint256 _amount
    )
        public
        returns (bool)
    {
        require(accountLock[_owner] == false);
        require(allowed[_owner][msg.sender] >= _amount);
        require(transferCheck(_owner, _recipient, _amount));
        allowed[_owner][msg.sender] = allowed[_owner][msg.sender].sub(_amount);
        balances[_owner] = balances[_owner].sub(_amount);
        balances[_recipient] = balances[_recipient].add(_amount);
        Transfer(_owner, _recipient, _amount);
        return true;
    }

    /**
        @dev Used to approve another account to spend on your behalf
    */
    function approve(
        address _spender,
        uint256 _amount
    )
        public
        returns (bool)
    {
        allowed[msg.sender][_spender] = _amount;
        Approval(msg.sender, _spender, _amount);
        return true;
    }

    /** INTERNALS */

    /**
        @dev Does a sanity check of the parameters in a transfer, makes sure transfers are allowed
    */
    function transferCheck(
        address _sender,
        address _recipient,
        uint256 _amount
    )
        internal
        view
        transfersUnlocked
        returns (bool)
    {
        require(_amount > 0);
        require(balances[_sender] >= _amount);
        require(balances[_sender].sub(_amount) >= 0);
        require(balances[_recipient].add(_amount) > balances[_recipient]);
        return true;
    }

    /** GETTERS */
    
    /**
        @dev Retrieves total supply
    */
    function totalSupply()
        public
        view
        returns (uint256)
    {
        return totalSupply;
    }

    /**
        @dev Retrieves the balance of an ESZ holder
    */
    function balanceOf(
        address _eszHolder
    )
        public
        view
        returns (uint256)
    {
        return balances[_eszHolder];
    }

    /**
        @dev Retrieves the balance of spender for owner
    */
    function allowance(
        address _owner,
        address _spender
    )
        public
        view
        returns (uint256)
    {
        return allowed[_owner][_spender];
    }

}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"globalTransferLock","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_amount","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"accountLock","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":false,"inputs":[{"name":"_owner","type":"address"},{"name":"_recipient","type":"address"},{"name":"_amount","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"balances","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":"","type":"address"},{"name":"","type":"address"}],"name":"allowed","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_eszHolder","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"thawGlobalTransfers","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_eszHolder","type":"address"}],"name":"freezeAccountTransfers","outputs":[{"name":"","type":"bool"}],"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":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_recipient","type":"address"},{"name":"_amount","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_eszHolder","type":"address"}],"name":"thawAccountTransfers","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":"freezeGlobalTansfers","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_sender","type":"address"},{"indexed":true,"name":"_recipient","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_owner","type":"address"},{"indexed":true,"name":"_spender","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_transfersFrozenGlobally","type":"bool"}],"name":"GlobalTransfersLocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_transfersThawedGlobally","type":"bool"}],"name":"GlobalTransfersUnlocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_eszHolder","type":"address"},{"indexed":true,"name":"_accountTransfersFrozen","type":"bool"}],"name":"AccountTransfersFrozen","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_eszHolder","type":"address"},{"indexed":true,"name":"_accountTransfersThawed","type":"bool"}],"name":"AccountTransfersThawed","type":"event"}]

6060604052341561000f57600080fd5b60008054600160a060020a03191633600160a060020a031690811782556a084595161401484a00000060038190559082526006602052604091829020558051908101604052600781527f45535a436f696e00000000000000000000000000000000000000000000000000602082015260019080516100919291602001906100f3565b5060408051908101604052600381527f45535a0000000000000000000000000000000000000000000000000000000000602082015260029080516100d99291602001906100f3565b506004805461ff001960ff1990911660121716905561018e565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061013457805160ff1916838001178555610161565b82800160010185558215610161579182015b82811115610161578251825591602001919060010190610146565b5061016d929150610171565b5090565b61018b91905b8082111561016d5760008155600101610177565b90565b610b1d8061019d6000396000f3006060604052600436106100fb5763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde03811461010057806308bbd9471461018a578063095ea7b3146101b1578063129ed395146101d357806318160ddd146101f257806323b872dd1461021757806327e235e31461023f578063313ce5671461025e5780635c6581651461028757806370a08231146102ac5780637725686f146102cb57806389286abd146102de5780638da5cb5b146102fd57806395d89b411461032c578063a9059cbb1461033f578063c46d4cf114610361578063dd62ed3e14610380578063e63227b0146103a5575b600080fd5b341561010b57600080fd5b6101136103b8565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561014f578082015183820152602001610137565b50505050905090810190601f16801561017c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561019557600080fd5b61019d610456565b604051901515815260200160405180910390f35b34156101bc57600080fd5b61019d600160a060020a0360043516602435610464565b34156101de57600080fd5b61019d600160a060020a03600435166104d0565b34156101fd57600080fd5b6102056104e5565b60405190815260200160405180910390f35b341561022257600080fd5b61019d600160a060020a03600435811690602435166044356104eb565b341561024a57600080fd5b610205600160a060020a036004351661066f565b341561026957600080fd5b610271610681565b60405160ff909116815260200160405180910390f35b341561029257600080fd5b610205600160a060020a036004358116906024351661068a565b34156102b757600080fd5b610205600160a060020a03600435166106a7565b34156102d657600080fd5b61019d6106c2565b34156102e957600080fd5b61019d600160a060020a036004351661071a565b341561030857600080fd5b610310610793565b604051600160a060020a03909116815260200160405180910390f35b341561033757600080fd5b6101136107a2565b341561034a57600080fd5b61019d600160a060020a036004351660243561080d565b341561036c57600080fd5b61019d600160a060020a0360043516610908565b341561038b57600080fd5b610205600160a060020a036004358116906024351661097d565b34156103b057600080fd5b61019d6109a8565b60018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561044e5780601f106104235761010080835404028352916020019161044e565b820191906000526020600020905b81548152906001019060200180831161043157829003601f168201915b505050505081565b600454610100900460ff1681565b600160a060020a03338116600081815260076020908152604080832094871680845294909152808220859055909291907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a350600192915050565b60056020526000908152604090205460ff1681565b60035490565b600160a060020a03831660009081526005602052604081205460ff161561051157600080fd5b600160a060020a03808516600090815260076020908152604080832033909416835292905220548290101561054557600080fd5b610550848484610a07565b151561055b57600080fd5b600160a060020a0380851660009081526007602090815260408083203390941683529290522054610592908363ffffffff610ac316565b600160a060020a0380861660008181526007602090815260408083203390951683529381528382209490945590815260069092529020546105d9908363ffffffff610ac316565b600160a060020a03808616600090815260066020526040808220939093559085168152205461060e908363ffffffff610ad816565b600160a060020a03808516600081815260066020526040908190209390935591908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9085905190815260200160405180910390a35060019392505050565b60066020526000908152604090205481565b60045460ff1681565b600760209081526000928352604080842090915290825290205481565b600160a060020a031660009081526006602052604090205490565b6000805433600160a060020a039081169116146106de57600080fd5b6004805461ff001916905560017fddb8f090143b2e1457b4dd4fe0fc57127b8b3a9661ce9c19430e4204ab2c015b60405160405180910390a290565b6000805433600160a060020a0390811691161461073657600080fd5b600160a060020a03821660008181526005602052604090819020805460ff1916600190811790915591907f8a5cca14f62095a79fcb6b44a9ba18dd5c3105c0d0c3e2c7cf6b07da247eb3c8905160405180910390a3506001919050565b600054600160a060020a031681565b60028054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561044e5780601f106104235761010080835404028352916020019161044e565b600160a060020a03331660009081526005602052604081205460ff161561083357600080fd5b61083e338484610a07565b151561084957600080fd5b600160a060020a033316600090815260066020526040902054610872908363ffffffff610ac316565b600160a060020a0333811660009081526006602052604080822093909355908516815220546108a7908363ffffffff610ad816565b600160a060020a0380851660008181526006602052604090819020939093559133909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9085905190815260200160405180910390a350600192915050565b6000805433600160a060020a0390811691161461092457600080fd5b600160a060020a03821660008181526005602052604090819020805460ff19169055600191907fbdcbda5c4edd2728d95c3037713bb99a5a4fb3db18217561eed3cca05c22ca88905160405180910390a3506001919050565b600160a060020a03918216600090815260076020908152604080832093909416825291909152205490565b6000805433600160a060020a039081169116146109c457600080fd5b6004805461ff00191661010017905560017f3528a0c8bc9e293110ccdce7281543bad267d38c7395dc4771d4a00b04bc997560405160405180910390a250600190565b600454600090610100900460ff1615610a1f57600080fd5b60008211610a2c57600080fd5b600160a060020a03841660009081526006602052604090205482901015610a5257600080fd5b600160a060020a038416600090815260066020526040812054610a7b908463ffffffff610ac316565b1015610a8657600080fd5b600160a060020a038316600090815260066020526040902054610aaf818463ffffffff610ad816565b11610ab957600080fd5b5060019392505050565b600082821115610ad257600080fd5b50900390565b600082820183811015610aea57600080fd5b93925050505600a165627a7a723058209554af9bd86495d40874b042b953591d8f74d917e8639ed2cdf745f0c7bb930e0029

Deployed Bytecode

0x6060604052600436106100fb5763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde03811461010057806308bbd9471461018a578063095ea7b3146101b1578063129ed395146101d357806318160ddd146101f257806323b872dd1461021757806327e235e31461023f578063313ce5671461025e5780635c6581651461028757806370a08231146102ac5780637725686f146102cb57806389286abd146102de5780638da5cb5b146102fd57806395d89b411461032c578063a9059cbb1461033f578063c46d4cf114610361578063dd62ed3e14610380578063e63227b0146103a5575b600080fd5b341561010b57600080fd5b6101136103b8565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561014f578082015183820152602001610137565b50505050905090810190601f16801561017c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561019557600080fd5b61019d610456565b604051901515815260200160405180910390f35b34156101bc57600080fd5b61019d600160a060020a0360043516602435610464565b34156101de57600080fd5b61019d600160a060020a03600435166104d0565b34156101fd57600080fd5b6102056104e5565b60405190815260200160405180910390f35b341561022257600080fd5b61019d600160a060020a03600435811690602435166044356104eb565b341561024a57600080fd5b610205600160a060020a036004351661066f565b341561026957600080fd5b610271610681565b60405160ff909116815260200160405180910390f35b341561029257600080fd5b610205600160a060020a036004358116906024351661068a565b34156102b757600080fd5b610205600160a060020a03600435166106a7565b34156102d657600080fd5b61019d6106c2565b34156102e957600080fd5b61019d600160a060020a036004351661071a565b341561030857600080fd5b610310610793565b604051600160a060020a03909116815260200160405180910390f35b341561033757600080fd5b6101136107a2565b341561034a57600080fd5b61019d600160a060020a036004351660243561080d565b341561036c57600080fd5b61019d600160a060020a0360043516610908565b341561038b57600080fd5b610205600160a060020a036004358116906024351661097d565b34156103b057600080fd5b61019d6109a8565b60018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561044e5780601f106104235761010080835404028352916020019161044e565b820191906000526020600020905b81548152906001019060200180831161043157829003601f168201915b505050505081565b600454610100900460ff1681565b600160a060020a03338116600081815260076020908152604080832094871680845294909152808220859055909291907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a350600192915050565b60056020526000908152604090205460ff1681565b60035490565b600160a060020a03831660009081526005602052604081205460ff161561051157600080fd5b600160a060020a03808516600090815260076020908152604080832033909416835292905220548290101561054557600080fd5b610550848484610a07565b151561055b57600080fd5b600160a060020a0380851660009081526007602090815260408083203390941683529290522054610592908363ffffffff610ac316565b600160a060020a0380861660008181526007602090815260408083203390951683529381528382209490945590815260069092529020546105d9908363ffffffff610ac316565b600160a060020a03808616600090815260066020526040808220939093559085168152205461060e908363ffffffff610ad816565b600160a060020a03808516600081815260066020526040908190209390935591908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9085905190815260200160405180910390a35060019392505050565b60066020526000908152604090205481565b60045460ff1681565b600760209081526000928352604080842090915290825290205481565b600160a060020a031660009081526006602052604090205490565b6000805433600160a060020a039081169116146106de57600080fd5b6004805461ff001916905560017fddb8f090143b2e1457b4dd4fe0fc57127b8b3a9661ce9c19430e4204ab2c015b60405160405180910390a290565b6000805433600160a060020a0390811691161461073657600080fd5b600160a060020a03821660008181526005602052604090819020805460ff1916600190811790915591907f8a5cca14f62095a79fcb6b44a9ba18dd5c3105c0d0c3e2c7cf6b07da247eb3c8905160405180910390a3506001919050565b600054600160a060020a031681565b60028054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561044e5780601f106104235761010080835404028352916020019161044e565b600160a060020a03331660009081526005602052604081205460ff161561083357600080fd5b61083e338484610a07565b151561084957600080fd5b600160a060020a033316600090815260066020526040902054610872908363ffffffff610ac316565b600160a060020a0333811660009081526006602052604080822093909355908516815220546108a7908363ffffffff610ad816565b600160a060020a0380851660008181526006602052604090819020939093559133909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9085905190815260200160405180910390a350600192915050565b6000805433600160a060020a0390811691161461092457600080fd5b600160a060020a03821660008181526005602052604090819020805460ff19169055600191907fbdcbda5c4edd2728d95c3037713bb99a5a4fb3db18217561eed3cca05c22ca88905160405180910390a3506001919050565b600160a060020a03918216600090815260076020908152604080832093909416825291909152205490565b6000805433600160a060020a039081169116146109c457600080fd5b6004805461ff00191661010017905560017f3528a0c8bc9e293110ccdce7281543bad267d38c7395dc4771d4a00b04bc997560405160405180910390a250600190565b600454600090610100900460ff1615610a1f57600080fd5b60008211610a2c57600080fd5b600160a060020a03841660009081526006602052604090205482901015610a5257600080fd5b600160a060020a038416600090815260066020526040812054610a7b908463ffffffff610ac316565b1015610a8657600080fd5b600160a060020a038316600090815260066020526040902054610aaf818463ffffffff610ad816565b11610ab957600080fd5b5060019392505050565b600082821115610ad257600080fd5b50900390565b600082820183811015610aea57600080fd5b93925050505600a165627a7a723058209554af9bd86495d40874b042b953591d8f74d917e8639ed2cdf745f0c7bb930e0029

Swarm Source

bzzr://9554af9bd86495d40874b042b953591d8f74d917e8639ed2cdf745f0c7bb930e
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.