ETH Price: $2,526.47 (+3.11%)

Token

totalDifficulty (TTD)
 

Overview

Max Total Supply

58,750 TTD

Holders

9

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
tornadoge.eth
Balance
1,104.5 TTD

Value
$0.00
0x205ec7cc5b3d628501d8dfe096ef45dabd1bc170
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:
totalDifficulty

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-09-14
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.17;

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

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

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

    modifier onlyOwner() {
        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);
    }
}

library SafeMath {

    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
    unchecked {
        uint256 c = a + b;
        if (c < a) return (false, 0);
        return (true, c);
    }
    }

    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
    unchecked {
        if (b > a) return (false, 0);
        return (true, a - b);
    }
    }

    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
    unchecked {
        if (a == 0) return (true, 0);
        uint256 c = a * b;
        if (c / a != b) return (false, 0);
        return (true, c);
    }
    }

    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
    unchecked {
        if (b == 0) return (false, 0);
        return (true, a / b);
    }
    }

    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
    unchecked {
        if (b == 0) return (false, 0);
        return (true, a % b);
    }
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

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

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
    unchecked {
        require(b > 0, errorMessage);
        return a / b;
    }
    }

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

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

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}


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

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    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 Math {
    function max(uint256 a, uint256 b) internal pure returns (uint256) {
        return a >= b ? a : b;
    }

    function min(uint256 a, uint256 b) internal pure returns (uint256) {
        return a < b ? a : b;
    }

    function average(uint256 a, uint256 b) internal pure returns (uint256) {
        return (a & b) + (a ^ b) / 2;
    }

    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b + (a % b == 0 ? 0 : 1);
    }
}

