ETH Price: $3,104.08 (+1.17%)
Gas: 11 Gwei

Token

GCB (GCB)
 

Overview

Max Total Supply

10,000 GCB

Holders

459 (0.00%)

Market

Price

$0.22 @ 0.000072 ETH (+0.01%)

Onchain Market Cap

$2,245.92

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
zkbrad.eth
Balance
14.798442571875908612 GCB

Value
$3.32 ( ~0.0010695586127236 Eth) [0.1480%]
0xfc15e7ef48a4224a85798551cc7b39dfbc93ad1e
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Gas Cashback is a DeFi trading station designed to manage wallet holdings, swap tokens with limit orders and earn 100% cashback on GAS Spends.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
GCB

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: GCB

pragma solidity ^0.6.2;

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;
    }
}

interface IERC20 {
    /**
     * @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);
}
 
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        uint256 c = a + b;
        if (c < a) return (false, 0);
        return (true, c);
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b > a) return (false, 0);
        return (true, a - b);
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, 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 (true, 0);
        uint256 c = a * b;
        if (c / a != b) return (false, 0);
        return (true, c);
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b == 0) return (false, 0);
        return (true, a / b);
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b == 0) return (false, 0);
        return (true, a % b);
    }

    /**
     * @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) {
        require(b <= a, "SafeMath: subtraction overflow");
        return a - b;
    }

    /**
     * @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) {
        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, reverting 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) {
        require(b > 0, "SafeMath: division by zero");
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting 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) {
        require(b > 0, "SafeMath: modulo by zero");
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * 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);
        return a - b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryDiv}.
     *
     * 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);
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * 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;
    }
}

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) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }

    /**
     * @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");
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: value }(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.3._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.3._
     */
    function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        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);
            }
        }
    }
}


abstract contract Ownable is Context {
    address private _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;
    }
}

contract GCB is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    mapping (address => uint256) private _gcbOwned;
    mapping (address => uint256) private _gcbtOwned;
    mapping (address => mapping (address => uint256)) private _allowances;

    mapping (address => bool) private _isExcluded;
    address[] private _excluded;
   
    uint256 private constant MAX = ~uint256(0);
    uint256 private constant _gcbtTotal = 10e21;
    uint256 private _gcbTotal = (MAX - (MAX % _gcbtTotal));
    uint256 private _tFeeTotal;

    string private _name = 'GCB';
    string private _symbol = 'GCB';
    uint8 private _decimals = 18;

    constructor () public {
        _gcbOwned[_msgSender()] = _gcbTotal;
        emit Transfer(address(0), _msgSender(), _gcbtTotal);
    }

    function name() public view returns (string memory) {
        return _name;
    }

    function symbol() public view returns (string memory) {
        return _symbol;
    }

    function decimals() public view returns (uint8) {
        return _decimals;
    }

    function totalSupply() public view override returns (uint256) {
        return _gcbtTotal;
    }

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _gcbtOwned[account];
        return tokenFromGCB(_gcbOwned[account]);
    }

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(address owner, address spender) public view override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    function isExcluded(address account) public view returns (bool) {
        return _isExcluded[account];
    }

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }

    function gcb(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        (uint256 _gcbAmount,,,,) = _getValues(tAmount);
        _gcbOwned[sender] = _gcbOwned[sender].sub(_gcbAmount);
        _gcbTotal = _gcbTotal.sub(_gcbAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }

    function gcbFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) {
        require(tAmount <= _gcbtTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 _gcbAmount,,,,) = _getValues(tAmount);
            return _gcbAmount;
        } else {
            (,uint256 rTransfe_gcbAmount,,,) = _getValues(tAmount);
            return rTransfe_gcbAmount;
        }
    }

    function tokenFromGCB(uint256 _gcbAmount) public view returns(uint256) {
        require(_gcbAmount <= _gcbTotal, "Amount must be less than total tokens");
        uint256 currentRate =  _getRate();
        return _gcbAmount.div(currentRate);
    }

    function excludeAccount(address account) external onlyOwner() {
        require(!_isExcluded[account], "Account is already excluded");
        if(_gcbOwned[account] > 0) {
            _gcbtOwned[account] = tokenFromGCB(_gcbOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeAccount(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is already excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _gcbtOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }

    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _transfer(address sender, address recipient, uint256 amount) private {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 _gcbAmount, uint256 rTransfe_gcbAmount, uint256 rFee, uint256 tTransfe_gcbAmount, uint256 tFee) = _getValues(tAmount);
        _gcbOwned[sender] = _gcbOwned[sender].sub(_gcbAmount);
        _gcbOwned[recipient] = _gcbOwned[recipient].add(rTransfe_gcbAmount);       
        _gcbFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransfe_gcbAmount);
    }

    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 _gcbAmount, uint256 rTransfe_gcbAmount, uint256 rFee, uint256 tTransfe_gcbAmount, uint256 tFee) = _getValues(tAmount);
        _gcbOwned[sender] = _gcbOwned[sender].sub(_gcbAmount);
        _gcbtOwned[recipient] = _gcbtOwned[recipient].add(tTransfe_gcbAmount);
        _gcbOwned[recipient] = _gcbOwned[recipient].add(rTransfe_gcbAmount);           
        _gcbFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransfe_gcbAmount);
    }

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 _gcbAmount, uint256 rTransfe_gcbAmount, uint256 rFee, uint256 tTransfe_gcbAmount, uint256 tFee) = _getValues(tAmount);
        _gcbtOwned[sender] = _gcbtOwned[sender].sub(tAmount);
        _gcbOwned[sender] = _gcbOwned[sender].sub(_gcbAmount);
        _gcbOwned[recipient] = _gcbOwned[recipient].add(rTransfe_gcbAmount);   
        _gcbFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransfe_gcbAmount);
    }

    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 _gcbAmount, uint256 rTransfe_gcbAmount, uint256 rFee, uint256 tTransfe_gcbAmount, uint256 tFee) = _getValues(tAmount);
        _gcbtOwned[sender] = _gcbtOwned[sender].sub(tAmount);
        _gcbOwned[sender] = _gcbOwned[sender].sub(_gcbAmount);
        _gcbtOwned[recipient] = _gcbtOwned[recipient].add(tTransfe_gcbAmount);
        _gcbOwned[recipient] = _gcbOwned[recipient].add(rTransfe_gcbAmount);        
        _gcbFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransfe_gcbAmount);
    }

    function _gcbFee(uint256 rFee, uint256 tFee) private {
        _gcbTotal = _gcbTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransfe_gcbAmount, uint256 tFee) = _getTValues(tAmount);
        uint256 currentRate =  _getRate();
        (uint256 _gcbAmount, uint256 rTransfe_gcbAmount, uint256 rFee) = _getRValues(tAmount, tFee, currentRate);
        return (_gcbAmount, rTransfe_gcbAmount, rFee, tTransfe_gcbAmount, tFee);
    }

    function _getTValues(uint256 tAmount) private pure returns (uint256, uint256) {
        uint256 tFee = tAmount.div(100).mul(3500).div(1e3);
        uint256 tTransfe_gcbAmount = tAmount.sub(tFee);
        return (tTransfe_gcbAmount, tFee);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 _gcbAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rTransfe_gcbAmount = _gcbAmount.sub(rFee);
        return (_gcbAmount, rTransfe_gcbAmount, rFee);
    }

    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _gcbTotal;
        uint256 tSupply = _gcbtTotal;      
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_gcbOwned[_excluded[i]] > rSupply || _gcbtOwned[_excluded[i]] > tSupply) return (_gcbTotal, _gcbtTotal);
            rSupply = rSupply.sub(_gcbOwned[_excluded[i]]);
            tSupply = tSupply.sub(_gcbtOwned[_excluded[i]]);
        }
        if (rSupply < _gcbTotal.div(_gcbtTotal)) return (_gcbTotal, _gcbtTotal);
        return (rSupply, tSupply);
    }
}

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":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":[{"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":"amount","type":"uint256"}],"name":"approve","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":[],"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":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"gcb","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"gcbFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeAccount","outputs":[],"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":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_gcbAmount","type":"uint256"}],"name":"tokenFromGCB","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","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"}]

