ETH Price: $3,336.13 (-0.22%)

Token

cpyg.network (CPYG)
 

Overview

Max Total Supply

4,996.396989974 CPYG

Holders

113

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
0.160741245 CPYG

Value
$0.00
0x2ca3F2385e7B6cCC8eeFa007cA62bcf85DF8e89E
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:
CPYG

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 2000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

pragma solidity ^0.6.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 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;
    }
}

/**
 * @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() internal {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

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

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

interface 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 Balancer {
    constructor() public {
    }
}

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

    string private _name = "cpyg.network";
    string private _symbol = "CPYG";
    uint8 private _decimals = 9;

    mapping(address => uint256) internal _reflectionBalance;
    mapping(address => uint256) internal _tokenBalance;
    mapping(address => mapping(address => uint256)) internal _allowances;

    uint256 private constant MAX = ~uint256(0);
    uint256 internal _tokenTotal = 5200e9;
    uint256 internal _reflectionTotal = (MAX - (MAX % _tokenTotal));

    mapping(address => bool) isExcludedFromFee;
    mapping(address => bool) internal _isExcluded;
    address[] internal _excluded;
    
    uint256 public _feeDecimal = 2;
    uint256 public _taxFee = 300;
    uint256 public _liquidityFee = 500;

    uint256 public _rebalanceCallerFee = 500;

    uint256 public _taxFeeTotal;
    uint256 public _burnFeeTotal;
    uint256 public _liquidityFeeTotal;

    bool public tradingEnabled = false;
    bool private inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool public rebalanceEnalbed = true;
    address payable balancer2;
    
    uint256 public minTokensBeforeSwap = 100;
    uint256 public minEthBeforeSwap = 100;
    
    uint256 public liquidityAddedAt;

    uint256 public lastRebalance = now ;
    uint256 public rebalanceInterval = 30 minutes;
    
    IUniswapV2Router02 public  uniswapV2Router;
    address public uniswapV2Pair;
    address public balancer;
    
    event TradingEnabled(bool enabled);
    event RewardsDistributed(uint256 amount);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapedTokenForEth(uint256 EthAmount, uint256 TokenAmount);
    event SwapedEthForTokens(uint256 EthAmount, uint256 TokenAmount, uint256 CallerReward, uint256 AmountBurned);

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

    constructor() public {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
         //@dev Create a uniswap pair for this new token
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
            
        uniswapV2Router = _uniswapV2Router;
        
        balancer = address(new Balancer());
        
        isExcludedFromFee[_msgSender()] = true;
        isExcludedFromFee[address(this)] = true;
        
        _isExcluded[uniswapV2Pair] = true;
        _excluded.push(uniswapV2Pair);
        
        _reflectionBalance[_msgSender()] = _reflectionTotal;
        emit Transfer(address(0), _msgSender(), _tokenTotal);
    }

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

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

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

    function totalSupply() public 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 != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D,
            "AERUS: Uniswap router cannot be excluded."
        );
        require(account != address(this), 'AERUS: The contract it self cannot be excluded');
        require(!_isExcluded[account], "AERUS: 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], "AERUS: 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(recipient != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(tradingEnabled || sender == owner() || recipient == owner() ||
                isExcludedFromFee[sender] || isExcludedFromFee[recipient], "Trading is locked before presale.");
        
        //@dev Limit the transfer to 1200 tokens for first 5 minutes
        // require(now > liquidityAddedAt + 7 minutes  || amount <= 1200e9, "You cannot transfer more than 1200 tokens.");
        
        if(!inSwapAndLiquify && sender != uniswapV2Pair && sender != owner()) {
            bool swap = true;
            uint256 contractBalance = address(this).balance;
            //@dev Buy tokens
            if(now > lastRebalance + rebalanceInterval 
                && rebalanceEnalbed 
                && contractBalance >= minEthBeforeSwap){
                buyAndBurnToken(contractBalance);
                swap = false;
            }
            if(swap) {
                uint256 contractTokenBalance = balanceOf(address(this));
                bool overMinTokenBalance = contractTokenBalance >= minTokensBeforeSwap;
                if (overMinTokenBalance && swapAndLiquifyEnabled) {
                    swapTokensForEth();
                }
           }
        }
        
        uint256 transferAmount = amount;
        uint256 rate = _getReflectionRate();

        if(!isExcludedFromFee[sender] && !isExcludedFromFee[recipient] && !inSwapAndLiquify){
            transferAmount = collectFee(sender,amount,rate);
        }

        _reflectionBalance[sender] = _reflectionBalance[sender].sub(amount.mul(rate));
        _reflectionBalance[recipient] = _reflectionBalance[recipient].add(transferAmount.mul(rate));

        //@dev 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);
            emit RewardsDistributed(taxFee);
        }

        //@dev Take liquidity fee
        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));
            _liquidityFeeTotal = _liquidityFeeTotal.add(liquidityFee);
            emit Transfer(account,address(this),liquidityFee);
        }
        
        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 swapTokensForEth() private {
        _swapTokensForEth(address(this));
    }
    
    function _swapTokensForEth(address to) private lockTheSwap {
        uint256 tokenAmount = balanceOf(address(this));

        //@dev 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);

        //@dev Make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            to,
            block.timestamp
        );
    }
    
    function swapEthForTokens(uint256 EthAmount) private {
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = address(this);

        uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: EthAmount}(
                0,
                path,
                address(balancer),
                block.timestamp
            );
    }
   
    function buyAndBurnToken(uint256 contractBalance) private lockTheSwap {
        lastRebalance = now;
        
        //@dev Uniswap doesn't allow for a token to buy itself, so we have to use an external account, which in this case is called the balancer
        uint256 laterBuyback = 0;
        if (balancer2 != address(0)) {
            laterBuyback = contractBalance.mul(7).div(10);
            balancer2.transfer(laterBuyback);
        }
        
        swapEthForTokens(contractBalance.sub(laterBuyback));

        //@dev How much tokens we swaped into
        uint256 swapedTokens = balanceOf(address(balancer));
        uint256 rewardForCaller = swapedTokens.mul(_rebalanceCallerFee).div(10**(_feeDecimal + 2));
        uint256 amountToBurn = swapedTokens.sub(rewardForCaller);
        
        uint256 rate =  _getReflectionRate();

        _reflectionBalance[tx.origin] = _reflectionBalance[tx.origin].add(rewardForCaller.mul(rate));
        _reflectionBalance[address(balancer)] = 0;
        
        _burnFeeTotal = _burnFeeTotal.add(amountToBurn);
        _tokenTotal = _tokenTotal.sub(amountToBurn);
        _reflectionTotal = _reflectionTotal.sub(amountToBurn.mul(rate));

        emit Transfer(address(balancer), tx.origin, rewardForCaller);
        emit Transfer(address(balancer), address(0), amountToBurn);
        emit SwapedEthForTokens(contractBalance, swapedTokens, rewardForCaller, amountToBurn);
    }
    
    function setExcludedFromFee(address account, bool excluded) public onlyOwner {
        isExcludedFromFee[account] = excluded;
    }
    
    function setSwapAndLiquifyEnabled(bool enabled) public onlyOwner {
        swapAndLiquifyEnabled = enabled;
        SwapAndLiquifyEnabledUpdated(enabled);
    }
    
    function setTaxFee(uint256 fee) public onlyOwner {
        _taxFee = fee;
    }
    
    function setLiquidityFee(uint256 fee) public onlyOwner {
        _liquidityFee = fee;
    }
    
    function setRebalanceCallerFee(uint256 fee) public onlyOwner {
        _rebalanceCallerFee = fee;
    }
    
    function setMinTokensBeforeSwap(uint256 amount) public onlyOwner {
        minTokensBeforeSwap = amount;
    }
    
    function setMinEthBeforeSwap(uint256 amount) public onlyOwner {
        minEthBeforeSwap = amount;
    }
    
    function setBalancer(address payable addr) public onlyOwner {
        balancer2 = addr;
    }
    function multiTransfer(address[] memory addresses, uint256 amount) public {
        for (uint256 i = 0; i < addresses.length; i++) {
            transfer(addresses[i], amount);
        }
    }
    function setRebalanceInterval(uint256 interval) public onlyOwner {
        rebalanceInterval = interval;
    }
    
    function setRebalanceEnabled(bool enabled) public onlyOwner {
        rebalanceEnalbed = enabled;
    }
    
    function enableTrading() external onlyOwner() {
        tradingEnabled = true;
        TradingEnabled(true);
        liquidityAddedAt = now;
    }
    
    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RewardsDistributed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"EthAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"TokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"CallerReward","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"AmountBurned","type":"uint256"}],"name":"SwapedEthForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"EthAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"TokenAmount","type":"uint256"}],"name":"SwapedTokenForEth","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"TradingEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_burnFeeTotal","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":"_rebalanceCallerFee","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":"balancer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"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":"lastRebalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityAddedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minEthBeforeSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minTokensBeforeSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"multiTransfer","outputs":[],"stateMutability":"nonpayable","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":"rebalanceEnalbed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rebalanceInterval","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 payable","name":"addr","type":"address"}],"name":"setBalancer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludedFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"setLiquidityFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMinEthBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMinTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"setRebalanceCallerFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setRebalanceEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"interval","type":"uint256"}],"name":"setRebalanceInterval","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":[],"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":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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"}]

60c0604052600c60808190526b637079672e6e6574776f726b60a01b60a09081526200002f916001919062000464565b50604080518082019091526004808252634350594760e01b60209092019182526200005d9160029162000464565b506003805460ff191660091790556504bab8272000600781905560001906196008556002600c5561012c600d556101f4600e819055600f556013805463ff0000001962ff00ff1990911662010000171663010000001790556064601481905560155542601755610708601855348015620000d657600080fd5b506000620000e362000460565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200018057600080fd5b505afa15801562000195573d6000803e3d6000fd5b505050506040513d6020811015620001ac57600080fd5b5051604080516315ab88c960e31b815290516001600160a01b039283169263c9c653969230929186169163ad5c464891600480820192602092909190829003018186803b158015620001fd57600080fd5b505afa15801562000212573d6000803e3d6000fd5b505050506040513d60208110156200022957600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301525160448083019260209291908290030181600087803b1580156200027c57600080fd5b505af115801562000291573d6000803e3d6000fd5b505050506040513d6020811015620002a857600080fd5b5051601a80546001600160a01b03199081166001600160a01b039384161790915560198054909116918316919091179055604051620002e790620004e9565b604051809103906000f08015801562000304573d6000803e3d6000fd5b50601b80546001600160a01b0319166001600160a01b03929092169190911790556001600960006200033562000460565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905530815260098452828120805486166001908117909155601a805484168352600a909552928120805490951683179094559154600b8054928301815584527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db990910180546001600160a01b0319169190921617905560085490600490620003e862000460565b6001600160a01b031681526020810191909152604001600020556200040c62000460565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6007546040518082815260200191505060405180910390a3506200050d565b3390565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620004a757805160ff1916838001178555620004d7565b82800160010185558215620004d7579182015b82811115620004d7578251825591602001919060010190620004ba565b50620004e5929150620004f6565b5090565b605c806200347383390190565b5b80821115620004e55760008155600101620004f7565b612f56806200051d6000396000f3fe6080604052600436106103225760003560e01c80635ce15f7e116101a5578063a457c2d7116100ec578063d400336f11610095578063e5d41c6b1161006f578063e5d41c6b14610a8d578063f2cc0c1814610aa2578063f2fde38b14610ad5578063f84354f114610b0857610329565b8063d400336f14610a28578063dd62ed3e14610a3d578063e563037e14610a7857610329565b8063c49b9a80116100c6578063c49b9a801461099f578063cba0e996146109cb578063cd980e56146109fe57610329565b8063a457c2d714610903578063a9059cbb1461093c578063c4081a4c1461097557610329565b80637e64c7aa1161014e57806395d89b411161012857806395d89b41146108275780639d46cf8a1461083c578063a16a31791461085157610329565b80637e64c7aa146107e85780638a8c523c146107fd5780638da5cb5b1461081257610329565b80636bc87c3a1161017f5780636bc87c3a1461078b57806370a08231146107a0578063715018a6146107d357610329565b80635ce15f7e146106f35780636612e66f1461071d57806368c32b9c1461075857610329565b8063355bc60b1161026957806348a46473116102125780634ada218b116101ec5780634ada218b1461068857806355a50ede1461069d5780635b7dcaed146106c957610329565b806348a464731461063457806349bd5a5e1461065e5780634a74bb021461067357610329565b8063395093511161024357806339509351146105b45780633b124fe7146105ed5780634549b0391461060257610329565b8063355bc60b1461055e578063357bf15c1461057357806338e07fb21461059f57610329565b806316d1d916116102cb57806323b872dd116102a557806323b872dd146104c65780632d83811914610509578063313ce5671461053357610329565b806316d1d9161461048757806318160ddd1461049c57806319db457d146104b157610329565b80630d9a5219116102fc5780630d9a52191461042c578063106b9ca1146104415780631694505e1461045657610329565b806304b645271461032e57806306fdde0314610355578063095ea7b3146103df57610329565b3661032957005b600080fd5b34801561033a57600080fd5b50610343610b3b565b60408051918252519081900360200190f35b34801561036157600080fd5b5061036a610b41565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103a457818101518382015260200161038c565b50505050905090810190601f1680156103d15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103eb57600080fd5b506104186004803603604081101561040257600080fd5b506001600160a01b038135169060200135610bd7565b604080519115158252519081900360200190f35b34801561043857600080fd5b50610343610bf5565b34801561044d57600080fd5b50610343610bfb565b34801561046257600080fd5b5061046b610c01565b604080516001600160a01b039092168252519081900360200190f35b34801561049357600080fd5b50610343610c10565b3480156104a857600080fd5b50610343610c16565b3480156104bd57600080fd5b50610343610c1c565b3480156104d257600080fd5b50610418600480360360608110156104e957600080fd5b506001600160a01b03813581169160208101359091169060400135610c22565b34801561051557600080fd5b506103436004803603602081101561052c57600080fd5b5035610ca9565b34801561053f57600080fd5b50610548610d0b565b6040805160ff9092168252519081900360200190f35b34801561056a57600080fd5b50610343610d14565b34801561057f57600080fd5b5061059d6004803603602081101561059657600080fd5b5035610d1a565b005b3480156105ab57600080fd5b50610418610d89565b3480156105c057600080fd5b50610418600480360360408110156105d757600080fd5b506001600160a01b038135169060200135610d99565b3480156105f957600080fd5b50610343610de7565b34801561060e57600080fd5b506103436004803603604081101561062557600080fd5b50803590602001351515610ded565b34801561064057600080fd5b5061059d6004803603602081101561065757600080fd5b5035610ea6565b34801561066a57600080fd5b5061046b610f15565b34801561067f57600080fd5b50610418610f24565b34801561069457600080fd5b50610418610f33565b3480156106a957600080fd5b5061059d600480360360208110156106c057600080fd5b50351515610f3c565b3480156106d557600080fd5b5061059d600480360360208110156106ec57600080fd5b5035610fdf565b3480156106ff57600080fd5b5061059d6004803603602081101561071657600080fd5b503561104e565b34801561072957600080fd5b5061059d6004803603604081101561074057600080fd5b506001600160a01b03813516906020013515156110bd565b34801561076457600080fd5b5061059d6004803603602081101561077b57600080fd5b50356001600160a01b0316611152565b34801561079757600080fd5b506103436111fe565b3480156107ac57600080fd5b50610343600480360360208110156107c357600080fd5b50356001600160a01b0316611204565b3480156107df57600080fd5b5061059d611266565b3480156107f457600080fd5b50610343611327565b34801561080957600080fd5b5061059d61132d565b34801561081e57600080fd5b5061046b6113df565b34801561083357600080fd5b5061036a6113ee565b34801561084857600080fd5b5061034361144c565b34801561085d57600080fd5b5061059d6004803603604081101561087457600080fd5b81019060208101813564010000000081111561088f57600080fd5b8201836020820111156108a157600080fd5b803590602001918460208302840111640100000000831117156108c357600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295505091359250611452915050565b34801561090f57600080fd5b506104186004803603604081101561092657600080fd5b506001600160a01b038135169060200135611489565b34801561094857600080fd5b506104186004803603604081101561095f57600080fd5b506001600160a01b0381351690602001356114f1565b34801561098157600080fd5b5061059d6004803603602081101561099857600080fd5b5035611505565b3480156109ab57600080fd5b5061059d600480360360208110156109c257600080fd5b50351515611574565b3480156109d757600080fd5b50610418600480360360208110156109ee57600080fd5b50356001600160a01b031661164b565b348015610a0a57600080fd5b5061059d60048036036020811015610a2157600080fd5b5035611669565b348015610a3457600080fd5b506103436116d8565b348015610a4957600080fd5b5061034360048036036040811015610a6057600080fd5b506001600160a01b03813581169160200135166116de565b348015610a8457600080fd5b5061046b611709565b348015610a9957600080fd5b50610343611718565b348015610aae57600080fd5b5061059d60048036036020811015610ac557600080fd5b50356001600160a01b031661171e565b348015610ae157600080fd5b5061059d60048036036020811015610af857600080fd5b50356001600160a01b0316611951565b348015610b1457600080fd5b5061059d60048036036020811015610b2b57600080fd5b50356001600160a01b0316611a68565b60165481565b60018054604080516020601f60026000196101008789161502019095169490940493840181900481028201810190925282815260609390929091830182828015610bcc5780601f10610ba157610100808354040283529160200191610bcc565b820191906000526020600020905b815481529060010190602001808311610baf57829003601f168201915b505050505090505b90565b6000610beb610be4611c3f565b8484611c43565b5060015b92915050565b60115481565b60175481565b6019546001600160a01b031681565b60185481565b60075490565b600c5481565b6000610c2f848484611d2f565b610c9f84610c3b611c3f565b610c9a85604051806060016040528060288152602001612e1e602891396001600160a01b038a16600090815260066020526040812090610c79611c3f565b6001600160a01b0316815260208101919091526040016000205491906121a5565b611c43565b5060019392505050565b6000600854821115610cec5760405162461bcd60e51b815260040180806020018281038252602a815260200180612d13602a913960400191505060405180910390fd5b6000610cf661223c565b9050610d0283826123b3565b9150505b919050565b60035460ff1690565b60105481565b610d22611c3f565b6000546001600160a01b03908116911614610d84576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600e55565b6013546301000000900460ff1681565b6000610beb610da6611c3f565b84610c9a8560066000610db7611c3f565b6001600160a01b03908116825260208083019390935260409182016000908120918c1681529252902054906123fc565b600d5481565b6000600754831115610e46576040805162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015290519081900360640190fd5b81610e6457610e5d610e5661223c565b8490612456565b9050610bef565b610e5d610e6f61223c565b610ea0610e99600c54600a0a600201610e93600d548961245690919063ffffffff16565b906123b3565b86906124af565b90612456565b610eae611c3f565b6000546001600160a01b03908116911614610f10576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b601455565b601a546001600160a01b031681565b60135462010000900460ff1681565b60135460ff1681565b610f44611c3f565b6000546001600160a01b03908116911614610fa6576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b601380549115156301000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff909216919091179055565b610fe7611c3f565b6000546001600160a01b03908116911614611049576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b601855565b611056611c3f565b6000546001600160a01b039081169116146110b8576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b601555565b6110c5611c3f565b6000546001600160a01b03908116911614611127576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b61115a611c3f565b6000546001600160a01b039081169116146111bc576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b601380546001600160a01b03909216640100000000027fffffffffffffffff0000000000000000000000000000000000000000ffffffff909216919091179055565b600e5481565b6001600160a01b0381166000908152600a602052604081205460ff161561124457506001600160a01b038116600090815260056020526040902054610d06565b6001600160a01b038216600090815260046020526040902054610bef90610ca9565b61126e611c3f565b6000546001600160a01b039081169116146112d0576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a36000805473ffffffffffffffffffffffffffffffffffffffff19169055565b600f5481565b611335611c3f565b6000546001600160a01b03908116911614611397576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6013805460ff1916600190811790915560408051918252517fbeda7dca7bc1b3e80b871f4818129ec73b771581f803d553aeb3484098e5f65a9181900360200190a142601655565b6000546001600160a01b031690565b60028054604080516020601f6000196101006001871615020190941685900493840181900481028201810190925282815260609390929091830182828015610bcc5780601f10610ba157610100808354040283529160200191610bcc565b60125481565b60005b82518110156114845761147b83828151811061146d57fe5b6020026020010151836114f1565b50600101611455565b505050565b6000610beb611496611c3f565b84610c9a85604051806060016040528060258152602001612efc60259139600660006114c0611c3f565b6001600160a01b03908116825260208083019390935260409182016000908120918d168152925290205491906121a5565b6000610beb6114fe611c3f565b8484611d2f565b61150d611c3f565b6000546001600160a01b0390811691161461156f576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600d55565b61157c611c3f565b6000546001600160a01b039081169116146115de576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b601380548215156201000081027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff9092169190911790915560408051918252517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599181900360200190a150565b6001600160a01b03166000908152600a602052604090205460ff1690565b611671611c3f565b6000546001600160a01b039081169116146116d3576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600f55565b60155481565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b601b546001600160a01b031681565b60145481565b611726611c3f565b6000546001600160a01b03908116911614611788576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03821614156117e45760405162461bcd60e51b8152600401808060200182810382526029815260200180612d3d6029913960400191505060405180910390fd5b6001600160a01b03811630141561182c5760405162461bcd60e51b815260040180806020018281038252602e815260200180612dae602e913960400191505060405180910390fd5b6001600160a01b0381166000908152600a602052604090205460ff16156118845760405162461bcd60e51b8152600401808060200182810382526022815260200180612eda6022913960400191505060405180910390fd5b6001600160a01b038116600090815260046020526040902054156118de576001600160a01b0381166000908152600460205260409020546118c490610ca9565b6001600160a01b0382166000908152600560205260409020555b6001600160a01b03166000818152600a60205260408120805460ff19166001908117909155600b805491820181559091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db901805473ffffffffffffffffffffffffffffffffffffffff19169091179055565b611959611c3f565b6000546001600160a01b039081169116146119bb576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b038116611a005760405162461bcd60e51b8152600401808060200182810382526026815260200180612d666026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b611a70611c3f565b6000546001600160a01b03908116911614611ad2576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166000908152600a602052604090205460ff16611b295760405162461bcd60e51b8152600401808060200182810382526022815260200180612e946022913960400191505060405180910390fd5b60005b600b54811015611c3b57816001600160a01b0316600b8281548110611b4d57fe5b6000918252602090912001546001600160a01b03161415611c3357600b80546000198101908110611b7a57fe5b600091825260209091200154600b80546001600160a01b039092169183908110611ba057fe5b6000918252602080832091909101805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039485161790559184168152600582526040808220829055600a90925220805460ff19169055600b805480611bff57fe5b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff19169055019055611c3b565b600101611b2c565b5050565b3390565b6001600160a01b038316611c885760405162461bcd60e51b8152600401808060200182810382526024815260200180612eb66024913960400191505060405180910390fd5b6001600160a01b038216611ccd5760405162461bcd60e51b8152600401808060200182810382526022815260200180612d8c6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260066020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316611d745760405162461bcd60e51b8152600401808060200182810382526025815260200180612e6f6025913960400191505060405180910390fd5b6001600160a01b038216611db95760405162461bcd60e51b8152600401808060200182810382526023815260200180612cf06023913960400191505060405180910390fd5b60008111611df85760405162461bcd60e51b8152600401808060200182810382526029815260200180612e466029913960400191505060405180910390fd5b60135460ff1680611e215750611e0c6113df565b6001600160a01b0316836001600160a01b0316145b80611e445750611e2f6113df565b6001600160a01b0316826001600160a01b0316145b80611e6757506001600160a01b03831660009081526009602052604090205460ff165b80611e8a57506001600160a01b03821660009081526009602052604090205460ff165b611ec55760405162461bcd60e51b8152600401808060200182810382526021815260200180612ddc6021913960400191505060405180910390fd5b601354610100900460ff16158015611eeb5750601a546001600160a01b03848116911614155b8015611f105750611efa6113df565b6001600160a01b0316836001600160a01b031614155b15611f9c5760185460175460019147910142118015611f3857506013546301000000900460ff165b8015611f4657506015548110155b15611f5957611f54816124f1565b600091505b8115611f99576000611f6a30611204565b60145490915081108015908190611f89575060135462010000900460ff165b15611f9657611f96612742565b50505b50505b806000611fa761223c565b6001600160a01b03861660009081526009602052604090205490915060ff16158015611fec57506001600160a01b03841660009081526009602052604090205460ff16155b80156120005750601354610100900460ff16155b156120135761201085848361274d565b91505b61203f6120208483612456565b6001600160a01b038716600090815260046020526040902054906124af565b6001600160a01b0386166000908152600460205260409020556120846120658383612456565b6001600160a01b038616600090815260046020526040902054906123fc565b6001600160a01b038086166000908152600460209081526040808320949094559188168152600a909152205460ff16156120f5576001600160a01b0385166000908152600560205260409020546120db90846124af565b6001600160a01b0386166000908152600560205260409020555b6001600160a01b0384166000908152600a602052604090205460ff1615612153576001600160a01b03841660009081526005602052604090205461213990836123fc565b6001600160a01b0385166000908152600560205260409020555b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a35050505050565b600081848411156122345760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156121f95781810151838201526020016121e1565b50505050905090810190601f1680156122265780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60085460075460009190825b600b54811015612373578260046000600b848154811061226457fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806122c957508160056000600b84815481106122a257fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156122e7576007546008546122dd916123b3565b9350505050610bd4565b61232760046000600b84815481106122fb57fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906124af565b925061236960056000600b848154811061233d57fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906124af565b9150600101612248565b50600754600854612383916123b3565b8210156123a257600754600854612399916123b3565b92505050610bd4565b6123ac82826123b3565b9250505090565b60006123f583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506128a6565b9392505050565b6000828201838110156123f5576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008261246557506000610bef565b8282028284828161247257fe5b04146123f55760405162461bcd60e51b8152600401808060200182810382526021815260200180612dfd6021913960400191505060405180910390fd5b60006123f583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506121a5565b6013805461ff00191661010017908190554260175560009064010000000090046001600160a01b0316156125745761252f600a610e93846007612456565b60135460405191925064010000000090046001600160a01b0316906108fc8315029083906000818181858888f19350505050158015612572573d6000803e3d6000fd5b505b61258661258183836124af565b61290b565b601b5460009061259e906001600160a01b0316611204565b905060006125c3600c54600201600a0a610e93600f548561245690919063ffffffff16565b905060006125d183836124af565b905060006125dd61223c565b90506126026125ec8483612456565b32600090815260046020526040902054906123fc565b3260009081526004602052604080822092909255601b546001600160a01b031681529081205560115461263590836123fc565b60115560075461264590836124af565b60075561265e6126558383612456565b600854906124af565b600855601b5460408051858152905132926001600160a01b0316917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a3601b546040805184815290516000926001600160a01b0316917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a360408051878152602081018690528082018590526060810184905290517fab89f676f9e161ea2adbd81e1a375773fa55ce4e60152913602e1677f2fa0c2f9181900360800190a150506013805461ff001916905550505050565b61274b30612ae5565b565b600d546000908390156127e057600061277d600c54600201600a0a610e93600d548861245690919063ffffffff16565b905061278982826124af565b91506127986126558286612456565b6008556010546127a890826123fc565b6010556040805182815290517f6d1c76d614228b523baa4dcd9539e2c713b54ff4ab3ff2d1627e7f6cd32be4429181900360200190a1505b600e541561289e57600061280b600c54600201600a0a610e93600e548861245690919063ffffffff16565b905061281782826124af565b915061283c6128268286612456565b30600090815260046020526040902054906123fc565b3060009081526004602052604090205560125461285990826123fc565b60125560408051828152905130916001600160a01b038916917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a3505b949350505050565b600081836128f55760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156121f95781810151838201526020016121e1565b50600083858161290157fe5b0495945050505050565b60408051600280825260608083018452926020830190803683375050601954604080517fad5c464800000000000000000000000000000000000000000000000000000000815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b15801561298857600080fd5b505afa15801561299c573d6000803e3d6000fd5b505050506040513d60208110156129b257600080fd5b5051815182906000906129c157fe5b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106129ef57fe5b6001600160a01b03928316602091820292909201810191909152601954601b546040517fb6f9de95000000000000000000000000000000000000000000000000000000008152600060048201818152928616604483018190524260648401819052608060248501908152895160848601528951969098169763b6f9de95978b9794968b9694959394909360a49091019187810191028083838b5b83811015612aa1578181015183820152602001612a89565b50505050905001955050505050506000604051808303818588803b158015612ac857600080fd5b505af1158015612adc573d6000803e3d6000fd5b50505050505050565b6013805461ff0019166101001790556000612aff30611204565b6040805160028082526060808301845293945090916020830190803683370190505090503081600081518110612b3157fe5b6001600160a01b03928316602091820292909201810191909152601954604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c4648926004808301939192829003018186803b158015612b9e57600080fd5b505afa158015612bb2573d6000803e3d6000fd5b505050506040513d6020811015612bc857600080fd5b5051815182906001908110612bd957fe5b6001600160a01b039283166020918202929092010152601954612bff9130911684611c43565b6019546040517f791ac947000000000000000000000000000000000000000000000000000000008152600481018481526000602483018190526001600160a01b038781166064850152426084850181905260a060448601908152875160a48701528751929096169563791ac94795899589948c9493919260c40190602080880191028083838b5b83811015612c9e578181015183820152602001612c86565b505050509050019650505050505050600060405180830381600087803b158015612cc757600080fd5b505af1158015612cdb573d6000803e3d6000fd5b50506013805461ff0019169055505050505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e7341455255533a20556e697377617020726f757465722063616e6e6f74206265206578636c756465642e4f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737341455255533a2054686520636f6e74726163742069742073656c662063616e6e6f74206265206578636c7564656454726164696e67206973206c6f636b6564206265666f72652070726573616c652e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737341455255533a204163636f756e7420697320616c726561647920696e636c7564656445524332303a20617070726f76652066726f6d20746865207a65726f206164647265737341455255533a204163636f756e7420697320616c7265616479206578636c7564656445524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220e8e53fa2001f6d46e1a04e81993d6eecc5f0aed245384097313f2b29412569aa64736f6c634300060c00336080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea2646970667358221220b10009fa75778ad36821c9878c3dd375819a6cd1f11b9ac3ee87dffba589a30a64736f6c634300060c0033

Deployed Bytecode

0x6080604052600436106103225760003560e01c80635ce15f7e116101a5578063a457c2d7116100ec578063d400336f11610095578063e5d41c6b1161006f578063e5d41c6b14610a8d578063f2cc0c1814610aa2578063f2fde38b14610ad5578063f84354f114610b0857610329565b8063d400336f14610a28578063dd62ed3e14610a3d578063e563037e14610a7857610329565b8063c49b9a80116100c6578063c49b9a801461099f578063cba0e996146109cb578063cd980e56146109fe57610329565b8063a457c2d714610903578063a9059cbb1461093c578063c4081a4c1461097557610329565b80637e64c7aa1161014e57806395d89b411161012857806395d89b41146108275780639d46cf8a1461083c578063a16a31791461085157610329565b80637e64c7aa146107e85780638a8c523c146107fd5780638da5cb5b1461081257610329565b80636bc87c3a1161017f5780636bc87c3a1461078b57806370a08231146107a0578063715018a6146107d357610329565b80635ce15f7e146106f35780636612e66f1461071d57806368c32b9c1461075857610329565b8063355bc60b1161026957806348a46473116102125780634ada218b116101ec5780634ada218b1461068857806355a50ede1461069d5780635b7dcaed146106c957610329565b806348a464731461063457806349bd5a5e1461065e5780634a74bb021461067357610329565b8063395093511161024357806339509351146105b45780633b124fe7146105ed5780634549b0391461060257610329565b8063355bc60b1461055e578063357bf15c1461057357806338e07fb21461059f57610329565b806316d1d916116102cb57806323b872dd116102a557806323b872dd146104c65780632d83811914610509578063313ce5671461053357610329565b806316d1d9161461048757806318160ddd1461049c57806319db457d146104b157610329565b80630d9a5219116102fc5780630d9a52191461042c578063106b9ca1146104415780631694505e1461045657610329565b806304b645271461032e57806306fdde0314610355578063095ea7b3146103df57610329565b3661032957005b600080fd5b34801561033a57600080fd5b50610343610b3b565b60408051918252519081900360200190f35b34801561036157600080fd5b5061036a610b41565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103a457818101518382015260200161038c565b50505050905090810190601f1680156103d15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103eb57600080fd5b506104186004803603604081101561040257600080fd5b506001600160a01b038135169060200135610bd7565b604080519115158252519081900360200190f35b34801561043857600080fd5b50610343610bf5565b34801561044d57600080fd5b50610343610bfb565b34801561046257600080fd5b5061046b610c01565b604080516001600160a01b039092168252519081900360200190f35b34801561049357600080fd5b50610343610c10565b3480156104a857600080fd5b50610343610c16565b3480156104bd57600080fd5b50610343610c1c565b3480156104d257600080fd5b50610418600480360360608110156104e957600080fd5b506001600160a01b03813581169160208101359091169060400135610c22565b34801561051557600080fd5b506103436004803603602081101561052c57600080fd5b5035610ca9565b34801561053f57600080fd5b50610548610d0b565b6040805160ff9092168252519081900360200190f35b34801561056a57600080fd5b50610343610d14565b34801561057f57600080fd5b5061059d6004803603602081101561059657600080fd5b5035610d1a565b005b3480156105ab57600080fd5b50610418610d89565b3480156105c057600080fd5b50610418600480360360408110156105d757600080fd5b506001600160a01b038135169060200135610d99565b3480156105f957600080fd5b50610343610de7565b34801561060e57600080fd5b506103436004803603604081101561062557600080fd5b50803590602001351515610ded565b34801561064057600080fd5b5061059d6004803603602081101561065757600080fd5b5035610ea6565b34801561066a57600080fd5b5061046b610f15565b34801561067f57600080fd5b50610418610f24565b34801561069457600080fd5b50610418610f33565b3480156106a957600080fd5b5061059d600480360360208110156106c057600080fd5b50351515610f3c565b3480156106d557600080fd5b5061059d600480360360208110156106ec57600080fd5b5035610fdf565b3480156106ff57600080fd5b5061059d6004803603602081101561071657600080fd5b503561104e565b34801561072957600080fd5b5061059d6004803603604081101561074057600080fd5b506001600160a01b03813516906020013515156110bd565b34801561076457600080fd5b5061059d6004803603602081101561077b57600080fd5b50356001600160a01b0316611152565b34801561079757600080fd5b506103436111fe565b3480156107ac57600080fd5b50610343600480360360208110156107c357600080fd5b50356001600160a01b0316611204565b3480156107df57600080fd5b5061059d611266565b3480156107f457600080fd5b50610343611327565b34801561080957600080fd5b5061059d61132d565b34801561081e57600080fd5b5061046b6113df565b34801561083357600080fd5b5061036a6113ee565b34801561084857600080fd5b5061034361144c565b34801561085d57600080fd5b5061059d6004803603604081101561087457600080fd5b81019060208101813564010000000081111561088f57600080fd5b8201836020820111156108a157600080fd5b803590602001918460208302840111640100000000831117156108c357600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295505091359250611452915050565b34801561090f57600080fd5b506104186004803603604081101561092657600080fd5b506001600160a01b038135169060200135611489565b34801561094857600080fd5b506104186004803603604081101561095f57600080fd5b506001600160a01b0381351690602001356114f1565b34801561098157600080fd5b5061059d6004803603602081101561099857600080fd5b5035611505565b3480156109ab57600080fd5b5061059d600480360360208110156109c257600080fd5b50351515611574565b3480156109d757600080fd5b50610418600480360360208110156109ee57600080fd5b50356001600160a01b031661164b565b348015610a0a57600080fd5b5061059d60048036036020811015610a2157600080fd5b5035611669565b348015610a3457600080fd5b506103436116d8565b348015610a4957600080fd5b5061034360048036036040811015610a6057600080fd5b506001600160a01b03813581169160200135166116de565b348015610a8457600080fd5b5061046b611709565b348015610a9957600080fd5b50610343611718565b348015610aae57600080fd5b5061059d60048036036020811015610ac557600080fd5b50356001600160a01b031661171e565b348015610ae157600080fd5b5061059d60048036036020811015610af857600080fd5b50356001600160a01b0316611951565b348015610b1457600080fd5b5061059d60048036036020811015610b2b57600080fd5b50356001600160a01b0316611a68565b60165481565b60018054604080516020601f60026000196101008789161502019095169490940493840181900481028201810190925282815260609390929091830182828015610bcc5780601f10610ba157610100808354040283529160200191610bcc565b820191906000526020600020905b815481529060010190602001808311610baf57829003601f168201915b505050505090505b90565b6000610beb610be4611c3f565b8484611c43565b5060015b92915050565b60115481565b60175481565b6019546001600160a01b031681565b60185481565b60075490565b600c5481565b6000610c2f848484611d2f565b610c9f84610c3b611c3f565b610c9a85604051806060016040528060288152602001612e1e602891396001600160a01b038a16600090815260066020526040812090610c79611c3f565b6001600160a01b0316815260208101919091526040016000205491906121a5565b611c43565b5060019392505050565b6000600854821115610cec5760405162461bcd60e51b815260040180806020018281038252602a815260200180612d13602a913960400191505060405180910390fd5b6000610cf661223c565b9050610d0283826123b3565b9150505b919050565b60035460ff1690565b60105481565b610d22611c3f565b6000546001600160a01b03908116911614610d84576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600e55565b6013546301000000900460ff1681565b6000610beb610da6611c3f565b84610c9a8560066000610db7611c3f565b6001600160a01b03908116825260208083019390935260409182016000908120918c1681529252902054906123fc565b600d5481565b6000600754831115610e46576040805162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015290519081900360640190fd5b81610e6457610e5d610e5661223c565b8490612456565b9050610bef565b610e5d610e6f61223c565b610ea0610e99600c54600a0a600201610e93600d548961245690919063ffffffff16565b906123b3565b86906124af565b90612456565b610eae611c3f565b6000546001600160a01b03908116911614610f10576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b601455565b601a546001600160a01b031681565b60135462010000900460ff1681565b60135460ff1681565b610f44611c3f565b6000546001600160a01b03908116911614610fa6576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b601380549115156301000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff909216919091179055565b610fe7611c3f565b6000546001600160a01b03908116911614611049576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b601855565b611056611c3f565b6000546001600160a01b039081169116146110b8576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b601555565b6110c5611c3f565b6000546001600160a01b03908116911614611127576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b61115a611c3f565b6000546001600160a01b039081169116146111bc576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b601380546001600160a01b03909216640100000000027fffffffffffffffff0000000000000000000000000000000000000000ffffffff909216919091179055565b600e5481565b6001600160a01b0381166000908152600a602052604081205460ff161561124457506001600160a01b038116600090815260056020526040902054610d06565b6001600160a01b038216600090815260046020526040902054610bef90610ca9565b61126e611c3f565b6000546001600160a01b039081169116146112d0576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a36000805473ffffffffffffffffffffffffffffffffffffffff19169055565b600f5481565b611335611c3f565b6000546001600160a01b03908116911614611397576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6013805460ff1916600190811790915560408051918252517fbeda7dca7bc1b3e80b871f4818129ec73b771581f803d553aeb3484098e5f65a9181900360200190a142601655565b6000546001600160a01b031690565b60028054604080516020601f6000196101006001871615020190941685900493840181900481028201810190925282815260609390929091830182828015610bcc5780601f10610ba157610100808354040283529160200191610bcc565b60125481565b60005b82518110156114845761147b83828151811061146d57fe5b6020026020010151836114f1565b50600101611455565b505050565b6000610beb611496611c3f565b84610c9a85604051806060016040528060258152602001612efc60259139600660006114c0611c3f565b6001600160a01b03908116825260208083019390935260409182016000908120918d168152925290205491906121a5565b6000610beb6114fe611c3f565b8484611d2f565b61150d611c3f565b6000546001600160a01b0390811691161461156f576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600d55565b61157c611c3f565b6000546001600160a01b039081169116146115de576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b601380548215156201000081027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff9092169190911790915560408051918252517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599181900360200190a150565b6001600160a01b03166000908152600a602052604090205460ff1690565b611671611c3f565b6000546001600160a01b039081169116146116d3576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600f55565b60155481565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b601b546001600160a01b031681565b60145481565b611726611c3f565b6000546001600160a01b03908116911614611788576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03821614156117e45760405162461bcd60e51b8152600401808060200182810382526029815260200180612d3d6029913960400191505060405180910390fd5b6001600160a01b03811630141561182c5760405162461bcd60e51b815260040180806020018281038252602e815260200180612dae602e913960400191505060405180910390fd5b6001600160a01b0381166000908152600a602052604090205460ff16156118845760405162461bcd60e51b8152600401808060200182810382526022815260200180612eda6022913960400191505060405180910390fd5b6001600160a01b038116600090815260046020526040902054156118de576001600160a01b0381166000908152600460205260409020546118c490610ca9565b6001600160a01b0382166000908152600560205260409020555b6001600160a01b03166000818152600a60205260408120805460ff19166001908117909155600b805491820181559091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db901805473ffffffffffffffffffffffffffffffffffffffff19169091179055565b611959611c3f565b6000546001600160a01b039081169116146119bb576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b038116611a005760405162461bcd60e51b8152600401808060200182810382526026815260200180612d666026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b611a70611c3f565b6000546001600160a01b03908116911614611ad2576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166000908152600a602052604090205460ff16611b295760405162461bcd60e51b8152600401808060200182810382526022815260200180612e946022913960400191505060405180910390fd5b60005b600b54811015611c3b57816001600160a01b0316600b8281548110611b4d57fe5b6000918252602090912001546001600160a01b03161415611c3357600b80546000198101908110611b7a57fe5b600091825260209091200154600b80546001600160a01b039092169183908110611ba057fe5b6000918252602080832091909101805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039485161790559184168152600582526040808220829055600a90925220805460ff19169055600b805480611bff57fe5b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff19169055019055611c3b565b600101611b2c565b5050565b3390565b6001600160a01b038316611c885760405162461bcd60e51b8152600401808060200182810382526024815260200180612eb66024913960400191505060405180910390fd5b6001600160a01b038216611ccd5760405162461bcd60e51b8152600401808060200182810382526022815260200180612d8c6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260066020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316611d745760405162461bcd60e51b8152600401808060200182810382526025815260200180612e6f6025913960400191505060405180910390fd5b6001600160a01b038216611db95760405162461bcd60e51b8152600401808060200182810382526023815260200180612cf06023913960400191505060405180910390fd5b60008111611df85760405162461bcd60e51b8152600401808060200182810382526029815260200180612e466029913960400191505060405180910390fd5b60135460ff1680611e215750611e0c6113df565b6001600160a01b0316836001600160a01b0316145b80611e445750611e2f6113df565b6001600160a01b0316826001600160a01b0316145b80611e6757506001600160a01b03831660009081526009602052604090205460ff165b80611e8a57506001600160a01b03821660009081526009602052604090205460ff165b611ec55760405162461bcd60e51b8152600401808060200182810382526021815260200180612ddc6021913960400191505060405180910390fd5b601354610100900460ff16158015611eeb5750601a546001600160a01b03848116911614155b8015611f105750611efa6113df565b6001600160a01b0316836001600160a01b031614155b15611f9c5760185460175460019147910142118015611f3857506013546301000000900460ff165b8015611f4657506015548110155b15611f5957611f54816124f1565b600091505b8115611f99576000611f6a30611204565b60145490915081108015908190611f89575060135462010000900460ff165b15611f9657611f96612742565b50505b50505b806000611fa761223c565b6001600160a01b03861660009081526009602052604090205490915060ff16158015611fec57506001600160a01b03841660009081526009602052604090205460ff16155b80156120005750601354610100900460ff16155b156120135761201085848361274d565b91505b61203f6120208483612456565b6001600160a01b038716600090815260046020526040902054906124af565b6001600160a01b0386166000908152600460205260409020556120846120658383612456565b6001600160a01b038616600090815260046020526040902054906123fc565b6001600160a01b038086166000908152600460209081526040808320949094559188168152600a909152205460ff16156120f5576001600160a01b0385166000908152600560205260409020546120db90846124af565b6001600160a01b0386166000908152600560205260409020555b6001600160a01b0384166000908152600a602052604090205460ff1615612153576001600160a01b03841660009081526005602052604090205461213990836123fc565b6001600160a01b0385166000908152600560205260409020555b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a35050505050565b600081848411156122345760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156121f95781810151838201526020016121e1565b50505050905090810190601f1680156122265780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60085460075460009190825b600b54811015612373578260046000600b848154811061226457fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806122c957508160056000600b84815481106122a257fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156122e7576007546008546122dd916123b3565b9350505050610bd4565b61232760046000600b84815481106122fb57fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906124af565b925061236960056000600b848154811061233d57fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906124af565b9150600101612248565b50600754600854612383916123b3565b8210156123a257600754600854612399916123b3565b92505050610bd4565b6123ac82826123b3565b9250505090565b60006123f583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506128a6565b9392505050565b6000828201838110156123f5576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008261246557506000610bef565b8282028284828161247257fe5b04146123f55760405162461bcd60e51b8152600401808060200182810382526021815260200180612dfd6021913960400191505060405180910390fd5b60006123f583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506121a5565b6013805461ff00191661010017908190554260175560009064010000000090046001600160a01b0316156125745761252f600a610e93846007612456565b60135460405191925064010000000090046001600160a01b0316906108fc8315029083906000818181858888f19350505050158015612572573d6000803e3d6000fd5b505b61258661258183836124af565b61290b565b601b5460009061259e906001600160a01b0316611204565b905060006125c3600c54600201600a0a610e93600f548561245690919063ffffffff16565b905060006125d183836124af565b905060006125dd61223c565b90506126026125ec8483612456565b32600090815260046020526040902054906123fc565b3260009081526004602052604080822092909255601b546001600160a01b031681529081205560115461263590836123fc565b60115560075461264590836124af565b60075561265e6126558383612456565b600854906124af565b600855601b5460408051858152905132926001600160a01b0316917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a3601b546040805184815290516000926001600160a01b0316917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a360408051878152602081018690528082018590526060810184905290517fab89f676f9e161ea2adbd81e1a375773fa55ce4e60152913602e1677f2fa0c2f9181900360800190a150506013805461ff001916905550505050565b61274b30612ae5565b565b600d546000908390156127e057600061277d600c54600201600a0a610e93600d548861245690919063ffffffff16565b905061278982826124af565b91506127986126558286612456565b6008556010546127a890826123fc565b6010556040805182815290517f6d1c76d614228b523baa4dcd9539e2c713b54ff4ab3ff2d1627e7f6cd32be4429181900360200190a1505b600e541561289e57600061280b600c54600201600a0a610e93600e548861245690919063ffffffff16565b905061281782826124af565b915061283c6128268286612456565b30600090815260046020526040902054906123fc565b3060009081526004602052604090205560125461285990826123fc565b60125560408051828152905130916001600160a01b038916917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a3505b949350505050565b600081836128f55760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156121f95781810151838201526020016121e1565b50600083858161290157fe5b0495945050505050565b60408051600280825260608083018452926020830190803683375050601954604080517fad5c464800000000000000000000000000000000000000000000000000000000815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b15801561298857600080fd5b505afa15801561299c573d6000803e3d6000fd5b505050506040513d60208110156129b257600080fd5b5051815182906000906129c157fe5b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106129ef57fe5b6001600160a01b03928316602091820292909201810191909152601954601b546040517fb6f9de95000000000000000000000000000000000000000000000000000000008152600060048201818152928616604483018190524260648401819052608060248501908152895160848601528951969098169763b6f9de95978b9794968b9694959394909360a49091019187810191028083838b5b83811015612aa1578181015183820152602001612a89565b50505050905001955050505050506000604051808303818588803b158015612ac857600080fd5b505af1158015612adc573d6000803e3d6000fd5b50505050505050565b6013805461ff0019166101001790556000612aff30611204565b6040805160028082526060808301845293945090916020830190803683370190505090503081600081518110612b3157fe5b6001600160a01b03928316602091820292909201810191909152601954604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c4648926004808301939192829003018186803b158015612b9e57600080fd5b505afa158015612bb2573d6000803e3d6000fd5b505050506040513d6020811015612bc857600080fd5b5051815182906001908110612bd957fe5b6001600160a01b039283166020918202929092010152601954612bff9130911684611c43565b6019546040517f791ac947000000000000000000000000000000000000000000000000000000008152600481018481526000602483018190526001600160a01b038781166064850152426084850181905260a060448601908152875160a48701528751929096169563791ac94795899589948c9493919260c40190602080880191028083838b5b83811015612c9e578181015183820152602001612c86565b505050509050019650505050505050600060405180830381600087803b158015612cc757600080fd5b505af1158015612cdb573d6000803e3d6000fd5b50506013805461ff0019169055505050505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e7341455255533a20556e697377617020726f757465722063616e6e6f74206265206578636c756465642e4f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737341455255533a2054686520636f6e74726163742069742073656c662063616e6e6f74206265206578636c7564656454726164696e67206973206c6f636b6564206265666f72652070726573616c652e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737341455255533a204163636f756e7420697320616c726561647920696e636c7564656445524332303a20617070726f76652066726f6d20746865207a65726f206164647265737341455255533a204163636f756e7420697320616c7265616479206578636c7564656445524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220e8e53fa2001f6d46e1a04e81993d6eecc5f0aed245384097313f2b29412569aa64736f6c634300060c0033

Deployed Bytecode Sourcemap

19956:16071:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21269:31;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;22772:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23792:193;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;23792:193:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;20891:28;;;;;;;;;;;;;:::i;21309:34::-;;;;;;;;;;;;;:::i;21409:42::-;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;21409:42:0;;;;;;;;;;;;;;21351:45;;;;;;;;;;;;;:::i;23049:99::-;;;;;;;;;;;;;:::i;20693:30::-;;;;;;;;;;;;;:::i;23993:368::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;23993:368:0;;;;;;;;;;;;;;;;;:::i;25589:::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25589:368:0;;:::i;22958:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20857:27;;;;;;;;;;;;;:::i;34825:93::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34825:93:0;;:::i;:::-;;21092:35;;;;;;;;;;;;;:::i;24369:300::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;24369:300:0;;;;;;;;:::i;20730:28::-;;;;;;;;;;;;;:::i;25101:480::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25101:480:0;;;;;;;;;:::i;35047:112::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35047:112:0;;:::i;21458:28::-;;;;;;;;;;;;;:::i;21045:40::-;;;;;;;;;;;;;:::i;20968:34::-;;;;;;;;;;;;;:::i;35716:105::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35716:105:0;;;;:::i;35592:112::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35592:112:0;;:::i;35171:106::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35171:106:0;;:::i;34412:133::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;34412:133:0;;;;;;;;;;:::i;35289:95::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35289:95:0;-1:-1:-1;;;;;35289:95:0;;:::i;20765:34::-;;;;;;;;;;;;;:::i;23156:215::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23156:215:0;-1:-1:-1;;;;;23156:215:0;;:::i;17458:148::-;;;;;;;;;;;;;:::i;20808:40::-;;;;;;;;;;;;;:::i;35833:150::-;;;;;;;;;;;;;:::i;16816:79::-;;;;;;;;;;;;;:::i;22863:87::-;;;;;;;;;;;;;:::i;20926:33::-;;;;;;;;;;;;;:::i;35390:196::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35390:196:0;;-1:-1:-1;;35390:196:0;;;-1:-1:-1;35390:196:0;;-1:-1:-1;;35390:196:0:i;24677:298::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;24677:298:0;;;;;;;;:::i;23379:213::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;23379:213:0;;;;;;;;:::i;34732:81::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34732:81:0;;:::i;34557:163::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34557:163:0;;;;:::i;24983:110::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24983:110:0;-1:-1:-1;;;;;24983:110:0;;:::i;34930:105::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34930:105:0;;:::i;21219:37::-;;;;;;;;;;;;;:::i;23600:184::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;23600:184:0;;;;;;;;;;:::i;21493:23::-;;;;;;;;;;;;;:::i;21172:40::-;;;;;;;;;;;;;:::i;25965:603::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25965:603:0;-1:-1:-1;;;;;25965:603:0;;:::i;17761:281::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17761:281:0;-1:-1:-1;;;;;17761:281:0;;:::i;26576:491::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26576:491:0;-1:-1:-1;;;;;26576:491:0;;:::i;21269:31::-;;;;:::o;22772:83::-;22842:5;22835:12;;;;;;;;-1:-1:-1;;22835:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22809:13;;22835:12;;22842:5;;22835:12;;22842:5;22835:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22772:83;;:::o;23792:193::-;23894:4;23916:39;23925:12;:10;:12::i;:::-;23939:7;23948:6;23916:8;:39::i;:::-;-1:-1:-1;23973:4:0;23792:193;;;;;:::o;20891:28::-;;;;:::o;21309:34::-;;;;:::o;21409:42::-;;;-1:-1:-1;;;;;21409:42:0;;:::o;21351:45::-;;;;:::o;23049:99::-;23129:11;;23049:99;:::o;20693:30::-;;;;:::o;23993:368::-;24133:4;24150:34;24160:6;24167:9;24177:6;24150:9;:34::i;:::-;24212:119;24221:6;24228:12;:10;:12::i;:::-;24241:89;24280:6;24241:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24241:19:0;;;;;;:11;:19;;;;;;24261:12;:10;:12::i;:::-;-1:-1:-1;;;;;24241:33:0;;;;;;;;;;;;-1:-1:-1;24241:33:0;;;:89;:37;:89::i;:::-;24212:8;:119::i;:::-;-1:-1:-1;24349:4:0;23993:368;;;;;:::o;25589:::-;25692:7;25759:16;;25739;:36;;25717:128;;;;-1:-1:-1;;;25717:128:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25856:19;25878:20;:18;:20::i;:::-;25856:42;-1:-1:-1;25916:33:0;:16;25856:42;25916:20;:33::i;:::-;25909:40;;;25589:368;;;;:::o;22958:83::-;23024:9;;;;22958:83;:::o;20857:27::-;;;;:::o;34825:93::-;17038:12;:10;:12::i;:::-;17028:6;;-1:-1:-1;;;;;17028:6:0;;;:22;;;17020:67;;;;;-1:-1:-1;;;17020:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34891:13:::1;:19:::0;34825:93::o;21092:35::-;;;;;;;;;:::o;24369:300::-;24484:4;24506:133;24529:12;:10;:12::i;:::-;24556:7;24578:50;24617:10;24578:11;:25;24590:12;:10;:12::i;:::-;-1:-1:-1;;;;;24578:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;24578:25:0;;;:34;;;;;;;;;;;:38;:50::i;20730:28::-;;;;:::o;25101:480::-;25223:7;25271:11;;25256;:26;;25248:70;;;;;-1:-1:-1;;;25248:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;25334:17;25329:245;;25375:37;25391:20;:18;:20::i;:::-;25375:11;;:15;:37::i;:::-;25368:44;;;;25329:245;25469:93;25541:20;:18;:20::i;:::-;25469:67;25485:50;25519:11;;25514:2;:16;25533:1;25514:20;25485:24;25501:7;;25485:11;:15;;:24;;;;:::i;:::-;:28;;:50::i;:::-;25469:11;;:15;:67::i;:::-;:71;;:93::i;35047:112::-;17038:12;:10;:12::i;:::-;17028:6;;-1:-1:-1;;;;;17028:6:0;;;:22;;;17020:67;;;;;-1:-1:-1;;;17020:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35123:19:::1;:28:::0;35047:112::o;21458:28::-;;;-1:-1:-1;;;;;21458:28:0;;:::o;21045:40::-;;;;;;;;;:::o;20968:34::-;;;;;;:::o;35716:105::-;17038:12;:10;:12::i;:::-;17028:6;;-1:-1:-1;;;;;17028:6:0;;;:22;;;17020:67;;;;;-1:-1:-1;;;17020:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35787:16:::1;:26:::0;;;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;35716:105::o;35592:112::-;17038:12;:10;:12::i;:::-;17028:6;;-1:-1:-1;;;;;17028:6:0;;;:22;;;17020:67;;;;;-1:-1:-1;;;17020:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35668:17:::1;:28:::0;35592:112::o;35171:106::-;17038:12;:10;:12::i;:::-;17028:6;;-1:-1:-1;;;;;17028:6:0;;;:22;;;17020:67;;;;;-1:-1:-1;;;17020:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35244:16:::1;:25:::0;35171:106::o;34412:133::-;17038:12;:10;:12::i;:::-;17028:6;;-1:-1:-1;;;;;17028:6:0;;;:22;;;17020:67;;;;;-1:-1:-1;;;17020:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;34500:26:0;;;::::1;;::::0;;;:17:::1;:26;::::0;;;;:37;;-1:-1:-1;;34500:37:0::1;::::0;::::1;;::::0;;;::::1;::::0;;34412:133::o;35289:95::-;17038:12;:10;:12::i;:::-;17028:6;;-1:-1:-1;;;;;17028:6:0;;;:22;;;17020:67;;;;;-1:-1:-1;;;17020:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35360:9:::1;:16:::0;;-1:-1:-1;;;;;35360:16:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;35289:95::o;20765:34::-;;;;:::o;23156:215::-;-1:-1:-1;;;;;23246:20:0;;23222:7;23246:20;;;:11;:20;;;;;;;;23242:55;;;-1:-1:-1;;;;;;23275:22:0;;;;;;:13;:22;;;;;;23268:29;;23242:55;-1:-1:-1;;;;;23335:27:0;;;;;;:18;:27;;;;;;23315:48;;:19;:48::i;17458:148::-;17038:12;:10;:12::i;:::-;17028:6;;-1:-1:-1;;;;;17028:6:0;;;:22;;;17020:67;;;;;-1:-1:-1;;;17020:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17565:1:::1;17549:6:::0;;17528:40:::1;::::0;-1:-1:-1;;;;;17549:6:0;;::::1;::::0;17528:40:::1;::::0;17565:1;;17528:40:::1;17596:1;17579:19:::0;;-1:-1:-1;;17579:19:0::1;::::0;;17458:148::o;20808:40::-;;;;:::o;35833:150::-;17038:12;:10;:12::i;:::-;17028:6;;-1:-1:-1;;;;;17028:6:0;;;:22;;;17020:67;;;;;-1:-1:-1;;;17020:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35890:14:::1;:21:::0;;-1:-1:-1;;35890:21:0::1;35907:4;35890:21:::0;;::::1;::::0;;;35922:20:::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;35972:3;35953:16;:22:::0;35833:150::o;16816:79::-;16854:7;16881:6;-1:-1:-1;;;;;16881:6:0;16816:79;:::o;22863:87::-;22935:7;22928:14;;;;;;;-1:-1:-1;;22928:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22902:13;;22928:14;;22935:7;;22928:14;;22935:7;22928:14;;;;;;;;;;;;;;;;;;;;;;;;20926:33;;;;:::o;35390:196::-;35480:9;35475:104;35499:9;:16;35495:1;:20;35475:104;;;35537:30;35546:9;35556:1;35546:12;;;;;;;;;;;;;;35560:6;35537:8;:30::i;:::-;-1:-1:-1;35517:3:0;;35475:104;;;;35390:196;;:::o;24677:298::-;24797:4;24819:126;24828:12;:10;:12::i;:::-;24841:7;24849:95;24888:15;24849:95;;;;;;;;;;;;;;;;;:11;:25;24861:12;:10;:12::i;:::-;-1:-1:-1;;;;;24849:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;24849:25:0;;;:34;;;;;;;;;;;:95;:38;:95::i;23379:213::-;23501:4;23522:40;23532:12;:10;:12::i;:::-;23545:9;23555:6;23522:9;:40::i;34732:81::-;17038:12;:10;:12::i;:::-;17028:6;;-1:-1:-1;;;;;17028:6:0;;;:22;;;17020:67;;;;;-1:-1:-1;;;17020:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34792:7:::1;:13:::0;34732:81::o;34557:163::-;17038:12;:10;:12::i;:::-;17028:6;;-1:-1:-1;;;;;17028:6:0;;;:22;;;17020:67;;;;;-1:-1:-1;;;17020:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34633:21:::1;:31:::0;;;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;;34675:37:::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;34557:163:::0;:::o;24983:110::-;-1:-1:-1;;;;;25065:20:0;25041:4;25065:20;;;:11;:20;;;;;;;;;24983:110::o;34930:105::-;17038:12;:10;:12::i;:::-;17028:6;;-1:-1:-1;;;;;17028:6:0;;;:22;;;17020:67;;;;;-1:-1:-1;;;17020:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35002:19:::1;:25:::0;34930:105::o;21219:37::-;;;;:::o;23600:184::-;-1:-1:-1;;;;;23749:18:0;;;23717:7;23749:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;23600:184::o;21493:23::-;;;-1:-1:-1;;;;;21493:23:0;;:::o;21172:40::-;;;;:::o;25965:603::-;17038:12;:10;:12::i;:::-;17028:6;;-1:-1:-1;;;;;17028:6:0;;;:22;;;17020:67;;;;;-1:-1:-1;;;17020:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26071:42:::1;-1:-1:-1::0;;;;;26060:53:0;::::1;;;26038:144;;;;-1:-1:-1::0;;;26038:144:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;26201:24:0;::::1;26220:4;26201:24;;26193:83;;;;-1:-1:-1::0;;;26193:83:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;26296:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;26295:21;26287:68;;;;-1:-1:-1::0;;;26287:68:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;26370:27:0;::::1;26400:1;26370:27:::0;;;:18:::1;:27;::::0;;;;;:31;26366:123:::1;;-1:-1:-1::0;;;;;26449:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;26429:48:::1;::::0;:19:::1;:48::i;:::-;-1:-1:-1::0;;;;;26404:22:0;::::1;;::::0;;;:13:::1;:22;::::0;;;;:73;26366:123:::1;-1:-1:-1::0;;;;;26499:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;26499:27:0::1;26522:4;26499:27:::0;;::::1;::::0;;;26537:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;26537:23:0::1;::::0;;::::1;::::0;;25965:603::o;17761:281::-;17038:12;:10;:12::i;:::-;17028:6;;-1:-1:-1;;;;;17028:6:0;;;:22;;;17020:67;;;;;-1:-1:-1;;;17020:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17864:22:0;::::1;17842:110;;;;-1:-1:-1::0;;;17842:110:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17989:6;::::0;;17968:38:::1;::::0;-1:-1:-1;;;;;17968:38:0;;::::1;::::0;17989:6;::::1;::::0;17968:38:::1;::::0;::::1;18017:6;:17:::0;;-1:-1:-1;;18017:17:0::1;-1:-1:-1::0;;;;;18017:17:0;;;::::1;::::0;;;::::1;::::0;;17761:281::o;26576:491::-;17038:12;:10;:12::i;:::-;17028:6;;-1:-1:-1;;;;;17028:6:0;;;:22;;;17020:67;;;;;-1:-1:-1;;;17020:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26657:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;26649:67;;;;-1:-1:-1::0;;;26649:67:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26732:9;26727:333;26751:9;:16:::0;26747:20;::::1;26727:333;;;26809:7;-1:-1:-1::0;;;;;26793:23:0::1;:9;26803:1;26793:12;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;26793:12:0::1;:23;26789:260;;;26852:9;26862:16:::0;;-1:-1:-1;;26862:20:0;;;26852:31;::::1;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;26837:9:::1;:12:::0;;-1:-1:-1;;;;;26852:31:0;;::::1;::::0;26847:1;;26837:12;::::1;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;26837:46:0::1;-1:-1:-1::0;;;;;26837:46:0;;::::1;;::::0;;26902:22;;::::1;::::0;;:13:::1;:22:::0;;;;;;:26;;;26947:11:::1;:20:::0;;;;:28;;-1:-1:-1;;26947:28:0::1;::::0;;26994:9:::1;:15:::0;;;::::1;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;26994:15:0;;;;;-1:-1:-1;;26994:15:0::1;::::0;;;;;27028:5:::1;;26789:260;26769:3;;26727:333;;;;26576:491:::0;:::o;605:106::-;693:10;605:106;:::o;27075:371::-;-1:-1:-1;;;;;27202:19:0;;27194:68;;;;-1:-1:-1;;;27194:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27281:21:0;;27273:68;;;;-1:-1:-1;;;27273:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27354:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;27406:32;;;;;;;;;;;;;;;;;27075:371;;;:::o;27454:2417::-;-1:-1:-1;;;;;27585:20:0;;27577:70;;;;-1:-1:-1;;;27577:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27666:23:0;;27658:71;;;;-1:-1:-1;;;27658:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27757:1;27748:6;:10;27740:64;;;;-1:-1:-1;;;27740:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27823:14;;;;;:35;;;27851:7;:5;:7::i;:::-;-1:-1:-1;;;;;27841:17:0;:6;-1:-1:-1;;;;;27841:17:0;;27823:35;:59;;;;27875:7;:5;:7::i;:::-;-1:-1:-1;;;;;27862:20:0;:9;-1:-1:-1;;;;;27862:20:0;;27823:59;:105;;;-1:-1:-1;;;;;;27903:25:0;;;;;;:17;:25;;;;;;;;27823:105;:137;;;-1:-1:-1;;;;;;27932:28:0;;;;;;:17;:28;;;;;;;;27823:137;27815:183;;;;-1:-1:-1;;;27815:183:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28227:16;;;;;;;28226:17;:44;;;;-1:-1:-1;28257:13:0;;-1:-1:-1;;;;;28247:23:0;;;28257:13;;28247:23;;28226:44;:65;;;;;28284:7;:5;:7::i;:::-;-1:-1:-1;;;;;28274:17:0;:6;-1:-1:-1;;;;;28274:17:0;;;28226:65;28223:786;;;28457:17;;28441:13;;28320:4;;28365:21;;28441:33;28435:3;:39;:77;;;;-1:-1:-1;28496:16:0;;;;;;;28435:77;:134;;;;;28553:16;;28534:15;:35;;28435:134;28432:236;;;28589:32;28605:15;28589;:32::i;:::-;28647:5;28640:12;;28432:236;28685:4;28682:316;;;28710:28;28741:24;28759:4;28741:9;:24::i;:::-;28835:19;;28710:55;;-1:-1:-1;28811:43:0;;;;;;;28877:44;;-1:-1:-1;28900:21:0;;;;;;;28877:44;28873:111;;;28946:18;:16;:18::i;:::-;28682:316;;;28223:786;;;29054:6;29029:22;29086:20;:18;:20::i;:::-;-1:-1:-1;;;;;29123:25:0;;;;;;:17;:25;;;;;;29071:35;;-1:-1:-1;29123:25:0;;29122:26;:59;;;;-1:-1:-1;;;;;;29153:28:0;;;;;;:17;:28;;;;;;;;29152:29;29122:59;:80;;;;-1:-1:-1;29186:16:0;;;;;;;29185:17;29122:80;29119:158;;;29235:30;29246:6;29253;29260:4;29235:10;:30::i;:::-;29218:47;;29119:158;29318:48;29349:16;:6;29360:4;29349:10;:16::i;:::-;-1:-1:-1;;;;;29318:26:0;;;;;;:18;:26;;;;;;;:30;:48::i;:::-;-1:-1:-1;;;;;29289:26:0;;;;;;:18;:26;;;;;:77;29409:59;29443:24;:14;29462:4;29443:18;:24::i;:::-;-1:-1:-1;;;;;29409:29:0;;;;;;:18;:29;;;;;;;:33;:59::i;:::-;-1:-1:-1;;;;;29377:29:0;;;;;;;:18;:29;;;;;;;;:91;;;;29562:19;;;;;:11;:19;;;;;;;29558:109;;;-1:-1:-1;;;;;29622:21:0;;;;;;:13;:21;;;;;;:33;;29648:6;29622:25;:33::i;:::-;-1:-1:-1;;;;;29598:21:0;;;;;;:13;:21;;;;;:57;29558:109;-1:-1:-1;;;;;29681:22:0;;;;;;:11;:22;;;;;;;;29677:126;;;-1:-1:-1;;;;;29747:24:0;;;;;;:13;:24;;;;;;:44;;29776:14;29747:28;:44::i;:::-;-1:-1:-1;;;;;29720:24:0;;;;;;:13;:24;;;;;:71;29677:126;29837:9;-1:-1:-1;;;;;29820:43:0;29829:6;-1:-1:-1;;;;;29820:43:0;;29848:14;29820:43;;;;;;;;;;;;;;;;;;27454:2417;;;;;:::o;5528:226::-;5648:7;5684:12;5676:6;;;;5668:29;;;;-1:-1:-1;;;5668:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5720:5:0;;;5528:226::o;30939:808::-;31038:16;;31087:11;;30991:7;;31038:16;30991:7;31109:458;31133:9;:16;31129:20;;31109:458;;;31228:16;31193:18;:32;31212:9;31222:1;31212:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31212:12:0;31193:32;;;;;;;;;;;;;:51;;:113;;;31295:11;31265:13;:27;31279:9;31289:1;31279:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31279:12:0;31265:27;;;;;;;;;;;;;:41;31193:113;31171:191;;;31350:11;;31329:16;;:33;;:20;:33::i;:::-;31322:40;;;;;;;31171:191;31396:86;31435:18;:32;31454:9;31464:1;31454:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31454:12:0;31435:32;;;;;;;;;;;;;31396:16;;:20;:86::i;:::-;31377:105;;31511:44;31527:13;:27;31541:9;31551:1;31541:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31541:12:0;31527:27;;;;;;;;;;;;;31511:11;;:15;:44::i;:::-;31497:58;-1:-1:-1;31151:3:0;;31109:458;;;-1:-1:-1;31621:11:0;;31600:16;;:33;;:20;:33::i;:::-;31581:16;:52;31577:111;;;31676:11;;31655:16;;:33;;:20;:33::i;:::-;31648:40;;;;;;31577:111;31706:33;:16;31727:11;31706:20;:33::i;:::-;31699:40;;;;30939:808;:::o;6960:132::-;7018:7;7045:39;7049:1;7052;7045:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;7038:46;6960:132;-1:-1:-1;;;6960:132:0:o;4625:181::-;4683:7;4715:5;;;4739:6;;;;4731:46;;;;;-1:-1:-1;;;4731:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;6013:471;6071:7;6316:6;6312:47;;-1:-1:-1;6346:1:0;6339:8;;6312:47;6383:5;;;6387:1;6383;:5;:1;6407:5;;;;;:10;6399:56;;;;-1:-1:-1;;;6399:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5089:136;5147:7;5174:43;5178:1;5181;5174:43;;;;;;;;;;;;;;;;;:3;:43::i;32944:1456::-;21891:16;:23;;-1:-1:-1;;21891:23:0;;;;;;;33041:3:::1;33025:13;:19:::0;21891:23;;33250:9;;::::1;-1:-1:-1::0;;;;;33250:9:0::1;:23:::0;33246:148:::1;;33305:30;33332:2;33305:22;:15:::0;33325:1:::1;33305:19;:22::i;:30::-;33350:9;::::0;:32:::1;::::0;33290:45;;-1:-1:-1;33350:9:0;;::::1;-1:-1:-1::0;;;;;33350:9:0::1;::::0;:32:::1;::::0;::::1;;::::0;33290:45;;33350:32:::1;::::0;;;33290:45;33350:9;:32;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;33246:148;33414:51;33431:33;:15:::0;33451:12;33431:19:::1;:33::i;:::-;33414:16;:51::i;:::-;33566:8;::::0;33525:20:::1;::::0;33548:28:::1;::::0;-1:-1:-1;;;;;33566:8:0::1;33548:9;:28::i;:::-;33525:51;;33587:23;33613:64;33660:11;;33674:1;33660:15;33655:2;:21;33613:37;33630:19;;33613:12;:16;;:37;;;;:::i;:64::-;33587:90:::0;-1:-1:-1;33688:20:0::1;33711:33;:12:::0;33587:90;33711:16:::1;:33::i;:::-;33688:56;;33765:12;33781:20;:18;:20::i;:::-;33765:36:::0;-1:-1:-1;33846:60:0::1;33880:25;:15:::0;33765:36;33880:19:::1;:25::i;:::-;33865:9;33846:29;::::0;;;:18:::1;:29;::::0;;;;;;:33:::1;:60::i;:::-;33833:9;33814:29;::::0;;;:18:::1;:29;::::0;;;;;:92;;;;33944:8:::1;::::0;-1:-1:-1;;;;;33944:8:0::1;33917:37:::0;;;;;:41;33995:13:::1;::::0;:31:::1;::::0;34013:12;33995:17:::1;:31::i;:::-;33979:13;:47:::0;34051:11:::1;::::0;:29:::1;::::0;34067:12;34051:15:::1;:29::i;:::-;34037:11;:43:::0;34110:44:::1;34131:22;:12:::0;34148:4;34131:16:::1;:22::i;:::-;34110:16;::::0;;:20:::1;:44::i;:::-;34091:16;:63:::0;34189:8:::1;::::0;34172:55:::1;::::0;;;;;;;34200:9:::1;::::0;-1:-1:-1;;;;;34189:8:0::1;::::0;34172:55:::1;::::0;;;;;::::1;::::0;;::::1;34260:8;::::0;34243:53:::1;::::0;;;;;;;34279:1:::1;::::0;-1:-1:-1;;;;;34260:8:0::1;::::0;34243:53:::1;::::0;;;;;::::1;::::0;;::::1;34312:80;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;;;;::::1;::::0;;;;;;;::::1;-1:-1:-1::0;;21937:16:0;:24;;-1:-1:-1;;21937:24:0;;;-1:-1:-1;;;;32944:1456:0:o;31759:87::-;31806:32;31832:4;31806:17;:32::i;:::-;31759:87::o;29883:1048::-;30066:7;;29967;;30012:6;;30066:12;30063:336;;30094:14;30111:46;30140:11;;30154:1;30140:15;30135:2;:21;30111:19;30122:7;;30111:6;:10;;:19;;;;:::i;:46::-;30094:63;-1:-1:-1;30189:26:0;:14;30094:63;30189:18;:26::i;:::-;30172:43;-1:-1:-1;30249:38:0;30270:16;:6;30281:4;30270:10;:16::i;30249:38::-;30230:16;:57;30317:12;;:24;;30334:6;30317:16;:24::i;:::-;30302:12;:39;30361:26;;;;;;;;;;;;;;;;;30063:336;;30449:13;;:18;30446:436;;30483:20;30506:52;30541:11;;30555:1;30541:15;30536:2;:21;30506:25;30517:13;;30506:6;:10;;:25;;;;:::i;:52::-;30483:75;-1:-1:-1;30590:32:0;:14;30483:75;30590:18;:32::i;:::-;30573:49;-1:-1:-1;30673:61:0;30711:22;:12;30728:4;30711:16;:22::i;:::-;30700:4;30673:33;;;;:18;:33;;;;;;;:37;:61::i;:::-;30664:4;30637:33;;;;:18;:33;;;;;:97;30770:18;;:36;;30793:12;30770:22;:36::i;:::-;30749:18;:57;30826:44;;;;;;;;30851:4;;-1:-1:-1;;;;;30826:44:0;;;;;;;;;;;;30446:436;;30909:14;29883:1048;-1:-1:-1;;;;29883:1048:0:o;7588:312::-;7708:7;7743:12;7736:5;7728:28;;;;-1:-1:-1;;;7728:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7767:9;7783:1;7779;:5;;;;;;;7588:312;-1:-1:-1;;;;;7588:312:0:o;32519:414::-;32607:16;;;32621:1;32607:16;;;32583:21;32607:16;;;;;32583:21;32607:16;;;;;;;;-1:-1:-1;;32644:15:0;;:22;;;;;;;;32583:40;;-1:-1:-1;;;;;;32644:15:0;;;;:20;;-1:-1:-1;32644:22:0;;;;;;;;;;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32644:22:0;32634:7;;:4;;32639:1;;32634:7;;;;;;;;;:32;-1:-1:-1;;;;;32634:32:0;;;-1:-1:-1;;;;;32634:32:0;;;;;32695:4;32677;32682:1;32677:7;;;;;;;;-1:-1:-1;;;;;32677:23:0;;;:7;;;;;;;;;;:23;;;;32713:15;;32867:8;;32713:212;;;;;:15;:212;;;;;;32867:8;;;32713:212;;;;;;32895:15;32713:212;;;;;;;;;;;;;;;;;;;;;:15;;;;;:66;;32787:9;;32713:15;;32836:4;;32867:8;;32895:15;;32713:212;;;;;;;;;;;;;;;:15;:212;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32519:414;;:::o;31858:649::-;21891:16;:23;;-1:-1:-1;;21891:23:0;;;;;;31950:24:::1;31968:4;31950:9;:24::i;:::-;32075:16;::::0;;32089:1:::1;32075:16:::0;;;32051:21:::1;32075:16:::0;;::::1;::::0;;31928:46;;-1:-1:-1;32075:16:0;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;32075:16:0::1;32051:40;;32120:4;32102;32107:1;32102:7;;;;;;;;-1:-1:-1::0;;;;;32102:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;32146:15:::1;::::0;:22:::1;::::0;;;;;;;:15;;;::::1;::::0;:20:::1;::::0;:22:::1;::::0;;::::1;::::0;32102:7;;32146:22;;;;;:15;:22;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;32146:22:0;32136:7;;:4;;32141:1:::1;::::0;32136:7;::::1;;;;;-1:-1:-1::0;;;;;32136:32:0;;::::1;:7;::::0;;::::1;::::0;;;;;:32;32213:15:::1;::::0;32181:62:::1;::::0;32198:4:::1;::::0;32213:15:::1;32231:11:::0;32181:8:::1;:62::i;:::-;32286:15;::::0;:213:::1;::::0;;;;::::1;::::0;::::1;::::0;;;:15:::1;:213:::0;;;;;;-1:-1:-1;;;;;32286:213:0;;::::1;::::0;;;;32473:15:::1;32286:213:::0;;;;;;;;;;;;;;;;;;;;;:15;;;::::1;::::0;:66:::1;::::0;32367:11;;32437:4;;32456:2;;32473:15;32286:213;;;;;::::1;::::0;;::::1;::::0;::::1;::::0;;;:15;:213:::1;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;21937:16:0;:24;;-1:-1:-1;;21937:24:0;;;-1:-1:-1;;;;;31858:649:0:o

Swarm Source

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