ETH Price: $2,636.57 (+7.68%)
Gas: 2 Gwei

Token

CROPS (CROPS)
 

Overview

Max Total Supply

100,951.492214940310551569 CROPS

Holders

84

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
372.005330495904634608 CROPS

Value
$0.00
0xBA98b69a140c078746219D0bBf0bb3b923483374
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
CropsToken

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-01-15
*/

pragma solidity ^0.6.12;

/**********************************************************************

  /$$$$$$  /$$$$$$$   /$$$$$$  /$$$$$$$   /$$$$$$ 
 /$$__  $$| $$__  $$ /$$__  $$| $$__  $$ /$$__  $$
| $$  \__/| $$  \ $$| $$  \ $$| $$  \ $$| $$  \__/
| $$      | $$$$$$$/| $$  | $$| $$$$$$$/|  $$$$$$ 
| $$      | $$__  $$| $$  | $$| $$____/  \____  $$
| $$    $$| $$  \ $$| $$  | $$| $$       /$$  \ $$
|  $$$$$$/| $$  | $$|  $$$$$$/| $$      |  $$$$$$/
 \______/ |__/  |__/ \______/ |__/       \______/ 
 
 
 Website: https://masterfarmer.io/
 Telegram: https://t.me/MasterYieldFarmer
	
/**********************************************************************/
// File: @openzeppelin/contracts/GSN/Context.sol

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with GSN meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address payable) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

// File: @openzeppelin/contracts/utils/Address.sol

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

// File: @openzeppelin/contracts/math/SafeMath.sol

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the number of decimal places.
     */
    function decimals() external view returns (uint8);

    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: 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
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

