ETH Price: $2,924.27 (+2.92%)
 

Overview

Max Total Supply

10,000,000,000 ONEPEARL2.0

Holders

97

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.000000000464091312 ONEPEARL2.0

Value
$0.00
0x0498447fa4950c160c08882af8a2d4b6b8005a63
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:
OnePearl2

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-06-29
*/

/**
 *Submitted for verification at Etherscan.io on 2023-06-18
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.19;

interface IUniswapV2Router01 {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);

    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    )
        external
        payable
        returns (uint amountToken, uint amountETH, uint liquidity);

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);

    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint amountA, uint amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint amountToken, uint amountETH);

    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapExactETHForTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable returns (uint[] memory amounts);

    function swapTokensForExactETH(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapExactTokensForETH(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapETHForExactTokens(
        uint amountOut,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable returns (uint[] memory amounts);

    function quote(
        uint amountA,
        uint reserveA,
        uint reserveB
    ) external pure returns (uint amountB);

    function getAmountOut(
        uint amountIn,
        uint reserveIn,
        uint reserveOut
    ) external pure returns (uint amountOut);

    function getAmountIn(
        uint amountOut,
        uint reserveIn,
        uint reserveOut
    ) external pure returns (uint amountIn);

    function getAmountsOut(
        uint amountIn,
        address[] calldata path
    ) external view returns (uint[] memory amounts);

    function getAmountsIn(
        uint amountOut,
        address[] calldata path
    ) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

interface IUniswapV2Factory {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint
    );

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

    function getPair(
        address tokenA,
        address tokenB
    ) external view returns (address pair);

    function allPairs(uint) external view returns (address pair);

    function allPairsLength() external view returns (uint);

    function createPair(
        address tokenA,
        address tokenB
    ) external returns (address pair);

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

library Address {
    function isContract(address account) internal view returns (bool) {
        return account.code.length > 0;
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );

        (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
            functionCallWithValue(
                target,
                data,
                0,
                "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"
        );
        (bool success, bytes memory returndata) = target.call{value: value}(
            data
        );
        return
            verifyCallResultFromTarget(
                target,
                success,
                returndata,
                errorMessage
            );
    }

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

    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return
            verifyCallResultFromTarget(
                target,
                success,
                returndata,
                errorMessage
            );
    }

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

    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return
            verifyCallResultFromTarget(
                target,
                success,
                returndata,
                errorMessage
            );
    }

    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function _revert(
        bytes memory returndata,
        string memory errorMessage
    ) private pure {
        if (returndata.length > 0) {
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

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

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

    // solhint-disable-next-line func-name-mixedcase
    function DOMAIN_SEPARATOR() external view returns (bytes32);
}

interface IERC20 {
    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );

    function totalSupply() external view returns (uint256);

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

    function transfer(address to, 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 from,
        address to,
        uint256 amount
    ) external returns (bool);
}

library SafeERC20 {
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(token.transfer.selector, to, value)
        );
    }

    function safeTransferFrom(
        IERC20 token,
        address from,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(token.transferFrom.selector, from, to, value)
        );
    }

    function safeApprove(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        require(
            (value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(token.approve.selector, spender, value)
        );
    }

    function safeIncreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        uint256 oldAllowance = token.allowance(address(this), spender);
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(
                token.approve.selector,
                spender,
                oldAllowance + value
            )
        );
    }

    function safeDecreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        unchecked {
            uint256 oldAllowance = token.allowance(address(this), spender);
            require(
                oldAllowance >= value,
                "SafeERC20: decreased allowance below zero"
            );
            _callOptionalReturn(
                token,
                abi.encodeWithSelector(
                    token.approve.selector,
                    spender,
                    oldAllowance - value
                )
            );
        }
    }

    function forceApprove(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        bytes memory approvalCall = abi.encodeWithSelector(
            token.approve.selector,
            spender,
            value
        );

        if (!_callOptionalReturnBool(token, approvalCall)) {
            _callOptionalReturn(
                token,
                abi.encodeWithSelector(token.approve.selector, spender, 0)
            );
            _callOptionalReturn(token, approvalCall);
        }
    }

    function safePermit(
        IERC20Permit token,
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) internal {
        uint256 nonceBefore = token.nonces(owner);
        token.permit(owner, spender, value, deadline, v, r, s);
        uint256 nonceAfter = token.nonces(owner);
        require(
            nonceAfter == nonceBefore + 1,
            "SafeERC20: permit did not succeed"
        );
    }

    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        bytes memory returndata = address(token).functionCall(
            data,
            "SafeERC20: low-level call failed"
        );
        require(
            returndata.length == 0 || abi.decode(returndata, (bool)),
            "SafeERC20: ERC20 operation did not succeed"
        );
    }

    function _callOptionalReturnBool(
        IERC20 token,
        bytes memory data
    ) private returns (bool) {
        (bool success, bytes memory returndata) = address(token).call(data);
        return
            success &&
            (returndata.length == 0 || abi.decode(returndata, (bool))) &&
            Address.isContract(address(token));
    }
}

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);

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

    function decimals() external view returns (uint8);
}

abstract contract ReentrancyGuard {
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    modifier nonReentrant() {
        _nonReentrantBefore();
        _;
        _nonReentrantAfter();
    }

    function _nonReentrantBefore() private {
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        _status = _ENTERED;
    }

    function _nonReentrantAfter() private {
        _status = _NOT_ENTERED;
    }

    function _reentrancyGuardEntered() internal view returns (bool) {
        return _status == _ENTERED;
    }
}

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

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

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;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

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

    function balanceOf(
        address account
    ) public view virtual override returns (uint256) {
        return _balances[account];
    }

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

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

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

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

    function increaseAllowance(
        address spender,
        uint256 addedValue
    ) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

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

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

    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;
        unchecked {
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);

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

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

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

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

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _transferOwnership(_msgSender());
    }

    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

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

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

contract OnePearl2 is Ownable, ReentrancyGuard, ERC20 {
    using SafeERC20 for IERC20;

    uint256 public liquidityTaxBuy;
    uint256 public liquidityTaxSell;

    uint256 public marketingTaxBuy;
    uint256 public marketingTaxSell;

    uint256 public immutable denominator;

    uint256 public liquidityTokenAmount;
    uint256 public marketingTokenAmount;

    address public marketingWallet;

    bool private swapping;
    uint256 public swapTokensAtAmount;
    bool public isSwapBackEnabled;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    mapping(address => bool) private _isAutomatedMarketMakerPair;
    mapping(address => bool) private _isExcludedFromFees;

    modifier inSwap() {
        swapping = true;
        _;
        swapping = false;
    }

    event UpdateBuyTax(uint256 liquidityTaxBuy, uint256 marketingTaxBuy);
    event UpdateSellTax(uint256 liquidityTaxSell, uint256 marketingTaxSell);
    event UpdateMarketingWallet(address indexed marketingWallet);
    event UpdateSwapTokensAtAmount(uint256 swapTokensAtAmount);
    event UpdateSwapBackStatus(bool status);
    event UpdateAutomatedMarketMakerPair(address indexed pair, bool status);
    event UpdateExcludeFromFees(address indexed account, bool isExcluded);

    constructor() ERC20("One Pearl 2.0", "ONEPEARL2.0") {
        _mint(owner(), 10_000_000_000 * (10 ** 18));

        liquidityTaxBuy = 100;
        liquidityTaxSell = 100;

        marketingTaxBuy = 900;
        marketingTaxSell = 900;

        denominator = 10_000;

        marketingWallet = 0xEe25c13deB75eA6ac0E18Eaf0bE7e707B079934c;

        swapTokensAtAmount = totalSupply() / 100_000;
        isSwapBackEnabled = true;

        address router = getRouterAddress();
        uniswapV2Router = IUniswapV2Router02(router);
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(
            address(this),
            uniswapV2Router.WETH()
        );

        _approve(address(this), address(uniswapV2Router), type(uint256).max);

        _isAutomatedMarketMakerPair[address(uniswapV2Pair)] = true;

        _isExcludedFromFees[address(0xdead)] = true;
        _isExcludedFromFees[address(owner())] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[address(uniswapV2Router)] = true;
    }

    receive() external payable {}

    fallback() external payable {}

    function isContract(address account) internal view returns (bool) {
        return account.code.length > 0;
    }

    function getRouterAddress() public view returns (address) {
        if (block.chainid == 56) {
            return 0x10ED43C718714eb63d5aA57B78B54704E256024E;
        } else if (block.chainid == 97) {
            return 0xD99D1c33F9fC3444f8101754aBC46c52416550D1;
        } else if (block.chainid == 1 || block.chainid == 5) {
            return 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        } else {
            revert("Cannot found router on this network");
        }
    }

    function claimStuckTokens(address token) external onlyOwner {
        require(token != address(this), "Owner cannot claim native tokens");

        if (token == address(0x0)) {
            payable(msg.sender).transfer(address(this).balance);
            return;
        }
        IERC20 ERC20token = IERC20(token);
        uint256 balance = ERC20token.balanceOf(address(this));
        ERC20token.safeTransfer(msg.sender, balance);
    }

    function setBuyTax(
        uint256 _liquidityTaxBuy,
        uint256 _marketingTaxBuy
    ) external onlyOwner {
        require(
            liquidityTaxBuy != _liquidityTaxBuy ||
                marketingTaxBuy != _marketingTaxBuy,
            "Buy Tax already on that amount"
        );
        require(
            _liquidityTaxBuy + _marketingTaxBuy <= 1_000,
            "Buy Tax cannot be more than 10%"
        );

        liquidityTaxBuy = _liquidityTaxBuy;
        marketingTaxBuy = _marketingTaxBuy;

        emit UpdateBuyTax(_liquidityTaxBuy, _marketingTaxBuy);
    }

    function setSellTax(
        uint256 _liquidityTaxSell,
        uint256 _marketingTaxSell
    ) external onlyOwner {
        require(
            liquidityTaxSell != _liquidityTaxSell ||
                marketingTaxSell != _marketingTaxSell,
            "Sell Tax already on that amount"
        );
        require(
            _liquidityTaxSell + _marketingTaxSell <= 1_000,
            "Sell Tax cannot be more than 10%"
        );

        liquidityTaxSell = _liquidityTaxSell;
        marketingTaxSell = _marketingTaxSell;

        emit UpdateSellTax(_liquidityTaxSell, _marketingTaxSell);
    }

    function setMarketingWallet(address _marketingWallet) external onlyOwner {
        require(
            _marketingWallet != marketingWallet,
            "Marketing wallet is already that address"
        );
        require(
            _marketingWallet != address(0),
            "Marketing wallet cannot be the zero address"
        );
        require(
            !isContract(_marketingWallet),
            "Marketing wallet cannot be a contract"
        );

        marketingWallet = _marketingWallet;
        emit UpdateMarketingWallet(_marketingWallet);
    }

    function setSwapTokensAtAmount(uint256 amount) external onlyOwner {
        require(
            swapTokensAtAmount != amount,
            "SwapTokensAtAmount already on that amount"
        );
        require(
            amount >= totalSupply() / 1_000_000,
            "Amount must be equal or greater than 0.000001% of Total Supply"
        );

        swapTokensAtAmount = amount;

        emit UpdateSwapTokensAtAmount(amount);
    }

    function toggleSwapBack(bool status) external onlyOwner {
        require(isSwapBackEnabled != status, "SwapBack already on status");

        isSwapBackEnabled = status;
        emit UpdateSwapBackStatus(status);
    }

    function setAutomatedMarketMakerPair(
        address pair,
        bool status
    ) external onlyOwner {
        require(
            _isAutomatedMarketMakerPair[pair] != status,
            "Pair address is already the value of 'status'"
        );
        require(pair != address(uniswapV2Pair), "Cannot set this pair");

        _isAutomatedMarketMakerPair[pair] = status;

        emit UpdateAutomatedMarketMakerPair(pair, status);
    }

    function isAutomatedMarketMakerPair(
        address pair
    ) external view returns (bool) {
        return _isAutomatedMarketMakerPair[pair];
    }

    function setExcludeFromFees(
        address account,
        bool excluded
    ) external onlyOwner {
        require(
            _isExcludedFromFees[account] != excluded,
            "Account is already the value of 'excluded'"
        );
        _isExcludedFromFees[account] = excluded;

        emit UpdateExcludeFromFees(account, excluded);
    }

    function isExcludedFromFees(address account) external view returns (bool) {
        return _isExcludedFromFees[account];
    }

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

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            !swapping &&
            !_isAutomatedMarketMakerPair[from] &&
            isSwapBackEnabled &&
            liquidityTokenAmount + marketingTokenAmount > 0
        ) {
            swapBack();
        }

        bool takeFee = true;

        if (_isExcludedFromFees[from] || _isExcludedFromFees[to] || swapping) {
            takeFee = false;
        }

        if (takeFee) {
            uint256 tempLiquidityAmount;
            uint256 tempMarketingAmount;

            if (_isAutomatedMarketMakerPair[from]) {
                tempLiquidityAmount = (amount * liquidityTaxBuy) / denominator;
                tempMarketingAmount = (amount * marketingTaxBuy) / denominator;
            } else if (_isAutomatedMarketMakerPair[to]) {
                tempLiquidityAmount = (amount * liquidityTaxSell) / denominator;
                tempMarketingAmount = (amount * marketingTaxSell) / denominator;
            }

            liquidityTokenAmount += tempLiquidityAmount;
            marketingTokenAmount += tempMarketingAmount;

            uint256 fees = tempLiquidityAmount + tempMarketingAmount;

            if (fees > 0) {
                amount -= fees;
                super._transfer(from, address(this), fees);
            }
        }

        super._transfer(from, to, amount);
    }

    function swapBack() internal inSwap {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        uint256 contractTokenBalance = balanceOf(address(this));

        uint256 totalTax = liquidityTokenAmount + marketingTokenAmount;

        uint256 liquifyToken = (contractTokenBalance *
            (liquidityTokenAmount / 2)) / totalTax;

        uint256 swapBackAmount = contractTokenBalance - liquifyToken;

        totalTax -= (liquidityTokenAmount) / 2;

        try
            uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
                swapBackAmount,
                0,
                path,
                address(this),
                block.timestamp
            )
        {} catch {
            return;
        }

        uint256 newBalance = address(this).balance;

        uint256 marketingBNB = (newBalance * marketingTokenAmount) / totalTax;
        uint256 liquifyBNB = newBalance - marketingBNB;

        if (liquifyToken > 0 && liquifyBNB > 0) {
            try
                uniswapV2Router.addLiquidityETH{value: liquifyBNB}(
                    address(this),
                    liquifyToken,
                    0,
                    0,
                    address(0xdead),
                    block.timestamp
                )
            {} catch {}
        }

        if (marketingBNB > 0) {
            sendBNB(marketingWallet, marketingBNB);
        }

        liquidityTokenAmount = 0;
        marketingTokenAmount = 0;
    }

    function sendBNB(
        address _to,
        uint256 amount
    ) internal nonReentrant returns (bool) {
        if (address(this).balance < amount) return false;

        (bool success, ) = payable(_to).call{value: amount}("");

        return success;
    }

    function manualSwapBack() external {
        uint256 contractTokenBalance = balanceOf(address(this));

        require(contractTokenBalance > 0, "Cant Swap Back 0 Token!");

        swapBack();
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"UpdateAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"liquidityTaxBuy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketingTaxBuy","type":"uint256"}],"name":"UpdateBuyTax","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"UpdateExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"marketingWallet","type":"address"}],"name":"UpdateMarketingWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"liquidityTaxSell","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketingTaxSell","type":"uint256"}],"name":"UpdateSellTax","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"UpdateSwapBackStatus","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"swapTokensAtAmount","type":"uint256"}],"name":"UpdateSwapTokensAtAmount","type":"event"},{"stateMutability":"payable","type":"fallback"},{"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":[{"internalType":"address","name":"token","type":"address"}],"name":"claimStuckTokens","outputs":[],"stateMutability":"nonpayable","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":"denominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRouterAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[{"internalType":"address","name":"pair","type":"address"}],"name":"isAutomatedMarketMakerPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSwapBackEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityTaxBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityTaxSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityTokenAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingTaxBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingTaxSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingTokenAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityTaxBuy","type":"uint256"},{"internalType":"uint256","name":"_marketingTaxBuy","type":"uint256"}],"name":"setBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityTaxSell","type":"uint256"},{"internalType":"uint256","name":"_marketingTaxSell","type":"uint256"}],"name":"setSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"toggleSwapBack","outputs":[],"stateMutability":"nonpayable","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"}]

60e06040523480156200001157600080fd5b506040518060400160405280600d81526020017f4f6e6520506561726c20322e30000000000000000000000000000000000000008152506040518060400160405280600b81526020017f4f4e45504541524c322e300000000000000000000000000000000000000000008152506200009e62000092620005a760201b60201c565b620005af60201b60201c565b600180819055508160059081620000b6919062000d2a565b508060069081620000c8919062000d2a565b505050620000f8620000df6200067360201b60201c565b6b204fce5e3e250261100000006200069c60201b60201c565b60646007819055506064600881905550610384600981905550610384600a819055506127106080818152505073ee25c13deb75ea6ac0e18eaf0be7e707b079934c600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620186a06200018d6200080a60201b60201c565b62000199919062000e6f565b600e819055506001600f60006101000a81548160ff0219169083151502179055506000620001cc6200081460201b60201c565b90508073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff168152505060a05173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000250573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000276919062000f11565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060a05173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000306919062000f11565b6040518363ffffffff1660e01b81526004016200032592919062000f54565b6020604051808303816000875af115801562000345573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200036b919062000f11565b73ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff1681525050620003d33060a0517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff620008d560201b60201c565b60016010600060c05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016011600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601160006200049d6200067360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016011600060a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505062001235565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200070e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007059062000fe2565b60405180910390fd5b620007226000838362000aa660201b60201c565b806004600082825462000736919062001004565b9250508190555080600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620007ea919062001050565b60405180910390a3620008066000838362000aab60201b60201c565b5050565b6000600454905090565b6000603846036200083c577310ed43c718714eb63d5aa57b78b54704e256024e9050620008d2565b60614603620008625773d99d1c33f9fc3444f8101754abc46c52416550d19050620008d2565b6001461480620008725750600546145b156200089557737a250d5630b4cf539739df2c5dacb4c659f2488d9050620008d2565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008c990620010e3565b60405180910390fd5b90565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362000947576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200093e906200117b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620009b9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009b09062001213565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000a99919062001050565b60405180910390a3505050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000b3257607f821691505b60208210810362000b485762000b4762000aea565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000bb27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000b73565b62000bbe868362000b73565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000c0b62000c0562000bff8462000bd6565b62000be0565b62000bd6565b9050919050565b6000819050919050565b62000c278362000bea565b62000c3f62000c368262000c12565b84845462000b80565b825550505050565b600090565b62000c5662000c47565b62000c6381848462000c1c565b505050565b5b8181101562000c8b5762000c7f60008262000c4c565b60018101905062000c69565b5050565b601f82111562000cda5762000ca48162000b4e565b62000caf8462000b63565b8101602085101562000cbf578190505b62000cd762000cce8562000b63565b83018262000c68565b50505b505050565b600082821c905092915050565b600062000cff6000198460080262000cdf565b1980831691505092915050565b600062000d1a838362000cec565b9150826002028217905092915050565b62000d358262000ab0565b67ffffffffffffffff81111562000d515762000d5062000abb565b5b62000d5d825462000b19565b62000d6a82828562000c8f565b600060209050601f83116001811462000da2576000841562000d8d578287015190505b62000d99858262000d0c565b86555062000e09565b601f19841662000db28662000b4e565b60005b8281101562000ddc5784890151825560018201915060208501945060208101905062000db5565b8683101562000dfc578489015162000df8601f89168262000cec565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000e7c8262000bd6565b915062000e898362000bd6565b92508262000e9c5762000e9b62000e11565b5b828204905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000ed98262000eac565b9050919050565b62000eeb8162000ecc565b811462000ef757600080fd5b50565b60008151905062000f0b8162000ee0565b92915050565b60006020828403121562000f2a5762000f2962000ea7565b5b600062000f3a8482850162000efa565b91505092915050565b62000f4e8162000ecc565b82525050565b600060408201905062000f6b600083018562000f43565b62000f7a602083018462000f43565b9392505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000fca601f8362000f81565b915062000fd78262000f92565b602082019050919050565b6000602082019050818103600083015262000ffd8162000fbb565b9050919050565b6000620010118262000bd6565b91506200101e8362000bd6565b925082820190508082111562001039576200103862000e40565b5b92915050565b6200104a8162000bd6565b82525050565b60006020820190506200106760008301846200103f565b92915050565b7f43616e6e6f7420666f756e6420726f75746572206f6e2074686973206e65747760008201527f6f726b0000000000000000000000000000000000000000000000000000000000602082015250565b6000620010cb60238362000f81565b9150620010d8826200106d565b604082019050919050565b60006020820190508181036000830152620010fe81620010bc565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006200116360248362000f81565b9150620011708262001105565b604082019050919050565b60006020820190508181036000830152620011968162001154565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000620011fb60228362000f81565b915062001208826200119d565b604082019050919050565b600060208201905081810360008301526200122e81620011ec565b9050919050565b60805160a05160c0516145b96200129d60003960008181610cfd0152611220015260008181610aae015281816121e501528181612338015261241a01526000818161116201528181611f4801528181611f8301528181612015015261205001526145b96000f3fe6080604052600436106102295760003560e01c8063715018a6116101235780639a7a23d6116100ab578063d63cad221161006f578063d63cad2214610819578063dd62ed3e14610842578063e2f456051461087f578063f2fde38b146108aa578063f9d0831a146108d357610230565b80639a7a23d614610722578063a457c2d71461074b578063a9059cbb14610788578063afa4f3b2146107c5578063d54f7d5e146107ee57610230565b80637949a403116100f25780637949a403146106395780638123bdc8146106765780638da5cb5b146106a157806395d89b41146106cc57806396ce0795146106f757610230565b8063715018a6146105a157806371afc713146105b8578063721e6233146105e357806375f0a8741461060e57610230565b8063248ba7ed116101b15780634fbee193116101755780634fbee193146104bc57806352dfc8d0146104f95780635d098b381461052457806366eb37851461054d57806370a082311461056457610230565b8063248ba7ed146103d3578063313ce567146103fe578063395093511461042957806342d0b0bc1461046657806349bd5a5e1461049157610230565b80631694505e116101f85780631694505e146102ee57806318160ddd146103195780631f88a23e1461034457806323b872dd1461036d578063247b912d146103aa57610230565b806305a1f36d1461023257806306fdde031461025b578063095ea7b3146102865780630abc8e7b146102c357610230565b3661023057005b005b34801561023e57600080fd5b5061025960048036038101906102549190612cc1565b6108fc565b005b34801561026757600080fd5b506102706109f1565b60405161027d9190612d91565b60405180910390f35b34801561029257600080fd5b506102ad60048036038101906102a89190612e11565b610a83565b6040516102ba9190612e6c565b60405180910390f35b3480156102cf57600080fd5b506102d8610aa6565b6040516102e59190612e96565b60405180910390f35b3480156102fa57600080fd5b50610303610aac565b6040516103109190612f10565b60405180910390f35b34801561032557600080fd5b5061032e610ad0565b60405161033b9190612e96565b60405180910390f35b34801561035057600080fd5b5061036b60048036038101906103669190612f57565b610ada565b005b34801561037957600080fd5b50610394600480360381019061038f9190612f84565b610b8b565b6040516103a19190612e6c565b60405180910390f35b3480156103b657600080fd5b506103d160048036038101906103cc9190612cc1565b610bba565b005b3480156103df57600080fd5b506103e8610caf565b6040516103f59190612e96565b60405180910390f35b34801561040a57600080fd5b50610413610cb5565b6040516104209190612ff3565b60405180910390f35b34801561043557600080fd5b50610450600480360381019061044b9190612e11565b610cbe565b60405161045d9190612e6c565b60405180910390f35b34801561047257600080fd5b5061047b610cf5565b6040516104889190612e96565b60405180910390f35b34801561049d57600080fd5b506104a6610cfb565b6040516104b3919061301d565b60405180910390f35b3480156104c857600080fd5b506104e360048036038101906104de9190613038565b610d1f565b6040516104f09190612e6c565b60405180910390f35b34801561050557600080fd5b5061050e610d75565b60405161051b9190612e6c565b60405180910390f35b34801561053057600080fd5b5061054b60048036038101906105469190613038565b610d88565b005b34801561055957600080fd5b50610562610f5f565b005b34801561057057600080fd5b5061058b60048036038101906105869190613038565b610fba565b6040516105989190612e96565b60405180910390f35b3480156105ad57600080fd5b506105b6611003565b005b3480156105c457600080fd5b506105cd611017565b6040516105da9190612e96565b60405180910390f35b3480156105ef57600080fd5b506105f861101d565b6040516106059190612e96565b60405180910390f35b34801561061a57600080fd5b50610623611023565b604051610630919061301d565b60405180910390f35b34801561064557600080fd5b50610660600480360381019061065b9190613038565b611049565b60405161066d9190612e6c565b60405180910390f35b34801561068257600080fd5b5061068b61109f565b6040516106989190612e96565b60405180910390f35b3480156106ad57600080fd5b506106b66110a5565b6040516106c3919061301d565b60405180910390f35b3480156106d857600080fd5b506106e16110ce565b6040516106ee9190612d91565b60405180910390f35b34801561070357600080fd5b5061070c611160565b6040516107199190612e96565b60405180910390f35b34801561072e57600080fd5b5061074960048036038101906107449190613065565b611184565b005b34801561075757600080fd5b50610772600480360381019061076d9190612e11565b611355565b60405161077f9190612e6c565b60405180910390f35b34801561079457600080fd5b506107af60048036038101906107aa9190612e11565b6113cc565b6040516107bc9190612e6c565b60405180910390f35b3480156107d157600080fd5b506107ec60048036038101906107e791906130a5565b6113ef565b005b3480156107fa57600080fd5b506108036114d4565b604051610810919061301d565b60405180910390f35b34801561082557600080fd5b50610840600480360381019061083b9190613065565b61158c565b005b34801561084e57600080fd5b50610869600480360381019061086491906130d2565b6116cf565b6040516108769190612e96565b60405180910390f35b34801561088b57600080fd5b50610894611756565b6040516108a19190612e96565b60405180910390f35b3480156108b657600080fd5b506108d160048036038101906108cc9190613038565b61175c565b005b3480156108df57600080fd5b506108fa60048036038101906108f59190613038565b6117df565b005b610904611989565b8160075414158061091757508060095414155b610956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094d9061315e565b60405180910390fd5b6103e8818361096591906131ad565b11156109a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099d9061322d565b60405180910390fd5b81600781905550806009819055507f4350dcfc5e910c40b6d16fdf94cbbc788c1f4ac51a7dc561b081157d4b8ed4ec82826040516109e592919061324d565b60405180910390a15050565b606060058054610a00906132a5565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2c906132a5565b8015610a795780601f10610a4e57610100808354040283529160200191610a79565b820191906000526020600020905b815481529060010190602001808311610a5c57829003601f168201915b5050505050905090565b600080610a8e611a07565b9050610a9b818585611a0f565b600191505092915050565b60075481565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600454905090565b610ae2611989565b801515600f60009054906101000a900460ff16151503610b37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2e90613322565b60405180910390fd5b80600f60006101000a81548160ff0219169083151502179055507fc2385a9c5843e4cd7e987e979b22e4d4748ec5dbbfc325ee4023a8c1914809b781604051610b809190612e6c565b60405180910390a150565b600080610b96611a07565b9050610ba3858285611bd8565b610bae858585611c64565b60019150509392505050565b610bc2611989565b81600854141580610bd5575080600a5414155b610c14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0b9061338e565b60405180910390fd5b6103e88183610c2391906131ad565b1115610c64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5b906133fa565b60405180910390fd5b8160088190555080600a819055507fb67587dc52452dfa7b987911428a2b47c610929d62284cda9f4aafb90435ad4e8282604051610ca392919061324d565b60405180910390a15050565b60085481565b60006012905090565b600080610cc9611a07565b9050610cea818585610cdb85896116cf565b610ce591906131ad565b611a0f565b600191505092915050565b600a5481565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600f60009054906101000a900460ff1681565b610d90611989565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610e20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e179061348c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610e8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e869061351e565b60405180910390fd5b610e9881612108565b15610ed8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ecf906135b0565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f335aad0eda24dacfa324b3d651daa091864338cf7d4af9d5087ba1c5ee1174f060405160405180910390a250565b6000610f6a30610fba565b905060008111610faf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa69061361c565b60405180910390fd5b610fb761212b565b50565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61100b611989565b6110156000612532565b565b600c5481565b60095481565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600b5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600680546110dd906132a5565b80601f0160208091040260200160405190810160405280929190818152602001828054611109906132a5565b80156111565780601f1061112b57610100808354040283529160200191611156565b820191906000526020600020905b81548152906001019060200180831161113957829003601f168201915b5050505050905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b61118c611989565b801515601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615150361121e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611215906136ae565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036112ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a39061371a565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167fb6f1aed3b1ced30ce666a8b7f2e12b02aed514cdab677738640be9937f133205826040516113499190612e6c565b60405180910390a25050565b600080611360611a07565b9050600061136e82866116cf565b9050838110156113b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113aa906137ac565b60405180910390fd5b6113c08286868403611a0f565b60019250505092915050565b6000806113d7611a07565b90506113e4818585611c64565b600191505092915050565b6113f7611989565b80600e540361143b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114329061383e565b60405180910390fd5b620f4240611447610ad0565b611451919061388d565b811015611493576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148a90613930565b60405180910390fd5b80600e819055507fe82283d0f679a15d3811ecbaa8b6a8afb1b110e22daa33b359c37bcae5a11e48816040516114c99190612e96565b60405180910390a150565b6000603846036114fa577310ed43c718714eb63d5aa57b78b54704e256024e9050611589565b6061460361151e5773d99d1c33f9fc3444f8101754abc46c52416550d19050611589565b600146148061152d5750600546145b1561154e57737a250d5630b4cf539739df2c5dacb4c659f2488d9050611589565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611580906139c2565b60405180910390fd5b90565b611594611989565b801515601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503611626576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161d90613a54565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167fee48373bc01f03d5728ce4cf0b4e1c35d75d7da201d5b5d5013a94e50941efe1826040516116c39190612e6c565b60405180910390a25050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600e5481565b611764611989565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036117d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ca90613ae6565b60405180910390fd5b6117dc81612532565b50565b6117e7611989565b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611855576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184c90613b52565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036118d5573373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156118cf573d6000803e3d6000fd5b50611986565b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611915919061301d565b602060405180830381865afa158015611932573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119569190613b87565b905061198333828473ffffffffffffffffffffffffffffffffffffffff166125f69092919063ffffffff16565b50505b50565b611991611a07565b73ffffffffffffffffffffffffffffffffffffffff166119af6110a5565b73ffffffffffffffffffffffffffffffffffffffff1614611a05576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fc90613c00565b60405180910390fd5b565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611a7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7590613c92565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611aed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae490613d24565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611bcb9190612e96565b60405180910390a3505050565b6000611be484846116cf565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611c5e5781811015611c50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4790613d90565b60405180910390fd5b611c5d8484848403611a0f565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611cd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cca90613e22565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3990613eb4565b60405180910390fd5b60008103611d5b57611d568383600061267c565b612103565b6000611d6630610fba565b90506000600e548210159050808015611d8c5750600d60149054906101000a900460ff16155b8015611de25750601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611dfa5750600f60009054906101000a900460ff165b8015611e1557506000600c54600b54611e1391906131ad565b115b15611e2357611e2261212b565b5b600060019050601160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611eca5750601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80611ee15750600d60149054906101000a900460ff165b15611eeb57600090505b80156120f457600080601060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611fc1577f000000000000000000000000000000000000000000000000000000000000000060075487611f759190613ed4565b611f7f919061388d565b91507f000000000000000000000000000000000000000000000000000000000000000060095487611fb09190613ed4565b611fba919061388d565b905061208b565b601060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561208a577f0000000000000000000000000000000000000000000000000000000000000000600854876120429190613ed4565b61204c919061388d565b91507f0000000000000000000000000000000000000000000000000000000000000000600a548761207d9190613ed4565b612087919061388d565b90505b5b81600b600082825461209d91906131ad565b9250508190555080600c60008282546120b691906131ad565b92505081905550600081836120cb91906131ad565b905060008111156120f05780876120e29190613f16565b96506120ef89308361267c565b5b5050505b6120ff86868661267c565b5050505b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6001600d60146101000a81548160ff0219169083151502179055506000600267ffffffffffffffff81111561216357612162613f4a565b5b6040519080825280602002602001820160405280156121915781602001602082028036833780820191505090505b50905030816000815181106121a9576121a8613f79565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561224e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122729190613fbd565b8160018151811061228657612285613f79565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060006122cb30610fba565b90506000600c54600b546122df91906131ad565b90506000816002600b546122f3919061388d565b846122fe9190613ed4565b612308919061388d565b9050600081846123189190613f16565b90506002600b54612329919061388d565b836123349190613f16565b92507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478260008830426040518663ffffffff1660e01b81526004016123989594939291906140e3565b600060405180830381600087803b1580156123b257600080fd5b505af19250505080156123c3575060015b6123d1575050505050612515565b6000479050600084600c54836123e79190613ed4565b6123f1919061388d565b9050600081836124019190613f16565b90506000851180156124135750600081115b156124c5577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308860008061dead426040518863ffffffff1660e01b815260040161247f9695949392919061413d565b60606040518083038185885af1935050505080156124bb57506040513d601f19601f820116820180604052508101906124b8919061419e565b60015b156124c4575050505b5b60008211156124fc576124fa600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836128f5565b505b6000600b819055506000600c8190555050505050505050505b6000600d60146101000a81548160ff021916908315150217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6126778363a9059cbb60e01b84846040516024016126159291906141f1565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061298f565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036126eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e290613e22565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361275a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275190613eb4565b60405180910390fd5b612765838383612a57565b6000600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156127ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e39061428c565b60405180910390fd5b818103600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516128dc9190612e96565b60405180910390a36128ef848484612a5c565b50505050565b60006128ff612a61565b814710156129105760009050612981565b60008373ffffffffffffffffffffffffffffffffffffffff1683604051612936906142dd565b60006040518083038185875af1925050503d8060008114612973576040519150601f19603f3d011682016040523d82523d6000602084013e612978565b606091505b50509050809150505b612989612ab0565b92915050565b60006129f1826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612ab99092919063ffffffff16565b9050600081511480612a13575080806020019051810190612a129190614307565b5b612a52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a49906143a6565b60405180910390fd5b505050565b505050565b505050565b600260015403612aa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9d90614412565b60405180910390fd5b6002600181905550565b60018081905550565b6060612ac88484600085612ad1565b90509392505050565b606082471015612b16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0d906144a4565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051612b3f9190614500565b60006040518083038185875af1925050503d8060008114612b7c576040519150601f19603f3d011682016040523d82523d6000602084013e612b81565b606091505b5091509150612b9287838387612b9e565b92505050949350505050565b60608315612c00576000835103612bf857612bb885612c13565b612bf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bee90614563565b60405180910390fd5b5b829050612c0b565b612c0a8383612c36565b5b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600082511115612c495781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7d9190612d91565b60405180910390fd5b600080fd5b6000819050919050565b612c9e81612c8b565b8114612ca957600080fd5b50565b600081359050612cbb81612c95565b92915050565b60008060408385031215612cd857612cd7612c86565b5b6000612ce685828601612cac565b9250506020612cf785828601612cac565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612d3b578082015181840152602081019050612d20565b60008484015250505050565b6000601f19601f8301169050919050565b6000612d6382612d01565b612d6d8185612d0c565b9350612d7d818560208601612d1d565b612d8681612d47565b840191505092915050565b60006020820190508181036000830152612dab8184612d58565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612dde82612db3565b9050919050565b612dee81612dd3565b8114612df957600080fd5b50565b600081359050612e0b81612de5565b92915050565b60008060408385031215612e2857612e27612c86565b5b6000612e3685828601612dfc565b9250506020612e4785828601612cac565b9150509250929050565b60008115159050919050565b612e6681612e51565b82525050565b6000602082019050612e816000830184612e5d565b92915050565b612e9081612c8b565b82525050565b6000602082019050612eab6000830184612e87565b92915050565b6000819050919050565b6000612ed6612ed1612ecc84612db3565b612eb1565b612db3565b9050919050565b6000612ee882612ebb565b9050919050565b6000612efa82612edd565b9050919050565b612f0a81612eef565b82525050565b6000602082019050612f256000830184612f01565b92915050565b612f3481612e51565b8114612f3f57600080fd5b50565b600081359050612f5181612f2b565b92915050565b600060208284031215612f6d57612f6c612c86565b5b6000612f7b84828501612f42565b91505092915050565b600080600060608486031215612f9d57612f9c612c86565b5b6000612fab86828701612dfc565b9350506020612fbc86828701612dfc565b9250506040612fcd86828701612cac565b9150509250925092565b600060ff82169050919050565b612fed81612fd7565b82525050565b60006020820190506130086000830184612fe4565b92915050565b61301781612dd3565b82525050565b6000602082019050613032600083018461300e565b92915050565b60006020828403121561304e5761304d612c86565b5b600061305c84828501612dfc565b91505092915050565b6000806040838503121561307c5761307b612c86565b5b600061308a85828601612dfc565b925050602061309b85828601612f42565b9150509250929050565b6000602082840312156130bb576130ba612c86565b5b60006130c984828501612cac565b91505092915050565b600080604083850312156130e9576130e8612c86565b5b60006130f785828601612dfc565b925050602061310885828601612dfc565b9150509250929050565b7f4275792054617820616c7265616479206f6e207468617420616d6f756e740000600082015250565b6000613148601e83612d0c565b915061315382613112565b602082019050919050565b600060208201905081810360008301526131778161313b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006131b882612c8b565b91506131c383612c8b565b92508282019050808211156131db576131da61317e565b5b92915050565b7f427579205461782063616e6e6f74206265206d6f7265207468616e2031302500600082015250565b6000613217601f83612d0c565b9150613222826131e1565b602082019050919050565b600060208201905081810360008301526132468161320a565b9050919050565b60006040820190506132626000830185612e87565b61326f6020830184612e87565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806132bd57607f821691505b6020821081036132d0576132cf613276565b5b50919050565b7f537761704261636b20616c7265616479206f6e20737461747573000000000000600082015250565b600061330c601a83612d0c565b9150613317826132d6565b602082019050919050565b6000602082019050818103600083015261333b816132ff565b9050919050565b7f53656c6c2054617820616c7265616479206f6e207468617420616d6f756e7400600082015250565b6000613378601f83612d0c565b915061338382613342565b602082019050919050565b600060208201905081810360008301526133a78161336b565b9050919050565b7f53656c6c205461782063616e6e6f74206265206d6f7265207468616e20313025600082015250565b60006133e4602083612d0c565b91506133ef826133ae565b602082019050919050565b60006020820190508181036000830152613413816133d7565b9050919050565b7f4d61726b6574696e672077616c6c657420697320616c7265616479207468617460008201527f2061646472657373000000000000000000000000000000000000000000000000602082015250565b6000613476602883612d0c565b91506134818261341a565b604082019050919050565b600060208201905081810360008301526134a581613469565b9050919050565b7f4d61726b6574696e672077616c6c65742063616e6e6f7420626520746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000613508602b83612d0c565b9150613513826134ac565b604082019050919050565b60006020820190508181036000830152613537816134fb565b9050919050565b7f4d61726b6574696e672077616c6c65742063616e6e6f74206265206120636f6e60008201527f7472616374000000000000000000000000000000000000000000000000000000602082015250565b600061359a602583612d0c565b91506135a58261353e565b604082019050919050565b600060208201905081810360008301526135c98161358d565b9050919050565b7f43616e742053776170204261636b203020546f6b656e21000000000000000000600082015250565b6000613606601783612d0c565b9150613611826135d0565b602082019050919050565b60006020820190508181036000830152613635816135f9565b9050919050565b7f50616972206164647265737320697320616c7265616479207468652076616c7560008201527f65206f6620277374617475732700000000000000000000000000000000000000602082015250565b6000613698602d83612d0c565b91506136a38261363c565b604082019050919050565b600060208201905081810360008301526136c78161368b565b9050919050565b7f43616e6e6f742073657420746869732070616972000000000000000000000000600082015250565b6000613704601483612d0c565b915061370f826136ce565b602082019050919050565b60006020820190508181036000830152613733816136f7565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613796602583612d0c565b91506137a18261373a565b604082019050919050565b600060208201905081810360008301526137c581613789565b9050919050565b7f53776170546f6b656e734174416d6f756e7420616c7265616479206f6e20746860008201527f617420616d6f756e740000000000000000000000000000000000000000000000602082015250565b6000613828602983612d0c565b9150613833826137cc565b604082019050919050565b600060208201905081810360008301526138578161381b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061389882612c8b565b91506138a383612c8b565b9250826138b3576138b261385e565b5b828204905092915050565b7f416d6f756e74206d75737420626520657175616c206f7220677265617465722060008201527f7468616e20302e30303030303125206f6620546f74616c20537570706c790000602082015250565b600061391a603e83612d0c565b9150613925826138be565b604082019050919050565b600060208201905081810360008301526139498161390d565b9050919050565b7f43616e6e6f7420666f756e6420726f75746572206f6e2074686973206e65747760008201527f6f726b0000000000000000000000000000000000000000000000000000000000602082015250565b60006139ac602383612d0c565b91506139b782613950565b604082019050919050565b600060208201905081810360008301526139db8161399f565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b6000613a3e602a83612d0c565b9150613a49826139e2565b604082019050919050565b60006020820190508181036000830152613a6d81613a31565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613ad0602683612d0c565b9150613adb82613a74565b604082019050919050565b60006020820190508181036000830152613aff81613ac3565b9050919050565b7f4f776e65722063616e6e6f7420636c61696d206e617469766520746f6b656e73600082015250565b6000613b3c602083612d0c565b9150613b4782613b06565b602082019050919050565b60006020820190508181036000830152613b6b81613b2f565b9050919050565b600081519050613b8181612c95565b92915050565b600060208284031215613b9d57613b9c612c86565b5b6000613bab84828501613b72565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613bea602083612d0c565b9150613bf582613bb4565b602082019050919050565b60006020820190508181036000830152613c1981613bdd565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613c7c602483612d0c565b9150613c8782613c20565b604082019050919050565b60006020820190508181036000830152613cab81613c6f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613d0e602283612d0c565b9150613d1982613cb2565b604082019050919050565b60006020820190508181036000830152613d3d81613d01565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613d7a601d83612d0c565b9150613d8582613d44565b602082019050919050565b60006020820190508181036000830152613da981613d6d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613e0c602583612d0c565b9150613e1782613db0565b604082019050919050565b60006020820190508181036000830152613e3b81613dff565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613e9e602383612d0c565b9150613ea982613e42565b604082019050919050565b60006020820190508181036000830152613ecd81613e91565b9050919050565b6000613edf82612c8b565b9150613eea83612c8b565b9250828202613ef881612c8b565b91508282048414831517613f0f57613f0e61317e565b5b5092915050565b6000613f2182612c8b565b9150613f2c83612c8b565b9250828203905081811115613f4457613f4361317e565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050613fb781612de5565b92915050565b600060208284031215613fd357613fd2612c86565b5b6000613fe184828501613fa8565b91505092915050565b6000819050919050565b600061400f61400a61400584613fea565b612eb1565b612c8b565b9050919050565b61401f81613ff4565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61405a81612dd3565b82525050565b600061406c8383614051565b60208301905092915050565b6000602082019050919050565b600061409082614025565b61409a8185614030565b93506140a583614041565b8060005b838110156140d65781516140bd8882614060565b97506140c883614078565b9250506001810190506140a9565b5085935050505092915050565b600060a0820190506140f86000830188612e87565b6141056020830187614016565b81810360408301526141178186614085565b9050614126606083018561300e565b6141336080830184612e87565b9695505050505050565b600060c082019050614152600083018961300e565b61415f6020830188612e87565b61416c6040830187614016565b6141796060830186614016565b614186608083018561300e565b61419360a0830184612e87565b979650505050505050565b6000806000606084860312156141b7576141b6612c86565b5b60006141c586828701613b72565b93505060206141d686828701613b72565b92505060406141e786828701613b72565b9150509250925092565b6000604082019050614206600083018561300e565b6142136020830184612e87565b9392505050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614276602683612d0c565b91506142818261421a565b604082019050919050565b600060208201905081810360008301526142a581614269565b9050919050565b600081905092915050565b50565b60006142c76000836142ac565b91506142d2826142b7565b600082019050919050565b60006142e8826142ba565b9150819050919050565b60008151905061430181612f2b565b92915050565b60006020828403121561431d5761431c612c86565b5b600061432b848285016142f2565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b6000614390602a83612d0c565b915061439b82614334565b604082019050919050565b600060208201905081810360008301526143bf81614383565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b60006143fc601f83612d0c565b9150614407826143c6565b602082019050919050565b6000602082019050818103600083015261442b816143ef565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b600061448e602683612d0c565b915061449982614432565b604082019050919050565b600060208201905081810360008301526144bd81614481565b9050919050565b600081519050919050565b60006144da826144c4565b6144e481856142ac565b93506144f4818560208601612d1d565b80840191505092915050565b600061450c82846144cf565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b600061454d601d83612d0c565b915061455882614517565b602082019050919050565b6000602082019050818103600083015261457c81614540565b905091905056fea264697066735822122084556f13a1b2fafceeddc14efe1b05f8a147785ac0d27c920dc1dc5e190511d064736f6c63430008130033

Deployed Bytecode

0x6080604052600436106102295760003560e01c8063715018a6116101235780639a7a23d6116100ab578063d63cad221161006f578063d63cad2214610819578063dd62ed3e14610842578063e2f456051461087f578063f2fde38b146108aa578063f9d0831a146108d357610230565b80639a7a23d614610722578063a457c2d71461074b578063a9059cbb14610788578063afa4f3b2146107c5578063d54f7d5e146107ee57610230565b80637949a403116100f25780637949a403146106395780638123bdc8146106765780638da5cb5b146106a157806395d89b41146106cc57806396ce0795146106f757610230565b8063715018a6146105a157806371afc713146105b8578063721e6233146105e357806375f0a8741461060e57610230565b8063248ba7ed116101b15780634fbee193116101755780634fbee193146104bc57806352dfc8d0146104f95780635d098b381461052457806366eb37851461054d57806370a082311461056457610230565b8063248ba7ed146103d3578063313ce567146103fe578063395093511461042957806342d0b0bc1461046657806349bd5a5e1461049157610230565b80631694505e116101f85780631694505e146102ee57806318160ddd146103195780631f88a23e1461034457806323b872dd1461036d578063247b912d146103aa57610230565b806305a1f36d1461023257806306fdde031461025b578063095ea7b3146102865780630abc8e7b146102c357610230565b3661023057005b005b34801561023e57600080fd5b5061025960048036038101906102549190612cc1565b6108fc565b005b34801561026757600080fd5b506102706109f1565b60405161027d9190612d91565b60405180910390f35b34801561029257600080fd5b506102ad60048036038101906102a89190612e11565b610a83565b6040516102ba9190612e6c565b60405180910390f35b3480156102cf57600080fd5b506102d8610aa6565b6040516102e59190612e96565b60405180910390f35b3480156102fa57600080fd5b50610303610aac565b6040516103109190612f10565b60405180910390f35b34801561032557600080fd5b5061032e610ad0565b60405161033b9190612e96565b60405180910390f35b34801561035057600080fd5b5061036b60048036038101906103669190612f57565b610ada565b005b34801561037957600080fd5b50610394600480360381019061038f9190612f84565b610b8b565b6040516103a19190612e6c565b60405180910390f35b3480156103b657600080fd5b506103d160048036038101906103cc9190612cc1565b610bba565b005b3480156103df57600080fd5b506103e8610caf565b6040516103f59190612e96565b60405180910390f35b34801561040a57600080fd5b50610413610cb5565b6040516104209190612ff3565b60405180910390f35b34801561043557600080fd5b50610450600480360381019061044b9190612e11565b610cbe565b60405161045d9190612e6c565b60405180910390f35b34801561047257600080fd5b5061047b610cf5565b6040516104889190612e96565b60405180910390f35b34801561049d57600080fd5b506104a6610cfb565b6040516104b3919061301d565b60405180910390f35b3480156104c857600080fd5b506104e360048036038101906104de9190613038565b610d1f565b6040516104f09190612e6c565b60405180910390f35b34801561050557600080fd5b5061050e610d75565b60405161051b9190612e6c565b60405180910390f35b34801561053057600080fd5b5061054b60048036038101906105469190613038565b610d88565b005b34801561055957600080fd5b50610562610f5f565b005b34801561057057600080fd5b5061058b60048036038101906105869190613038565b610fba565b6040516105989190612e96565b60405180910390f35b3480156105ad57600080fd5b506105b6611003565b005b3480156105c457600080fd5b506105cd611017565b6040516105da9190612e96565b60405180910390f35b3480156105ef57600080fd5b506105f861101d565b6040516106059190612e96565b60405180910390f35b34801561061a57600080fd5b50610623611023565b604051610630919061301d565b60405180910390f35b34801561064557600080fd5b50610660600480360381019061065b9190613038565b611049565b60405161066d9190612e6c565b60405180910390f35b34801561068257600080fd5b5061068b61109f565b6040516106989190612e96565b60405180910390f35b3480156106ad57600080fd5b506106b66110a5565b6040516106c3919061301d565b60405180910390f35b3480156106d857600080fd5b506106e16110ce565b6040516106ee9190612d91565b60405180910390f35b34801561070357600080fd5b5061070c611160565b6040516107199190612e96565b60405180910390f35b34801561072e57600080fd5b5061074960048036038101906107449190613065565b611184565b005b34801561075757600080fd5b50610772600480360381019061076d9190612e11565b611355565b60405161077f9190612e6c565b60405180910390f35b34801561079457600080fd5b506107af60048036038101906107aa9190612e11565b6113cc565b6040516107bc9190612e6c565b60405180910390f35b3480156107d157600080fd5b506107ec60048036038101906107e791906130a5565b6113ef565b005b3480156107fa57600080fd5b506108036114d4565b604051610810919061301d565b60405180910390f35b34801561082557600080fd5b50610840600480360381019061083b9190613065565b61158c565b005b34801561084e57600080fd5b50610869600480360381019061086491906130d2565b6116cf565b6040516108769190612e96565b60405180910390f35b34801561088b57600080fd5b50610894611756565b6040516108a19190612e96565b60405180910390f35b3480156108b657600080fd5b506108d160048036038101906108cc9190613038565b61175c565b005b3480156108df57600080fd5b506108fa60048036038101906108f59190613038565b6117df565b005b610904611989565b8160075414158061091757508060095414155b610956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094d9061315e565b60405180910390fd5b6103e8818361096591906131ad565b11156109a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099d9061322d565b60405180910390fd5b81600781905550806009819055507f4350dcfc5e910c40b6d16fdf94cbbc788c1f4ac51a7dc561b081157d4b8ed4ec82826040516109e592919061324d565b60405180910390a15050565b606060058054610a00906132a5565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2c906132a5565b8015610a795780601f10610a4e57610100808354040283529160200191610a79565b820191906000526020600020905b815481529060010190602001808311610a5c57829003601f168201915b5050505050905090565b600080610a8e611a07565b9050610a9b818585611a0f565b600191505092915050565b60075481565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600454905090565b610ae2611989565b801515600f60009054906101000a900460ff16151503610b37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2e90613322565b60405180910390fd5b80600f60006101000a81548160ff0219169083151502179055507fc2385a9c5843e4cd7e987e979b22e4d4748ec5dbbfc325ee4023a8c1914809b781604051610b809190612e6c565b60405180910390a150565b600080610b96611a07565b9050610ba3858285611bd8565b610bae858585611c64565b60019150509392505050565b610bc2611989565b81600854141580610bd5575080600a5414155b610c14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0b9061338e565b60405180910390fd5b6103e88183610c2391906131ad565b1115610c64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5b906133fa565b60405180910390fd5b8160088190555080600a819055507fb67587dc52452dfa7b987911428a2b47c610929d62284cda9f4aafb90435ad4e8282604051610ca392919061324d565b60405180910390a15050565b60085481565b60006012905090565b600080610cc9611a07565b9050610cea818585610cdb85896116cf565b610ce591906131ad565b611a0f565b600191505092915050565b600a5481565b7f0000000000000000000000006089184c7890d6cddf631c8009fb6ad908a8972881565b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600f60009054906101000a900460ff1681565b610d90611989565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610e20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e179061348c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610e8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e869061351e565b60405180910390fd5b610e9881612108565b15610ed8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ecf906135b0565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f335aad0eda24dacfa324b3d651daa091864338cf7d4af9d5087ba1c5ee1174f060405160405180910390a250565b6000610f6a30610fba565b905060008111610faf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa69061361c565b60405180910390fd5b610fb761212b565b50565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61100b611989565b6110156000612532565b565b600c5481565b60095481565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600b5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600680546110dd906132a5565b80601f0160208091040260200160405190810160405280929190818152602001828054611109906132a5565b80156111565780601f1061112b57610100808354040283529160200191611156565b820191906000526020600020905b81548152906001019060200180831161113957829003601f168201915b5050505050905090565b7f000000000000000000000000000000000000000000000000000000000000271081565b61118c611989565b801515601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615150361121e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611215906136ae565b60405180910390fd5b7f0000000000000000000000006089184c7890d6cddf631c8009fb6ad908a8972873ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036112ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a39061371a565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167fb6f1aed3b1ced30ce666a8b7f2e12b02aed514cdab677738640be9937f133205826040516113499190612e6c565b60405180910390a25050565b600080611360611a07565b9050600061136e82866116cf565b9050838110156113b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113aa906137ac565b60405180910390fd5b6113c08286868403611a0f565b60019250505092915050565b6000806113d7611a07565b90506113e4818585611c64565b600191505092915050565b6113f7611989565b80600e540361143b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114329061383e565b60405180910390fd5b620f4240611447610ad0565b611451919061388d565b811015611493576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148a90613930565b60405180910390fd5b80600e819055507fe82283d0f679a15d3811ecbaa8b6a8afb1b110e22daa33b359c37bcae5a11e48816040516114c99190612e96565b60405180910390a150565b6000603846036114fa577310ed43c718714eb63d5aa57b78b54704e256024e9050611589565b6061460361151e5773d99d1c33f9fc3444f8101754abc46c52416550d19050611589565b600146148061152d5750600546145b1561154e57737a250d5630b4cf539739df2c5dacb4c659f2488d9050611589565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611580906139c2565b60405180910390fd5b90565b611594611989565b801515601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503611626576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161d90613a54565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167fee48373bc01f03d5728ce4cf0b4e1c35d75d7da201d5b5d5013a94e50941efe1826040516116c39190612e6c565b60405180910390a25050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600e5481565b611764611989565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036117d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ca90613ae6565b60405180910390fd5b6117dc81612532565b50565b6117e7611989565b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611855576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184c90613b52565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036118d5573373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156118cf573d6000803e3d6000fd5b50611986565b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611915919061301d565b602060405180830381865afa158015611932573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119569190613b87565b905061198333828473ffffffffffffffffffffffffffffffffffffffff166125f69092919063ffffffff16565b50505b50565b611991611a07565b73ffffffffffffffffffffffffffffffffffffffff166119af6110a5565b73ffffffffffffffffffffffffffffffffffffffff1614611a05576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fc90613c00565b60405180910390fd5b565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611a7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7590613c92565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611aed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae490613d24565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611bcb9190612e96565b60405180910390a3505050565b6000611be484846116cf565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611c5e5781811015611c50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4790613d90565b60405180910390fd5b611c5d8484848403611a0f565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611cd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cca90613e22565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3990613eb4565b60405180910390fd5b60008103611d5b57611d568383600061267c565b612103565b6000611d6630610fba565b90506000600e548210159050808015611d8c5750600d60149054906101000a900460ff16155b8015611de25750601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611dfa5750600f60009054906101000a900460ff165b8015611e1557506000600c54600b54611e1391906131ad565b115b15611e2357611e2261212b565b5b600060019050601160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611eca5750601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80611ee15750600d60149054906101000a900460ff165b15611eeb57600090505b80156120f457600080601060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611fc1577f000000000000000000000000000000000000000000000000000000000000271060075487611f759190613ed4565b611f7f919061388d565b91507f000000000000000000000000000000000000000000000000000000000000271060095487611fb09190613ed4565b611fba919061388d565b905061208b565b601060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561208a577f0000000000000000000000000000000000000000000000000000000000002710600854876120429190613ed4565b61204c919061388d565b91507f0000000000000000000000000000000000000000000000000000000000002710600a548761207d9190613ed4565b612087919061388d565b90505b5b81600b600082825461209d91906131ad565b9250508190555080600c60008282546120b691906131ad565b92505081905550600081836120cb91906131ad565b905060008111156120f05780876120e29190613f16565b96506120ef89308361267c565b5b5050505b6120ff86868661267c565b5050505b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6001600d60146101000a81548160ff0219169083151502179055506000600267ffffffffffffffff81111561216357612162613f4a565b5b6040519080825280602002602001820160405280156121915781602001602082028036833780820191505090505b50905030816000815181106121a9576121a8613f79565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561224e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122729190613fbd565b8160018151811061228657612285613f79565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060006122cb30610fba565b90506000600c54600b546122df91906131ad565b90506000816002600b546122f3919061388d565b846122fe9190613ed4565b612308919061388d565b9050600081846123189190613f16565b90506002600b54612329919061388d565b836123349190613f16565b92507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478260008830426040518663ffffffff1660e01b81526004016123989594939291906140e3565b600060405180830381600087803b1580156123b257600080fd5b505af19250505080156123c3575060015b6123d1575050505050612515565b6000479050600084600c54836123e79190613ed4565b6123f1919061388d565b9050600081836124019190613f16565b90506000851180156124135750600081115b156124c5577f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308860008061dead426040518863ffffffff1660e01b815260040161247f9695949392919061413d565b60606040518083038185885af1935050505080156124bb57506040513d601f19601f820116820180604052508101906124b8919061419e565b60015b156124c4575050505b5b60008211156124fc576124fa600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836128f5565b505b6000600b819055506000600c8190555050505050505050505b6000600d60146101000a81548160ff021916908315150217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6126778363a9059cbb60e01b84846040516024016126159291906141f1565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061298f565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036126eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e290613e22565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361275a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275190613eb4565b60405180910390fd5b612765838383612a57565b6000600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156127ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e39061428c565b60405180910390fd5b818103600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516128dc9190612e96565b60405180910390a36128ef848484612a5c565b50505050565b60006128ff612a61565b814710156129105760009050612981565b60008373ffffffffffffffffffffffffffffffffffffffff1683604051612936906142dd565b60006040518083038185875af1925050503d8060008114612973576040519150601f19603f3d011682016040523d82523d6000602084013e612978565b606091505b50509050809150505b612989612ab0565b92915050565b60006129f1826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612ab99092919063ffffffff16565b9050600081511480612a13575080806020019051810190612a129190614307565b5b612a52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a49906143a6565b60405180910390fd5b505050565b505050565b505050565b600260015403612aa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9d90614412565b60405180910390fd5b6002600181905550565b60018081905550565b6060612ac88484600085612ad1565b90509392505050565b606082471015612b16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0d906144a4565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051612b3f9190614500565b60006040518083038185875af1925050503d8060008114612b7c576040519150601f19603f3d011682016040523d82523d6000602084013e612b81565b606091505b5091509150612b9287838387612b9e565b92505050949350505050565b60608315612c00576000835103612bf857612bb885612c13565b612bf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bee90614563565b60405180910390fd5b5b829050612c0b565b612c0a8383612c36565b5b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600082511115612c495781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7d9190612d91565b60405180910390fd5b600080fd5b6000819050919050565b612c9e81612c8b565b8114612ca957600080fd5b50565b600081359050612cbb81612c95565b92915050565b60008060408385031215612cd857612cd7612c86565b5b6000612ce685828601612cac565b9250506020612cf785828601612cac565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612d3b578082015181840152602081019050612d20565b60008484015250505050565b6000601f19601f8301169050919050565b6000612d6382612d01565b612d6d8185612d0c565b9350612d7d818560208601612d1d565b612d8681612d47565b840191505092915050565b60006020820190508181036000830152612dab8184612d58565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612dde82612db3565b9050919050565b612dee81612dd3565b8114612df957600080fd5b50565b600081359050612e0b81612de5565b92915050565b60008060408385031215612e2857612e27612c86565b5b6000612e3685828601612dfc565b9250506020612e4785828601612cac565b9150509250929050565b60008115159050919050565b612e6681612e51565b82525050565b6000602082019050612e816000830184612e5d565b92915050565b612e9081612c8b565b82525050565b6000602082019050612eab6000830184612e87565b92915050565b6000819050919050565b6000612ed6612ed1612ecc84612db3565b612eb1565b612db3565b9050919050565b6000612ee882612ebb565b9050919050565b6000612efa82612edd565b9050919050565b612f0a81612eef565b82525050565b6000602082019050612f256000830184612f01565b92915050565b612f3481612e51565b8114612f3f57600080fd5b50565b600081359050612f5181612f2b565b92915050565b600060208284031215612f6d57612f6c612c86565b5b6000612f7b84828501612f42565b91505092915050565b600080600060608486031215612f9d57612f9c612c86565b5b6000612fab86828701612dfc565b9350506020612fbc86828701612dfc565b9250506040612fcd86828701612cac565b9150509250925092565b600060ff82169050919050565b612fed81612fd7565b82525050565b60006020820190506130086000830184612fe4565b92915050565b61301781612dd3565b82525050565b6000602082019050613032600083018461300e565b92915050565b60006020828403121561304e5761304d612c86565b5b600061305c84828501612dfc565b91505092915050565b6000806040838503121561307c5761307b612c86565b5b600061308a85828601612dfc565b925050602061309b85828601612f42565b9150509250929050565b6000602082840312156130bb576130ba612c86565b5b60006130c984828501612cac565b91505092915050565b600080604083850312156130e9576130e8612c86565b5b60006130f785828601612dfc565b925050602061310885828601612dfc565b9150509250929050565b7f4275792054617820616c7265616479206f6e207468617420616d6f756e740000600082015250565b6000613148601e83612d0c565b915061315382613112565b602082019050919050565b600060208201905081810360008301526131778161313b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006131b882612c8b565b91506131c383612c8b565b92508282019050808211156131db576131da61317e565b5b92915050565b7f427579205461782063616e6e6f74206265206d6f7265207468616e2031302500600082015250565b6000613217601f83612d0c565b9150613222826131e1565b602082019050919050565b600060208201905081810360008301526132468161320a565b9050919050565b60006040820190506132626000830185612e87565b61326f6020830184612e87565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806132bd57607f821691505b6020821081036132d0576132cf613276565b5b50919050565b7f537761704261636b20616c7265616479206f6e20737461747573000000000000600082015250565b600061330c601a83612d0c565b9150613317826132d6565b602082019050919050565b6000602082019050818103600083015261333b816132ff565b9050919050565b7f53656c6c2054617820616c7265616479206f6e207468617420616d6f756e7400600082015250565b6000613378601f83612d0c565b915061338382613342565b602082019050919050565b600060208201905081810360008301526133a78161336b565b9050919050565b7f53656c6c205461782063616e6e6f74206265206d6f7265207468616e20313025600082015250565b60006133e4602083612d0c565b91506133ef826133ae565b602082019050919050565b60006020820190508181036000830152613413816133d7565b9050919050565b7f4d61726b6574696e672077616c6c657420697320616c7265616479207468617460008201527f2061646472657373000000000000000000000000000000000000000000000000602082015250565b6000613476602883612d0c565b91506134818261341a565b604082019050919050565b600060208201905081810360008301526134a581613469565b9050919050565b7f4d61726b6574696e672077616c6c65742063616e6e6f7420626520746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000613508602b83612d0c565b9150613513826134ac565b604082019050919050565b60006020820190508181036000830152613537816134fb565b9050919050565b7f4d61726b6574696e672077616c6c65742063616e6e6f74206265206120636f6e60008201527f7472616374000000000000000000000000000000000000000000000000000000602082015250565b600061359a602583612d0c565b91506135a58261353e565b604082019050919050565b600060208201905081810360008301526135c98161358d565b9050919050565b7f43616e742053776170204261636b203020546f6b656e21000000000000000000600082015250565b6000613606601783612d0c565b9150613611826135d0565b602082019050919050565b60006020820190508181036000830152613635816135f9565b9050919050565b7f50616972206164647265737320697320616c7265616479207468652076616c7560008201527f65206f6620277374617475732700000000000000000000000000000000000000602082015250565b6000613698602d83612d0c565b91506136a38261363c565b604082019050919050565b600060208201905081810360008301526136c78161368b565b9050919050565b7f43616e6e6f742073657420746869732070616972000000000000000000000000600082015250565b6000613704601483612d0c565b915061370f826136ce565b602082019050919050565b60006020820190508181036000830152613733816136f7565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613796602583612d0c565b91506137a18261373a565b604082019050919050565b600060208201905081810360008301526137c581613789565b9050919050565b7f53776170546f6b656e734174416d6f756e7420616c7265616479206f6e20746860008201527f617420616d6f756e740000000000000000000000000000000000000000000000602082015250565b6000613828602983612d0c565b9150613833826137cc565b604082019050919050565b600060208201905081810360008301526138578161381b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061389882612c8b565b91506138a383612c8b565b9250826138b3576138b261385e565b5b828204905092915050565b7f416d6f756e74206d75737420626520657175616c206f7220677265617465722060008201527f7468616e20302e30303030303125206f6620546f74616c20537570706c790000602082015250565b600061391a603e83612d0c565b9150613925826138be565b604082019050919050565b600060208201905081810360008301526139498161390d565b9050919050565b7f43616e6e6f7420666f756e6420726f75746572206f6e2074686973206e65747760008201527f6f726b0000000000000000000000000000000000000000000000000000000000602082015250565b60006139ac602383612d0c565b91506139b782613950565b604082019050919050565b600060208201905081810360008301526139db8161399f565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b6000613a3e602a83612d0c565b9150613a49826139e2565b604082019050919050565b60006020820190508181036000830152613a6d81613a31565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613ad0602683612d0c565b9150613adb82613a74565b604082019050919050565b60006020820190508181036000830152613aff81613ac3565b9050919050565b7f4f776e65722063616e6e6f7420636c61696d206e617469766520746f6b656e73600082015250565b6000613b3c602083612d0c565b9150613b4782613b06565b602082019050919050565b60006020820190508181036000830152613b6b81613b2f565b9050919050565b600081519050613b8181612c95565b92915050565b600060208284031215613b9d57613b9c612c86565b5b6000613bab84828501613b72565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613bea602083612d0c565b9150613bf582613bb4565b602082019050919050565b60006020820190508181036000830152613c1981613bdd565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613c7c602483612d0c565b9150613c8782613c20565b604082019050919050565b60006020820190508181036000830152613cab81613c6f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613d0e602283612d0c565b9150613d1982613cb2565b604082019050919050565b60006020820190508181036000830152613d3d81613d01565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613d7a601d83612d0c565b9150613d8582613d44565b602082019050919050565b60006020820190508181036000830152613da981613d6d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613e0c602583612d0c565b9150613e1782613db0565b604082019050919050565b60006020820190508181036000830152613e3b81613dff565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613e9e602383612d0c565b9150613ea982613e42565b604082019050919050565b60006020820190508181036000830152613ecd81613e91565b9050919050565b6000613edf82612c8b565b9150613eea83612c8b565b9250828202613ef881612c8b565b91508282048414831517613f0f57613f0e61317e565b5b5092915050565b6000613f2182612c8b565b9150613f2c83612c8b565b9250828203905081811115613f4457613f4361317e565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050613fb781612de5565b92915050565b600060208284031215613fd357613fd2612c86565b5b6000613fe184828501613fa8565b91505092915050565b6000819050919050565b600061400f61400a61400584613fea565b612eb1565b612c8b565b9050919050565b61401f81613ff4565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61405a81612dd3565b82525050565b600061406c8383614051565b60208301905092915050565b6000602082019050919050565b600061409082614025565b61409a8185614030565b93506140a583614041565b8060005b838110156140d65781516140bd8882614060565b97506140c883614078565b9250506001810190506140a9565b5085935050505092915050565b600060a0820190506140f86000830188612e87565b6141056020830187614016565b81810360408301526141178186614085565b9050614126606083018561300e565b6141336080830184612e87565b9695505050505050565b600060c082019050614152600083018961300e565b61415f6020830188612e87565b61416c6040830187614016565b6141796060830186614016565b614186608083018561300e565b61419360a0830184612e87565b979650505050505050565b6000806000606084860312156141b7576141b6612c86565b5b60006141c586828701613b72565b93505060206141d686828701613b72565b92505060406141e786828701613b72565b9150509250925092565b6000604082019050614206600083018561300e565b6142136020830184612e87565b9392505050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614276602683612d0c565b91506142818261421a565b604082019050919050565b600060208201905081810360008301526142a581614269565b9050919050565b600081905092915050565b50565b60006142c76000836142ac565b91506142d2826142b7565b600082019050919050565b60006142e8826142ba565b9150819050919050565b60008151905061430181612f2b565b92915050565b60006020828403121561431d5761431c612c86565b5b600061432b848285016142f2565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b6000614390602a83612d0c565b915061439b82614334565b604082019050919050565b600060208201905081810360008301526143bf81614383565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b60006143fc601f83612d0c565b9150614407826143c6565b602082019050919050565b6000602082019050818103600083015261442b816143ef565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b600061448e602683612d0c565b915061449982614432565b604082019050919050565b600060208201905081810360008301526144bd81614481565b9050919050565b600081519050919050565b60006144da826144c4565b6144e481856142ac565b93506144f4818560208601612d1d565b80840191505092915050565b600061450c82846144cf565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b600061454d601d83612d0c565b915061455882614517565b602082019050919050565b6000602082019050818103600083015261457c81614540565b905091905056fea264697066735822122084556f13a1b2fafceeddc14efe1b05f8a147785ac0d27c920dc1dc5e190511d064736f6c63430008130033

Deployed Bytecode Sourcemap

24026:11232:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27615:599;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17654:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18652:226;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24122:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24552:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17975:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29895:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18886:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28222:617;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24159:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17874:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19189:263;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24236:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24610:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31124:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24514:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28847:580;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35050:205;;;;;;;;;;;;;:::i;:::-;;18091:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23471:103;;;;;;;;;;;;;:::i;:::-;;24363:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24199:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24407;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30591:154;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24321:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23236:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17762:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24276:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30127:456;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19460:498;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18242:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29435:452;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26662:490;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30753:363;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18468:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24474:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23582:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27160:447;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27615:599;23195:13;:11;:13::i;:::-;27782:16:::1;27763:15;;:35;;:91;;;;27838:16;27819:15;;:35;;27763:91;27741:171;;;;;;;;;;;;:::i;:::-;;;;;;;;;27984:5;27964:16;27945;:35;;;;:::i;:::-;:44;;27923:125;;;;;;;;;;;;:::i;:::-;;;;;;;;;28079:16;28061:15;:34;;;;28124:16;28106:15;:34;;;;28158:48;28171:16;28189;28158:48;;;;;;;:::i;:::-;;;;;;;;27615:599:::0;;:::o;17654:100::-;17708:13;17741:5;17734:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17654:100;:::o;18652:226::-;18760:4;18777:13;18793:12;:10;:12::i;:::-;18777:28;;18816:32;18825:5;18832:7;18841:6;18816:8;:32::i;:::-;18866:4;18859:11;;;18652:226;;;;:::o;24122:30::-;;;;:::o;24552:51::-;;;:::o;17975:108::-;18036:7;18063:12;;18056:19;;17975:108;:::o;29895:224::-;23195:13;:11;:13::i;:::-;29991:6:::1;29970:27;;:17;;;;;;;;;;;:27;;::::0;29962:66:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;30061:6;30041:17;;:26;;;;;;;;;;;;;;;;;;30083:28;30104:6;30083:28;;;;;;:::i;:::-;;;;;;;;29895:224:::0;:::o;18886:295::-;19017:4;19034:15;19052:12;:10;:12::i;:::-;19034:30;;19075:38;19091:4;19097:7;19106:6;19075:15;:38::i;:::-;19124:27;19134:4;19140:2;19144:6;19124:9;:27::i;:::-;19169:4;19162:11;;;18886:295;;;;;:::o;28222:617::-;23195:13;:11;:13::i;:::-;28393:17:::1;28373:16;;:37;;:95;;;;28451:17;28431:16;;:37;;28373:95;28351:176;;;;;;;;;;;;:::i;:::-;;;;;;;;;28601:5;28580:17;28560;:37;;;;:::i;:::-;:46;;28538:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;28698:17;28679:16;:36;;;;28745:17;28726:16;:36;;;;28780:51;28794:17;28813;28780:51;;;;;;;:::i;:::-;;;;;;;;28222:617:::0;;:::o;24159:31::-;;;;:::o;17874:93::-;17932:5;17957:2;17950:9;;17874:93;:::o;19189:263::-;19302:4;19319:13;19335:12;:10;:12::i;:::-;19319:28;;19358:64;19367:5;19374:7;19411:10;19383:25;19393:5;19400:7;19383:9;:25::i;:::-;:38;;;;:::i;:::-;19358:8;:64::i;:::-;19440:4;19433:11;;;19189:263;;;;:::o;24236:31::-;;;;:::o;24610:38::-;;;:::o;31124:128::-;31192:4;31216:19;:28;31236:7;31216:28;;;;;;;;;;;;;;;;;;;;;;;;;31209:35;;31124:128;;;:::o;24514:29::-;;;;;;;;;;;;;:::o;28847:580::-;23195:13;:11;:13::i;:::-;28973:15:::1;;;;;;;;;;;28953:35;;:16;:35;;::::0;28931:125:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;29117:1;29089:30;;:16;:30;;::::0;29067:123:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;29224:28;29235:16;29224:10;:28::i;:::-;29223:29;29201:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;29348:16;29330:15;;:34;;;;;;;;;;;;;;;;;;29402:16;29380:39;;;;;;;;;;;;28847:580:::0;:::o;35050:205::-;35096:28;35127:24;35145:4;35127:9;:24::i;:::-;35096:55;;35195:1;35172:20;:24;35164:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;35237:10;:8;:10::i;:::-;35085:170;35050:205::o;18091:143::-;18181:7;18208:9;:18;18218:7;18208:18;;;;;;;;;;;;;;;;18201:25;;18091:143;;;:::o;23471:103::-;23195:13;:11;:13::i;:::-;23536:30:::1;23563:1;23536:18;:30::i;:::-;23471:103::o:0;24363:35::-;;;;:::o;24199:30::-;;;;:::o;24407:::-;;;;;;;;;;;;;:::o;30591:154::-;30680:4;30704:27;:33;30732:4;30704:33;;;;;;;;;;;;;;;;;;;;;;;;;30697:40;;30591:154;;;:::o;24321:35::-;;;;:::o;23236:87::-;23282:7;23309:6;;;;;;;;;;;23302:13;;23236:87;:::o;17762:104::-;17818:13;17851:7;17844:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17762:104;:::o;24276:36::-;;;:::o;30127:456::-;23195:13;:11;:13::i;:::-;30305:6:::1;30268:43;;:27;:33;30296:4;30268:33;;;;;;;;;;;;;;;;;;;;;;;;;:43;;::::0;30246:138:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;30419:13;30403:30;;:4;:30;;::::0;30395:63:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;30507:6;30471:27;:33;30499:4;30471:33;;;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;30562:4;30531:44;;;30568:6;30531:44;;;;;;:::i;:::-;;;;;;;;30127:456:::0;;:::o;19460:498::-;19578:4;19595:13;19611:12;:10;:12::i;:::-;19595:28;;19634:24;19661:25;19671:5;19678:7;19661:9;:25::i;:::-;19634:52;;19739:15;19719:16;:35;;19697:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;19855:60;19864:5;19871:7;19899:15;19880:16;:34;19855:8;:60::i;:::-;19946:4;19939:11;;;;19460:498;;;;:::o;18242:218::-;18346:4;18363:13;18379:12;:10;:12::i;:::-;18363:28;;18402;18412:5;18419:2;18423:6;18402:9;:28::i;:::-;18448:4;18441:11;;;18242:218;;;;:::o;29435:452::-;23195:13;:11;:13::i;:::-;29556:6:::1;29534:18;;:28:::0;29512:119:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;29690:9;29674:13;:11;:13::i;:::-;:25;;;;:::i;:::-;29664:6;:35;;29642:147;;;;;;;;;;;;:::i;:::-;;;;;;;;;29823:6;29802:18;:27;;;;29847:32;29872:6;29847:32;;;;;;:::i;:::-;;;;;;;;29435:452:::0;:::o;26662:490::-;26711:7;26752:2;26735:13;:19;26731:414;;26778:42;26771:49;;;;26731:414;26859:2;26842:13;:19;26838:307;;26885:42;26878:49;;;;26838:307;26966:1;26949:13;:18;:40;;;;26988:1;26971:13;:18;26949:40;26945:200;;;27013:42;27006:49;;;;26945:200;27088:45;;;;;;;;;;:::i;:::-;;;;;;;;26662:490;;:::o;30753:363::-;23195:13;:11;:13::i;:::-;30922:8:::1;30890:40;;:19;:28;30910:7;30890:28;;;;;;;;;;;;;;;;;;;;;;;;;:40;;::::0;30868:132:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;31042:8;31011:19;:28;31031:7;31011:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;31090:7;31068:40;;;31099:8;31068:40;;;;;;:::i;:::-;;;;;;;;30753:363:::0;;:::o;18468:176::-;18582:7;18609:11;:18;18621:5;18609:18;;;;;;;;;;;;;;;:27;18628:7;18609:27;;;;;;;;;;;;;;;;18602:34;;18468:176;;;;:::o;24474:33::-;;;;:::o;23582:238::-;23195:13;:11;:13::i;:::-;23705:1:::1;23685:22;;:8;:22;;::::0;23663:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;23784:28;23803:8;23784:18;:28::i;:::-;23582:238:::0;:::o;27160:447::-;23195:13;:11;:13::i;:::-;27256:4:::1;27239:22;;:5;:22;;::::0;27231:67:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;27332:3;27315:21;;:5;:21;;::::0;27311:126:::1;;27361:10;27353:28;;:51;27382:21;27353:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;27419:7;;27311:126;27447:17;27474:5;27447:33;;27491:15;27509:10;:20;;;27538:4;27509:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27491:53;;27555:44;27579:10;27591:7;27555:10;:23;;;;:44;;;;;:::i;:::-;27220:387;;23219:1;27160:447:::0;:::o;23331:132::-;23406:12;:10;:12::i;:::-;23395:23;;:7;:5;:7::i;:::-;:23;;;23387:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23331:132::o;17034:98::-;17087:7;17114:10;17107:17;;17034:98;:::o;21736:380::-;21889:1;21872:19;;:5;:19;;;21864:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21970:1;21951:21;;:7;:21;;;21943:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22054:6;22024:11;:18;22036:5;22024:18;;;;;;;;;;;;;;;:27;22043:7;22024:27;;;;;;;;;;;;;;;:36;;;;22092:7;22076:32;;22085:5;22076:32;;;22101:6;22076:32;;;;;;:::i;:::-;;;;;;;;21736:380;;;:::o;22124:502::-;22259:24;22286:25;22296:5;22303:7;22286:9;:25::i;:::-;22259:52;;22346:17;22326:16;:37;22322:297;;22426:6;22406:16;:26;;22380:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;22541:51;22550:5;22557:7;22585:6;22566:16;:25;22541:8;:51::i;:::-;22322:297;22248:378;22124:502;;;:::o;31260:1889::-;31408:1;31392:18;;:4;:18;;;31384:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31485:1;31471:16;;:2;:16;;;31463:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;31554:1;31544:6;:11;31540:93;;31572:28;31588:4;31594:2;31598:1;31572:15;:28::i;:::-;31615:7;;31540:93;31645:28;31676:24;31694:4;31676:9;:24::i;:::-;31645:55;;31713:12;31752:18;;31728:20;:42;;31713:57;;31801:7;:33;;;;;31826:8;;;;;;;;;;;31825:9;31801:33;:84;;;;;31852:27;:33;31880:4;31852:33;;;;;;;;;;;;;;;;;;;;;;;;;31851:34;31801:84;:118;;;;;31902:17;;;;;;;;;;;31801:118;:182;;;;;31982:1;31959:20;;31936;;:43;;;;:::i;:::-;:47;31801:182;31783:249;;;32010:10;:8;:10::i;:::-;31783:249;32044:12;32059:4;32044:19;;32080;:25;32100:4;32080:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;32109:19;:23;32129:2;32109:23;;;;;;;;;;;;;;;;;;;;;;;;;32080:52;:64;;;;32136:8;;;;;;;;;;;32080:64;32076:112;;;32171:5;32161:15;;32076:112;32204:7;32200:896;;;32228:27;32270;32318;:33;32346:4;32318:33;;;;;;;;;;;;;;;;;;;;;;;;;32314:440;;;32423:11;32404:15;;32395:6;:24;;;;:::i;:::-;32394:40;;;;:::i;:::-;32372:62;;32504:11;32485:15;;32476:6;:24;;;;:::i;:::-;32475:40;;;;:::i;:::-;32453:62;;32314:440;;;32541:27;:31;32569:2;32541:31;;;;;;;;;;;;;;;;;;;;;;;;;32537:217;;;32645:11;32625:16;;32616:6;:25;;;;:::i;:::-;32615:41;;;;:::i;:::-;32593:63;;32727:11;32707:16;;32698:6;:25;;;;:::i;:::-;32697:41;;;;:::i;:::-;32675:63;;32537:217;32314:440;32794:19;32770:20;;:43;;;;;;;:::i;:::-;;;;;;;;32852:19;32828:20;;:43;;;;;;;:::i;:::-;;;;;;;;32888:12;32925:19;32903;:41;;;;:::i;:::-;32888:56;;32972:1;32965:4;:8;32961:124;;;33004:4;32994:14;;;;;:::i;:::-;;;33027:42;33043:4;33057;33064;33027:15;:42::i;:::-;32961:124;32213:883;;;32200:896;33108:33;33124:4;33130:2;33134:6;33108:15;:33::i;:::-;31373:1776;;;31260:1889;;;;:::o;26539:115::-;26599:4;26645:1;26623:7;:19;;;:23;26616:30;;26539:115;;;:::o;33157:1607::-;24825:4;24814:8;;:15;;;;;;;;;;;;;;;;;;33204:21:::1;33242:1;33228:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33204:40;;33273:4;33255;33260:1;33255:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;33299:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33289:4;33294:1;33289:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;33334:28;33365:24;33383:4;33365:9;:24::i;:::-;33334:55;;33402:16;33444:20;;33421;;:43;;;;:::i;:::-;33402:62;;33477:20;33567:8;33561:1;33538:20;;:24;;;;:::i;:::-;33501:20;:62;;;;:::i;:::-;33500:75;;;;:::i;:::-;33477:98;;33588:22;33636:12;33613:20;:35;;;;:::i;:::-;33588:60;;33698:1;33674:20;;33673:26;;;;:::i;:::-;33661:38;;;;;:::i;:::-;;;33729:15;:66;;;33814:14;33847:1;33867:4;33898;33922:15;33729:223;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;33712:292;;33986:7;;;;;;;33712:292;34016:18;34037:21;34016:42;;34071:20;34132:8;34108:20;;34095:10;:33;;;;:::i;:::-;34094:46;;;;:::i;:::-;34071:69;;34151:18;34185:12;34172:10;:25;;;;:::i;:::-;34151:46;;34229:1;34214:12;:16;:34;;;;;34247:1;34234:10;:14;34214:34;34210:376;;;34286:15;:31;;;34325:10;34367:4;34395:12;34430:1;34454::::0;34486:6:::1;34516:15;34286:264;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;34265:310:::0;::::1;;;;;;34210:376;34617:1;34602:12;:16;34598:87;;;34635:38;34643:15;;;;;;;;;;;34660:12;34635:7;:38::i;:::-;;34598:87;34720:1;34697:20;:24;;;;34755:1;34732:20;:24;;;;33193:1571;;;;;;;;24840:1;24863:5:::0;24852:8;;:16;;;;;;;;;;;;;;;;;;33157:1607::o;23828:191::-;23902:16;23921:6;;;;;;;;;;;23902:25;;23947:8;23938:6;;:17;;;;;;;;;;;;;;;;;;24002:8;23971:40;;23992:8;23971:40;;;;;;;;;;;;23891:128;23828:191;:::o;12201:214::-;12284:123;12318:5;12361:23;;;12386:2;12390:5;12338:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12284:19;:123::i;:::-;12201:214;;;:::o;19966:714::-;20113:1;20097:18;;:4;:18;;;20089:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20190:1;20176:16;;:2;:16;;;20168:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;20245:38;20266:4;20272:2;20276:6;20245:20;:38::i;:::-;20296:19;20318:9;:15;20328:4;20318:15;;;;;;;;;;;;;;;;20296:37;;20381:6;20366:11;:21;;20344:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;20521:6;20507:11;:20;20489:9;:15;20499:4;20489:15;;;;;;;;;;;;;;;:38;;;;20561:6;20544:9;:13;20554:2;20544:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;20611:2;20596:26;;20605:4;20596:26;;;20615:6;20596:26;;;;;;:::i;:::-;;;;;;;;20635:37;20655:4;20661:2;20665:6;20635:19;:37::i;:::-;20078:602;19966:714;;;:::o;34772:270::-;34874:4;16558:21;:19;:21::i;:::-;34919:6:::1;34895:21;:30;34891:48;;;34934:5;34927:12;;;;34891:48;34953:12;34979:3;34971:17;;34996:6;34971:36;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34952:55;;;35027:7;35020:14;;;16590:1;16602:20:::0;:18;:20::i;:::-;34772:270;;;;:::o;15309:380::-;15390:23;15416:106;15458:4;15416:106;;;;;;;;;;;;;;;;;15424:5;15416:27;;;;:106;;;;;:::i;:::-;15390:132;;15576:1;15555:10;:17;:22;:56;;;;15592:10;15581:30;;;;;;;;;;;;:::i;:::-;15555:56;15533:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;15379:310;15309:380;;:::o;22634:125::-;;;;:::o;22767:124::-;;;;:::o;16638:152::-;16418:1;16696:7;;:19;16688:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;16418:1;16764:7;:18;;;;16638:152::o;16798:79::-;16374:1;16847:7;:22;;;;16798:79::o;7006:229::-;7143:12;7175:52;7197:6;7205:4;7211:1;7214:12;7175:21;:52::i;:::-;7168:59;;7006:229;;;;;:::o;7607:612::-;7777:12;7849:5;7824:21;:30;;7802:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;7932:12;7946:23;7973:6;:11;;7992:5;8013:4;7973:55;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7931:97;;;;8059:152;8104:6;8129:7;8155:10;8184:12;8059:26;:152::i;:::-;8039:172;;;;7607:612;;;;;;:::o;9723:477::-;9908:12;9937:7;9933:260;;;9986:1;9965:10;:17;:22;9961:123;;10016:18;10027:6;10016:10;:18::i;:::-;10008:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;9961:123;10105:10;10098:17;;;;9933:260;10148:33;10156:10;10168:12;10148:7;:33::i;:::-;9723:477;;;;;;;:::o;6168:115::-;6228:4;6274:1;6252:7;:19;;;:23;6245:30;;6168:115;;;:::o;10521:425::-;10664:1;10644:10;:17;:21;10640:299;;;10787:10;10781:17;10844:15;10831:10;10827:2;10823:19;10816:44;10640:299;10914:12;10907:20;;;;;;;;;;;:::i;:::-;;;;;;;;88:117:1;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:99::-;1222:6;1256:5;1250:12;1240:22;;1170:99;;;:::o;1275:169::-;1359:11;1393:6;1388:3;1381:19;1433:4;1428:3;1424:14;1409:29;;1275:169;;;;:::o;1450:246::-;1531:1;1541:113;1555:6;1552:1;1549:13;1541:113;;;1640:1;1635:3;1631:11;1625:18;1621:1;1616:3;1612:11;1605:39;1577:2;1574:1;1570:10;1565:15;;1541:113;;;1688:1;1679:6;1674:3;1670:16;1663:27;1512:184;1450:246;;;:::o;1702:102::-;1743:6;1794:2;1790:7;1785:2;1778:5;1774:14;1770:28;1760:38;;1702:102;;;:::o;1810:377::-;1898:3;1926:39;1959:5;1926:39;:::i;:::-;1981:71;2045:6;2040:3;1981:71;:::i;:::-;1974:78;;2061:65;2119:6;2114:3;2107:4;2100:5;2096:16;2061:65;:::i;:::-;2151:29;2173:6;2151:29;:::i;:::-;2146:3;2142:39;2135:46;;1902:285;1810:377;;;;:::o;2193:313::-;2306:4;2344:2;2333:9;2329:18;2321:26;;2393:9;2387:4;2383:20;2379:1;2368:9;2364:17;2357:47;2421:78;2494:4;2485:6;2421:78;:::i;:::-;2413:86;;2193:313;;;;:::o;2512:126::-;2549:7;2589:42;2582:5;2578:54;2567:65;;2512:126;;;:::o;2644:96::-;2681:7;2710:24;2728:5;2710:24;:::i;:::-;2699:35;;2644:96;;;:::o;2746:122::-;2819:24;2837:5;2819:24;:::i;:::-;2812:5;2809:35;2799:63;;2858:1;2855;2848:12;2799:63;2746:122;:::o;2874:139::-;2920:5;2958:6;2945:20;2936:29;;2974:33;3001:5;2974:33;:::i;:::-;2874:139;;;;:::o;3019:474::-;3087:6;3095;3144:2;3132:9;3123:7;3119:23;3115:32;3112:119;;;3150:79;;:::i;:::-;3112:119;3270:1;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3241:117;3397:2;3423:53;3468:7;3459:6;3448:9;3444:22;3423:53;:::i;:::-;3413:63;;3368:118;3019:474;;;;;:::o;3499:90::-;3533:7;3576:5;3569:13;3562:21;3551:32;;3499:90;;;:::o;3595:109::-;3676:21;3691:5;3676:21;:::i;:::-;3671:3;3664:34;3595:109;;:::o;3710:210::-;3797:4;3835:2;3824:9;3820:18;3812:26;;3848:65;3910:1;3899:9;3895:17;3886:6;3848:65;:::i;:::-;3710:210;;;;:::o;3926:118::-;4013:24;4031:5;4013:24;:::i;:::-;4008:3;4001:37;3926:118;;:::o;4050:222::-;4143:4;4181:2;4170:9;4166:18;4158:26;;4194:71;4262:1;4251:9;4247:17;4238:6;4194:71;:::i;:::-;4050:222;;;;:::o;4278:60::-;4306:3;4327:5;4320:12;;4278:60;;;:::o;4344:142::-;4394:9;4427:53;4445:34;4454:24;4472:5;4454:24;:::i;:::-;4445:34;:::i;:::-;4427:53;:::i;:::-;4414:66;;4344:142;;;:::o;4492:126::-;4542:9;4575:37;4606:5;4575:37;:::i;:::-;4562:50;;4492:126;;;:::o;4624:152::-;4700:9;4733:37;4764:5;4733:37;:::i;:::-;4720:50;;4624:152;;;:::o;4782:183::-;4895:63;4952:5;4895:63;:::i;:::-;4890:3;4883:76;4782:183;;:::o;4971:274::-;5090:4;5128:2;5117:9;5113:18;5105:26;;5141:97;5235:1;5224:9;5220:17;5211:6;5141:97;:::i;:::-;4971:274;;;;:::o;5251:116::-;5321:21;5336:5;5321:21;:::i;:::-;5314:5;5311:32;5301:60;;5357:1;5354;5347:12;5301:60;5251:116;:::o;5373:133::-;5416:5;5454:6;5441:20;5432:29;;5470:30;5494:5;5470:30;:::i;:::-;5373:133;;;;:::o;5512:323::-;5568:6;5617:2;5605:9;5596:7;5592:23;5588:32;5585:119;;;5623:79;;:::i;:::-;5585:119;5743:1;5768:50;5810:7;5801:6;5790:9;5786:22;5768:50;:::i;:::-;5758:60;;5714:114;5512:323;;;;:::o;5841:619::-;5918:6;5926;5934;5983:2;5971:9;5962:7;5958:23;5954:32;5951:119;;;5989:79;;:::i;:::-;5951:119;6109:1;6134:53;6179:7;6170:6;6159:9;6155:22;6134:53;:::i;:::-;6124:63;;6080:117;6236:2;6262:53;6307:7;6298:6;6287:9;6283:22;6262:53;:::i;:::-;6252:63;;6207:118;6364:2;6390:53;6435:7;6426:6;6415:9;6411:22;6390:53;:::i;:::-;6380:63;;6335:118;5841:619;;;;;:::o;6466:86::-;6501:7;6541:4;6534:5;6530:16;6519:27;;6466:86;;;:::o;6558:112::-;6641:22;6657:5;6641:22;:::i;:::-;6636:3;6629:35;6558:112;;:::o;6676:214::-;6765:4;6803:2;6792:9;6788:18;6780:26;;6816:67;6880:1;6869:9;6865:17;6856:6;6816:67;:::i;:::-;6676:214;;;;:::o;6896:118::-;6983:24;7001:5;6983:24;:::i;:::-;6978:3;6971:37;6896:118;;:::o;7020:222::-;7113:4;7151:2;7140:9;7136:18;7128:26;;7164:71;7232:1;7221:9;7217:17;7208:6;7164:71;:::i;:::-;7020:222;;;;:::o;7248:329::-;7307:6;7356:2;7344:9;7335:7;7331:23;7327:32;7324:119;;;7362:79;;:::i;:::-;7324:119;7482:1;7507:53;7552:7;7543:6;7532:9;7528:22;7507:53;:::i;:::-;7497:63;;7453:117;7248:329;;;;:::o;7583:468::-;7648:6;7656;7705:2;7693:9;7684:7;7680:23;7676:32;7673:119;;;7711:79;;:::i;:::-;7673:119;7831:1;7856:53;7901:7;7892:6;7881:9;7877:22;7856:53;:::i;:::-;7846:63;;7802:117;7958:2;7984:50;8026:7;8017:6;8006:9;8002:22;7984:50;:::i;:::-;7974:60;;7929:115;7583:468;;;;;:::o;8057:329::-;8116:6;8165:2;8153:9;8144:7;8140:23;8136:32;8133:119;;;8171:79;;:::i;:::-;8133:119;8291:1;8316:53;8361:7;8352:6;8341:9;8337:22;8316:53;:::i;:::-;8306:63;;8262:117;8057:329;;;;:::o;8392:474::-;8460:6;8468;8517:2;8505:9;8496:7;8492:23;8488:32;8485:119;;;8523:79;;:::i;:::-;8485:119;8643:1;8668:53;8713:7;8704:6;8693:9;8689:22;8668:53;:::i;:::-;8658:63;;8614:117;8770:2;8796:53;8841:7;8832:6;8821:9;8817:22;8796:53;:::i;:::-;8786:63;;8741:118;8392:474;;;;;:::o;8872:180::-;9012:32;9008:1;9000:6;8996:14;8989:56;8872:180;:::o;9058:366::-;9200:3;9221:67;9285:2;9280:3;9221:67;:::i;:::-;9214:74;;9297:93;9386:3;9297:93;:::i;:::-;9415:2;9410:3;9406:12;9399:19;;9058:366;;;:::o;9430:419::-;9596:4;9634:2;9623:9;9619:18;9611:26;;9683:9;9677:4;9673:20;9669:1;9658:9;9654:17;9647:47;9711:131;9837:4;9711:131;:::i;:::-;9703:139;;9430:419;;;:::o;9855:180::-;9903:77;9900:1;9893:88;10000:4;9997:1;9990:15;10024:4;10021:1;10014:15;10041:191;10081:3;10100:20;10118:1;10100:20;:::i;:::-;10095:25;;10134:20;10152:1;10134:20;:::i;:::-;10129:25;;10177:1;10174;10170:9;10163:16;;10198:3;10195:1;10192:10;10189:36;;;10205:18;;:::i;:::-;10189:36;10041:191;;;;:::o;10238:181::-;10378:33;10374:1;10366:6;10362:14;10355:57;10238:181;:::o;10425:366::-;10567:3;10588:67;10652:2;10647:3;10588:67;:::i;:::-;10581:74;;10664:93;10753:3;10664:93;:::i;:::-;10782:2;10777:3;10773:12;10766:19;;10425:366;;;:::o;10797:419::-;10963:4;11001:2;10990:9;10986:18;10978:26;;11050:9;11044:4;11040:20;11036:1;11025:9;11021:17;11014:47;11078:131;11204:4;11078:131;:::i;:::-;11070:139;;10797:419;;;:::o;11222:332::-;11343:4;11381:2;11370:9;11366:18;11358:26;;11394:71;11462:1;11451:9;11447:17;11438:6;11394:71;:::i;:::-;11475:72;11543:2;11532:9;11528:18;11519:6;11475:72;:::i;:::-;11222:332;;;;;:::o;11560:180::-;11608:77;11605:1;11598:88;11705:4;11702:1;11695:15;11729:4;11726:1;11719:15;11746:320;11790:6;11827:1;11821:4;11817:12;11807:22;;11874:1;11868:4;11864:12;11895:18;11885:81;;11951:4;11943:6;11939:17;11929:27;;11885:81;12013:2;12005:6;12002:14;11982:18;11979:38;11976:84;;12032:18;;:::i;:::-;11976:84;11797:269;11746:320;;;:::o;12072:176::-;12212:28;12208:1;12200:6;12196:14;12189:52;12072:176;:::o;12254:366::-;12396:3;12417:67;12481:2;12476:3;12417:67;:::i;:::-;12410:74;;12493:93;12582:3;12493:93;:::i;:::-;12611:2;12606:3;12602:12;12595:19;;12254:366;;;:::o;12626:419::-;12792:4;12830:2;12819:9;12815:18;12807:26;;12879:9;12873:4;12869:20;12865:1;12854:9;12850:17;12843:47;12907:131;13033:4;12907:131;:::i;:::-;12899:139;;12626:419;;;:::o;13051:181::-;13191:33;13187:1;13179:6;13175:14;13168:57;13051:181;:::o;13238:366::-;13380:3;13401:67;13465:2;13460:3;13401:67;:::i;:::-;13394:74;;13477:93;13566:3;13477:93;:::i;:::-;13595:2;13590:3;13586:12;13579:19;;13238:366;;;:::o;13610:419::-;13776:4;13814:2;13803:9;13799:18;13791:26;;13863:9;13857:4;13853:20;13849:1;13838:9;13834:17;13827:47;13891:131;14017:4;13891:131;:::i;:::-;13883:139;;13610:419;;;:::o;14035:182::-;14175:34;14171:1;14163:6;14159:14;14152:58;14035:182;:::o;14223:366::-;14365:3;14386:67;14450:2;14445:3;14386:67;:::i;:::-;14379:74;;14462:93;14551:3;14462:93;:::i;:::-;14580:2;14575:3;14571:12;14564:19;;14223:366;;;:::o;14595:419::-;14761:4;14799:2;14788:9;14784:18;14776:26;;14848:9;14842:4;14838:20;14834:1;14823:9;14819:17;14812:47;14876:131;15002:4;14876:131;:::i;:::-;14868:139;;14595:419;;;:::o;15020:227::-;15160:34;15156:1;15148:6;15144:14;15137:58;15229:10;15224:2;15216:6;15212:15;15205:35;15020:227;:::o;15253:366::-;15395:3;15416:67;15480:2;15475:3;15416:67;:::i;:::-;15409:74;;15492:93;15581:3;15492:93;:::i;:::-;15610:2;15605:3;15601:12;15594:19;;15253:366;;;:::o;15625:419::-;15791:4;15829:2;15818:9;15814:18;15806:26;;15878:9;15872:4;15868:20;15864:1;15853:9;15849:17;15842:47;15906:131;16032:4;15906:131;:::i;:::-;15898:139;;15625:419;;;:::o;16050:230::-;16190:34;16186:1;16178:6;16174:14;16167:58;16259:13;16254:2;16246:6;16242:15;16235:38;16050:230;:::o;16286:366::-;16428:3;16449:67;16513:2;16508:3;16449:67;:::i;:::-;16442:74;;16525:93;16614:3;16525:93;:::i;:::-;16643:2;16638:3;16634:12;16627:19;;16286:366;;;:::o;16658:419::-;16824:4;16862:2;16851:9;16847:18;16839:26;;16911:9;16905:4;16901:20;16897:1;16886:9;16882:17;16875:47;16939:131;17065:4;16939:131;:::i;:::-;16931:139;;16658:419;;;:::o;17083:224::-;17223:34;17219:1;17211:6;17207:14;17200:58;17292:7;17287:2;17279:6;17275:15;17268:32;17083:224;:::o;17313:366::-;17455:3;17476:67;17540:2;17535:3;17476:67;:::i;:::-;17469:74;;17552:93;17641:3;17552:93;:::i;:::-;17670:2;17665:3;17661:12;17654:19;;17313:366;;;:::o;17685:419::-;17851:4;17889:2;17878:9;17874:18;17866:26;;17938:9;17932:4;17928:20;17924:1;17913:9;17909:17;17902:47;17966:131;18092:4;17966:131;:::i;:::-;17958:139;;17685:419;;;:::o;18110:173::-;18250:25;18246:1;18238:6;18234:14;18227:49;18110:173;:::o;18289:366::-;18431:3;18452:67;18516:2;18511:3;18452:67;:::i;:::-;18445:74;;18528:93;18617:3;18528:93;:::i;:::-;18646:2;18641:3;18637:12;18630:19;;18289:366;;;:::o;18661:419::-;18827:4;18865:2;18854:9;18850:18;18842:26;;18914:9;18908:4;18904:20;18900:1;18889:9;18885:17;18878:47;18942:131;19068:4;18942:131;:::i;:::-;18934:139;;18661:419;;;:::o;19086:232::-;19226:34;19222:1;19214:6;19210:14;19203:58;19295:15;19290:2;19282:6;19278:15;19271:40;19086:232;:::o;19324:366::-;19466:3;19487:67;19551:2;19546:3;19487:67;:::i;:::-;19480:74;;19563:93;19652:3;19563:93;:::i;:::-;19681:2;19676:3;19672:12;19665:19;;19324:366;;;:::o;19696:419::-;19862:4;19900:2;19889:9;19885:18;19877:26;;19949:9;19943:4;19939:20;19935:1;19924:9;19920:17;19913:47;19977:131;20103:4;19977:131;:::i;:::-;19969:139;;19696:419;;;:::o;20121:170::-;20261:22;20257:1;20249:6;20245:14;20238:46;20121:170;:::o;20297:366::-;20439:3;20460:67;20524:2;20519:3;20460:67;:::i;:::-;20453:74;;20536:93;20625:3;20536:93;:::i;:::-;20654:2;20649:3;20645:12;20638:19;;20297:366;;;:::o;20669:419::-;20835:4;20873:2;20862:9;20858:18;20850:26;;20922:9;20916:4;20912:20;20908:1;20897:9;20893:17;20886:47;20950:131;21076:4;20950:131;:::i;:::-;20942:139;;20669:419;;;:::o;21094:224::-;21234:34;21230:1;21222:6;21218:14;21211:58;21303:7;21298:2;21290:6;21286:15;21279:32;21094:224;:::o;21324:366::-;21466:3;21487:67;21551:2;21546:3;21487:67;:::i;:::-;21480:74;;21563:93;21652:3;21563:93;:::i;:::-;21681:2;21676:3;21672:12;21665:19;;21324:366;;;:::o;21696:419::-;21862:4;21900:2;21889:9;21885:18;21877:26;;21949:9;21943:4;21939:20;21935:1;21924:9;21920:17;21913:47;21977:131;22103:4;21977:131;:::i;:::-;21969:139;;21696:419;;;:::o;22121:228::-;22261:34;22257:1;22249:6;22245:14;22238:58;22330:11;22325:2;22317:6;22313:15;22306:36;22121:228;:::o;22355:366::-;22497:3;22518:67;22582:2;22577:3;22518:67;:::i;:::-;22511:74;;22594:93;22683:3;22594:93;:::i;:::-;22712:2;22707:3;22703:12;22696:19;;22355:366;;;:::o;22727:419::-;22893:4;22931:2;22920:9;22916:18;22908:26;;22980:9;22974:4;22970:20;22966:1;22955:9;22951:17;22944:47;23008:131;23134:4;23008:131;:::i;:::-;23000:139;;22727:419;;;:::o;23152:180::-;23200:77;23197:1;23190:88;23297:4;23294:1;23287:15;23321:4;23318:1;23311:15;23338:185;23378:1;23395:20;23413:1;23395:20;:::i;:::-;23390:25;;23429:20;23447:1;23429:20;:::i;:::-;23424:25;;23468:1;23458:35;;23473:18;;:::i;:::-;23458:35;23515:1;23512;23508:9;23503:14;;23338:185;;;;:::o;23529:249::-;23669:34;23665:1;23657:6;23653:14;23646:58;23738:32;23733:2;23725:6;23721:15;23714:57;23529:249;:::o;23784:366::-;23926:3;23947:67;24011:2;24006:3;23947:67;:::i;:::-;23940:74;;24023:93;24112:3;24023:93;:::i;:::-;24141:2;24136:3;24132:12;24125:19;;23784:366;;;:::o;24156:419::-;24322:4;24360:2;24349:9;24345:18;24337:26;;24409:9;24403:4;24399:20;24395:1;24384:9;24380:17;24373:47;24437:131;24563:4;24437:131;:::i;:::-;24429:139;;24156:419;;;:::o;24581:222::-;24721:34;24717:1;24709:6;24705:14;24698:58;24790:5;24785:2;24777:6;24773:15;24766:30;24581:222;:::o;24809:366::-;24951:3;24972:67;25036:2;25031:3;24972:67;:::i;:::-;24965:74;;25048:93;25137:3;25048:93;:::i;:::-;25166:2;25161:3;25157:12;25150:19;;24809:366;;;:::o;25181:419::-;25347:4;25385:2;25374:9;25370:18;25362:26;;25434:9;25428:4;25424:20;25420:1;25409:9;25405:17;25398:47;25462:131;25588:4;25462:131;:::i;:::-;25454:139;;25181:419;;;:::o;25606:229::-;25746:34;25742:1;25734:6;25730:14;25723:58;25815:12;25810:2;25802:6;25798:15;25791:37;25606:229;:::o;25841:366::-;25983:3;26004:67;26068:2;26063:3;26004:67;:::i;:::-;25997:74;;26080:93;26169:3;26080:93;:::i;:::-;26198:2;26193:3;26189:12;26182:19;;25841:366;;;:::o;26213:419::-;26379:4;26417:2;26406:9;26402:18;26394:26;;26466:9;26460:4;26456:20;26452:1;26441:9;26437:17;26430:47;26494:131;26620:4;26494:131;:::i;:::-;26486:139;;26213:419;;;:::o;26638:225::-;26778:34;26774:1;26766:6;26762:14;26755:58;26847:8;26842:2;26834:6;26830:15;26823:33;26638:225;:::o;26869:366::-;27011:3;27032:67;27096:2;27091:3;27032:67;:::i;:::-;27025:74;;27108:93;27197:3;27108:93;:::i;:::-;27226:2;27221:3;27217:12;27210:19;;26869:366;;;:::o;27241:419::-;27407:4;27445:2;27434:9;27430:18;27422:26;;27494:9;27488:4;27484:20;27480:1;27469:9;27465:17;27458:47;27522:131;27648:4;27522:131;:::i;:::-;27514:139;;27241:419;;;:::o;27666:182::-;27806:34;27802:1;27794:6;27790:14;27783:58;27666:182;:::o;27854:366::-;27996:3;28017:67;28081:2;28076:3;28017:67;:::i;:::-;28010:74;;28093:93;28182:3;28093:93;:::i;:::-;28211:2;28206:3;28202:12;28195:19;;27854:366;;;:::o;28226:419::-;28392:4;28430:2;28419:9;28415:18;28407:26;;28479:9;28473:4;28469:20;28465:1;28454:9;28450:17;28443:47;28507:131;28633:4;28507:131;:::i;:::-;28499:139;;28226:419;;;:::o;28651:143::-;28708:5;28739:6;28733:13;28724:22;;28755:33;28782:5;28755:33;:::i;:::-;28651:143;;;;:::o;28800:351::-;28870:6;28919:2;28907:9;28898:7;28894:23;28890:32;28887:119;;;28925:79;;:::i;:::-;28887:119;29045:1;29070:64;29126:7;29117:6;29106:9;29102:22;29070:64;:::i;:::-;29060:74;;29016:128;28800:351;;;;:::o;29157:182::-;29297:34;29293:1;29285:6;29281:14;29274:58;29157:182;:::o;29345:366::-;29487:3;29508:67;29572:2;29567:3;29508:67;:::i;:::-;29501:74;;29584:93;29673:3;29584:93;:::i;:::-;29702:2;29697:3;29693:12;29686:19;;29345:366;;;:::o;29717:419::-;29883:4;29921:2;29910:9;29906:18;29898:26;;29970:9;29964:4;29960:20;29956:1;29945:9;29941:17;29934:47;29998:131;30124:4;29998:131;:::i;:::-;29990:139;;29717:419;;;:::o;30142:223::-;30282:34;30278:1;30270:6;30266:14;30259:58;30351:6;30346:2;30338:6;30334:15;30327:31;30142:223;:::o;30371:366::-;30513:3;30534:67;30598:2;30593:3;30534:67;:::i;:::-;30527:74;;30610:93;30699:3;30610:93;:::i;:::-;30728:2;30723:3;30719:12;30712:19;;30371:366;;;:::o;30743:419::-;30909:4;30947:2;30936:9;30932:18;30924:26;;30996:9;30990:4;30986:20;30982:1;30971:9;30967:17;30960:47;31024:131;31150:4;31024:131;:::i;:::-;31016:139;;30743:419;;;:::o;31168:221::-;31308:34;31304:1;31296:6;31292:14;31285:58;31377:4;31372:2;31364:6;31360:15;31353:29;31168:221;:::o;31395:366::-;31537:3;31558:67;31622:2;31617:3;31558:67;:::i;:::-;31551:74;;31634:93;31723:3;31634:93;:::i;:::-;31752:2;31747:3;31743:12;31736:19;;31395:366;;;:::o;31767:419::-;31933:4;31971:2;31960:9;31956:18;31948:26;;32020:9;32014:4;32010:20;32006:1;31995:9;31991:17;31984:47;32048:131;32174:4;32048:131;:::i;:::-;32040:139;;31767:419;;;:::o;32192:179::-;32332:31;32328:1;32320:6;32316:14;32309:55;32192:179;:::o;32377:366::-;32519:3;32540:67;32604:2;32599:3;32540:67;:::i;:::-;32533:74;;32616:93;32705:3;32616:93;:::i;:::-;32734:2;32729:3;32725:12;32718:19;;32377:366;;;:::o;32749:419::-;32915:4;32953:2;32942:9;32938:18;32930:26;;33002:9;32996:4;32992:20;32988:1;32977:9;32973:17;32966:47;33030:131;33156:4;33030:131;:::i;:::-;33022:139;;32749:419;;;:::o;33174:224::-;33314:34;33310:1;33302:6;33298:14;33291:58;33383:7;33378:2;33370:6;33366:15;33359:32;33174:224;:::o;33404:366::-;33546:3;33567:67;33631:2;33626:3;33567:67;:::i;:::-;33560:74;;33643:93;33732:3;33643:93;:::i;:::-;33761:2;33756:3;33752:12;33745:19;;33404:366;;;:::o;33776:419::-;33942:4;33980:2;33969:9;33965:18;33957:26;;34029:9;34023:4;34019:20;34015:1;34004:9;34000:17;33993:47;34057:131;34183:4;34057:131;:::i;:::-;34049:139;;33776:419;;;:::o;34201:222::-;34341:34;34337:1;34329:6;34325:14;34318:58;34410:5;34405:2;34397:6;34393:15;34386:30;34201:222;:::o;34429:366::-;34571:3;34592:67;34656:2;34651:3;34592:67;:::i;:::-;34585:74;;34668:93;34757:3;34668:93;:::i;:::-;34786:2;34781:3;34777:12;34770:19;;34429:366;;;:::o;34801:419::-;34967:4;35005:2;34994:9;34990:18;34982:26;;35054:9;35048:4;35044:20;35040:1;35029:9;35025:17;35018:47;35082:131;35208:4;35082:131;:::i;:::-;35074:139;;34801:419;;;:::o;35226:410::-;35266:7;35289:20;35307:1;35289:20;:::i;:::-;35284:25;;35323:20;35341:1;35323:20;:::i;:::-;35318:25;;35378:1;35375;35371:9;35400:30;35418:11;35400:30;:::i;:::-;35389:41;;35579:1;35570:7;35566:15;35563:1;35560:22;35540:1;35533:9;35513:83;35490:139;;35609:18;;:::i;:::-;35490:139;35274:362;35226:410;;;;:::o;35642:194::-;35682:4;35702:20;35720:1;35702:20;:::i;:::-;35697:25;;35736:20;35754:1;35736:20;:::i;:::-;35731:25;;35780:1;35777;35773:9;35765:17;;35804:1;35798:4;35795:11;35792:37;;;35809:18;;:::i;:::-;35792:37;35642:194;;;;:::o;35842:180::-;35890:77;35887:1;35880:88;35987:4;35984:1;35977:15;36011:4;36008:1;36001:15;36028:180;36076:77;36073:1;36066:88;36173:4;36170:1;36163:15;36197:4;36194:1;36187:15;36214:143;36271:5;36302:6;36296:13;36287:22;;36318:33;36345:5;36318:33;:::i;:::-;36214:143;;;;:::o;36363:351::-;36433:6;36482:2;36470:9;36461:7;36457:23;36453:32;36450:119;;;36488:79;;:::i;:::-;36450:119;36608:1;36633:64;36689:7;36680:6;36669:9;36665:22;36633:64;:::i;:::-;36623:74;;36579:128;36363:351;;;;:::o;36720:85::-;36765:7;36794:5;36783:16;;36720:85;;;:::o;36811:158::-;36869:9;36902:61;36920:42;36929:32;36955:5;36929:32;:::i;:::-;36920:42;:::i;:::-;36902:61;:::i;:::-;36889:74;;36811:158;;;:::o;36975:147::-;37070:45;37109:5;37070:45;:::i;:::-;37065:3;37058:58;36975:147;;:::o;37128:114::-;37195:6;37229:5;37223:12;37213:22;;37128:114;;;:::o;37248:184::-;37347:11;37381:6;37376:3;37369:19;37421:4;37416:3;37412:14;37397:29;;37248:184;;;;:::o;37438:132::-;37505:4;37528:3;37520:11;;37558:4;37553:3;37549:14;37541:22;;37438:132;;;:::o;37576:108::-;37653:24;37671:5;37653:24;:::i;:::-;37648:3;37641:37;37576:108;;:::o;37690:179::-;37759:10;37780:46;37822:3;37814:6;37780:46;:::i;:::-;37858:4;37853:3;37849:14;37835:28;;37690:179;;;;:::o;37875:113::-;37945:4;37977;37972:3;37968:14;37960:22;;37875:113;;;:::o;38024:732::-;38143:3;38172:54;38220:5;38172:54;:::i;:::-;38242:86;38321:6;38316:3;38242:86;:::i;:::-;38235:93;;38352:56;38402:5;38352:56;:::i;:::-;38431:7;38462:1;38447:284;38472:6;38469:1;38466:13;38447:284;;;38548:6;38542:13;38575:63;38634:3;38619:13;38575:63;:::i;:::-;38568:70;;38661:60;38714:6;38661:60;:::i;:::-;38651:70;;38507:224;38494:1;38491;38487:9;38482:14;;38447:284;;;38451:14;38747:3;38740:10;;38148:608;;;38024:732;;;;:::o;38762:831::-;39025:4;39063:3;39052:9;39048:19;39040:27;;39077:71;39145:1;39134:9;39130:17;39121:6;39077:71;:::i;:::-;39158:80;39234:2;39223:9;39219:18;39210:6;39158:80;:::i;:::-;39285:9;39279:4;39275:20;39270:2;39259:9;39255:18;39248:48;39313:108;39416:4;39407:6;39313:108;:::i;:::-;39305:116;;39431:72;39499:2;39488:9;39484:18;39475:6;39431:72;:::i;:::-;39513:73;39581:3;39570:9;39566:19;39557:6;39513:73;:::i;:::-;38762:831;;;;;;;;:::o;39599:807::-;39848:4;39886:3;39875:9;39871:19;39863:27;;39900:71;39968:1;39957:9;39953:17;39944:6;39900:71;:::i;:::-;39981:72;40049:2;40038:9;40034:18;40025:6;39981:72;:::i;:::-;40063:80;40139:2;40128:9;40124:18;40115:6;40063:80;:::i;:::-;40153;40229:2;40218:9;40214:18;40205:6;40153:80;:::i;:::-;40243:73;40311:3;40300:9;40296:19;40287:6;40243:73;:::i;:::-;40326;40394:3;40383:9;40379:19;40370:6;40326:73;:::i;:::-;39599:807;;;;;;;;;:::o;40412:663::-;40500:6;40508;40516;40565:2;40553:9;40544:7;40540:23;40536:32;40533:119;;;40571:79;;:::i;:::-;40533:119;40691:1;40716:64;40772:7;40763:6;40752:9;40748:22;40716:64;:::i;:::-;40706:74;;40662:128;40829:2;40855:64;40911:7;40902:6;40891:9;40887:22;40855:64;:::i;:::-;40845:74;;40800:129;40968:2;40994:64;41050:7;41041:6;41030:9;41026:22;40994:64;:::i;:::-;40984:74;;40939:129;40412:663;;;;;:::o;41081:332::-;41202:4;41240:2;41229:9;41225:18;41217:26;;41253:71;41321:1;41310:9;41306:17;41297:6;41253:71;:::i;:::-;41334:72;41402:2;41391:9;41387:18;41378:6;41334:72;:::i;:::-;41081:332;;;;;:::o;41419:225::-;41559:34;41555:1;41547:6;41543:14;41536:58;41628:8;41623:2;41615:6;41611:15;41604:33;41419:225;:::o;41650:366::-;41792:3;41813:67;41877:2;41872:3;41813:67;:::i;:::-;41806:74;;41889:93;41978:3;41889:93;:::i;:::-;42007:2;42002:3;41998:12;41991:19;;41650:366;;;:::o;42022:419::-;42188:4;42226:2;42215:9;42211:18;42203:26;;42275:9;42269:4;42265:20;42261:1;42250:9;42246:17;42239:47;42303:131;42429:4;42303:131;:::i;:::-;42295:139;;42022:419;;;:::o;42447:147::-;42548:11;42585:3;42570:18;;42447:147;;;;:::o;42600:114::-;;:::o;42720:398::-;42879:3;42900:83;42981:1;42976:3;42900:83;:::i;:::-;42893:90;;42992:93;43081:3;42992:93;:::i;:::-;43110:1;43105:3;43101:11;43094:18;;42720:398;;;:::o;43124:379::-;43308:3;43330:147;43473:3;43330:147;:::i;:::-;43323:154;;43494:3;43487:10;;43124:379;;;:::o;43509:137::-;43563:5;43594:6;43588:13;43579:22;;43610:30;43634:5;43610:30;:::i;:::-;43509:137;;;;:::o;43652:345::-;43719:6;43768:2;43756:9;43747:7;43743:23;43739:32;43736:119;;;43774:79;;:::i;:::-;43736:119;43894:1;43919:61;43972:7;43963:6;43952:9;43948:22;43919:61;:::i;:::-;43909:71;;43865:125;43652:345;;;;:::o;44003:229::-;44143:34;44139:1;44131:6;44127:14;44120:58;44212:12;44207:2;44199:6;44195:15;44188:37;44003:229;:::o;44238:366::-;44380:3;44401:67;44465:2;44460:3;44401:67;:::i;:::-;44394:74;;44477:93;44566:3;44477:93;:::i;:::-;44595:2;44590:3;44586:12;44579:19;;44238:366;;;:::o;44610:419::-;44776:4;44814:2;44803:9;44799:18;44791:26;;44863:9;44857:4;44853:20;44849:1;44838:9;44834:17;44827:47;44891:131;45017:4;44891:131;:::i;:::-;44883:139;;44610:419;;;:::o;45035:181::-;45175:33;45171:1;45163:6;45159:14;45152:57;45035:181;:::o;45222:366::-;45364:3;45385:67;45449:2;45444:3;45385:67;:::i;:::-;45378:74;;45461:93;45550:3;45461:93;:::i;:::-;45579:2;45574:3;45570:12;45563:19;;45222:366;;;:::o;45594:419::-;45760:4;45798:2;45787:9;45783:18;45775:26;;45847:9;45841:4;45837:20;45833:1;45822:9;45818:17;45811:47;45875:131;46001:4;45875:131;:::i;:::-;45867:139;;45594:419;;;:::o;46019:225::-;46159:34;46155:1;46147:6;46143:14;46136:58;46228:8;46223:2;46215:6;46211:15;46204:33;46019:225;:::o;46250:366::-;46392:3;46413:67;46477:2;46472:3;46413:67;:::i;:::-;46406:74;;46489:93;46578:3;46489:93;:::i;:::-;46607:2;46602:3;46598:12;46591:19;;46250:366;;;:::o;46622:419::-;46788:4;46826:2;46815:9;46811:18;46803:26;;46875:9;46869:4;46865:20;46861:1;46850:9;46846:17;46839:47;46903:131;47029:4;46903:131;:::i;:::-;46895:139;;46622:419;;;:::o;47047:98::-;47098:6;47132:5;47126:12;47116:22;;47047:98;;;:::o;47151:386::-;47255:3;47283:38;47315:5;47283:38;:::i;:::-;47337:88;47418:6;47413:3;47337:88;:::i;:::-;47330:95;;47434:65;47492:6;47487:3;47480:4;47473:5;47469:16;47434:65;:::i;:::-;47524:6;47519:3;47515:16;47508:23;;47259:278;47151:386;;;;:::o;47543:271::-;47673:3;47695:93;47784:3;47775:6;47695:93;:::i;:::-;47688:100;;47805:3;47798:10;;47543:271;;;;:::o;47820:179::-;47960:31;47956:1;47948:6;47944:14;47937:55;47820:179;:::o;48005:366::-;48147:3;48168:67;48232:2;48227:3;48168:67;:::i;:::-;48161:74;;48244:93;48333:3;48244:93;:::i;:::-;48362:2;48357:3;48353:12;48346:19;;48005:366;;;:::o;48377:419::-;48543:4;48581:2;48570:9;48566:18;48558:26;;48630:9;48624:4;48620:20;48616:1;48605:9;48601:17;48594:47;48658:131;48784:4;48658:131;:::i;:::-;48650:139;;48377:419;;;:::o

Swarm Source

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