contract totalDifficulty is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 private uniswapV2Router;
    address private uniswapV2Pair;

    mapping(address => bool) private _isBlacklisted;
    bool private _swapping;
    uint256 private _launchTime;
    uint256 private _launchBlock;

    address private feeWallet;

    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    uint256 deadBlocks = 0;

    mapping(address => uint256) private _holderLastTransferTimestamp;
    bool public transferDelayEnabled = true;

    uint256 public totalFees;
    uint256 private _marketingFee;
    uint256 private _liquidityFee;

    uint256 private _tokensForMarketing;
    uint256 private _tokensForLiquidity;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) private _isExcludedMaxTransactionAmount;
    mapping(address => uint256) private _holderFirstBuyTimestamp;
    mapping(address => bool) private automatedMarketMakerPairs;


    event ExcludeFromFees(address indexed account, bool isExcluded);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event feeWalletUpdated(address indexed newWallet, address indexed oldWallet);
    event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity);

    constructor() ERC20("totalDifficulty", "TTD") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        uint256 marketingFee = 6;
        uint256 liquidityFee = 0;

        uint256 totalSupply = 58_750 * 1e18;

        maxTransactionAmount = totalSupply * 2 / 100;
        maxWallet = totalSupply * 2 / 100;
        swapTokensAtAmount = totalSupply * 15 / 10000;

        _marketingFee = marketingFee;
        _liquidityFee = liquidityFee;
        totalFees = _marketingFee + _liquidityFee;

        feeWallet = address(owner());

        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);

        _mint(address(this), totalSupply);
    }

    function startMerge(uint256 _percent) external onlyOwner payable {
        require(_percent <= 100, 'must be between 0-100%');
        require(_launchTime == 0, 'already launched');
        require(_percent == 0 || msg.value > 0, 'need ETH for initial LP');
        deadBlocks = 0;
        uint256 _lpSupply = (totalSupply() * _percent) / 100;
        uint256 _leftover = totalSupply() - _lpSupply;
        if (_lpSupply > 0) {
            _addLp(_lpSupply, msg.value);
        }
        if (_leftover > 0) {
            _transfer(address(this), owner(), _leftover);
        }
        tradingActive = true;
        _launchTime = block.timestamp;
        _launchBlock = block.number;
    }

    function _addLp(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.addLiquidityETH{ value: ethAmount }(
            address(this),
            tokenAmount,
            0,
            0,
            owner(),
            block.timestamp
        );
    }

    function removeRestrictions() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

    function disableTransferDelay() external onlyOwner returns (bool) {
        transferDelayEnabled = false;
        return true;
    }

    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool) {
        require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
        require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply.");
        swapTokensAtAmount = newAmount;
        return true;
    }

    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    function modifyFees(uint256 marketingFee, uint256 liquidityFee) external onlyOwner {
        _marketingFee = marketingFee;
        _liquidityFee = liquidityFee;
        totalFees = _marketingFee + _liquidityFee;
        require(totalFees <= 10, "Must keep fees at 10% or less");
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }


    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateFeeWallet(address newWallet) external onlyOwner {
        emit feeWalletUpdated(newWallet, feeWallet);
        feeWallet = newWallet;
    }

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

    function isSniper(address addr) public view returns (bool) {
        return _isBlacklisted[addr];
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(!_isBlacklisted[from], "Your address has been marked as a sniper, you are unable to transfer or swap.");
        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
        if(tradingActive) {
            require(block.number >= _launchBlock + deadBlocks, "NOT BOT");
        }
        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !_swapping
            ) {
                if (!tradingActive) {
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }

                if (balanceOf(to) == 0 && _holderFirstBuyTimestamp[to] == 0) {
                    _holderFirstBuyTimestamp[to] = block.timestamp;
                }
 
                if (transferDelayEnabled) {
                    if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)) {
                        require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }

                // when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                    require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }

                // when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                    require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;
        if (
            canSwap &&
            !_swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            _swapping = true;
            swapBack();
            _swapping = false;
        }

        bool takeFee = !_swapping;

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

        uint256 fees = 0;
        if (takeFee) {
            fees = amount.mul(totalFees).div(100);
            _tokensForLiquidity += fees * _liquidityFee / totalFees;
            _tokensForMarketing += fees * _marketingFee / totalFees;
            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }

            amount -= fees;
        }

        super._transfer(from, to, amount);

    }

    function _swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        uniswapV2Router.addLiquidityETH{value : ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(),
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = _tokensForLiquidity + _tokensForMarketing;

        if (contractBalance == 0 || totalTokensToSwap == 0) return;
        if (contractBalance > swapTokensAtAmount) {
            contractBalance = swapTokensAtAmount;
        }
        uint256 liquidityTokens = contractBalance * _tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);

        uint256 initialETHBalance = address(this).balance;

        _swapTokensForEth(amountToSwapForETH);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        uint256 ethForMarketing = ethBalance.mul(_tokensForMarketing).div(totalTokensToSwap);
        uint256 ethForLiquidity = ethBalance - ethForMarketing;


        _tokensForLiquidity = 0;
        _tokensForMarketing = 0;

        (bool success,) = address(feeWallet).call{value : ethForMarketing}("");
        success = false;

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            _addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, _tokensForLiquidity);
        }
    }
    function teamMessage(string memory input) external onlyOwner {

    }
    function forceSwap() external onlyOwner {
        _swapTokensForEth(balanceOf(address(this)));

        (bool success,) = address(feeWallet).call{value : address(this).balance}("");
        success = false;
    }

    function forceSend() external onlyOwner {
        (bool success,) = address(feeWallet).call{value : address(this).balance}("");
        success = false;
    }

    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","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":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","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":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"feeWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isSniper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"modifyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeRestrictions","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_percent","type":"uint256"}],"name":"startMerge","outputs":[],"stateMutability":"payable","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":"string","name":"input","type":"string"}],"name":"teamMessage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateFeeWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526001601060006101000a81548160ff0219169083151502179055506000601060016101000a81548160ff02191690831515021790555060006011556001601360006101000a81548160ff0219169083151502179055503480156200006757600080fd5b506040518060400160405280600f81526020017f746f74616c446966666963756c747900000000000000000000000000000000008152506040518060400160405280600381526020017f54544400000000000000000000000000000000000000000000000000000000008152508160039081620000e5919062000cf5565b508060049081620000f7919062000cf5565b5050506200011a6200010e6200053c60201b60201c565b6200054460201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001468160016200060a60201b60201c565b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001d3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001f9919062000e46565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000261573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000287919062000e46565b6040518363ffffffff1660e01b8152600401620002a692919062000e89565b6020604051808303816000875af1158015620002c6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ec919062000e46565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000361600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200060a60201b60201c565b62000396600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620006f460201b60201c565b600060069050600080690c70d808a128d738000090506064600282620003bd919062000ee5565b620003c9919062000f5f565b600d819055506064600282620003e0919062000ee5565b620003ec919062000f5f565b600f81905550612710600f8262000404919062000ee5565b62000410919062000f5f565b600e81905550826015819055508160168190555060165460155462000436919062000f97565b6014819055506200044c6200079560201b60201c565b600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620004ae620004a06200079560201b60201c565b6001620007bf60201b60201c565b620004c1306001620007bf60201b60201c565b620004d661dead6001620007bf60201b60201c565b620004f8620004ea6200079560201b60201c565b60016200060a60201b60201c565b6200050b3060016200060a60201b60201c565b6200052061dead60016200060a60201b60201c565b620005323082620008f960201b60201c565b505050506200112f565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200061a6200053c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620006406200079560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000699576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006909062001033565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620007cf6200053c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620007f56200079560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200084e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008459062001033565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620008ed919062001072565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200096b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200096290620010df565b60405180910390fd5b6200097f6000838362000a7160201b60201c565b806002600082825462000993919062000f97565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620009ea919062000f97565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a51919062001112565b60405180910390a362000a6d6000838362000a7660201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000afd57607f821691505b60208210810362000b135762000b1262000ab5565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000b7d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000b3e565b62000b89868362000b3e565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000bd662000bd062000bca8462000ba1565b62000bab565b62000ba1565b9050919050565b6000819050919050565b62000bf28362000bb5565b62000c0a62000c018262000bdd565b84845462000b4b565b825550505050565b600090565b62000c2162000c12565b62000c2e81848462000be7565b505050565b5b8181101562000c565762000c4a60008262000c17565b60018101905062000c34565b5050565b601f82111562000ca55762000c6f8162000b19565b62000c7a8462000b2e565b8101602085101562000c8a578190505b62000ca262000c998562000b2e565b83018262000c33565b50505b505050565b600082821c905092915050565b600062000cca6000198460080262000caa565b1980831691505092915050565b600062000ce5838362000cb7565b9150826002028217905092915050565b62000d008262000a7b565b67ffffffffffffffff81111562000d1c5762000d1b62000a86565b5b62000d28825462000ae4565b62000d3582828562000c5a565b600060209050601f83116001811462000d6d576000841562000d58578287015190505b62000d64858262000cd7565b86555062000dd4565b601f19841662000d7d8662000b19565b60005b8281101562000da75784890151825560018201915060208501945060208101905062000d80565b8683101562000dc7578489015162000dc3601f89168262000cb7565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000e0e8262000de1565b9050919050565b62000e208162000e01565b811462000e2c57600080fd5b50565b60008151905062000e408162000e15565b92915050565b60006020828403121562000e5f5762000e5e62000ddc565b5b600062000e6f8482850162000e2f565b91505092915050565b62000e838162000e01565b82525050565b600060408201905062000ea0600083018562000e78565b62000eaf602083018462000e78565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000ef28262000ba1565b915062000eff8362000ba1565b925082820262000f0f8162000ba1565b9150828204841483151762000f295762000f2862000eb6565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000f6c8262000ba1565b915062000f798362000ba1565b92508262000f8c5762000f8b62000f30565b5b828204905092915050565b600062000fa48262000ba1565b915062000fb18362000ba1565b925082820190508082111562000fcc5762000fcb62000eb6565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200101b60208362000fd2565b9150620010288262000fe3565b602082019050919050565b600060208201905081810360008301526200104e816200100c565b9050919050565b60008115159050919050565b6200106c8162001055565b82525050565b600060208201905062001089600083018462001061565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620010c7601f8362000fd2565b9150620010d4826200108f565b602082019050919050565b60006020820190508181036000830152620010fa81620010b8565b9050919050565b6200110c8162000ba1565b82525050565b600060208201905062001129600083018462001101565b92915050565b6149ed806200113f6000396000f3fe6080604052600436106102085760003560e01c806395d89b4111610118578063c8c8ebe4116100a0578063e2f456051161006f578063e2f456051461077b578063e884f260146107a6578063eab15e43146107d1578063f2fde38b146107fc578063f8b45b05146108255761020f565b8063c8c8ebe4146106bf578063d257b34f146106ea578063dd62ed3e14610727578063df778d26146107645761020f565b8063a9059cbb116100e7578063a9059cbb146105da578063bbc0c74214610617578063bd41dbac14610642578063c02466681461066b578063c876d0b9146106945761020f565b806395d89b411461052057806396f73da31461054b5780639a7a23d614610574578063a457c2d71461059d5761020f565b8063395093511161019b578063667185241161016a578063667185241461044f57806370a0823114610478578063715018a6146104b55780637571336a146104cc5780638da5cb5b146104f55761020f565b8063395093511461038e5780634a62bb65146103cb5780634a943fbc146103f65780634fbee193146104125761020f565b806313114a9d116101d757806313114a9d146102d057806318160ddd146102fb57806323b872dd14610326578063313ce567146103635761020f565b806306fdde0314610214578063095ea7b31461023f5780630f3a325f1461027c57806312b77e8a146102b95761020f565b3661020f57005b600080fd5b34801561022057600080fd5b50610229610850565b6040516102369190613414565b60405180910390f35b34801561024b57600080fd5b50610266600480360381019061026191906134de565b6108e2565b6040516102739190613539565b60405180910390f35b34801561028857600080fd5b506102a3600480360381019061029e9190613554565b610905565b6040516102b09190613539565b60405180910390f35b3480156102c557600080fd5b506102ce61095b565b005b3480156102dc57600080fd5b506102e5610a6c565b6040516102f29190613590565b60405180910390f35b34801561030757600080fd5b50610310610a72565b60405161031d9190613590565b60405180910390f35b34801561033257600080fd5b5061034d600480360381019061034891906135ab565b610a7c565b60405161035a9190613539565b60405180910390f35b34801561036f57600080fd5b50610378610aab565b604051610385919061361a565b60405180910390f35b34801561039a57600080fd5b506103b560048036038101906103b091906134de565b610ab4565b6040516103c29190613539565b60405180910390f35b3480156103d757600080fd5b506103e0610aeb565b6040516103ed9190613539565b60405180910390f35b610410600480360381019061040b9190613635565b610afe565b005b34801561041e57600080fd5b5061043960048036038101906104349190613554565b610cf1565b6040516104469190613539565b60405180910390f35b34801561045b57600080fd5b5061047660048036038101906104719190613554565b610d47565b005b34801561048457600080fd5b5061049f600480360381019061049a9190613554565b610e83565b6040516104ac9190613590565b60405180910390f35b3480156104c157600080fd5b506104ca610ecb565b005b3480156104d857600080fd5b506104f360048036038101906104ee919061368e565b610f53565b005b34801561050157600080fd5b5061050a61102a565b60405161051791906136dd565b60405180910390f35b34801561052c57600080fd5b50610535611054565b6040516105429190613414565b60405180910390f35b34801561055757600080fd5b50610572600480360381019061056d919061382d565b6110e6565b005b34801561058057600080fd5b5061059b6004803603810190610596919061368e565b611165565b005b3480156105a957600080fd5b506105c460048036038101906105bf91906134de565b61127f565b6040516105d19190613539565b60405180910390f35b3480156105e657600080fd5b5061060160048036038101906105fc91906134de565b6112f6565b60405161060e9190613539565b60405180910390f35b34801561062357600080fd5b5061062c611319565b6040516106399190613539565b60405180910390f35b34801561064e57600080fd5b5061066960048036038101906106649190613876565b61132c565b005b34801561067757600080fd5b50610692600480360381019061068d919061368e565b611416565b005b3480156106a057600080fd5b506106a961153b565b6040516106b69190613539565b60405180910390f35b3480156106cb57600080fd5b506106d461154e565b6040516106e19190613590565b60405180910390f35b3480156106f657600080fd5b50610711600480360381019061070c9190613635565b611554565b60405161071e9190613539565b60405180910390f35b34801561073357600080fd5b5061074e600480360381019061074991906138b6565b6116a9565b60405161075b9190613590565b60405180910390f35b34801561077057600080fd5b50610779611730565b005b34801561078757600080fd5b50610790611852565b60405161079d9190613590565b60405180910390f35b3480156107b257600080fd5b506107bb611858565b6040516107c89190613539565b60405180910390f35b3480156107dd57600080fd5b506107e66118f8565b6040516107f39190613539565b60405180910390f35b34801561080857600080fd5b50610823600480360381019061081e9190613554565b611998565b005b34801561083157600080fd5b5061083a611a8f565b6040516108479190613590565b60405180910390f35b60606003805461085f90613925565b80601f016020809104026020016040519081016040528092919081815260200182805461088b90613925565b80156108d85780601f106108ad576101008083540402835291602001916108d8565b820191906000526020600020905b8154815290600101906020018083116108bb57829003601f168201915b5050505050905090565b6000806108ed611a95565b90506108fa818585611a9d565b600191505092915050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610963611a95565b73ffffffffffffffffffffffffffffffffffffffff1661098161102a565b73ffffffffffffffffffffffffffffffffffffffff16146109d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ce906139a2565b60405180910390fd5b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051610a1f906139f3565b60006040518083038185875af1925050503d8060008114610a5c576040519150601f19603f3d011682016040523d82523d6000602084013e610a61565b606091505b505090506000905050565b60145481565b6000600254905090565b600080610a87611a95565b9050610a94858285611c66565b610a9f858585611cf2565b60019150509392505050565b60006012905090565b600080610abf611a95565b9050610ae0818585610ad185896116a9565b610adb9190613a37565b611a9d565b600191505092915050565b601060009054906101000a900460ff1681565b610b06611a95565b73ffffffffffffffffffffffffffffffffffffffff16610b2461102a565b73ffffffffffffffffffffffffffffffffffffffff1614610b7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b71906139a2565b60405180910390fd5b6064811115610bbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb590613ab7565b60405180910390fd5b6000600a5414610c03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfa90613b23565b60405180910390fd5b6000811480610c125750600034115b610c51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4890613b8f565b60405180910390fd5b60006011819055506000606482610c66610a72565b610c709190613baf565b610c7a9190613c20565b9050600081610c87610a72565b610c919190613c51565b90506000821115610ca757610ca6823461294e565b5b6000811115610cc357610cc230610cbc61102a565b83611cf2565b5b6001601060016101000a81548160ff02191690831515021790555042600a8190555043600b81905550505050565b6000601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610d4f611a95565b73ffffffffffffffffffffffffffffffffffffffff16610d6d61102a565b73ffffffffffffffffffffffffffffffffffffffff1614610dc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dba906139a2565b60405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f5deb5ef622431f0df5a39b72dd556892f68ba42aa0f3aaf0800e166ce866492860405160405180910390a380600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ed3611a95565b73ffffffffffffffffffffffffffffffffffffffff16610ef161102a565b73ffffffffffffffffffffffffffffffffffffffff1614610f47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3e906139a2565b60405180910390fd5b610f516000612a33565b565b610f5b611a95565b73ffffffffffffffffffffffffffffffffffffffff16610f7961102a565b73ffffffffffffffffffffffffffffffffffffffff1614610fcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc6906139a2565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461106390613925565b80601f016020809104026020016040519081016040528092919081815260200182805461108f90613925565b80156110dc5780601f106110b1576101008083540402835291602001916110dc565b820191906000526020600020905b8154815290600101906020018083116110bf57829003601f168201915b5050505050905090565b6110ee611a95565b73ffffffffffffffffffffffffffffffffffffffff1661110c61102a565b73ffffffffffffffffffffffffffffffffffffffff1614611162576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611159906139a2565b60405180910390fd5b50565b61116d611a95565b73ffffffffffffffffffffffffffffffffffffffff1661118b61102a565b73ffffffffffffffffffffffffffffffffffffffff16146111e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d8906139a2565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611271576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126890613cf7565b60405180910390fd5b61127b8282612af9565b5050565b60008061128a611a95565b9050600061129882866116a9565b9050838110156112dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d490613d89565b60405180910390fd5b6112ea8286868403611a9d565b60019250505092915050565b600080611301611a95565b905061130e818585611cf2565b600191505092915050565b601060019054906101000a900460ff1681565b611334611a95565b73ffffffffffffffffffffffffffffffffffffffff1661135261102a565b73ffffffffffffffffffffffffffffffffffffffff16146113a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139f906139a2565b60405180910390fd5b81601581905550806016819055506016546015546113c69190613a37565b601481905550600a6014541115611412576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140990613df5565b60405180910390fd5b5050565b61141e611a95565b73ffffffffffffffffffffffffffffffffffffffff1661143c61102a565b73ffffffffffffffffffffffffffffffffffffffff1614611492576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611489906139a2565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161152f9190613539565b60405180910390a25050565b601360009054906101000a900460ff1681565b600d5481565b600061155e611a95565b73ffffffffffffffffffffffffffffffffffffffff1661157c61102a565b73ffffffffffffffffffffffffffffffffffffffff16146115d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c9906139a2565b60405180910390fd5b620186a060016115e0610a72565b6115ea9190613baf565b6115f49190613c20565b821015611636576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162d90613e87565b60405180910390fd5b6103e86005611643610a72565b61164d9190613baf565b6116579190613c20565b821115611699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169090613f19565b60405180910390fd5b81600e8190555060019050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611738611a95565b73ffffffffffffffffffffffffffffffffffffffff1661175661102a565b73ffffffffffffffffffffffffffffffffffffffff16146117ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a3906139a2565b60405180910390fd5b6117bd6117b830610e83565b612b9a565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051611805906139f3565b60006040518083038185875af1925050503d8060008114611842576040519150601f19603f3d011682016040523d82523d6000602084013e611847565b606091505b505090506000905050565b600e5481565b6000611862611a95565b73ffffffffffffffffffffffffffffffffffffffff1661188061102a565b73ffffffffffffffffffffffffffffffffffffffff16146118d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118cd906139a2565b60405180910390fd5b6000601360006101000a81548160ff0219169083151502179055506001905090565b6000611902611a95565b73ffffffffffffffffffffffffffffffffffffffff1661192061102a565b73ffffffffffffffffffffffffffffffffffffffff1614611976576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196d906139a2565b60405180910390fd5b6000601060006101000a81548160ff0219169083151502179055506001905090565b6119a0611a95565b73ffffffffffffffffffffffffffffffffffffffff166119be61102a565b73ffffffffffffffffffffffffffffffffffffffff1614611a14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0b906139a2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611a83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7a90613fab565b60405180910390fd5b611a8c81612a33565b50565b600f5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611b0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b039061403d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b72906140cf565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611c599190613590565b60405180910390a3505050565b6000611c7284846116a9565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611cec5781811015611cde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd59061413b565b60405180910390fd5b611ceb8484848403611a9d565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d58906141cd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611dd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc79061425f565b60405180910390fd5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611e5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5490614317565b60405180910390fd5b60008103611e7657611e7183836000612ddd565b612949565b601060019054906101000a900460ff1615611ede57601154600b54611e9b9190613a37565b431015611edd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed490614383565b60405180910390fd5b5b601060009054906101000a900460ff161561264657611efb61102a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611f695750611f3961102a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611fa25750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611fdc575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611ff55750600960009054906101000a900460ff16155b1561264557601060019054906101000a900460ff166120ef57601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806120af5750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6120ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e5906143ef565b60405180910390fd5b5b60006120fa83610e83565b14801561214657506000601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b156121905742601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b601360009054906101000a900460ff161561235c576121ad61102a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156122365750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122905750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561235b5743601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612316576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230d906144a7565b60405180910390fd5b43601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156123ff5750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156124a657600d54811115612449576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244090614539565b60405180910390fd5b600f5461245583610e83565b826124609190613a37565b11156124a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612498906145a5565b60405180910390fd5b612644565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125495750601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561259857600d54811115612593576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258a90614637565b60405180910390fd5b612643565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661264257600f546125f583610e83565b826126009190613a37565b1115612641576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612638906145a5565b60405180910390fd5b5b5b5b5b5b600061265130610e83565b90506000600e5482101590508080156126775750600960009054906101000a900460ff16155b80156126cd5750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156127235750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156127795750601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156127bd576001600960006101000a81548160ff0219169083151502179055506127a161305c565b6000600960006101000a81548160ff0219169083151502179055505b6000600960009054906101000a900460ff16159050601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806128735750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561287d57600090505b60008115612939576128ad606461289f6014548861325390919063ffffffff16565b61326990919063ffffffff16565b9050601454601654826128c09190613baf565b6128ca9190613c20565b601860008282546128db9190613a37565b92505081905550601454601554826128f39190613baf565b6128fd9190613c20565b6017600082825461290e9190613a37565b92505081905550600081111561292a57612929873083612ddd565b5b80856129369190613c51565b94505b612944878787612ddd565b505050505b505050565b61297b30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611a9d565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806129c761102a565b426040518863ffffffff1660e01b81526004016129e99695949392919061469c565b60606040518083038185885af1158015612a07573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612a2c9190614712565b5050505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600267ffffffffffffffff811115612bb757612bb6613702565b5b604051908082528060200260200182016040528015612be55781602001602082028036833780820191505090505b5090503081600081518110612bfd57612bfc614765565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ca4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cc891906147a9565b81600181518110612cdc57612cdb614765565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612d4330600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611a9d565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612da7959493929190614894565b600060405180830381600087803b158015612dc157600080fd5b505af1158015612dd5573d6000803e3d6000fd5b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612e4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e43906141cd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612ebb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eb29061425f565b60405180910390fd5b612ec683838361327f565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612f4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f4390614960565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612fdf9190613a37565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516130439190613590565b60405180910390a3613056848484613284565b50505050565b600061306730610e83565b9050600060175460185461307b9190613a37565b9050600082148061308c5750600081145b15613098575050613251565b600e548211156130a857600e5491505b6000600282601854856130bb9190613baf565b6130c59190613c20565b6130cf9190613c20565b905060006130e6828561328990919063ffffffff16565b905060004790506130f682612b9a565b600061310b824761328990919063ffffffff16565b90506000613136866131286017548561325390919063ffffffff16565b61326990919063ffffffff16565b9050600081836131469190613c51565b9050600060188190555060006017819055506000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16836040516131a0906139f3565b60006040518083038185875af1925050503d80600081146131dd576040519150601f19603f3d011682016040523d82523d6000602084013e6131e2565b606091505b50509050600090506000871180156131fa5750600082115b1561324757613209878361329f565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561868360185460405161323e93929190614980565b60405180910390a15b5050505050505050505b565b600081836132619190613baf565b905092915050565b600081836132779190613c20565b905092915050565b505050565b505050565b600081836132979190613c51565b905092915050565b6132cc30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611a9d565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061331861102a565b426040518863ffffffff1660e01b815260040161333a9695949392919061469c565b60606040518083038185885af1158015613358573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061337d9190614712565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156133be5780820151818401526020810190506133a3565b60008484015250505050565b6000601f19601f8301169050919050565b60006133e682613384565b6133f0818561338f565b93506134008185602086016133a0565b613409816133ca565b840191505092915050565b6000602082019050818103600083015261342e81846133db565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006134758261344a565b9050919050565b6134858161346a565b811461349057600080fd5b50565b6000813590506134a28161347c565b92915050565b6000819050919050565b6134bb816134a8565b81146134c657600080fd5b50565b6000813590506134d8816134b2565b92915050565b600080604083850312156134f5576134f4613440565b5b600061350385828601613493565b9250506020613514858286016134c9565b9150509250929050565b60008115159050919050565b6135338161351e565b82525050565b600060208201905061354e600083018461352a565b92915050565b60006020828403121561356a57613569613440565b5b600061357884828501613493565b91505092915050565b61358a816134a8565b82525050565b60006020820190506135a56000830184613581565b92915050565b6000806000606084860312156135c4576135c3613440565b5b60006135d286828701613493565b93505060206135e386828701613493565b92505060406135f4868287016134c9565b9150509250925092565b600060ff82169050919050565b613614816135fe565b82525050565b600060208201905061362f600083018461360b565b92915050565b60006020828403121561364b5761364a613440565b5b6000613659848285016134c9565b91505092915050565b61366b8161351e565b811461367657600080fd5b50565b60008135905061368881613662565b92915050565b600080604083850312156136a5576136a4613440565b5b60006136b385828601613493565b92505060206136c485828601613679565b9150509250929050565b6136d78161346a565b82525050565b60006020820190506136f260008301846136ce565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61373a826133ca565b810181811067ffffffffffffffff8211171561375957613758613702565b5b80604052505050565b600061376c613436565b90506137788282613731565b919050565b600067ffffffffffffffff82111561379857613797613702565b5b6137a1826133ca565b9050602081019050919050565b82818337600083830152505050565b60006137d06137cb8461377d565b613762565b9050828152602081018484840111156137ec576137eb6136fd565b5b6137f78482856137ae565b509392505050565b600082601f830112613814576138136136f8565b5b81356138248482602086016137bd565b91505092915050565b60006020828403121561384357613842613440565b5b600082013567ffffffffffffffff81111561386157613860613445565b5b61386d848285016137ff565b91505092915050565b6000806040838503121561388d5761388c613440565b5b600061389b858286016134c9565b92505060206138ac858286016134c9565b9150509250929050565b600080604083850312156138cd576138cc613440565b5b60006138db85828601613493565b92505060206138ec85828601613493565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061393d57607f821691505b6020821081036139505761394f6138f6565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061398c60208361338f565b915061399782613956565b602082019050919050565b600060208201905081810360008301526139bb8161397f565b9050919050565b600081905092915050565b50565b60006139dd6000836139c2565b91506139e8826139cd565b600082019050919050565b60006139fe826139d0565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613a42826134a8565b9150613a4d836134a8565b9250828201905080821115613a6557613a64613a08565b5b92915050565b7f6d757374206265206265747765656e20302d3130302500000000000000000000600082015250565b6000613aa160168361338f565b9150613aac82613a6b565b602082019050919050565b60006020820190508181036000830152613ad081613a94565b9050919050565b7f616c7265616479206c61756e6368656400000000000000000000000000000000600082015250565b6000613b0d60108361338f565b9150613b1882613ad7565b602082019050919050565b60006020820190508181036000830152613b3c81613b00565b9050919050565b7f6e6565642045544820666f7220696e697469616c204c50000000000000000000600082015250565b6000613b7960178361338f565b9150613b8482613b43565b602082019050919050565b60006020820190508181036000830152613ba881613b6c565b9050919050565b6000613bba826134a8565b9150613bc5836134a8565b9250828202613bd3816134a8565b91508282048414831517613bea57613be9613a08565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613c2b826134a8565b9150613c36836134a8565b925082613c4657613c45613bf1565b5b828204905092915050565b6000613c5c826134a8565b9150613c67836134a8565b9250828203905081811115613c7f57613c7e613a08565b5b92915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613ce160398361338f565b9150613cec82613c85565b604082019050919050565b60006020820190508181036000830152613d1081613cd4565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613d7360258361338f565b9150613d7e82613d17565b604082019050919050565b60006020820190508181036000830152613da281613d66565b9050919050565b7f4d757374206b656570206665657320617420313025206f72206c657373000000600082015250565b6000613ddf601d8361338f565b9150613dea82613da9565b602082019050919050565b60006020820190508181036000830152613e0e81613dd2565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000613e7160358361338f565b9150613e7c82613e15565b604082019050919050565b60006020820190508181036000830152613ea081613e64565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000613f0360348361338f565b9150613f0e82613ea7565b604082019050919050565b60006020820190508181036000830152613f3281613ef6565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613f9560268361338f565b9150613fa082613f39565b604082019050919050565b60006020820190508181036000830152613fc481613f88565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061402760248361338f565b915061403282613fcb565b604082019050919050565b600060208201905081810360008301526140568161401a565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006140b960228361338f565b91506140c48261405d565b604082019050919050565b600060208201905081810360008301526140e8816140ac565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000614125601d8361338f565b9150614130826140ef565b602082019050919050565b6000602082019050818103600083015261415481614118565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006141b760258361338f565b91506141c28261415b565b604082019050919050565b600060208201905081810360008301526141e6816141aa565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061424960238361338f565b9150614254826141ed565b604082019050919050565b600060208201905081810360008301526142788161423c565b9050919050565b7f596f7572206164647265737320686173206265656e206d61726b65642061732060008201527f6120736e697065722c20796f752061726520756e61626c6520746f207472616e60208201527f73666572206f7220737761702e00000000000000000000000000000000000000604082015250565b6000614301604d8361338f565b915061430c8261427f565b606082019050919050565b60006020820190508181036000830152614330816142f4565b9050919050565b7f4e4f5420424f5400000000000000000000000000000000000000000000000000600082015250565b600061436d60078361338f565b915061437882614337565b602082019050919050565b6000602082019050818103600083015261439c81614360565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006143d960168361338f565b91506143e4826143a3565b602082019050919050565b60006020820190508181036000830152614408816143cc565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b600061449160498361338f565b915061449c8261440f565b606082019050919050565b600060208201905081810360008301526144c081614484565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061452360358361338f565b915061452e826144c7565b604082019050919050565b6000602082019050818103600083015261455281614516565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061458f60138361338f565b915061459a82614559565b602082019050919050565b600060208201905081810360008301526145be81614582565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061462160368361338f565b915061462c826145c5565b604082019050919050565b6000602082019050818103600083015261465081614614565b9050919050565b6000819050919050565b6000819050919050565b600061468661468161467c84614657565b614661565b6134a8565b9050919050565b6146968161466b565b82525050565b600060c0820190506146b160008301896136ce565b6146be6020830188613581565b6146cb604083018761468d565b6146d8606083018661468d565b6146e560808301856136ce565b6146f260a0830184613581565b979650505050505050565b60008151905061470c816134b2565b92915050565b60008060006060848603121561472b5761472a613440565b5b6000614739868287016146fd565b935050602061474a868287016146fd565b925050604061475b868287016146fd565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506147a38161347c565b92915050565b6000602082840312156147bf576147be613440565b5b60006147cd84828501614794565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61480b8161346a565b82525050565b600061481d8383614802565b60208301905092915050565b6000602082019050919050565b6000614841826147d6565b61484b81856147e1565b9350614856836147f2565b8060005b8381101561488757815161486e8882614811565b975061487983614829565b92505060018101905061485a565b5085935050505092915050565b600060a0820190506148a96000830188613581565b6148b6602083018761468d565b81810360408301526148c88186614836565b90506148d760608301856136ce565b6148e46080830184613581565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061494a60268361338f565b9150614955826148ee565b604082019050919050565b600060208201905081810360008301526149798161493d565b9050919050565b60006060820190506149956000830186613581565b6149a26020830185613581565b6149af6040830184613581565b94935050505056fea2646970667358221220540ad745628330c1d7cc51a40becd3b59c152ae233a09cbd15c4efdb0dc882a564736f6c63430008110033