608060405269021e19e0c9bab2400000600019816200001a57fe5b06600019036006556040518060400160405280600381526020017f4743420000000000000000000000000000000000000000000000000000000000815250600890805190602001906200006f9291906200027a565b506040518060400160405280600381526020017f474342000000000000000000000000000000000000000000000000000000000081525060099080519060200190620000bd9291906200027a565b506012600a60006101000a81548160ff021916908360ff160217905550348015620000e757600080fd5b506000620000fa6200027260201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35060065460016000620001af6200027260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620001fd6200027260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef69021e19e0c9bab24000006040518082815260200191505060405180910390a362000320565b600033905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620002bd57805160ff1916838001178555620002ee565b82800160010185558215620002ee579182015b82811115620002ed578251825591602001919060010190620002d0565b5b509050620002fd919062000301565b5090565b5b808211156200031c57600081600090555060010162000302565b5090565b61332580620003306000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c80638da5cb5b116100b8578063dd62ed3e1161007c578063dd62ed3e146105e5578063edaf98d81461065d578063f2cc0c181461068b578063f2fde38b146106cf578063f84354f114610713578063fed59cb31461075757610137565b80638da5cb5b1461040c57806395d89b4114610440578063a457c2d7146104c3578063a9059cbb14610527578063cba0e9961461058b57610137565b8063313ce567116100ff578063313ce567146102e357806339509351146103045780634d5f9d111461036857806370a08231146103aa578063715018a61461040257610137565b806306fdde031461013c578063095ea7b3146101bf57806313114a9d1461022357806318160ddd1461024157806323b872dd1461025f575b600080fd5b6101446107a5565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610184578082015181840152602081019050610169565b50505050905090810190601f1680156101b15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61020b600480360360408110156101d557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610847565b60405180821515815260200191505060405180910390f35b61022b610865565b6040518082815260200191505060405180910390f35b61024961086f565b6040518082815260200191505060405180910390f35b6102cb6004803603606081101561027557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610881565b60405180821515815260200191505060405180910390f35b6102eb61095a565b604051808260ff16815260200191505060405180910390f35b6103506004803603604081101561031a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610971565b60405180821515815260200191505060405180910390f35b6103946004803603602081101561037e57600080fd5b8101908080359060200190929190505050610a24565b6040518082815260200191505060405180910390f35b6103ec600480360360208110156103c057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610aa8565b6040518082815260200191505060405180910390f35b61040a610b93565b005b610414610d19565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610448610d42565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561048857808201518184015260208101905061046d565b50505050905090810190601f1680156104b55780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61050f600480360360408110156104d957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610de4565b60405180821515815260200191505060405180910390f35b6105736004803603604081101561053d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610eb1565b60405180821515815260200191505060405180910390f35b6105cd600480360360208110156105a157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ecf565b60405180821515815260200191505060405180910390f35b610647600480360360408110156105fb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f25565b6040518082815260200191505060405180910390f35b6106896004803603602081101561067357600080fd5b8101908080359060200190929190505050610fac565b005b6106cd600480360360208110156106a157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061113c565b005b610711600480360360208110156106e557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611456565b005b6107556004803603602081101561072957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611661565b005b61078f6004803603604081101561076d57600080fd5b81019080803590602001909291908035151590602001909291905050506119eb565b6040518082815260200191505060405180910390f35b606060088054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561083d5780601f106108125761010080835404028352916020019161083d565b820191906000526020600020905b81548152906001019060200180831161082057829003601f168201915b5050505050905090565b600061085b610854611aa8565b8484611ab0565b6001905092915050565b6000600754905090565b600069021e19e0c9bab2400000905090565b600061088e848484611ca7565b61094f8461089a611aa8565b61094a8560405180606001604052806028815260200161320560289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610900611aa8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546121009092919063ffffffff16565b611ab0565b600190509392505050565b6000600a60009054906101000a900460ff16905090565b6000610a1a61097e611aa8565b84610a15856003600061098f611aa8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546121ba90919063ffffffff16565b611ab0565b6001905092915050565b6000600654821115610a81576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806131776025913960400191505060405180910390fd5b6000610a8b612242565b9050610aa0818461226d90919063ffffffff16565b915050919050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610b4357600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050610b8e565b610b8b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610a24565b90505b919050565b610b9b611aa8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c5b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060098054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610dda5780601f10610daf57610100808354040283529160200191610dda565b820191906000526020600020905b815481529060010190602001808311610dbd57829003601f168201915b5050505050905090565b6000610ea7610df1611aa8565b84610ea2856040518060600160405280602581526020016132cb6025913960036000610e1b611aa8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546121009092919063ffffffff16565b611ab0565b6001905092915050565b6000610ec5610ebe611aa8565b8484611ca7565b6001905092915050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000610fb6611aa8565b9050600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561105b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c81526020018061329f602c913960400191505060405180910390fd5b6000611066836122f6565b5050505090506110be81600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461234e90919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506111168160065461234e90919063ffffffff16565b600681905550611131836007546121ba90919063ffffffff16565b600781905550505050565b611144611aa8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611204576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156112c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561139857611354600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610a24565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506005819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61145e611aa8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461151e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156115a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061319c6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611669611aa8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611729576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166117e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b60005b6005805490508110156119e7578173ffffffffffffffffffffffffffffffffffffffff166005828154811061181c57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156119da5760056001600580549050038154811061187857fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600582815481106118b057fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060058054806119a057fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556119e7565b80806001019150506117eb565b5050565b600069021e19e0c9bab2400000831115611a6d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b81611a8c576000611a7d846122f6565b50505050905080915050611aa2565b6000611a97846122f6565b505050915050809150505b92915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061327b6024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bbc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806131c26022913960400191505060405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611d2d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806132566025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611db3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806131546023913960400191505060405180910390fd5b60008111611e0c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602981526020018061322d6029913960400191505060405180910390fd5b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611eaf5750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611ec457611ebf8383836123d1565b6120fb565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611f675750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611f7c57611f77838383612624565b6120fa565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156120205750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561203557612030838383612877565b6120f9565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156120d75750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156120ec576120e7838383612a35565b6120f8565b6120f7838383612877565b5b5b5b5b505050565b60008383111582906121ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612172578082015181840152602081019050612157565b50505050905090810190601f16801561219f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5082840390509392505050565b600080828401905083811015612238576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600080600061224f612d1d565b91509150612266818361226d90919063ffffffff16565b9250505090565b60008082116122e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525060200191505060405180910390fd5b8183816122ed57fe5b04905092915050565b600080600080600080600061230a88612fce565b915091506000612318612242565b9050600080600061232a8c8686613035565b92509250925082828288889a509a509a509a509a5050505050505091939590929450565b6000828211156123c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525060200191505060405180910390fd5b818303905092915050565b60008060008060006123e2866122f6565b9450945094509450945061243e86600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461234e90919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506124d385600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461234e90919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061256884600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546121ba90919063ffffffff16565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506125b58382613093565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a35050505050505050565b6000806000806000612635866122f6565b9450945094509450945061269185600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461234e90919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061272682600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546121ba90919063ffffffff16565b600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506127bb84600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546121ba90919063ffffffff16565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506128088382613093565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a35050505050505050565b6000806000806000612888866122f6565b945094509450945094506128e485600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461234e90919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061297984600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546121ba90919063ffffffff16565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506129c68382613093565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a35050505050505050565b6000806000806000612a46866122f6565b94509450945094509450612aa286600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461234e90919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612b3785600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461234e90919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612bcc82600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546121ba90919063ffffffff16565b600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612c6184600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546121ba90919063ffffffff16565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612cae8382613093565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a35050505050505050565b60008060006006549050600069021e19e0c9bab2400000905060005b600580549050811015612f8157826001600060058481548110612d5857fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180612e3f5750816002600060058481548110612dd757fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15612e5e5760065469021e19e0c9bab240000094509450505050612fca565b612ee76001600060058481548110612e7257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461234e90919063ffffffff16565b9250612f726002600060058481548110612efd57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361234e90919063ffffffff16565b91508080600101915050612d39565b50612fa169021e19e0c9bab240000060065461226d90919063ffffffff16565b821015612fc15760065469021e19e0c9bab2400000935093505050612fca565b81819350935050505b9091565b600080600061300f6103e8613001610dac612ff360648961226d90919063ffffffff16565b6130cd90919063ffffffff16565b61226d90919063ffffffff16565b90506000613026828661234e90919063ffffffff16565b90508082935093505050915091565b60008060008061304e85886130cd90919063ffffffff16565b9050600061306586886130cd90919063ffffffff16565b9050600061307c828461234e90919063ffffffff16565b905082818395509550955050505093509350939050565b6130a88260065461234e90919063ffffffff16565b6006819055506130c3816007546121ba90919063ffffffff16565b6007819055505050565b6000808314156130e0576000905061314d565b60008284029050828482816130f157fe5b0414613148576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806131e46021913960400191505060405180910390fd5b809150505b9291505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c20746f6b656e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212203dfeadc2729fa9bd461e501e1f931ba956cecdad3f9c08e7851da65524e6067b64736f6c634300060c0033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101375760003560e01c80638da5cb5b116100b8578063dd62ed3e1161007c578063dd62ed3e146105e5578063edaf98d81461065d578063f2cc0c181461068b578063f2fde38b146106cf578063f84354f114610713578063fed59cb31461075757610137565b80638da5cb5b1461040c57806395d89b4114610440578063a457c2d7146104c3578063a9059cbb14610527578063cba0e9961461058b57610137565b8063313ce567116100ff578063313ce567146102e357806339509351146103045780634d5f9d111461036857806370a08231146103aa578063715018a61461040257610137565b806306fdde031461013c578063095ea7b3146101bf57806313114a9d1461022357806318160ddd1461024157806323b872dd1461025f575b600080fd5b6101446107a5565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610184578082015181840152602081019050610169565b50505050905090810190601f1680156101b15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61020b600480360360408110156101d557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610847565b60405180821515815260200191505060405180910390f35b61022b610865565b6040518082815260200191505060405180910390f35b61024961086f565b6040518082815260200191505060405180910390f35b6102cb6004803603606081101561027557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610881565b60405180821515815260200191505060405180910390f35b6102eb61095a565b604051808260ff16815260200191505060405180910390f35b6103506004803603604081101561031a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610971565b60405180821515815260200191505060405180910390f35b6103946004803603602081101561037e57600080fd5b8101908080359060200190929190505050610a24565b6040518082815260200191505060405180910390f35b6103ec600480360360208110156103c057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610aa8565b6040518082815260200191505060405180910390f35b61040a610b93565b005b610414610d19565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610448610d42565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561048857808201518184015260208101905061046d565b50505050905090810190601f1680156104b55780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61050f600480360360408110156104d957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610de4565b60405180821515815260200191505060405180910390f35b6105736004803603604081101561053d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610eb1565b60405180821515815260200191505060405180910390f35b6105cd600480360360208110156105a157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ecf565b60405180821515815260200191505060405180910390f35b610647600480360360408110156105fb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f25565b6040518082815260200191505060405180910390f35b6106896004803603602081101561067357600080fd5b8101908080359060200190929190505050610fac565b005b6106cd600480360360208110156106a157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061113c565b005b610711600480360360208110156106e557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611456565b005b6107556004803603602081101561072957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611661565b005b61078f6004803603604081101561076d57600080fd5b81019080803590602001909291908035151590602001909291905050506119eb565b6040518082815260200191505060405180910390f35b606060088054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561083d5780601f106108125761010080835404028352916020019161083d565b820191906000526020600020905b81548152906001019060200180831161082057829003601f168201915b5050505050905090565b600061085b610854611aa8565b8484611ab0565b6001905092915050565b6000600754905090565b600069021e19e0c9bab2400000905090565b600061088e848484611ca7565b61094f8461089a611aa8565b61094a8560405180606001604052806028815260200161320560289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610900611aa8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546121009092919063ffffffff16565b611ab0565b600190509392505050565b6000600a60009054906101000a900460ff16905090565b6000610a1a61097e611aa8565b84610a15856003600061098f611aa8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546121ba90919063ffffffff16565b611ab0565b6001905092915050565b6000600654821115610a81576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806131776025913960400191505060405180910390fd5b6000610a8b612242565b9050610aa0818461226d90919063ffffffff16565b915050919050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610b4357600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050610b8e565b610b8b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610a24565b90505b919050565b610b9b611aa8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c5b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060098054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610dda5780601f10610daf57610100808354040283529160200191610dda565b820191906000526020600020905b815481529060010190602001808311610dbd57829003601f168201915b5050505050905090565b6000610ea7610df1611aa8565b84610ea2856040518060600160405280602581526020016132cb6025913960036000610e1b611aa8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546121009092919063ffffffff16565b611ab0565b6001905092915050565b6000610ec5610ebe611aa8565b8484611ca7565b6001905092915050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000610fb6611aa8565b9050600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561105b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c81526020018061329f602c913960400191505060405180910390fd5b6000611066836122f6565b5050505090506110be81600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461234e90919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506111168160065461234e90919063ffffffff16565b600681905550611131836007546121ba90919063ffffffff16565b600781905550505050565b611144611aa8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611204576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156112c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561139857611354600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610a24565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506005819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61145e611aa8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461151e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156115a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061319c6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611669611aa8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611729576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166117e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b60005b6005805490508110156119e7578173ffffffffffffffffffffffffffffffffffffffff166005828154811061181c57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156119da5760056001600580549050038154811061187857fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600582815481106118b057fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060058054806119a057fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556119e7565b80806001019150506117eb565b5050565b600069021e19e0c9bab2400000831115611a6d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b81611a8c576000611a7d846122f6565b50505050905080915050611aa2565b6000611a97846122f6565b505050915050809150505b92915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061327b6024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bbc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806131c26022913960400191505060405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611d2d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806132566025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611db3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806131546023913960400191505060405180910390fd5b60008111611e0c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602981526020018061322d6029913960400191505060405180910390fd5b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611eaf5750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611ec457611ebf8383836123d1565b6120fb565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611f675750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611f7c57611f77838383612624565b6120fa565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156120205750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561203557612030838383612877565b6120f9565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156120d75750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156120ec576120e7838383612a35565b6120f8565b6120f7838383612877565b5b5b5b5b505050565b60008383111582906121ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612172578082015181840152602081019050612157565b50505050905090810190601f16801561219f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5082840390509392505050565b600080828401905083811015612238576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600080600061224f612d1d565b91509150612266818361226d90919063ffffffff16565b9250505090565b60008082116122e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525060200191505060405180910390fd5b8183816122ed57fe5b04905092915050565b600080600080600080600061230a88612fce565b915091506000612318612242565b9050600080600061232a8c8686613035565b92509250925082828288889a509a509a509a509a5050505050505091939590929450565b6000828211156123c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525060200191505060405180910390fd5b818303905092915050565b60008060008060006123e2866122f6565b9450945094509450945061243e86600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461234e90919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506124d385600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461234e90919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061256884600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546121ba90919063ffffffff16565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506125b58382613093565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a35050505050505050565b6000806000806000612635866122f6565b9450945094509450945061269185600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461234e90919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061272682600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546121ba90919063ffffffff16565b600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506127bb84600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546121ba90919063ffffffff16565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506128088382613093565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a35050505050505050565b6000806000806000612888866122f6565b945094509450945094506128e485600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461234e90919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061297984600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546121ba90919063ffffffff16565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506129c68382613093565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a35050505050505050565b6000806000806000612a46866122f6565b94509450945094509450612aa286600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461234e90919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612b3785600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461234e90919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612bcc82600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546121ba90919063ffffffff16565b600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612c6184600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546121ba90919063ffffffff16565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612cae8382613093565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a35050505050505050565b60008060006006549050600069021e19e0c9bab2400000905060005b600580549050811015612f8157826001600060058481548110612d5857fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180612e3f5750816002600060058481548110612dd757fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15612e5e5760065469021e19e0c9bab240000094509450505050612fca565b612ee76001600060058481548110612e7257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461234e90919063ffffffff16565b9250612f726002600060058481548110612efd57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361234e90919063ffffffff16565b91508080600101915050612d39565b50612fa169021e19e0c9bab240000060065461226d90919063ffffffff16565b821015612fc15760065469021e19e0c9bab2400000935093505050612fca565b81819350935050505b9091565b600080600061300f6103e8613001610dac612ff360648961226d90919063ffffffff16565b6130cd90919063ffffffff16565b61226d90919063ffffffff16565b90506000613026828661234e90919063ffffffff16565b90508082935093505050915091565b60008060008061304e85886130cd90919063ffffffff16565b9050600061306586886130cd90919063ffffffff16565b9050600061307c828461234e90919063ffffffff16565b905082818395509550955050505093509350939050565b6130a88260065461234e90919063ffffffff16565b6006819055506130c3816007546121ba90919063ffffffff16565b6007819055505050565b6000808314156130e0576000905061314d565b60008284029050828482816130f157fe5b0414613148576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806131e46021913960400191505060405180910390fd5b809150505b9291505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c20746f6b656e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212203dfeadc2729fa9bd461e501e1f931ba956cecdad3f9c08e7851da65524e6067b64736f6c634300060c0033

