ETH Price: $1,985.45 (+0.38%)

Token

GOATZ TOKEN (GOATZ)
 

Overview

Max Total Supply

2,000,000,000,000 GOATZ

Holders

1

Transfers

-
0

Market

Onchain Market Cap

-

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

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

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

Contract Source Code Verified (Exact Match)

Contract Name:
GOATZ

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at Etherscan.io on 2021-12-08
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

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

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
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
    );
}

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

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


            bytes32 accountHash
         = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly {
            codehash := extcodehash(account)
        }
        return (codehash != accountHash && codehash != 0x0);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface IUniswapV2Pair {
    function sync() external;
}

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
      address token,
      uint liquidity,
      uint amountTokenMin,
      uint amountETHMin,
      address to,
      uint deadline
    ) external returns (uint amountETH);
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
}

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

    string private _name = "GOATZ TOKEN";
    string private _symbol = "GOATZ";
    uint8 private _decimals = 18;

    mapping(address => uint256) internal _reflectionBalance;
    mapping(address => uint256) internal _balanceLimit;
    mapping(address => uint256) internal _tokenBalance;
    
    mapping(address => bool) internal _isTxLimitExempt;
    mapping(address => bool) internal _isMaxTxWallet;
    mapping (address => bool) public _blackList;
    mapping(address => mapping(address => uint256)) internal _allowances;
    

    uint256 private constant MAX = ~uint256(0);
    uint256 internal _tokenTotal = 2000000000000 * (10**decimals());
    uint256 internal _reflectionTotal = (MAX - (MAX % _tokenTotal));

    mapping(address => bool) isTaxless;
    mapping(address => bool) internal _isExcluded;
    address[] internal _excluded;
    
    uint256 public _feeDecimal = 2; // do not change this value...
    uint256 public _taxFee = 400; // means 4% which distribute to all holders reflection fee
    uint256 public _liquidityFee = 400; // means 4% add liquidity
    uint256 public _marketingFee =100; //1% to marketing wallet
    uint256 public _charityFee =100; //1% to charity wallet
    
    
    address marketingWallet = 0x68Cac4E7411a10953CB45F88Fa7C9d4838D904A9;
    address charityWallet = 0x2a06A343f1FAA204EDa1868579Bb0d1a94861C56;
    address preSale =0xeec48b1856549F056ec473441Ba1582074f84604;

    
    uint256 public _taxFeeTotal;
    uint256 public _liquidityFeeTotal;

    bool public isFeeActive = true; // should be true
    bool private inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool private tradingEnable = true;
    
    uint256 public maxTxAmount = _tokenTotal; 
    uint256 public maxWalletAmount =_tokenTotal;

    //pre sale 
    
    bool public preSaleFinalize=false;
    uint256 public preSaleTime = block.timestamp;
    uint256 Rate = 880000000;
    
    uint256 public minTokensBeforeSwap = 100_000e18;
  
    IUniswapV2Router02 public  uniswapV2Router;
    address public  uniswapV2Pair;

    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(uint256 tokensSwapped,uint256 ethReceived, uint256 tokensIntoLiqudity);

    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    constructor() {
        // IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x10ED43C718714eb63d5aA57B78B54704E256024E); // for BSC Pncake v2
        // IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506); // for SushiSwap
         IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // for Ethereum uniswap v2
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        uniswapV2Router = _uniswapV2Router;
      
        isTaxless[owner()] = true;
        isTaxless[address(this)] = true;
        _isTxLimitExempt[owner()] = true;
        _isTxLimitExempt[address(this)]=true;
        _isTxLimitExempt[marketingWallet]=true;
        _isTxLimitExempt[address(uniswapV2Pair)]=true;
        
        _isMaxTxWallet[owner()] = true;
        _isMaxTxWallet[address(this)]=true;
        _isMaxTxWallet[marketingWallet]=true;

        // exlcude pair address from tax rewards
        _isExcluded[address(uniswapV2Pair)] = true;
        _excluded.push(address(uniswapV2Pair));

        _reflectionBalance[owner()] = _reflectionTotal;
        emit Transfer(address(0),owner(), _tokenTotal);
    }

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

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

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

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

    function balanceOf(address account) public override view returns (uint256) {
        if (_isExcluded[account]) return _tokenBalance[account];
        return tokenFromReflection(_reflectionBalance[account]);
    }

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

    function allowance(address owner, address spender)
        public
        override
        view
        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 virtual 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 reflectionFromToken(uint256 tokenAmount, bool deductTransferFee)
        public
        view
        returns (uint256)
    {
        require(tokenAmount <= _tokenTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            return tokenAmount.mul(_getReflectionRate());
        } else {
            return
                tokenAmount.sub(tokenAmount.mul(_taxFee).div(10** _feeDecimal + 2)).mul(
                    _getReflectionRate()
                );
        }
    }

    function tokenFromReflection(uint256 reflectionAmount)
        public
        view
        returns (uint256)
    {
        require(
            reflectionAmount <= _reflectionTotal,
            "Amount must be less than total reflections"
        );
        uint256 currentRate = _getReflectionRate();
        return reflectionAmount.div(currentRate);
    }

    function excludeAccount(address account) external onlyOwner() {
        require(
            account != address(uniswapV2Router),
            "ERC20: We can not exclude Uniswap router."
        );
        require(!_isExcluded[account], "ERC20: Account is already excluded");
        if (_reflectionBalance[account] > 0) {
            _tokenBalance[account] = tokenFromReflection(
                _reflectionBalance[account]
            );
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeAccount(address account) external onlyOwner() {
        require(_isExcluded[account], "ERC20: Account is already included");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tokenBalance[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(amount > 0, "Transfer amount must be greater than zero");
        require(amount <= maxTxAmount || _isTxLimitExempt[sender], "Transfer Limit Exceeds");
        require(!_blackList[sender],"Address is blackListed");
        require(amount <= maxWalletAmount || _isMaxTxWallet[sender],"Can't hold more tokens");
        require(tradingEnable || owner()==sender,"trading is disable");
       
            
        uint256 transferAmount = amount;
        uint256 rate = _getReflectionRate();

        if(!preSaleFinalize){
        _reflectionBalance[sender] = _reflectionBalance[sender].sub(amount.mul(rate));
        _reflectionBalance[recipient] = _reflectionBalance[recipient].add(amount.mul(rate));
        return;
        }
        
        uint256 constractBal=balanceOf(address(this));
        bool overMinTokenBalance = constractBal >= minTokensBeforeSwap;
        
        if(!inSwapAndLiquify && overMinTokenBalance && sender != uniswapV2Pair && swapAndLiquifyEnabled) {
            swapAndLiquify(constractBal);
        }

        if(!isTaxless[sender] && !isTaxless[recipient] && !inSwapAndLiquify){
            transferAmount = collectFee(sender,amount,rate);
        }
        //transfer reflection
        _reflectionBalance[sender] = _reflectionBalance[sender].sub(amount.mul(rate));
        _reflectionBalance[recipient] = _reflectionBalance[recipient].add(transferAmount.mul(rate));

        //if any account belongs to the excludedAccount transfer token
        if (_isExcluded[sender]) {
            _tokenBalance[sender] = _tokenBalance[sender].sub(amount);
        }
        if (_isExcluded[recipient]) {
            _tokenBalance[recipient] = _tokenBalance[recipient].add(transferAmount);
        }

        emit Transfer(sender, recipient, transferAmount);
    }
    
    function collectFee(address account, uint256 amount, uint256 rate) private returns (uint256) {
        uint256 transferAmount = amount;
        
        //@dev tax fee
        if(_taxFee != 0){
            uint256 taxFee = amount.mul(_taxFee).div(10**(_feeDecimal + 2));
            transferAmount = transferAmount.sub(taxFee);
            _reflectionTotal = _reflectionTotal.sub(taxFee.mul(rate));
            _taxFeeTotal = _taxFeeTotal.add(taxFee);
        }
        
        if(_liquidityFee != 0){
            uint256 liquidityFee = amount.mul(_liquidityFee).div(10**(_feeDecimal + 2));
            transferAmount = transferAmount.sub(liquidityFee);
            _reflectionBalance[address(this)] = _reflectionBalance[address(this)].add(liquidityFee.mul(rate));
            if(_isExcluded[address(this)]){
                _tokenBalance[address(this)] = _tokenBalance[address(this)].add(liquidityFee);
            }
            _liquidityFeeTotal = _liquidityFeeTotal.add(liquidityFee);
            emit Transfer(account,address(this),liquidityFee);
        }

        if(_marketingFee != 0){
            uint256 burnFee = amount.mul(_marketingFee).div(10**(_feeDecimal + 2));
            transferAmount = transferAmount.sub(burnFee);
            _reflectionBalance[marketingWallet] = _reflectionBalance[marketingWallet].add(burnFee.mul(rate));
            if(_isExcluded[marketingWallet]){
                _tokenBalance[marketingWallet] = _tokenBalance[marketingWallet].add(burnFee);
            }
            emit Transfer(account,marketingWallet,burnFee);
        }

        if(_charityFee != 0){
            uint256 burnFee = amount.mul(_charityFee).div(10**(_feeDecimal + 2));
            transferAmount = transferAmount.sub(burnFee);
            _reflectionBalance[charityWallet] = _reflectionBalance[charityWallet].add(burnFee.mul(rate));
            if(_isExcluded[charityWallet]){
                _tokenBalance[charityWallet] = _tokenBalance[charityWallet].add(burnFee);
            }
            emit Transfer(account,charityWallet,burnFee);
        }
    
        return transferAmount;
    }

    function _getReflectionRate() private view returns (uint256) {
        uint256 reflectionSupply = _reflectionTotal;
        uint256 tokenSupply = _tokenTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (
                _reflectionBalance[_excluded[i]] > reflectionSupply ||
                _tokenBalance[_excluded[i]] > tokenSupply
            ) return _reflectionTotal.div(_tokenTotal);
            reflectionSupply = reflectionSupply.sub(
                _reflectionBalance[_excluded[i]]
            );
            tokenSupply = tokenSupply.sub(_tokenBalance[_excluded[i]]);
        }
        if (reflectionSupply < _reflectionTotal.div(_tokenTotal))
            return _reflectionTotal.div(_tokenTotal);
        return reflectionSupply.div(tokenSupply);
    }
    
    
        function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
         if(contractTokenBalance > maxTxAmount){
             contractTokenBalance = maxTxAmount;
         }
        // split the contract balance into halves
        uint256 half = contractTokenBalance.div(2);
        uint256 otherHalf = contractTokenBalance.sub(half);

        // capture the contract's current ETH balance.
        // this is so that we can capture exactly the amount of ETH that the
        // swap creates, and not make the liquidity event include any ETH that
        // has been manually sent to the contract
        uint256 initialBalance = address(this).balance;

        // swap tokens for ETH
        swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered

        // how much ETH did we just swap into?
        uint256 newBalance = address(this).balance.sub(initialBalance);

        // add liquidity to uniswap
        addLiquidity(otherHalf, newBalance);
        
        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            address(this),
            block.timestamp
        );
    }
    
  
    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }
    
    function setPair(address pair) external onlyOwner {
        uniswapV2Pair = pair;
    }

    function setTaxless(address account, bool value) external onlyOwner {
        isTaxless[account] = value;
    }
    
    function setSwapAndLiquifyEnabled(bool enabled) external onlyOwner {
        swapAndLiquifyEnabled = enabled;
        emit SwapAndLiquifyEnabledUpdated(enabled);
    }
    
    function setFeeActive(bool value) external onlyOwner {
        isFeeActive = value;
    }
    
    function setTaxFee(uint256 fee) external onlyOwner {
        _taxFee = fee;
    }
    
    function setAddresses(address _marketingAddress,address _charityAddress) external onlyOwner{
        marketingWallet=_marketingAddress;
        charityWallet = _charityAddress;   
    }

    function setMarketingCharityFee(uint256 marketingfee,uint256 charityFee) external onlyOwner {
        _marketingFee = marketingfee;
        _charityFee = charityFee;
    }
    
    function setBlackList (address add,bool value) external onlyOwner {
        _blackList[add]=value;
    }
    
    function setTrading(bool value) external onlyOwner {
        tradingEnable= value;
    }
    
    function setLiquidityFee(uint256 fee) external onlyOwner {
        _liquidityFee = fee;
    }
 
    function setMaxTxAmount(uint256 amount) external onlyOwner {
        maxTxAmount = amount;
    }
    
    function setMaxTxAmountExempt(address holder, bool exempt) external onlyOwner {
        _isTxLimitExempt[holder] = exempt;
    }
    
    function setMaxWalletExempt(address holder,bool exempt) external onlyOwner {
        _isMaxTxWallet[holder] = exempt;
    }
    
    function setMinTokensBeforeSwap(uint256 amount) external onlyOwner {
        minTokensBeforeSwap = amount;
    }
     
    function setPreSaleFinalize(bool _value) external onlyOwner {
        preSaleFinalize = _value;
    }

    receive() external payable {
        if(!inSwapAndLiquify){
        require( !preSaleFinalize && preSaleTime + 30 days > block.timestamp ,"pre sale is finalize");
        uint256 amount=msg.value*Rate;
        _transfer(preSale,msg.sender,amount);
        payable(preSale).transfer(msg.value);
        }
    }
}