Deployed Bytecode

0x6080604052600436106102085760003560e01c806395d89b4111610118578063c8c8ebe4116100a0578063e2f456051161006f578063e2f456051461077b578063e884f260146107a6578063eab15e43146107d1578063f2fde38b146107fc578063f8b45b05146108255761020f565b8063c8c8ebe4146106bf578063d257b34f146106ea578063dd62ed3e14610727578063df778d26146107645761020f565b8063a9059cbb116100e7578063a9059cbb146105da578063bbc0c74214610617578063bd41dbac14610642578063c02466681461066b578063c876d0b9146106945761020f565b806395d89b411461052057806396f73da31461054b5780639a7a23d614610574578063a457c2d71461059d5761020f565b8063395093511161019b578063667185241161016a578063667185241461044f57806370a0823114610478578063715018a6146104b55780637571336a146104cc5780638da5cb5b146104f55761020f565b8063395093511461038e5780634a62bb65146103cb5780634a943fbc146103f65780634fbee193146104125761020f565b806313114a9d116101d757806313114a9d146102d057806318160ddd146102fb57806323b872dd14610326578063313ce567146103635761020f565b806306fdde0314610214578063095ea7b31461023f5780630f3a325f1461027c57806312b77e8a146102b95761020f565b3661020f57005b600080fd5b34801561022057600080fd5b50610229610850565b6040516102369190613414565b60405180910390f35b34801561024b57600080fd5b50610266600480360381019061026191906134de565b6108e2565b6040516102739190613539565b60405180910390f35b34801561028857600080fd5b506102a3600480360381019061029e9190613554565b610905565b6040516102b09190613539565b60405180910390f35b3480156102c557600080fd5b506102ce61095b565b005b3480156102dc57600080fd5b506102e5610a6c565b6040516102f29190613590565b60405180910390f35b34801561030757600080fd5b50610310610a72565b60405161031d9190613590565b60405180910390f35b34801561033257600080fd5b5061034d600480360381019061034891906135ab565b610a7c565b60405161035a9190613539565b60405180910390f35b34801561036f57600080fd5b50610378610aab565b604051610385919061361a565b60405180910390f35b34801561039a57600080fd5b506103b560048036038101906103b091906134de565b610ab4565b6040516103c29190613539565b60405180910390f35b3480156103d757600080fd5b506103e0610aeb565b6040516103ed9190613539565b60405180910390f35b610410600480360381019061040b9190613635565b610afe565b005b34801561041e57600080fd5b5061043960048036038101906104349190613554565b610cf1565b6040516104469190613539565b60405180910390f35b34801561045b57600080fd5b5061047660048036038101906104719190613554565b610d47565b005b34801561048457600080fd5b5061049f600480360381019061049a9190613554565b610e83565b6040516104ac9190613590565b60405180910390f35b3480156104c157600080fd5b506104ca610ecb565b005b3480156104d857600080fd5b506104f360048036038101906104ee919061368e565b610f53565b005b34801561050157600080fd5b5061050a61102a565b60405161051791906136dd565b60405180910390f35b34801561052c57600080fd5b50610535611054565b6040516105429190613414565b60405180910390f35b34801561055757600080fd5b50610572600480360381019061056d919061382d565b6110e6565b005b34801561058057600080fd5b5061059b6004803603810190610596919061368e565b611165565b005b3480156105a957600080fd5b506105c460048036038101906105bf91906134de565b61127f565b6040516105d19190613539565b60405180910390f35b3480156105e657600080fd5b5061060160048036038101906105fc91906134de565b6112f6565b60405161060e9190613539565b60405180910390f35b34801561062357600080fd5b5061062c611319565b6040516106399190613539565b60405180910390f35b34801561064e57600080fd5b5061066960048036038101906106649190613876565b61132c565b005b34801561067757600080fd5b50610692600480360381019061068d919061368e565b611416565b005b3480156106a057600080fd5b506106a961153b565b6040516106b69190613539565b60405180910390f35b3480156106cb57600080fd5b506106d461154e565b6040516106e19190613590565b60405180910390f35b3480156106f657600080fd5b50610711600480360381019061070c9190613635565b611554565b60405161071e9190613539565b60405180910390f35b34801561073357600080fd5b5061074e600480360381019061074991906138b6565b6116a9565b60405161075b9190613590565b60405180910390f35b34801561077057600080fd5b50610779611730565b005b34801561078757600080fd5b50610790611852565b60405161079d9190613590565b60405180910390f35b3480156107b257600080fd5b506107bb611858565b6040516107c89190613539565b60405180910390f35b3480156107dd57600080fd5b506107e66118f8565b6040516107f39190613539565b60405180910390f35b34801561080857600080fd5b50610823600480360381019061081e9190613554565b611998565b005b34801561083157600080fd5b5061083a611a8f565b6040516108479190613590565b60405180910390f35b60606003805461085f90613925565b80601f016020809104026020016040519081016040528092919081815260200182805461088b90613925565b80156108d85780601f106108ad576101008083540402835291602001916108d8565b820191906000526020600020905b8154815290600101906020018083116108bb57829003601f168201915b5050505050905090565b6000806108ed611a95565b90506108fa818585611a9d565b600191505092915050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610963611a95565b73ffffffffffffffffffffffffffffffffffffffff1661098161102a565b73ffffffffffffffffffffffffffffffffffffffff16146109d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ce906139a2565b60405180910390fd5b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051610a1f906139f3565b60006040518083038185875af1925050503d8060008114610a5c576040519150601f19603f3d011682016040523d82523d6000602084013e610a61565b606091505b505090506000905050565b60145481565b6000600254905090565b600080610a87611a95565b9050610a94858285611c66565b610a9f858585611cf2565b60019150509392505050565b60006012905090565b600080610abf611a95565b9050610ae0818585610ad185896116a9565b610adb9190613a37565b611a9d565b600191505092915050565b601060009054906101000a900460ff1681565b610b06611a95565b73ffffffffffffffffffffffffffffffffffffffff16610b2461102a565b73ffffffffffffffffffffffffffffffffffffffff1614610b7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b71906139a2565b60405180910390fd5b6064811115610bbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb590613ab7565b60405180910390fd5b6000600a5414610c03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfa90613b23565b60405180910390fd5b6000811480610c125750600034115b610c51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4890613b8f565b60405180910390fd5b60006011819055506000606482610c66610a72565b610c709190613baf565b610c7a9190613c20565b9050600081610c87610a72565b610c919190613c51565b90506000821115610ca757610ca6823461294e565b5b6000811115610cc357610cc230610cbc61102a565b83611cf2565b5b6001601060016101000a81548160ff02191690831515021790555042600a8190555043600b81905550505050565b6000601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610d4f611a95565b73ffffffffffffffffffffffffffffffffffffffff16610d6d61102a565b73ffffffffffffffffffffffffffffffffffffffff1614610dc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dba906139a2565b60405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f5deb5ef622431f0df5a39b72dd556892f68ba42aa0f3aaf0800e166ce866492860405160405180910390a380600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ed3611a95565b73ffffffffffffffffffffffffffffffffffffffff16610ef161102a565b73ffffffffffffffffffffffffffffffffffffffff1614610f47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3e906139a2565b60405180910390fd5b610f516000612a33565b565b610f5b611a95565b73ffffffffffffffffffffffffffffffffffffffff16610f7961102a565b73ffffffffffffffffffffffffffffffffffffffff1614610fcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc6906139a2565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461106390613925565b80601f016020809104026020016040519081016040528092919081815260200182805461108f90613925565b80156110dc5780601f106110b1576101008083540402835291602001916110dc565b820191906000526020600020905b8154815290600101906020018083116110bf57829003601f168201915b5050505050905090565b6110ee611a95565b73ffffffffffffffffffffffffffffffffffffffff1661110c61102a565b73ffffffffffffffffffffffffffffffffffffffff1614611162576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611159906139a2565b60405180910390fd5b50565b61116d611a95565b73ffffffffffffffffffffffffffffffffffffffff1661118b61102a565b73ffffffffffffffffffffffffffffffffffffffff16146111e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d8906139a2565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611271576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126890613cf7565b60405180910390fd5b61127b8282612af9565b5050565b60008061128a611a95565b9050600061129882866116a9565b9050838110156112dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d490613d89565b60405180910390fd5b6112ea8286868403611a9d565b60019250505092915050565b600080611301611a95565b905061130e818585611cf2565b600191505092915050565b601060019054906101000a900460ff1681565b611334611a95565b73ffffffffffffffffffffffffffffffffffffffff1661135261102a565b73ffffffffffffffffffffffffffffffffffffffff16146113a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139f906139a2565b60405180910390fd5b81601581905550806016819055506016546015546113c69190613a37565b601481905550600a6014541115611412576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140990613df5565b60405180910390fd5b5050565b61141e611a95565b73ffffffffffffffffffffffffffffffffffffffff1661143c61102a565b73ffffffffffffffffffffffffffffffffffffffff1614611492576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611489906139a2565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161152f9190613539565b60405180910390a25050565b601360009054906101000a900460ff1681565b600d5481565b600061155e611a95565b73ffffffffffffffffffffffffffffffffffffffff1661157c61102a565b73ffffffffffffffffffffffffffffffffffffffff16146115d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c9906139a2565b60405180910390fd5b620186a060016115e0610a72565b6115ea9190613baf565b6115f49190613c20565b821015611636576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162d90613e87565b60405180910390fd5b6103e86005611643610a72565b61164d9190613baf565b6116579190613c20565b821115611699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169090613f19565b60405180910390fd5b81600e8190555060019050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611738611a95565b73ffffffffffffffffffffffffffffffffffffffff1661175661102a565b73ffffffffffffffffffffffffffffffffffffffff16146117ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a3906139a2565b60405180910390fd5b6117bd6117b830610e83565b612b9a565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051611805906139f3565b60006040518083038185875af1925050503d8060008114611842576040519150601f19603f3d011682016040523d82523d6000602084013e611847565b606091505b505090506000905050565b600e5481565b6000611862611a95565b73ffffffffffffffffffffffffffffffffffffffff1661188061102a565b73ffffffffffffffffffffffffffffffffffffffff16146118d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118cd906139a2565b60405180910390fd5b6000601360006101000a81548160ff0219169083151502179055506001905090565b6000611902611a95565b73ffffffffffffffffffffffffffffffffffffffff1661192061102a565b73ffffffffffffffffffffffffffffffffffffffff1614611976576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196d906139a2565b60405180910390fd5b6000601060006101000a81548160ff0219169083151502179055506001905090565b6119a0611a95565b73ffffffffffffffffffffffffffffffffffffffff166119be61102a565b73ffffffffffffffffffffffffffffffffffffffff1614611a14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0b906139a2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611a83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7a90613fab565b60405180910390fd5b611a8c81612a33565b50565b600f5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611b0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b039061403d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b72906140cf565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611c599190613590565b60405180910390a3505050565b6000611c7284846116a9565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611cec5781811015611cde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd59061413b565b60405180910390fd5b611ceb8484848403611a9d565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d58906141cd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611dd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc79061425f565b60405180910390fd5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611e5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5490614317565b60405180910390fd5b60008103611e7657611e7183836000612ddd565b612949565b601060019054906101000a900460ff1615611ede57601154600b54611e9b9190613a37565b431015611edd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed490614383565b60405180910390fd5b5b601060009054906101000a900460ff161561264657611efb61102a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611f695750611f3961102a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611fa25750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611fdc575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611ff55750600960009054906101000a900460ff16155b1561264557601060019054906101000a900460ff166120ef57601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806120af5750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6120ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e5906143ef565b60405180910390fd5b5b60006120fa83610e83565b14801561214657506000601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b156121905742601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b601360009054906101000a900460ff161561235c576121ad61102a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156122365750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122905750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561235b5743601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612316576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230d906144a7565b60405180910390fd5b43601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156123ff5750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156124a657600d54811115612449576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244090614539565b60405180910390fd5b600f5461245583610e83565b826124609190613a37565b11156124a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612498906145a5565b60405180910390fd5b612644565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125495750601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561259857600d54811115612593576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258a90614637565b60405180910390fd5b612643565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661264257600f546125f583610e83565b826126009190613a37565b1115612641576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612638906145a5565b60405180910390fd5b5b5b5b5b5b600061265130610e83565b90506000600e5482101590508080156126775750600960009054906101000a900460ff16155b80156126cd5750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156127235750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156127795750601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156127bd576001600960006101000a81548160ff0219169083151502179055506127a161305c565b6000600960006101000a81548160ff0219169083151502179055505b6000600960009054906101000a900460ff16159050601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806128735750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561287d57600090505b60008115612939576128ad606461289f6014548861325390919063ffffffff16565b61326990919063ffffffff16565b9050601454601654826128c09190613baf565b6128ca9190613c20565b601860008282546128db9190613a37565b92505081905550601454601554826128f39190613baf565b6128fd9190613c20565b6017600082825461290e9190613a37565b92505081905550600081111561292a57612929873083612ddd565b5b80856129369190613c51565b94505b612944878787612ddd565b505050505b505050565b61297b30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611a9d565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806129c761102a565b426040518863ffffffff1660e01b81526004016129e99695949392919061469c565b60606040518083038185885af1158015612a07573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612a2c9190614712565b5050505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600267ffffffffffffffff811115612bb757612bb6613702565b5b604051908082528060200260200182016040528015612be55781602001602082028036833780820191505090505b5090503081600081518110612bfd57612bfc614765565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ca4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cc891906147a9565b81600181518110612cdc57612cdb614765565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612d4330600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611a9d565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612da7959493929190614894565b600060405180830381600087803b158015612dc157600080fd5b505af1158015612dd5573d6000803e3d6000fd5b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612e4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e43906141cd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612ebb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eb29061425f565b60405180910390fd5b612ec683838361327f565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612f4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f4390614960565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612fdf9190613a37565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516130439190613590565b60405180910390a3613056848484613284565b50505050565b600061306730610e83565b9050600060175460185461307b9190613a37565b9050600082148061308c5750600081145b15613098575050613251565b600e548211156130a857600e5491505b6000600282601854856130bb9190613baf565b6130c59190613c20565b6130cf9190613c20565b905060006130e6828561328990919063ffffffff16565b905060004790506130f682612b9a565b600061310b824761328990919063ffffffff16565b90506000613136866131286017548561325390919063ffffffff16565b61326990919063ffffffff16565b9050600081836131469190613c51565b9050600060188190555060006017819055506000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16836040516131a0906139f3565b60006040518083038185875af1925050503d80600081146131dd576040519150601f19603f3d011682016040523d82523d6000602084013e6131e2565b606091505b50509050600090506000871180156131fa5750600082115b1561324757613209878361329f565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561868360185460405161323e93929190614980565b60405180910390a15b5050505050505050505b565b600081836132619190613baf565b905092915050565b600081836132779190613c20565b905092915050565b505050565b505050565b600081836132979190613c51565b905092915050565b6132cc30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611a9d565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061331861102a565b426040518863ffffffff1660e01b815260040161333a9695949392919061469c565b60606040518083038185885af1158015613358573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061337d9190614712565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156133be5780820151818401526020810190506133a3565b60008484015250505050565b6000601f19601f8301169050919050565b60006133e682613384565b6133f0818561338f565b93506134008185602086016133a0565b613409816133ca565b840191505092915050565b6000602082019050818103600083015261342e81846133db565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006134758261344a565b9050919050565b6134858161346a565b811461349057600080fd5b50565b6000813590506134a28161347c565b92915050565b6000819050919050565b6134bb816134a8565b81146134c657600080fd5b50565b6000813590506134d8816134b2565b92915050565b600080604083850312156134f5576134f4613440565b5b600061350385828601613493565b9250506020613514858286016134c9565b9150509250929050565b60008115159050919050565b6135338161351e565b82525050565b600060208201905061354e600083018461352a565b92915050565b60006020828403121561356a57613569613440565b5b600061357884828501613493565b91505092915050565b61358a816134a8565b82525050565b60006020820190506135a56000830184613581565b92915050565b6000806000606084860312156135c4576135c3613440565b5b60006135d286828701613493565b93505060206135e386828701613493565b92505060406135f4868287016134c9565b9150509250925092565b600060ff82169050919050565b613614816135fe565b82525050565b600060208201905061362f600083018461360b565b92915050565b60006020828403121561364b5761364a613440565b5b6000613659848285016134c9565b91505092915050565b61366b8161351e565b811461367657600080fd5b50565b60008135905061368881613662565b92915050565b600080604083850312156136a5576136a4613440565b5b60006136b385828601613493565b92505060206136c485828601613679565b9150509250929050565b6136d78161346a565b82525050565b60006020820190506136f260008301846136ce565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61373a826133ca565b810181811067ffffffffffffffff8211171561375957613758613702565b5b80604052505050565b600061376c613436565b90506137788282613731565b919050565b600067ffffffffffffffff82111561379857613797613702565b5b6137a1826133ca565b9050602081019050919050565b82818337600083830152505050565b60006137d06137cb8461377d565b613762565b9050828152602081018484840111156137ec576137eb6136fd565b5b6137f78482856137ae565b509392505050565b600082601f830112613814576138136136f8565b5b81356138248482602086016137bd565b91505092915050565b60006020828403121561384357613842613440565b5b600082013567ffffffffffffffff81111561386157613860613445565b5b61386d848285016137ff565b91505092915050565b6000806040838503121561388d5761388c613440565b5b600061389b858286016134c9565b92505060206138ac858286016134c9565b9150509250929050565b600080604083850312156138cd576138cc613440565b5b60006138db85828601613493565b92505060206138ec85828601613493565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061393d57607f821691505b6020821081036139505761394f6138f6565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061398c60208361338f565b915061399782613956565b602082019050919050565b600060208201905081810360008301526139bb8161397f565b9050919050565b600081905092915050565b50565b60006139dd6000836139c2565b91506139e8826139cd565b600082019050919050565b60006139fe826139d0565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613a42826134a8565b9150613a4d836134a8565b9250828201905080821115613a6557613a64613a08565b5b92915050565b7f6d757374206265206265747765656e20302d3130302500000000000000000000600082015250565b6000613aa160168361338f565b9150613aac82613a6b565b602082019050919050565b60006020820190508181036000830152613ad081613a94565b9050919050565b7f616c7265616479206c61756e6368656400000000000000000000000000000000600082015250565b6000613b0d60108361338f565b9150613b1882613ad7565b602082019050919050565b60006020820190508181036000830152613b3c81613b00565b9050919050565b7f6e6565642045544820666f7220696e697469616c204c50000000000000000000600082015250565b6000613b7960178361338f565b9150613b8482613b43565b602082019050919050565b60006020820190508181036000830152613ba881613b6c565b9050919050565b6000613bba826134a8565b9150613bc5836134a8565b9250828202613bd3816134a8565b91508282048414831517613bea57613be9613a08565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613c2b826134a8565b9150613c36836134a8565b925082613c4657613c45613bf1565b5b828204905092915050565b6000613c5c826134a8565b9150613c67836134a8565b9250828203905081811115613c7f57613c7e613a08565b5b92915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613ce160398361338f565b9150613cec82613c85565b604082019050919050565b60006020820190508181036000830152613d1081613cd4565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613d7360258361338f565b9150613d7e82613d17565b604082019050919050565b60006020820190508181036000830152613da281613d66565b9050919050565b7f4d757374206b656570206665657320617420313025206f72206c657373000000600082015250565b6000613ddf601d8361338f565b9150613dea82613da9565b602082019050919050565b60006020820190508181036000830152613e0e81613dd2565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000613e7160358361338f565b9150613e7c82613e15565b604082019050919050565b60006020820190508181036000830152613ea081613e64565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000613f0360348361338f565b9150613f0e82613ea7565b604082019050919050565b60006020820190508181036000830152613f3281613ef6565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613f9560268361338f565b9150613fa082613f39565b604082019050919050565b60006020820190508181036000830152613fc481613f88565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061402760248361338f565b915061403282613fcb565b604082019050919050565b600060208201905081810360008301526140568161401a565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006140b960228361338f565b91506140c48261405d565b604082019050919050565b600060208201905081810360008301526140e8816140ac565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000614125601d8361338f565b9150614130826140ef565b602082019050919050565b6000602082019050818103600083015261415481614118565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006141b760258361338f565b91506141c28261415b565b604082019050919050565b600060208201905081810360008301526141e6816141aa565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061424960238361338f565b9150614254826141ed565b604082019050919050565b600060208201905081810360008301526142788161423c565b9050919050565b7f596f7572206164647265737320686173206265656e206d61726b65642061732060008201527f6120736e697065722c20796f752061726520756e61626c6520746f207472616e60208201527f73666572206f7220737761702e00000000000000000000000000000000000000604082015250565b6000614301604d8361338f565b915061430c8261427f565b606082019050919050565b60006020820190508181036000830152614330816142f4565b9050919050565b7f4e4f5420424f5400000000000000000000000000000000000000000000000000600082015250565b600061436d60078361338f565b915061437882614337565b602082019050919050565b6000602082019050818103600083015261439c81614360565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006143d960168361338f565b91506143e4826143a3565b602082019050919050565b60006020820190508181036000830152614408816143cc565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b600061449160498361338f565b915061449c8261440f565b606082019050919050565b600060208201905081810360008301526144c081614484565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061452360358361338f565b915061452e826144c7565b604082019050919050565b6000602082019050818103600083015261455281614516565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061458f60138361338f565b915061459a82614559565b602082019050919050565b600060208201905081810360008301526145be81614582565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061462160368361338f565b915061462c826145c5565b604082019050919050565b6000602082019050818103600083015261465081614614565b9050919050565b6000819050919050565b6000819050919050565b600061468661468161467c84614657565b614661565b6134a8565b9050919050565b6146968161466b565b82525050565b600060c0820190506146b160008301896136ce565b6146be6020830188613581565b6146cb604083018761468d565b6146d8606083018661468d565b6146e560808301856136ce565b6146f260a0830184613581565b979650505050505050565b60008151905061470c816134b2565b92915050565b60008060006060848603121561472b5761472a613440565b5b6000614739868287016146fd565b935050602061474a868287016146fd565b925050604061475b868287016146fd565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506147a38161347c565b92915050565b6000602082840312156147bf576147be613440565b5b60006147cd84828501614794565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61480b8161346a565b82525050565b600061481d8383614802565b60208301905092915050565b6000602082019050919050565b6000614841826147d6565b61484b81856147e1565b9350614856836147f2565b8060005b8381101561488757815161486e8882614811565b975061487983614829565b92505060018101905061485a565b5085935050505092915050565b600060a0820190506148a96000830188613581565b6148b6602083018761468d565b81810360408301526148c88186614836565b90506148d760608301856136ce565b6148e46080830184613581565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061494a60268361338f565b9150614955826148ee565b604082019050919050565b600060208201905081810360008301526149798161493d565b9050919050565b60006060820190506149956000830186613581565b6149a26020830185613581565b6149af6040830184613581565b94935050505056fea2646970667358221220540ad745628330c1d7cc51a40becd3b59c152ae233a09cbd15c4efdb0dc882a564736f6c63430008110033