// File: @openzeppelin/contracts/access/Ownable.sol

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
contract Ownable is Context {
    address public _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () internal {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}


interface Callable {
    function tokenCallback(address _from, uint256 _tokens, bytes calldata _data) external returns (bool);
    function receiveApproval(address _from, uint256 _tokens, address _token, bytes calldata _data) external;
}

contract CropsToken is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;
    
    event LogBurn(uint256 decayrate, uint256 totalSupply);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);

    modifier validRecipient(address to) {
        require(to != address(0x0));
        require(to != address(this));
        _;
    }

    string public constant _name = "CROPS";
    string public constant _symbol = "CROPS";
    uint8 public _decimals = 18;
    
    uint256 private constant DECIMALS = 18;
    uint256 private constant MAX_UINT256 = ~uint256(0); //(2^256) - 1
    uint256 private constant INITIAL_FRAGMENTS_SUPPLY = 40000 * 10**DECIMALS;
    uint256 private constant TOTAL_GONS = MAX_UINT256 - (MAX_UINT256 % INITIAL_FRAGMENTS_SUPPLY);
    
    uint256 private _totalSupply;
    uint256 private _gonsPerFragment;
    mapping(address => uint256) private _gonBalances;
    mapping (address => mapping (address => uint256)) private _allowedFragments;
   
    uint256 public transBurnrate = 250; //initial TBR 2.5%
    
    uint256 public decayBurnrate = 1000; //initial DBR 10%
    
    uint256 public maxtransBurnrate = 500; // max TBR 5%
    
    uint256 public maxdecayBurnrate = 1000; // max DBR 10%
    
   

    constructor() public {
        _owner = msg.sender;
        
        _gonsPerFragment = TOTAL_GONS.div(INITIAL_FRAGMENTS_SUPPLY);
        
        mint(_owner, INITIAL_FRAGMENTS_SUPPLY);
    }
    
    function globalDecay() public onlyOwner returns (uint256)
    {
        uint256 _remainrate = 10000; //0.25%->decayrate=25
        _remainrate = _remainrate.sub(decayBurnrate);

        _totalSupply = _totalSupply.mul(_remainrate);
        _totalSupply = _totalSupply.sub(_totalSupply.mod(10000));
        _totalSupply = _totalSupply.div(10000);

        _gonsPerFragment = TOTAL_GONS.div(_totalSupply);

        emit LogBurn(decayBurnrate, _totalSupply);
        return _totalSupply;
    }
    
    function burn(address account, uint256 amount) public onlyOwner {
        require(account != address(0), "burn from the zero address");
        require(account == 0x29188b95A253CE9A1A386977e26Fa18e27c9C5A5, "wrong address");

        _beforeTokenTransfer(account, address(0), amount);
        
        uint256 gonValue = amount.mul(_gonsPerFragment);
        _gonBalances[account] = _gonBalances[account].sub(gonValue, "burn amount exceeds balance");
        
        _totalSupply = _totalSupply.sub(amount, "burn amount exceeds balance");
        emit Transfer(account, address(0), amount);
    }
    
    
    function name() public pure returns (string memory) {
        return _name;
    }
    
    function symbol() public pure returns (string memory) {
        return _symbol;
    }
    
    function decimals() public view override returns (uint8) {
        return _decimals;
    }
    
    function totalSupply() public view override returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account) public view override returns (uint256)
    {
        return _gonBalances[account].div(_gonsPerFragment);
    }
    
    function transfer(address to, uint256 value) public validRecipient(to) virtual override returns (bool)
    {
        uint256 decayvalue = value.mul(transBurnrate); //example::2.5%->250/10000
        decayvalue = decayvalue.sub(decayvalue.mod(10000));
        decayvalue = decayvalue.div(10000);
        
        uint256 leftValue = value.sub(decayvalue);
        
        uint256 gonValue = value.mul(_gonsPerFragment);
        uint256 leftgonValue = value.sub(decayvalue);
        leftgonValue = leftgonValue.mul(_gonsPerFragment);
        _gonBalances[msg.sender] = _gonBalances[msg.sender].sub(gonValue);
        _gonBalances[to] = _gonBalances[to].add(leftgonValue);
        
        _totalSupply = _totalSupply.sub(decayvalue);
        
        emit Transfer(msg.sender, address(0x0), decayvalue);
        emit Transfer(msg.sender, to, leftValue);
        return true;
    }
    
    function allowance(address owner_, address spender) public view virtual override returns (uint256)
    {
        return _allowedFragments[owner_][spender];
    }

    function approve(address spender, uint256 value) public virtual override returns (bool)
    {
        _allowedFragments[msg.sender][spender] = value;
        emit Approval(msg.sender, spender, value);
        return true;
    }
    
    function transferFrom(address from, address to, uint256 value) public validRecipient(to) virtual override returns (bool)
    {
        _allowedFragments[from][msg.sender] = _allowedFragments[from][msg.sender].sub(value);
        
        uint256 decayvalue = value.mul(transBurnrate); //example::2.5%->250/10000
        decayvalue = decayvalue.sub(decayvalue.mod(10000));
        decayvalue = decayvalue.div(10000);
        
        uint256 leftValue = value.sub(decayvalue);
        
        uint256 gonValue = value.mul(_gonsPerFragment);
        uint256 leftgonValue = value.sub(decayvalue);
        leftgonValue = leftgonValue.mul(_gonsPerFragment);
        
        _totalSupply = _totalSupply.sub(decayvalue);
        
        _gonBalances[from] = _gonBalances[from].sub(gonValue);
        _gonBalances[to] = _gonBalances[to].add(leftgonValue);
        
        emit Transfer(from, address(0x0), decayvalue);
        emit Transfer(from, to, leftValue);

        return true;
    }
    
    function increaseAllowance(address spender, uint256 addedValue) public returns (bool)
    {
        _allowedFragments[msg.sender][spender] =
        _allowedFragments[msg.sender][spender].add(addedValue);
        emit Approval(msg.sender, spender, _allowedFragments[msg.sender][spender]);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool)
    {
        uint256 oldValue = _allowedFragments[msg.sender][spender];
        if (subtractedValue >= oldValue) {
            _allowedFragments[msg.sender][spender] = 0;
        } else {
            _allowedFragments[msg.sender][spender] = oldValue.sub(subtractedValue);
        }
        emit Approval(msg.sender, spender, _allowedFragments[msg.sender][spender]);
        return true;
    }
    
    function changetransBurnrate(uint256 _newtransBurnrate) public onlyOwner returns (bool) {
        require(_newtransBurnrate <= maxtransBurnrate, "too high value");
        require(_newtransBurnrate >= 0, "wrong value");
        transBurnrate = _newtransBurnrate;
        return true;
    }
    
    function changedecayBurnrate(uint256 _newdecayBurnrate) public onlyOwner returns (bool) {
        require(_newdecayBurnrate <= maxdecayBurnrate, "too high value");
        require(_newdecayBurnrate >= 0, "wrong value");
        decayBurnrate = _newdecayBurnrate;
        return true;
    }

    function mint(address account, uint256 amount) public onlyOwner {
        require(account != address(0));
        
        _beforeTokenTransfer(address(0), account, amount);
        uint256 gonValue = amount.mul(_gonsPerFragment);

        _totalSupply = _totalSupply.add(amount);
        _gonBalances[account] = _gonBalances[account].add(gonValue);
        emit Transfer(address(0), account, amount);
    }
    
    
    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be to transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { }
    
    function approveAndCall(address _spender, uint256 _tokens, bytes calldata _data) external returns (bool) {
        approve(_spender, _tokens);
        Callable(_spender).receiveApproval(msg.sender, _tokens, address(this), _data);
        return true;
    }

    function transferAndCall(address _to, uint256 _tokens, bytes calldata _data) external returns (bool) {
        uint256 _balanceBefore = balanceOf(_to);
        transfer(_to, _tokens);
        uint256 _tokensReceived = balanceOf(_to) - _balanceBefore;
        uint32 _size;
        assembly {
            _size := extcodesize(_to)
        }
        if (_size > 0) {
            require(Callable(_to).tokenCallback(msg.sender, _tokensReceived, _data));
        }
        return true;
    }
    
    function safe32(uint n, string memory errorMessage) internal pure returns (uint32) {
        require(n < 2**32, errorMessage);
        return uint32(n);
    }

    function getChainId() internal pure returns (uint) {
        uint256 chainId;
        assembly { chainId := chainid() }
        return chainId;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"decayrate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"LogBurn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner_","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_tokens","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"approveAndCall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newdecayBurnrate","type":"uint256"}],"name":"changedecayBurnrate","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newtransBurnrate","type":"uint256"}],"name":"changetransBurnrate","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decayBurnrate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"globalDecay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxdecayBurnrate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxtransBurnrate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"transBurnrate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokens","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"transferAndCall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526012600060146101000a81548160ff021916908360ff16021790555060fa6005556103e86006556101f46007556103e86008553480156200004457600080fd5b50600062000057620001b560201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200016f6012600a0a619c40026012600a0a619c4002600019816200015657fe5b0660001903620001bd60201b62002bc01790919060201c565b600281905550620001af60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff166012600a0a619c40026200020f60201b60201c565b6200065c565b600033905090565b60006200020783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200047860201b60201c565b905092915050565b6200021f620001b560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620002e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200031b57600080fd5b6200032f600083836200054360201b60201c565b60006200034d600254836200054860201b62002c0a1790919060201c565b90506200036b82600154620005d360201b62002c901790919060201c565b600181905550620003ca81600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054620005d360201b62002c901790919060201c565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3505050565b6000808311829062000528576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015620004ec578082015181840152602081019050620004cf565b50505050905090810190601f1680156200051a5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816200053557fe5b049050809150509392505050565b505050565b6000808314156200055d5760009050620005cd565b60008284029050828482816200056f57fe5b0414620005c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180620036e96021913960400191505060405180910390fd5b809150505b92915050565b60008082840190508381101562000652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b61307d806200066c6000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c80638da5cb5b11610104578063b09f1266116100a2578063dd62ed3e11610071578063dd62ed3e14610a0e578063dd71bb9214610a86578063f2fde38b14610aa4578063f80a598d14610ae8576101cf565b8063b09f12661461081b578063b2bdfa7b1461089e578063cae9ca51146108d2578063d28d88521461098b576101cf565b8063a457c2d7116100de578063a457c2d7146106cb578063a66c64251461072f578063a9059cbb14610773578063abc14320146107d7576101cf565b80638da5cb5b146105c657806395d89b41146105fa5780639dc29fac1461067d576101cf565b8063344bbec01161017157806340c10f191161014b57806340c10f19146104f8578063478810b21461054657806370a0823114610564578063715018a6146105bc576101cf565b8063344bbec0146103bd57806339509351146103db5780634000aea01461043f576101cf565b806323b872dd116101ad57806323b872dd146102d95780632940fa661461035d578063313ce5671461037b57806332424aa31461039c576101cf565b806306fdde03146101d4578063095ea7b31461025757806318160ddd146102bb575b600080fd5b6101dc610b06565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561021c578082015181840152602081019050610201565b50505050905090810190601f1680156102495780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102a36004803603604081101561026d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610b43565b60405180821515815260200191505060405180910390f35b6102c3610c35565b6040518082815260200191505060405180910390f35b610345600480360360608110156102ef57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c3f565b60405180821515815260200191505060405180910390f35b61036561109b565b6040518082815260200191505060405180910390f35b6103836110a1565b604051808260ff16815260200191505060405180910390f35b6103a46110b7565b604051808260ff16815260200191505060405180910390f35b6103c56110ca565b6040518082815260200191505060405180910390f35b610427600480360360408110156103f157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506110d0565b60405180821515815260200191505060405180910390f35b6104e06004803603606081101561045557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561049c57600080fd5b8201836020820111156104ae57600080fd5b803590602001918460018302840111640100000000831117156104d057600080fd5b90919293919293905050506112cc565b60405180821515815260200191505060405180910390f35b6105446004803603604081101561050e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611402565b005b61054e611644565b6040518082815260200191505060405180910390f35b6105a66004803603602081101561057a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061164a565b6040518082815260200191505060405180910390f35b6105c46116a7565b005b6105ce61182d565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610602611856565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610642578082015181840152602081019050610627565b50505050905090810190601f16801561066f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6106c96004803603604081101561069357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611893565b005b610717600480360360408110156106e157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611c61565b60405180821515815260200191505060405180910390f35b61075b6004803603602081101561074557600080fd5b8101908080359060200190929190505050611ef1565b60405180821515815260200191505060405180910390f35b6107bf6004803603604081101561078957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506120ba565b60405180821515815260200191505060405180910390f35b610803600480360360208110156107ed57600080fd5b8101908080359060200190929190505050612406565b60405180821515815260200191505060405180910390f35b6108236125cf565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610863578082015181840152602081019050610848565b50505050905090810190601f1680156108905780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6108a6612608565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610973600480360360608110156108e857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561092f57600080fd5b82018360208201111561094157600080fd5b8035906020019184600183028401116401000000008311171561096357600080fd5b909192939192939050505061262c565b60405180821515815260200191505060405180910390f35b610993612720565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156109d35780820151818401526020810190506109b8565b50505050905090810190601f168015610a005780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610a7060048036036040811015610a2457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612759565b6040518082815260200191505060405180910390f35b610a8e6127e0565b6040518082815260200191505060405180910390f35b610ae660048036036020811015610aba57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506129af565b005b610af0612bba565b6040518082815260200191505060405180910390f35b60606040518060400160405280600581526020017f43524f5053000000000000000000000000000000000000000000000000000000815250905090565b600081600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b6000600154905090565b600082600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610c7c57600080fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610cb557600080fd5b610d4483600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d1890919063ffffffff16565b600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000610ddb60055485612c0a90919063ffffffff16565b9050610e04610df561271083612d6290919063ffffffff16565b82612d1890919063ffffffff16565b9050610e1b61271082612bc090919063ffffffff16565b90506000610e328286612d1890919063ffffffff16565b90506000610e4b60025487612c0a90919063ffffffff16565b90506000610e628488612d1890919063ffffffff16565b9050610e7960025482612c0a90919063ffffffff16565b9050610e9084600154612d1890919063ffffffff16565b600181905550610ee882600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d1890919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610f7d81600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c9090919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a38773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a36001955050505050509392505050565b60085481565b60008060149054906101000a900460ff16905090565b600060149054906101000a900460ff1681565b60075481565b600061116182600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c9090919063ffffffff16565b600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b6000806112d88661164a565b90506112e486866120ba565b506000816112f18861164a565b0390506000873b905060008163ffffffff1611156113f3578773ffffffffffffffffffffffffffffffffffffffff16636be32e73338489896040518563ffffffff1660e01b8152600401808573ffffffffffffffffffffffffffffffffffffffff168152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050602060405180830381600087803b1580156113ae57600080fd5b505af11580156113c2573d6000803e3d6000fd5b505050506040513d60208110156113d857600080fd5b81019080805190602001909291905050506113f257600080fd5b5b60019350505050949350505050565b61140a612dac565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561150457600080fd5b61151060008383612db4565b600061152760025483612c0a90919063ffffffff16565b905061153e82600154612c9090919063ffffffff16565b60018190555061159681600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c9090919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3505050565b60065481565b60006116a0600254600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bc090919063ffffffff16565b9050919050565b6116af612dac565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461176f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600581526020017f43524f5053000000000000000000000000000000000000000000000000000000815250905090565b61189b612dac565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461195b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f6275726e2066726f6d20746865207a65726f206164647265737300000000000081525060200191505060405180910390fd5b7329188b95a253ce9a1a386977e26fa18e27c9c5a573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611ab3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f77726f6e6720616464726573730000000000000000000000000000000000000081525060200191505060405180910390fd5b611abf82600083612db4565b6000611ad660025483612c0a90919063ffffffff16565b9050611b61816040518060400160405280601b81526020017f6275726e20616d6f756e7420657863656564732062616c616e63650000000000815250600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612db99092919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611bf0826040518060400160405280601b81526020017f6275726e20616d6f756e7420657863656564732062616c616e63650000000000815250600154612db99092919063ffffffff16565b600181905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3505050565b600080600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050808310611d71576000600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611e05565b611d848382612d1890919063ffffffff16565b600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600191505092915050565b6000611efb612dac565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fbb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600754821115612033576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f746f6f20686967682076616c756500000000000000000000000000000000000081525060200191505060405180910390fd5b60008210156120aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f77726f6e672076616c756500000000000000000000000000000000000000000081525060200191505060405180910390fd5b8160058190555060019050919050565b600082600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156120f757600080fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561213057600080fd5b600061214760055485612c0a90919063ffffffff16565b905061217061216161271083612d6290919063ffffffff16565b82612d1890919063ffffffff16565b905061218761271082612bc090919063ffffffff16565b9050600061219e8286612d1890919063ffffffff16565b905060006121b760025487612c0a90919063ffffffff16565b905060006121ce8488612d1890919063ffffffff16565b90506121e560025482612c0a90919063ffffffff16565b905061223982600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d1890919063ffffffff16565b600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506122ce81600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c9090919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061232684600154612d1890919063ffffffff16565b600181905550600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a38773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a360019550505050505092915050565b6000612410612dac565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600854821115612548576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f746f6f20686967682076616c756500000000000000000000000000000000000081525060200191505060405180910390fd5b60008210156125bf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f77726f6e672076616c756500000000000000000000000000000000000000000081525060200191505060405180910390fd5b8160068190555060019050919050565b6040518060400160405280600581526020017f43524f505300000000000000000000000000000000000000000000000000000081525081565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006126388585610b43565b508473ffffffffffffffffffffffffffffffffffffffff16638f4ffcb133863087876040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff168152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b1580156126fc57600080fd5b505af1158015612710573d6000803e3d6000fd5b5050505060019050949350505050565b6040518060400160405280600581526020017f43524f505300000000000000000000000000000000000000000000000000000081525081565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60006127ea612dac565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600061271090506128c660065482612d1890919063ffffffff16565b90506128dd81600154612c0a90919063ffffffff16565b60018190555061290e6128fd612710600154612d6290919063ffffffff16565b600154612d1890919063ffffffff16565b60018190555061292b612710600154612bc090919063ffffffff16565b60018190555061295d6001546012600a0a619c40026000198161294a57fe5b0660001903612bc090919063ffffffff16565b6002819055507f2335a6005c3d115edd3d43643bbd043460e8f950a1b97b7d746c72358ff22938600654600154604051808381526020018281526020019250505060405180910390a160015491505090565b6129b7612dac565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a77576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612afd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806130016026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60055481565b6000612c0283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612e79565b905092915050565b600080831415612c1d5760009050612c8a565b6000828402905082848281612c2e57fe5b0414612c85576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806130276021913960400191505060405180910390fd5b809150505b92915050565b600080828401905083811015612d0e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000612d5a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612db9565b905092915050565b6000612da483836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f0000000000000000815250612f3f565b905092915050565b600033905090565b505050565b6000838311158290612e66576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612e2b578082015181840152602081019050612e10565b50505050905090810190601f168015612e585780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008083118290612f25576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612eea578082015181840152602081019050612ecf565b50505050905090810190601f168015612f175780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581612f3157fe5b049050809150509392505050565b6000808314158290612fec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612fb1578082015181840152602081019050612f96565b50505050905090810190601f168015612fde5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50828481612ff657fe5b069050939250505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220f99729f4f692279e24937f9237af8bfd3dddb7cf741323767935196b98601a8a64736f6c634300060c0033536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101cf5760003560e01c80638da5cb5b11610104578063b09f1266116100a2578063dd62ed3e11610071578063dd62ed3e14610a0e578063dd71bb9214610a86578063f2fde38b14610aa4578063f80a598d14610ae8576101cf565b8063b09f12661461081b578063b2bdfa7b1461089e578063cae9ca51146108d2578063d28d88521461098b576101cf565b8063a457c2d7116100de578063a457c2d7146106cb578063a66c64251461072f578063a9059cbb14610773578063abc14320146107d7576101cf565b80638da5cb5b146105c657806395d89b41146105fa5780639dc29fac1461067d576101cf565b8063344bbec01161017157806340c10f191161014b57806340c10f19146104f8578063478810b21461054657806370a0823114610564578063715018a6146105bc576101cf565b8063344bbec0146103bd57806339509351146103db5780634000aea01461043f576101cf565b806323b872dd116101ad57806323b872dd146102d95780632940fa661461035d578063313ce5671461037b57806332424aa31461039c576101cf565b806306fdde03146101d4578063095ea7b31461025757806318160ddd146102bb575b600080fd5b6101dc610b06565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561021c578082015181840152602081019050610201565b50505050905090810190601f1680156102495780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102a36004803603604081101561026d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610b43565b60405180821515815260200191505060405180910390f35b6102c3610c35565b6040518082815260200191505060405180910390f35b610345600480360360608110156102ef57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c3f565b60405180821515815260200191505060405180910390f35b61036561109b565b6040518082815260200191505060405180910390f35b6103836110a1565b604051808260ff16815260200191505060405180910390f35b6103a46110b7565b604051808260ff16815260200191505060405180910390f35b6103c56110ca565b6040518082815260200191505060405180910390f35b610427600480360360408110156103f157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506110d0565b60405180821515815260200191505060405180910390f35b6104e06004803603606081101561045557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561049c57600080fd5b8201836020820111156104ae57600080fd5b803590602001918460018302840111640100000000831117156104d057600080fd5b90919293919293905050506112cc565b60405180821515815260200191505060405180910390f35b6105446004803603604081101561050e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611402565b005b61054e611644565b6040518082815260200191505060405180910390f35b6105a66004803603602081101561057a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061164a565b6040518082815260200191505060405180910390f35b6105c46116a7565b005b6105ce61182d565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610602611856565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610642578082015181840152602081019050610627565b50505050905090810190601f16801561066f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6106c96004803603604081101561069357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611893565b005b610717600480360360408110156106e157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611c61565b60405180821515815260200191505060405180910390f35b61075b6004803603602081101561074557600080fd5b8101908080359060200190929190505050611ef1565b60405180821515815260200191505060405180910390f35b6107bf6004803603604081101561078957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506120ba565b60405180821515815260200191505060405180910390f35b610803600480360360208110156107ed57600080fd5b8101908080359060200190929190505050612406565b60405180821515815260200191505060405180910390f35b6108236125cf565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610863578082015181840152602081019050610848565b50505050905090810190601f1680156108905780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6108a6612608565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610973600480360360608110156108e857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561092f57600080fd5b82018360208201111561094157600080fd5b8035906020019184600183028401116401000000008311171561096357600080fd5b909192939192939050505061262c565b60405180821515815260200191505060405180910390f35b610993612720565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156109d35780820151818401526020810190506109b8565b50505050905090810190601f168015610a005780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610a7060048036036040811015610a2457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612759565b6040518082815260200191505060405180910390f35b610a8e6127e0565b6040518082815260200191505060405180910390f35b610ae660048036036020811015610aba57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506129af565b005b610af0612bba565b6040518082815260200191505060405180910390f35b60606040518060400160405280600581526020017f43524f5053000000000000000000000000000000000000000000000000000000815250905090565b600081600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b6000600154905090565b600082600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610c7c57600080fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610cb557600080fd5b610d4483600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d1890919063ffffffff16565b600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000610ddb60055485612c0a90919063ffffffff16565b9050610e04610df561271083612d6290919063ffffffff16565b82612d1890919063ffffffff16565b9050610e1b61271082612bc090919063ffffffff16565b90506000610e328286612d1890919063ffffffff16565b90506000610e4b60025487612c0a90919063ffffffff16565b90506000610e628488612d1890919063ffffffff16565b9050610e7960025482612c0a90919063ffffffff16565b9050610e9084600154612d1890919063ffffffff16565b600181905550610ee882600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d1890919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610f7d81600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c9090919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a38773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a36001955050505050509392505050565b60085481565b60008060149054906101000a900460ff16905090565b600060149054906101000a900460ff1681565b60075481565b600061116182600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c9090919063ffffffff16565b600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b6000806112d88661164a565b90506112e486866120ba565b506000816112f18861164a565b0390506000873b905060008163ffffffff1611156113f3578773ffffffffffffffffffffffffffffffffffffffff16636be32e73338489896040518563ffffffff1660e01b8152600401808573ffffffffffffffffffffffffffffffffffffffff168152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050602060405180830381600087803b1580156113ae57600080fd5b505af11580156113c2573d6000803e3d6000fd5b505050506040513d60208110156113d857600080fd5b81019080805190602001909291905050506113f257600080fd5b5b60019350505050949350505050565b61140a612dac565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561150457600080fd5b61151060008383612db4565b600061152760025483612c0a90919063ffffffff16565b905061153e82600154612c9090919063ffffffff16565b60018190555061159681600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c9090919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3505050565b60065481565b60006116a0600254600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bc090919063ffffffff16565b9050919050565b6116af612dac565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461176f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600581526020017f43524f5053000000000000000000000000000000000000000000000000000000815250905090565b61189b612dac565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461195b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f6275726e2066726f6d20746865207a65726f206164647265737300000000000081525060200191505060405180910390fd5b7329188b95a253ce9a1a386977e26fa18e27c9c5a573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611ab3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f77726f6e6720616464726573730000000000000000000000000000000000000081525060200191505060405180910390fd5b611abf82600083612db4565b6000611ad660025483612c0a90919063ffffffff16565b9050611b61816040518060400160405280601b81526020017f6275726e20616d6f756e7420657863656564732062616c616e63650000000000815250600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612db99092919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611bf0826040518060400160405280601b81526020017f6275726e20616d6f756e7420657863656564732062616c616e63650000000000815250600154612db99092919063ffffffff16565b600181905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3505050565b600080600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050808310611d71576000600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611e05565b611d848382612d1890919063ffffffff16565b600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600191505092915050565b6000611efb612dac565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fbb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600754821115612033576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f746f6f20686967682076616c756500000000000000000000000000000000000081525060200191505060405180910390fd5b60008210156120aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f77726f6e672076616c756500000000000000000000000000000000000000000081525060200191505060405180910390fd5b8160058190555060019050919050565b600082600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156120f757600080fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561213057600080fd5b600061214760055485612c0a90919063ffffffff16565b905061217061216161271083612d6290919063ffffffff16565b82612d1890919063ffffffff16565b905061218761271082612bc090919063ffffffff16565b9050600061219e8286612d1890919063ffffffff16565b905060006121b760025487612c0a90919063ffffffff16565b905060006121ce8488612d1890919063ffffffff16565b90506121e560025482612c0a90919063ffffffff16565b905061223982600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d1890919063ffffffff16565b600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506122ce81600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c9090919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061232684600154612d1890919063ffffffff16565b600181905550600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a38773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a360019550505050505092915050565b6000612410612dac565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600854821115612548576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f746f6f20686967682076616c756500000000000000000000000000000000000081525060200191505060405180910390fd5b60008210156125bf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f77726f6e672076616c756500000000000000000000000000000000000000000081525060200191505060405180910390fd5b8160068190555060019050919050565b6040518060400160405280600581526020017f43524f505300000000000000000000000000000000000000000000000000000081525081565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006126388585610b43565b508473ffffffffffffffffffffffffffffffffffffffff16638f4ffcb133863087876040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff168152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b1580156126fc57600080fd5b505af1158015612710573d6000803e3d6000fd5b5050505060019050949350505050565b6040518060400160405280600581526020017f43524f505300000000000000000000000000000000000000000000000000000081525081565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60006127ea612dac565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600061271090506128c660065482612d1890919063ffffffff16565b90506128dd81600154612c0a90919063ffffffff16565b60018190555061290e6128fd612710600154612d6290919063ffffffff16565b600154612d1890919063ffffffff16565b60018190555061292b612710600154612bc090919063ffffffff16565b60018190555061295d6001546012600a0a619c40026000198161294a57fe5b0660001903612bc090919063ffffffff16565b6002819055507f2335a6005c3d115edd3d43643bbd043460e8f950a1b97b7d746c72358ff22938600654600154604051808381526020018281526020019250505060405180910390a160015491505090565b6129b7612dac565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a77576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612afd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806130016026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60055481565b6000612c0283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612e79565b905092915050565b600080831415612c1d5760009050612c8a565b6000828402905082848281612c2e57fe5b0414612c85576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806130276021913960400191505060405180910390fd5b809150505b92915050565b600080828401905083811015612d0e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000612d5a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612db9565b905092915050565b6000612da483836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f0000000000000000815250612f3f565b905092915050565b600033905090565b505050565b6000838311158290612e66576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612e2b578082015181840152602081019050612e10565b50505050905090810190601f168015612e585780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008083118290612f25576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612eea578082015181840152602081019050612ecf565b50505050905090810190601f168015612f175780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581612f3157fe5b049050809150509392505050565b6000808314158290612fec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612fb1578082015181840152602081019050612f96565b50505050905090810190601f168015612fde5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50828481612ff657fe5b069050939250505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220f99729f4f692279e24937f9237af8bfd3dddb7cf741323767935196b98601a8a64736f6c634300060c0033