Deployed Bytecode Sourcemap

19260:10375:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20101:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21014:161;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;22125:87;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20378:98;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21183:313;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;20287:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;21504:218;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;23067:252;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20484:196;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18706:148;;;:::i;:::-;;18064:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;20192:87;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21730:269;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;20688:167;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;22007:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;20863:143;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22220:389;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23327:332;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19009:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23667:481;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22617:442;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20101:83;20138:13;20171:5;20164:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20101:83;:::o;21014:161::-;21089:4;21106:39;21115:12;:10;:12::i;:::-;21129:7;21138:6;21106:8;:39::i;:::-;21163:4;21156:11;;21014:161;;;;:::o;22125:87::-;22167:7;22194:10;;22187:17;;22125:87;:::o;20378:98::-;20431:7;19738:5;20451:17;;20378:98;:::o;21183:313::-;21281:4;21298:36;21308:6;21316:9;21327:6;21298:9;:36::i;:::-;21345:121;21354:6;21362:12;:10;:12::i;:::-;21376:89;21414:6;21376:89;;;;;;;;;;;;;;;;;:11;:19;21388:6;21376:19;;;;;;;;;;;;;;;:33;21396:12;:10;:12::i;:::-;21376:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;21345:8;:121::i;:::-;21484:4;21477:11;;21183:313;;;;;:::o;20287:83::-;20328:5;20353:9;;;;;;;;;;;20346:16;;20287:83;:::o;21504:218::-;21592:4;21609:83;21618:12;:10;:12::i;:::-;21632:7;21641:50;21680:10;21641:11;:25;21653:12;:10;:12::i;:::-;21641:25;;;;;;;;;;;;;;;:34;21667:7;21641:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;21609:8;:83::i;:::-;21710:4;21703:11;;21504:218;;;;:::o;23067:252::-;23129:7;23171:9;;23157:10;:23;;23149:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23233:19;23256:10;:8;:10::i;:::-;23233:33;;23284:27;23299:11;23284:10;:14;;:27;;;;:::i;:::-;23277:34;;;23067:252;;;:::o;20484:196::-;20550:7;20574:11;:20;20586:7;20574:20;;;;;;;;;;;;;;;;;;;;;;;;;20570:52;;;20603:10;:19;20614:7;20603:19;;;;;;;;;;;;;;;;20596:26;;;;20570:52;20640:32;20653:9;:18;20663:7;20653:18;;;;;;;;;;;;;;;;20640:12;:32::i;:::-;20633:39;;20484:196;;;;:::o;18706:148::-;18286:12;:10;:12::i;:::-;18276:22;;:6;;;;;;;;;;:22;;;18268:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18813:1:::1;18776:40;;18797:6;::::0;::::1;;;;;;;;18776:40;;;;;;;;;;;;18844:1;18827:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;18706:148::o:0;18064:79::-;18102:7;18129:6;;;;;;;;;;;18122:13;;18064:79;:::o;20192:87::-;20231:13;20264:7;20257:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20192:87;:::o;21730:269::-;21823:4;21840:129;21849:12;:10;:12::i;:::-;21863:7;21872:96;21911:15;21872:96;;;;;;;;;;;;;;;;;:11;:25;21884:12;:10;:12::i;:::-;21872:25;;;;;;;;;;;;;;;:34;21898:7;21872:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;21840:8;:129::i;:::-;21987:4;21980:11;;21730:269;;;;:::o;20688:167::-;20766:4;20783:42;20793:12;:10;:12::i;:::-;20807:9;20818:6;20783:9;:42::i;:::-;20843:4;20836:11;;20688:167;;;;:::o;22007:110::-;22065:4;22089:11;:20;22101:7;22089:20;;;;;;;;;;;;;;;;;;;;;;;;;22082:27;;22007:110;;;:::o;20863:143::-;20944:7;20971:11;:18;20983:5;20971:18;;;;;;;;;;;;;;;:27;20990:7;20971:27;;;;;;;;;;;;;;;;20964:34;;20863:143;;;;:::o;22220:389::-;22268:14;22285:12;:10;:12::i;:::-;22268:29;;22317:11;:19;22329:6;22317:19;;;;;;;;;;;;;;;;;;;;;;;;;22316:20;22308:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22397:18;22423:19;22434:7;22423:10;:19::i;:::-;22396:46;;;;;;22473:33;22495:10;22473:9;:17;22483:6;22473:17;;;;;;;;;;;;;;;;:21;;:33;;;;:::i;:::-;22453:9;:17;22463:6;22453:17;;;;;;;;;;;;;;;:53;;;;22529:25;22543:10;22529:9;;:13;;:25;;;;:::i;:::-;22517:9;:37;;;;22578:23;22593:7;22578:10;;:14;;:23;;;;:::i;:::-;22565:10;:36;;;;22220:389;;;:::o;23327:332::-;18286:12;:10;:12::i;:::-;18276:22;;:6;;;;;;;;;;:22;;;18268:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23409:11:::1;:20;23421:7;23409:20;;;;;;;;;;;;;;;;;;;;;;;;;23408:21;23400:61;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;23496:1;23475:9;:18;23485:7;23475:18;;;;;;;;;;;;;;;;:22;23472:108;;;23536:32;23549:9;:18;23559:7;23549:18;;;;;;;;;;;;;;;;23536:12;:32::i;:::-;23514:10;:19;23525:7;23514:19;;;;;;;;;;;;;;;:54;;;;23472:108;23613:4;23590:11;:20;23602:7;23590:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;23628:9;23643:7;23628:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23327:332:::0;:::o;19009:244::-;18286:12;:10;:12::i;:::-;18276:22;;:6;;;;;;;;;;:22;;;18268:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19118:1:::1;19098:22;;:8;:22;;;;19090:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19208:8;19179:38;;19200:6;::::0;::::1;;;;;;;;19179:38;;;;;;;;;;;;19237:8;19228:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;19009:244:::0;:::o;23667:481::-;18286:12;:10;:12::i;:::-;18276:22;;:6;;;;;;;;;;:22;;;18268:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23748:11:::1;:20;23760:7;23748:20;;;;;;;;;;;;;;;;;;;;;;;;;23740:60;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;23816:9;23811:330;23835:9;:16;;;;23831:1;:20;23811:330;;;23893:7;23877:23;;:9;23887:1;23877:12;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;23873:257;;;23936:9;23965:1;23946:9;:16;;;;:20;23936:31;;;;;;;;;;;;;;;;;;;;;;;;;23921:9;23931:1;23921:12;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;24008:1;23986:10;:19;23997:7;23986:19;;;;;;;;;;;;;;;:23;;;;24051:5;24028:11;:20;24040:7;24028:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;24075:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24109:5;;23873:257;23853:3;;;;;;;23811:330;;;;23667:481:::0;:::o;22617:442::-;22700:7;19738:5;22728:7;:21;;22720:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22801:17;22796:256;;22836:18;22862:19;22873:7;22862:10;:19::i;:::-;22835:46;;;;;;22903:10;22896:17;;;;;22796:256;22948:26;22981:19;22992:7;22981:10;:19::i;:::-;22946:54;;;;;;23022:18;23015:25;;;22617:442;;;;;:::o;95:106::-;148:15;183:10;176:17;;95:106;:::o;24156:337::-;24266:1;24249:19;;:5;:19;;;;24241:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24347:1;24328:21;;:7;:21;;;;24320:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24431:6;24401:11;:18;24413:5;24401:18;;;;;;;;;;;;;;;:27;24420:7;24401:27;;;;;;;;;;;;;;;:36;;;;24469:7;24453:32;;24462:5;24453:32;;;24478:6;24453:32;;;;;;;;;;;;;;;;;;24156:337;;;:::o;24501:931::-;24616:1;24598:20;;:6;:20;;;;24590:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24700:1;24679:23;;:9;:23;;;;24671:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24770:1;24761:6;:10;24753:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24832:11;:19;24844:6;24832:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;24856:11;:22;24868:9;24856:22;;;;;;;;;;;;;;;;;;;;;;;;;24855:23;24832:46;24828:597;;;24895:48;24917:6;24925:9;24936:6;24895:21;:48::i;:::-;24828:597;;;24966:11;:19;24978:6;24966:19;;;;;;;;;;;;;;;;;;;;;;;;;24965:20;:46;;;;;24989:11;:22;25001:9;24989:22;;;;;;;;;;;;;;;;;;;;;;;;;24965:46;24961:464;;;25028:46;25048:6;25056:9;25067:6;25028:19;:46::i;:::-;24961:464;;;25097:11;:19;25109:6;25097:19;;;;;;;;;;;;;;;;;;;;;;;;;25096:20;:47;;;;;25121:11;:22;25133:9;25121:22;;;;;;;;;;;;;;;;;;;;;;;;;25120:23;25096:47;25092:333;;;25160:44;25178:6;25186:9;25197:6;25160:17;:44::i;:::-;25092:333;;;25226:11;:19;25238:6;25226:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;25249:11;:22;25261:9;25249:22;;;;;;;;;;;;;;;;;;;;;;;;;25226:45;25222:203;;;25288:48;25310:6;25318:9;25329:6;25288:21;:48::i;:::-;25222:203;;;25369:44;25387:6;25395:9;25406:6;25369:17;:44::i;:::-;25222:203;25092:333;24961:464;24828:597;24501:931;;;:::o;7843:166::-;7929:7;7962:1;7957;:6;;7965:12;7949:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8000:1;7996;:5;7989:12;;7843:166;;;;;:::o;5016:179::-;5074:7;5094:9;5110:1;5106;:5;5094:17;;5135:1;5130;:6;;5122:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5186:1;5179:8;;;5016:179;;;;:::o;28870:163::-;28911:7;28932:15;28949;28968:19;:17;:19::i;:::-;28931:56;;;;29005:20;29017:7;29005;:11;;:20;;;;:::i;:::-;28998:27;;;;28870:163;:::o;6593:153::-;6651:7;6683:1;6679;:5;6671:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6737:1;6733;:5;;;;;;6726:12;;6593:153;;;;:::o;27820:429::-;27879:7;27888;27897;27906;27915;27936:26;27964:12;27980:20;27992:7;27980:11;:20::i;:::-;27935:65;;;;28011:19;28034:10;:8;:10::i;:::-;28011:33;;28056:18;28076:26;28104:12;28120:39;28132:7;28141:4;28147:11;28120;:39::i;:::-;28055:104;;;;;;28178:10;28190:18;28210:4;28216:18;28236:4;28170:71;;;;;;;;;;;;;;;;27820:429;;;;;;;:::o;5478:158::-;5536:7;5569:1;5564;:6;;5556:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5627:1;5623;:5;5616:12;;5478:158;;;;:::o;26490:537::-;26593:18;26613:26;26641:12;26655:26;26683:12;26699:19;26710:7;26699:10;:19::i;:::-;26592:126;;;;;;;;;;26750:31;26773:7;26750:10;:18;26761:6;26750:18;;;;;;;;;;;;;;;;:22;;:31;;;;:::i;:::-;26729:10;:18;26740:6;26729:18;;;;;;;;;;;;;;;:52;;;;26812:33;26834:10;26812:9;:17;26822:6;26812:17;;;;;;;;;;;;;;;;:21;;:33;;;;:::i;:::-;26792:9;:17;26802:6;26792:17;;;;;;;;;;;;;;;:53;;;;26879:44;26904:18;26879:9;:20;26889:9;26879:20;;;;;;;;;;;;;;;;:24;;:44;;;;:::i;:::-;26856:9;:20;26866:9;26856:20;;;;;;;;;;;;;;;:67;;;;26937:19;26945:4;26951;26937:7;:19::i;:::-;26989:9;26972:47;;26981:6;26972:47;;;27000:18;26972:47;;;;;;;;;;;;;;;;;;26490:537;;;;;;;;:::o;25922:560::-;26023:18;26043:26;26071:12;26085:26;26113:12;26129:19;26140:7;26129:10;:19::i;:::-;26022:126;;;;;;;;;;26179:33;26201:10;26179:9;:17;26189:6;26179:17;;;;;;;;;;;;;;;;:21;;:33;;;;:::i;:::-;26159:9;:17;26169:6;26159:17;;;;;;;;;;;;;;;:53;;;;26247:45;26273:18;26247:10;:21;26258:9;26247:21;;;;;;;;;;;;;;;;:25;;:45;;;;:::i;:::-;26223:10;:21;26234:9;26223:21;;;;;;;;;;;;;;;:69;;;;26326:44;26351:18;26326:9;:20;26336:9;26326:20;;;;;;;;;;;;;;;;:24;;:44;;;;:::i;:::-;26303:9;:20;26313:9;26303:20;;;;;;;;;;;;;;;:67;;;;26392:19;26400:4;26406;26392:7;:19::i;:::-;26444:9;26427:47;;26436:6;26427:47;;;26455:18;26427:47;;;;;;;;;;;;;;;;;;25922:560;;;;;;;;:::o;25440:474::-;25539:18;25559:26;25587:12;25601:26;25629:12;25645:19;25656:7;25645:10;:19::i;:::-;25538:126;;;;;;;;;;25695:33;25717:10;25695:9;:17;25705:6;25695:17;;;;;;;;;;;;;;;;:21;;:33;;;;:::i;:::-;25675:9;:17;25685:6;25675:17;;;;;;;;;;;;;;;:53;;;;25762:44;25787:18;25762:9;:20;25772:9;25762:20;;;;;;;;;;;;;;;;:24;;:44;;;;:::i;:::-;25739:9;:20;25749:9;25739:20;;;;;;;;;;;;;;;:67;;;;25824:19;25832:4;25838;25824:7;:19::i;:::-;25876:9;25859:47;;25868:6;25859:47;;;25887:18;25859:47;;;;;;;;;;;;;;;;;;25440:474;;;;;;;;:::o;27035:622::-;27138:18;27158:26;27186:12;27200:26;27228:12;27244:19;27255:7;27244:10;:19::i;:::-;27137:126;;;;;;;;;;27295:31;27318:7;27295:10;:18;27306:6;27295:18;;;;;;;;;;;;;;;;:22;;:31;;;;:::i;:::-;27274:10;:18;27285:6;27274:18;;;;;;;;;;;;;;;:52;;;;27357:33;27379:10;27357:9;:17;27367:6;27357:17;;;;;;;;;;;;;;;;:21;;:33;;;;:::i;:::-;27337:9;:17;27347:6;27337:17;;;;;;;;;;;;;;;:53;;;;27425:45;27451:18;27425:10;:21;27436:9;27425:21;;;;;;;;;;;;;;;;:25;;:45;;;;:::i;:::-;27401:10;:21;27412:9;27401:21;;;;;;;;;;;;;;;:69;;;;27504:44;27529:18;27504:9;:20;27514:9;27504:20;;;;;;;;;;;;;;;;:24;;:44;;;;:::i;:::-;27481:9;:20;27491:9;27481:20;;;;;;;;;;;;;;;:67;;;;27567:19;27575:4;27581;27567:7;:19::i;:::-;27619:9;27602:47;;27611:6;27602:47;;;27630:18;27602:47;;;;;;;;;;;;;;;;;;27035:622;;;;;;;;:::o;29041:591::-;29091:7;29100;29120:15;29138:9;;29120:27;;29158:15;19738:5;29158:28;;29208:9;29203:304;29227:9;:16;;;;29223:1;:20;29203:304;;;29295:7;29269:9;:23;29279:9;29289:1;29279:12;;;;;;;;;;;;;;;;;;;;;;;;;29269:23;;;;;;;;;;;;;;;;:33;:71;;;;29333:7;29306:10;:24;29317:9;29327:1;29317:12;;;;;;;;;;;;;;;;;;;;;;;;;29306:24;;;;;;;;;;;;;;;;:34;29269:71;29265:107;;;29350:9;;19738:5;29342:30;;;;;;;;;29265:107;29397:36;29409:9;:23;29419:9;29429:1;29419:12;;;;;;;;;;;;;;;;;;;;;;;;;29409:23;;;;;;;;;;;;;;;;29397:7;:11;;:36;;;;:::i;:::-;29387:46;;29458:37;29470:10;:24;29481:9;29491:1;29481:12;;;;;;;;;;;;;;;;;;;;;;;;;29470:24;;;;;;;;;;;;;;;;29458:7;:11;;:37;;;;:::i;:::-;29448:47;;29245:3;;;;;;;29203:304;;;;29531:25;19738:5;29531:9;;:13;;:25;;;;:::i;:::-;29521:7;:35;29517:71;;;29566:9;;19738:5;29558:30;;;;;;;;29517:71;29607:7;29616;29599:25;;;;;;29041:591;;;:::o;28257:248::-;28317:7;28326;28346:12;28361:35;28392:3;28361:26;28382:4;28361:16;28373:3;28361:7;:11;;:16;;;;:::i;:::-;:20;;:26;;;;:::i;:::-;:30;;:35;;;;:::i;:::-;28346:50;;28407:26;28436:17;28448:4;28436:7;:11;;:17;;;;:::i;:::-;28407:46;;28472:18;28492:4;28464:33;;;;;;28257:248;;;:::o;28513:349::-;28608:7;28617;28626;28646:18;28667:24;28679:11;28667:7;:11;;:24;;;;:::i;:::-;28646:45;;28702:12;28717:21;28726:11;28717:4;:8;;:21;;;;:::i;:::-;28702:36;;28749:26;28778:20;28793:4;28778:10;:14;;:20;;;;:::i;:::-;28749:49;;28817:10;28829:18;28849:4;28809:45;;;;;;;;;28513:349;;;;;;;:::o;27665:147::-;27741:19;27755:4;27741:9;;:13;;:19;;;;:::i;:::-;27729:9;:31;;;;27784:20;27799:4;27784:10;;:14;;:20;;;;:::i;:::-;27771:10;:33;;;;27665:147;;:::o;5895:220::-;5953:7;5982:1;5977;:6;5973:20;;;5992:1;5985:8;;;;5973:20;6004:9;6020:1;6016;:5;6004:17;;6049:1;6044;6040;:5;;;;;;:10;6032:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6106:1;6099:8;;;5895:220;;;;;:::o

Swarm Source

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