Deployed Bytecode Sourcemap

18220:12327:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1656:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2588:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24209:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30346:161;;;;;;;;;;;;;:::i;:::-;;18925:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1977:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2797:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1876:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3100:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18695:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21072:704;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24075:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23910:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2093:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6995:103;;;;;;;;;;;;;:::i;:::-;;22821:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6772:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1764:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30044:71;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23462:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3346:424;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2228:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18735:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22973:289;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23270:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18877:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18580:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22426:387;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2429:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30121:217;;;;;;;;;;;;;:::i;:::-;;18622:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22283:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22148:127;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7106:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18662:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1656:100;1710:13;1743:5;1736:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1656:100;:::o;2588:201::-;2671:4;2688:13;2704:12;:10;:12::i;:::-;2688:28;;2727:32;2736:5;2743:7;2752:6;2727:8;:32::i;:::-;2777:4;2770:11;;;2588:201;;;;:::o;24209:105::-;24262:4;24286:14;:20;24301:4;24286:20;;;;;;;;;;;;;;;;;;;;;;;;;24279:27;;24209:105;;;:::o;30346:161::-;6918:12;:10;:12::i;:::-;6907:23;;:7;:5;:7::i;:::-;:23;;;6899:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30398:12:::1;30423:9;;;;;;;;;;;30415:23;;30447:21;30415:58;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30397:76;;;30494:5;30484:15;;30386:121;30346:161::o:0;18925:24::-;;;;:::o;1977:108::-;2038:7;2065:12;;2058:19;;1977:108;:::o;2797:295::-;2928:4;2945:15;2963:12;:10;:12::i;:::-;2945:30;;2986:38;3002:4;3008:7;3017:6;2986:15;:38::i;:::-;3035:27;3045:4;3051:2;3055:6;3035:9;:27::i;:::-;3080:4;3073:11;;;2797:295;;;;;:::o;1876:93::-;1934:5;1959:2;1952:9;;1876:93;:::o;3100:238::-;3188:4;3205:13;3221:12;:10;:12::i;:::-;3205:28;;3244:64;3253:5;3260:7;3297:10;3269:25;3279:5;3286:7;3269:9;:25::i;:::-;:38;;;;:::i;:::-;3244:8;:64::i;:::-;3326:4;3319:11;;;3100:238;;;;:::o;18695:33::-;;;;;;;;;;;;;:::o;21072:704::-;6918:12;:10;:12::i;:::-;6907:23;;:7;:5;:7::i;:::-;:23;;;6899:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21168:3:::1;21156:8;:15;;21148:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;21232:1;21217:11;;:16;21209:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;21285:1;21273:8;:13;:30;;;;21302:1;21290:9;:13;21273:30;21265:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;21355:1;21342:10;:14;;;;21367:17;21416:3;21404:8;21388:13;:11;:13::i;:::-;:24;;;;:::i;:::-;21387:32;;;;:::i;:::-;21367:52;;21430:17;21466:9;21450:13;:11;:13::i;:::-;:25;;;;:::i;:::-;21430:45;;21502:1;21490:9;:13;21486:74;;;21520:28;21527:9;21538;21520:6;:28::i;:::-;21486:74;21586:1;21574:9;:13;21570:90;;;21604:44;21622:4;21629:7;:5;:7::i;:::-;21638:9;21604;:44::i;:::-;21570:90;21686:4;21670:13;;:20;;;;;;;;;;;;;;;;;;21715:15;21701:11;:29;;;;21756:12;21741;:27;;;;21137:639;;21072:704:::0;:::o;24075:126::-;24141:4;24165:19;:28;24185:7;24165:28;;;;;;;;;;;;;;;;;;;;;;;;;24158:35;;24075:126;;;:::o;23910:157::-;6918:12;:10;:12::i;:::-;6907:23;;:7;:5;:7::i;:::-;:23;;;6899:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24017:9:::1;;;;;;;;;;;23989:38;;24006:9;23989:38;;;;;;;;;;;;24050:9;24038;;:21;;;;;;;;;;;;;;;;;;23910:157:::0;:::o;2093:127::-;2167:7;2194:9;:18;2204:7;2194:18;;;;;;;;;;;;;;;;2187:25;;2093:127;;;:::o;6995:103::-;6918:12;:10;:12::i;:::-;6907:23;;:7;:5;:7::i;:::-;:23;;;6899:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7060:30:::1;7087:1;7060:18;:30::i;:::-;6995:103::o:0;22821:144::-;6918:12;:10;:12::i;:::-;6907:23;;:7;:5;:7::i;:::-;:23;;;6899:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22953:4:::1;22911:31;:39;22943:6;22911:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;22821:144:::0;;:::o;6772:87::-;6818:7;6845:6;;;;;;;;;;;6838:13;;6772:87;:::o;1764:104::-;1820:13;1853:7;1846:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1764:104;:::o;30044:71::-;6918:12;:10;:12::i;:::-;6907:23;;:7;:5;:7::i;:::-;:23;;;6899:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30044:71;:::o;23462:244::-;6918:12;:10;:12::i;:::-;6907:23;;:7;:5;:7::i;:::-;:23;;;6899:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23569:13:::1;;;;;;;;;;;23561:21;;:4;:21;;::::0;23553:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;23657:41;23686:4;23692:5;23657:28;:41::i;:::-;23462:244:::0;;:::o;3346:424::-;3439:4;3456:13;3472:12;:10;:12::i;:::-;3456:28;;3495:24;3522:25;3532:5;3539:7;3522:9;:25::i;:::-;3495:52;;3586:15;3566:16;:35;;3558:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;3671:60;3680:5;3687:7;3715:15;3696:16;:34;3671:8;:60::i;:::-;3758:4;3751:11;;;;3346:424;;;;:::o;2228:193::-;2307:4;2324:13;2340:12;:10;:12::i;:::-;2324:28;;2363;2373:5;2380:2;2384:6;2363:9;:28::i;:::-;2409:4;2402:11;;;2228:193;;;;:::o;18735:33::-;;;;;;;;;;;;;:::o;22973:289::-;6918:12;:10;:12::i;:::-;6907:23;;:7;:5;:7::i;:::-;:23;;;6899:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23083:12:::1;23067:13;:28;;;;23122:12;23106:13;:28;;;;23173:13;;23157;;:29;;;;:::i;:::-;23145:9;:41;;;;23218:2;23205:9;;:15;;23197:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;22973:289:::0;;:::o;23270:182::-;6918:12;:10;:12::i;:::-;6907:23;;:7;:5;:7::i;:::-;:23;;;6899:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23386:8:::1;23355:19;:28;23375:7;23355:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;23426:7;23410:34;;;23435:8;23410:34;;;;;;:::i;:::-;;;;;;;;23270:182:::0;;:::o;18877:39::-;;;;;;;;;;;;;:::o;18580:35::-;;;;:::o;22426:387::-;22507:4;6918:12;:10;:12::i;:::-;6907:23;;:7;:5;:7::i;:::-;:23;;;6899:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22565:6:::1;22561:1;22545:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;22532:9;:39;;22524:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;22681:4;22677:1;22661:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;22648:9;:37;;22640:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;22774:9;22753:18;:30;;;;22801:4;22794:11;;22426:387:::0;;;:::o;2429:151::-;2518:7;2545:11;:18;2557:5;2545:18;;;;;;;;;;;;;;;:27;2564:7;2545:27;;;;;;;;;;;;;;;;2538:34;;2429:151;;;;:::o;30121:217::-;6918:12;:10;:12::i;:::-;6907:23;;:7;:5;:7::i;:::-;:23;;;6899:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30172:43:::1;30190:24;30208:4;30190:9;:24::i;:::-;30172:17;:43::i;:::-;30229:12;30254:9;;;;;;;;;;;30246:23;;30278:21;30246:58;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30228:76;;;30325:5;30315:15;;30161:177;30121:217::o:0;18622:33::-;;;;:::o;22283:135::-;22343:4;6918:12;:10;:12::i;:::-;6907:23;;:7;:5;:7::i;:::-;:23;;;6899:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22383:5:::1;22360:20;;:28;;;;;;;;;;;;;;;;;;22406:4;22399:11;;22283:135:::0;:::o;22148:127::-;22206:4;6918:12;:10;:12::i;:::-;6907:23;;:7;:5;:7::i;:::-;:23;;;6899:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22240:5:::1;22223:14;;:22;;;;;;;;;;;;;;;;;;22263:4;22256:11;;22148:127:::0;:::o;7106:201::-;6918:12;:10;:12::i;:::-;6907:23;;:7;:5;:7::i;:::-;:23;;;6899:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7215:1:::1;7195:22;;:8;:22;;::::0;7187:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;7271:28;7290:8;7271:18;:28::i;:::-;7106:201:::0;:::o;18662:24::-;;;;:::o;1034:98::-;1087:7;1114:10;1107:17;;1034:98;:::o;5439:380::-;5592:1;5575:19;;:5;:19;;;5567:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5673:1;5654:21;;:7;:21;;;5646:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5757:6;5727:11;:18;5739:5;5727:18;;;;;;;;;;;;;;;:27;5746:7;5727:27;;;;;;;;;;;;;;;:36;;;;5795:7;5779:32;;5788:5;5779:32;;;5804:6;5779:32;;;;;;:::i;:::-;;;;;;;;5439:380;;;:::o;5827:433::-;5962:24;5989:25;5999:5;6006:7;5989:9;:25::i;:::-;5962:52;;6049:17;6029:16;:37;6025:228;;6107:6;6087:16;:26;;6079:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6179:51;6188:5;6195:7;6223:6;6204:16;:25;6179:8;:51::i;:::-;6025:228;5951:309;5827:433;;;:::o;24322:3504::-;24470:1;24454:18;;:4;:18;;;24446:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24547:1;24533:16;;:2;:16;;;24525:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;24609:14;:20;24624:4;24609:20;;;;;;;;;;;;;;;;;;;;;;;;;24608:21;24600:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;24736:1;24726:6;:11;24722:93;;24754:28;24770:4;24776:2;24780:1;24754:15;:28::i;:::-;24797:7;;24722:93;24828:13;;;;;;;;;;;24825:106;;;24897:10;;24882:12;;:25;;;;:::i;:::-;24866:12;:41;;24858:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;24825:106;24945:14;;;;;;;;;;;24941:1845;;;25006:7;:5;:7::i;:::-;24998:15;;:4;:15;;;;:49;;;;;25040:7;:5;:7::i;:::-;25034:13;;:2;:13;;;;24998:49;:86;;;;;25082:1;25068:16;;:2;:16;;;;24998:86;:128;;;;;25119:6;25105:21;;:2;:21;;;;24998:128;:159;;;;;25148:9;;;;;;;;;;;25147:10;24998:159;24976:1799;;;25197:13;;;;;;;;;;;25192:150;;25243:19;:25;25263:4;25243:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;25272:19;:23;25292:2;25272:23;;;;;;;;;;;;;;;;;;;;;;;;;25243:52;25235:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;25192:150;25383:1;25366:13;25376:2;25366:9;:13::i;:::-;:18;:55;;;;;25420:1;25388:24;:28;25413:2;25388:28;;;;;;;;;;;;;;;;:33;25366:55;25362:150;;;25477:15;25446:24;:28;25471:2;25446:28;;;;;;;;;;;;;;;:46;;;;25362:150;25537:20;;;;;;;;;;;25533:425;;;25592:7;:5;:7::i;:::-;25586:13;;:2;:13;;;;:47;;;;;25617:15;;;;;;;;;;;25603:30;;:2;:30;;;;25586:47;:79;;;;;25651:13;;;;;;;;;;;25637:28;;:2;:28;;;;25586:79;25582:357;;;25744:12;25702:28;:39;25731:9;25702:39;;;;;;;;;;;;;;;;:54;25694:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;25903:12;25861:28;:39;25890:9;25861:39;;;;;;;;;;;;;;;:54;;;;25582:357;25533:425;26011:25;:31;26037:4;26011:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;26047:31;:35;26079:2;26047:35;;;;;;;;;;;;;;;;;;;;;;;;;26046:36;26011:71;26007:753;;;26125:20;;26115:6;:30;;26107:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;26260:9;;26243:13;26253:2;26243:9;:13::i;:::-;26234:6;:22;;;;:::i;:::-;:35;;26226:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26007:753;;;26372:25;:29;26398:2;26372:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;26406:31;:37;26438:4;26406:37;;;;;;;;;;;;;;;;;;;;;;;;;26405:38;26372:71;26368:392;;;26486:20;;26476:6;:30;;26468:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;26368:392;;;26613:31;:35;26645:2;26613:35;;;;;;;;;;;;;;;;;;;;;;;;;26608:152;;26707:9;;26690:13;26700:2;26690:9;:13::i;:::-;26681:6;:22;;;;:::i;:::-;:35;;26673:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26608:152;26368:392;26007:753;24976:1799;24941:1845;26798:28;26829:24;26847:4;26829:9;:24::i;:::-;26798:55;;26864:12;26903:18;;26879:20;:42;;26864:57;;26950:7;:34;;;;;26975:9;;;;;;;;;;;26974:10;26950:34;:83;;;;;27002:25;:31;27028:4;27002:31;;;;;;;;;;;;;;;;;;;;;;;;;27001:32;26950:83;:126;;;;;27051:19;:25;27071:4;27051:25;;;;;;;;;;;;;;;;;;;;;;;;;27050:26;26950:126;:167;;;;;27094:19;:23;27114:2;27094:23;;;;;;;;;;;;;;;;;;;;;;;;;27093:24;26950:167;26932:297;;;27156:4;27144:9;;:16;;;;;;;;;;;;;;;;;;27175:10;:8;:10::i;:::-;27212:5;27200:9;;:17;;;;;;;;;;;;;;;;;;26932:297;27241:12;27257:9;;;;;;;;;;;27256:10;27241:25;;27283:19;:25;27303:4;27283:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;27312:19;:23;27332:2;27312:23;;;;;;;;;;;;;;;;;;;;;;;;;27283:52;27279:100;;;27362:5;27352:15;;27279:100;27391:12;27422:7;27418:353;;;27453:30;27479:3;27453:21;27464:9;;27453:6;:10;;:21;;;;:::i;:::-;:25;;:30;;;;:::i;:::-;27446:37;;27544:9;;27528:13;;27521:4;:20;;;;:::i;:::-;:32;;;;:::i;:::-;27498:19;;:55;;;;;;;:::i;:::-;;;;;;;;27614:9;;27598:13;;27591:4;:20;;;;:::i;:::-;:32;;;;:::i;:::-;27568:19;;:55;;;;;;;:::i;:::-;;;;;;;;27649:1;27642:4;:8;27638:91;;;27671:42;27687:4;27701;27708;27671:15;:42::i;:::-;27638:91;27755:4;27745:14;;;;;:::i;:::-;;;27418:353;27783:33;27799:4;27805:2;27809:6;27783:15;:33::i;:::-;24435:3391;;;;24322:3504;;;;:::o;21784:356::-;21859:62;21876:4;21891:15;;;;;;;;;;;21909:11;21859:8;:62::i;:::-;21932:15;;;;;;;;;;;:31;;;21972:9;22006:4;22026:11;22052:1;22068;22084:7;:5;:7::i;:::-;22106:15;21932:200;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;21784:356;;:::o;7315:191::-;7389:16;7408:6;;;;;;;;;;;7389:25;;7434:8;7425:6;;:17;;;;;;;;;;;;;;;;;;7489:8;7458:40;;7479:8;7458:40;;;;;;;;;;;;7378:128;7315:191;:::o;23714:188::-;23831:5;23797:25;:31;23823:4;23797:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;23888:5;23854:40;;23882:4;23854:40;;;;;;;;;;;;23714:188;;:::o;27834:476::-;27901:21;27939:1;27925:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27901:40;;27970:4;27952;27957:1;27952:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;27996:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27986:4;27991:1;27986:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;28031:62;28048:4;28063:15;;;;;;;;;;;28081:11;28031:8;:62::i;:::-;28106:15;;;;;;;;;;;:66;;;28187:11;28213:1;28229:4;28256;28276:15;28106:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27890:420;27834:476;:::o;3778:659::-;3925:1;3909:18;;:4;:18;;;3901:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4002:1;3988:16;;:2;:16;;;3980:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;4057:38;4078:4;4084:2;4088:6;4057:20;:38::i;:::-;4108:19;4130:9;:15;4140:4;4130:15;;;;;;;;;;;;;;;;4108:37;;4179:6;4164:11;:21;;4156:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;4288:6;4274:11;:20;4256:9;:15;4266:4;4256:15;;;;;;;;;;;;;;;:38;;;;4329:6;4312:9;:13;4322:2;4312:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;4368:2;4353:26;;4362:4;4353:26;;;4372:6;4353:26;;;;;;:::i;:::-;;;;;;;;4392:37;4412:4;4418:2;4422:6;4392:19;:37::i;:::-;3890:547;3778:659;;;:::o;28744:1294::-;28783:23;28809:24;28827:4;28809:9;:24::i;:::-;28783:50;;28844:25;28894:19;;28872;;:41;;;;:::i;:::-;28844:69;;28949:1;28930:15;:20;:46;;;;28975:1;28954:17;:22;28930:46;28926:59;;;28978:7;;;;28926:59;29017:18;;28999:15;:36;28995:105;;;29070:18;;29052:36;;28995:105;29110:23;29196:1;29176:17;29154:19;;29136:15;:37;;;;:::i;:::-;:57;;;;:::i;:::-;:61;;;;:::i;:::-;29110:87;;29208:26;29237:36;29257:15;29237;:19;;:36;;;;:::i;:::-;29208:65;;29286:25;29314:21;29286:49;;29348:37;29366:18;29348:17;:37::i;:::-;29398:18;29419:44;29445:17;29419:21;:25;;:44;;;;:::i;:::-;29398:65;;29474:23;29500:58;29540:17;29500:35;29515:19;;29500:10;:14;;:35;;;;:::i;:::-;:39;;:58;;;;:::i;:::-;29474:84;;29569:23;29608:15;29595:10;:28;;;;:::i;:::-;29569:54;;29660:1;29638:19;:23;;;;29694:1;29672:19;:23;;;;29709:12;29734:9;;;;;;;;;;;29726:23;;29758:15;29726:52;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29708:70;;;29799:5;29789:15;;29839:1;29821:15;:19;:42;;;;;29862:1;29844:15;:19;29821:42;29817:214;;;29880:47;29894:15;29911;29880:13;:47::i;:::-;29947:72;29962:18;29982:15;29999:19;;29947:72;;;;;;;;:::i;:::-;;;;;;;;29817:214;28772:1266;;;;;;;;;28744:1294;:::o;8775:98::-;8833:7;8864:1;8860;:5;;;;:::i;:::-;8853:12;;8775:98;;;;:::o;8881:::-;8939:7;8970:1;8966;:5;;;;:::i;:::-;8959:12;;8881:98;;;;:::o;6268:125::-;;;;:::o;6401:124::-;;;;:::o;8669:98::-;8727:7;8758:1;8754;:5;;;;:::i;:::-;8747:12;;8669:98;;;;:::o;28318:418::-;28400:62;28417:4;28432:15;;;;;;;;;;;28450:11;28400:8;:62::i;:::-;28475:15;;;;;;;;;;;:31;;;28515:9;28548:4;28568:11;28594:1;28637;28680:7;:5;:7::i;:::-;28702:15;28475:253;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;28318:418;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1349:75::-;1382:6;1415:2;1409:9;1399:19;;1349:75;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:118::-;3868:24;3886:5;3868:24;:::i;:::-;3863:3;3856:37;3781:118;;:::o;3905:222::-;3998:4;4036:2;4025:9;4021:18;4013:26;;4049:71;4117:1;4106:9;4102:17;4093:6;4049:71;:::i;:::-;3905:222;;;;:::o;4133:619::-;4210:6;4218;4226;4275:2;4263:9;4254:7;4250:23;4246:32;4243:119;;;4281:79;;:::i;:::-;4243:119;4401:1;4426:53;4471:7;4462:6;4451:9;4447:22;4426:53;:::i;:::-;4416:63;;4372:117;4528:2;4554:53;4599:7;4590:6;4579:9;4575:22;4554:53;:::i;:::-;4544:63;;4499:118;4656:2;4682:53;4727:7;4718:6;4707:9;4703:22;4682:53;:::i;:::-;4672:63;;4627:118;4133:619;;;;;:::o;4758:86::-;4793:7;4833:4;4826:5;4822:16;4811:27;;4758:86;;;:::o;4850:112::-;4933:22;4949:5;4933:22;:::i;:::-;4928:3;4921:35;4850:112;;:::o;4968:214::-;5057:4;5095:2;5084:9;5080:18;5072:26;;5108:67;5172:1;5161:9;5157:17;5148:6;5108:67;:::i;:::-;4968:214;;;;:::o;5188:329::-;5247:6;5296:2;5284:9;5275:7;5271:23;5267:32;5264:119;;;5302:79;;:::i;:::-;5264:119;5422:1;5447:53;5492:7;5483:6;5472:9;5468:22;5447:53;:::i;:::-;5437:63;;5393:117;5188:329;;;;:::o;5523:116::-;5593:21;5608:5;5593:21;:::i;:::-;5586:5;5583:32;5573:60;;5629:1;5626;5619:12;5573:60;5523:116;:::o;5645:133::-;5688:5;5726:6;5713:20;5704:29;;5742:30;5766:5;5742:30;:::i;:::-;5645:133;;;;:::o;5784:468::-;5849:6;5857;5906:2;5894:9;5885:7;5881:23;5877:32;5874:119;;;5912:79;;:::i;:::-;5874:119;6032:1;6057:53;6102:7;6093:6;6082:9;6078:22;6057:53;:::i;:::-;6047:63;;6003:117;6159:2;6185:50;6227:7;6218:6;6207:9;6203:22;6185:50;:::i;:::-;6175:60;;6130:115;5784:468;;;;;:::o;6258:118::-;6345:24;6363:5;6345:24;:::i;:::-;6340:3;6333:37;6258:118;;:::o;6382:222::-;6475:4;6513:2;6502:9;6498:18;6490:26;;6526:71;6594:1;6583:9;6579:17;6570:6;6526:71;:::i;:::-;6382:222;;;;:::o;6610:117::-;6719:1;6716;6709:12;6733:117;6842:1;6839;6832:12;6856:180;6904:77;6901:1;6894:88;7001:4;6998:1;6991:15;7025:4;7022:1;7015:15;7042:281;7125:27;7147:4;7125:27;:::i;:::-;7117:6;7113:40;7255:6;7243:10;7240:22;7219:18;7207:10;7204:34;7201:62;7198:88;;;7266:18;;:::i;:::-;7198:88;7306:10;7302:2;7295:22;7085:238;7042:281;;:::o;7329:129::-;7363:6;7390:20;;:::i;:::-;7380:30;;7419:33;7447:4;7439:6;7419:33;:::i;:::-;7329:129;;;:::o;7464:308::-;7526:4;7616:18;7608:6;7605:30;7602:56;;;7638:18;;:::i;:::-;7602:56;7676:29;7698:6;7676:29;:::i;:::-;7668:37;;7760:4;7754;7750:15;7742:23;;7464:308;;;:::o;7778:146::-;7875:6;7870:3;7865;7852:30;7916:1;7907:6;7902:3;7898:16;7891:27;7778:146;;;:::o;7930:425::-;8008:5;8033:66;8049:49;8091:6;8049:49;:::i;:::-;8033:66;:::i;:::-;8024:75;;8122:6;8115:5;8108:21;8160:4;8153:5;8149:16;8198:3;8189:6;8184:3;8180:16;8177:25;8174:112;;;8205:79;;:::i;:::-;8174:112;8295:54;8342:6;8337:3;8332;8295:54;:::i;:::-;8014:341;7930:425;;;;;:::o;8375:340::-;8431:5;8480:3;8473:4;8465:6;8461:17;8457:27;8447:122;;8488:79;;:::i;:::-;8447:122;8605:6;8592:20;8630:79;8705:3;8697:6;8690:4;8682:6;8678:17;8630:79;:::i;:::-;8621:88;;8437:278;8375:340;;;;:::o;8721:509::-;8790:6;8839:2;8827:9;8818:7;8814:23;8810:32;8807:119;;;8845:79;;:::i;:::-;8807:119;8993:1;8982:9;8978:17;8965:31;9023:18;9015:6;9012:30;9009:117;;;9045:79;;:::i;:::-;9009:117;9150:63;9205:7;9196:6;9185:9;9181:22;9150:63;:::i;:::-;9140:73;;8936:287;8721:509;;;;:::o;9236:474::-;9304:6;9312;9361:2;9349:9;9340:7;9336:23;9332:32;9329:119;;;9367:79;;:::i;:::-;9329:119;9487:1;9512:53;9557:7;9548:6;9537:9;9533:22;9512:53;:::i;:::-;9502:63;;9458:117;9614:2;9640:53;9685:7;9676:6;9665:9;9661:22;9640:53;:::i;:::-;9630:63;;9585:118;9236:474;;;;;:::o;9716:::-;9784:6;9792;9841:2;9829:9;9820:7;9816:23;9812:32;9809:119;;;9847:79;;:::i;:::-;9809:119;9967:1;9992:53;10037:7;10028:6;10017:9;10013:22;9992:53;:::i;:::-;9982:63;;9938:117;10094:2;10120:53;10165:7;10156:6;10145:9;10141:22;10120:53;:::i;:::-;10110:63;;10065:118;9716:474;;;;;:::o;10196:180::-;10244:77;10241:1;10234:88;10341:4;10338:1;10331:15;10365:4;10362:1;10355:15;10382:320;10426:6;10463:1;10457:4;10453:12;10443:22;;10510:1;10504:4;10500:12;10531:18;10521:81;;10587:4;10579:6;10575:17;10565:27;;10521:81;10649:2;10641:6;10638:14;10618:18;10615:38;10612:84;;10668:18;;:::i;:::-;10612:84;10433:269;10382:320;;;:::o;10708:182::-;10848:34;10844:1;10836:6;10832:14;10825:58;10708:182;:::o;10896:366::-;11038:3;11059:67;11123:2;11118:3;11059:67;:::i;:::-;11052:74;;11135:93;11224:3;11135:93;:::i;:::-;11253:2;11248:3;11244:12;11237:19;;10896:366;;;:::o;11268:419::-;11434:4;11472:2;11461:9;11457:18;11449:26;;11521:9;11515:4;11511:20;11507:1;11496:9;11492:17;11485:47;11549:131;11675:4;11549:131;:::i;:::-;11541:139;;11268:419;;;:::o;11693:147::-;11794:11;11831:3;11816:18;;11693:147;;;;:::o;11846:114::-;;:::o;11966:398::-;12125:3;12146:83;12227:1;12222:3;12146:83;:::i;:::-;12139:90;;12238:93;12327:3;12238:93;:::i;:::-;12356:1;12351:3;12347:11;12340:18;;11966:398;;;:::o;12370:379::-;12554:3;12576:147;12719:3;12576:147;:::i;:::-;12569:154;;12740:3;12733:10;;12370:379;;;:::o;12755:180::-;12803:77;12800:1;12793:88;12900:4;12897:1;12890:15;12924:4;12921:1;12914:15;12941:191;12981:3;13000:20;13018:1;13000:20;:::i;:::-;12995:25;;13034:20;13052:1;13034:20;:::i;:::-;13029:25;;13077:1;13074;13070:9;13063:16;;13098:3;13095:1;13092:10;13089:36;;;13105:18;;:::i;:::-;13089:36;12941:191;;;;:::o;13138:172::-;13278:24;13274:1;13266:6;13262:14;13255:48;13138:172;:::o;13316:366::-;13458:3;13479:67;13543:2;13538:3;13479:67;:::i;:::-;13472:74;;13555:93;13644:3;13555:93;:::i;:::-;13673:2;13668:3;13664:12;13657:19;;13316:366;;;:::o;13688:419::-;13854:4;13892:2;13881:9;13877:18;13869:26;;13941:9;13935:4;13931:20;13927:1;13916:9;13912:17;13905:47;13969:131;14095:4;13969:131;:::i;:::-;13961:139;;13688:419;;;:::o;14113:166::-;14253:18;14249:1;14241:6;14237:14;14230:42;14113:166;:::o;14285:366::-;14427:3;14448:67;14512:2;14507:3;14448:67;:::i;:::-;14441:74;;14524:93;14613:3;14524:93;:::i;:::-;14642:2;14637:3;14633:12;14626:19;;14285:366;;;:::o;14657:419::-;14823:4;14861:2;14850:9;14846:18;14838:26;;14910:9;14904:4;14900:20;14896:1;14885:9;14881:17;14874:47;14938:131;15064:4;14938:131;:::i;:::-;14930:139;;14657:419;;;:::o;15082:173::-;15222:25;15218:1;15210:6;15206:14;15199:49;15082:173;:::o;15261:366::-;15403:3;15424:67;15488:2;15483:3;15424:67;:::i;:::-;15417:74;;15500:93;15589:3;15500:93;:::i;:::-;15618:2;15613:3;15609:12;15602:19;;15261:366;;;:::o;15633:419::-;15799:4;15837:2;15826:9;15822:18;15814:26;;15886:9;15880:4;15876:20;15872:1;15861:9;15857:17;15850:47;15914:131;16040:4;15914:131;:::i;:::-;15906:139;;15633:419;;;:::o;16058:410::-;16098:7;16121:20;16139:1;16121:20;:::i;:::-;16116:25;;16155:20;16173:1;16155:20;:::i;:::-;16150:25;;16210:1;16207;16203:9;16232:30;16250:11;16232:30;:::i;:::-;16221:41;;16411:1;16402:7;16398:15;16395:1;16392:22;16372:1;16365:9;16345:83;16322:139;;16441:18;;:::i;:::-;16322:139;16106:362;16058:410;;;;:::o;16474:180::-;16522:77;16519:1;16512:88;16619:4;16616:1;16609:15;16643:4;16640:1;16633:15;16660:185;16700:1;16717:20;16735:1;16717:20;:::i;:::-;16712:25;;16751:20;16769:1;16751:20;:::i;:::-;16746:25;;16790:1;16780:35;;16795:18;;:::i;:::-;16780:35;16837:1;16834;16830:9;16825:14;;16660:185;;;;:::o;16851:194::-;16891:4;16911:20;16929:1;16911:20;:::i;:::-;16906:25;;16945:20;16963:1;16945:20;:::i;:::-;16940:25;;16989:1;16986;16982:9;16974:17;;17013:1;17007:4;17004:11;17001:37;;;17018:18;;:::i;:::-;17001:37;16851:194;;;;:::o;17051:244::-;17191:34;17187:1;17179:6;17175:14;17168:58;17260:27;17255:2;17247:6;17243:15;17236:52;17051:244;:::o;17301:366::-;17443:3;17464:67;17528:2;17523:3;17464:67;:::i;:::-;17457:74;;17540:93;17629:3;17540:93;:::i;:::-;17658:2;17653:3;17649:12;17642:19;;17301:366;;;:::o;17673:419::-;17839:4;17877:2;17866:9;17862:18;17854:26;;17926:9;17920:4;17916:20;17912:1;17901:9;17897:17;17890:47;17954:131;18080:4;17954:131;:::i;:::-;17946:139;;17673:419;;;:::o;18098:224::-;18238:34;18234:1;18226:6;18222:14;18215:58;18307:7;18302:2;18294:6;18290:15;18283:32;18098:224;:::o;18328:366::-;18470:3;18491:67;18555:2;18550:3;18491:67;:::i;:::-;18484:74;;18567:93;18656:3;18567:93;:::i;:::-;18685:2;18680:3;18676:12;18669:19;;18328:366;;;:::o;18700:419::-;18866:4;18904:2;18893:9;18889:18;18881:26;;18953:9;18947:4;18943:20;18939:1;18928:9;18924:17;18917:47;18981:131;19107:4;18981:131;:::i;:::-;18973:139;;18700:419;;;:::o;19125:179::-;19265:31;19261:1;19253:6;19249:14;19242:55;19125:179;:::o;19310:366::-;19452:3;19473:67;19537:2;19532:3;19473:67;:::i;:::-;19466:74;;19549:93;19638:3;19549:93;:::i;:::-;19667:2;19662:3;19658:12;19651:19;;19310:366;;;:::o;19682:419::-;19848:4;19886:2;19875:9;19871:18;19863:26;;19935:9;19929:4;19925:20;19921:1;19910:9;19906:17;19899:47;19963:131;20089:4;19963:131;:::i;:::-;19955:139;;19682:419;;;:::o;20107:240::-;20247:34;20243:1;20235:6;20231:14;20224:58;20316:23;20311:2;20303:6;20299:15;20292:48;20107:240;:::o;20353:366::-;20495:3;20516:67;20580:2;20575:3;20516:67;:::i;:::-;20509:74;;20592:93;20681:3;20592:93;:::i;:::-;20710:2;20705:3;20701:12;20694:19;;20353:366;;;:::o;20725:419::-;20891:4;20929:2;20918:9;20914:18;20906:26;;20978:9;20972:4;20968:20;20964:1;20953:9;20949:17;20942:47;21006:131;21132:4;21006:131;:::i;:::-;20998:139;;20725:419;;;:::o;21150:239::-;21290:34;21286:1;21278:6;21274:14;21267:58;21359:22;21354:2;21346:6;21342:15;21335:47;21150:239;:::o;21395:366::-;21537:3;21558:67;21622:2;21617:3;21558:67;:::i;:::-;21551:74;;21634:93;21723:3;21634:93;:::i;:::-;21752:2;21747:3;21743:12;21736:19;;21395:366;;;:::o;21767:419::-;21933:4;21971:2;21960:9;21956:18;21948:26;;22020:9;22014:4;22010:20;22006:1;21995:9;21991:17;21984:47;22048:131;22174:4;22048:131;:::i;:::-;22040:139;;21767:419;;;:::o;22192:225::-;22332:34;22328:1;22320:6;22316:14;22309:58;22401:8;22396:2;22388:6;22384:15;22377:33;22192:225;:::o;22423:366::-;22565:3;22586:67;22650:2;22645:3;22586:67;:::i;:::-;22579:74;;22662:93;22751:3;22662:93;:::i;:::-;22780:2;22775:3;22771:12;22764:19;;22423:366;;;:::o;22795:419::-;22961:4;22999:2;22988:9;22984:18;22976:26;;23048:9;23042:4;23038:20;23034:1;23023:9;23019:17;23012:47;23076:131;23202:4;23076:131;:::i;:::-;23068:139;;22795:419;;;:::o;23220:223::-;23360:34;23356:1;23348:6;23344:14;23337:58;23429:6;23424:2;23416:6;23412:15;23405:31;23220:223;:::o;23449:366::-;23591:3;23612:67;23676:2;23671:3;23612:67;:::i;:::-;23605:74;;23688:93;23777:3;23688:93;:::i;:::-;23806:2;23801:3;23797:12;23790:19;;23449:366;;;:::o;23821:419::-;23987:4;24025:2;24014:9;24010:18;24002:26;;24074:9;24068:4;24064:20;24060:1;24049:9;24045:17;24038:47;24102:131;24228:4;24102:131;:::i;:::-;24094:139;;23821:419;;;:::o;24246:221::-;24386:34;24382:1;24374:6;24370:14;24363:58;24455:4;24450:2;24442:6;24438:15;24431:29;24246:221;:::o;24473:366::-;24615:3;24636:67;24700:2;24695:3;24636:67;:::i;:::-;24629:74;;24712:93;24801:3;24712:93;:::i;:::-;24830:2;24825:3;24821:12;24814:19;;24473:366;;;:::o;24845:419::-;25011:4;25049:2;25038:9;25034:18;25026:26;;25098:9;25092:4;25088:20;25084:1;25073:9;25069:17;25062:47;25126:131;25252:4;25126:131;:::i;:::-;25118:139;;24845:419;;;:::o;25270:179::-;25410:31;25406:1;25398:6;25394:14;25387:55;25270:179;:::o;25455:366::-;25597:3;25618:67;25682:2;25677:3;25618:67;:::i;:::-;25611:74;;25694:93;25783:3;25694:93;:::i;:::-;25812:2;25807:3;25803:12;25796:19;;25455:366;;;:::o;25827:419::-;25993:4;26031:2;26020:9;26016:18;26008:26;;26080:9;26074:4;26070:20;26066:1;26055:9;26051:17;26044:47;26108:131;26234:4;26108:131;:::i;:::-;26100:139;;25827:419;;;:::o;26252:224::-;26392:34;26388:1;26380:6;26376:14;26369:58;26461:7;26456:2;26448:6;26444:15;26437:32;26252:224;:::o;26482:366::-;26624:3;26645:67;26709:2;26704:3;26645:67;:::i;:::-;26638:74;;26721:93;26810:3;26721:93;:::i;:::-;26839:2;26834:3;26830:12;26823:19;;26482:366;;;:::o;26854:419::-;27020:4;27058:2;27047:9;27043:18;27035:26;;27107:9;27101:4;27097:20;27093:1;27082:9;27078:17;27071:47;27135:131;27261:4;27135:131;:::i;:::-;27127:139;;26854:419;;;:::o;27279:222::-;27419:34;27415:1;27407:6;27403:14;27396:58;27488:5;27483:2;27475:6;27471:15;27464:30;27279:222;:::o;27507:366::-;27649:3;27670:67;27734:2;27729:3;27670:67;:::i;:::-;27663:74;;27746:93;27835:3;27746:93;:::i;:::-;27864:2;27859:3;27855:12;27848:19;;27507:366;;;:::o;27879:419::-;28045:4;28083:2;28072:9;28068:18;28060:26;;28132:9;28126:4;28122:20;28118:1;28107:9;28103:17;28096:47;28160:131;28286:4;28160:131;:::i;:::-;28152:139;;27879:419;;;:::o;28304:301::-;28444:34;28440:1;28432:6;28428:14;28421:58;28513:34;28508:2;28500:6;28496:15;28489:59;28582:15;28577:2;28569:6;28565:15;28558:40;28304:301;:::o;28611:366::-;28753:3;28774:67;28838:2;28833:3;28774:67;:::i;:::-;28767:74;;28850:93;28939:3;28850:93;:::i;:::-;28968:2;28963:3;28959:12;28952:19;;28611:366;;;:::o;28983:419::-;29149:4;29187:2;29176:9;29172:18;29164:26;;29236:9;29230:4;29226:20;29222:1;29211:9;29207:17;29200:47;29264:131;29390:4;29264:131;:::i;:::-;29256:139;;28983:419;;;:::o;29408:157::-;29548:9;29544:1;29536:6;29532:14;29525:33;29408:157;:::o;29571:365::-;29713:3;29734:66;29798:1;29793:3;29734:66;:::i;:::-;29727:73;;29809:93;29898:3;29809:93;:::i;:::-;29927:2;29922:3;29918:12;29911:19;;29571:365;;;:::o;29942:419::-;30108:4;30146:2;30135:9;30131:18;30123:26;;30195:9;30189:4;30185:20;30181:1;30170:9;30166:17;30159:47;30223:131;30349:4;30223:131;:::i;:::-;30215:139;;29942:419;;;:::o;30367:172::-;30507:24;30503:1;30495:6;30491:14;30484:48;30367:172;:::o;30545:366::-;30687:3;30708:67;30772:2;30767:3;30708:67;:::i;:::-;30701:74;;30784:93;30873:3;30784:93;:::i;:::-;30902:2;30897:3;30893:12;30886:19;;30545:366;;;:::o;30917:419::-;31083:4;31121:2;31110:9;31106:18;31098:26;;31170:9;31164:4;31160:20;31156:1;31145:9;31141:17;31134:47;31198:131;31324:4;31198:131;:::i;:::-;31190:139;;30917:419;;;:::o;31342:297::-;31482:34;31478:1;31470:6;31466:14;31459:58;31551:34;31546:2;31538:6;31534:15;31527:59;31620:11;31615:2;31607:6;31603:15;31596:36;31342:297;:::o;31645:366::-;31787:3;31808:67;31872:2;31867:3;31808:67;:::i;:::-;31801:74;;31884:93;31973:3;31884:93;:::i;:::-;32002:2;31997:3;31993:12;31986:19;;31645:366;;;:::o;32017:419::-;32183:4;32221:2;32210:9;32206:18;32198:26;;32270:9;32264:4;32260:20;32256:1;32245:9;32241:17;32234:47;32298:131;32424:4;32298:131;:::i;:::-;32290:139;;32017:419;;;:::o;32442:240::-;32582:34;32578:1;32570:6;32566:14;32559:58;32651:23;32646:2;32638:6;32634:15;32627:48;32442:240;:::o;32688:366::-;32830:3;32851:67;32915:2;32910:3;32851:67;:::i;:::-;32844:74;;32927:93;33016:3;32927:93;:::i;:::-;33045:2;33040:3;33036:12;33029:19;;32688:366;;;:::o;33060:419::-;33226:4;33264:2;33253:9;33249:18;33241:26;;33313:9;33307:4;33303:20;33299:1;33288:9;33284:17;33277:47;33341:131;33467:4;33341:131;:::i;:::-;33333:139;;33060:419;;;:::o;33485:169::-;33625:21;33621:1;33613:6;33609:14;33602:45;33485:169;:::o;33660:366::-;33802:3;33823:67;33887:2;33882:3;33823:67;:::i;:::-;33816:74;;33899:93;33988:3;33899:93;:::i;:::-;34017:2;34012:3;34008:12;34001:19;;33660:366;;;:::o;34032:419::-;34198:4;34236:2;34225:9;34221:18;34213:26;;34285:9;34279:4;34275:20;34271:1;34260:9;34256:17;34249:47;34313:131;34439:4;34313:131;:::i;:::-;34305:139;;34032:419;;;:::o;34457:241::-;34597:34;34593:1;34585:6;34581:14;34574:58;34666:24;34661:2;34653:6;34649:15;34642:49;34457:241;:::o;34704:366::-;34846:3;34867:67;34931:2;34926:3;34867:67;:::i;:::-;34860:74;;34943:93;35032:3;34943:93;:::i;:::-;35061:2;35056:3;35052:12;35045:19;;34704:366;;;:::o;35076:419::-;35242:4;35280:2;35269:9;35265:18;35257:26;;35329:9;35323:4;35319:20;35315:1;35304:9;35300:17;35293:47;35357:131;35483:4;35357:131;:::i;:::-;35349:139;;35076:419;;;:::o;35501:85::-;35546:7;35575:5;35564:16;;35501:85;;;:::o;35592:60::-;35620:3;35641:5;35634:12;;35592:60;;;:::o;35658:158::-;35716:9;35749:61;35767:42;35776:32;35802:5;35776:32;:::i;:::-;35767:42;:::i;:::-;35749:61;:::i;:::-;35736:74;;35658:158;;;:::o;35822:147::-;35917:45;35956:5;35917:45;:::i;:::-;35912:3;35905:58;35822:147;;:::o;35975:807::-;36224:4;36262:3;36251:9;36247:19;36239:27;;36276:71;36344:1;36333:9;36329:17;36320:6;36276:71;:::i;:::-;36357:72;36425:2;36414:9;36410:18;36401:6;36357:72;:::i;:::-;36439:80;36515:2;36504:9;36500:18;36491:6;36439:80;:::i;:::-;36529;36605:2;36594:9;36590:18;36581:6;36529:80;:::i;:::-;36619:73;36687:3;36676:9;36672:19;36663:6;36619:73;:::i;:::-;36702;36770:3;36759:9;36755:19;36746:6;36702:73;:::i;:::-;35975:807;;;;;;;;;:::o;36788:143::-;36845:5;36876:6;36870:13;36861:22;;36892:33;36919:5;36892:33;:::i;:::-;36788:143;;;;:::o;36937:663::-;37025:6;37033;37041;37090:2;37078:9;37069:7;37065:23;37061:32;37058:119;;;37096:79;;:::i;:::-;37058:119;37216:1;37241:64;37297:7;37288:6;37277:9;37273:22;37241:64;:::i;:::-;37231:74;;37187:128;37354:2;37380:64;37436:7;37427:6;37416:9;37412:22;37380:64;:::i;:::-;37370:74;;37325:129;37493:2;37519:64;37575:7;37566:6;37555:9;37551:22;37519:64;:::i;:::-;37509:74;;37464:129;36937:663;;;;;:::o;37606:180::-;37654:77;37651:1;37644:88;37751:4;37748:1;37741:15;37775:4;37772:1;37765:15;37792:143;37849:5;37880:6;37874:13;37865:22;;37896:33;37923:5;37896:33;:::i;:::-;37792:143;;;;:::o;37941:351::-;38011:6;38060:2;38048:9;38039:7;38035:23;38031:32;38028:119;;;38066:79;;:::i;:::-;38028:119;38186:1;38211:64;38267:7;38258:6;38247:9;38243:22;38211:64;:::i;:::-;38201:74;;38157:128;37941:351;;;;:::o;38298:114::-;38365:6;38399:5;38393:12;38383:22;;38298:114;;;:::o;38418:184::-;38517:11;38551:6;38546:3;38539:19;38591:4;38586:3;38582:14;38567:29;;38418:184;;;;:::o;38608:132::-;38675:4;38698:3;38690:11;;38728:4;38723:3;38719:14;38711:22;;38608:132;;;:::o;38746:108::-;38823:24;38841:5;38823:24;:::i;:::-;38818:3;38811:37;38746:108;;:::o;38860:179::-;38929:10;38950:46;38992:3;38984:6;38950:46;:::i;:::-;39028:4;39023:3;39019:14;39005:28;;38860:179;;;;:::o;39045:113::-;39115:4;39147;39142:3;39138:14;39130:22;;39045:113;;;:::o;39194:732::-;39313:3;39342:54;39390:5;39342:54;:::i;:::-;39412:86;39491:6;39486:3;39412:86;:::i;:::-;39405:93;;39522:56;39572:5;39522:56;:::i;:::-;39601:7;39632:1;39617:284;39642:6;39639:1;39636:13;39617:284;;;39718:6;39712:13;39745:63;39804:3;39789:13;39745:63;:::i;:::-;39738:70;;39831:60;39884:6;39831:60;:::i;:::-;39821:70;;39677:224;39664:1;39661;39657:9;39652:14;;39617:284;;;39621:14;39917:3;39910:10;;39318:608;;;39194:732;;;;:::o;39932:831::-;40195:4;40233:3;40222:9;40218:19;40210:27;;40247:71;40315:1;40304:9;40300:17;40291:6;40247:71;:::i;:::-;40328:80;40404:2;40393:9;40389:18;40380:6;40328:80;:::i;:::-;40455:9;40449:4;40445:20;40440:2;40429:9;40425:18;40418:48;40483:108;40586:4;40577:6;40483:108;:::i;:::-;40475:116;;40601:72;40669:2;40658:9;40654:18;40645:6;40601:72;:::i;:::-;40683:73;40751:3;40740:9;40736:19;40727:6;40683:73;:::i;:::-;39932:831;;;;;;;;:::o;40769:225::-;40909:34;40905:1;40897:6;40893:14;40886:58;40978:8;40973:2;40965:6;40961:15;40954:33;40769:225;:::o;41000:366::-;41142:3;41163:67;41227:2;41222:3;41163:67;:::i;:::-;41156:74;;41239:93;41328:3;41239:93;:::i;:::-;41357:2;41352:3;41348:12;41341:19;;41000:366;;;:::o;41372:419::-;41538:4;41576:2;41565:9;41561:18;41553:26;;41625:9;41619:4;41615:20;41611:1;41600:9;41596:17;41589:47;41653:131;41779:4;41653:131;:::i;:::-;41645:139;;41372:419;;;:::o;41797:442::-;41946:4;41984:2;41973:9;41969:18;41961:26;;41997:71;42065:1;42054:9;42050:17;42041:6;41997:71;:::i;:::-;42078:72;42146:2;42135:9;42131:18;42122:6;42078:72;:::i;:::-;42160;42228:2;42217:9;42213:18;42204:6;42160:72;:::i;:::-;41797:442;;;;;;:::o

Swarm Source

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