ETH Price: $2,429.41 (+0.46%)

Token

DJINN (DJINN)
 

Overview

Max Total Supply

333,333,333 DJINN

Holders

106

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
1,666,666 DJINN

Value
$0.00
0x5c8da5c50bae1856d03aba6a05758ad8f3c3759f
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:
Djinn

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-10-08
*/

pragma solidity ^0.8.17;
// SPDX-License-Identifier: Unlicensed
interface IERC20 {

    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}


library SafeMath {

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

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

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by 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;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

abstract contract Context {
    //function _msgSender() internal view virtual returns (address payable) {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

library Address {

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

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

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

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

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

contract Ownable is Context {
    address private _owner;

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

    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `from` to `to`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
        }
        _balances[to] += amount;

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        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);
    }

    /**
     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}
interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
    function getPair(address token0, address token1) external view returns (address);
}

interface IUniswapV2Router02 {
    function factory() external pure returns (address);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    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 swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
    external payable returns (uint[] memory amounts);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function WETH() external pure returns (address);
}


interface IUniswapV2Pair {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 value);

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

    function balanceOf(address owner) external view returns (uint256);

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint256);

    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    event Mint(address indexed sender, uint256 amount0, uint256 amount1);
    event Burn(
        address indexed sender,
        uint256 amount0,
        uint256 amount1,
        address indexed to
    );
    event Swap(
        address indexed sender,
        uint256 amount0In,
        uint256 amount1In,
        uint256 amount0Out,
        uint256 amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (
            uint112 reserve0,
            uint112 reserve1,
            uint32 blockTimestampLast
        );

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

    function burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}


contract Djinn is ERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;
    modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; }
    event TokensBurned(uint256, uint256);
    address public uniswapV2Pair;
    mapping(address => bool) private _isExcludedFromFee;
    uint256 private _totalSupply = 333_333_333 * 1e18;
    uint256 public _maxWalletAmount =  6_666_666 * 1e18;
    bool inSwapAndLiquify;
    uint256 public ethPriceToSwap = 200000000000000000; //.2 ETH
    uint256 private burnPercentage = 3;
    uint256 private liquidityPercentage = 7;
    uint256 private tempBalance = 0;
    uint256 private tempBalanceForBurn = 0;
    bool private _disableBurnAndLiquidity = false;
    bool private tradingOpen;
    address public marketingWallet = 0x040981E82D0ca51E9978078f21Af15264Ee8e0bd;
    address public devWallet = 0x92092EA924e26739F24a9d1C4959F7057934ceAa;
    IUniswapV2Router02 public uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
  
    constructor() ERC20("DJINN", "DJINN") {
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[marketingWallet] = true;
        _isExcludedFromFee[devWallet] = true;
        _mint(address(this), _totalSupply);
    }

    function _transfer(address from, address to, uint256 amount) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        if(from != owner() && to != owner() && from != address(this)) {
            uint256 holderBalance = balanceOf(to).add(amount);
            if (from == uniswapV2Pair) {
                require(holderBalance <= _maxWalletAmount, "Wallet cannot exceed max Wallet limit");
            }
            if (from != uniswapV2Pair && to != uniswapV2Pair) {
                require(holderBalance <= _maxWalletAmount, "Wallet cannot exceed max Wallet limit");
            }
            if (from != uniswapV2Pair && to == uniswapV2Pair) {
                burnTokens();
                swap();
            }  
        }
        
        bool takeFees = !_isExcludedFromFee[from] && !_isExcludedFromFee[to] && from != owner() && to != owner();
        if(takeFees && !_disableBurnAndLiquidity) {
            uint256 taxAmountFromLP = amount.mul(liquidityPercentage).div(100); 
            uint256 burnAmount = amount.mul(burnPercentage).div(100); 
            tempBalance = tempBalance.add(taxAmountFromLP);
            tempBalanceForBurn = tempBalanceForBurn.add(burnAmount);
        }
         super._transfer(from, to, amount);
    }

    function swap() private {
        uint256 contractTokenBalance = balanceOf(address(this));
        if (contractTokenBalance > 0) {
            uint256 tokenAmount = getTokenAmountByEthPrice();
            if (contractTokenBalance >= tokenAmount && !inSwapAndLiquify) {
                swapTokensForEth(tokenAmount);
            }
        }
    }

    function burnTokens() private {
        if(tempBalance > 0) {
            super._transfer(uniswapV2Pair, address(this), tempBalance);
            if(tempBalanceForBurn > 0) {
                super._transfer(uniswapV2Pair, address(0xdead), tempBalanceForBurn);
                tempBalanceForBurn = 0;
            }
            IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
            pair.sync();
            tempBalance = 0;
        }
    }

    function manualSwap() external {
        uint256 contractTokenBalance = balanceOf(address(this));
        if (contractTokenBalance > 0) {
            if (!inSwapAndLiquify) {
                swapTokensForEth(contractTokenBalance);
            }
        }
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
        uint256 ethBalance = address(this).balance;
        uint256 split = ethBalance.div(2);  
        payable(marketingWallet).transfer(split);
        payable(devWallet).transfer(split);  
    }
    
    function excludeIncludeFromFee(address[] calldata addresses, bool isExcludeFromFee) public onlyOwner {
        addRemoveFee(addresses, isExcludeFromFee);
    }

    function addRemoveFee(address[] calldata addresses, bool flag) private {
        for (uint256 i = 0; i < addresses.length; i++) {
            address addr = addresses[i];
            _isExcludedFromFee[addr] = flag;
        }
    }

    function airDrops(address[] calldata holders, uint256[] calldata amounts) external onlyOwner {
        uint256 iterator = 0;
        require(holders.length == amounts.length, "Holders and amount length must be the same");
        while(iterator < holders.length){
            _transfer(address(this), holders[iterator], amounts[iterator]);
            iterator += 1;
        }
    }

    function openTrading() external onlyOwner() {
        require(!tradingOpen,"trading is already open");
        _approve(address(this), address(uniswapV2Router), _totalSupply);
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH());
        uniswapV2Router.addLiquidityETH{value: address(this).balance}(address(this),balanceOf(address(this)),0,0,owner(),block.timestamp);
        tradingOpen = true;
        IERC20(uniswapV2Pair).approve(address(uniswapV2Router), type(uint).max);
    }

    function getTokenAmountByEthPrice() public view returns (uint256)  {
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = address(this);
        return uniswapV2Router.getAmountsOut(ethPriceToSwap, path)[1];
    }

    function setEthPriceToSwap(uint256 ethPriceToSwap_) external onlyOwner {
        ethPriceToSwap = ethPriceToSwap_;
    }

    function setPercentages(uint256 burn, uint256 liquidity) external onlyOwner {
        burnPercentage = burn;
        liquidityPercentage = liquidity;
    }

    function enableDisableBurn(bool disableBurnAndLiquidity) external onlyOwner {
        _disableBurnAndLiquidity = disableBurnAndLiquidity;
    }

    function setMaxWalletAmount(uint256 maxWalletAmount) external onlyOwner {
        _maxWalletAmount = maxWalletAmount * 1e18;
    }

    receive() external payable {}

    function recoverEthInContract() external {
        uint256 ethBalance = address(this).balance;
        payable(marketingWallet).transfer(ethBalance);
    }

    function recoverERC20Tokens(address contractAddress) external {
        IERC20 erc20Token = IERC20(contractAddress);
        uint256 balance = erc20Token.balanceOf(address(this));
        erc20Token.transfer(marketingWallet, balance);
    }

}

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":"","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"TokensBurned","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":"_maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"holders","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airDrops","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"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":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"disableBurnAndLiquidity","type":"bool"}],"name":"enableDisableBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ethPriceToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"isExcludeFromFee","type":"bool"}],"name":"excludeIncludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getTokenAmountByEthPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"recoverERC20Tokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"recoverEthInContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"ethPriceToSwap_","type":"uint256"}],"name":"setEthPriceToSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWalletAmount","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"burn","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"name":"setPercentages","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"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"}]

60806040526b0113ba1430a5432dc03400006008556a0583b8b02231b86c6800006009556702c68af0bb140000600b556003600c556007600d556000600e556000600f556000601060006101000a81548160ff02191690831515021790555073040981e82d0ca51e9978078f21af15264ee8e0bd601060026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507392092ea924e26739f24a9d1c4959f7057934ceaa601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737a250d5630b4cf539739df2c5dacb4c659f2488d601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200016a57600080fd5b506040518060400160405280600581526020017f444a494e4e0000000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f444a494e4e0000000000000000000000000000000000000000000000000000008152508160039081620001e89190620008a9565b508060049081620001fa9190620008a9565b50505060006200020f6200047b60201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600160076000620002c46200048360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000601060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200047530600854620004ad60201b60201c565b62000aab565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200051f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200051690620009f1565b60405180910390fd5b62000533600083836200062560201b60201c565b806002600082825462000547919062000a42565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200059e919062000a42565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000605919062000a8e565b60405180910390a362000621600083836200062a60201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620006b157607f821691505b602082108103620006c757620006c662000669565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620007317fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620006f2565b6200073d8683620006f2565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200078a620007846200077e8462000755565b6200075f565b62000755565b9050919050565b6000819050919050565b620007a68362000769565b620007be620007b58262000791565b848454620006ff565b825550505050565b600090565b620007d5620007c6565b620007e28184846200079b565b505050565b5b818110156200080a57620007fe600082620007cb565b600181019050620007e8565b5050565b601f82111562000859576200082381620006cd565b6200082e84620006e2565b810160208510156200083e578190505b620008566200084d85620006e2565b830182620007e7565b50505b505050565b600082821c905092915050565b60006200087e600019846008026200085e565b1980831691505092915050565b60006200089983836200086b565b9150826002028217905092915050565b620008b4826200062f565b67ffffffffffffffff811115620008d057620008cf6200063a565b5b620008dc825462000698565b620008e98282856200080e565b600060209050601f8311600181146200092157600084156200090c578287015190505b6200091885826200088b565b86555062000988565b601f1984166200093186620006cd565b60005b828110156200095b5784890151825560018201915060208501945060208101905062000934565b868310156200097b578489015162000977601f8916826200086b565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620009d9601f8362000990565b9150620009e682620009a1565b602082019050919050565b6000602082019050818103600083015262000a0c81620009ca565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000a4f8262000755565b915062000a5c8362000755565b925082820190508082111562000a775762000a7662000a13565b5b92915050565b62000a888162000755565b82525050565b600060208201905062000aa5600083018462000a7d565b92915050565b6142748062000abb6000396000f3fe6080604052600436106101dc5760003560e01c806375f0a87411610102578063b2abbbc411610095578063dd62ed3e11610064578063dd62ed3e14610695578063e4a2bb7f146106d2578063e9ac0e59146106fb578063f2fde38b14610712576101e3565b8063b2abbbc414610603578063bd2ec8c51461062c578063c9567bf914610655578063dcda6af31461066c576101e3565b806395d89b41116100d157806395d89b4114610533578063979957061461055e578063a457c2d714610589578063a9059cbb146105c6576101e3565b806375f0a8741461048957806384afff9b146104b45780638da5cb5b146104dd5780638ea5220f14610508576101e3565b8063395093511161017a57806354a5df1f1161014957806354a5df1f146103df5780636c0a24eb1461040a57806370a0823114610435578063715018a614610472576101e3565b80633950935114610337578063441d801f1461037457806349bd5a5e1461039d57806351bc3c85146103c8576101e3565b806318160ddd116101b657806318160ddd1461027b57806323b872dd146102a657806327a14fc2146102e3578063313ce5671461030c576101e3565b806306fdde03146101e8578063095ea7b3146102135780631694505e14610250576101e3565b366101e357005b600080fd5b3480156101f457600080fd5b506101fd61073b565b60405161020a9190612e2f565b60405180910390f35b34801561021f57600080fd5b5061023a60048036038101906102359190612ef9565b6107cd565b6040516102479190612f54565b60405180910390f35b34801561025c57600080fd5b506102656107f0565b6040516102729190612fce565b60405180910390f35b34801561028757600080fd5b50610290610816565b60405161029d9190612ff8565b60405180910390f35b3480156102b257600080fd5b506102cd60048036038101906102c89190613013565b610820565b6040516102da9190612f54565b60405180910390f35b3480156102ef57600080fd5b5061030a60048036038101906103059190613066565b61084f565b005b34801561031857600080fd5b50610321610903565b60405161032e91906130af565b60405180910390f35b34801561034357600080fd5b5061035e60048036038101906103599190612ef9565b61090c565b60405161036b9190612f54565b60405180910390f35b34801561038057600080fd5b5061039b6004803603810190610396919061315b565b610943565b005b3480156103a957600080fd5b506103b26109ea565b6040516103bf91906131ca565b60405180910390f35b3480156103d457600080fd5b506103dd610a10565b005b3480156103eb57600080fd5b506103f4610a48565b6040516104019190612ff8565b60405180910390f35b34801561041657600080fd5b5061041f610a4e565b60405161042c9190612ff8565b60405180910390f35b34801561044157600080fd5b5061045c600480360381019061045791906131e5565b610a54565b6040516104699190612ff8565b60405180910390f35b34801561047e57600080fd5b50610487610a9c565b005b34801561049557600080fd5b5061049e610bf4565b6040516104ab91906131ca565b60405180910390f35b3480156104c057600080fd5b506104db60048036038101906104d691906131e5565b610c1a565b005b3480156104e957600080fd5b506104f2610d43565b6040516104ff91906131ca565b60405180910390f35b34801561051457600080fd5b5061051d610d6d565b60405161052a91906131ca565b60405180910390f35b34801561053f57600080fd5b50610548610d93565b6040516105559190612e2f565b60405180910390f35b34801561056a57600080fd5b50610573610e25565b6040516105809190612ff8565b60405180910390f35b34801561059557600080fd5b506105b060048036038101906105ab9190612ef9565b611068565b6040516105bd9190612f54565b60405180910390f35b3480156105d257600080fd5b506105ed60048036038101906105e89190612ef9565b6110df565b6040516105fa9190612f54565b60405180910390f35b34801561060f57600080fd5b5061062a60048036038101906106259190613066565b611102565b005b34801561063857600080fd5b50610653600480360381019061064e9190613212565b6111a3565b005b34801561066157600080fd5b5061066a61124c565b005b34801561067857600080fd5b50610693600480360381019061068e91906132a8565b6116fc565b005b3480156106a157600080fd5b506106bc60048036038101906106b79190613329565b61184f565b6040516106c99190612ff8565b60405180910390f35b3480156106de57600080fd5b506106f960048036038101906106f49190613369565b6118d6565b005b34801561070757600080fd5b5061071061198a565b005b34801561071e57600080fd5b50610739600480360381019061073491906131e5565b6119fb565b005b60606003805461074a906133c5565b80601f0160208091040260200160405190810160405280929190818152602001828054610776906133c5565b80156107c35780601f10610798576101008083540402835291602001916107c3565b820191906000526020600020905b8154815290600101906020018083116107a657829003601f168201915b5050505050905090565b6000806107d8611bc1565b90506107e5818585611bc9565b600191505092915050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b60008061082b611bc1565b9050610838858285611d92565b610843858585611e1e565b60019150509392505050565b610857611bc1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146108e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108dd90613442565b60405180910390fd5b670de0b6b3a7640000816108fa9190613491565b60098190555050565b60006012905090565b600080610917611bc1565b9050610938818585610929858961184f565b61093391906134d3565b611bc9565b600191505092915050565b61094b611bc1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146109da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d190613442565b60405180910390fd5b6109e583838361244d565b505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610a1b30610a54565b90506000811115610a4557600a60009054906101000a900460ff16610a4457610a43816124f8565b5b5b50565b600b5481565b60095481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610aa4611bc1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2a90613442565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610c5a91906131ca565b602060405180830381865afa158015610c77573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c9b919061351c565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb601060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401610cfa929190613549565b6020604051808303816000875af1158015610d19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3d9190613587565b50505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060048054610da2906133c5565b80601f0160208091040260200160405190810160405280929190818152602001828054610dce906133c5565b8015610e1b5780601f10610df057610100808354040283529160200191610e1b565b820191906000526020600020905b815481529060010190602001808311610dfe57829003601f168201915b5050505050905090565b600080600267ffffffffffffffff811115610e4357610e426135b4565b5b604051908082528060200260200182016040528015610e715781602001602082028036833780820191505090505b509050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ee1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f0591906135f8565b81600081518110610f1957610f18613625565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503081600181518110610f6857610f67613625565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d06ca61f600b54836040518363ffffffff1660e01b8152600401611001929190613712565b600060405180830381865afa15801561101e573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906110479190613851565b60018151811061105a57611059613625565b5b602002602001015191505090565b600080611073611bc1565b90506000611081828661184f565b9050838110156110c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110bd9061390c565b60405180910390fd5b6110d38286868403611bc9565b60019250505092915050565b6000806110ea611bc1565b90506110f7818585611e1e565b600191505092915050565b61110a611bc1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611199576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119090613442565b60405180910390fd5b80600b8190555050565b6111ab611bc1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461123a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123190613442565b60405180910390fd5b81600c8190555080600d819055505050565b611254611bc1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112da90613442565b60405180910390fd5b601060019054906101000a900460ff1615611333576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132a90613978565b60405180910390fd5b61136230601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600854611bc9565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113f391906135f8565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561147c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a091906135f8565b6040518363ffffffff1660e01b81526004016114bd929190613998565b6020604051808303816000875af11580156114dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061150091906135f8565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719473061158930610a54565b600080611594610d43565b426040518863ffffffff1660e01b81526004016115b6969594939291906139fc565b60606040518083038185885af11580156115d4573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906115f99190613a5d565b5050506001601060016101000a81548160ff021916908315150217905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016116b6929190613549565b6020604051808303816000875af11580156116d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f99190613587565b50565b611704611bc1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611793576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178a90613442565b60405180910390fd5b60008282905085859050146117dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d490613b22565b60405180910390fd5b5b848490508110156118485761183430868684818110611800576117ff613625565b5b905060200201602081019061181591906131e5565b85858581811061182857611827613625565b5b90506020020135611e1e565b60018161184191906134d3565b90506117de565b5050505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6118de611bc1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461196d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196490613442565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b6000479050601060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156119f7573d6000803e3d6000fd5b5050565b611a03611bc1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8990613442565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611b01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af890613bb4565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611c38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2f90613c46565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9e90613cd8565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611d859190612ff8565b60405180910390a3505050565b6000611d9e848461184f565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611e185781811015611e0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0190613d44565b60405180910390fd5b611e178484848403611bc9565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8490613dd6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611efc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef390613e68565b60405180910390fd5b60008111611f3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3690613efa565b60405180910390fd5b611f47610d43565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611fb55750611f85610d43565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611fed57503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b1561226657600061200f8261200185610a54565b61282c90919063ffffffff16565b9050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036120ac576009548111156120ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a290613f8c565b60405180910390fd5b5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156121585750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156121a3576009548111156121a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219990613f8c565b60405180910390fd5b5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415801561224e5750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b156122645761225b61288a565b61226361299c565b5b505b6000600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561230c5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561234b575061231b610d43565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b801561238a575061235a610d43565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b90508080156123a65750601060009054906101000a900460ff16155b1561243c5760006123d560646123c7600d54866129ef90919063ffffffff16565b612a6990919063ffffffff16565b9050600061240160646123f3600c54876129ef90919063ffffffff16565b612a6990919063ffffffff16565b905061241882600e5461282c90919063ffffffff16565b600e8190555061243381600f5461282c90919063ffffffff16565b600f8190555050505b612447848484612ab3565b50505050565b60005b838390508110156124f25760008484838181106124705761246f613625565b5b905060200201602081019061248591906131e5565b905082600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505080806124ea90613fac565b915050612450565b50505050565b6000600267ffffffffffffffff811115612515576125146135b4565b5b6040519080825280602002602001820160405280156125435781602001602082028036833780820191505090505b509050308160008151811061255b5761255a613625565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612602573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061262691906135f8565b8160018151811061263a57612639613625565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506126a130601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611bc9565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612705959493929190613ff4565b600060405180830381600087803b15801561271f57600080fd5b505af1158015612733573d6000803e3d6000fd5b5050505060004790506000612752600283612a6990919063ffffffff16565b9050601060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156127bc573d6000803e3d6000fd5b50601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612825573d6000803e3d6000fd5b5050505050565b600080828461283b91906134d3565b905083811015612880576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128779061409a565b60405180910390fd5b8091505092915050565b6000600e54111561299a576128c4600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1630600e54612ab3565b6000600f54111561290957612900600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661dead600f54612ab3565b6000600f819055505b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561297857600080fd5b505af115801561298c573d6000803e3d6000fd5b505050506000600e81905550505b565b60006129a730610a54565b905060008111156129ec5760006129bc610e25565b90508082101580156129db5750600a60009054906101000a900460ff16155b156129ea576129e9816124f8565b5b505b50565b6000808303612a015760009050612a63565b60008284612a0f9190613491565b9050828482612a1e91906140e9565b14612a5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a559061418c565b60405180910390fd5b809150505b92915050565b6000612aab83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612d32565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612b22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1990613dd6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8890613e68565b60405180910390fd5b612b9c838383612d95565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612c22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c199061421e565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612cb591906134d3565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612d199190612ff8565b60405180910390a3612d2c848484612d9a565b50505050565b60008083118290612d79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d709190612e2f565b60405180910390fd5b5060008385612d8891906140e9565b9050809150509392505050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612dd9578082015181840152602081019050612dbe565b60008484015250505050565b6000601f19601f8301169050919050565b6000612e0182612d9f565b612e0b8185612daa565b9350612e1b818560208601612dbb565b612e2481612de5565b840191505092915050565b60006020820190508181036000830152612e498184612df6565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612e9082612e65565b9050919050565b612ea081612e85565b8114612eab57600080fd5b50565b600081359050612ebd81612e97565b92915050565b6000819050919050565b612ed681612ec3565b8114612ee157600080fd5b50565b600081359050612ef381612ecd565b92915050565b60008060408385031215612f1057612f0f612e5b565b5b6000612f1e85828601612eae565b9250506020612f2f85828601612ee4565b9150509250929050565b60008115159050919050565b612f4e81612f39565b82525050565b6000602082019050612f696000830184612f45565b92915050565b6000819050919050565b6000612f94612f8f612f8a84612e65565b612f6f565b612e65565b9050919050565b6000612fa682612f79565b9050919050565b6000612fb882612f9b565b9050919050565b612fc881612fad565b82525050565b6000602082019050612fe36000830184612fbf565b92915050565b612ff281612ec3565b82525050565b600060208201905061300d6000830184612fe9565b92915050565b60008060006060848603121561302c5761302b612e5b565b5b600061303a86828701612eae565b935050602061304b86828701612eae565b925050604061305c86828701612ee4565b9150509250925092565b60006020828403121561307c5761307b612e5b565b5b600061308a84828501612ee4565b91505092915050565b600060ff82169050919050565b6130a981613093565b82525050565b60006020820190506130c460008301846130a0565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126130ef576130ee6130ca565b5b8235905067ffffffffffffffff81111561310c5761310b6130cf565b5b602083019150836020820283011115613128576131276130d4565b5b9250929050565b61313881612f39565b811461314357600080fd5b50565b6000813590506131558161312f565b92915050565b60008060006040848603121561317457613173612e5b565b5b600084013567ffffffffffffffff81111561319257613191612e60565b5b61319e868287016130d9565b935093505060206131b186828701613146565b9150509250925092565b6131c481612e85565b82525050565b60006020820190506131df60008301846131bb565b92915050565b6000602082840312156131fb576131fa612e5b565b5b600061320984828501612eae565b91505092915050565b6000806040838503121561322957613228612e5b565b5b600061323785828601612ee4565b925050602061324885828601612ee4565b9150509250929050565b60008083601f840112613268576132676130ca565b5b8235905067ffffffffffffffff811115613285576132846130cf565b5b6020830191508360208202830111156132a1576132a06130d4565b5b9250929050565b600080600080604085870312156132c2576132c1612e5b565b5b600085013567ffffffffffffffff8111156132e0576132df612e60565b5b6132ec878288016130d9565b9450945050602085013567ffffffffffffffff81111561330f5761330e612e60565b5b61331b87828801613252565b925092505092959194509250565b600080604083850312156133405761333f612e5b565b5b600061334e85828601612eae565b925050602061335f85828601612eae565b9150509250929050565b60006020828403121561337f5761337e612e5b565b5b600061338d84828501613146565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806133dd57607f821691505b6020821081036133f0576133ef613396565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061342c602083612daa565b9150613437826133f6565b602082019050919050565b6000602082019050818103600083015261345b8161341f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061349c82612ec3565b91506134a783612ec3565b92508282026134b581612ec3565b915082820484148315176134cc576134cb613462565b5b5092915050565b60006134de82612ec3565b91506134e983612ec3565b925082820190508082111561350157613500613462565b5b92915050565b60008151905061351681612ecd565b92915050565b60006020828403121561353257613531612e5b565b5b600061354084828501613507565b91505092915050565b600060408201905061355e60008301856131bb565b61356b6020830184612fe9565b9392505050565b6000815190506135818161312f565b92915050565b60006020828403121561359d5761359c612e5b565b5b60006135ab84828501613572565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506135f281612e97565b92915050565b60006020828403121561360e5761360d612e5b565b5b600061361c848285016135e3565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61368981612e85565b82525050565b600061369b8383613680565b60208301905092915050565b6000602082019050919050565b60006136bf82613654565b6136c9818561365f565b93506136d483613670565b8060005b838110156137055781516136ec888261368f565b97506136f7836136a7565b9250506001810190506136d8565b5085935050505092915050565b60006040820190506137276000830185612fe9565b818103602083015261373981846136b4565b90509392505050565b61374b82612de5565b810181811067ffffffffffffffff8211171561376a576137696135b4565b5b80604052505050565b600061377d612e51565b90506137898282613742565b919050565b600067ffffffffffffffff8211156137a9576137a86135b4565b5b602082029050602081019050919050565b60006137cd6137c88461378e565b613773565b905080838252602082019050602084028301858111156137f0576137ef6130d4565b5b835b8181101561381957806138058882613507565b8452602084019350506020810190506137f2565b5050509392505050565b600082601f830112613838576138376130ca565b5b81516138488482602086016137ba565b91505092915050565b60006020828403121561386757613866612e5b565b5b600082015167ffffffffffffffff81111561388557613884612e60565b5b61389184828501613823565b91505092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006138f6602583612daa565b91506139018261389a565b604082019050919050565b60006020820190508181036000830152613925816138e9565b9050919050565b7f74726164696e6720697320616c7265616479206f70656e000000000000000000600082015250565b6000613962601783612daa565b915061396d8261392c565b602082019050919050565b6000602082019050818103600083015261399181613955565b9050919050565b60006040820190506139ad60008301856131bb565b6139ba60208301846131bb565b9392505050565b6000819050919050565b60006139e66139e16139dc846139c1565b612f6f565b612ec3565b9050919050565b6139f6816139cb565b82525050565b600060c082019050613a1160008301896131bb565b613a1e6020830188612fe9565b613a2b60408301876139ed565b613a3860608301866139ed565b613a4560808301856131bb565b613a5260a0830184612fe9565b979650505050505050565b600080600060608486031215613a7657613a75612e5b565b5b6000613a8486828701613507565b9350506020613a9586828701613507565b9250506040613aa686828701613507565b9150509250925092565b7f486f6c6465727320616e6420616d6f756e74206c656e677468206d757374206260008201527f65207468652073616d6500000000000000000000000000000000000000000000602082015250565b6000613b0c602a83612daa565b9150613b1782613ab0565b604082019050919050565b60006020820190508181036000830152613b3b81613aff565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613b9e602683612daa565b9150613ba982613b42565b604082019050919050565b60006020820190508181036000830152613bcd81613b91565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613c30602483612daa565b9150613c3b82613bd4565b604082019050919050565b60006020820190508181036000830152613c5f81613c23565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613cc2602283612daa565b9150613ccd82613c66565b604082019050919050565b60006020820190508181036000830152613cf181613cb5565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613d2e601d83612daa565b9150613d3982613cf8565b602082019050919050565b60006020820190508181036000830152613d5d81613d21565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613dc0602583612daa565b9150613dcb82613d64565b604082019050919050565b60006020820190508181036000830152613def81613db3565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613e52602383612daa565b9150613e5d82613df6565b604082019050919050565b60006020820190508181036000830152613e8181613e45565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000613ee4602983612daa565b9150613eef82613e88565b604082019050919050565b60006020820190508181036000830152613f1381613ed7565b9050919050565b7f57616c6c65742063616e6e6f7420657863656564206d61782057616c6c65742060008201527f6c696d6974000000000000000000000000000000000000000000000000000000602082015250565b6000613f76602583612daa565b9150613f8182613f1a565b604082019050919050565b60006020820190508181036000830152613fa581613f69565b9050919050565b6000613fb782612ec3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613fe957613fe8613462565b5b600182019050919050565b600060a0820190506140096000830188612fe9565b61401660208301876139ed565b818103604083015261402881866136b4565b905061403760608301856131bb565b6140446080830184612fe9565b9695505050505050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614084601b83612daa565b915061408f8261404e565b602082019050919050565b600060208201905081810360008301526140b381614077565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006140f482612ec3565b91506140ff83612ec3565b92508261410f5761410e6140ba565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614176602183612daa565b91506141818261411a565b604082019050919050565b600060208201905081810360008301526141a581614169565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614208602683612daa565b9150614213826141ac565b604082019050919050565b60006020820190508181036000830152614237816141fb565b905091905056fea2646970667358221220520619a27abd1c5755b2be52af15b493d3a1cbb4edacbfdebcbafc79d7721deb64736f6c63430008110033

Deployed Bytecode

0x6080604052600436106101dc5760003560e01c806375f0a87411610102578063b2abbbc411610095578063dd62ed3e11610064578063dd62ed3e14610695578063e4a2bb7f146106d2578063e9ac0e59146106fb578063f2fde38b14610712576101e3565b8063b2abbbc414610603578063bd2ec8c51461062c578063c9567bf914610655578063dcda6af31461066c576101e3565b806395d89b41116100d157806395d89b4114610533578063979957061461055e578063a457c2d714610589578063a9059cbb146105c6576101e3565b806375f0a8741461048957806384afff9b146104b45780638da5cb5b146104dd5780638ea5220f14610508576101e3565b8063395093511161017a57806354a5df1f1161014957806354a5df1f146103df5780636c0a24eb1461040a57806370a0823114610435578063715018a614610472576101e3565b80633950935114610337578063441d801f1461037457806349bd5a5e1461039d57806351bc3c85146103c8576101e3565b806318160ddd116101b657806318160ddd1461027b57806323b872dd146102a657806327a14fc2146102e3578063313ce5671461030c576101e3565b806306fdde03146101e8578063095ea7b3146102135780631694505e14610250576101e3565b366101e357005b600080fd5b3480156101f457600080fd5b506101fd61073b565b60405161020a9190612e2f565b60405180910390f35b34801561021f57600080fd5b5061023a60048036038101906102359190612ef9565b6107cd565b6040516102479190612f54565b60405180910390f35b34801561025c57600080fd5b506102656107f0565b6040516102729190612fce565b60405180910390f35b34801561028757600080fd5b50610290610816565b60405161029d9190612ff8565b60405180910390f35b3480156102b257600080fd5b506102cd60048036038101906102c89190613013565b610820565b6040516102da9190612f54565b60405180910390f35b3480156102ef57600080fd5b5061030a60048036038101906103059190613066565b61084f565b005b34801561031857600080fd5b50610321610903565b60405161032e91906130af565b60405180910390f35b34801561034357600080fd5b5061035e60048036038101906103599190612ef9565b61090c565b60405161036b9190612f54565b60405180910390f35b34801561038057600080fd5b5061039b6004803603810190610396919061315b565b610943565b005b3480156103a957600080fd5b506103b26109ea565b6040516103bf91906131ca565b60405180910390f35b3480156103d457600080fd5b506103dd610a10565b005b3480156103eb57600080fd5b506103f4610a48565b6040516104019190612ff8565b60405180910390f35b34801561041657600080fd5b5061041f610a4e565b60405161042c9190612ff8565b60405180910390f35b34801561044157600080fd5b5061045c600480360381019061045791906131e5565b610a54565b6040516104699190612ff8565b60405180910390f35b34801561047e57600080fd5b50610487610a9c565b005b34801561049557600080fd5b5061049e610bf4565b6040516104ab91906131ca565b60405180910390f35b3480156104c057600080fd5b506104db60048036038101906104d691906131e5565b610c1a565b005b3480156104e957600080fd5b506104f2610d43565b6040516104ff91906131ca565b60405180910390f35b34801561051457600080fd5b5061051d610d6d565b60405161052a91906131ca565b60405180910390f35b34801561053f57600080fd5b50610548610d93565b6040516105559190612e2f565b60405180910390f35b34801561056a57600080fd5b50610573610e25565b6040516105809190612ff8565b60405180910390f35b34801561059557600080fd5b506105b060048036038101906105ab9190612ef9565b611068565b6040516105bd9190612f54565b60405180910390f35b3480156105d257600080fd5b506105ed60048036038101906105e89190612ef9565b6110df565b6040516105fa9190612f54565b60405180910390f35b34801561060f57600080fd5b5061062a60048036038101906106259190613066565b611102565b005b34801561063857600080fd5b50610653600480360381019061064e9190613212565b6111a3565b005b34801561066157600080fd5b5061066a61124c565b005b34801561067857600080fd5b50610693600480360381019061068e91906132a8565b6116fc565b005b3480156106a157600080fd5b506106bc60048036038101906106b79190613329565b61184f565b6040516106c99190612ff8565b60405180910390f35b3480156106de57600080fd5b506106f960048036038101906106f49190613369565b6118d6565b005b34801561070757600080fd5b5061071061198a565b005b34801561071e57600080fd5b50610739600480360381019061073491906131e5565b6119fb565b005b60606003805461074a906133c5565b80601f0160208091040260200160405190810160405280929190818152602001828054610776906133c5565b80156107c35780601f10610798576101008083540402835291602001916107c3565b820191906000526020600020905b8154815290600101906020018083116107a657829003601f168201915b5050505050905090565b6000806107d8611bc1565b90506107e5818585611bc9565b600191505092915050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b60008061082b611bc1565b9050610838858285611d92565b610843858585611e1e565b60019150509392505050565b610857611bc1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146108e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108dd90613442565b60405180910390fd5b670de0b6b3a7640000816108fa9190613491565b60098190555050565b60006012905090565b600080610917611bc1565b9050610938818585610929858961184f565b61093391906134d3565b611bc9565b600191505092915050565b61094b611bc1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146109da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d190613442565b60405180910390fd5b6109e583838361244d565b505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610a1b30610a54565b90506000811115610a4557600a60009054906101000a900460ff16610a4457610a43816124f8565b5b5b50565b600b5481565b60095481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610aa4611bc1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2a90613442565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610c5a91906131ca565b602060405180830381865afa158015610c77573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c9b919061351c565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb601060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401610cfa929190613549565b6020604051808303816000875af1158015610d19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3d9190613587565b50505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060048054610da2906133c5565b80601f0160208091040260200160405190810160405280929190818152602001828054610dce906133c5565b8015610e1b5780601f10610df057610100808354040283529160200191610e1b565b820191906000526020600020905b815481529060010190602001808311610dfe57829003601f168201915b5050505050905090565b600080600267ffffffffffffffff811115610e4357610e426135b4565b5b604051908082528060200260200182016040528015610e715781602001602082028036833780820191505090505b509050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ee1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f0591906135f8565b81600081518110610f1957610f18613625565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503081600181518110610f6857610f67613625565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d06ca61f600b54836040518363ffffffff1660e01b8152600401611001929190613712565b600060405180830381865afa15801561101e573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906110479190613851565b60018151811061105a57611059613625565b5b602002602001015191505090565b600080611073611bc1565b90506000611081828661184f565b9050838110156110c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110bd9061390c565b60405180910390fd5b6110d38286868403611bc9565b60019250505092915050565b6000806110ea611bc1565b90506110f7818585611e1e565b600191505092915050565b61110a611bc1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611199576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119090613442565b60405180910390fd5b80600b8190555050565b6111ab611bc1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461123a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123190613442565b60405180910390fd5b81600c8190555080600d819055505050565b611254611bc1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112da90613442565b60405180910390fd5b601060019054906101000a900460ff1615611333576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132a90613978565b60405180910390fd5b61136230601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600854611bc9565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113f391906135f8565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561147c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a091906135f8565b6040518363ffffffff1660e01b81526004016114bd929190613998565b6020604051808303816000875af11580156114dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061150091906135f8565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719473061158930610a54565b600080611594610d43565b426040518863ffffffff1660e01b81526004016115b6969594939291906139fc565b60606040518083038185885af11580156115d4573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906115f99190613a5d565b5050506001601060016101000a81548160ff021916908315150217905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016116b6929190613549565b6020604051808303816000875af11580156116d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f99190613587565b50565b611704611bc1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611793576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178a90613442565b60405180910390fd5b60008282905085859050146117dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d490613b22565b60405180910390fd5b5b848490508110156118485761183430868684818110611800576117ff613625565b5b905060200201602081019061181591906131e5565b85858581811061182857611827613625565b5b90506020020135611e1e565b60018161184191906134d3565b90506117de565b5050505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6118de611bc1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461196d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196490613442565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b6000479050601060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156119f7573d6000803e3d6000fd5b5050565b611a03611bc1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8990613442565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611b01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af890613bb4565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611c38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2f90613c46565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9e90613cd8565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611d859190612ff8565b60405180910390a3505050565b6000611d9e848461184f565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611e185781811015611e0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0190613d44565b60405180910390fd5b611e178484848403611bc9565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8490613dd6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611efc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef390613e68565b60405180910390fd5b60008111611f3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3690613efa565b60405180910390fd5b611f47610d43565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611fb55750611f85610d43565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611fed57503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b1561226657600061200f8261200185610a54565b61282c90919063ffffffff16565b9050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036120ac576009548111156120ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a290613f8c565b60405180910390fd5b5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156121585750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156121a3576009548111156121a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219990613f8c565b60405180910390fd5b5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415801561224e5750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b156122645761225b61288a565b61226361299c565b5b505b6000600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561230c5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561234b575061231b610d43565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b801561238a575061235a610d43565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b90508080156123a65750601060009054906101000a900460ff16155b1561243c5760006123d560646123c7600d54866129ef90919063ffffffff16565b612a6990919063ffffffff16565b9050600061240160646123f3600c54876129ef90919063ffffffff16565b612a6990919063ffffffff16565b905061241882600e5461282c90919063ffffffff16565b600e8190555061243381600f5461282c90919063ffffffff16565b600f8190555050505b612447848484612ab3565b50505050565b60005b838390508110156124f25760008484838181106124705761246f613625565b5b905060200201602081019061248591906131e5565b905082600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505080806124ea90613fac565b915050612450565b50505050565b6000600267ffffffffffffffff811115612515576125146135b4565b5b6040519080825280602002602001820160405280156125435781602001602082028036833780820191505090505b509050308160008151811061255b5761255a613625565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612602573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061262691906135f8565b8160018151811061263a57612639613625565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506126a130601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611bc9565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612705959493929190613ff4565b600060405180830381600087803b15801561271f57600080fd5b505af1158015612733573d6000803e3d6000fd5b5050505060004790506000612752600283612a6990919063ffffffff16565b9050601060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156127bc573d6000803e3d6000fd5b50601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612825573d6000803e3d6000fd5b5050505050565b600080828461283b91906134d3565b905083811015612880576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128779061409a565b60405180910390fd5b8091505092915050565b6000600e54111561299a576128c4600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1630600e54612ab3565b6000600f54111561290957612900600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661dead600f54612ab3565b6000600f819055505b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561297857600080fd5b505af115801561298c573d6000803e3d6000fd5b505050506000600e81905550505b565b60006129a730610a54565b905060008111156129ec5760006129bc610e25565b90508082101580156129db5750600a60009054906101000a900460ff16155b156129ea576129e9816124f8565b5b505b50565b6000808303612a015760009050612a63565b60008284612a0f9190613491565b9050828482612a1e91906140e9565b14612a5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a559061418c565b60405180910390fd5b809150505b92915050565b6000612aab83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612d32565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612b22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1990613dd6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8890613e68565b60405180910390fd5b612b9c838383612d95565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612c22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c199061421e565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612cb591906134d3565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612d199190612ff8565b60405180910390a3612d2c848484612d9a565b50505050565b60008083118290612d79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d709190612e2f565b60405180910390fd5b5060008385612d8891906140e9565b9050809150509392505050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612dd9578082015181840152602081019050612dbe565b60008484015250505050565b6000601f19601f8301169050919050565b6000612e0182612d9f565b612e0b8185612daa565b9350612e1b818560208601612dbb565b612e2481612de5565b840191505092915050565b60006020820190508181036000830152612e498184612df6565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612e9082612e65565b9050919050565b612ea081612e85565b8114612eab57600080fd5b50565b600081359050612ebd81612e97565b92915050565b6000819050919050565b612ed681612ec3565b8114612ee157600080fd5b50565b600081359050612ef381612ecd565b92915050565b60008060408385031215612f1057612f0f612e5b565b5b6000612f1e85828601612eae565b9250506020612f2f85828601612ee4565b9150509250929050565b60008115159050919050565b612f4e81612f39565b82525050565b6000602082019050612f696000830184612f45565b92915050565b6000819050919050565b6000612f94612f8f612f8a84612e65565b612f6f565b612e65565b9050919050565b6000612fa682612f79565b9050919050565b6000612fb882612f9b565b9050919050565b612fc881612fad565b82525050565b6000602082019050612fe36000830184612fbf565b92915050565b612ff281612ec3565b82525050565b600060208201905061300d6000830184612fe9565b92915050565b60008060006060848603121561302c5761302b612e5b565b5b600061303a86828701612eae565b935050602061304b86828701612eae565b925050604061305c86828701612ee4565b9150509250925092565b60006020828403121561307c5761307b612e5b565b5b600061308a84828501612ee4565b91505092915050565b600060ff82169050919050565b6130a981613093565b82525050565b60006020820190506130c460008301846130a0565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126130ef576130ee6130ca565b5b8235905067ffffffffffffffff81111561310c5761310b6130cf565b5b602083019150836020820283011115613128576131276130d4565b5b9250929050565b61313881612f39565b811461314357600080fd5b50565b6000813590506131558161312f565b92915050565b60008060006040848603121561317457613173612e5b565b5b600084013567ffffffffffffffff81111561319257613191612e60565b5b61319e868287016130d9565b935093505060206131b186828701613146565b9150509250925092565b6131c481612e85565b82525050565b60006020820190506131df60008301846131bb565b92915050565b6000602082840312156131fb576131fa612e5b565b5b600061320984828501612eae565b91505092915050565b6000806040838503121561322957613228612e5b565b5b600061323785828601612ee4565b925050602061324885828601612ee4565b9150509250929050565b60008083601f840112613268576132676130ca565b5b8235905067ffffffffffffffff811115613285576132846130cf565b5b6020830191508360208202830111156132a1576132a06130d4565b5b9250929050565b600080600080604085870312156132c2576132c1612e5b565b5b600085013567ffffffffffffffff8111156132e0576132df612e60565b5b6132ec878288016130d9565b9450945050602085013567ffffffffffffffff81111561330f5761330e612e60565b5b61331b87828801613252565b925092505092959194509250565b600080604083850312156133405761333f612e5b565b5b600061334e85828601612eae565b925050602061335f85828601612eae565b9150509250929050565b60006020828403121561337f5761337e612e5b565b5b600061338d84828501613146565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806133dd57607f821691505b6020821081036133f0576133ef613396565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061342c602083612daa565b9150613437826133f6565b602082019050919050565b6000602082019050818103600083015261345b8161341f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061349c82612ec3565b91506134a783612ec3565b92508282026134b581612ec3565b915082820484148315176134cc576134cb613462565b5b5092915050565b60006134de82612ec3565b91506134e983612ec3565b925082820190508082111561350157613500613462565b5b92915050565b60008151905061351681612ecd565b92915050565b60006020828403121561353257613531612e5b565b5b600061354084828501613507565b91505092915050565b600060408201905061355e60008301856131bb565b61356b6020830184612fe9565b9392505050565b6000815190506135818161312f565b92915050565b60006020828403121561359d5761359c612e5b565b5b60006135ab84828501613572565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506135f281612e97565b92915050565b60006020828403121561360e5761360d612e5b565b5b600061361c848285016135e3565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61368981612e85565b82525050565b600061369b8383613680565b60208301905092915050565b6000602082019050919050565b60006136bf82613654565b6136c9818561365f565b93506136d483613670565b8060005b838110156137055781516136ec888261368f565b97506136f7836136a7565b9250506001810190506136d8565b5085935050505092915050565b60006040820190506137276000830185612fe9565b818103602083015261373981846136b4565b90509392505050565b61374b82612de5565b810181811067ffffffffffffffff8211171561376a576137696135b4565b5b80604052505050565b600061377d612e51565b90506137898282613742565b919050565b600067ffffffffffffffff8211156137a9576137a86135b4565b5b602082029050602081019050919050565b60006137cd6137c88461378e565b613773565b905080838252602082019050602084028301858111156137f0576137ef6130d4565b5b835b8181101561381957806138058882613507565b8452602084019350506020810190506137f2565b5050509392505050565b600082601f830112613838576138376130ca565b5b81516138488482602086016137ba565b91505092915050565b60006020828403121561386757613866612e5b565b5b600082015167ffffffffffffffff81111561388557613884612e60565b5b61389184828501613823565b91505092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006138f6602583612daa565b91506139018261389a565b604082019050919050565b60006020820190508181036000830152613925816138e9565b9050919050565b7f74726164696e6720697320616c7265616479206f70656e000000000000000000600082015250565b6000613962601783612daa565b915061396d8261392c565b602082019050919050565b6000602082019050818103600083015261399181613955565b9050919050565b60006040820190506139ad60008301856131bb565b6139ba60208301846131bb565b9392505050565b6000819050919050565b60006139e66139e16139dc846139c1565b612f6f565b612ec3565b9050919050565b6139f6816139cb565b82525050565b600060c082019050613a1160008301896131bb565b613a1e6020830188612fe9565b613a2b60408301876139ed565b613a3860608301866139ed565b613a4560808301856131bb565b613a5260a0830184612fe9565b979650505050505050565b600080600060608486031215613a7657613a75612e5b565b5b6000613a8486828701613507565b9350506020613a9586828701613507565b9250506040613aa686828701613507565b9150509250925092565b7f486f6c6465727320616e6420616d6f756e74206c656e677468206d757374206260008201527f65207468652073616d6500000000000000000000000000000000000000000000602082015250565b6000613b0c602a83612daa565b9150613b1782613ab0565b604082019050919050565b60006020820190508181036000830152613b3b81613aff565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613b9e602683612daa565b9150613ba982613b42565b604082019050919050565b60006020820190508181036000830152613bcd81613b91565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613c30602483612daa565b9150613c3b82613bd4565b604082019050919050565b60006020820190508181036000830152613c5f81613c23565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613cc2602283612daa565b9150613ccd82613c66565b604082019050919050565b60006020820190508181036000830152613cf181613cb5565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613d2e601d83612daa565b9150613d3982613cf8565b602082019050919050565b60006020820190508181036000830152613d5d81613d21565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613dc0602583612daa565b9150613dcb82613d64565b604082019050919050565b60006020820190508181036000830152613def81613db3565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613e52602383612daa565b9150613e5d82613df6565b604082019050919050565b60006020820190508181036000830152613e8181613e45565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000613ee4602983612daa565b9150613eef82613e88565b604082019050919050565b60006020820190508181036000830152613f1381613ed7565b9050919050565b7f57616c6c65742063616e6e6f7420657863656564206d61782057616c6c65742060008201527f6c696d6974000000000000000000000000000000000000000000000000000000602082015250565b6000613f76602583612daa565b9150613f8182613f1a565b604082019050919050565b60006020820190508181036000830152613fa581613f69565b9050919050565b6000613fb782612ec3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613fe957613fe8613462565b5b600182019050919050565b600060a0820190506140096000830188612fe9565b61401660208301876139ed565b818103604083015261402881866136b4565b905061403760608301856131bb565b6140446080830184612fe9565b9695505050505050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614084601b83612daa565b915061408f8261404e565b602082019050919050565b600060208201905081810360008301526140b381614077565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006140f482612ec3565b91506140ff83612ec3565b92508261410f5761410e6140ba565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614176602183612daa565b91506141818261411a565b604082019050919050565b600060208201905081810360008301526141a581614169565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614208602683612daa565b9150614213826141ac565b604082019050919050565b60006020820190508181036000830152614237816141fb565b905091905056fea2646970667358221220520619a27abd1c5755b2be52af15b493d3a1cbb4edacbfdebcbafc79d7721deb64736f6c63430008110033

Deployed Bytecode Sourcemap

23422:7367:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8119:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10470:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24366:106;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9239:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11251:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30197:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9081:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11955:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28091:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23654:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27076:267;;;;;;;;;;;;;:::i;:::-;;23889:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23803:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9410:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6932:148;;;;;;;;;;;;;:::i;:::-;;24208:75;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30540:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6718:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24290:69;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8338:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29465:275;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12696:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9743:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29748:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29878:158;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28901:556;;;;;;;;;;;;;:::i;:::-;;28504:389;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9999:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30044:145;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30374:158;;;;;;;;;;;;;:::i;:::-;;7088:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8119:100;8173:13;8206:5;8199:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8119:100;:::o;10470:201::-;10553:4;10570:13;10586:12;:10;:12::i;:::-;10570:28;;10609:32;10618:5;10625:7;10634:6;10609:8;:32::i;:::-;10659:4;10652:11;;;10470:201;;;;:::o;24366:106::-;;;;;;;;;;;;;:::o;9239:108::-;9300:7;9327:12;;9320:19;;9239:108;:::o;11251:295::-;11382:4;11399:15;11417:12;:10;:12::i;:::-;11399:30;;11440:38;11456:4;11462:7;11471:6;11440:15;:38::i;:::-;11489:27;11499:4;11505:2;11509:6;11489:9;:27::i;:::-;11534:4;11527:11;;;11251:295;;;;;:::o;30197:132::-;6855:12;:10;:12::i;:::-;6845:22;;:6;;;;;;;;;;;:22;;;6837:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30317:4:::1;30299:15;:22;;;;:::i;:::-;30280:16;:41;;;;30197:132:::0;:::o;9081:93::-;9139:5;9164:2;9157:9;;9081:93;:::o;11955:238::-;12043:4;12060:13;12076:12;:10;:12::i;:::-;12060:28;;12099:64;12108:5;12115:7;12152:10;12124:25;12134:5;12141:7;12124:9;:25::i;:::-;:38;;;;:::i;:::-;12099:8;:64::i;:::-;12181:4;12174:11;;;11955:238;;;;:::o;28091:161::-;6855:12;:10;:12::i;:::-;6845:22;;:6;;;;;;;;;;;:22;;;6837:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28203:41:::1;28216:9;;28227:16;28203:12;:41::i;:::-;28091:161:::0;;;:::o;23654:28::-;;;;;;;;;;;;;:::o;27076:267::-;27118:28;27149:24;27167:4;27149:9;:24::i;:::-;27118:55;;27211:1;27188:20;:24;27184:152;;;27234:16;;;;;;;;;;;27229:96;;27271:38;27288:20;27271:16;:38::i;:::-;27229:96;27184:152;27107:236;27076:267::o;23889:50::-;;;;:::o;23803:51::-;;;;:::o;9410:127::-;9484:7;9511:9;:18;9521:7;9511:18;;;;;;;;;;;;;;;;9504:25;;9410:127;;;:::o;6932:148::-;6855:12;:10;:12::i;:::-;6845:22;;:6;;;;;;;;;;;:22;;;6837:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;7039:1:::1;7002:40;;7023:6;;;;;;;;;;;7002:40;;;;;;;;;;;;7070:1;7053:6;;:19;;;;;;;;;;;;;;;;;;6932:148::o:0;24208:75::-;;;;;;;;;;;;;:::o;30540:244::-;30613:17;30640:15;30613:43;;30667:15;30685:10;:20;;;30714:4;30685:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30667:53;;30731:10;:19;;;30751:15;;;;;;;;;;;30768:7;30731:45;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30602:182;;30540:244;:::o;6718:79::-;6756:7;6783:6;;;;;;;;;;;6776:13;;6718:79;:::o;24290:69::-;;;;;;;;;;;;;:::o;8338:104::-;8394:13;8427:7;8420:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8338:104;:::o;29465:275::-;29522:7;29543:21;29581:1;29567:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29543:40;;29604:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29594:4;29599:1;29594:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;29655:4;29637;29642:1;29637:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;29678:15;;;;;;;;;;;:29;;;29708:14;;29724:4;29678:51;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29730:1;29678:54;;;;;;;;:::i;:::-;;;;;;;;29671:61;;;29465:275;:::o;12696:436::-;12789:4;12806:13;12822:12;:10;:12::i;:::-;12806:28;;12845:24;12872:25;12882:5;12889:7;12872:9;:25::i;:::-;12845:52;;12936:15;12916:16;:35;;12908:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;13029:60;13038:5;13045:7;13073:15;13054:16;:34;13029:8;:60::i;:::-;13120:4;13113:11;;;;12696:436;;;;:::o;9743:193::-;9822:4;9839:13;9855:12;:10;:12::i;:::-;9839:28;;9878;9888:5;9895:2;9899:6;9878:9;:28::i;:::-;9924:4;9917:11;;;9743:193;;;;:::o;29748:122::-;6855:12;:10;:12::i;:::-;6845:22;;:6;;;;;;;;;;;:22;;;6837:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29847:15:::1;29830:14;:32;;;;29748:122:::0;:::o;29878:158::-;6855:12;:10;:12::i;:::-;6845:22;;:6;;;;;;;;;;;:22;;;6837:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29982:4:::1;29965:14;:21;;;;30019:9;29997:19;:31;;;;29878:158:::0;;:::o;28901:556::-;6855:12;:10;:12::i;:::-;6845:22;;:6;;;;;;;;;;;:22;;;6837:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28965:11:::1;;;;;;;;;;;28964:12;28956:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;29014:63;29031:4;29046:15;;;;;;;;;;;29064:12;;29014:8;:63::i;:::-;29122:15;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29104:55;;;29168:4;29175:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29104:94;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29088:13;;:110;;;;;;;;;;;;;;;;;;29209:15;;;;;;;;;;;:31;;;29248:21;29279:4;29285:24;29303:4;29285:9;:24::i;:::-;29310:1;29312::::0;29314:7:::1;:5;:7::i;:::-;29322:15;29209:129;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;29363:4;29349:11;;:18;;;;;;;;;;;;;;;;;;29385:13;;;;;;;;;;;29378:29;;;29416:15;;;;;;;;;;;29434:14;29378:71;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28901:556::o:0;28504:389::-;6855:12;:10;:12::i;:::-;6845:22;;:6;;;;;;;;;;;:22;;;6837:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28608:16:::1;28665:7;;:14;;28647:7;;:14;;:32;28639:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;28737:149;28754:7;;:14;;28743:8;:25;28737:149;;;28784:62;28802:4;28809:7;;28817:8;28809:17;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;28828:7;;28836:8;28828:17;;;;;;;:::i;:::-;;;;;;;;28784:9;:62::i;:::-;28873:1;28861:13;;;;;:::i;:::-;;;28737:149;;;28597:296;28504:389:::0;;;;:::o;9999:151::-;10088:7;10115:11;:18;10127:5;10115:18;;;;;;;;;;;;;;;:27;10134:7;10115:27;;;;;;;;;;;;;;;;10108:34;;9999:151;;;;:::o;30044:145::-;6855:12;:10;:12::i;:::-;6845:22;;:6;;;;;;;;;;;:22;;;6837:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30158:23:::1;30131:24;;:50;;;;;;;;;;;;;;;;;;30044:145:::0;:::o;30374:158::-;30426:18;30447:21;30426:42;;30487:15;;;;;;;;;;;30479:33;;:45;30513:10;30479:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30415:117;30374:158::o;7088:244::-;6855:12;:10;:12::i;:::-;6845:22;;:6;;;;;;;;;;;:22;;;6837:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;7197:1:::1;7177:22;;:8;:22;;::::0;7169:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;7287:8;7258:38;;7279:6;;;;;;;;;;;7258:38;;;;;;;;;;;;7316:8;7307:6;;:17;;;;;;;;;;;;;;;;;;7088:244:::0;:::o;3060:98::-;3113:7;3140:10;3133:17;;3060:98;:::o;16321:380::-;16474:1;16457:19;;:5;:19;;;16449:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16555:1;16536:21;;:7;:21;;;16528:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16639:6;16609:11;:18;16621:5;16609:18;;;;;;;;;;;;;;;:27;16628:7;16609:27;;;;;;;;;;;;;;;:36;;;;16677:7;16661:32;;16670:5;16661:32;;;16686:6;16661:32;;;;;;:::i;:::-;;;;;;;;16321:380;;;:::o;16992:453::-;17127:24;17154:25;17164:5;17171:7;17154:9;:25::i;:::-;17127:52;;17214:17;17194:16;:37;17190:248;;17276:6;17256:16;:26;;17248:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17360:51;17369:5;17376:7;17404:6;17385:16;:25;17360:8;:51::i;:::-;17190:248;17116:329;16992:453;;;:::o;24778:1462::-;24892:1;24876:18;;:4;:18;;;24868:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24969:1;24955:16;;:2;:16;;;24947:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;25039:1;25030:6;:10;25022:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;25108:7;:5;:7::i;:::-;25100:15;;:4;:15;;;;:32;;;;;25125:7;:5;:7::i;:::-;25119:13;;:2;:13;;;;25100:32;:57;;;;;25152:4;25136:21;;:4;:21;;;;25100:57;25097:617;;;25174:21;25198:25;25216:6;25198:13;25208:2;25198:9;:13::i;:::-;:17;;:25;;;;:::i;:::-;25174:49;;25250:13;;;;;;;;;;;25242:21;;:4;:21;;;25238:145;;25309:16;;25292:13;:33;;25284:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;25238:145;25409:13;;;;;;;;;;;25401:21;;:4;:21;;;;:44;;;;;25432:13;;;;;;;;;;;25426:19;;:2;:19;;;;25401:44;25397:168;;;25491:16;;25474:13;:33;;25466:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;25397:168;25591:13;;;;;;;;;;;25583:21;;:4;:21;;;;:44;;;;;25614:13;;;;;;;;;;;25608:19;;:2;:19;;;25583:44;25579:122;;;25648:12;:10;:12::i;:::-;25679:6;:4;:6::i;:::-;25579:122;25159:555;25097:617;25734:13;25751:18;:24;25770:4;25751:24;;;;;;;;;;;;;;;;;;;;;;;;;25750:25;:52;;;;;25780:18;:22;25799:2;25780:22;;;;;;;;;;;;;;;;;;;;;;;;;25779:23;25750:52;:71;;;;;25814:7;:5;:7::i;:::-;25806:15;;:4;:15;;;;25750:71;:88;;;;;25831:7;:5;:7::i;:::-;25825:13;;:2;:13;;;;25750:88;25734:104;;25852:8;:37;;;;;25865:24;;;;;;;;;;;25864:25;25852:37;25849:339;;;25906:23;25932:40;25968:3;25932:31;25943:19;;25932:6;:10;;:31;;;;:::i;:::-;:35;;:40;;;;:::i;:::-;25906:66;;25988:18;26009:35;26040:3;26009:26;26020:14;;26009:6;:10;;:26;;;;:::i;:::-;:30;;:35;;;;:::i;:::-;25988:56;;26074:32;26090:15;26074:11;;:15;;:32;;;;:::i;:::-;26060:11;:46;;;;26142:34;26165:10;26142:18;;:22;;:34;;;;:::i;:::-;26121:18;:55;;;;25891:297;;25849:339;26199:33;26215:4;26221:2;26225:6;26199:15;:33::i;:::-;24857:1383;24778:1462;;;:::o;28260:236::-;28347:9;28342:147;28366:9;;:16;;28362:1;:20;28342:147;;;28404:12;28419:9;;28429:1;28419:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;28404:27;;28473:4;28446:18;:24;28465:4;28446:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;28389:100;28384:3;;;;;:::i;:::-;;;;28342:147;;;;28260:236;;;:::o;27351:728::-;27477:21;27515:1;27501:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27477:40;;27546:4;27528;27533:1;27528:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;27572:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27562:4;27567:1;27562:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;27605:62;27622:4;27637:15;;;;;;;;;;;27655:11;27605:8;:62::i;:::-;27678:15;;;;;;;;;;;:66;;;27759:11;27785:1;27801:4;27828;27848:15;27678:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27885:18;27906:21;27885:42;;27938:13;27954:17;27969:1;27954:10;:14;;:17;;;;:::i;:::-;27938:33;;27992:15;;;;;;;;;;;27984:33;;:40;28018:5;27984:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28043:9;;;;;;;;;;;28035:27;;:34;28063:5;28035:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27406:673;;;27351:728;:::o;1199:181::-;1257:7;1277:9;1293:1;1289;:5;;;;:::i;:::-;1277:17;;1318:1;1313;:6;;1305:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;1371:1;1364:8;;;1199:181;;;;:::o;26609:459::-;26667:1;26653:11;;:15;26650:411;;;26685:58;26701:13;;;;;;;;;;;26724:4;26731:11;;26685:15;:58::i;:::-;26782:1;26761:18;;:22;26758:170;;;26804:67;26820:13;;;;;;;;;;;26843:6;26852:18;;26804:15;:67::i;:::-;26911:1;26890:18;:22;;;;26758:170;26942:19;26979:13;;;;;;;;;;;26942:51;;27008:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27048:1;27034:11;:15;;;;26670:391;26650:411;26609:459::o;26248:353::-;26283:28;26314:24;26332:4;26314:9;:24::i;:::-;26283:55;;26376:1;26353:20;:24;26349:245;;;26394:19;26416:26;:24;:26::i;:::-;26394:48;;26485:11;26461:20;:35;;:56;;;;;26501:16;;;;;;;;;;;26500:17;26461:56;26457:126;;;26538:29;26555:11;26538:16;:29::i;:::-;26457:126;26379:215;26349:245;26272:329;26248:353::o;1732:471::-;1790:7;2040:1;2035;:6;2031:47;;2065:1;2058:8;;;;2031:47;2090:9;2106:1;2102;:5;;;;:::i;:::-;2090:17;;2135:1;2130;2126;:5;;;;:::i;:::-;:10;2118:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;2194:1;2187:8;;;1732:471;;;;;:::o;2211:132::-;2269:7;2296:39;2300:1;2303;2296:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2289:46;;2211:132;;;;:::o;13602:671::-;13749:1;13733:18;;:4;:18;;;13725:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13826:1;13812:16;;:2;:16;;;13804:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;13881:38;13902:4;13908:2;13912:6;13881:20;:38::i;:::-;13932:19;13954:9;:15;13964:4;13954:15;;;;;;;;;;;;;;;;13932:37;;14003:6;13988:11;:21;;13980:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;14120:6;14106:11;:20;14088:9;:15;14098:4;14088:15;;;;;;;;;;;;;;;:38;;;;14165:6;14148:9;:13;14158:2;14148:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;14204:2;14189:26;;14198:4;14189:26;;;14208:6;14189:26;;;;;;:::i;:::-;;;;;;;;14228:37;14248:4;14254:2;14258:6;14228:19;:37::i;:::-;13714:559;13602:671;;;:::o;2351:278::-;2437:7;2469:1;2465;:5;2472:12;2457:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2496:9;2512:1;2508;:5;;;;:::i;:::-;2496:17;;2620:1;2613:8;;;2351:278;;;;;:::o;18045:125::-;;;;:::o;18774:124::-;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1349:75::-;1382:6;1415:2;1409:9;1399:19;;1349:75;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:60::-;3474:3;3495:5;3488:12;;3446:60;;;:::o;3512:142::-;3562:9;3595:53;3613:34;3622:24;3640:5;3622:24;:::i;:::-;3613:34;:::i;:::-;3595:53;:::i;:::-;3582:66;;3512:142;;;:::o;3660:126::-;3710:9;3743:37;3774:5;3743:37;:::i;:::-;3730:50;;3660:126;;;:::o;3792:153::-;3869:9;3902:37;3933:5;3902:37;:::i;:::-;3889:50;;3792:153;;;:::o;3951:185::-;4065:64;4123:5;4065:64;:::i;:::-;4060:3;4053:77;3951:185;;:::o;4142:276::-;4262:4;4300:2;4289:9;4285:18;4277:26;;4313:98;4408:1;4397:9;4393:17;4384:6;4313:98;:::i;:::-;4142:276;;;;:::o;4424:118::-;4511:24;4529:5;4511:24;:::i;:::-;4506:3;4499:37;4424:118;;:::o;4548:222::-;4641:4;4679:2;4668:9;4664:18;4656:26;;4692:71;4760:1;4749:9;4745:17;4736:6;4692:71;:::i;:::-;4548:222;;;;:::o;4776:619::-;4853:6;4861;4869;4918:2;4906:9;4897:7;4893:23;4889:32;4886:119;;;4924:79;;:::i;:::-;4886:119;5044:1;5069:53;5114:7;5105:6;5094:9;5090:22;5069:53;:::i;:::-;5059:63;;5015:117;5171:2;5197:53;5242:7;5233:6;5222:9;5218:22;5197:53;:::i;:::-;5187:63;;5142:118;5299:2;5325:53;5370:7;5361:6;5350:9;5346:22;5325:53;:::i;:::-;5315:63;;5270:118;4776:619;;;;;:::o;5401:329::-;5460:6;5509:2;5497:9;5488:7;5484:23;5480:32;5477:119;;;5515:79;;:::i;:::-;5477:119;5635:1;5660:53;5705:7;5696:6;5685:9;5681:22;5660:53;:::i;:::-;5650:63;;5606:117;5401:329;;;;:::o;5736:86::-;5771:7;5811:4;5804:5;5800:16;5789:27;;5736:86;;;:::o;5828:112::-;5911:22;5927:5;5911:22;:::i;:::-;5906:3;5899:35;5828:112;;:::o;5946:214::-;6035:4;6073:2;6062:9;6058:18;6050:26;;6086:67;6150:1;6139:9;6135:17;6126:6;6086:67;:::i;:::-;5946:214;;;;:::o;6166:117::-;6275:1;6272;6265:12;6289:117;6398:1;6395;6388:12;6412:117;6521:1;6518;6511:12;6552:568;6625:8;6635:6;6685:3;6678:4;6670:6;6666:17;6662:27;6652:122;;6693:79;;:::i;:::-;6652:122;6806:6;6793:20;6783:30;;6836:18;6828:6;6825:30;6822:117;;;6858:79;;:::i;:::-;6822:117;6972:4;6964:6;6960:17;6948:29;;7026:3;7018:4;7010:6;7006:17;6996:8;6992:32;6989:41;6986:128;;;7033:79;;:::i;:::-;6986:128;6552:568;;;;;:::o;7126:116::-;7196:21;7211:5;7196:21;:::i;:::-;7189:5;7186:32;7176:60;;7232:1;7229;7222:12;7176:60;7126:116;:::o;7248:133::-;7291:5;7329:6;7316:20;7307:29;;7345:30;7369:5;7345:30;:::i;:::-;7248:133;;;;:::o;7387:698::-;7479:6;7487;7495;7544:2;7532:9;7523:7;7519:23;7515:32;7512:119;;;7550:79;;:::i;:::-;7512:119;7698:1;7687:9;7683:17;7670:31;7728:18;7720:6;7717:30;7714:117;;;7750:79;;:::i;:::-;7714:117;7863:80;7935:7;7926:6;7915:9;7911:22;7863:80;:::i;:::-;7845:98;;;;7641:312;7992:2;8018:50;8060:7;8051:6;8040:9;8036:22;8018:50;:::i;:::-;8008:60;;7963:115;7387:698;;;;;:::o;8091:118::-;8178:24;8196:5;8178:24;:::i;:::-;8173:3;8166:37;8091:118;;:::o;8215:222::-;8308:4;8346:2;8335:9;8331:18;8323:26;;8359:71;8427:1;8416:9;8412:17;8403:6;8359:71;:::i;:::-;8215:222;;;;:::o;8443:329::-;8502:6;8551:2;8539:9;8530:7;8526:23;8522:32;8519:119;;;8557:79;;:::i;:::-;8519:119;8677:1;8702:53;8747:7;8738:6;8727:9;8723:22;8702:53;:::i;:::-;8692:63;;8648:117;8443:329;;;;:::o;8778:474::-;8846:6;8854;8903:2;8891:9;8882:7;8878:23;8874:32;8871:119;;;8909:79;;:::i;:::-;8871:119;9029:1;9054:53;9099:7;9090:6;9079:9;9075:22;9054:53;:::i;:::-;9044:63;;9000:117;9156:2;9182:53;9227:7;9218:6;9207:9;9203:22;9182:53;:::i;:::-;9172:63;;9127:118;8778:474;;;;;:::o;9275:568::-;9348:8;9358:6;9408:3;9401:4;9393:6;9389:17;9385:27;9375:122;;9416:79;;:::i;:::-;9375:122;9529:6;9516:20;9506:30;;9559:18;9551:6;9548:30;9545:117;;;9581:79;;:::i;:::-;9545:117;9695:4;9687:6;9683:17;9671:29;;9749:3;9741:4;9733:6;9729:17;9719:8;9715:32;9712:41;9709:128;;;9756:79;;:::i;:::-;9709:128;9275:568;;;;;:::o;9849:934::-;9971:6;9979;9987;9995;10044:2;10032:9;10023:7;10019:23;10015:32;10012:119;;;10050:79;;:::i;:::-;10012:119;10198:1;10187:9;10183:17;10170:31;10228:18;10220:6;10217:30;10214:117;;;10250:79;;:::i;:::-;10214:117;10363:80;10435:7;10426:6;10415:9;10411:22;10363:80;:::i;:::-;10345:98;;;;10141:312;10520:2;10509:9;10505:18;10492:32;10551:18;10543:6;10540:30;10537:117;;;10573:79;;:::i;:::-;10537:117;10686:80;10758:7;10749:6;10738:9;10734:22;10686:80;:::i;:::-;10668:98;;;;10463:313;9849:934;;;;;;;:::o;10789:474::-;10857:6;10865;10914:2;10902:9;10893:7;10889:23;10885:32;10882:119;;;10920:79;;:::i;:::-;10882:119;11040:1;11065:53;11110:7;11101:6;11090:9;11086:22;11065:53;:::i;:::-;11055:63;;11011:117;11167:2;11193:53;11238:7;11229:6;11218:9;11214:22;11193:53;:::i;:::-;11183:63;;11138:118;10789:474;;;;;:::o;11269:323::-;11325:6;11374:2;11362:9;11353:7;11349:23;11345:32;11342:119;;;11380:79;;:::i;:::-;11342:119;11500:1;11525:50;11567:7;11558:6;11547:9;11543:22;11525:50;:::i;:::-;11515:60;;11471:114;11269:323;;;;:::o;11598:180::-;11646:77;11643:1;11636:88;11743:4;11740:1;11733:15;11767:4;11764:1;11757:15;11784:320;11828:6;11865:1;11859:4;11855:12;11845:22;;11912:1;11906:4;11902:12;11933:18;11923:81;;11989:4;11981:6;11977:17;11967:27;;11923:81;12051:2;12043:6;12040:14;12020:18;12017:38;12014:84;;12070:18;;:::i;:::-;12014:84;11835:269;11784:320;;;:::o;12110:182::-;12250:34;12246:1;12238:6;12234:14;12227:58;12110:182;:::o;12298:366::-;12440:3;12461:67;12525:2;12520:3;12461:67;:::i;:::-;12454:74;;12537:93;12626:3;12537:93;:::i;:::-;12655:2;12650:3;12646:12;12639:19;;12298:366;;;:::o;12670:419::-;12836:4;12874:2;12863:9;12859:18;12851:26;;12923:9;12917:4;12913:20;12909:1;12898:9;12894:17;12887:47;12951:131;13077:4;12951:131;:::i;:::-;12943:139;;12670:419;;;:::o;13095:180::-;13143:77;13140:1;13133:88;13240:4;13237:1;13230:15;13264:4;13261:1;13254:15;13281:410;13321:7;13344:20;13362:1;13344:20;:::i;:::-;13339:25;;13378:20;13396:1;13378:20;:::i;:::-;13373:25;;13433:1;13430;13426:9;13455:30;13473:11;13455:30;:::i;:::-;13444:41;;13634:1;13625:7;13621:15;13618:1;13615:22;13595:1;13588:9;13568:83;13545:139;;13664:18;;:::i;:::-;13545:139;13329:362;13281:410;;;;:::o;13697:191::-;13737:3;13756:20;13774:1;13756:20;:::i;:::-;13751:25;;13790:20;13808:1;13790:20;:::i;:::-;13785:25;;13833:1;13830;13826:9;13819:16;;13854:3;13851:1;13848:10;13845:36;;;13861:18;;:::i;:::-;13845:36;13697:191;;;;:::o;13894:143::-;13951:5;13982:6;13976:13;13967:22;;13998:33;14025:5;13998:33;:::i;:::-;13894:143;;;;:::o;14043:351::-;14113:6;14162:2;14150:9;14141:7;14137:23;14133:32;14130:119;;;14168:79;;:::i;:::-;14130:119;14288:1;14313:64;14369:7;14360:6;14349:9;14345:22;14313:64;:::i;:::-;14303:74;;14259:128;14043:351;;;;:::o;14400:332::-;14521:4;14559:2;14548:9;14544:18;14536:26;;14572:71;14640:1;14629:9;14625:17;14616:6;14572:71;:::i;:::-;14653:72;14721:2;14710:9;14706:18;14697:6;14653:72;:::i;:::-;14400:332;;;;;:::o;14738:137::-;14792:5;14823:6;14817:13;14808:22;;14839:30;14863:5;14839:30;:::i;:::-;14738:137;;;;:::o;14881:345::-;14948:6;14997:2;14985:9;14976:7;14972:23;14968:32;14965:119;;;15003:79;;:::i;:::-;14965:119;15123:1;15148:61;15201:7;15192:6;15181:9;15177:22;15148:61;:::i;:::-;15138:71;;15094:125;14881:345;;;;:::o;15232:180::-;15280:77;15277:1;15270:88;15377:4;15374:1;15367:15;15401:4;15398:1;15391:15;15418:143;15475:5;15506:6;15500:13;15491:22;;15522:33;15549:5;15522:33;:::i;:::-;15418:143;;;;:::o;15567:351::-;15637:6;15686:2;15674:9;15665:7;15661:23;15657:32;15654:119;;;15692:79;;:::i;:::-;15654:119;15812:1;15837:64;15893:7;15884:6;15873:9;15869:22;15837:64;:::i;:::-;15827:74;;15783:128;15567:351;;;;:::o;15924:180::-;15972:77;15969:1;15962:88;16069:4;16066:1;16059:15;16093:4;16090:1;16083:15;16110:114;16177:6;16211:5;16205:12;16195:22;;16110:114;;;:::o;16230:184::-;16329:11;16363:6;16358:3;16351:19;16403:4;16398:3;16394:14;16379:29;;16230:184;;;;:::o;16420:132::-;16487:4;16510:3;16502:11;;16540:4;16535:3;16531:14;16523:22;;16420:132;;;:::o;16558:108::-;16635:24;16653:5;16635:24;:::i;:::-;16630:3;16623:37;16558:108;;:::o;16672:179::-;16741:10;16762:46;16804:3;16796:6;16762:46;:::i;:::-;16840:4;16835:3;16831:14;16817:28;;16672:179;;;;:::o;16857:113::-;16927:4;16959;16954:3;16950:14;16942:22;;16857:113;;;:::o;17006:732::-;17125:3;17154:54;17202:5;17154:54;:::i;:::-;17224:86;17303:6;17298:3;17224:86;:::i;:::-;17217:93;;17334:56;17384:5;17334:56;:::i;:::-;17413:7;17444:1;17429:284;17454:6;17451:1;17448:13;17429:284;;;17530:6;17524:13;17557:63;17616:3;17601:13;17557:63;:::i;:::-;17550:70;;17643:60;17696:6;17643:60;:::i;:::-;17633:70;;17489:224;17476:1;17473;17469:9;17464:14;;17429:284;;;17433:14;17729:3;17722:10;;17130:608;;;17006:732;;;;:::o;17744:483::-;17915:4;17953:2;17942:9;17938:18;17930:26;;17966:71;18034:1;18023:9;18019:17;18010:6;17966:71;:::i;:::-;18084:9;18078:4;18074:20;18069:2;18058:9;18054:18;18047:48;18112:108;18215:4;18206:6;18112:108;:::i;:::-;18104:116;;17744:483;;;;;:::o;18233:281::-;18316:27;18338:4;18316:27;:::i;:::-;18308:6;18304:40;18446:6;18434:10;18431:22;18410:18;18398:10;18395:34;18392:62;18389:88;;;18457:18;;:::i;:::-;18389:88;18497:10;18493:2;18486:22;18276:238;18233:281;;:::o;18520:129::-;18554:6;18581:20;;:::i;:::-;18571:30;;18610:33;18638:4;18630:6;18610:33;:::i;:::-;18520:129;;;:::o;18655:311::-;18732:4;18822:18;18814:6;18811:30;18808:56;;;18844:18;;:::i;:::-;18808:56;18894:4;18886:6;18882:17;18874:25;;18954:4;18948;18944:15;18936:23;;18655:311;;;:::o;18989:732::-;19096:5;19121:81;19137:64;19194:6;19137:64;:::i;:::-;19121:81;:::i;:::-;19112:90;;19222:5;19251:6;19244:5;19237:21;19285:4;19278:5;19274:16;19267:23;;19338:4;19330:6;19326:17;19318:6;19314:30;19367:3;19359:6;19356:15;19353:122;;;19386:79;;:::i;:::-;19353:122;19501:6;19484:231;19518:6;19513:3;19510:15;19484:231;;;19593:3;19622:48;19666:3;19654:10;19622:48;:::i;:::-;19617:3;19610:61;19700:4;19695:3;19691:14;19684:21;;19560:155;19544:4;19539:3;19535:14;19528:21;;19484:231;;;19488:21;19102:619;;18989:732;;;;;:::o;19744:385::-;19826:5;19875:3;19868:4;19860:6;19856:17;19852:27;19842:122;;19883:79;;:::i;:::-;19842:122;19993:6;19987:13;20018:105;20119:3;20111:6;20104:4;20096:6;20092:17;20018:105;:::i;:::-;20009:114;;19832:297;19744:385;;;;:::o;20135:554::-;20230:6;20279:2;20267:9;20258:7;20254:23;20250:32;20247:119;;;20285:79;;:::i;:::-;20247:119;20426:1;20415:9;20411:17;20405:24;20456:18;20448:6;20445:30;20442:117;;;20478:79;;:::i;:::-;20442:117;20583:89;20664:7;20655:6;20644:9;20640:22;20583:89;:::i;:::-;20573:99;;20376:306;20135:554;;;;:::o;20695:224::-;20835:34;20831:1;20823:6;20819:14;20812:58;20904:7;20899:2;20891:6;20887:15;20880:32;20695:224;:::o;20925:366::-;21067:3;21088:67;21152:2;21147:3;21088:67;:::i;:::-;21081:74;;21164:93;21253:3;21164:93;:::i;:::-;21282:2;21277:3;21273:12;21266:19;;20925:366;;;:::o;21297:419::-;21463:4;21501:2;21490:9;21486:18;21478:26;;21550:9;21544:4;21540:20;21536:1;21525:9;21521:17;21514:47;21578:131;21704:4;21578:131;:::i;:::-;21570:139;;21297:419;;;:::o;21722:173::-;21862:25;21858:1;21850:6;21846:14;21839:49;21722:173;:::o;21901:366::-;22043:3;22064:67;22128:2;22123:3;22064:67;:::i;:::-;22057:74;;22140:93;22229:3;22140:93;:::i;:::-;22258:2;22253:3;22249:12;22242:19;;21901:366;;;:::o;22273:419::-;22439:4;22477:2;22466:9;22462:18;22454:26;;22526:9;22520:4;22516:20;22512:1;22501:9;22497:17;22490:47;22554:131;22680:4;22554:131;:::i;:::-;22546:139;;22273:419;;;:::o;22698:332::-;22819:4;22857:2;22846:9;22842:18;22834:26;;22870:71;22938:1;22927:9;22923:17;22914:6;22870:71;:::i;:::-;22951:72;23019:2;23008:9;23004:18;22995:6;22951:72;:::i;:::-;22698:332;;;;;:::o;23036:85::-;23081:7;23110:5;23099:16;;23036:85;;;:::o;23127:158::-;23185:9;23218:61;23236:42;23245:32;23271:5;23245:32;:::i;:::-;23236:42;:::i;:::-;23218:61;:::i;:::-;23205:74;;23127:158;;;:::o;23291:147::-;23386:45;23425:5;23386:45;:::i;:::-;23381:3;23374:58;23291:147;;:::o;23444:807::-;23693:4;23731:3;23720:9;23716:19;23708:27;;23745:71;23813:1;23802:9;23798:17;23789:6;23745:71;:::i;:::-;23826:72;23894:2;23883:9;23879:18;23870:6;23826:72;:::i;:::-;23908:80;23984:2;23973:9;23969:18;23960:6;23908:80;:::i;:::-;23998;24074:2;24063:9;24059:18;24050:6;23998:80;:::i;:::-;24088:73;24156:3;24145:9;24141:19;24132:6;24088:73;:::i;:::-;24171;24239:3;24228:9;24224:19;24215:6;24171:73;:::i;:::-;23444:807;;;;;;;;;:::o;24257:663::-;24345:6;24353;24361;24410:2;24398:9;24389:7;24385:23;24381:32;24378:119;;;24416:79;;:::i;:::-;24378:119;24536:1;24561:64;24617:7;24608:6;24597:9;24593:22;24561:64;:::i;:::-;24551:74;;24507:128;24674:2;24700:64;24756:7;24747:6;24736:9;24732:22;24700:64;:::i;:::-;24690:74;;24645:129;24813:2;24839:64;24895:7;24886:6;24875:9;24871:22;24839:64;:::i;:::-;24829:74;;24784:129;24257:663;;;;;:::o;24926:229::-;25066:34;25062:1;25054:6;25050:14;25043:58;25135:12;25130:2;25122:6;25118:15;25111:37;24926:229;:::o;25161:366::-;25303:3;25324:67;25388:2;25383:3;25324:67;:::i;:::-;25317:74;;25400:93;25489:3;25400:93;:::i;:::-;25518:2;25513:3;25509:12;25502:19;;25161:366;;;:::o;25533:419::-;25699:4;25737:2;25726:9;25722:18;25714:26;;25786:9;25780:4;25776:20;25772:1;25761:9;25757:17;25750:47;25814:131;25940:4;25814:131;:::i;:::-;25806:139;;25533:419;;;:::o;25958:225::-;26098:34;26094:1;26086:6;26082:14;26075:58;26167:8;26162:2;26154:6;26150:15;26143:33;25958:225;:::o;26189:366::-;26331:3;26352:67;26416:2;26411:3;26352:67;:::i;:::-;26345:74;;26428:93;26517:3;26428:93;:::i;:::-;26546:2;26541:3;26537:12;26530:19;;26189:366;;;:::o;26561:419::-;26727:4;26765:2;26754:9;26750:18;26742:26;;26814:9;26808:4;26804:20;26800:1;26789:9;26785:17;26778:47;26842:131;26968:4;26842:131;:::i;:::-;26834:139;;26561:419;;;:::o;26986:223::-;27126:34;27122:1;27114:6;27110:14;27103:58;27195:6;27190:2;27182:6;27178:15;27171:31;26986:223;:::o;27215:366::-;27357:3;27378:67;27442:2;27437:3;27378:67;:::i;:::-;27371:74;;27454:93;27543:3;27454:93;:::i;:::-;27572:2;27567:3;27563:12;27556:19;;27215:366;;;:::o;27587:419::-;27753:4;27791:2;27780:9;27776:18;27768:26;;27840:9;27834:4;27830:20;27826:1;27815:9;27811:17;27804:47;27868:131;27994:4;27868:131;:::i;:::-;27860:139;;27587:419;;;:::o;28012:221::-;28152:34;28148:1;28140:6;28136:14;28129:58;28221:4;28216:2;28208:6;28204:15;28197:29;28012:221;:::o;28239:366::-;28381:3;28402:67;28466:2;28461:3;28402:67;:::i;:::-;28395:74;;28478:93;28567:3;28478:93;:::i;:::-;28596:2;28591:3;28587:12;28580:19;;28239:366;;;:::o;28611:419::-;28777:4;28815:2;28804:9;28800:18;28792:26;;28864:9;28858:4;28854:20;28850:1;28839:9;28835:17;28828:47;28892:131;29018:4;28892:131;:::i;:::-;28884:139;;28611:419;;;:::o;29036:179::-;29176:31;29172:1;29164:6;29160:14;29153:55;29036:179;:::o;29221:366::-;29363:3;29384:67;29448:2;29443:3;29384:67;:::i;:::-;29377:74;;29460:93;29549:3;29460:93;:::i;:::-;29578:2;29573:3;29569:12;29562:19;;29221:366;;;:::o;29593:419::-;29759:4;29797:2;29786:9;29782:18;29774:26;;29846:9;29840:4;29836:20;29832:1;29821:9;29817:17;29810:47;29874:131;30000:4;29874:131;:::i;:::-;29866:139;;29593:419;;;:::o;30018:224::-;30158:34;30154:1;30146:6;30142:14;30135:58;30227:7;30222:2;30214:6;30210:15;30203:32;30018:224;:::o;30248:366::-;30390:3;30411:67;30475:2;30470:3;30411:67;:::i;:::-;30404:74;;30487:93;30576:3;30487:93;:::i;:::-;30605:2;30600:3;30596:12;30589:19;;30248:366;;;:::o;30620:419::-;30786:4;30824:2;30813:9;30809:18;30801:26;;30873:9;30867:4;30863:20;30859:1;30848:9;30844:17;30837:47;30901:131;31027:4;30901:131;:::i;:::-;30893:139;;30620:419;;;:::o;31045:222::-;31185:34;31181:1;31173:6;31169:14;31162:58;31254:5;31249:2;31241:6;31237:15;31230:30;31045:222;:::o;31273:366::-;31415:3;31436:67;31500:2;31495:3;31436:67;:::i;:::-;31429:74;;31512:93;31601:3;31512:93;:::i;:::-;31630:2;31625:3;31621:12;31614:19;;31273:366;;;:::o;31645:419::-;31811:4;31849:2;31838:9;31834:18;31826:26;;31898:9;31892:4;31888:20;31884:1;31873:9;31869:17;31862:47;31926:131;32052:4;31926:131;:::i;:::-;31918:139;;31645:419;;;:::o;32070:228::-;32210:34;32206:1;32198:6;32194:14;32187:58;32279:11;32274:2;32266:6;32262:15;32255:36;32070:228;:::o;32304:366::-;32446:3;32467:67;32531:2;32526:3;32467:67;:::i;:::-;32460:74;;32543:93;32632:3;32543:93;:::i;:::-;32661:2;32656:3;32652:12;32645:19;;32304:366;;;:::o;32676:419::-;32842:4;32880:2;32869:9;32865:18;32857:26;;32929:9;32923:4;32919:20;32915:1;32904:9;32900:17;32893:47;32957:131;33083:4;32957:131;:::i;:::-;32949:139;;32676:419;;;:::o;33101:224::-;33241:34;33237:1;33229:6;33225:14;33218:58;33310:7;33305:2;33297:6;33293:15;33286:32;33101:224;:::o;33331:366::-;33473:3;33494:67;33558:2;33553:3;33494:67;:::i;:::-;33487:74;;33570:93;33659:3;33570:93;:::i;:::-;33688:2;33683:3;33679:12;33672:19;;33331:366;;;:::o;33703:419::-;33869:4;33907:2;33896:9;33892:18;33884:26;;33956:9;33950:4;33946:20;33942:1;33931:9;33927:17;33920:47;33984:131;34110:4;33984:131;:::i;:::-;33976:139;;33703:419;;;:::o;34128:233::-;34167:3;34190:24;34208:5;34190:24;:::i;:::-;34181:33;;34236:66;34229:5;34226:77;34223:103;;34306:18;;:::i;:::-;34223:103;34353:1;34346:5;34342:13;34335:20;;34128:233;;;:::o;34367:831::-;34630:4;34668:3;34657:9;34653:19;34645:27;;34682:71;34750:1;34739:9;34735:17;34726:6;34682:71;:::i;:::-;34763:80;34839:2;34828:9;34824:18;34815:6;34763:80;:::i;:::-;34890:9;34884:4;34880:20;34875:2;34864:9;34860:18;34853:48;34918:108;35021:4;35012:6;34918:108;:::i;:::-;34910:116;;35036:72;35104:2;35093:9;35089:18;35080:6;35036:72;:::i;:::-;35118:73;35186:3;35175:9;35171:19;35162:6;35118:73;:::i;:::-;34367:831;;;;;;;;:::o;35204:177::-;35344:29;35340:1;35332:6;35328:14;35321:53;35204:177;:::o;35387:366::-;35529:3;35550:67;35614:2;35609:3;35550:67;:::i;:::-;35543:74;;35626:93;35715:3;35626:93;:::i;:::-;35744:2;35739:3;35735:12;35728:19;;35387:366;;;:::o;35759:419::-;35925:4;35963:2;35952:9;35948:18;35940:26;;36012:9;36006:4;36002:20;35998:1;35987:9;35983:17;35976:47;36040:131;36166:4;36040:131;:::i;:::-;36032:139;;35759:419;;;:::o;36184:180::-;36232:77;36229:1;36222:88;36329:4;36326:1;36319:15;36353:4;36350:1;36343:15;36370:185;36410:1;36427:20;36445:1;36427:20;:::i;:::-;36422:25;;36461:20;36479:1;36461:20;:::i;:::-;36456:25;;36500:1;36490:35;;36505:18;;:::i;:::-;36490:35;36547:1;36544;36540:9;36535:14;;36370:185;;;;:::o;36561:220::-;36701:34;36697:1;36689:6;36685:14;36678:58;36770:3;36765:2;36757:6;36753:15;36746:28;36561:220;:::o;36787:366::-;36929:3;36950:67;37014:2;37009:3;36950:67;:::i;:::-;36943:74;;37026:93;37115:3;37026:93;:::i;:::-;37144:2;37139:3;37135:12;37128:19;;36787:366;;;:::o;37159:419::-;37325:4;37363:2;37352:9;37348:18;37340:26;;37412:9;37406:4;37402:20;37398:1;37387:9;37383:17;37376:47;37440:131;37566:4;37440:131;:::i;:::-;37432:139;;37159:419;;;:::o;37584:225::-;37724:34;37720:1;37712:6;37708:14;37701:58;37793:8;37788:2;37780:6;37776:15;37769:33;37584:225;:::o;37815:366::-;37957:3;37978:67;38042:2;38037:3;37978:67;:::i;:::-;37971:74;;38054:93;38143:3;38054:93;:::i;:::-;38172:2;38167:3;38163:12;38156:19;;37815:366;;;:::o;38187:419::-;38353:4;38391:2;38380:9;38376:18;38368:26;;38440:9;38434:4;38430:20;38426:1;38415:9;38411:17;38404:47;38468:131;38594:4;38468:131;:::i;:::-;38460:139;;38187:419;;;:::o

Swarm Source

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