Contract Security Audit

Contract ABI

API
[{"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":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","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":"","type":"address"}],"name":"_blackList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_charityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_feeDecimal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFeeTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFeeTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"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":"uint256","name":"","type":"uint256"}],"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":"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":"isFeeActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minTokensBeforeSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"preSaleFinalize","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preSaleTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingAddress","type":"address"},{"internalType":"address","name":"_charityAddress","type":"address"}],"name":"setAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"add","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setFeeActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"setLiquidityFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingfee","type":"uint256"},{"internalType":"uint256","name":"charityFee","type":"uint256"}],"name":"setMarketingCharityFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setMaxTxAmountExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setMaxWalletExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMinTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"}],"name":"setPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_value","type":"bool"}],"name":"setPreSaleFinalize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"setTaxFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setTaxless","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"reflectionAmount","type":"uint256"}],"name":"tokenFromReflection","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"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052600b60808190526a23a7a0aa2d102a27a5a2a760a91b60a09081526200002e91600191906200059f565b506040805180820190915260058082526423a7a0aa2d60d91b60209092019182526200005d916002916200059f565b506003805460ff191660129081179091556200007b90600a6200075a565b6200008d906501d1a94a20006200076f565b600b819055620000a09060001962000791565b620000ae90600019620007b4565b600c556002601055610190601181905560125560646013819055601455601580546001600160a01b03199081167368cac4e7411a10953cb45f88fa7c9d4838d904a917909155601680548216732a06a343f1faa204eda1868579bb0d1a94861c561790556017805490911673eec48b1856549f056ec473441ba1582074f84604179055601a8054630101000163ffff00ff19909116179055600b54601b819055601c55601d805460ff1916905542601e55633473bc00601f5569152d02c7e14af68000006020553480156200018257600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200021c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002429190620007ce565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000290573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b69190620007ce565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000304573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200032a9190620007ce565b602280546001600160a01b03199081166001600160a01b0393841617909155602180549091169183169190911790556001600d6000620003726000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff19958616179055308152600d909252812080549092166001908117909255600790620003cb6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905530815260079093528183208054851660019081179091556015548216845282842080548616821790556022549091168352908220805490931681179092556008906200044d6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055308152600884528281208054861660019081179091556015548316825283822080548716821790556022805484168352600e909552928120805490951683179094559154600f8054928301815584527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac80290910180546001600160a01b03191691909216179055600c54906004906200051b6000546001600160a01b031690565b6001600160a01b03168152602081019190915260400160002055620005486000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600b546040516200059091815260200190565b60405180910390a35062000836565b828054620005ad90620007f9565b90600052602060002090601f016020900481019282620005d157600085556200061c565b82601f10620005ec57805160ff19168380011785556200061c565b828001600101855582156200061c579182015b828111156200061c578251825591602001919060010190620005ff565b506200062a9291506200062e565b5090565b5b808211156200062a57600081556001016200062f565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200069c57816000190482111562000680576200068062000645565b808516156200068e57918102915b93841c939080029062000660565b509250929050565b600082620006b55750600162000754565b81620006c45750600062000754565b8160018114620006dd5760028114620006e85762000708565b600191505062000754565b60ff841115620006fc57620006fc62000645565b50506001821b62000754565b5060208310610133831016604e8410600b84101617156200072d575081810a62000754565b6200073983836200065b565b806000190482111562000750576200075062000645565b0290505b92915050565b6000620007688383620006a4565b9392505050565b60008160001904831182151516156200078c576200078c62000645565b500290565b600082620007af57634e487b7160e01b600052601260045260246000fd5b500690565b600082821015620007c957620007c962000645565b500390565b600060208284031215620007e157600080fd5b81516001600160a01b03811681146200076857600080fd5b600181811c908216806200080e57607f821691505b602082108114156200083057634e487b7160e01b600052602260045260246000fd5b50919050565b612c6d80620008466000396000f3fe6080604052600436106102e85760003560e01c8063715018a611610190578063b7bfff65116100dc578063e5d41c6b11610095578063f2cc0c181161006f578063f2cc0c181461099a578063f2fde38b146109ba578063f402f26e146109da578063f84354f1146109fa57600080fd5b8063e5d41c6b14610944578063ec28438a1461095a578063f02c96081461097a57600080fd5b8063b7bfff651461084b578063c4081a4c1461086b578063c49b9a801461088b578063cba0e996146108ab578063dd62ed3e146108e4578063e43504da1461092a57600080fd5b806390107afe11610149578063a457c2d711610123578063a457c2d7146107db578063a9059cbb146107fb578063aa4bde281461081b578063b69a1d6f1461083157600080fd5b806390107afe1461079057806395d89b41146107b05780639d46cf8a146107c557600080fd5b8063715018a6146106e75780637537ccb6146106fc5780638187f5161461071c5780638c0b5e221461073c5780638da5cb5b146107525780638f70ccf71461077057600080fd5b8063395093511161024f57806348a4647311610208578063595dec3c116101e2578063595dec3c1461066157806368092bd9146106915780636bc87c3a146106b157806370a08231146106c757600080fd5b806348a464731461060157806349bd5a5e146106215780634a74bb021461064157600080fd5b806339509351146105555780633b124fe714610575578063404408351461058b57806340f8007a146105ab5780634549b039146105c157806347f2dc5b146105e157600080fd5b806323b872dd116102a157806323b872dd146104b157806325a30145146104d15780632d838119146104e7578063313ce56714610507578063355bc60b1461051f578063357bf15c1461053557600080fd5b806306fdde03146103d3578063095ea7b3146103fe5780631694505e1461042e57806318160ddd1461046657806319db457d1461048557806322976e0d1461049b57600080fd5b366103ce57601a54610100900460ff166103cc57601d5460ff1615801561031e575042601e5462278d0061031c9190612704565b115b6103665760405162461bcd60e51b81526020600482015260146024820152737072652073616c652069732066696e616c697a6560601b60448201526064015b60405180910390fd5b6000601f5434610376919061271c565b601754909150610390906001600160a01b03163383610a1a565b6017546040516001600160a01b03909116903480156108fc02916000818181858888f193505050501580156103c9573d6000803e3d6000fd5b50505b005b600080fd5b3480156103df57600080fd5b506103e8610f98565b6040516103f5919061273b565b60405180910390f35b34801561040a57600080fd5b5061041e6104193660046127a8565b61102a565b60405190151581526020016103f5565b34801561043a57600080fd5b5060215461044e906001600160a01b031681565b6040516001600160a01b0390911681526020016103f5565b34801561047257600080fd5b50600b545b6040519081526020016103f5565b34801561049157600080fd5b5061047760105481565b3480156104a757600080fd5b5061047760135481565b3480156104bd57600080fd5b5061041e6104cc3660046127d4565b611041565b3480156104dd57600080fd5b50610477601e5481565b3480156104f357600080fd5b50610477610502366004612815565b6110aa565b34801561051357600080fd5b5060035460ff16610477565b34801561052b57600080fd5b5061047760185481565b34801561054157600080fd5b506103cc610550366004612815565b61112e565b34801561056157600080fd5b5061041e6105703660046127a8565b61115d565b34801561058157600080fd5b5061047760115481565b34801561059757600080fd5b506103cc6105a6366004612843565b611193565b3480156105b757600080fd5b5061047760145481565b3480156105cd57600080fd5b506104776105dc366004612878565b6111e8565b3480156105ed57600080fd5b506103cc6105fc366004612843565b6112a6565b34801561060d57600080fd5b506103cc61061c366004612815565b6112fb565b34801561062d57600080fd5b5060225461044e906001600160a01b031681565b34801561064d57600080fd5b50601a5461041e9062010000900460ff1681565b34801561066d57600080fd5b5061041e61067c36600461289b565b60096020526000908152604090205460ff1681565b34801561069d57600080fd5b506103cc6106ac366004612843565b61132a565b3480156106bd57600080fd5b5061047760125481565b3480156106d357600080fd5b506104776106e236600461289b565b61137f565b3480156106f357600080fd5b506103cc6113de565b34801561070857600080fd5b506103cc610717366004612843565b611452565b34801561072857600080fd5b506103cc61073736600461289b565b6114a7565b34801561074857600080fd5b50610477601b5481565b34801561075e57600080fd5b506000546001600160a01b031661044e565b34801561077c57600080fd5b506103cc61078b3660046128b8565b6114f3565b34801561079c57600080fd5b506103cc6107ab3660046128d3565b61153b565b3480156107bc57600080fd5b506103e8611593565b3480156107d157600080fd5b5061047760195481565b3480156107e757600080fd5b5061041e6107f63660046127a8565b6115a2565b34801561080757600080fd5b5061041e6108163660046127a8565b6115f1565b34801561082757600080fd5b50610477601c5481565b34801561083d57600080fd5b50601d5461041e9060ff1681565b34801561085757600080fd5b506103cc6108663660046128b8565b6115fe565b34801561087757600080fd5b506103cc610886366004612815565b61163b565b34801561089757600080fd5b506103cc6108a63660046128b8565b61166a565b3480156108b757600080fd5b5061041e6108c636600461289b565b6001600160a01b03166000908152600e602052604090205460ff1690565b3480156108f057600080fd5b506104776108ff3660046128d3565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205490565b34801561093657600080fd5b50601a5461041e9060ff1681565b34801561095057600080fd5b5061047760205481565b34801561096657600080fd5b506103cc610975366004612815565b6116ea565b34801561098657600080fd5b506103cc61099536600461290c565b611719565b3480156109a657600080fd5b506103cc6109b536600461289b565b61174e565b3480156109c657600080fd5b506103cc6109d536600461289b565b61191c565b3480156109e657600080fd5b506103cc6109f53660046128b8565b611a06565b348015610a0657600080fd5b506103cc610a1536600461289b565b611a43565b6001600160a01b038316610a7e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161035d565b60008111610ae05760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161035d565b601b5481111580610b0957506001600160a01b03831660009081526007602052604090205460ff165b610b4e5760405162461bcd60e51b81526020600482015260166024820152755472616e73666572204c696d6974204578636565647360501b604482015260640161035d565b6001600160a01b03831660009081526009602052604090205460ff1615610bb05760405162461bcd60e51b81526020600482015260166024820152751059191c995cdcc81a5cc8189b1858dad31a5cdd195960521b604482015260640161035d565b601c5481111580610bd957506001600160a01b03831660009081526008602052604090205460ff165b610c1e5760405162461bcd60e51b815260206004820152601660248201527543616e277420686f6c64206d6f726520746f6b656e7360501b604482015260640161035d565b601a546301000000900460ff1680610c585750826001600160a01b0316610c4d6000546001600160a01b031690565b6001600160a01b0316145b610c995760405162461bcd60e51b815260206004820152601260248201527174726164696e672069732064697361626c6560701b604482015260640161035d565b806000610ca4611c05565b601d5490915060ff16610d4557610cdd610cbe8483611d93565b6001600160a01b03871660009081526004602052604090205490611e12565b6001600160a01b038616600090815260046020526040902055610d22610d038483611d93565b6001600160a01b03861660009081526004602052604090205490611e54565b6001600160a01b0390941660009081526004602052604090209390935550505050565b6000610d503061137f565b602054601a5491925082101590610100900460ff16158015610d6f5750805b8015610d8957506022546001600160a01b03888116911614155b8015610d9d5750601a5462010000900460ff165b15610dab57610dab82611eb3565b6001600160a01b0387166000908152600d602052604090205460ff16158015610ded57506001600160a01b0386166000908152600d602052604090205460ff16155b8015610e015750601a54610100900460ff16155b15610e1457610e11878685611f63565b93505b610e40610e218685611d93565b6001600160a01b03891660009081526004602052604090205490611e12565b6001600160a01b038816600090815260046020526040902055610e85610e668585611d93565b6001600160a01b03881660009081526004602052604090205490611e54565b6001600160a01b03808816600090815260046020908152604080832094909455918a168152600e909152205460ff1615610ef6576001600160a01b038716600090815260066020526040902054610edc9086611e12565b6001600160a01b0388166000908152600660205260409020555b6001600160a01b0386166000908152600e602052604090205460ff1615610f54576001600160a01b038616600090815260066020526040902054610f3a9085611e54565b6001600160a01b0387166000908152600660205260409020555b856001600160a01b0316876001600160a01b0316600080516020612bf383398151915286604051610f8791815260200190565b60405180910390a350505050505050565b606060018054610fa79061292e565b80601f0160208091040260200160405190810160405280929190818152602001828054610fd39061292e565b80156110205780601f10610ff557610100808354040283529160200191611020565b820191906000526020600020905b81548152906001019060200180831161100357829003601f168201915b5050505050905090565b6000611037338484612315565b5060015b92915050565b600061104e848484610a1a565b6110a0843361109b85604051806060016040528060288152602001612bcb602891396001600160a01b038a166000908152600a602090815260408083203384529091529020549190612439565b612315565b5060019392505050565b6000600c548211156111115760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b606482015260840161035d565b600061111b611c05565b90506111278382612473565b9392505050565b6000546001600160a01b031633146111585760405162461bcd60e51b815260040161035d90612969565b601255565b336000818152600a602090815260408083206001600160a01b0387168452909152812054909161103791859061109b9086611e54565b6000546001600160a01b031633146111bd5760405162461bcd60e51b815260040161035d90612969565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6000600b5483111561123c5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015260640161035d565b8161125a5761125361124c611c05565b8490611d93565b905061103b565b611253611265611c05565b6112a0611299601054600a61127a9190612a82565b611285906002612704565b601154611293908990611d93565b90612473565b8690611e12565b90611d93565b6000546001600160a01b031633146112d05760405162461bcd60e51b815260040161035d90612969565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146113255760405162461bcd60e51b815260040161035d90612969565b602055565b6000546001600160a01b031633146113545760405162461bcd60e51b815260040161035d90612969565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6001600160a01b0381166000908152600e602052604081205460ff16156113bc57506001600160a01b031660009081526006602052604090205490565b6001600160a01b03821660009081526004602052604090205461103b906110aa565b6000546001600160a01b031633146114085760405162461bcd60e51b815260040161035d90612969565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b0316331461147c5760405162461bcd60e51b815260040161035d90612969565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146114d15760405162461bcd60e51b815260040161035d90612969565b602280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461151d5760405162461bcd60e51b815260040161035d90612969565b601a805491151563010000000263ff00000019909216919091179055565b6000546001600160a01b031633146115655760405162461bcd60e51b815260040161035d90612969565b601580546001600160a01b039384166001600160a01b03199182161790915560168054929093169116179055565b606060028054610fa79061292e565b6000611037338461109b85604051806060016040528060258152602001612c1360259139336000908152600a602090815260408083206001600160a01b038d1684529091529020549190612439565b6000611037338484610a1a565b6000546001600160a01b031633146116285760405162461bcd60e51b815260040161035d90612969565b601a805460ff1916911515919091179055565b6000546001600160a01b031633146116655760405162461bcd60e51b815260040161035d90612969565b601155565b6000546001600160a01b031633146116945760405162461bcd60e51b815260040161035d90612969565b601a8054821515620100000262ff0000199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906116df90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146117145760405162461bcd60e51b815260040161035d90612969565b601b55565b6000546001600160a01b031633146117435760405162461bcd60e51b815260040161035d90612969565b601391909155601455565b6000546001600160a01b031633146117785760405162461bcd60e51b815260040161035d90612969565b6021546001600160a01b03828116911614156117e85760405162461bcd60e51b815260206004820152602960248201527f45524332303a2057652063616e206e6f74206578636c75646520556e6973776160448201526838103937baba32b91760b91b606482015260840161035d565b6001600160a01b0381166000908152600e602052604090205460ff161561185c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a204163636f756e7420697320616c7265616479206578636c7564604482015261195960f21b606482015260840161035d565b6001600160a01b038116600090815260046020526040902054156118b6576001600160a01b03811660009081526004602052604090205461189c906110aa565b6001600160a01b0382166000908152600660205260409020555b6001600160a01b03166000818152600e60205260408120805460ff19166001908117909155600f805491820181559091527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac8020180546001600160a01b0319169091179055565b6000546001600160a01b031633146119465760405162461bcd60e51b815260040161035d90612969565b6001600160a01b0381166119ab5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161035d565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611a305760405162461bcd60e51b815260040161035d90612969565b601d805460ff1916911515919091179055565b6000546001600160a01b03163314611a6d5760405162461bcd60e51b815260040161035d90612969565b6001600160a01b0381166000908152600e602052604090205460ff16611ae05760405162461bcd60e51b815260206004820152602260248201527f45524332303a204163636f756e7420697320616c726561647920696e636c7564604482015261195960f21b606482015260840161035d565b60005b600f54811015611c0157816001600160a01b0316600f8281548110611b0a57611b0a612a8e565b6000918252602090912001546001600160a01b03161415611bef57600f8054611b3590600190612aa4565b81548110611b4557611b45612a8e565b600091825260209091200154600f80546001600160a01b039092169183908110611b7157611b71612a8e565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600682526040808220829055600e90925220805460ff19169055600f805480611bc957611bc9612abb565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80611bf981612ad1565b915050611ae3565b5050565b600c54600b5460009190825b600f54811015611d5c578260046000600f8481548110611c3357611c33612a8e565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180611c9e57508160066000600f8481548110611c7757611c77612a8e565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15611cba57600b54600c54611cb291612473565b935050505090565b611d0060046000600f8481548110611cd457611cd4612a8e565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611e12565b9250611d4860066000600f8481548110611d1c57611d1c612a8e565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611e12565b915080611d5481612ad1565b915050611c11565b50600b54600c54611d6c91612473565b821015611d8957600b54600c54611d8291612473565b9250505090565b611d828282612473565b600082611da25750600061103b565b6000611dae838561271c565b905082611dbb8583612aec565b146111275760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161035d565b600061112783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612439565b600080611e618385612704565b9050838110156111275760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161035d565b601a805461ff001916610100179055601b54811115611ed15750601b545b6000611ede826002612473565b90506000611eec8383611e12565b905047611ef8836124b5565b6000611f044783611e12565b9050611f10838261260f565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050601a805461ff0019169055505050565b601154600090839015611fd6576000611f9d6010546002611f849190612704565b611f8f90600a612a82565b601154611293908890611d93565b9050611fa98282611e12565b9150611fc1611fb88286611d93565b600c5490611e12565b600c55601854611fd19082611e54565b601855505b601254156120cb57600061200b6010546002611ff29190612704565b611ffd90600a612a82565b601254611293908890611d93565b90506120178282611e12565b915061203c6120268286611d93565b3060009081526004602052604090205490611e54565b30600090815260046020908152604080832093909355600e9052205460ff161561208b573060009081526006602052604090205461207a9082611e54565b306000908152600660205260409020555b6019546120989082611e54565b60195560405181815230906001600160a01b03881690600080516020612bf38339815191529060200160405180910390a3505b601354156121ec57600061210060105460026120e79190612704565b6120f290600a612a82565b601354611293908890611d93565b905061210c8282611e12565b915061213c61211b8286611d93565b6015546001600160a01b031660009081526004602052604090205490611e54565b601580546001600160a01b0390811660009081526004602090815260408083209590955592549091168152600e909152205460ff16156121b7576015546001600160a01b031660009081526006602052604090205461219b9082611e54565b6015546001600160a01b03166000908152600660205260409020555b6015546040518281526001600160a01b0391821691881690600080516020612bf38339815191529060200160405180910390a3505b6014541561230d57600061222160105460026122089190612704565b61221390600a612a82565b601454611293908890611d93565b905061222d8282611e12565b915061225d61223c8286611d93565b6016546001600160a01b031660009081526004602052604090205490611e54565b601680546001600160a01b0390811660009081526004602090815260408083209590955592549091168152600e909152205460ff16156122d8576016546001600160a01b03166000908152600660205260409020546122bc9082611e54565b6016546001600160a01b03166000908152600660205260409020555b6016546040518281526001600160a01b0391821691881690600080516020612bf38339815191529060200160405180910390a3505b949350505050565b6001600160a01b0383166123775760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161035d565b6001600160a01b0382166123d85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161035d565b6001600160a01b038381166000818152600a602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000818484111561245d5760405162461bcd60e51b815260040161035d919061273b565b50600061246a8486612aa4565b95945050505050565b600061112783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506126c0565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106124ea576124ea612a8e565b6001600160a01b03928316602091820292909201810191909152602154604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612543573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125679190612b0e565b8160018151811061257a5761257a612a8e565b6001600160a01b0392831660209182029290920101526021546125a09130911684612315565b60215460405163791ac94760e01b81526001600160a01b039091169063791ac947906125d9908590600090869030904290600401612b2b565b600060405180830381600087803b1580156125f357600080fd5b505af1158015612607573d6000803e3d6000fd5b505050505050565b6021546126279030906001600160a01b031684612315565b60215460405163f305d71960e01b8152306004820181905260248201859052600060448301819052606483015260848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015612694573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906126b99190612b9c565b5050505050565b600081836126e15760405162461bcd60e51b815260040161035d919061273b565b50600061246a8486612aec565b634e487b7160e01b600052601160045260246000fd5b60008219821115612717576127176126ee565b500190565b6000816000190483118215151615612736576127366126ee565b500290565b600060208083528351808285015260005b818110156127685785810183015185820160400152820161274c565b8181111561277a576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146127a557600080fd5b50565b600080604083850312156127bb57600080fd5b82356127c681612790565b946020939093013593505050565b6000806000606084860312156127e957600080fd5b83356127f481612790565b9250602084013561280481612790565b929592945050506040919091013590565b60006020828403121561282757600080fd5b5035919050565b8035801515811461283e57600080fd5b919050565b6000806040838503121561285657600080fd5b823561286181612790565b915061286f6020840161282e565b90509250929050565b6000806040838503121561288b57600080fd5b8235915061286f6020840161282e565b6000602082840312156128ad57600080fd5b813561112781612790565b6000602082840312156128ca57600080fd5b6111278261282e565b600080604083850312156128e657600080fd5b82356128f181612790565b9150602083013561290181612790565b809150509250929050565b6000806040838503121561291f57600080fd5b50508035926020909101359150565b600181811c9082168061294257607f821691505b6020821081141561296357634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181815b808511156129d95781600019048211156129bf576129bf6126ee565b808516156129cc57918102915b93841c93908002906129a3565b509250929050565b6000826129f05750600161103b565b816129fd5750600061103b565b8160018114612a135760028114612a1d57612a39565b600191505061103b565b60ff841115612a2e57612a2e6126ee565b50506001821b61103b565b5060208310610133831016604e8410600b8410161715612a5c575081810a61103b565b612a66838361299e565b8060001904821115612a7a57612a7a6126ee565b029392505050565b600061112783836129e1565b634e487b7160e01b600052603260045260246000fd5b600082821015612ab657612ab66126ee565b500390565b634e487b7160e01b600052603160045260246000fd5b6000600019821415612ae557612ae56126ee565b5060010190565b600082612b0957634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215612b2057600080fd5b815161112781612790565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612b7b5784516001600160a01b031683529383019391830191600101612b56565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612bb157600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212204b200141c2e2bc36ad0601bbaf57c78ad672edeac5273f1324a5f29ae0f863ec64736f6c634300080a0033