Deployed Bytecode Sourcemap

18600:9353:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21359:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23008:232;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;21657:100;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23252:1009;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;19935:38;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21553:92;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;19183:27;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;19871:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24273:321;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;27117:499;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;25716:416;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19805:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21765:149;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17800:148;;;:::i;:::-;;17158:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;21454:87;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20733:608;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24602:494;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;25108:294;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;21926:898;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;25414:294;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;19136:40;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16693:21;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;26849:260;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;19091:38;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22836:164;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20218:503;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18103:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19739:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21359:83;21396:13;21429:5;;;;;;;;;;;;;;;;;21422:12;;21359:83;:::o;23008:232::-;23090:4;23153:5;23112:17;:29;23130:10;23112:29;;;;;;;;;;;;;;;:38;23142:7;23112:38;;;;;;;;;;;;;;;:46;;;;23195:7;23174:36;;23183:10;23174:36;;;23204:5;23174:36;;;;;;;;;;;;;;;;;;23228:4;23221:11;;23008:232;;;;:::o;21657:100::-;21710:7;21737:12;;21730:19;;21657:100;:::o;23252:1009::-;23367:4;23337:2;19019:3;19005:18;;:2;:18;;;;18997:27;;;;;;19057:4;19043:19;;:2;:19;;;;19035:28;;;;;;23427:46:::1;23467:5;23427:17;:23;23445:4;23427:23;;;;;;;;;;;;;;;:35;23451:10;23427:35;;;;;;;;;;;;;;;;:39;;:46;;;;:::i;:::-;23389:17;:23;23407:4;23389:23;;;;;;;;;;;;;;;:35;23413:10;23389:35;;;;;;;;;;;;;;;:84;;;;23494:18;23515:24;23525:13;;23515:5;:9;;:24;;;;:::i;:::-;23494:45;;23590:37;23605:21;23620:5;23605:10;:14;;:21;;;;:::i;:::-;23590:10;:14;;:37;;;;:::i;:::-;23577:50;;23651:21;23666:5;23651:10;:14;;:21;;;;:::i;:::-;23638:34;;23693:17;23713:21;23723:10;23713:5;:9;;:21;;;;:::i;:::-;23693:41;;23755:16;23774:27;23784:16;;23774:5;:9;;:27;;;;:::i;:::-;23755:46;;23812:20;23835:21;23845:10;23835:5;:9;;:21;;;;:::i;:::-;23812:44;;23882:34;23899:16;;23882:12;:16;;:34;;;;:::i;:::-;23867:49;;23952:28;23969:10;23952:12;;:16;;:28;;;;:::i;:::-;23937:12;:43;;;;24022:32;24045:8;24022:12;:18;24035:4;24022:18;;;;;;;;;;;;;;;;:22;;:32;;;;:::i;:::-;24001:12;:18;24014:4;24001:18;;;;;;;;;;;;;;;:53;;;;24084:34;24105:12;24084;:16;24097:2;24084:16;;;;;;;;;;;;;;;;:20;;:34;;;;:::i;:::-;24065:12;:16;24078:2;24065:16;;;;;;;;;;;;;;;:53;;;;24167:3;24144:40;;24153:4;24144:40;;;24173:10;24144:40;;;;;;;;;;;;;;;;;;24215:2;24200:29;;24209:4;24200:29;;;24219:9;24200:29;;;;;;;;;;;;;;;;;;24249:4;24242:11;;;;;;23252:1009:::0;;;;;;:::o;19935:38::-;;;;:::o;21553:92::-;21603:5;21628:9;;;;;;;;;;;21621:16;;21553:92;:::o;19183:27::-;;;;;;;;;;;;;:::o;19871:37::-;;;;:::o;24273:321::-;24353:4;24425:54;24468:10;24425:17;:29;24443:10;24425:29;;;;;;;;;;;;;;;:38;24455:7;24425:38;;;;;;;;;;;;;;;;:42;;:54;;;;:::i;:::-;24375:17;:29;24393:10;24375:29;;;;;;;;;;;;;;;:38;24405:7;24375:38;;;;;;;;;;;;;;;:104;;;;24516:7;24495:69;;24504:10;24495:69;;;24525:17;:29;24543:10;24525:29;;;;;;;;;;;;;;;:38;24555:7;24525:38;;;;;;;;;;;;;;;;24495:69;;;;;;;;;;;;;;;;;;24582:4;24575:11;;24273:321;;;;:::o;27117:499::-;27212:4;27229:22;27254:14;27264:3;27254:9;:14::i;:::-;27229:39;;27279:22;27288:3;27293:7;27279:8;:22::i;:::-;;27312:23;27355:14;27338;27348:3;27338:9;:14::i;:::-;:31;27312:57;;27380:12;27448:3;27436:16;27427:25;;27485:1;27477:5;:9;;;27473:114;;;27520:3;27511:27;;;27539:10;27551:15;27568:5;;27511:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27503:72;;;;;;27473:114;27604:4;27597:11;;;;;27117:499;;;;;;:::o;25716:416::-;17380:12;:10;:12::i;:::-;17370:22;;:6;;;;;;;;;;:22;;;17362:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25818:1:::1;25799:21;;:7;:21;;;;25791:30;;;::::0;::::1;;25842:49;25871:1;25875:7;25884:6;25842:20;:49::i;:::-;25902:16;25921:28;25932:16;;25921:6;:10;;:28;;;;:::i;:::-;25902:47;;25977:24;25994:6;25977:12;;:16;;:24;;;;:::i;:::-;25962:12;:39;;;;26036:35;26062:8;26036:12;:21;26049:7;26036:21;;;;;;;;;;;;;;;;:25;;:35;;;;:::i;:::-;26012:12;:21;26025:7;26012:21;;;;;;;;;;;;;;;:59;;;;26108:7;26087:37;;26104:1;26087:37;;;26117:6;26087:37;;;;;;;;;;;;;;;;;;17440:1;25716:416:::0;;:::o;19805:35::-;;;;:::o;21765:149::-;21831:7;21863:43;21889:16;;21863:12;:21;21876:7;21863:21;;;;;;;;;;;;;;;;:25;;:43;;;;:::i;:::-;21856:50;;21765:149;;;:::o;17800:148::-;17380:12;:10;:12::i;:::-;17370:22;;:6;;;;;;;;;;:22;;;17362:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17907:1:::1;17870:40;;17891:6;::::0;::::1;;;;;;;;17870:40;;;;;;;;;;;;17938:1;17921:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;17800:148::o:0;17158:79::-;17196:7;17223:6;;;;;;;;;;;17216:13;;17158:79;:::o;21454:87::-;21493:13;21526:7;;;;;;;;;;;;;;;;;21519:14;;21454:87;:::o;20733:608::-;17380:12;:10;:12::i;:::-;17370:22;;:6;;;;;;;;;;:22;;;17362:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20835:1:::1;20816:21;;:7;:21;;;;20808:60;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;20898:42;20887:53;;:7;:53;;;20879:79;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;20971:49;20992:7;21009:1;21013:6;20971:20;:49::i;:::-;21041:16;21060:28;21071:16;;21060:6;:10;;:28;;;;:::i;:::-;21041:47;;21123:66;21149:8;21123:66;;;;;;;;;;;;;;;;::::0;:12:::1;:21;21136:7;21123:21;;;;;;;;;;;;;;;;:25;;:66;;;;;:::i;:::-;21099:12;:21;21112:7;21099:21;;;;;;;;;;;;;;;:90;;;;21225:55;21242:6;21225:55;;;;;;;;;;;;;;;;::::0;:12:::1;;:16;;:55;;;;;:::i;:::-;21210:12;:70;;;;21322:1;21296:37;;21305:7;21296:37;;;21326:6;21296:37;;;;;;;;;;;;;;;;;;17440:1;20733:608:::0;;:::o;24602:494::-;24687:4;24709:16;24728:17;:29;24746:10;24728:29;;;;;;;;;;;;;;;:38;24758:7;24728:38;;;;;;;;;;;;;;;;24709:57;;24800:8;24781:15;:27;24777:205;;24866:1;24825:17;:29;24843:10;24825:29;;;;;;;;;;;;;;;:38;24855:7;24825:38;;;;;;;;;;;;;;;:42;;;;24777:205;;;24941:29;24954:15;24941:8;:12;;:29;;;;:::i;:::-;24900:17;:29;24918:10;24900:29;;;;;;;;;;;;;;;:38;24930:7;24900:38;;;;;;;;;;;;;;;:70;;;;24777:205;25018:7;24997:69;;25006:10;24997:69;;;25027:17;:29;25045:10;25027:29;;;;;;;;;;;;;;;:38;25057:7;25027:38;;;;;;;;;;;;;;;;24997:69;;;;;;;;;;;;;;;;;;25084:4;25077:11;;;24602:494;;;;:::o;25108:294::-;25190:4;17380:12;:10;:12::i;:::-;17370:22;;:6;;;;;;;;;;:22;;;17362:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25236:16:::1;;25215:17;:37;;25207:64;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;25311:1;25290:17;:22;;25282:46;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;25355:17;25339:13;:33;;;;25390:4;25383:11;;25108:294:::0;;;:::o;21926:898::-;22023:4;21993:2;19019:3;19005:18;;:2;:18;;;;18997:27;;;;;;19057:4;19043:19;;:2;:19;;;;19035:28;;;;;;22045:18:::1;22066:24;22076:13;;22066:5;:9;;:24;;;;:::i;:::-;22045:45;;22141:37;22156:21;22171:5;22156:10;:14;;:21;;;;:::i;:::-;22141:10;:14;;:37;;;;:::i;:::-;22128:50;;22202:21;22217:5;22202:10;:14;;:21;;;;:::i;:::-;22189:34;;22244:17;22264:21;22274:10;22264:5;:9;;:21;;;;:::i;:::-;22244:41;;22306:16;22325:27;22335:16;;22325:5;:9;;:27;;;;:::i;:::-;22306:46;;22363:20;22386:21;22396:10;22386:5;:9;;:21;;;;:::i;:::-;22363:44;;22433:34;22450:16;;22433:12;:16;;:34;;;;:::i;:::-;22418:49;;22505:38;22534:8;22505:12;:24;22518:10;22505:24;;;;;;;;;;;;;;;;:28;;:38;;;;:::i;:::-;22478:12;:24;22491:10;22478:24;;;;;;;;;;;;;;;:65;;;;22573:34;22594:12;22573;:16;22586:2;22573:16;;;;;;;;;;;;;;;;:20;;:34;;;;:::i;:::-;22554:12;:16;22567:2;22554:16;;;;;;;;;;;;;;;:53;;;;22643:28;22660:10;22643:12;;:16;;:28;;;;:::i;:::-;22628:12;:43;;;;22726:3;22697:46;;22706:10;22697:46;;;22732:10;22697:46;;;;;;;;;;;;;;;;;;22780:2;22759:35;;22768:10;22759:35;;;22784:9;22759:35;;;;;;;;;;;;;;;;;;22812:4;22805:11;;;;;;21926:898:::0;;;;;:::o;25414:294::-;25496:4;17380:12;:10;:12::i;:::-;17370:22;;:6;;;;;;;;;;:22;;;17362:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25542:16:::1;;25521:17;:37;;25513:64;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;25617:1;25596:17;:22;;25588:46;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;25661:17;25645:13;:33;;;;25696:4;25689:11;;25414:294:::0;;;:::o;19136:40::-;;;;;;;;;;;;;;;;;;;:::o;16693:21::-;;;;;;;;;;;;:::o;26849:260::-;26948:4;26965:26;26973:8;26983:7;26965;:26::i;:::-;;27011:8;27002:34;;;27037:10;27049:7;27066:4;27073:5;;27002:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27097:4;27090:11;;26849:260;;;;;;:::o;19091:38::-;;;;;;;;;;;;;;;;;;;:::o;22836:164::-;22926:7;22958:17;:25;22976:6;22958:25;;;;;;;;;;;;;;;:34;22984:7;22958:34;;;;;;;;;;;;;;;;22951:41;;22836:164;;;;:::o;20218:503::-;20267:7;17380:12;:10;:12::i;:::-;17370:22;;:6;;;;;;;;;;:22;;;17362:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20292:19:::1;20314:5;20292:27;;20366:30;20382:13;;20366:11;:15;;:30;;;;:::i;:::-;20352:44;;20424:29;20441:11;20424:12;;:16;;:29;;;;:::i;:::-;20409:12;:44;;;;20479:41;20496:23;20513:5;20496:12;;:16;;:23;;;;:::i;:::-;20479:12;;:16;;:41;;;;:::i;:::-;20464:12;:56;;;;20546:23;20563:5;20546:12;;:16;;:23;;;;:::i;:::-;20531:12;:38;;;;20601:28;20616:12;;19259:2;19399;:12;19391:5;:20;19316:1;19307:11;19471:38;;;;;;19316:1;19307:11;19456:54;20601:14;;:28;;;;:::i;:::-;20582:16;:47;;;;20647:36;20655:13;;20670:12;;20647:36;;;;;;;;;;;;;;;;;;;;;;;;20701:12;;20694:19;;;20218:503:::0;:::o;18103:244::-;17380:12;:10;:12::i;:::-;17370:22;;:6;;;;;;;;;;:22;;;17362:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18212:1:::1;18192:22;;:8;:22;;;;18184:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18302:8;18273:38;;18294:6;::::0;::::1;;;;;;;;18273:38;;;;;;;;;;;;18331:8;18322:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;18103:244:::0;:::o;19739:34::-;;;;:::o;11038:132::-;11096:7;11123:39;11127:1;11130;11123:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;11116:46;;11038:132;;;;:::o;10091:471::-;10149:7;10399:1;10394;:6;10390:47;;;10424:1;10417:8;;;;10390:47;10449:9;10465:1;10461;:5;10449:17;;10494:1;10489;10485;:5;;;;;;:10;10477:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10553:1;10546:8;;;10091:471;;;;;:::o;8737:181::-;8795:7;8815:9;8831:1;8827;:5;8815:17;;8856:1;8851;:6;;8843:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8909:1;8902:8;;;8737:181;;;;:::o;9201:136::-;9259:7;9286:43;9290:1;9293;9286:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;9279:50;;9201:136;;;;:::o;12409:130::-;12467:7;12494:37;12498:1;12501;12494:37;;;;;;;;;;;;;;;;;:3;:37::i;:::-;12487:44;;12409:130;;;;:::o;1276:106::-;1329:15;1364:10;1357:17;;1276:106;:::o;26745:92::-;;;;:::o;9640:192::-;9726:7;9759:1;9754;:6;;9762:12;9746:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9786:9;9802:1;9798;:5;9786:17;;9823:1;9816:8;;;9640:192;;;;;:::o;11666:278::-;11752:7;11784:1;11780;:5;11787:12;11772:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11811:9;11827:1;11823;:5;;;;;;11811:17;;11935:1;11928:8;;;11666:278;;;;;:::o;13024:166::-;13110:7;13143:1;13138;:6;;13146:12;13130:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13181:1;13177;:5;;;;;;13170:12;;13024:166;;;;;:::o

Swarm Source

ipfs://f99729f4f692279e24937f9237af8bfd3dddb7cf741323767935196b98601a8a
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.