Deployed Bytecode

0x6080604052600436106102e85760003560e01c8063715018a611610190578063b7bfff65116100dc578063e5d41c6b11610095578063f2cc0c181161006f578063f2cc0c181461099a578063f2fde38b146109ba578063f402f26e146109da578063f84354f1146109fa57600080fd5b8063e5d41c6b14610944578063ec28438a1461095a578063f02c96081461097a57600080fd5b8063b7bfff651461084b578063c4081a4c1461086b578063c49b9a801461088b578063cba0e996146108ab578063dd62ed3e146108e4578063e43504da1461092a57600080fd5b806390107afe11610149578063a457c2d711610123578063a457c2d7146107db578063a9059cbb146107fb578063aa4bde281461081b578063b69a1d6f1461083157600080fd5b806390107afe1461079057806395d89b41146107b05780639d46cf8a146107c557600080fd5b8063715018a6146106e75780637537ccb6146106fc5780638187f5161461071c5780638c0b5e221461073c5780638da5cb5b146107525780638f70ccf71461077057600080fd5b8063395093511161024f57806348a4647311610208578063595dec3c116101e2578063595dec3c1461066157806368092bd9146106915780636bc87c3a146106b157806370a08231146106c757600080fd5b806348a464731461060157806349bd5a5e146106215780634a74bb021461064157600080fd5b806339509351146105555780633b124fe714610575578063404408351461058b57806340f8007a146105ab5780634549b039146105c157806347f2dc5b146105e157600080fd5b806323b872dd116102a157806323b872dd146104b157806325a30145146104d15780632d838119146104e7578063313ce56714610507578063355bc60b1461051f578063357bf15c1461053557600080fd5b806306fdde03146103d3578063095ea7b3146103fe5780631694505e1461042e57806318160ddd1461046657806319db457d1461048557806322976e0d1461049b57600080fd5b366103ce57601a54610100900460ff166103cc57601d5460ff1615801561031e575042601e5462278d0061031c9190612704565b115b6103665760405162461bcd60e51b81526020600482015260146024820152737072652073616c652069732066696e616c697a6560601b60448201526064015b60405180910390fd5b6000601f5434610376919061271c565b601754909150610390906001600160a01b03163383610a1a565b6017546040516001600160a01b03909116903480156108fc02916000818181858888f193505050501580156103c9573d6000803e3d6000fd5b50505b005b600080fd5b3480156103df57600080fd5b506103e8610f98565b6040516103f5919061273b565b60405180910390f35b34801561040a57600080fd5b5061041e6104193660046127a8565b61102a565b60405190151581526020016103f5565b34801561043a57600080fd5b5060215461044e906001600160a01b031681565b6040516001600160a01b0390911681526020016103f5565b34801561047257600080fd5b50600b545b6040519081526020016103f5565b34801561049157600080fd5b5061047760105481565b3480156104a757600080fd5b5061047760135481565b3480156104bd57600080fd5b5061041e6104cc3660046127d4565b611041565b3480156104dd57600080fd5b50610477601e5481565b3480156104f357600080fd5b50610477610502366004612815565b6110aa565b34801561051357600080fd5b5060035460ff16610477565b34801561052b57600080fd5b5061047760185481565b34801561054157600080fd5b506103cc610550366004612815565b61112e565b34801561056157600080fd5b5061041e6105703660046127a8565b61115d565b34801561058157600080fd5b5061047760115481565b34801561059757600080fd5b506103cc6105a6366004612843565b611193565b3480156105b757600080fd5b5061047760145481565b3480156105cd57600080fd5b506104776105dc366004612878565b6111e8565b3480156105ed57600080fd5b506103cc6105fc366004612843565b6112a6565b34801561060d57600080fd5b506103cc61061c366004612815565b6112fb565b34801561062d57600080fd5b5060225461044e906001600160a01b031681565b34801561064d57600080fd5b50601a5461041e9062010000900460ff1681565b34801561066d57600080fd5b5061041e61067c36600461289b565b60096020526000908152604090205460ff1681565b34801561069d57600080fd5b506103cc6106ac366004612843565b61132a565b3480156106bd57600080fd5b5061047760125481565b3480156106d357600080fd5b506104776106e236600461289b565b61137f565b3480156106f357600080fd5b506103cc6113de565b34801561070857600080fd5b506103cc610717366004612843565b611452565b34801561072857600080fd5b506103cc61073736600461289b565b6114a7565b34801561074857600080fd5b50610477601b5481565b34801561075e57600080fd5b506000546001600160a01b031661044e565b34801561077c57600080fd5b506103cc61078b3660046128b8565b6114f3565b34801561079c57600080fd5b506103cc6107ab3660046128d3565b61153b565b3480156107bc57600080fd5b506103e8611593565b3480156107d157600080fd5b5061047760195481565b3480156107e757600080fd5b5061041e6107f63660046127a8565b6115a2565b34801561080757600080fd5b5061041e6108163660046127a8565b6115f1565b34801561082757600080fd5b50610477601c5481565b34801561083d57600080fd5b50601d5461041e9060ff1681565b34801561085757600080fd5b506103cc6108663660046128b8565b6115fe565b34801561087757600080fd5b506103cc610886366004612815565b61163b565b34801561089757600080fd5b506103cc6108a63660046128b8565b61166a565b3480156108b757600080fd5b5061041e6108c636600461289b565b6001600160a01b03166000908152600e602052604090205460ff1690565b3480156108f057600080fd5b506104776108ff3660046128d3565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205490565b34801561093657600080fd5b50601a5461041e9060ff1681565b34801561095057600080fd5b5061047760205481565b34801561096657600080fd5b506103cc610975366004612815565b6116ea565b34801561098657600080fd5b506103cc61099536600461290c565b611719565b3480156109a657600080fd5b506103cc6109b536600461289b565b61174e565b3480156109c657600080fd5b506103cc6109d536600461289b565b61191c565b3480156109e657600080fd5b506103cc6109f53660046128b8565b611a06565b348015610a0657600080fd5b506103cc610a1536600461289b565b611a43565b6001600160a01b038316610a7e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161035d565b60008111610ae05760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161035d565b601b5481111580610b0957506001600160a01b03831660009081526007602052604090205460ff165b610b4e5760405162461bcd60e51b81526020600482015260166024820152755472616e73666572204c696d6974204578636565647360501b604482015260640161035d565b6001600160a01b03831660009081526009602052604090205460ff1615610bb05760405162461bcd60e51b81526020600482015260166024820152751059191c995cdcc81a5cc8189b1858dad31a5cdd195960521b604482015260640161035d565b601c5481111580610bd957506001600160a01b03831660009081526008602052604090205460ff165b610c1e5760405162461bcd60e51b815260206004820152601660248201527543616e277420686f6c64206d6f726520746f6b656e7360501b604482015260640161035d565b601a546301000000900460ff1680610c585750826001600160a01b0316610c4d6000546001600160a01b031690565b6001600160a01b0316145b610c995760405162461bcd60e51b815260206004820152601260248201527174726164696e672069732064697361626c6560701b604482015260640161035d565b806000610ca4611c05565b601d5490915060ff16610d4557610cdd610cbe8483611d93565b6001600160a01b03871660009081526004602052604090205490611e12565b6001600160a01b038616600090815260046020526040902055610d22610d038483611d93565b6001600160a01b03861660009081526004602052604090205490611e54565b6001600160a01b0390941660009081526004602052604090209390935550505050565b6000610d503061137f565b602054601a5491925082101590610100900460ff16158015610d6f5750805b8015610d8957506022546001600160a01b03888116911614155b8015610d9d5750601a5462010000900460ff165b15610dab57610dab82611eb3565b6001600160a01b0387166000908152600d602052604090205460ff16158015610ded57506001600160a01b0386166000908152600d602052604090205460ff16155b8015610e015750601a54610100900460ff16155b15610e1457610e11878685611f63565b93505b610e40610e218685611d93565b6001600160a01b03891660009081526004602052604090205490611e12565b6001600160a01b038816600090815260046020526040902055610e85610e668585611d93565b6001600160a01b03881660009081526004602052604090205490611e54565b6001600160a01b03808816600090815260046020908152604080832094909455918a168152600e909152205460ff1615610ef6576001600160a01b038716600090815260066020526040902054610edc9086611e12565b6001600160a01b0388166000908152600660205260409020555b6001600160a01b0386166000908152600e602052604090205460ff1615610f54576001600160a01b038616600090815260066020526040902054610f3a9085611e54565b6001600160a01b0387166000908152600660205260409020555b856001600160a01b0316876001600160a01b0316600080516020612bf383398151915286604051610f8791815260200190565b60405180910390a350505050505050565b606060018054610fa79061292e565b80601f0160208091040260200160405190810160405280929190818152602001828054610fd39061292e565b80156110205780601f10610ff557610100808354040283529160200191611020565b820191906000526020600020905b81548152906001019060200180831161100357829003601f168201915b5050505050905090565b6000611037338484612315565b5060015b92915050565b600061104e848484610a1a565b6110a0843361109b85604051806060016040528060288152602001612bcb602891396001600160a01b038a166000908152600a602090815260408083203384529091529020549190612439565b612315565b5060019392505050565b6000600c548211156111115760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b606482015260840161035d565b600061111b611c05565b90506111278382612473565b9392505050565b6000546001600160a01b031633146111585760405162461bcd60e51b815260040161035d90612969565b601255565b336000818152600a602090815260408083206001600160a01b0387168452909152812054909161103791859061109b9086611e54565b6000546001600160a01b031633146111bd5760405162461bcd60e51b815260040161035d90612969565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6000600b5483111561123c5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015260640161035d565b8161125a5761125361124c611c05565b8490611d93565b905061103b565b611253611265611c05565b6112a0611299601054600a61127a9190612a82565b611285906002612704565b601154611293908990611d93565b90612473565b8690611e12565b90611d93565b6000546001600160a01b031633146112d05760405162461bcd60e51b815260040161035d90612969565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146113255760405162461bcd60e51b815260040161035d90612969565b602055565b6000546001600160a01b031633146113545760405162461bcd60e51b815260040161035d90612969565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6001600160a01b0381166000908152600e602052604081205460ff16156113bc57506001600160a01b031660009081526006602052604090205490565b6001600160a01b03821660009081526004602052604090205461103b906110aa565b6000546001600160a01b031633146114085760405162461bcd60e51b815260040161035d90612969565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b0316331461147c5760405162461bcd60e51b815260040161035d90612969565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146114d15760405162461bcd60e51b815260040161035d90612969565b602280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461151d5760405162461bcd60e51b815260040161035d90612969565b601a805491151563010000000263ff00000019909216919091179055565b6000546001600160a01b031633146115655760405162461bcd60e51b815260040161035d90612969565b601580546001600160a01b039384166001600160a01b03199182161790915560168054929093169116179055565b606060028054610fa79061292e565b6000611037338461109b85604051806060016040528060258152602001612c1360259139336000908152600a602090815260408083206001600160a01b038d1684529091529020549190612439565b6000611037338484610a1a565b6000546001600160a01b031633146116285760405162461bcd60e51b815260040161035d90612969565b601a805460ff1916911515919091179055565b6000546001600160a01b031633146116655760405162461bcd60e51b815260040161035d90612969565b601155565b6000546001600160a01b031633146116945760405162461bcd60e51b815260040161035d90612969565b601a8054821515620100000262ff0000199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906116df90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146117145760405162461bcd60e51b815260040161035d90612969565b601b55565b6000546001600160a01b031633146117435760405162461bcd60e51b815260040161035d90612969565b601391909155601455565b6000546001600160a01b031633146117785760405162461bcd60e51b815260040161035d90612969565b6021546001600160a01b03828116911614156117e85760405162461bcd60e51b815260206004820152602960248201527f45524332303a2057652063616e206e6f74206578636c75646520556e6973776160448201526838103937baba32b91760b91b606482015260840161035d565b6001600160a01b0381166000908152600e602052604090205460ff161561185c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a204163636f756e7420697320616c7265616479206578636c7564604482015261195960f21b606482015260840161035d565b6001600160a01b038116600090815260046020526040902054156118b6576001600160a01b03811660009081526004602052604090205461189c906110aa565b6001600160a01b0382166000908152600660205260409020555b6001600160a01b03166000818152600e60205260408120805460ff19166001908117909155600f805491820181559091527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac8020180546001600160a01b0319169091179055565b6000546001600160a01b031633146119465760405162461bcd60e51b815260040161035d90612969565b6001600160a01b0381166119ab5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161035d565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611a305760405162461bcd60e51b815260040161035d90612969565b601d805460ff1916911515919091179055565b6000546001600160a01b03163314611a6d5760405162461bcd60e51b815260040161035d90612969565b6001600160a01b0381166000908152600e602052604090205460ff16611ae05760405162461bcd60e51b815260206004820152602260248201527f45524332303a204163636f756e7420697320616c726561647920696e636c7564604482015261195960f21b606482015260840161035d565b60005b600f54811015611c0157816001600160a01b0316600f8281548110611b0a57611b0a612a8e565b6000918252602090912001546001600160a01b03161415611bef57600f8054611b3590600190612aa4565b81548110611b4557611b45612a8e565b600091825260209091200154600f80546001600160a01b039092169183908110611b7157611b71612a8e565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600682526040808220829055600e90925220805460ff19169055600f805480611bc957611bc9612abb565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80611bf981612ad1565b915050611ae3565b5050565b600c54600b5460009190825b600f54811015611d5c578260046000600f8481548110611c3357611c33612a8e565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180611c9e57508160066000600f8481548110611c7757611c77612a8e565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15611cba57600b54600c54611cb291612473565b935050505090565b611d0060046000600f8481548110611cd457611cd4612a8e565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611e12565b9250611d4860066000600f8481548110611d1c57611d1c612a8e565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611e12565b915080611d5481612ad1565b915050611c11565b50600b54600c54611d6c91612473565b821015611d8957600b54600c54611d8291612473565b9250505090565b611d828282612473565b600082611da25750600061103b565b6000611dae838561271c565b905082611dbb8583612aec565b146111275760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161035d565b600061112783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612439565b600080611e618385612704565b9050838110156111275760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161035d565b601a805461ff001916610100179055601b54811115611ed15750601b545b6000611ede826002612473565b90506000611eec8383611e12565b905047611ef8836124b5565b6000611f044783611e12565b9050611f10838261260f565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050601a805461ff0019169055505050565b601154600090839015611fd6576000611f9d6010546002611f849190612704565b611f8f90600a612a82565b601154611293908890611d93565b9050611fa98282611e12565b9150611fc1611fb88286611d93565b600c5490611e12565b600c55601854611fd19082611e54565b601855505b601254156120cb57600061200b6010546002611ff29190612704565b611ffd90600a612a82565b601254611293908890611d93565b90506120178282611e12565b915061203c6120268286611d93565b3060009081526004602052604090205490611e54565b30600090815260046020908152604080832093909355600e9052205460ff161561208b573060009081526006602052604090205461207a9082611e54565b306000908152600660205260409020555b6019546120989082611e54565b60195560405181815230906001600160a01b03881690600080516020612bf38339815191529060200160405180910390a3505b601354156121ec57600061210060105460026120e79190612704565b6120f290600a612a82565b601354611293908890611d93565b905061210c8282611e12565b915061213c61211b8286611d93565b6015546001600160a01b031660009081526004602052604090205490611e54565b601580546001600160a01b0390811660009081526004602090815260408083209590955592549091168152600e909152205460ff16156121b7576015546001600160a01b031660009081526006602052604090205461219b9082611e54565b6015546001600160a01b03166000908152600660205260409020555b6015546040518281526001600160a01b0391821691881690600080516020612bf38339815191529060200160405180910390a3505b6014541561230d57600061222160105460026122089190612704565b61221390600a612a82565b601454611293908890611d93565b905061222d8282611e12565b915061225d61223c8286611d93565b6016546001600160a01b031660009081526004602052604090205490611e54565b601680546001600160a01b0390811660009081526004602090815260408083209590955592549091168152600e909152205460ff16156122d8576016546001600160a01b03166000908152600660205260409020546122bc9082611e54565b6016546001600160a01b03166000908152600660205260409020555b6016546040518281526001600160a01b0391821691881690600080516020612bf38339815191529060200160405180910390a3505b949350505050565b6001600160a01b0383166123775760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161035d565b6001600160a01b0382166123d85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161035d565b6001600160a01b038381166000818152600a602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000818484111561245d5760405162461bcd60e51b815260040161035d919061273b565b50600061246a8486612aa4565b95945050505050565b600061112783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506126c0565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106124ea576124ea612a8e565b6001600160a01b03928316602091820292909201810191909152602154604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612543573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125679190612b0e565b8160018151811061257a5761257a612a8e565b6001600160a01b0392831660209182029290920101526021546125a09130911684612315565b60215460405163791ac94760e01b81526001600160a01b039091169063791ac947906125d9908590600090869030904290600401612b2b565b600060405180830381600087803b1580156125f357600080fd5b505af1158015612607573d6000803e3d6000fd5b505050505050565b6021546126279030906001600160a01b031684612315565b60215460405163f305d71960e01b8152306004820181905260248201859052600060448301819052606483015260848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015612694573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906126b99190612b9c565b5050505050565b600081836126e15760405162461bcd60e51b815260040161035d919061273b565b50600061246a8486612aec565b634e487b7160e01b600052601160045260246000fd5b60008219821115612717576127176126ee565b500190565b6000816000190483118215151615612736576127366126ee565b500290565b600060208083528351808285015260005b818110156127685785810183015185820160400152820161274c565b8181111561277a576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146127a557600080fd5b50565b600080604083850312156127bb57600080fd5b82356127c681612790565b946020939093013593505050565b6000806000606084860312156127e957600080fd5b83356127f481612790565b9250602084013561280481612790565b929592945050506040919091013590565b60006020828403121561282757600080fd5b5035919050565b8035801515811461283e57600080fd5b919050565b6000806040838503121561285657600080fd5b823561286181612790565b915061286f6020840161282e565b90509250929050565b6000806040838503121561288b57600080fd5b8235915061286f6020840161282e565b6000602082840312156128ad57600080fd5b813561112781612790565b6000602082840312156128ca57600080fd5b6111278261282e565b600080604083850312156128e657600080fd5b82356128f181612790565b9150602083013561290181612790565b809150509250929050565b6000806040838503121561291f57600080fd5b50508035926020909101359150565b600181811c9082168061294257607f821691505b6020821081141561296357634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181815b808511156129d95781600019048211156129bf576129bf6126ee565b808516156129cc57918102915b93841c93908002906129a3565b509250929050565b6000826129f05750600161103b565b816129fd5750600061103b565b8160018114612a135760028114612a1d57612a39565b600191505061103b565b60ff841115612a2e57612a2e6126ee565b50506001821b61103b565b5060208310610133831016604e8410600b8410161715612a5c575081810a61103b565b612a66838361299e565b8060001904821115612a7a57612a7a6126ee565b029392505050565b600061112783836129e1565b634e487b7160e01b600052603260045260246000fd5b600082821015612ab657612ab66126ee565b500390565b634e487b7160e01b600052603160045260246000fd5b6000600019821415612ae557612ae56126ee565b5060010190565b600082612b0957634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215612b2057600080fd5b815161112781612790565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612b7b5784516001600160a01b031683529383019391830191600101612b56565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612bb157600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212204b200141c2e2bc36ad0601bbaf57c78ad672edeac5273f1324a5f29ae0f863ec64736f6c634300080a0033

Deployed Bytecode Sourcemap

20073:18113:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37909:16;;;;;;;37905:271;;37947:15;;;;37946:16;:59;;;;;37990:15;37966:11;;37980:7;37966:21;;;;:::i;:::-;:39;37946:59;37937:93;;;;-1:-1:-1;;;37937:93:0;;481:2:1;37937:93:0;;;463:21:1;520:2;500:18;;;493:30;-1:-1:-1;;;539:18:1;;;532:50;599:18;;37937:93:0;;;;;;;;;38041:14;38066:4;;38056:9;:14;;;;:::i;:::-;38091:7;;38041:29;;-1:-1:-1;38081:36:0;;-1:-1:-1;;;;;38091:7:0;38099:10;38041:29;38081:9;:36::i;:::-;38136:7;;38128:36;;-1:-1:-1;;;;;38136:7:0;;;;38154:9;38128:36;;;;;38136:7;38128:36;38136:7;38128:36;38154:9;38136:7;38128:36;;;;;;;;;;;;;;;;;;;;;37926:250;37905:271;20073:18113;;;;;23890:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24912:193;;;;;;;;;;-1:-1:-1;24912:193:0;;;;;:::i;:::-;;:::i;:::-;;;2024:14:1;;2017:22;1999:41;;1987:2;1972:18;24912:193:0;1859:187:1;22219:42:0;;;;;;;;;;-1:-1:-1;22219:42:0;;;;-1:-1:-1;;;;;22219:42:0;;;;;;-1:-1:-1;;;;;2241:32:1;;;2223:51;;2211:2;2196:18;22219:42:0;2051:229:1;24169:99:0;;;;;;;;;;-1:-1:-1;24249:11:0;;24169:99;;;2431:25:1;;;2419:2;2404:18;24169:99:0;2285:177:1;21061:30:0;;;;;;;;;;;;;;;;21290:33;;;;;;;;;;;;;;;;25113:368;;;;;;;;;;-1:-1:-1;25113:368:0;;;;;:::i;:::-;;:::i;22073:44::-;;;;;;;;;;;;;;;;26857:368;;;;;;;;;;-1:-1:-1;26857:368:0;;;;;:::i;:::-;;:::i;24076:85::-;;;;;;;;;;-1:-1:-1;24144:9:0;;;;24076:85;;21650:27;;;;;;;;;;;;;;;;37136:95;;;;;;;;;;-1:-1:-1;37136:95:0;;;;;:::i;:::-;;:::i;25495:300::-;;;;;;;;;;-1:-1:-1;25495:300:0;;;;;:::i;:::-;;:::i;21129:28::-;;;;;;;;;;;;;;;;37350:130;;;;;;;;;;-1:-1:-1;37350:130:0;;;;;:::i;:::-;;:::i;21355:31::-;;;;;;;;;;;;;;;;26329:520;;;;;;;;;;-1:-1:-1;26329:520:0;;;;;:::i;:::-;;:::i;36029:113::-;;;;;;;;;;-1:-1:-1;36029:113:0;;;;;:::i;:::-;;:::i;37629:114::-;;;;;;;;;;-1:-1:-1;37629:114:0;;;;;:::i;:::-;;:::i;22268:29::-;;;;;;;;;;-1:-1:-1;22268:29:0;;;;-1:-1:-1;;;;;22268:29:0;;;21817:40;;;;;;;;;;-1:-1:-1;21817:40:0;;;;;;;;;;;20603:43;;;;;;;;;;-1:-1:-1;20603:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;36916:106;;;;;;;;;;-1:-1:-1;36916:106:0;;;;;:::i;:::-;;:::i;21223:34::-;;;;;;;;;;;;;;;;24276:215;;;;;;;;;;-1:-1:-1;24276:215:0;;;;;:::i;:::-;;:::i;17634:148::-;;;;;;;;;;;;;:::i;37492:125::-;;;;;;;;;;-1:-1:-1;37492:125:0;;;;;:::i;:::-;;:::i;35932:89::-;;;;;;;;;;-1:-1:-1;35932:89:0;;;;;:::i;:::-;;:::i;21910:40::-;;;;;;;;;;;;;;;;16992:79;;;;;;;;;;-1:-1:-1;17030:7:0;17057:6;-1:-1:-1;;;;;17057:6:0;16992:79;;37034:90;;;;;;;;;;-1:-1:-1;37034:90:0;;;;;:::i;:::-;;:::i;36534:188::-;;;;;;;;;;-1:-1:-1;36534:188:0;;;;;:::i;:::-;;:::i;23981:87::-;;;;;;;;;;;;;:::i;21684:33::-;;;;;;;;;;;;;;;;25803:400;;;;;;;;;;-1:-1:-1;25803:400:0;;;;;:::i;:::-;;:::i;24499:213::-;;;;;;;;;;-1:-1:-1;24499:213:0;;;;;:::i;:::-;;:::i;21958:43::-;;;;;;;;;;;;;;;;22033:33;;;;;;;;;;-1:-1:-1;22033:33:0;;;;;;;;36336:91;;;;;;;;;;-1:-1:-1;36336:91:0;;;;;:::i;:::-;;:::i;36439:83::-;;;;;;;;;;-1:-1:-1;36439:83:0;;;;;:::i;:::-;;:::i;36154:170::-;;;;;;;;;;-1:-1:-1;36154:170:0;;;;;:::i;:::-;;:::i;26211:110::-;;;;;;;;;;-1:-1:-1;26211:110:0;;;;;:::i;:::-;-1:-1:-1;;;;;26293:20:0;26269:4;26293:20;;;:11;:20;;;;;;;;;26211:110;24720:184;;;;;;;;;;-1:-1:-1;24720:184:0;;;;;:::i;:::-;-1:-1:-1;;;;;24869:18:0;;;24837:7;24869:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;24720:184;21726:30;;;;;;;;;;-1:-1:-1;21726:30:0;;;;;;;;22161:47;;;;;;;;;;;;;;;;37240:98;;;;;;;;;;-1:-1:-1;37240:98:0;;;;;:::i;:::-;;:::i;36730:174::-;;;;;;;;;;-1:-1:-1;36730:174:0;;;;;:::i;:::-;;:::i;27233:537::-;;;;;;;;;;-1:-1:-1;27233:537:0;;;;;:::i;:::-;;:::i;17937:281::-;;;;;;;;;;-1:-1:-1;17937:281:0;;;;;:::i;:::-;;:::i;37756:103::-;;;;;;;;;;-1:-1:-1;37756:103:0;;;;;:::i;:::-;;:::i;27778:491::-;;;;;;;;;;-1:-1:-1;27778:491:0;;;;;:::i;:::-;;:::i;28656:2036::-;-1:-1:-1;;;;;28789:20:0;;28781:70;;;;-1:-1:-1;;;28781:70:0;;5344:2:1;28781:70:0;;;5326:21:1;5383:2;5363:18;;;5356:30;5422:34;5402:18;;;5395:62;-1:-1:-1;;;5473:18:1;;;5466:35;5518:19;;28781:70:0;5142:401:1;28781:70:0;28879:1;28870:6;:10;28862:64;;;;-1:-1:-1;;;28862:64:0;;5750:2:1;28862:64:0;;;5732:21:1;5789:2;5769:18;;;5762:30;5828:34;5808:18;;;5801:62;-1:-1:-1;;;5879:18:1;;;5872:39;5928:19;;28862:64:0;5548:405:1;28862:64:0;28955:11;;28945:6;:21;;:49;;;-1:-1:-1;;;;;;28970:24:0;;;;;;:16;:24;;;;;;;;28945:49;28937:84;;;;-1:-1:-1;;;28937:84:0;;6160:2:1;28937:84:0;;;6142:21:1;6199:2;6179:18;;;6172:30;-1:-1:-1;;;6218:18:1;;;6211:52;6280:18;;28937:84:0;5958:346:1;28937:84:0;-1:-1:-1;;;;;29041:18:0;;;;;;:10;:18;;;;;;;;29040:19;29032:53;;;;-1:-1:-1;;;29032:53:0;;6511:2:1;29032:53:0;;;6493:21:1;6550:2;6530:18;;;6523:30;-1:-1:-1;;;6569:18:1;;;6562:52;6631:18;;29032:53:0;6309:346:1;29032:53:0;29114:15;;29104:6;:25;;:51;;;-1:-1:-1;;;;;;29133:22:0;;;;;;:14;:22;;;;;;;;29104:51;29096:85;;;;-1:-1:-1;;;29096:85:0;;6862:2:1;29096:85:0;;;6844:21:1;6901:2;6881:18;;;6874:30;-1:-1:-1;;;6920:18:1;;;6913:52;6982:18;;29096:85:0;6660:346:1;29096:85:0;29200:13;;;;;;;;:32;;;29226:6;-1:-1:-1;;;;;29217:15:0;:7;17030;17057:6;-1:-1:-1;;;;;17057:6:0;;16992:79;29217:7;-1:-1:-1;;;;;29217:15:0;;29200:32;29192:62;;;;-1:-1:-1;;;29192:62:0;;7213:2:1;29192:62:0;;;7195:21:1;7252:2;7232:18;;;7225:30;-1:-1:-1;;;7271:18:1;;;7264:48;7329:18;;29192:62:0;7011:342:1;29192:62:0;29313:6;29288:22;29345:20;:18;:20::i;:::-;29382:15;;29330:35;;-1:-1:-1;29382:15:0;;29378:231;;29438:48;29469:16;:6;29480:4;29469:10;:16::i;:::-;-1:-1:-1;;;;;29438:26:0;;;;;;:18;:26;;;;;;;:30;:48::i;:::-;-1:-1:-1;;;;;29409:26:0;;;;;;:18;:26;;;;;:77;29529:51;29563:16;:6;29574:4;29563:10;:16::i;:::-;-1:-1:-1;;;;;29529:29:0;;;;;;:18;:29;;;;;;;:33;:51::i;:::-;-1:-1:-1;;;;;29497:29:0;;;;;;;:18;:29;;;;;:83;;;;-1:-1:-1;;;;28656:2036:0:o;29378:231::-;29629:20;29650:24;29668:4;29650:9;:24::i;:::-;29728:19;;29772:16;;29629:45;;-1:-1:-1;29712:35:0;;;;29772:16;;;;;29771:17;:40;;;;;29792:19;29771:40;:67;;;;-1:-1:-1;29825:13:0;;-1:-1:-1;;;;;29815:23:0;;;29825:13;;29815:23;;29771:67;:92;;;;-1:-1:-1;29842:21:0;;;;;;;29771:92;29768:152;;;29880:28;29895:12;29880:14;:28::i;:::-;-1:-1:-1;;;;;29936:17:0;;;;;;:9;:17;;;;;;;;29935:18;:43;;;;-1:-1:-1;;;;;;29958:20:0;;;;;;:9;:20;;;;;;;;29957:21;29935:43;:64;;;;-1:-1:-1;29983:16:0;;;;;;;29982:17;29935:64;29932:142;;;30032:30;30043:6;30050;30057:4;30032:10;:30::i;:::-;30015:47;;29932:142;30144:48;30175:16;:6;30186:4;30175:10;:16::i;:::-;-1:-1:-1;;;;;30144:26:0;;;;;;:18;:26;;;;;;;:30;:48::i;:::-;-1:-1:-1;;;;;30115:26:0;;;;;;:18;:26;;;;;:77;30235:59;30269:24;:14;30288:4;30269:18;:24::i;:::-;-1:-1:-1;;;;;30235:29:0;;;;;;:18;:29;;;;;;;:33;:59::i;:::-;-1:-1:-1;;;;;30203:29:0;;;;;;;:18;:29;;;;;;;;:91;;;;30383:19;;;;;:11;:19;;;;;;;30379:109;;;-1:-1:-1;;;;;30443:21:0;;;;;;:13;:21;;;;;;:33;;30469:6;30443:25;:33::i;:::-;-1:-1:-1;;;;;30419:21:0;;;;;;:13;:21;;;;;:57;30379:109;-1:-1:-1;;;;;30502:22:0;;;;;;:11;:22;;;;;;;;30498:126;;;-1:-1:-1;;;;;30568:24:0;;;;;;:13;:24;;;;;;:44;;30597:14;30568:28;:44::i;:::-;-1:-1:-1;;;;;30541:24:0;;;;;;:13;:24;;;;;:71;30498:126;30658:9;-1:-1:-1;;;;;30641:43:0;30650:6;-1:-1:-1;;;;;30641:43:0;-1:-1:-1;;;;;;;;;;;30669:14:0;30641:43;;;;2431:25:1;;2419:2;2404:18;;2285:177;30641:43:0;;;;;;;;28768:1924;;;;28656:2036;;;:::o;23890:83::-;23927:13;23960:5;23953:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23890:83;:::o;24912:193::-;25014:4;25036:39;701:10;25059:7;25068:6;25036:8;:39::i;:::-;-1:-1:-1;25093:4:0;24912:193;;;;;:::o;25113:368::-;25253:4;25270:34;25280:6;25287:9;25297:6;25270:9;:34::i;:::-;25332:119;25341:6;701:10;25361:89;25400:6;25361:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25361:19:0;;;;;;:11;:19;;;;;;;;701:10;25361:33;;;;;;;;;;:37;:89::i;:::-;25332:8;:119::i;:::-;-1:-1:-1;25469:4:0;25113:368;;;;;:::o;26857:::-;26960:7;27027:16;;27007;:36;;26985:128;;;;-1:-1:-1;;;26985:128:0;;7945:2:1;26985:128:0;;;7927:21:1;7984:2;7964:18;;;7957:30;8023:34;8003:18;;;7996:62;-1:-1:-1;;;8074:18:1;;;8067:40;8124:19;;26985:128:0;7743:406:1;26985:128:0;27124:19;27146:20;:18;:20::i;:::-;27124:42;-1:-1:-1;27184:33:0;:16;27124:42;27184:20;:33::i;:::-;27177:40;26857:368;-1:-1:-1;;;26857:368:0:o;37136:95::-;17204:6;;-1:-1:-1;;;;;17204:6:0;701:10;17204:22;17196:67;;;;-1:-1:-1;;;17196:67:0;;;;;;;:::i;:::-;37204:13:::1;:19:::0;37136:95::o;25495:300::-;701:10;25610:4;25704:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;25704:34:0;;;;;;;;;;25610:4;;25632:133;;25682:7;;25704:50;;25743:10;25704:38;:50::i;37350:130::-;17204:6;;-1:-1:-1;;;;;17204:6:0;701:10;17204:22;17196:67;;;;-1:-1:-1;;;17196:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37439:24:0;;;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;37439:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;37350:130::o;26329:520::-;26451:7;26499:11;;26484;:26;;26476:70;;;;-1:-1:-1;;;26476:70:0;;8717:2:1;26476:70:0;;;8699:21:1;8756:2;8736:18;;;8729:30;8795:33;8775:18;;;8768:61;8846:18;;26476:70:0;8515:355:1;26476:70:0;26562:17;26557:285;;26603:37;26619:20;:18;:20::i;:::-;26603:11;;:15;:37::i;:::-;26596:44;;;;26557:285;26697:133;26791:20;:18;:20::i;:::-;26697:67;26713:50;26747:11;;26742:2;:16;;;;:::i;:::-;:20;;26761:1;26742:20;:::i;:::-;26729:7;;26713:24;;:11;;:15;:24::i;:::-;:28;;:50::i;:::-;26697:11;;:15;:67::i;:::-;:71;;:133::i;36029:113::-;17204:6;;-1:-1:-1;;;;;17204:6:0;701:10;17204:22;17196:67;;;;-1:-1:-1;;;17196:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36108:18:0;;;::::1;;::::0;;;:9:::1;:18;::::0;;;;:26;;-1:-1:-1;;36108:26:0::1;::::0;::::1;;::::0;;;::::1;::::0;;36029:113::o;37629:114::-;17204:6;;-1:-1:-1;;;;;17204:6:0;701:10;17204:22;17196:67;;;;-1:-1:-1;;;17196:67:0;;;;;;;:::i;:::-;37707:19:::1;:28:::0;37629:114::o;36916:106::-;17204:6;;-1:-1:-1;;;;;17204:6:0;701:10;17204:22;17196:67;;;;-1:-1:-1;;;17196:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36993:15:0;;;::::1;;::::0;;;:10:::1;:15;::::0;;;;:21;;-1:-1:-1;;36993:21:0::1;::::0;::::1;;::::0;;;::::1;::::0;;36916:106::o;24276:215::-;-1:-1:-1;;;;;24366:20:0;;24342:7;24366:20;;;:11;:20;;;;;;;;24362:55;;;-1:-1:-1;;;;;;24395:22:0;;;;;:13;:22;;;;;;;24276:215::o;24362:55::-;-1:-1:-1;;;;;24455:27:0;;;;;;:18;:27;;;;;;24435:48;;:19;:48::i;17634:148::-;17204:6;;-1:-1:-1;;;;;17204:6:0;701:10;17204:22;17196:67;;;;-1:-1:-1;;;17196:67:0;;;;;;;:::i;:::-;17741:1:::1;17725:6:::0;;17704:40:::1;::::0;-1:-1:-1;;;;;17725:6:0;;::::1;::::0;17704:40:::1;::::0;17741:1;;17704:40:::1;17772:1;17755:19:::0;;-1:-1:-1;;;;;;17755:19:0::1;::::0;;17634:148::o;37492:125::-;17204:6;;-1:-1:-1;;;;;17204:6:0;701:10;17204:22;17196:67;;;;-1:-1:-1;;;17196:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37578:22:0;;;::::1;;::::0;;;:14:::1;:22;::::0;;;;:31;;-1:-1:-1;;37578:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;37492:125::o;35932:89::-;17204:6;;-1:-1:-1;;;;;17204:6:0;701:10;17204:22;17196:67;;;;-1:-1:-1;;;17196:67:0;;;;;;;:::i;:::-;35993:13:::1;:20:::0;;-1:-1:-1;;;;;;35993:20:0::1;-1:-1:-1::0;;;;;35993:20:0;;;::::1;::::0;;;::::1;::::0;;35932:89::o;37034:90::-;17204:6;;-1:-1:-1;;;;;17204:6:0;701:10;17204:22;17196:67;;;;-1:-1:-1;;;17196:67:0;;;;;;;:::i;:::-;37096:13:::1;:20:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;37096:20:0;;::::1;::::0;;;::::1;::::0;;37034:90::o;36534:188::-;17204:6;;-1:-1:-1;;;;;17204:6:0;701:10;17204:22;17196:67;;;;-1:-1:-1;;;17196:67:0;;;;;;;:::i;:::-;36636:15:::1;:33:::0;;-1:-1:-1;;;;;36636:33:0;;::::1;-1:-1:-1::0;;;;;;36636:33:0;;::::1;;::::0;;;36680:13:::1;:31:::0;;;;;::::1;::::0;::::1;;::::0;;36534:188::o;23981:87::-;24020:13;24053:7;24046:14;;;;;:::i;25803:400::-;25923:4;25945:228;701:10;25995:7;26017:145;26074:15;26017:145;;;;;;;;;;;;;;;;;701:10;26017:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;26017:34:0;;;;;;;;;;;;:38;:145::i;24499:213::-;24621:4;24642:40;701:10;24665:9;24675:6;24642:9;:40::i;36336:91::-;17204:6;;-1:-1:-1;;;;;17204:6:0;701:10;17204:22;17196:67;;;;-1:-1:-1;;;17196:67:0;;;;;;;:::i;:::-;36400:11:::1;:19:::0;;-1:-1:-1;;36400:19:0::1;::::0;::::1;;::::0;;;::::1;::::0;;36336:91::o;36439:83::-;17204:6;;-1:-1:-1;;;;;17204:6:0;701:10;17204:22;17196:67;;;;-1:-1:-1;;;17196:67:0;;;;;;;:::i;:::-;36501:7:::1;:13:::0;36439:83::o;36154:170::-;17204:6;;-1:-1:-1;;;;;17204:6:0;701:10;17204:22;17196:67;;;;-1:-1:-1;;;17196:67:0;;;;;;;:::i;:::-;36232:21:::1;:31:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;36232:31:0;;::::1;;::::0;;36279:37:::1;::::0;::::1;::::0;::::1;::::0;36256:7;2024:14:1;2017:22;1999:41;;1987:2;1972:18;;1859:187;36279:37:0::1;;;;;;;;36154:170:::0;:::o;37240:98::-;17204:6;;-1:-1:-1;;;;;17204:6:0;701:10;17204:22;17196:67;;;;-1:-1:-1;;;17196:67:0;;;;;;;:::i;:::-;37310:11:::1;:20:::0;37240:98::o;36730:174::-;17204:6;;-1:-1:-1;;;;;17204:6:0;701:10;17204:22;17196:67;;;;-1:-1:-1;;;17196:67:0;;;;;;;:::i;:::-;36833:13:::1;:28:::0;;;;36872:11:::1;:24:::0;36730:174::o;27233:537::-;17204:6;;-1:-1:-1;;;;;17204:6:0;701:10;17204:22;17196:67;;;;-1:-1:-1;;;17196:67:0;;;;;;;:::i;:::-;27347:15:::1;::::0;-1:-1:-1;;;;;27328:35:0;;::::1;27347:15:::0;::::1;27328:35;;27306:126;;;::::0;-1:-1:-1;;;27306:126:0;;10451:2:1;27306:126:0::1;::::0;::::1;10433:21:1::0;10490:2;10470:18;;;10463:30;10529:34;10509:18;;;10502:62;-1:-1:-1;;;10580:18:1;;;10573:39;10629:19;;27306:126:0::1;10249:405:1::0;27306:126:0::1;-1:-1:-1::0;;;;;27452:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;27451:21;27443:68;;;::::0;-1:-1:-1;;;27443:68:0;;10861:2:1;27443:68:0::1;::::0;::::1;10843:21:1::0;10900:2;10880:18;;;10873:30;10939:34;10919:18;;;10912:62;-1:-1:-1;;;10990:18:1;;;10983:32;11032:19;;27443:68:0::1;10659:398:1::0;27443:68:0::1;-1:-1:-1::0;;;;;27526:27:0;::::1;27556:1;27526:27:::0;;;:18:::1;:27;::::0;;;;;:31;27522:169:::1;;-1:-1:-1::0;;;;;27637:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;27599:80:::1;::::0;:19:::1;:80::i;:::-;-1:-1:-1::0;;;;;27574:22:0;::::1;;::::0;;;:13:::1;:22;::::0;;;;:105;27522:169:::1;-1:-1:-1::0;;;;;27701:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;27701:27:0::1;27724:4;27701:27:::0;;::::1;::::0;;;27739:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;27739:23:0::1;::::0;;::::1;::::0;;27233:537::o;17937:281::-;17204:6;;-1:-1:-1;;;;;17204:6:0;701:10;17204:22;17196:67;;;;-1:-1:-1;;;17196:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18040:22:0;::::1;18018:110;;;::::0;-1:-1:-1;;;18018:110:0;;11264:2:1;18018:110:0::1;::::0;::::1;11246:21:1::0;11303:2;11283:18;;;11276:30;11342:34;11322:18;;;11315:62;-1:-1:-1;;;11393:18:1;;;11386:36;11439:19;;18018:110:0::1;11062:402:1::0;18018:110:0::1;18165:6;::::0;;18144:38:::1;::::0;-1:-1:-1;;;;;18144:38:0;;::::1;::::0;18165:6;::::1;::::0;18144:38:::1;::::0;::::1;18193:6;:17:::0;;-1:-1:-1;;;;;;18193:17:0::1;-1:-1:-1::0;;;;;18193:17:0;;;::::1;::::0;;;::::1;::::0;;17937:281::o;37756:103::-;17204:6;;-1:-1:-1;;;;;17204:6:0;701:10;17204:22;17196:67;;;;-1:-1:-1;;;17196:67:0;;;;;;;:::i;:::-;37827:15:::1;:24:::0;;-1:-1:-1;;37827:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;37756:103::o;27778:491::-;17204:6;;-1:-1:-1;;;;;17204:6:0;701:10;17204:22;17196:67;;;;-1:-1:-1;;;17196:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27859:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;27851:67;;;::::0;-1:-1:-1;;;27851:67:0;;11671:2:1;27851:67:0::1;::::0;::::1;11653:21:1::0;11710:2;11690:18;;;11683:30;11749:34;11729:18;;;11722:62;-1:-1:-1;;;11800:18:1;;;11793:32;11842:19;;27851:67:0::1;11469:398:1::0;27851:67:0::1;27934:9;27929:333;27953:9;:16:::0;27949:20;::::1;27929:333;;;28011:7;-1:-1:-1::0;;;;;27995:23:0::1;:9;28005:1;27995:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;27995:12:0::1;:23;27991:260;;;28054:9;28064:16:::0;;:20:::1;::::0;28083:1:::1;::::0;28064:20:::1;:::i;:::-;28054:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;28039:9:::1;:12:::0;;-1:-1:-1;;;;;28054:31:0;;::::1;::::0;28049:1;;28039:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;28039:46:0::1;-1:-1:-1::0;;;;;28039:46:0;;::::1;;::::0;;28104:22;;::::1;::::0;;:13:::1;:22:::0;;;;;;:26;;;28149:11:::1;:20:::0;;;;:28;;-1:-1:-1;;28149:28:0::1;::::0;;28196:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;28196:15:0;;;;;-1:-1:-1;;;;;;28196:15:0::1;::::0;;;;;27929:333:::1;27778:491:::0;:::o;27991:260::-:1;27971:3:::0;::::1;::::0;::::1;:::i;:::-;;;;27929:333;;;;27778:491:::0;:::o;32861:808::-;32960:16;;33009:11;;32913:7;;32960:16;32913:7;33031:458;33055:9;:16;33051:20;;33031:458;;;33150:16;33115:18;:32;33134:9;33144:1;33134:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;33134:12:0;33115:32;;;;;;;;;;;;;:51;;:113;;;33217:11;33187:13;:27;33201:9;33211:1;33201:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;33201:12:0;33187:27;;;;;;;;;;;;;:41;33115:113;33093:191;;;33272:11;;33251:16;;:33;;:20;:33::i;:::-;33244:40;;;;;32861:808;:::o;33093:191::-;33318:86;33357:18;:32;33376:9;33386:1;33376:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;33376:12:0;33357:32;;;;;;;;;;;;;33318:16;;:20;:86::i;:::-;33299:105;;33433:44;33449:13;:27;33463:9;33473:1;33463:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;33463:12:0;33449:27;;;;;;;;;;;;;33433:11;;:15;:44::i;:::-;33419:58;-1:-1:-1;33073:3:0;;;;:::i;:::-;;;;33031:458;;;-1:-1:-1;33543:11:0;;33522:16;;:33;;:20;:33::i;:::-;33503:16;:52;33499:111;;;33598:11;;33577:16;;:33;;:20;:33::i;:::-;33570:40;;;;32861:808;:::o;33499:111::-;33628:33;:16;33649:11;33628:20;:33::i;6022:471::-;6080:7;6325:6;6321:47;;-1:-1:-1;6355:1:0;6348:8;;6321:47;6380:9;6392:5;6396:1;6392;:5;:::i;:::-;6380:17;-1:-1:-1;6425:1:0;6416:5;6420:1;6380:17;6416:5;:::i;:::-;:10;6408:56;;;;-1:-1:-1;;;6408:56:0;;12830:2:1;6408:56:0;;;12812:21:1;12869:2;12849:18;;;12842:30;12908:34;12888:18;;;12881:62;-1:-1:-1;;;12959:18:1;;;12952:31;13000:19;;6408:56:0;12628:397:1;5098:136:0;5156:7;5183:43;5187:1;5190;5183:43;;;;;;;;;;;;;;;;;:3;:43::i;4634:181::-;4692:7;;4724:5;4728:1;4724;:5;:::i;:::-;4712:17;;4753:1;4748;:6;;4740:46;;;;-1:-1:-1;;;4740:46:0;;13232:2:1;4740:46:0;;;13214:21:1;13271:2;13251:18;;;13244:30;13310:29;13290:18;;;13283:57;13357:18;;4740:46:0;13030:351:1;33691:1097:0;22493:16;:23;;-1:-1:-1;;22493:23:0;;;;;33803:11:::1;::::0;33780:34;::::1;33777:101;;;-1:-1:-1::0;33854:11:0::1;::::0;33777:101:::1;33939:12;33954:27;:20:::0;33979:1:::1;33954:24;:27::i;:::-;33939:42:::0;-1:-1:-1;33992:17:0::1;34012:30;:20:::0;33939:42;34012:24:::1;:30::i;:::-;33992:50:::0;-1:-1:-1;34345:21:0::1;34411:22;34428:4:::0;34411:16:::1;:22::i;:::-;34564:18;34585:41;:21;34611:14:::0;34585:25:::1;:41::i;:::-;34564:62;;34676:35;34689:9;34700:10;34676:12;:35::i;:::-;34737:43;::::0;;13588:25:1;;;13644:2;13629:18;;13622:34;;;13672:18;;;13665:34;;;34737:43:0::1;::::0;13576:2:1;13561:18;34737:43:0::1;;;;;;;-1:-1:-1::0;;22539:16:0;:24;;-1:-1:-1;;22539:24:0;;;-1:-1:-1;;;33691:1097:0:o;30704:2149::-;30887:7;;30788;;30833:6;;30887:12;30884:290;;30915:14;30932:46;30961:11;;30975:1;30961:15;;;;:::i;:::-;30956:21;;:2;:21;:::i;:::-;30943:7;;30932:19;;:6;;:10;:19::i;:46::-;30915:63;-1:-1:-1;31010:26:0;:14;30915:63;31010:18;:26::i;:::-;30993:43;-1:-1:-1;31070:38:0;31091:16;:6;31102:4;31091:10;:16::i;:::-;31070;;;:20;:38::i;:::-;31051:16;:57;31138:12;;:24;;31155:6;31138:16;:24::i;:::-;31123:12;:39;-1:-1:-1;30884:290:0;31197:13;;:18;31194:592;;31231:20;31254:52;31289:11;;31303:1;31289:15;;;;:::i;:::-;31284:21;;:2;:21;:::i;:::-;31265:13;;31254:25;;:6;;:10;:25::i;:52::-;31231:75;-1:-1:-1;31338:32:0;:14;31231:75;31338:18;:32::i;:::-;31321:49;-1:-1:-1;31421:61:0;31459:22;:12;31476:4;31459:16;:22::i;:::-;31448:4;31421:33;;;;:18;:33;;;;;;;:37;:61::i;:::-;31412:4;31385:33;;;;:18;:33;;;;;;;;:97;;;;31500:11;:26;;;;;;31497:142;;;31599:4;31577:28;;;;:13;:28;;;;;;:46;;31610:12;31577:32;:46::i;:::-;31568:4;31546:28;;;;:13;:28;;;;;:77;31497:142;31674:18;;:36;;31697:12;31674:22;:36::i;:::-;31653:18;:57;31730:44;;2431:25:1;;;31755:4:0;;-1:-1:-1;;;;;31730:44:0;;;-1:-1:-1;;;;;;;;;;;31730:44:0;2419:2:1;2404:18;31730:44:0;;;;;;;31216:570;31194:592;31801:13;;:18;31798:507;;31835:15;31853:52;31888:11;;31902:1;31888:15;;;;:::i;:::-;31883:21;;:2;:21;:::i;:::-;31864:13;;31853:25;;:6;;:10;:25::i;:52::-;31835:70;-1:-1:-1;31937:27:0;:14;31835:70;31937:18;:27::i;:::-;31920:44;-1:-1:-1;32017:58:0;32057:17;:7;32069:4;32057:11;:17::i;:::-;32036:15;;-1:-1:-1;;;;;32036:15:0;32017:35;;;;:18;:35;;;;;;;:39;:58::i;:::-;31998:15;;;-1:-1:-1;;;;;31998:15:0;;;31979:35;;;;:18;:35;;;;;;;;:96;;;;32105:15;;;;;32093:28;;:11;:28;;;;;;;32090:143;;;32188:15;;-1:-1:-1;;;;;32188:15:0;32174:30;;;;:13;:30;;;;;;:43;;32209:7;32174:34;:43::i;:::-;32155:15;;-1:-1:-1;;;;;32155:15:0;32141:30;;;;:13;:30;;;;;:76;32090:143;32269:15;;32252:41;;2431:25:1;;;-1:-1:-1;;;;;32269:15:0;;;;32252:41;;;-1:-1:-1;;;;;;;;;;;32252:41:0;2419:2:1;2404:18;32252:41:0;;;;;;;31820:485;31798:507;32320:11;;:16;32317:491;;32352:15;32370:50;32403:11;;32417:1;32403:15;;;;:::i;:::-;32398:21;;:2;:21;:::i;:::-;32381:11;;32370:23;;:6;;:10;:23::i;:50::-;32352:68;-1:-1:-1;32452:27:0;:14;32352:68;32452:18;:27::i;:::-;32435:44;-1:-1:-1;32530:56:0;32568:17;:7;32580:4;32568:11;:17::i;:::-;32549:13;;-1:-1:-1;;;;;32549:13:0;32530:33;;;;:18;:33;;;;;;;:37;:56::i;:::-;32513:13;;;-1:-1:-1;;;;;32513:13:0;;;32494:33;;;;:18;:33;;;;;;;;:92;;;;32616:13;;;;;32604:26;;:11;:26;;;;;;;32601:137;;;32695:13;;-1:-1:-1;;;;;32695:13:0;32681:28;;;;:13;:28;;;;;;:41;;32714:7;32681:32;:41::i;:::-;32664:13;;-1:-1:-1;;;;;32664:13:0;32650:28;;;;:13;:28;;;;;:72;32601:137;32774:13;;32757:39;;2431:25:1;;;-1:-1:-1;;;;;32774:13:0;;;;32757:39;;;-1:-1:-1;;;;;;;;;;;32757:39:0;2419:2:1;2404:18;32757:39:0;;;;;;;32337:471;32317:491;32831:14;30704:2149;-1:-1:-1;;;;30704:2149:0:o;28277:371::-;-1:-1:-1;;;;;28404:19:0;;28396:68;;;;-1:-1:-1;;;28396:68:0;;13912:2:1;28396:68:0;;;13894:21:1;13951:2;13931:18;;;13924:30;13990:34;13970:18;;;13963:62;-1:-1:-1;;;14041:18:1;;;14034:34;14085:19;;28396:68:0;13710:400:1;28396:68:0;-1:-1:-1;;;;;28483:21:0;;28475:68;;;;-1:-1:-1;;;28475:68:0;;14317:2:1;28475:68:0;;;14299:21:1;14356:2;14336:18;;;14329:30;14395:34;14375:18;;;14368:62;-1:-1:-1;;;14446:18:1;;;14439:32;14488:19;;28475:68:0;14115:398:1;28475:68:0;-1:-1:-1;;;;;28556:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;28608:32;;2431:25:1;;;28608:32:0;;2404:18:1;28608:32:0;;;;;;;28277:371;;;:::o;5537:226::-;5657:7;5693:12;5685:6;;;;5677:29;;;;-1:-1:-1;;;5677:29:0;;;;;;;;:::i;:::-;-1:-1:-1;5717:9:0;5729:5;5733:1;5729;:5;:::i;:::-;5717:17;5537:226;-1:-1:-1;;;;;5537:226:0:o;6969:132::-;7027:7;7054:39;7058:1;7061;7054:39;;;;;;;;;;;;;;;;;:3;:39::i;35331:589::-;35481:16;;;35495:1;35481:16;;;;;;;;35457:21;;35481:16;;;;;;;;;;-1:-1:-1;35481:16:0;35457:40;;35526:4;35508;35513:1;35508:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;35508:23:0;;;:7;;;;;;;;;;:23;;;;35552:15;;:22;;;-1:-1:-1;;;35552:22:0;;;;:15;;;;;:20;;:22;;;;;35508:7;;35552:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35542:4;35547:1;35542:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;35542:32:0;;;:7;;;;;;;;;:32;35619:15;;35587:62;;35604:4;;35619:15;35637:11;35587:8;:62::i;:::-;35688:15;;:224;;-1:-1:-1;;;35688:224:0;;-1:-1:-1;;;;;35688:15:0;;;;:66;;:224;;35769:11;;35688:15;;35839:4;;35866;;35886:15;;35688:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35386:534;35331:589;:::o;34796:519::-;34976:15;;34944:62;;34961:4;;-1:-1:-1;;;;;34976:15:0;34994:11;34944:8;:62::i;:::-;35049:15;;:258;;-1:-1:-1;;;35049:258:0;;35121:4;35049:258;;;16232:34:1;;;16282:18;;;16275:34;;;35049:15:0;16325:18:1;;;16318:34;;;16368:18;;;16361:34;16411:19;;;16404:44;35281:15:0;16464:19:1;;;16457:35;-1:-1:-1;;;;;35049:15:0;;;;:31;;35088:9;;16166:19:1;;35049:258:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;34796:519;;:::o;7597:312::-;7717:7;7752:12;7745:5;7737:28;;;;-1:-1:-1;;;7737:28:0;;;;;;;;:::i;:::-;-1:-1:-1;7776:9:0;7788:5;7792:1;7788;:5;:::i;14:127:1:-;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:128;186:3;217:1;213:6;210:1;207:13;204:39;;;223:18;;:::i;:::-;-1:-1:-1;259:9:1;;146:128::o;628:168::-;668:7;734:1;730;726:6;722:14;719:1;716:21;711:1;704:9;697:17;693:45;690:71;;;741:18;;:::i;:::-;-1:-1:-1;781:9:1;;628:168::o;801:597::-;913:4;942:2;971;960:9;953:21;1003:6;997:13;1046:6;1041:2;1030:9;1026:18;1019:34;1071:1;1081:140;1095:6;1092:1;1089:13;1081:140;;;1190:14;;;1186:23;;1180:30;1156:17;;;1175:2;1152:26;1145:66;1110:10;;1081:140;;;1239:6;1236:1;1233:13;1230:91;;;1309:1;1304:2;1295:6;1284:9;1280:22;1276:31;1269:42;1230:91;-1:-1:-1;1382:2:1;1361:15;-1:-1:-1;;1357:29:1;1342:45;;;;1389:2;1338:54;;801:597;-1:-1:-1;;;801:597:1:o;1403:131::-;-1:-1:-1;;;;;1478:31:1;;1468:42;;1458:70;;1524:1;1521;1514:12;1458:70;1403:131;:::o;1539:315::-;1607:6;1615;1668:2;1656:9;1647:7;1643:23;1639:32;1636:52;;;1684:1;1681;1674:12;1636:52;1723:9;1710:23;1742:31;1767:5;1742:31;:::i;:::-;1792:5;1844:2;1829:18;;;;1816:32;;-1:-1:-1;;;1539:315:1:o;2467:456::-;2544:6;2552;2560;2613:2;2601:9;2592:7;2588:23;2584:32;2581:52;;;2629:1;2626;2619:12;2581:52;2668:9;2655:23;2687:31;2712:5;2687:31;:::i;:::-;2737:5;-1:-1:-1;2794:2:1;2779:18;;2766:32;2807:33;2766:32;2807:33;:::i;:::-;2467:456;;2859:7;;-1:-1:-1;;;2913:2:1;2898:18;;;;2885:32;;2467:456::o;2928:180::-;2987:6;3040:2;3028:9;3019:7;3015:23;3011:32;3008:52;;;3056:1;3053;3046:12;3008:52;-1:-1:-1;3079:23:1;;2928:180;-1:-1:-1;2928:180:1:o;3113:160::-;3178:20;;3234:13;;3227:21;3217:32;;3207:60;;3263:1;3260;3253:12;3207:60;3113:160;;;:::o;3278:315::-;3343:6;3351;3404:2;3392:9;3383:7;3379:23;3375:32;3372:52;;;3420:1;3417;3410:12;3372:52;3459:9;3446:23;3478:31;3503:5;3478:31;:::i;:::-;3528:5;-1:-1:-1;3552:35:1;3583:2;3568:18;;3552:35;:::i;:::-;3542:45;;3278:315;;;;;:::o;3598:248::-;3663:6;3671;3724:2;3712:9;3703:7;3699:23;3695:32;3692:52;;;3740:1;3737;3730:12;3692:52;3776:9;3763:23;3753:33;;3805:35;3836:2;3825:9;3821:18;3805:35;:::i;4059:247::-;4118:6;4171:2;4159:9;4150:7;4146:23;4142:32;4139:52;;;4187:1;4184;4177:12;4139:52;4226:9;4213:23;4245:31;4270:5;4245:31;:::i;4311:180::-;4367:6;4420:2;4408:9;4399:7;4395:23;4391:32;4388:52;;;4436:1;4433;4426:12;4388:52;4459:26;4475:9;4459:26;:::i;4496:388::-;4564:6;4572;4625:2;4613:9;4604:7;4600:23;4596:32;4593:52;;;4641:1;4638;4631:12;4593:52;4680:9;4667:23;4699:31;4724:5;4699:31;:::i;:::-;4749:5;-1:-1:-1;4806:2:1;4791:18;;4778:32;4819:33;4778:32;4819:33;:::i;:::-;4871:7;4861:17;;;4496:388;;;;;:::o;4889:248::-;4957:6;4965;5018:2;5006:9;4997:7;4993:23;4989:32;4986:52;;;5034:1;5031;5024:12;4986:52;-1:-1:-1;;5057:23:1;;;5127:2;5112:18;;;5099:32;;-1:-1:-1;4889:248:1:o;7358:380::-;7437:1;7433:12;;;;7480;;;7501:61;;7555:4;7547:6;7543:17;7533:27;;7501:61;7608:2;7600:6;7597:14;7577:18;7574:38;7571:161;;;7654:10;7649:3;7645:20;7642:1;7635:31;7689:4;7686:1;7679:15;7717:4;7714:1;7707:15;7571:161;;7358:380;;;:::o;8154:356::-;8356:2;8338:21;;;8375:18;;;8368:30;8434:34;8429:2;8414:18;;8407:62;8501:2;8486:18;;8154:356::o;8875:422::-;8964:1;9007:5;8964:1;9021:270;9042:7;9032:8;9029:21;9021:270;;;9101:4;9097:1;9093:6;9089:17;9083:4;9080:27;9077:53;;;9110:18;;:::i;:::-;9160:7;9150:8;9146:22;9143:55;;;9180:16;;;;9143:55;9259:22;;;;9219:15;;;;9021:270;;;9025:3;8875:422;;;;;:::o;9302:806::-;9351:5;9381:8;9371:80;;-1:-1:-1;9422:1:1;9436:5;;9371:80;9470:4;9460:76;;-1:-1:-1;9507:1:1;9521:5;;9460:76;9552:4;9570:1;9565:59;;;;9638:1;9633:130;;;;9545:218;;9565:59;9595:1;9586:10;;9609:5;;;9633:130;9670:3;9660:8;9657:17;9654:43;;;9677:18;;:::i;:::-;-1:-1:-1;;9733:1:1;9719:16;;9748:5;;9545:218;;9847:2;9837:8;9834:16;9828:3;9822:4;9819:13;9815:36;9809:2;9799:8;9796:16;9791:2;9785:4;9782:12;9778:35;9775:77;9772:159;;;-1:-1:-1;9884:19:1;;;9916:5;;9772:159;9963:34;9988:8;9982:4;9963:34;:::i;:::-;10033:6;10029:1;10025:6;10021:19;10012:7;10009:32;10006:58;;;10044:18;;:::i;:::-;10082:20;;9302:806;-1:-1:-1;;;9302:806:1:o;10113:131::-;10173:5;10202:36;10229:8;10223:4;10202:36;:::i;11872:127::-;11933:10;11928:3;11924:20;11921:1;11914:31;11964:4;11961:1;11954:15;11988:4;11985:1;11978:15;12004:125;12044:4;12072:1;12069;12066:8;12063:34;;;12077:18;;:::i;:::-;-1:-1:-1;12114:9:1;;12004:125::o;12134:127::-;12195:10;12190:3;12186:20;12183:1;12176:31;12226:4;12223:1;12216:15;12250:4;12247:1;12240:15;12266:135;12305:3;-1:-1:-1;;12326:17:1;;12323:43;;;12346:18;;:::i;:::-;-1:-1:-1;12393:1:1;12382:13;;12266:135::o;12406:217::-;12446:1;12472;12462:132;;12516:10;12511:3;12507:20;12504:1;12497:31;12551:4;12548:1;12541:15;12579:4;12576:1;12569:15;12462:132;-1:-1:-1;12608:9:1;;12406:217::o;14650:251::-;14720:6;14773:2;14761:9;14752:7;14748:23;14744:32;14741:52;;;14789:1;14786;14779:12;14741:52;14821:9;14815:16;14840:31;14865:5;14840:31;:::i;14906:980::-;15168:4;15216:3;15205:9;15201:19;15247:6;15236:9;15229:25;15273:2;15311:6;15306:2;15295:9;15291:18;15284:34;15354:3;15349:2;15338:9;15334:18;15327:31;15378:6;15413;15407:13;15444:6;15436;15429:22;15482:3;15471:9;15467:19;15460:26;;15521:2;15513:6;15509:15;15495:29;;15542:1;15552:195;15566:6;15563:1;15560:13;15552:195;;;15631:13;;-1:-1:-1;;;;;15627:39:1;15615:52;;15722:15;;;;15687:12;;;;15663:1;15581:9;15552:195;;;-1:-1:-1;;;;;;;15803:32:1;;;;15798:2;15783:18;;15776:60;-1:-1:-1;;;15867:3:1;15852:19;15845:35;15764:3;14906:980;-1:-1:-1;;;14906:980:1:o;16503:306::-;16591:6;16599;16607;16660:2;16648:9;16639:7;16635:23;16631:32;16628:52;;;16676:1;16673;16666:12;16628:52;16705:9;16699:16;16689:26;;16755:2;16744:9;16740:18;16734:25;16724:35;;16799:2;16788:9;16784:18;16778:25;16768:35;;16503:306;;;;;:::o

Swarm Source

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