ETH Price: $3,067.37 (+3.32%)
Gas: 9 Gwei

Token

Ryoshi (RYOSHI)
 

Overview

Max Total Supply

10,000,000 RYOSHI

Holders

18

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

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

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

Contract Source Code Verified (Exact Match)

Contract Name:
Ryoshi

Compiler Version
v0.8.23+commit.f704f362

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-02-18
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.23;

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

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 IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);
   
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

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

        (bool success, ) = recipient.call{value: amount}("");
        return success;
    }
}

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

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

abstract contract Ownable is Context {
    address private _owner;

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

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

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

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


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

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }
       function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        uint256 currentAllowance = _allowances[sender][_msgSender()];
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
            unchecked {
                _approve(sender, _msgSender(), currentAllowance - amount);
            }
        }

        _transfer(sender, recipient, amount);

        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, 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 _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

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

contract Ryoshi is ERC20, Ownable {
    using Address for address payable;

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair = address(0xdead);

    mapping (address => bool) private _isExcludedFromFees;

    uint256 public  liquidityFeeOnBuy;
    uint256 public  liquidityFeeOnSell;

    uint256 public  marketingFeeOnBuy;
    uint256 public  marketingFeeOnSell;

    uint256 private _totalFeesOnBuy;
    uint256 private _totalFeesOnSell;

    uint256 private maxFee;

    uint256 public  walletToWalletTransferFee;
    
    bool public pairSet;

    address public  marketingWallet;

    uint256 public  swapTokensAtAmount;
    bool    private swapping;

    bool    public swapEnabled;

    event ExcludeFromFees(address indexed account, bool isExcluded);
    event MarketingWalletChanged(address marketingWallet);
    event UpdateBuyFees(uint256 liquidityFeeOnBuy, uint256 marketingFeeOnBuy);
    event UpdateSellFees(uint256 liquidityFeeOnSell, uint256 marketingFeeOnSell);
    event UpdateWalletToWalletTransferFee(uint256 walletToWalletTransferFee);
    event SwapAndLiquify(uint256 tokensSwapped,uint256 bnbReceived,uint256 tokensIntoLiqudity);
    event SwapAndSendMarketing(uint256 tokensSwapped, uint256 bnbSend);
    event SwapTokensAtAmountUpdated(uint256 swapTokensAtAmount);
    

    constructor () ERC20("Ryoshi", "RYOSHI") 
    {   
        address router;
        address pinkLock;
        
        if (block.chainid == 56) {
            router = 0x10ED43C718714eb63d5aA57B78B54704E256024E; // BSC Pancake Mainnet Router
            pinkLock = 0x407993575c91ce7643a4d4cCACc9A98c36eE1BBE; // BSC PinkLock
        } else if (block.chainid == 97) {
            router = 0xD99D1c33F9fC3444f8101754aBC46c52416550D1; // BSC Pancake Testnet Router
            pinkLock = 0x5E5b9bE5fd939c578ABE5800a90C566eeEbA44a5; // BSC Testnet PinkLock
        } else if (block.chainid == 1 || block.chainid == 5) {
            router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // ETH Uniswap Mainnet % Testnet
            pinkLock = 0x71B5759d73262FBb223956913ecF4ecC51057641; // ETH PinkLock
        } else {
            revert();
        }

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(router);

        uniswapV2Router = _uniswapV2Router;

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

        liquidityFeeOnBuy  = 0;
        liquidityFeeOnSell = 0;

        marketingFeeOnBuy  = 0;
        marketingFeeOnSell = 0;

        maxFee             = 100;

        _totalFeesOnBuy    = liquidityFeeOnBuy  + marketingFeeOnBuy;
        _totalFeesOnSell   = liquidityFeeOnSell + marketingFeeOnSell;

        walletToWalletTransferFee = 0;

        marketingWallet = 0xF45f782C7Bd9C4355C844406D5b058F50DAC6752;

        maxTransactionLimitEnabled = true;

        _isExcludedFromMaxTxLimit[owner()] = true;
        _isExcludedFromMaxTxLimit[address(this)] = true;
        _isExcludedFromMaxTxLimit[address(0xdead)] = true;
        _isExcludedFromMaxTxLimit[marketingWallet] = true;
        _isExcludedFromMaxTxLimit[pinkLock] = true;

        maxWalletLimitEnabled = true;

        _isExcludedFromMaxWalletLimit[owner()] = true;
        _isExcludedFromMaxWalletLimit[address(this)] = true;
        _isExcludedFromMaxWalletLimit[address(0xdead)] = true;
        _isExcludedFromMaxWalletLimit[marketingWallet] = true;
        _isExcludedFromMaxWalletLimit[pinkLock] = true;

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

        _mint(owner(), 10000000 * (10 ** decimals()));
        swapTokensAtAmount = totalSupply() / 5_000;
	
        maxTransactionAmountBuy     = totalSupply() * 15 / 1;
        maxTransactionAmountSell    = totalSupply() * 15 / 1;
	
        maxWalletAmount             = totalSupply() * 15 / 1;

        tradingEnabled = false;
        swapEnabled = false;
    }

    receive() external payable {

  	}


    function claimStuckTokens(address token) external onlyOwner {
        require(token != address(this), "Owner cannot claim contract's balance of its own tokens");
        if (token == address(0x0)) {
            payable(msg.sender).sendValue(address(this).balance);
            return;
        }
        IERC20 ERC20token = IERC20(token);
        uint256 balance = ERC20token.balanceOf(address(this));
        ERC20token.transfer(msg.sender, balance);
    }

    function setPair (address _uniswapV2Pair) external onlyOwner {
        require(!pairSet, "Cannot change the pair");
        uniswapV2Pair = _uniswapV2Pair;
    }

    function pairIsSet() external onlyOwner {
        pairSet = true;
    }

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

        emit ExcludeFromFees(account, excluded);
    }

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

    function updateBuyFees(uint256 _liquidityFeeOnBuy, uint256 _marketingFeeOnBuy) external onlyOwner {
        liquidityFeeOnBuy = _liquidityFeeOnBuy;
        marketingFeeOnBuy = _marketingFeeOnBuy;

        _totalFeesOnBuy   = liquidityFeeOnBuy + marketingFeeOnBuy;

        require(_totalFeesOnBuy <= maxFee, "Total Fees cannot exceed the maximum");

        emit UpdateBuyFees(liquidityFeeOnBuy, marketingFeeOnBuy);
    }

    function updateSellFees(uint256 _liquidityFeeOnSell, uint256 _marketingFeeOnSell) external onlyOwner {
        liquidityFeeOnSell = _liquidityFeeOnSell;
        marketingFeeOnSell = _marketingFeeOnSell;

        _totalFeesOnSell   = liquidityFeeOnSell + marketingFeeOnSell;

        require(_totalFeesOnSell <= maxFee, "Total Fees cannot exceed the maximum");

        emit UpdateSellFees(liquidityFeeOnSell, marketingFeeOnSell);
    }

    function updateWalletToWalletTransferFee(uint256 _walletToWalletTransferFee) external onlyOwner {
        require(_walletToWalletTransferFee <= maxFee, "Wallet to Wallet Transfer Fee cannot exceed the maximum");
        walletToWalletTransferFee = _walletToWalletTransferFee;

        emit UpdateWalletToWalletTransferFee(walletToWalletTransferFee);
    }

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

        emit MarketingWalletChanged(marketingWallet);
    }
function mint(address to, uint256 amount) external onlyOwner {
    _mint(to, amount);
}

    bool public tradingEnabled;

    function enableTrading(address _uniswapV2Pair) external onlyOwner{
        require(!tradingEnabled, "Trading already enabled.");
        tradingEnabled = true;
        swapEnabled = true;
        uniswapV2Pair = _uniswapV2Pair;
    }
    

    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(tradingEnabled || _isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading not yet enabled!");
       
        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (maxTransactionLimitEnabled) 
        {
            if ((from == uniswapV2Pair || to == uniswapV2Pair) &&
                !_isExcludedFromMaxTxLimit[from] && 
                !_isExcludedFromMaxTxLimit[to]
            ) {
                if (from == uniswapV2Pair) {
                    require(
                        amount <= maxTransactionAmountBuy,  
                        "AntiWhale: Transfer amount exceeds the maxTransactionAmount"
                    );
                } else {
                    require(
                        amount <= maxTransactionAmountSell, 
                        "AntiWhale: Transfer amount exceeds the maxTransactionAmount"
                    );
                }
            }
        }

		uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (canSwap &&
            !swapping &&
            to == uniswapV2Pair &&
            _totalFeesOnBuy + _totalFeesOnSell > 0 &&
            swapEnabled
        ) {
            swapping = true;

            uint256 totalFee = _totalFeesOnBuy + _totalFeesOnSell;
            uint256 liquidityShare = liquidityFeeOnBuy + liquidityFeeOnSell;
            uint256 marketingShare = marketingFeeOnBuy + marketingFeeOnSell;

            if (liquidityShare > 0) {
                uint256 liquidityTokens = contractTokenBalance * liquidityShare / totalFee;
                swapAndLiquify(liquidityTokens);
            }
            
            if (marketingShare > 0) {
                uint256 marketingTokens = contractTokenBalance * marketingShare / totalFee;
                swapAndSendMarketing(marketingTokens);
            }          

            swapping = false;
        }

        uint256 _totalFees;
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to] || swapping) {
            _totalFees = 0;
        } else if (from == uniswapV2Pair) {
            _totalFees = _totalFeesOnBuy;
        } else if (to == uniswapV2Pair) {
            _totalFees = _totalFeesOnSell;
        } else {
            _totalFees = walletToWalletTransferFee;
        }

        if (_totalFees > 0) {
            uint256 fees = (amount * _totalFees) / 100;
            amount = amount - fees;
            super._transfer(from, address(this), fees);
        }

        if (maxWalletLimitEnabled) 
        {
            if (!_isExcludedFromMaxWalletLimit[from] && 
                !_isExcludedFromMaxWalletLimit[to] &&
                to != uniswapV2Pair
            ) {
                uint256 balance  = balanceOf(to);
                require(
                    balance + amount <= maxWalletAmount, 
                    "MaxWallet: Recipient exceeds the maxWalletAmount"
                );
            }
        }

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

    function setSwapEnabled(bool _enabled) external onlyOwner{
        require(swapEnabled != _enabled, "swapEnabled already at this state.");
        swapEnabled = _enabled;
    }


    function swapAndLiquify(uint256 tokens) private {
        uint256 half = tokens / 2;
        uint256 otherHalf = tokens - half;

        uint256 initialBalance = address(this).balance;

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            half,
            0,
            path,
            address(this),
            block.timestamp);
        
        uint256 newBalance = address(this).balance - initialBalance;

        uniswapV2Router.addLiquidityETH{value: newBalance}(
            address(this),
            otherHalf,
            0,
            0,
            address(0xdead),
            block.timestamp
        );

        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

    function swapAndSendMarketing(uint256 tokenAmount) private {
        uint256 initialBalance = address(this).balance;

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        uint256 newBalance = address(this).balance - initialBalance;

        payable(marketingWallet).sendValue(newBalance);

        emit SwapAndSendMarketing(tokenAmount, newBalance);
    }

    mapping(address => bool) private _isExcludedFromMaxWalletLimit;
    bool    public maxWalletLimitEnabled;
    uint256 public maxWalletAmount;

    event ExcludedFromMaxWalletLimit(address indexed account, bool isExcluded);
    event MaxWalletLimitStateChanged(bool maxWalletLimit);
    event MaxWalletLimitAmountChanged(uint256 maxWalletAmount);

 

    function setMaxWalletAmount(uint256 _maxWalletAmount) external onlyOwner {
        require(_maxWalletAmount >= (totalSupply() / (10 ** decimals())) / 100, "Max wallet percentage cannot be lower than 1%");
        maxWalletAmount = _maxWalletAmount * (10 ** decimals());

        emit MaxWalletLimitAmountChanged(maxWalletAmount);
    }

    function excludeFromMaxWallet(address account, bool exclude) external onlyOwner {
        require( _isExcludedFromMaxWalletLimit[account] != exclude,"Account is already set to that state");
        require(account != address(this), "Can't set this address.");

        _isExcludedFromMaxWalletLimit[account] = exclude;

        emit ExcludedFromMaxWalletLimit(account, exclude);
    }

    function isExcludedFromMaxWalletLimit(address account) public view returns(bool) {
        return _isExcludedFromMaxWalletLimit[account];
    }

    mapping(address => bool) private _isExcludedFromMaxTxLimit;
    bool    public  maxTransactionLimitEnabled;
    uint256 public  maxTransactionAmountBuy;
    uint256 public  maxTransactionAmountSell;

    event ExcludedFromMaxTransactionLimit(address indexed account, bool isExcluded);
    event MaxTransactionLimitStateChanged(bool maxTransactionLimit);
    event MaxTransactionLimitAmountChanged(uint256 maxTransactionAmountBuy, uint256 maxTransactionAmountSell);

    function setEnableMaxTransactionLimit(bool enable) external onlyOwner {
        require(enable != maxTransactionLimitEnabled, "Max transaction limit is already set to that state");
        maxTransactionLimitEnabled = enable;

        emit MaxTransactionLimitStateChanged(maxTransactionLimitEnabled);
    }
}

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":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludedFromMaxTransactionLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludedFromMaxWalletLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"marketingWallet","type":"address"}],"name":"MarketingWalletChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxTransactionAmountBuy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxTransactionAmountSell","type":"uint256"}],"name":"MaxTransactionLimitAmountChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"maxTransactionLimit","type":"bool"}],"name":"MaxTransactionLimitStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxWalletAmount","type":"uint256"}],"name":"MaxWalletLimitAmountChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"maxWalletLimit","type":"bool"}],"name":"MaxWalletLimitStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bnbReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bnbSend","type":"uint256"}],"name":"SwapAndSendMarketing","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"swapTokensAtAmount","type":"uint256"}],"name":"SwapTokensAtAmountUpdated","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":false,"internalType":"uint256","name":"liquidityFeeOnBuy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketingFeeOnBuy","type":"uint256"}],"name":"UpdateBuyFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"liquidityFeeOnSell","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketingFeeOnSell","type":"uint256"}],"name":"UpdateSellFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"walletToWalletTransferFee","type":"uint256"}],"name":"UpdateWalletToWalletTransferFee","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":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"changeMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"claimStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_uniswapV2Pair","type":"address"}],"name":"enableTrading","outputs":[],"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":"account","type":"address"},{"internalType":"bool","name":"exclude","type":"bool"}],"name":"excludeFromMaxWallet","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":"account","type":"address"}],"name":"isExcludedFromMaxWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFeeOnBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFeeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFeeOnBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFeeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmountBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmountSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionLimitEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletLimitEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","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":"pairIsSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pairSet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"setEnableMaxTransactionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxWalletAmount","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_uniswapV2Pair","type":"address"}],"name":"setPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFeeOnBuy","type":"uint256"},{"internalType":"uint256","name":"_marketingFeeOnBuy","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFeeOnSell","type":"uint256"},{"internalType":"uint256","name":"_marketingFeeOnSell","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_walletToWalletTransferFee","type":"uint256"}],"name":"updateWalletToWalletTransferFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"walletToWalletTransferFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405261dead60075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034801562000052575f80fd5b506040518060400160405280600681526020017f52796f73686900000000000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f52594f53484900000000000000000000000000000000000000000000000000008152508160039081620000d0919062001027565b508060049081620000e2919062001027565b5050505f620000f662000a3e60201b60201c565b90508060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505f8060384603620001d2577310ed43c718714eb63d5aa57b78b54704e256024e915073407993575c91ce7643a4d4ccacc9a98c36ee1bbe90506200025f565b606146036200020f5773d99d1c33f9fc3444f8101754abc46c52416550d19150735e5b9be5fd939c578abe5800a90c566eeeba44a590506200025e565b60014614806200021f5750600546145b156200025957737a250d5630b4cf539739df2c5dacb4c659f2488d91507371b5759d73262fbb223956913ecf4ecc5105764190506200025d565b5f80fd5b5b5b5f8290508060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620002f73060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62000a4560201b60201c565b5f6009819055505f600a819055505f600b819055505f600c819055506064600f81905550600b546009546200032d919062001138565b600d81905550600c54600a5462000345919062001138565b600e819055505f60108190555073f45f782c7bd9c4355c844406d5b058f50dac6752601160016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160185f6101000a81548160ff021916908315150217905550600160175f620003d662000c1060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160175f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160175f61dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160175f601160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160155f6101000a81548160ff021916908315150217905550600160145f620005cc62000c1060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160145f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160145f61dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160145f601160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160085f620007a862000c1060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160085f61dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160085f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550620009466200090c62000c1060201b60201c565b6200091c62000c3860201b60201c565b600a6200092a9190620012ce565b629896806200093a91906200131e565b62000c4060201b60201c565b6113886200095962000db060201b60201c565b62000965919062001395565b6012819055506001600f6200097f62000db060201b60201c565b6200098b91906200131e565b62000997919062001395565b6019819055506001600f620009b162000db060201b60201c565b620009bd91906200131e565b620009c9919062001395565b601a819055506001600f620009e362000db060201b60201c565b620009ef91906200131e565b620009fb919062001395565b6016819055505f601360026101000a81548160ff0219169083151502179055505f601360016101000a81548160ff0219169083151502179055505050506200159e565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362000ab6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000aad9062001450565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000b27576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b1e90620014e4565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000c03919062001515565b60405180910390a3505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f6009905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000cb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ca8906200157e565b60405180910390fd5b62000cc45f838362000db960201b60201c565b8060025f82825462000cd7919062001138565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825462000d2b919062001138565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000d91919062001515565b60405180910390a362000dac5f838362000dbe60201b60201c565b5050565b5f600254905090565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000e3f57607f821691505b60208210810362000e555762000e5462000dfa565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000eb97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000e7c565b62000ec5868362000e7c565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000f0f62000f0962000f038462000edd565b62000ee6565b62000edd565b9050919050565b5f819050919050565b62000f2a8362000eef565b62000f4262000f398262000f16565b84845462000e88565b825550505050565b5f90565b62000f5862000f4a565b62000f6581848462000f1f565b505050565b5b8181101562000f8c5762000f805f8262000f4e565b60018101905062000f6b565b5050565b601f82111562000fdb5762000fa58162000e5b565b62000fb08462000e6d565b8101602085101562000fc0578190505b62000fd862000fcf8562000e6d565b83018262000f6a565b50505b505050565b5f82821c905092915050565b5f62000ffd5f198460080262000fe0565b1980831691505092915050565b5f62001017838362000fec565b9150826002028217905092915050565b620010328262000dc3565b67ffffffffffffffff8111156200104e576200104d62000dcd565b5b6200105a825462000e27565b6200106782828562000f90565b5f60209050601f8311600181146200109d575f841562001088578287015190505b6200109485826200100a565b86555062001103565b601f198416620010ad8662000e5b565b5f5b82811015620010d657848901518255600182019150602085019450602081019050620010af565b86831015620010f65784890151620010f2601f89168262000fec565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f620011448262000edd565b9150620011518362000edd565b92508282019050808211156200116c576200116b6200110b565b5b92915050565b5f8160011c9050919050565b5f808291508390505b6001851115620011cf57808604811115620011a757620011a66200110b565b5b6001851615620011b75780820291505b8081029050620011c78562001172565b945062001187565b94509492505050565b5f82620011e95760019050620012bb565b81620011f8575f9050620012bb565b81600181146200121157600281146200121c5762001252565b6001915050620012bb565b60ff8411156200123157620012306200110b565b5b8360020a9150848211156200124b576200124a6200110b565b5b50620012bb565b5060208310610133831016604e8410600b84101617156200128c5782820a9050838111156200128657620012856200110b565b5b620012bb565b6200129b84848460016200117e565b92509050818404811115620012b557620012b46200110b565b5b81810290505b9392505050565b5f60ff82169050919050565b5f620012da8262000edd565b9150620012e783620012c2565b9250620013167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620011d8565b905092915050565b5f6200132a8262000edd565b9150620013378362000edd565b9250828202620013478162000edd565b915082820484148315176200136157620013606200110b565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f620013a18262000edd565b9150620013ae8362000edd565b925082620013c157620013c062001368565b5b828204905092915050565b5f82825260208201905092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f62001438602483620013cc565b91506200144582620013dc565b604082019050919050565b5f6020820190508181035f83015262001469816200142a565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f620014cc602283620013cc565b9150620014d98262001470565b604082019050919050565b5f6020820190508181035f830152620014fd81620014be565b9050919050565b6200150f8162000edd565b82525050565b5f6020820190506200152a5f83018462001504565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62001566601f83620013cc565b9150620015738262001530565b602082019050919050565b5f6020820190508181035f830152620015978162001558565b9050919050565b61553e80620015ac5f395ff3fe608060405260043610610280575f3560e01c806366ca9b831161014e578063a8a69b9d116100c0578063dc4c7dbc11610079578063dc4c7dbc14610981578063dd62ed3e146109ab578063e01af92c146109e7578063e2f4560514610a0f578063f2fde38b14610a39578063f9d0831a14610a6157610287565b8063a8a69b9d14610867578063a9059cbb146108a3578063aa4bde28146108df578063bb85c6d114610909578063c024666814610931578063d2fcc0011461095957610287565b80637b3c83b1116101125780637b3c83b11461076f5780638187f516146107995780638da5cb5b146107c157806395d89b41146107eb5780639ffc7ec614610815578063a457c2d71461082b57610287565b806366ca9b831461068d5780636ddd1713146106b5578063702509fd146106df57806370a082311461070957806375f0a8741461074557610287565b80632ce86fbf116101f25780634fbee193116101ab5780634fbee193146105835780635223a0da146105bf57806356a6cabf146105e957806359136fa5146106115780635fc2e5961461063b57806364c98c441461066557610287565b80632ce86fbf14610477578063313ce567146104a157806339509351146104cb57806340c10f191461050757806349bd5a5e1461052f5780634ada218b1461055957610287565b80631694505e116102445780631694505e1461036b57806318160ddd1461039557806321a9d82a146103bf57806323b872dd146103e957806327a14fc2146104255780632ba86bf21461044d57610287565b80630105d0fd1461028b57806302dbd8f8146102b557806306fdde03146102dd57806307980cb914610307578063095ea7b31461032f57610287565b3661028757005b5f80fd5b348015610296575f80fd5b5061029f610a89565b6040516102ac9190613bfe565b60405180910390f35b3480156102c0575f80fd5b506102db60048036038101906102d69190613c45565b610a8f565b005b3480156102e8575f80fd5b506102f1610bd1565b6040516102fe9190613d0d565b60405180910390f35b348015610312575f80fd5b5061032d60048036038101906103289190613d87565b610c61565b005b34801561033a575f80fd5b5061035560048036038101906103509190613db2565b610dc0565b6040516103629190613e0a565b60405180910390f35b348015610376575f80fd5b5061037f610ddd565b60405161038c9190613e7e565b60405180910390f35b3480156103a0575f80fd5b506103a9610e02565b6040516103b69190613bfe565b60405180910390f35b3480156103ca575f80fd5b506103d3610e0b565b6040516103e09190613e0a565b60405180910390f35b3480156103f4575f80fd5b5061040f600480360381019061040a9190613e97565b610e1d565b60405161041c9190613e0a565b60405180910390f35b348015610430575f80fd5b5061044b60048036038101906104469190613ee7565b610f37565b005b348015610458575f80fd5b506104616110a2565b60405161046e9190613e0a565b60405180910390f35b348015610482575f80fd5b5061048b6110b4565b6040516104989190613bfe565b60405180910390f35b3480156104ac575f80fd5b506104b56110ba565b6040516104c29190613f2d565b60405180910390f35b3480156104d6575f80fd5b506104f160048036038101906104ec9190613db2565b6110c2565b6040516104fe9190613e0a565b60405180910390f35b348015610512575f80fd5b5061052d60048036038101906105289190613db2565b611169565b005b34801561053a575f80fd5b5061054361120d565b6040516105509190613f55565b60405180910390f35b348015610564575f80fd5b5061056d611232565b60405161057a9190613e0a565b60405180910390f35b34801561058e575f80fd5b506105a960048036038101906105a49190613d87565b611245565b6040516105b69190613e0a565b60405180910390f35b3480156105ca575f80fd5b506105d3611297565b6040516105e09190613e0a565b60405180910390f35b3480156105f4575f80fd5b5061060f600480360381019061060a9190613f98565b6112a9565b005b34801561061c575f80fd5b506106256113f4565b6040516106329190613bfe565b60405180910390f35b348015610646575f80fd5b5061064f6113fa565b60405161065c9190613bfe565b60405180910390f35b348015610670575f80fd5b5061068b60048036038101906106869190613ee7565b611400565b005b348015610698575f80fd5b506106b360048036038101906106ae9190613c45565b61151e565b005b3480156106c0575f80fd5b506106c9611660565b6040516106d69190613e0a565b60405180910390f35b3480156106ea575f80fd5b506106f3611673565b6040516107009190613bfe565b60405180910390f35b348015610714575f80fd5b5061072f600480360381019061072a9190613d87565b611679565b60405161073c9190613bfe565b60405180910390f35b348015610750575f80fd5b506107596116be565b6040516107669190613f55565b60405180910390f35b34801561077a575f80fd5b506107836116e4565b6040516107909190613bfe565b60405180910390f35b3480156107a4575f80fd5b506107bf60048036038101906107ba9190613d87565b6116ea565b005b3480156107cc575f80fd5b506107d5611812565b6040516107e29190613f55565b60405180910390f35b3480156107f6575f80fd5b506107ff61183a565b60405161080c9190613d0d565b60405180910390f35b348015610820575f80fd5b506108296118ca565b005b348015610836575f80fd5b50610851600480360381019061084c9190613db2565b61197c565b60405161085e9190613e0a565b60405180910390f35b348015610872575f80fd5b5061088d60048036038101906108889190613d87565b611a62565b60405161089a9190613e0a565b60405180910390f35b3480156108ae575f80fd5b506108c960048036038101906108c49190613db2565b611ab4565b6040516108d69190613e0a565b60405180910390f35b3480156108ea575f80fd5b506108f3611ad1565b6040516109009190613bfe565b60405180910390f35b348015610914575f80fd5b5061092f600480360381019061092a9190613d87565b611ad7565b005b34801561093c575f80fd5b5061095760048036038101906109529190613fc3565b611d08565b005b348015610964575f80fd5b5061097f600480360381019061097a9190613fc3565b611ed3565b005b34801561098c575f80fd5b5061099561210c565b6040516109a29190613bfe565b60405180910390f35b3480156109b6575f80fd5b506109d160048036038101906109cc9190614001565b612112565b6040516109de9190613bfe565b60405180910390f35b3480156109f2575f80fd5b50610a0d6004803603810190610a089190613f98565b612194565b005b348015610a1a575f80fd5b50610a2361229c565b604051610a309190613bfe565b60405180910390f35b348015610a44575f80fd5b50610a5f6004803603810190610a5a9190613d87565b6122a2565b005b348015610a6c575f80fd5b50610a876004803603810190610a829190613d87565b612464565b005b60195481565b610a976126cb565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1c90614089565b60405180910390fd5b81600a8190555080600c81905550600c54600a54610b4391906140d4565b600e81905550600f54600e541115610b90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8790614177565b60405180910390fd5b7f12dd4f8337f0c236c7994706854cca8cd53921c0032cb0fba8cdb797e73f67c6600a54600c54604051610bc5929190614195565b60405180910390a15050565b606060038054610be0906141e9565b80601f0160208091040260200160405190810160405280929190818152602001828054610c0c906141e9565b8015610c575780601f10610c2e57610100808354040283529160200191610c57565b820191905f5260205f20905b815481529060010190602001808311610c3a57829003601f168201915b5050505050905090565b610c696126cb565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cee90614089565b60405180910390fd5b601360029054906101000a900460ff1615610d47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3e90614263565b60405180910390fd5b6001601360026101000a81548160ff0219169083151502179055506001601360016101000a81548160ff0219169083151502179055508060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f610dd3610dcc6126cb565b84846126d2565b6001905092915050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600254905090565b60155f9054906101000a900460ff1681565b5f8060015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610e656126cb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610f205782811015610f0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f02906142f1565b60405180910390fd5b610f1f85610f176126cb565b8584036126d2565b5b610f2b858585612895565b60019150509392505050565b610f3f6126cb565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc490614089565b60405180910390fd5b6064610fd76110ba565b600a610fe3919061443e565b610feb610e02565b610ff591906144b5565b610fff91906144b5565b811015611041576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103890614555565b60405180910390fd5b6110496110ba565b600a611055919061443e565b816110609190614573565b6016819055507f21bc0ea3406acb92d4449ab33befb4ae82f873a22f3b6cf0e466b2710beb59426016546040516110979190613bfe565b60405180910390a150565b60185f9054906101000a900460ff1681565b600a5481565b5f6009905090565b5f61115f6110ce6126cb565b848460015f6110db6126cb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461115a91906140d4565b6126d2565b6001905092915050565b6111716126cb565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f690614089565b60405180910390fd5b6112098282613190565b5050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601360029054906101000a900460ff1681565b5f60085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60115f9054906101000a900460ff1681565b6112b16126cb565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461133f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133690614089565b60405180910390fd5b60185f9054906101000a900460ff16151581151503611393576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138a90614624565b60405180910390fd5b8060185f6101000a81548160ff0219169083151502179055507fe81be35e61864c26afd7a4655e99f321378d0aaae1e5af8ee67b658a7460f3cf60185f9054906101000a900460ff166040516113e99190613e0a565b60405180910390a150565b601a5481565b600b5481565b6114086126cb565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611496576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148d90614089565b60405180910390fd5b600f548111156114db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d2906146b2565b60405180910390fd5b806010819055507f925fa17eb1bbdac8e18750276099046910212e51b0d15da024f67ce9fb25cc9b6010546040516115139190613bfe565b60405180910390a150565b6115266126cb565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ab90614089565b60405180910390fd5b8160098190555080600b81905550600b546009546115d291906140d4565b600d81905550600f54600d54111561161f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161690614177565b60405180910390fd5b7fccd61cb5df2cb048d1a7af40a431d6f247af01b6cf048f7a3f2aa9d313e2bc50600954600b54604051611654929190614195565b60405180910390a15050565b601360019054906101000a900460ff1681565b60105481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b601160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60095481565b6116f26126cb565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611780576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177790614089565b60405180910390fd5b60115f9054906101000a900460ff16156117cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c69061471a565b60405180910390fd5b8060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611849906141e9565b80601f0160208091040260200160405190810160405280929190818152602001828054611875906141e9565b80156118c05780601f10611897576101008083540402835291602001916118c0565b820191905f5260205f20905b8154815290600101906020018083116118a357829003601f168201915b5050505050905090565b6118d26126cb565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611960576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195790614089565b60405180910390fd5b600160115f6101000a81548160ff021916908315150217905550565b5f8060015f6119896126cb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611a43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3a906147a8565b60405180910390fd5b611a57611a4e6126cb565b858584036126d2565b600191505092915050565b5f60145f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f611ac7611ac06126cb565b8484612895565b6001905092915050565b60165481565b611adf6126cb565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6490614089565b60405180910390fd5b601160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611bfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf490614836565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c62906148c4565b60405180910390fd5b80601160016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fa964ba5c52d7e7bfcae4fb1ae4db9f211756d0e618e85fac5283b882a39e7a0b601160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051611cfd9190613f55565b60405180910390a150565b611d106126cb565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9590614089565b60405180910390fd5b80151560085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16151503611e2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2490614952565b60405180910390fd5b8060085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611ec79190613e0a565b60405180910390a25050565b611edb6126cb565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6090614089565b60405180910390fd5b80151560145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16151503611ff8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fef906149e0565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612066576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205d90614a48565b60405180910390fd5b8060145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f1d9a11e204b58ad56c619c61600e42167624659d218f0143f1f64956b0daae6c826040516121009190613e0a565b60405180910390a25050565b600c5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b61219c6126cb565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461222a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222190614089565b60405180910390fd5b801515601360019054906101000a900460ff1615150361227f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227690614ad6565b60405180910390fd5b80601360016101000a81548160ff02191690831515021790555050565b60125481565b6122aa6126cb565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612338576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232f90614089565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036123a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239d90614b64565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61246c6126cb565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f190614089565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612568576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255f90614bf2565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036125ca576125c4473373ffffffffffffffffffffffffffffffffffffffff166132e790919063ffffffff16565b506126c8565b5f8190505f8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016126089190613f55565b602060405180830381865afa158015612623573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126479190614c24565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401612684929190614c4f565b6020604051808303815f875af11580156126a0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126c49190614c8a565b5050505b50565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612740576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273790614d25565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a590614db3565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516128889190613bfe565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612903576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128fa90614e41565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612971576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296890614ecf565b60405180910390fd5b601360029054906101000a900460ff16806129d2575060085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b80612a23575060085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612a62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5990614f37565b60405180910390fd5b5f8103612a7957612a7483835f61339d565b61318b565b60185f9054906101000a900460ff1615612cc55760075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480612b34575060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b8015612b87575060175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612bda575060175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612cc45760075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612c7d57601954811115612c78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c6f90614fc5565b60405180910390fd5b612cc3565b601a54811115612cc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb990614fc5565b60405180910390fd5b5b5b5b5f612ccf30611679565b90505f6012548210159050808015612cf3575060135f9054906101000a900460ff16155b8015612d4b575060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b8015612d6557505f600e54600d54612d6391906140d4565b115b8015612d7d5750601360019054906101000a900460ff165b15612e4c57600160135f6101000a81548160ff0219169083151502179055505f600e54600d54612dad91906140d4565b90505f600a54600954612dc091906140d4565b90505f600c54600b54612dd391906140d4565b90505f821115612e02575f838387612deb9190614573565b612df591906144b5565b9050612e0081613612565b505b5f811115612e2f575f838287612e189190614573565b612e2291906144b5565b9050612e2d81613938565b505b5f60135f6101000a81548160ff0219169083151502179055505050505b5f60085f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612ee8575060085f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b80612efe575060135f9054906101000a900460ff165b15612f0b575f9050612fcf565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1603612f6957600d549050612fce565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603612fc757600e549050612fcd565b60105490505b5b5b5f81111561300d575f60648286612fe69190614573565b612ff091906144b5565b90508085612ffe9190614fe3565b945061300b87308361339d565b505b60155f9054906101000a900460ff161561317c5760145f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161580156130bf575060145f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015613118575060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b1561317b575f61312786611679565b9050601654858261313891906140d4565b1115613179576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161317090615086565b60405180910390fd5b505b5b61318786868661339d565b5050505b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036131fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131f5906150ee565b60405180910390fd5b6132095f8383613bdc565b8060025f82825461321a91906140d4565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461326c91906140d4565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516132d09190613bfe565b60405180910390a36132e35f8383613be1565b5050565b5f8147101561332b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161332290615156565b60405180910390fd5b5f8373ffffffffffffffffffffffffffffffffffffffff1683604051613350906151a1565b5f6040518083038185875af1925050503d805f811461338a576040519150601f19603f3d011682016040523d82523d5f602084013e61338f565b606091505b505090508091505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361340b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161340290614e41565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613479576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161347090614ecf565b60405180910390fd5b613484838383613bdc565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015613507576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134fe90615225565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461359591906140d4565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516135f99190613bfe565b60405180910390a361360c848484613be1565b50505050565b5f60028261362091906144b5565b90505f818361362f9190614fe3565b90505f4790505f600267ffffffffffffffff81111561365157613650615243565b5b60405190808252806020026020018201604052801561367f5781602001602082028036833780820191505090505b50905030815f8151811061369657613695615270565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561373a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061375e91906152b1565b8160018151811061377257613771615270565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947855f8430426040518663ffffffff1660e01b815260040161380e9594939291906153cc565b5f604051808303815f87803b158015613825575f80fd5b505af1158015613837573d5f803e3d5ffd5b505050505f82476138489190614fe3565b905060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230875f8061dead426040518863ffffffff1660e01b81526004016138b196959493929190615424565b60606040518083038185885af11580156138cd573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906138f29190615483565b5050507f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561858286604051613928939291906154d3565b60405180910390a1505050505050565b5f4790505f600267ffffffffffffffff81111561395857613957615243565b5b6040519080825280602002602001820160405280156139865781602001602082028036833780820191505090505b50905030815f8151811061399d5761399c615270565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613a41573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a6591906152b1565b81600181518110613a7957613a78615270565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947845f8430426040518663ffffffff1660e01b8152600401613b159594939291906153cc565b5f604051808303815f87803b158015613b2c575f80fd5b505af1158015613b3e573d5f803e3d5ffd5b505050505f8247613b4f9190614fe3565b9050613b9c81601160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166132e790919063ffffffff16565b507f957ad1fc6d4d41da6d1a8d37303289ef3c4b78e0285ff5df1e12070ef0e629998482604051613bce929190614195565b60405180910390a150505050565b505050565b505050565b5f819050919050565b613bf881613be6565b82525050565b5f602082019050613c115f830184613bef565b92915050565b5f80fd5b613c2481613be6565b8114613c2e575f80fd5b50565b5f81359050613c3f81613c1b565b92915050565b5f8060408385031215613c5b57613c5a613c17565b5b5f613c6885828601613c31565b9250506020613c7985828601613c31565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015613cba578082015181840152602081019050613c9f565b5f8484015250505050565b5f601f19601f8301169050919050565b5f613cdf82613c83565b613ce98185613c8d565b9350613cf9818560208601613c9d565b613d0281613cc5565b840191505092915050565b5f6020820190508181035f830152613d258184613cd5565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613d5682613d2d565b9050919050565b613d6681613d4c565b8114613d70575f80fd5b50565b5f81359050613d8181613d5d565b92915050565b5f60208284031215613d9c57613d9b613c17565b5b5f613da984828501613d73565b91505092915050565b5f8060408385031215613dc857613dc7613c17565b5b5f613dd585828601613d73565b9250506020613de685828601613c31565b9150509250929050565b5f8115159050919050565b613e0481613df0565b82525050565b5f602082019050613e1d5f830184613dfb565b92915050565b5f819050919050565b5f613e46613e41613e3c84613d2d565b613e23565b613d2d565b9050919050565b5f613e5782613e2c565b9050919050565b5f613e6882613e4d565b9050919050565b613e7881613e5e565b82525050565b5f602082019050613e915f830184613e6f565b92915050565b5f805f60608486031215613eae57613ead613c17565b5b5f613ebb86828701613d73565b9350506020613ecc86828701613d73565b9250506040613edd86828701613c31565b9150509250925092565b5f60208284031215613efc57613efb613c17565b5b5f613f0984828501613c31565b91505092915050565b5f60ff82169050919050565b613f2781613f12565b82525050565b5f602082019050613f405f830184613f1e565b92915050565b613f4f81613d4c565b82525050565b5f602082019050613f685f830184613f46565b92915050565b613f7781613df0565b8114613f81575f80fd5b50565b5f81359050613f9281613f6e565b92915050565b5f60208284031215613fad57613fac613c17565b5b5f613fba84828501613f84565b91505092915050565b5f8060408385031215613fd957613fd8613c17565b5b5f613fe685828601613d73565b9250506020613ff785828601613f84565b9150509250929050565b5f806040838503121561401757614016613c17565b5b5f61402485828601613d73565b925050602061403585828601613d73565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f614073602083613c8d565b915061407e8261403f565b602082019050919050565b5f6020820190508181035f8301526140a081614067565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6140de82613be6565b91506140e983613be6565b9250828201905080821115614101576141006140a7565b5b92915050565b7f546f74616c20466565732063616e6e6f742065786365656420746865206d61785f8201527f696d756d00000000000000000000000000000000000000000000000000000000602082015250565b5f614161602483613c8d565b915061416c82614107565b604082019050919050565b5f6020820190508181035f83015261418e81614155565b9050919050565b5f6040820190506141a85f830185613bef565b6141b56020830184613bef565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061420057607f821691505b602082108103614213576142126141bc565b5b50919050565b7f54726164696e6720616c726561647920656e61626c65642e00000000000000005f82015250565b5f61424d601883613c8d565b915061425882614219565b602082019050919050565b5f6020820190508181035f83015261427a81614241565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f6142db602883613c8d565b91506142e682614281565b604082019050919050565b5f6020820190508181035f830152614308816142cf565b9050919050565b5f8160011c9050919050565b5f808291508390505b6001851115614364578086048111156143405761433f6140a7565b5b600185161561434f5780820291505b808102905061435d8561430f565b9450614324565b94509492505050565b5f8261437c5760019050614437565b81614389575f9050614437565b816001811461439f57600281146143a9576143d8565b6001915050614437565b60ff8411156143bb576143ba6140a7565b5b8360020a9150848211156143d2576143d16140a7565b5b50614437565b5060208310610133831016604e8410600b841016171561440d5782820a905083811115614408576144076140a7565b5b614437565b61441a848484600161431b565b92509050818404811115614431576144306140a7565b5b81810290505b9392505050565b5f61444882613be6565b915061445383613f12565b92506144807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461436d565b905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6144bf82613be6565b91506144ca83613be6565b9250826144da576144d9614488565b5b828204905092915050565b7f4d61782077616c6c65742070657263656e746167652063616e6e6f74206265205f8201527f6c6f776572207468616e20312500000000000000000000000000000000000000602082015250565b5f61453f602d83613c8d565b915061454a826144e5565b604082019050919050565b5f6020820190508181035f83015261456c81614533565b9050919050565b5f61457d82613be6565b915061458883613be6565b925082820261459681613be6565b915082820484148315176145ad576145ac6140a7565b5b5092915050565b7f4d6178207472616e73616374696f6e206c696d697420697320616c72656164795f8201527f2073657420746f20746861742073746174650000000000000000000000000000602082015250565b5f61460e603283613c8d565b9150614619826145b4565b604082019050919050565b5f6020820190508181035f83015261463b81614602565b9050919050565b7f57616c6c657420746f2057616c6c6574205472616e73666572204665652063615f8201527f6e6e6f742065786365656420746865206d6178696d756d000000000000000000602082015250565b5f61469c603783613c8d565b91506146a782614642565b604082019050919050565b5f6020820190508181035f8301526146c981614690565b9050919050565b7f43616e6e6f74206368616e6765207468652070616972000000000000000000005f82015250565b5f614704601683613c8d565b915061470f826146d0565b602082019050919050565b5f6020820190508181035f830152614731816146f8565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f614792602583613c8d565b915061479d82614738565b604082019050919050565b5f6020820190508181035f8301526147bf81614786565b9050919050565b7f4d61726b6574696e672077616c6c657420697320616c726561647920746861745f8201527f2061646472657373000000000000000000000000000000000000000000000000602082015250565b5f614820602883613c8d565b915061482b826147c6565b604082019050919050565b5f6020820190508181035f83015261484d81614814565b9050919050565b7f4d61726b6574696e672077616c6c65742063616e6e6f7420626520746865207a5f8201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b5f6148ae602b83613c8d565b91506148b982614854565b604082019050919050565b5f6020820190508181035f8301526148db816148a2565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f66205f8201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b5f61493c602a83613c8d565b9150614947826148e2565b604082019050919050565b5f6020820190508181035f83015261496981614930565b9050919050565b7f4163636f756e7420697320616c72656164792073657420746f207468617420735f8201527f7461746500000000000000000000000000000000000000000000000000000000602082015250565b5f6149ca602483613c8d565b91506149d582614970565b604082019050919050565b5f6020820190508181035f8301526149f7816149be565b9050919050565b7f43616e277420736574207468697320616464726573732e0000000000000000005f82015250565b5f614a32601783613c8d565b9150614a3d826149fe565b602082019050919050565b5f6020820190508181035f830152614a5f81614a26565b9050919050565b7f73776170456e61626c656420616c7265616479206174207468697320737461745f8201527f652e000000000000000000000000000000000000000000000000000000000000602082015250565b5f614ac0602283613c8d565b9150614acb82614a66565b604082019050919050565b5f6020820190508181035f830152614aed81614ab4565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f614b4e602683613c8d565b9150614b5982614af4565b604082019050919050565b5f6020820190508181035f830152614b7b81614b42565b9050919050565b7f4f776e65722063616e6e6f7420636c61696d20636f6e747261637427732062615f8201527f6c616e6365206f6620697473206f776e20746f6b656e73000000000000000000602082015250565b5f614bdc603783613c8d565b9150614be782614b82565b604082019050919050565b5f6020820190508181035f830152614c0981614bd0565b9050919050565b5f81519050614c1e81613c1b565b92915050565b5f60208284031215614c3957614c38613c17565b5b5f614c4684828501614c10565b91505092915050565b5f604082019050614c625f830185613f46565b614c6f6020830184613bef565b9392505050565b5f81519050614c8481613f6e565b92915050565b5f60208284031215614c9f57614c9e613c17565b5b5f614cac84828501614c76565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f614d0f602483613c8d565b9150614d1a82614cb5565b604082019050919050565b5f6020820190508181035f830152614d3c81614d03565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f614d9d602283613c8d565b9150614da882614d43565b604082019050919050565b5f6020820190508181035f830152614dca81614d91565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614e2b602583613c8d565b9150614e3682614dd1565b604082019050919050565b5f6020820190508181035f830152614e5881614e1f565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f614eb9602383613c8d565b9150614ec482614e5f565b604082019050919050565b5f6020820190508181035f830152614ee681614ead565b9050919050565b7f54726164696e67206e6f742079657420656e61626c65642100000000000000005f82015250565b5f614f21601883613c8d565b9150614f2c82614eed565b602082019050919050565b5f6020820190508181035f830152614f4e81614f15565b9050919050565b7f416e74695768616c653a205472616e7366657220616d6f756e742065786365655f8201527f647320746865206d61785472616e73616374696f6e416d6f756e740000000000602082015250565b5f614faf603b83613c8d565b9150614fba82614f55565b604082019050919050565b5f6020820190508181035f830152614fdc81614fa3565b9050919050565b5f614fed82613be6565b9150614ff883613be6565b92508282039050818111156150105761500f6140a7565b5b92915050565b7f4d617857616c6c65743a20526563697069656e742065786365656473207468655f8201527f206d617857616c6c6574416d6f756e7400000000000000000000000000000000602082015250565b5f615070603083613c8d565b915061507b82615016565b604082019050919050565b5f6020820190508181035f83015261509d81615064565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f6150d8601f83613c8d565b91506150e3826150a4565b602082019050919050565b5f6020820190508181035f830152615105816150cc565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e63650000005f82015250565b5f615140601d83613c8d565b915061514b8261510c565b602082019050919050565b5f6020820190508181035f83015261516d81615134565b9050919050565b5f81905092915050565b50565b5f61518c5f83615174565b91506151978261517e565b5f82019050919050565b5f6151ab82615181565b9150819050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f61520f602683613c8d565b915061521a826151b5565b604082019050919050565b5f6020820190508181035f83015261523c81615203565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f815190506152ab81613d5d565b92915050565b5f602082840312156152c6576152c5613c17565b5b5f6152d38482850161529d565b91505092915050565b5f819050919050565b5f6152ff6152fa6152f5846152dc565b613e23565b613be6565b9050919050565b61530f816152e5565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61534781613d4c565b82525050565b5f615358838361533e565b60208301905092915050565b5f602082019050919050565b5f61537a82615315565b615384818561531f565b935061538f8361532f565b805f5b838110156153bf5781516153a6888261534d565b97506153b183615364565b925050600181019050615392565b5085935050505092915050565b5f60a0820190506153df5f830188613bef565b6153ec6020830187615306565b81810360408301526153fe8186615370565b905061540d6060830185613f46565b61541a6080830184613bef565b9695505050505050565b5f60c0820190506154375f830189613f46565b6154446020830188613bef565b6154516040830187615306565b61545e6060830186615306565b61546b6080830185613f46565b61547860a0830184613bef565b979650505050505050565b5f805f6060848603121561549a57615499613c17565b5b5f6154a786828701614c10565b93505060206154b886828701614c10565b92505060406154c986828701614c10565b9150509250925092565b5f6060820190506154e65f830186613bef565b6154f36020830185613bef565b6155006040830184613bef565b94935050505056fea2646970667358221220a0485e233975812a74486f09dc9c926974449337953acbae919123c6c3712f0d64736f6c63430008170033

Deployed Bytecode

0x608060405260043610610280575f3560e01c806366ca9b831161014e578063a8a69b9d116100c0578063dc4c7dbc11610079578063dc4c7dbc14610981578063dd62ed3e146109ab578063e01af92c146109e7578063e2f4560514610a0f578063f2fde38b14610a39578063f9d0831a14610a6157610287565b8063a8a69b9d14610867578063a9059cbb146108a3578063aa4bde28146108df578063bb85c6d114610909578063c024666814610931578063d2fcc0011461095957610287565b80637b3c83b1116101125780637b3c83b11461076f5780638187f516146107995780638da5cb5b146107c157806395d89b41146107eb5780639ffc7ec614610815578063a457c2d71461082b57610287565b806366ca9b831461068d5780636ddd1713146106b5578063702509fd146106df57806370a082311461070957806375f0a8741461074557610287565b80632ce86fbf116101f25780634fbee193116101ab5780634fbee193146105835780635223a0da146105bf57806356a6cabf146105e957806359136fa5146106115780635fc2e5961461063b57806364c98c441461066557610287565b80632ce86fbf14610477578063313ce567146104a157806339509351146104cb57806340c10f191461050757806349bd5a5e1461052f5780634ada218b1461055957610287565b80631694505e116102445780631694505e1461036b57806318160ddd1461039557806321a9d82a146103bf57806323b872dd146103e957806327a14fc2146104255780632ba86bf21461044d57610287565b80630105d0fd1461028b57806302dbd8f8146102b557806306fdde03146102dd57806307980cb914610307578063095ea7b31461032f57610287565b3661028757005b5f80fd5b348015610296575f80fd5b5061029f610a89565b6040516102ac9190613bfe565b60405180910390f35b3480156102c0575f80fd5b506102db60048036038101906102d69190613c45565b610a8f565b005b3480156102e8575f80fd5b506102f1610bd1565b6040516102fe9190613d0d565b60405180910390f35b348015610312575f80fd5b5061032d60048036038101906103289190613d87565b610c61565b005b34801561033a575f80fd5b5061035560048036038101906103509190613db2565b610dc0565b6040516103629190613e0a565b60405180910390f35b348015610376575f80fd5b5061037f610ddd565b60405161038c9190613e7e565b60405180910390f35b3480156103a0575f80fd5b506103a9610e02565b6040516103b69190613bfe565b60405180910390f35b3480156103ca575f80fd5b506103d3610e0b565b6040516103e09190613e0a565b60405180910390f35b3480156103f4575f80fd5b5061040f600480360381019061040a9190613e97565b610e1d565b60405161041c9190613e0a565b60405180910390f35b348015610430575f80fd5b5061044b60048036038101906104469190613ee7565b610f37565b005b348015610458575f80fd5b506104616110a2565b60405161046e9190613e0a565b60405180910390f35b348015610482575f80fd5b5061048b6110b4565b6040516104989190613bfe565b60405180910390f35b3480156104ac575f80fd5b506104b56110ba565b6040516104c29190613f2d565b60405180910390f35b3480156104d6575f80fd5b506104f160048036038101906104ec9190613db2565b6110c2565b6040516104fe9190613e0a565b60405180910390f35b348015610512575f80fd5b5061052d60048036038101906105289190613db2565b611169565b005b34801561053a575f80fd5b5061054361120d565b6040516105509190613f55565b60405180910390f35b348015610564575f80fd5b5061056d611232565b60405161057a9190613e0a565b60405180910390f35b34801561058e575f80fd5b506105a960048036038101906105a49190613d87565b611245565b6040516105b69190613e0a565b60405180910390f35b3480156105ca575f80fd5b506105d3611297565b6040516105e09190613e0a565b60405180910390f35b3480156105f4575f80fd5b5061060f600480360381019061060a9190613f98565b6112a9565b005b34801561061c575f80fd5b506106256113f4565b6040516106329190613bfe565b60405180910390f35b348015610646575f80fd5b5061064f6113fa565b60405161065c9190613bfe565b60405180910390f35b348015610670575f80fd5b5061068b60048036038101906106869190613ee7565b611400565b005b348015610698575f80fd5b506106b360048036038101906106ae9190613c45565b61151e565b005b3480156106c0575f80fd5b506106c9611660565b6040516106d69190613e0a565b60405180910390f35b3480156106ea575f80fd5b506106f3611673565b6040516107009190613bfe565b60405180910390f35b348015610714575f80fd5b5061072f600480360381019061072a9190613d87565b611679565b60405161073c9190613bfe565b60405180910390f35b348015610750575f80fd5b506107596116be565b6040516107669190613f55565b60405180910390f35b34801561077a575f80fd5b506107836116e4565b6040516107909190613bfe565b60405180910390f35b3480156107a4575f80fd5b506107bf60048036038101906107ba9190613d87565b6116ea565b005b3480156107cc575f80fd5b506107d5611812565b6040516107e29190613f55565b60405180910390f35b3480156107f6575f80fd5b506107ff61183a565b60405161080c9190613d0d565b60405180910390f35b348015610820575f80fd5b506108296118ca565b005b348015610836575f80fd5b50610851600480360381019061084c9190613db2565b61197c565b60405161085e9190613e0a565b60405180910390f35b348015610872575f80fd5b5061088d60048036038101906108889190613d87565b611a62565b60405161089a9190613e0a565b60405180910390f35b3480156108ae575f80fd5b506108c960048036038101906108c49190613db2565b611ab4565b6040516108d69190613e0a565b60405180910390f35b3480156108ea575f80fd5b506108f3611ad1565b6040516109009190613bfe565b60405180910390f35b348015610914575f80fd5b5061092f600480360381019061092a9190613d87565b611ad7565b005b34801561093c575f80fd5b5061095760048036038101906109529190613fc3565b611d08565b005b348015610964575f80fd5b5061097f600480360381019061097a9190613fc3565b611ed3565b005b34801561098c575f80fd5b5061099561210c565b6040516109a29190613bfe565b60405180910390f35b3480156109b6575f80fd5b506109d160048036038101906109cc9190614001565b612112565b6040516109de9190613bfe565b60405180910390f35b3480156109f2575f80fd5b50610a0d6004803603810190610a089190613f98565b612194565b005b348015610a1a575f80fd5b50610a2361229c565b604051610a309190613bfe565b60405180910390f35b348015610a44575f80fd5b50610a5f6004803603810190610a5a9190613d87565b6122a2565b005b348015610a6c575f80fd5b50610a876004803603810190610a829190613d87565b612464565b005b60195481565b610a976126cb565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1c90614089565b60405180910390fd5b81600a8190555080600c81905550600c54600a54610b4391906140d4565b600e81905550600f54600e541115610b90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8790614177565b60405180910390fd5b7f12dd4f8337f0c236c7994706854cca8cd53921c0032cb0fba8cdb797e73f67c6600a54600c54604051610bc5929190614195565b60405180910390a15050565b606060038054610be0906141e9565b80601f0160208091040260200160405190810160405280929190818152602001828054610c0c906141e9565b8015610c575780601f10610c2e57610100808354040283529160200191610c57565b820191905f5260205f20905b815481529060010190602001808311610c3a57829003601f168201915b5050505050905090565b610c696126cb565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cee90614089565b60405180910390fd5b601360029054906101000a900460ff1615610d47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3e90614263565b60405180910390fd5b6001601360026101000a81548160ff0219169083151502179055506001601360016101000a81548160ff0219169083151502179055508060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f610dd3610dcc6126cb565b84846126d2565b6001905092915050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600254905090565b60155f9054906101000a900460ff1681565b5f8060015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610e656126cb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610f205782811015610f0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f02906142f1565b60405180910390fd5b610f1f85610f176126cb565b8584036126d2565b5b610f2b858585612895565b60019150509392505050565b610f3f6126cb565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc490614089565b60405180910390fd5b6064610fd76110ba565b600a610fe3919061443e565b610feb610e02565b610ff591906144b5565b610fff91906144b5565b811015611041576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103890614555565b60405180910390fd5b6110496110ba565b600a611055919061443e565b816110609190614573565b6016819055507f21bc0ea3406acb92d4449ab33befb4ae82f873a22f3b6cf0e466b2710beb59426016546040516110979190613bfe565b60405180910390a150565b60185f9054906101000a900460ff1681565b600a5481565b5f6009905090565b5f61115f6110ce6126cb565b848460015f6110db6126cb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461115a91906140d4565b6126d2565b6001905092915050565b6111716126cb565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f690614089565b60405180910390fd5b6112098282613190565b5050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601360029054906101000a900460ff1681565b5f60085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60115f9054906101000a900460ff1681565b6112b16126cb565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461133f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133690614089565b60405180910390fd5b60185f9054906101000a900460ff16151581151503611393576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138a90614624565b60405180910390fd5b8060185f6101000a81548160ff0219169083151502179055507fe81be35e61864c26afd7a4655e99f321378d0aaae1e5af8ee67b658a7460f3cf60185f9054906101000a900460ff166040516113e99190613e0a565b60405180910390a150565b601a5481565b600b5481565b6114086126cb565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611496576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148d90614089565b60405180910390fd5b600f548111156114db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d2906146b2565b60405180910390fd5b806010819055507f925fa17eb1bbdac8e18750276099046910212e51b0d15da024f67ce9fb25cc9b6010546040516115139190613bfe565b60405180910390a150565b6115266126cb565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ab90614089565b60405180910390fd5b8160098190555080600b81905550600b546009546115d291906140d4565b600d81905550600f54600d54111561161f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161690614177565b60405180910390fd5b7fccd61cb5df2cb048d1a7af40a431d6f247af01b6cf048f7a3f2aa9d313e2bc50600954600b54604051611654929190614195565b60405180910390a15050565b601360019054906101000a900460ff1681565b60105481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b601160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60095481565b6116f26126cb565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611780576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177790614089565b60405180910390fd5b60115f9054906101000a900460ff16156117cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c69061471a565b60405180910390fd5b8060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611849906141e9565b80601f0160208091040260200160405190810160405280929190818152602001828054611875906141e9565b80156118c05780601f10611897576101008083540402835291602001916118c0565b820191905f5260205f20905b8154815290600101906020018083116118a357829003601f168201915b5050505050905090565b6118d26126cb565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611960576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195790614089565b60405180910390fd5b600160115f6101000a81548160ff021916908315150217905550565b5f8060015f6119896126cb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611a43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3a906147a8565b60405180910390fd5b611a57611a4e6126cb565b858584036126d2565b600191505092915050565b5f60145f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f611ac7611ac06126cb565b8484612895565b6001905092915050565b60165481565b611adf6126cb565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6490614089565b60405180910390fd5b601160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611bfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf490614836565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c62906148c4565b60405180910390fd5b80601160016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fa964ba5c52d7e7bfcae4fb1ae4db9f211756d0e618e85fac5283b882a39e7a0b601160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051611cfd9190613f55565b60405180910390a150565b611d106126cb565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9590614089565b60405180910390fd5b80151560085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16151503611e2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2490614952565b60405180910390fd5b8060085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611ec79190613e0a565b60405180910390a25050565b611edb6126cb565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6090614089565b60405180910390fd5b80151560145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16151503611ff8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fef906149e0565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612066576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205d90614a48565b60405180910390fd5b8060145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f1d9a11e204b58ad56c619c61600e42167624659d218f0143f1f64956b0daae6c826040516121009190613e0a565b60405180910390a25050565b600c5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b61219c6126cb565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461222a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222190614089565b60405180910390fd5b801515601360019054906101000a900460ff1615150361227f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227690614ad6565b60405180910390fd5b80601360016101000a81548160ff02191690831515021790555050565b60125481565b6122aa6126cb565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612338576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232f90614089565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036123a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239d90614b64565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61246c6126cb565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f190614089565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612568576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255f90614bf2565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036125ca576125c4473373ffffffffffffffffffffffffffffffffffffffff166132e790919063ffffffff16565b506126c8565b5f8190505f8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016126089190613f55565b602060405180830381865afa158015612623573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126479190614c24565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401612684929190614c4f565b6020604051808303815f875af11580156126a0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126c49190614c8a565b5050505b50565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612740576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273790614d25565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a590614db3565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516128889190613bfe565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612903576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128fa90614e41565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612971576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296890614ecf565b60405180910390fd5b601360029054906101000a900460ff16806129d2575060085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b80612a23575060085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612a62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5990614f37565b60405180910390fd5b5f8103612a7957612a7483835f61339d565b61318b565b60185f9054906101000a900460ff1615612cc55760075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480612b34575060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b8015612b87575060175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612bda575060175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612cc45760075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612c7d57601954811115612c78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c6f90614fc5565b60405180910390fd5b612cc3565b601a54811115612cc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb990614fc5565b60405180910390fd5b5b5b5b5f612ccf30611679565b90505f6012548210159050808015612cf3575060135f9054906101000a900460ff16155b8015612d4b575060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b8015612d6557505f600e54600d54612d6391906140d4565b115b8015612d7d5750601360019054906101000a900460ff165b15612e4c57600160135f6101000a81548160ff0219169083151502179055505f600e54600d54612dad91906140d4565b90505f600a54600954612dc091906140d4565b90505f600c54600b54612dd391906140d4565b90505f821115612e02575f838387612deb9190614573565b612df591906144b5565b9050612e0081613612565b505b5f811115612e2f575f838287612e189190614573565b612e2291906144b5565b9050612e2d81613938565b505b5f60135f6101000a81548160ff0219169083151502179055505050505b5f60085f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612ee8575060085f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b80612efe575060135f9054906101000a900460ff165b15612f0b575f9050612fcf565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1603612f6957600d549050612fce565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603612fc757600e549050612fcd565b60105490505b5b5b5f81111561300d575f60648286612fe69190614573565b612ff091906144b5565b90508085612ffe9190614fe3565b945061300b87308361339d565b505b60155f9054906101000a900460ff161561317c5760145f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161580156130bf575060145f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015613118575060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b1561317b575f61312786611679565b9050601654858261313891906140d4565b1115613179576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161317090615086565b60405180910390fd5b505b5b61318786868661339d565b5050505b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036131fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131f5906150ee565b60405180910390fd5b6132095f8383613bdc565b8060025f82825461321a91906140d4565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461326c91906140d4565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516132d09190613bfe565b60405180910390a36132e35f8383613be1565b5050565b5f8147101561332b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161332290615156565b60405180910390fd5b5f8373ffffffffffffffffffffffffffffffffffffffff1683604051613350906151a1565b5f6040518083038185875af1925050503d805f811461338a576040519150601f19603f3d011682016040523d82523d5f602084013e61338f565b606091505b505090508091505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361340b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161340290614e41565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613479576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161347090614ecf565b60405180910390fd5b613484838383613bdc565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015613507576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134fe90615225565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461359591906140d4565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516135f99190613bfe565b60405180910390a361360c848484613be1565b50505050565b5f60028261362091906144b5565b90505f818361362f9190614fe3565b90505f4790505f600267ffffffffffffffff81111561365157613650615243565b5b60405190808252806020026020018201604052801561367f5781602001602082028036833780820191505090505b50905030815f8151811061369657613695615270565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561373a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061375e91906152b1565b8160018151811061377257613771615270565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947855f8430426040518663ffffffff1660e01b815260040161380e9594939291906153cc565b5f604051808303815f87803b158015613825575f80fd5b505af1158015613837573d5f803e3d5ffd5b505050505f82476138489190614fe3565b905060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230875f8061dead426040518863ffffffff1660e01b81526004016138b196959493929190615424565b60606040518083038185885af11580156138cd573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906138f29190615483565b5050507f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561858286604051613928939291906154d3565b60405180910390a1505050505050565b5f4790505f600267ffffffffffffffff81111561395857613957615243565b5b6040519080825280602002602001820160405280156139865781602001602082028036833780820191505090505b50905030815f8151811061399d5761399c615270565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613a41573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a6591906152b1565b81600181518110613a7957613a78615270565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947845f8430426040518663ffffffff1660e01b8152600401613b159594939291906153cc565b5f604051808303815f87803b158015613b2c575f80fd5b505af1158015613b3e573d5f803e3d5ffd5b505050505f8247613b4f9190614fe3565b9050613b9c81601160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166132e790919063ffffffff16565b507f957ad1fc6d4d41da6d1a8d37303289ef3c4b78e0285ff5df1e12070ef0e629998482604051613bce929190614195565b60405180910390a150505050565b505050565b505050565b5f819050919050565b613bf881613be6565b82525050565b5f602082019050613c115f830184613bef565b92915050565b5f80fd5b613c2481613be6565b8114613c2e575f80fd5b50565b5f81359050613c3f81613c1b565b92915050565b5f8060408385031215613c5b57613c5a613c17565b5b5f613c6885828601613c31565b9250506020613c7985828601613c31565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015613cba578082015181840152602081019050613c9f565b5f8484015250505050565b5f601f19601f8301169050919050565b5f613cdf82613c83565b613ce98185613c8d565b9350613cf9818560208601613c9d565b613d0281613cc5565b840191505092915050565b5f6020820190508181035f830152613d258184613cd5565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613d5682613d2d565b9050919050565b613d6681613d4c565b8114613d70575f80fd5b50565b5f81359050613d8181613d5d565b92915050565b5f60208284031215613d9c57613d9b613c17565b5b5f613da984828501613d73565b91505092915050565b5f8060408385031215613dc857613dc7613c17565b5b5f613dd585828601613d73565b9250506020613de685828601613c31565b9150509250929050565b5f8115159050919050565b613e0481613df0565b82525050565b5f602082019050613e1d5f830184613dfb565b92915050565b5f819050919050565b5f613e46613e41613e3c84613d2d565b613e23565b613d2d565b9050919050565b5f613e5782613e2c565b9050919050565b5f613e6882613e4d565b9050919050565b613e7881613e5e565b82525050565b5f602082019050613e915f830184613e6f565b92915050565b5f805f60608486031215613eae57613ead613c17565b5b5f613ebb86828701613d73565b9350506020613ecc86828701613d73565b9250506040613edd86828701613c31565b9150509250925092565b5f60208284031215613efc57613efb613c17565b5b5f613f0984828501613c31565b91505092915050565b5f60ff82169050919050565b613f2781613f12565b82525050565b5f602082019050613f405f830184613f1e565b92915050565b613f4f81613d4c565b82525050565b5f602082019050613f685f830184613f46565b92915050565b613f7781613df0565b8114613f81575f80fd5b50565b5f81359050613f9281613f6e565b92915050565b5f60208284031215613fad57613fac613c17565b5b5f613fba84828501613f84565b91505092915050565b5f8060408385031215613fd957613fd8613c17565b5b5f613fe685828601613d73565b9250506020613ff785828601613f84565b9150509250929050565b5f806040838503121561401757614016613c17565b5b5f61402485828601613d73565b925050602061403585828601613d73565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f614073602083613c8d565b915061407e8261403f565b602082019050919050565b5f6020820190508181035f8301526140a081614067565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6140de82613be6565b91506140e983613be6565b9250828201905080821115614101576141006140a7565b5b92915050565b7f546f74616c20466565732063616e6e6f742065786365656420746865206d61785f8201527f696d756d00000000000000000000000000000000000000000000000000000000602082015250565b5f614161602483613c8d565b915061416c82614107565b604082019050919050565b5f6020820190508181035f83015261418e81614155565b9050919050565b5f6040820190506141a85f830185613bef565b6141b56020830184613bef565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061420057607f821691505b602082108103614213576142126141bc565b5b50919050565b7f54726164696e6720616c726561647920656e61626c65642e00000000000000005f82015250565b5f61424d601883613c8d565b915061425882614219565b602082019050919050565b5f6020820190508181035f83015261427a81614241565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f6142db602883613c8d565b91506142e682614281565b604082019050919050565b5f6020820190508181035f830152614308816142cf565b9050919050565b5f8160011c9050919050565b5f808291508390505b6001851115614364578086048111156143405761433f6140a7565b5b600185161561434f5780820291505b808102905061435d8561430f565b9450614324565b94509492505050565b5f8261437c5760019050614437565b81614389575f9050614437565b816001811461439f57600281146143a9576143d8565b6001915050614437565b60ff8411156143bb576143ba6140a7565b5b8360020a9150848211156143d2576143d16140a7565b5b50614437565b5060208310610133831016604e8410600b841016171561440d5782820a905083811115614408576144076140a7565b5b614437565b61441a848484600161431b565b92509050818404811115614431576144306140a7565b5b81810290505b9392505050565b5f61444882613be6565b915061445383613f12565b92506144807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461436d565b905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6144bf82613be6565b91506144ca83613be6565b9250826144da576144d9614488565b5b828204905092915050565b7f4d61782077616c6c65742070657263656e746167652063616e6e6f74206265205f8201527f6c6f776572207468616e20312500000000000000000000000000000000000000602082015250565b5f61453f602d83613c8d565b915061454a826144e5565b604082019050919050565b5f6020820190508181035f83015261456c81614533565b9050919050565b5f61457d82613be6565b915061458883613be6565b925082820261459681613be6565b915082820484148315176145ad576145ac6140a7565b5b5092915050565b7f4d6178207472616e73616374696f6e206c696d697420697320616c72656164795f8201527f2073657420746f20746861742073746174650000000000000000000000000000602082015250565b5f61460e603283613c8d565b9150614619826145b4565b604082019050919050565b5f6020820190508181035f83015261463b81614602565b9050919050565b7f57616c6c657420746f2057616c6c6574205472616e73666572204665652063615f8201527f6e6e6f742065786365656420746865206d6178696d756d000000000000000000602082015250565b5f61469c603783613c8d565b91506146a782614642565b604082019050919050565b5f6020820190508181035f8301526146c981614690565b9050919050565b7f43616e6e6f74206368616e6765207468652070616972000000000000000000005f82015250565b5f614704601683613c8d565b915061470f826146d0565b602082019050919050565b5f6020820190508181035f830152614731816146f8565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f614792602583613c8d565b915061479d82614738565b604082019050919050565b5f6020820190508181035f8301526147bf81614786565b9050919050565b7f4d61726b6574696e672077616c6c657420697320616c726561647920746861745f8201527f2061646472657373000000000000000000000000000000000000000000000000602082015250565b5f614820602883613c8d565b915061482b826147c6565b604082019050919050565b5f6020820190508181035f83015261484d81614814565b9050919050565b7f4d61726b6574696e672077616c6c65742063616e6e6f7420626520746865207a5f8201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b5f6148ae602b83613c8d565b91506148b982614854565b604082019050919050565b5f6020820190508181035f8301526148db816148a2565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f66205f8201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b5f61493c602a83613c8d565b9150614947826148e2565b604082019050919050565b5f6020820190508181035f83015261496981614930565b9050919050565b7f4163636f756e7420697320616c72656164792073657420746f207468617420735f8201527f7461746500000000000000000000000000000000000000000000000000000000602082015250565b5f6149ca602483613c8d565b91506149d582614970565b604082019050919050565b5f6020820190508181035f8301526149f7816149be565b9050919050565b7f43616e277420736574207468697320616464726573732e0000000000000000005f82015250565b5f614a32601783613c8d565b9150614a3d826149fe565b602082019050919050565b5f6020820190508181035f830152614a5f81614a26565b9050919050565b7f73776170456e61626c656420616c7265616479206174207468697320737461745f8201527f652e000000000000000000000000000000000000000000000000000000000000602082015250565b5f614ac0602283613c8d565b9150614acb82614a66565b604082019050919050565b5f6020820190508181035f830152614aed81614ab4565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f614b4e602683613c8d565b9150614b5982614af4565b604082019050919050565b5f6020820190508181035f830152614b7b81614b42565b9050919050565b7f4f776e65722063616e6e6f7420636c61696d20636f6e747261637427732062615f8201527f6c616e6365206f6620697473206f776e20746f6b656e73000000000000000000602082015250565b5f614bdc603783613c8d565b9150614be782614b82565b604082019050919050565b5f6020820190508181035f830152614c0981614bd0565b9050919050565b5f81519050614c1e81613c1b565b92915050565b5f60208284031215614c3957614c38613c17565b5b5f614c4684828501614c10565b91505092915050565b5f604082019050614c625f830185613f46565b614c6f6020830184613bef565b9392505050565b5f81519050614c8481613f6e565b92915050565b5f60208284031215614c9f57614c9e613c17565b5b5f614cac84828501614c76565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f614d0f602483613c8d565b9150614d1a82614cb5565b604082019050919050565b5f6020820190508181035f830152614d3c81614d03565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f614d9d602283613c8d565b9150614da882614d43565b604082019050919050565b5f6020820190508181035f830152614dca81614d91565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614e2b602583613c8d565b9150614e3682614dd1565b604082019050919050565b5f6020820190508181035f830152614e5881614e1f565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f614eb9602383613c8d565b9150614ec482614e5f565b604082019050919050565b5f6020820190508181035f830152614ee681614ead565b9050919050565b7f54726164696e67206e6f742079657420656e61626c65642100000000000000005f82015250565b5f614f21601883613c8d565b9150614f2c82614eed565b602082019050919050565b5f6020820190508181035f830152614f4e81614f15565b9050919050565b7f416e74695768616c653a205472616e7366657220616d6f756e742065786365655f8201527f647320746865206d61785472616e73616374696f6e416d6f756e740000000000602082015250565b5f614faf603b83613c8d565b9150614fba82614f55565b604082019050919050565b5f6020820190508181035f830152614fdc81614fa3565b9050919050565b5f614fed82613be6565b9150614ff883613be6565b92508282039050818111156150105761500f6140a7565b5b92915050565b7f4d617857616c6c65743a20526563697069656e742065786365656473207468655f8201527f206d617857616c6c6574416d6f756e7400000000000000000000000000000000602082015250565b5f615070603083613c8d565b915061507b82615016565b604082019050919050565b5f6020820190508181035f83015261509d81615064565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f6150d8601f83613c8d565b91506150e3826150a4565b602082019050919050565b5f6020820190508181035f830152615105816150cc565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e63650000005f82015250565b5f615140601d83613c8d565b915061514b8261510c565b602082019050919050565b5f6020820190508181035f83015261516d81615134565b9050919050565b5f81905092915050565b50565b5f61518c5f83615174565b91506151978261517e565b5f82019050919050565b5f6151ab82615181565b9150819050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f61520f602683613c8d565b915061521a826151b5565b604082019050919050565b5f6020820190508181035f83015261523c81615203565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f815190506152ab81613d5d565b92915050565b5f602082840312156152c6576152c5613c17565b5b5f6152d38482850161529d565b91505092915050565b5f819050919050565b5f6152ff6152fa6152f5846152dc565b613e23565b613be6565b9050919050565b61530f816152e5565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61534781613d4c565b82525050565b5f615358838361533e565b60208301905092915050565b5f602082019050919050565b5f61537a82615315565b615384818561531f565b935061538f8361532f565b805f5b838110156153bf5781516153a6888261534d565b97506153b183615364565b925050600181019050615392565b5085935050505092915050565b5f60a0820190506153df5f830188613bef565b6153ec6020830187615306565b81810360408301526153fe8186615370565b905061540d6060830185613f46565b61541a6080830184613bef565b9695505050505050565b5f60c0820190506154375f830189613f46565b6154446020830188613bef565b6154516040830187615306565b61545e6060830186615306565b61546b6080830185613f46565b61547860a0830184613bef565b979650505050505050565b5f805f6060848603121561549a57615499613c17565b5b5f6154a786828701614c10565b93505060206154b886828701614c10565b92505060406154c986828701614c10565b9150509250925092565b5f6060820190506154e65f830186613bef565b6154f36020830185613bef565b6155006040830184613bef565b94935050505056fea2646970667358221220a0485e233975812a74486f09dc9c926974449337953acbae919123c6c3712f0d64736f6c63430008170033

Deployed Bytecode Sourcemap

15550:14532:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29403:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21321:444;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10835:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22654:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11589:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15633:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11155:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28094:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11926:573;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28389:340;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29354:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15838:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11055:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12507:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22522:89;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15681:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22619:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20750:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16128:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29768:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29449:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15881:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21773:360;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20883:430;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16270:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16074:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11454:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16156:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15798:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20199:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9962:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10943:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20371:73;;;;;;;;;;;;;:::i;:::-;;12730:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29136:145;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11271:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28137:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22141:379;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20452:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28737:391;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15921:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11767:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26297:179;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16196:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10178:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19726:465;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29403:39;;;;:::o;21321:444::-;10099:12;:10;:12::i;:::-;10089:22;;:6;;;;;;;;;;;:22;;;10081:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21454:19:::1;21433:18;:40;;;;21505:19;21484:18;:40;;;;21579:18;;21558;;:39;;;;:::i;:::-;21537:16;:60;;;;21638:6;;21618:16;;:26;;21610:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;21703:54;21718:18;;21738;;21703:54;;;;;;;:::i;:::-;;;;;;;;21321:444:::0;;:::o;10835:100::-;10889:13;10922:5;10915:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10835:100;:::o;22654:238::-;10099:12;:10;:12::i;:::-;10089:22;;:6;;;;;;;;;;;:22;;;10081:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22739:14:::1;;;;;;;;;;;22738:15;22730:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;22810:4;22793:14;;:21;;;;;;;;;;;;;;;;;;22839:4;22825:11;;:18;;;;;;;;;;;;;;;;;;22870:14;22854:13;;:30;;;;;;;;;;;;;;;;;;22654:238:::0;:::o;11589:169::-;11672:4;11689:39;11698:12;:10;:12::i;:::-;11712:7;11721:6;11689:8;:39::i;:::-;11746:4;11739:11;;11589:169;;;;:::o;15633:41::-;;;;;;;;;;;;;:::o;11155:108::-;11216:7;11243:12;;11236:19;;11155:108;:::o;28094:36::-;;;;;;;;;;;;;:::o;11926:573::-;12066:4;12083:24;12110:11;:19;12122:6;12110:19;;;;;;;;;;;;;;;:33;12130:12;:10;:12::i;:::-;12110:33;;;;;;;;;;;;;;;;12083:60;;12178:17;12158:16;:37;12154:265;;12240:6;12220:16;:26;;12212:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;12335:57;12344:6;12352:12;:10;:12::i;:::-;12385:6;12366:16;:25;12335:8;:57::i;:::-;12154:265;12431:36;12441:6;12449:9;12460:6;12431:9;:36::i;:::-;12487:4;12480:11;;;11926:573;;;;;:::o;28389:340::-;10099:12;:10;:12::i;:::-;10089:22;;:6;;;;;;;;;;;:22;;;10081:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28540:3:::1;28525:10;:8;:10::i;:::-;28519:2;:16;;;;:::i;:::-;28502:13;:11;:13::i;:::-;:34;;;;:::i;:::-;28501:42;;;;:::i;:::-;28481:16;:62;;28473:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;28648:10;:8;:10::i;:::-;28642:2;:16;;;;:::i;:::-;28622;:37;;;;:::i;:::-;28604:15;:55;;;;28677:44;28705:15;;28677:44;;;;;;:::i;:::-;;;;;;;;28389:340:::0;:::o;29354:42::-;;;;;;;;;;;;;:::o;15838:34::-;;;;:::o;11055:92::-;11113:5;11138:1;11131:8;;11055:92;:::o;12507:215::-;12595:4;12612:80;12621:12;:10;:12::i;:::-;12635:7;12681:10;12644:11;:25;12656:12;:10;:12::i;:::-;12644:25;;;;;;;;;;;;;;;:34;12670:7;12644:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;12612:8;:80::i;:::-;12710:4;12703:11;;12507:215;;;;:::o;22522:89::-;10099:12;:10;:12::i;:::-;10089:22;;:6;;;;;;;;;;;:22;;;10081:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22590:17:::1;22596:2;22600:6;22590:5;:17::i;:::-;22522:89:::0;;:::o;15681:46::-;;;;;;;;;;;;;:::o;22619:26::-;;;;;;;;;;;;;:::o;20750:125::-;20815:4;20839:19;:28;20859:7;20839:28;;;;;;;;;;;;;;;;;;;;;;;;;20832:35;;20750:125;;;:::o;16128:19::-;;;;;;;;;;;;;:::o;29768:311::-;10099:12;:10;:12::i;:::-;10089:22;;:6;;;;;;;;;;;:22;;;10081:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29867:26:::1;;;;;;;;;;;29857:36;;:6;:36;;::::0;29849:99:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;29988:6;29959:26;;:35;;;;;;;;;;;;;;;;;;30012:59;30044:26;;;;;;;;;;;30012:59;;;;;;:::i;:::-;;;;;;;;29768:311:::0;:::o;29449:40::-;;;;:::o;15881:33::-;;;;:::o;21773:360::-;10099:12;:10;:12::i;:::-;10089:22;;:6;;;;;;;;;;;:22;;;10081:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21918:6:::1;;21888:26;:36;;21880:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;22023:26;21995:25;:54;;;;22067:58;22099:25;;22067:58;;;;;;:::i;:::-;;;;;;;;21773:360:::0;:::o;20883:430::-;10099:12;:10;:12::i;:::-;10089:22;;:6;;;;;;;;;;;:22;;;10081:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21012:18:::1;20992:17;:38;;;;21061:18;21041:17;:38;;;;21132:17;;21112;;:37;;;;:::i;:::-;21092:15;:57;;;;21189:6;;21170:15;;:25;;21162:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;21254:51;21268:17;;21287;;21254:51;;;;;;;:::i;:::-;;;;;;;;20883:430:::0;;:::o;16270:26::-;;;;;;;;;;;;;:::o;16074:41::-;;;;:::o;11454:127::-;11528:7;11555:9;:18;11565:7;11555:18;;;;;;;;;;;;;;;;11548:25;;11454:127;;;:::o;16156:31::-;;;;;;;;;;;;;:::o;15798:33::-;;;;:::o;20199:164::-;10099:12;:10;:12::i;:::-;10089:22;;:6;;;;;;;;;;;:22;;;10081:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20280:7:::1;;;;;;;;;;;20279:8;20271:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;20341:14;20325:13;;:30;;;;;;;;;;;;;;;;;;20199:164:::0;:::o;9962:79::-;10000:7;10027:6;;;;;;;;;;;10020:13;;9962:79;:::o;10943:104::-;10999:13;11032:7;11025:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10943:104;:::o;20371:73::-;10099:12;:10;:12::i;:::-;10089:22;;:6;;;;;;;;;;;:22;;;10081:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20432:4:::1;20422:7;;:14;;;;;;;;;;;;;;;;;;20371:73::o:0;12730:413::-;12823:4;12840:24;12867:11;:25;12879:12;:10;:12::i;:::-;12867:25;;;;;;;;;;;;;;;:34;12893:7;12867:34;;;;;;;;;;;;;;;;12840:61;;12940:15;12920:16;:35;;12912:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;13033:67;13042:12;:10;:12::i;:::-;13056:7;13084:15;13065:16;:34;13033:8;:67::i;:::-;13131:4;13124:11;;;12730:413;;;;:::o;29136:145::-;29211:4;29235:29;:38;29265:7;29235:38;;;;;;;;;;;;;;;;;;;;;;;;;29228:45;;29136:145;;;:::o;11271:175::-;11357:4;11374:42;11384:12;:10;:12::i;:::-;11398:9;11409:6;11374:9;:42::i;:::-;11434:4;11427:11;;11271:175;;;;:::o;28137:30::-;;;;:::o;22141:379::-;10099:12;:10;:12::i;:::-;10089:22;;:6;;;;;;;;;;;:22;;;10081:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22255:15:::1;;;;;;;;;;;22235:35;;:16;:35;;::::0;22227:87:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22361:1;22333:30;;:16;:30;;::::0;22325:85:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22439:16;22421:15;;:34;;;;;;;;;;;;;;;;;;22473:39;22496:15;;;;;;;;;;;22473:39;;;;;;:::i;:::-;;;;;;;;22141:379:::0;:::o;20452:290::-;10099:12;:10;:12::i;:::-;10089:22;;:6;;;;;;;;;;;:22;;;10081:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20578:8:::1;20546:40;;:19;:28;20566:7;20546:28;;;;;;;;;;;;;;;;;;;;;;;;;:40;;::::0;20538:94:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;20674:8;20643:19;:28;20663:7;20643:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;20716:7;20700:34;;;20725:8;20700:34;;;;;;:::i;:::-;;;;;;;;20452:290:::0;;:::o;28737:391::-;10099:12;:10;:12::i;:::-;10089:22;;:6;;;;;;;;;;;:22;;;10081:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28879:7:::1;28837:49;;:29;:38;28867:7;28837:38;;;;;;;;;;;;;;;;;;;;;;;;;:49;;::::0;28828:98:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;28964:4;28945:24;;:7;:24;;::::0;28937:60:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;29051:7;29010:29;:38;29040:7;29010:38;;;;;;;;;;;;;;;;:48;;;;;;;;;;;;;;;;;;29103:7;29076:44;;;29112:7;29076:44;;;;;;:::i;:::-;;;;;;;;28737:391:::0;;:::o;15921:34::-;;;;:::o;11767:151::-;11856:7;11883:11;:18;11895:5;11883:18;;;;;;;;;;;;;;;:27;11902:7;11883:27;;;;;;;;;;;;;;;;11876:34;;11767:151;;;;:::o;26297:179::-;10099:12;:10;:12::i;:::-;10089:22;;:6;;;;;;;;;;;:22;;;10081:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26388:8:::1;26373:23;;:11;;;;;;;;;;;:23;;::::0;26365:70:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;26460:8;26446:11;;:22;;;;;;;;;;;;;;;;;;26297:179:::0;:::o;16196:34::-;;;;:::o;10178:244::-;10099:12;:10;:12::i;:::-;10089:22;;:6;;;;;;;;;;;:22;;;10081:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;10287:1:::1;10267:22;;:8;:22;;::::0;10259:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;10377:8;10348:38;;10369:6;;;;;;;;;;;10348:38;;;;;;;;;;;;10406:8;10397:6;;:17;;;;;;;;;;;;;;;;;;10178:244:::0;:::o;19726:465::-;10099:12;:10;:12::i;:::-;10089:22;;:6;;;;;;;;;;;:22;;;10081:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19822:4:::1;19805:22;;:5;:22;;::::0;19797:90:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;19919:3;19902:21;;:5;:21;;::::0;19898:127:::1;;19940:52;19970:21;19948:10;19940:29;;;;:52;;;;:::i;:::-;;20007:7;;19898:127;20035:17;20062:5;20035:33;;20079:15;20097:10;:20;;;20126:4;20097:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20079:53;;20143:10;:19;;;20163:10;20175:7;20143:40;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19786:405;;10159:1;19726:465:::0;:::o;9285:98::-;9338:7;9365:10;9358:17;;9285:98;:::o;14898:380::-;15051:1;15034:19;;:5;:19;;;15026:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15132:1;15113:21;;:7;:21;;;15105:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15216:6;15186:11;:18;15198:5;15186:18;;;;;;;;;;;;;;;:27;15205:7;15186:27;;;;;;;;;;;;;;;:36;;;;15254:7;15238:32;;15247:5;15238:32;;;15263:6;15238:32;;;;;;:::i;:::-;;;;;;;;14898:380;;;:::o;22906:3383::-;23019:1;23003:18;;:4;:18;;;22995:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23096:1;23082:16;;:2;:16;;;23074:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;23157:14;;;;;;;;;;;:43;;;;23175:19;:25;23195:4;23175:25;;;;;;;;;;;;;;;;;;;;;;;;;23157:43;:70;;;;23204:19;:23;23224:2;23204:23;;;;;;;;;;;;;;;;;;;;;;;;;23157:70;23149:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;23290:1;23280:6;:11;23276:93;;23308:28;23324:4;23330:2;23334:1;23308:15;:28::i;:::-;23351:7;;23276:93;23385:26;;;;;;;;;;;23381:752;;;23451:13;;;;;;;;;;;23443:21;;:4;:21;;;:44;;;;23474:13;;;;;;;;;;;23468:19;;:2;:19;;;23443:44;23442:99;;;;;23510:25;:31;23536:4;23510:31;;;;;;;;;;;;;;;;;;;;;;;;;23509:32;23442:99;:151;;;;;23564:25;:29;23590:2;23564:29;;;;;;;;;;;;;;;;;;;;;;;;;23563:30;23442:151;23438:684;;;23640:13;;;;;;;;;;;23632:21;;:4;:21;;;23628:479;;23722:23;;23712:6;:33;;23678:180;;;;;;;;;;;;:::i;:::-;;;;;;;;;23628:479;;;23951:24;;23941:6;:34;;23907:180;;;;;;;;;;;;:::i;:::-;;;;;;;;;23628:479;23438:684;23381:752;24139:28;24170:24;24188:4;24170:9;:24::i;:::-;24139:55;;24207:12;24246:18;;24222:20;:42;;24207:57;;24281:7;:33;;;;;24306:8;;;;;;;;;;;24305:9;24281:33;:69;;;;;24337:13;;;;;;;;;;;24331:19;;:2;:19;;;24281:69;:124;;;;;24404:1;24385:16;;24367:15;;:34;;;;:::i;:::-;:38;24281:124;:152;;;;;24422:11;;;;;;;;;;;24281:152;24277:895;;;24471:4;24460:8;;:15;;;;;;;;;;;;;;;;;;24492:16;24529;;24511:15;;:34;;;;:::i;:::-;24492:53;;24560:22;24605:18;;24585:17;;:38;;;;:::i;:::-;24560:63;;24638:22;24683:18;;24663:17;;:38;;;;:::i;:::-;24638:63;;24739:1;24722:14;:18;24718:183;;;24761:23;24827:8;24810:14;24787:20;:37;;;;:::i;:::-;:48;;;;:::i;:::-;24761:74;;24854:31;24869:15;24854:14;:31::i;:::-;24742:159;24718:183;24950:1;24933:14;:18;24929:189;;;24972:23;25038:8;25021:14;24998:20;:37;;;;:::i;:::-;:48;;;;:::i;:::-;24972:74;;25065:37;25086:15;25065:20;:37::i;:::-;24953:165;24929:189;25155:5;25144:8;;:16;;;;;;;;;;;;;;;;;;24445:727;;;24277:895;25184:18;25217:19;:25;25237:4;25217:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;25246:19;:23;25266:2;25246:23;;;;;;;;;;;;;;;;;;;;;;;;;25217:52;:64;;;;25273:8;;;;;;;;;;;25217:64;25213:357;;;25311:1;25298:14;;25213:357;;;25342:13;;;;;;;;;;;25334:21;;:4;:21;;;25330:240;;25385:15;;25372:28;;25330:240;;;25428:13;;;;;;;;;;;25422:19;;:2;:19;;;25418:152;;25471:16;;25458:29;;25418:152;;;25533:25;;25520:38;;25418:152;25330:240;25213:357;25599:1;25586:10;:14;25582:183;;;25617:12;25656:3;25642:10;25633:6;:19;;;;:::i;:::-;25632:27;;;;:::i;:::-;25617:42;;25692:4;25683:6;:13;;;;:::i;:::-;25674:22;;25711:42;25727:4;25741;25748;25711:15;:42::i;:::-;25602:163;25582:183;25781:21;;;;;;;;;;;25777:459;;;25834:29;:35;25864:4;25834:35;;;;;;;;;;;;;;;;;;;;;;;;;25833:36;:92;;;;;25892:29;:33;25922:2;25892:33;;;;;;;;;;;;;;;;;;;;;;;;;25891:34;25833:92;:132;;;;;25952:13;;;;;;;;;;;25946:19;;:2;:19;;;;25833:132;25829:396;;;26000:15;26019:13;26029:2;26019:9;:13::i;:::-;26000:32;;26101:15;;26091:6;26081:7;:16;;;;:::i;:::-;:35;;26051:158;;;;;;;;;;;;:::i;:::-;;;;;;;;;25981:244;25829:396;25777:459;26248:33;26264:4;26270:2;26274:6;26248:15;:33::i;:::-;22984:3305;;;22906:3383;;;;:::o;13892:399::-;13995:1;13976:21;;:7;:21;;;13968:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;14046:49;14075:1;14079:7;14088:6;14046:20;:49::i;:::-;14124:6;14108:12;;:22;;;;;;;:::i;:::-;;;;;;;;14163:6;14141:9;:18;14151:7;14141:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;14206:7;14185:37;;14202:1;14185:37;;;14215:6;14185:37;;;;;;:::i;:::-;;;;;;;;14235:48;14263:1;14267:7;14276:6;14235:19;:48::i;:::-;13892:399;;:::o;8979:266::-;9058:4;9107:6;9082:21;:31;;9074:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;9161:12;9179:9;:14;;9201:6;9179:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9160:52;;;9230:7;9223:14;;;8979:266;;;;:::o;13151:733::-;13309:1;13291:20;;:6;:20;;;13283:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;13393:1;13372:23;;:9;:23;;;13364:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13448:47;13469:6;13477:9;13488:6;13448:20;:47::i;:::-;13508:21;13532:9;:17;13542:6;13532:17;;;;;;;;;;;;;;;;13508:41;;13585:6;13568:13;:23;;13560:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;13706:6;13690:13;:22;13670:9;:17;13680:6;13670:17;;;;;;;;;;;;;;;:42;;;;13758:6;13734:9;:20;13744:9;13734:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;13799:9;13782:35;;13791:6;13782:35;;;13810:6;13782:35;;;;;;:::i;:::-;;;;;;;;13830:46;13850:6;13858:9;13869:6;13830:19;:46::i;:::-;13272:612;13151:733;;;:::o;26486:876::-;26545:12;26569:1;26560:6;:10;;;;:::i;:::-;26545:25;;26581:17;26610:4;26601:6;:13;;;;:::i;:::-;26581:33;;26627:22;26652:21;26627:46;;26686:21;26724:1;26710:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26686:40;;26755:4;26737;26742:1;26737:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;26781:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26771:4;26776:1;26771:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;26816:15;;;;;;;;;;;:66;;;26897:4;26916:1;26932:4;26959;26979:15;26816:179;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27016:18;27061:14;27037:21;:38;;;;:::i;:::-;27016:59;;27088:15;;;;;;;;;;;:31;;;27127:10;27161:4;27181:9;27205:1;27221;27245:6;27267:15;27088:205;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;27311:43;27326:4;27332:10;27344:9;27311:43;;;;;;;;:::i;:::-;;;;;;;;26534:828;;;;;26486:876;:::o;27370:647::-;27440:22;27465:21;27440:46;;27499:21;27537:1;27523:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27499:40;;27568:4;27550;27555:1;27550:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;27594:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27584:4;27589:1;27584:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;27629:15;;;;;;;;;;;:66;;;27710:11;27736:1;27752:4;27779;27799:15;27629:186;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27828:18;27873:14;27849:21;:38;;;;:::i;:::-;27828:59;;27900:46;27935:10;27908:15;;;;;;;;;;;27900:34;;;;:46;;;;:::i;:::-;;27964:45;27985:11;27998:10;27964:45;;;;;;;:::i;:::-;;;;;;;;27429:588;;;27370:647;:::o;15286:125::-;;;;:::o;15419:124::-;;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;523:117::-;632:1;629;622:12;769:122;842:24;860:5;842:24;:::i;:::-;835:5;832:35;822:63;;881:1;878;871:12;822:63;769:122;:::o;897:139::-;943:5;981:6;968:20;959:29;;997:33;1024:5;997:33;:::i;:::-;897:139;;;;:::o;1042:474::-;1110:6;1118;1167:2;1155:9;1146:7;1142:23;1138:32;1135:119;;;1173:79;;:::i;:::-;1135:119;1293:1;1318:53;1363:7;1354:6;1343:9;1339:22;1318:53;:::i;:::-;1308:63;;1264:117;1420:2;1446:53;1491:7;1482:6;1471:9;1467:22;1446:53;:::i;:::-;1436:63;;1391:118;1042:474;;;;;:::o;1522:99::-;1574:6;1608:5;1602:12;1592:22;;1522:99;;;:::o;1627:169::-;1711:11;1745:6;1740:3;1733:19;1785:4;1780:3;1776:14;1761:29;;1627:169;;;;:::o;1802:246::-;1883:1;1893:113;1907:6;1904:1;1901:13;1893:113;;;1992:1;1987:3;1983:11;1977:18;1973:1;1968:3;1964:11;1957:39;1929:2;1926:1;1922:10;1917:15;;1893:113;;;2040:1;2031:6;2026:3;2022:16;2015:27;1864:184;1802:246;;;:::o;2054:102::-;2095:6;2146:2;2142:7;2137:2;2130:5;2126:14;2122:28;2112:38;;2054:102;;;:::o;2162:377::-;2250:3;2278:39;2311:5;2278:39;:::i;:::-;2333:71;2397:6;2392:3;2333:71;:::i;:::-;2326:78;;2413:65;2471:6;2466:3;2459:4;2452:5;2448:16;2413:65;:::i;:::-;2503:29;2525:6;2503:29;:::i;:::-;2498:3;2494:39;2487:46;;2254:285;2162:377;;;;:::o;2545:313::-;2658:4;2696:2;2685:9;2681:18;2673:26;;2745:9;2739:4;2735:20;2731:1;2720:9;2716:17;2709:47;2773:78;2846:4;2837:6;2773:78;:::i;:::-;2765:86;;2545:313;;;;:::o;2864:126::-;2901:7;2941:42;2934:5;2930:54;2919:65;;2864:126;;;:::o;2996:96::-;3033:7;3062:24;3080:5;3062:24;:::i;:::-;3051:35;;2996:96;;;:::o;3098:122::-;3171:24;3189:5;3171:24;:::i;:::-;3164:5;3161:35;3151:63;;3210:1;3207;3200:12;3151:63;3098:122;:::o;3226:139::-;3272:5;3310:6;3297:20;3288:29;;3326:33;3353:5;3326:33;:::i;:::-;3226:139;;;;:::o;3371:329::-;3430:6;3479:2;3467:9;3458:7;3454:23;3450:32;3447:119;;;3485:79;;:::i;:::-;3447:119;3605:1;3630:53;3675:7;3666:6;3655:9;3651:22;3630:53;:::i;:::-;3620:63;;3576:117;3371:329;;;;:::o;3706:474::-;3774:6;3782;3831:2;3819:9;3810:7;3806:23;3802:32;3799:119;;;3837:79;;:::i;:::-;3799:119;3957:1;3982:53;4027:7;4018:6;4007:9;4003:22;3982:53;:::i;:::-;3972:63;;3928:117;4084:2;4110:53;4155:7;4146:6;4135:9;4131:22;4110:53;:::i;:::-;4100:63;;4055:118;3706:474;;;;;:::o;4186:90::-;4220:7;4263:5;4256:13;4249:21;4238:32;;4186:90;;;:::o;4282:109::-;4363:21;4378:5;4363:21;:::i;:::-;4358:3;4351:34;4282:109;;:::o;4397:210::-;4484:4;4522:2;4511:9;4507:18;4499:26;;4535:65;4597:1;4586:9;4582:17;4573:6;4535:65;:::i;:::-;4397:210;;;;:::o;4613:60::-;4641:3;4662:5;4655:12;;4613:60;;;:::o;4679:142::-;4729:9;4762:53;4780:34;4789:24;4807:5;4789:24;:::i;:::-;4780:34;:::i;:::-;4762:53;:::i;:::-;4749:66;;4679:142;;;:::o;4827:126::-;4877:9;4910:37;4941:5;4910:37;:::i;:::-;4897:50;;4827:126;;;:::o;4959:152::-;5035:9;5068:37;5099:5;5068:37;:::i;:::-;5055:50;;4959:152;;;:::o;5117:183::-;5230:63;5287:5;5230:63;:::i;:::-;5225:3;5218:76;5117:183;;:::o;5306:274::-;5425:4;5463:2;5452:9;5448:18;5440:26;;5476:97;5570:1;5559:9;5555:17;5546:6;5476:97;:::i;:::-;5306:274;;;;:::o;5586:619::-;5663:6;5671;5679;5728:2;5716:9;5707:7;5703:23;5699:32;5696:119;;;5734:79;;:::i;:::-;5696:119;5854:1;5879:53;5924:7;5915:6;5904:9;5900:22;5879:53;:::i;:::-;5869:63;;5825:117;5981:2;6007:53;6052:7;6043:6;6032:9;6028:22;6007:53;:::i;:::-;5997:63;;5952:118;6109:2;6135:53;6180:7;6171:6;6160:9;6156:22;6135:53;:::i;:::-;6125:63;;6080:118;5586:619;;;;;:::o;6211:329::-;6270:6;6319:2;6307:9;6298:7;6294:23;6290:32;6287:119;;;6325:79;;:::i;:::-;6287:119;6445:1;6470:53;6515:7;6506:6;6495:9;6491:22;6470:53;:::i;:::-;6460:63;;6416:117;6211:329;;;;:::o;6546:86::-;6581:7;6621:4;6614:5;6610:16;6599:27;;6546:86;;;:::o;6638:112::-;6721:22;6737:5;6721:22;:::i;:::-;6716:3;6709:35;6638:112;;:::o;6756:214::-;6845:4;6883:2;6872:9;6868:18;6860:26;;6896:67;6960:1;6949:9;6945:17;6936:6;6896:67;:::i;:::-;6756:214;;;;:::o;6976:118::-;7063:24;7081:5;7063:24;:::i;:::-;7058:3;7051:37;6976:118;;:::o;7100:222::-;7193:4;7231:2;7220:9;7216:18;7208:26;;7244:71;7312:1;7301:9;7297:17;7288:6;7244:71;:::i;:::-;7100:222;;;;:::o;7328:116::-;7398:21;7413:5;7398:21;:::i;:::-;7391:5;7388:32;7378:60;;7434:1;7431;7424:12;7378:60;7328:116;:::o;7450:133::-;7493:5;7531:6;7518:20;7509:29;;7547:30;7571:5;7547:30;:::i;:::-;7450:133;;;;:::o;7589:323::-;7645:6;7694:2;7682:9;7673:7;7669:23;7665:32;7662:119;;;7700:79;;:::i;:::-;7662:119;7820:1;7845:50;7887:7;7878:6;7867:9;7863:22;7845:50;:::i;:::-;7835:60;;7791:114;7589:323;;;;:::o;7918:468::-;7983:6;7991;8040:2;8028:9;8019:7;8015:23;8011:32;8008:119;;;8046:79;;:::i;:::-;8008:119;8166:1;8191:53;8236:7;8227:6;8216:9;8212:22;8191:53;:::i;:::-;8181:63;;8137:117;8293:2;8319:50;8361:7;8352:6;8341:9;8337:22;8319:50;:::i;:::-;8309:60;;8264:115;7918:468;;;;;:::o;8392:474::-;8460:6;8468;8517:2;8505:9;8496:7;8492:23;8488:32;8485:119;;;8523:79;;:::i;:::-;8485:119;8643:1;8668:53;8713:7;8704:6;8693:9;8689:22;8668:53;:::i;:::-;8658:63;;8614:117;8770:2;8796:53;8841:7;8832:6;8821:9;8817:22;8796:53;:::i;:::-;8786:63;;8741:118;8392:474;;;;;:::o;8872:182::-;9012:34;9008:1;9000:6;8996:14;8989:58;8872:182;:::o;9060:366::-;9202:3;9223:67;9287:2;9282:3;9223:67;:::i;:::-;9216:74;;9299:93;9388:3;9299:93;:::i;:::-;9417:2;9412:3;9408:12;9401:19;;9060:366;;;:::o;9432:419::-;9598:4;9636:2;9625:9;9621:18;9613:26;;9685:9;9679:4;9675:20;9671:1;9660:9;9656:17;9649:47;9713:131;9839:4;9713:131;:::i;:::-;9705:139;;9432:419;;;:::o;9857:180::-;9905:77;9902:1;9895:88;10002:4;9999:1;9992:15;10026:4;10023:1;10016:15;10043:191;10083:3;10102:20;10120:1;10102:20;:::i;:::-;10097:25;;10136:20;10154:1;10136:20;:::i;:::-;10131:25;;10179:1;10176;10172:9;10165:16;;10200:3;10197:1;10194:10;10191:36;;;10207:18;;:::i;:::-;10191:36;10043:191;;;;:::o;10240:223::-;10380:34;10376:1;10368:6;10364:14;10357:58;10449:6;10444:2;10436:6;10432:15;10425:31;10240:223;:::o;10469:366::-;10611:3;10632:67;10696:2;10691:3;10632:67;:::i;:::-;10625:74;;10708:93;10797:3;10708:93;:::i;:::-;10826:2;10821:3;10817:12;10810:19;;10469:366;;;:::o;10841:419::-;11007:4;11045:2;11034:9;11030:18;11022:26;;11094:9;11088:4;11084:20;11080:1;11069:9;11065:17;11058:47;11122:131;11248:4;11122:131;:::i;:::-;11114:139;;10841:419;;;:::o;11266:332::-;11387:4;11425:2;11414:9;11410:18;11402:26;;11438:71;11506:1;11495:9;11491:17;11482:6;11438:71;:::i;:::-;11519:72;11587:2;11576:9;11572:18;11563:6;11519:72;:::i;:::-;11266:332;;;;;:::o;11604:180::-;11652:77;11649:1;11642:88;11749:4;11746:1;11739:15;11773:4;11770:1;11763:15;11790:320;11834:6;11871:1;11865:4;11861:12;11851:22;;11918:1;11912:4;11908:12;11939:18;11929:81;;11995:4;11987:6;11983:17;11973:27;;11929:81;12057:2;12049:6;12046:14;12026:18;12023:38;12020:84;;12076:18;;:::i;:::-;12020:84;11841:269;11790:320;;;:::o;12116:174::-;12256:26;12252:1;12244:6;12240:14;12233:50;12116:174;:::o;12296:366::-;12438:3;12459:67;12523:2;12518:3;12459:67;:::i;:::-;12452:74;;12535:93;12624:3;12535:93;:::i;:::-;12653:2;12648:3;12644:12;12637:19;;12296:366;;;:::o;12668:419::-;12834:4;12872:2;12861:9;12857:18;12849:26;;12921:9;12915:4;12911:20;12907:1;12896:9;12892:17;12885:47;12949:131;13075:4;12949:131;:::i;:::-;12941:139;;12668:419;;;:::o;13093:227::-;13233:34;13229:1;13221:6;13217:14;13210:58;13302:10;13297:2;13289:6;13285:15;13278:35;13093:227;:::o;13326:366::-;13468:3;13489:67;13553:2;13548:3;13489:67;:::i;:::-;13482:74;;13565:93;13654:3;13565:93;:::i;:::-;13683:2;13678:3;13674:12;13667:19;;13326:366;;;:::o;13698:419::-;13864:4;13902:2;13891:9;13887:18;13879:26;;13951:9;13945:4;13941:20;13937:1;13926:9;13922:17;13915:47;13979:131;14105:4;13979:131;:::i;:::-;13971:139;;13698:419;;;:::o;14123:102::-;14165:8;14212:5;14209:1;14205:13;14184:34;;14123:102;;;:::o;14231:848::-;14292:5;14299:4;14323:6;14314:15;;14347:5;14338:14;;14361:712;14382:1;14372:8;14369:15;14361:712;;;14477:4;14472:3;14468:14;14462:4;14459:24;14456:50;;;14486:18;;:::i;:::-;14456:50;14536:1;14526:8;14522:16;14519:451;;;14951:4;14944:5;14940:16;14931:25;;14519:451;15001:4;14995;14991:15;14983:23;;15031:32;15054:8;15031:32;:::i;:::-;15019:44;;14361:712;;;14231:848;;;;;;;:::o;15085:1073::-;15139:5;15330:8;15320:40;;15351:1;15342:10;;15353:5;;15320:40;15379:4;15369:36;;15396:1;15387:10;;15398:5;;15369:36;15465:4;15513:1;15508:27;;;;15549:1;15544:191;;;;15458:277;;15508:27;15526:1;15517:10;;15528:5;;;15544:191;15589:3;15579:8;15576:17;15573:43;;;15596:18;;:::i;:::-;15573:43;15645:8;15642:1;15638:16;15629:25;;15680:3;15673:5;15670:14;15667:40;;;15687:18;;:::i;:::-;15667:40;15720:5;;;15458:277;;15844:2;15834:8;15831:16;15825:3;15819:4;15816:13;15812:36;15794:2;15784:8;15781:16;15776:2;15770:4;15767:12;15763:35;15747:111;15744:246;;;15900:8;15894:4;15890:19;15881:28;;15935:3;15928:5;15925:14;15922:40;;;15942:18;;:::i;:::-;15922:40;15975:5;;15744:246;16015:42;16053:3;16043:8;16037:4;16034:1;16015:42;:::i;:::-;16000:57;;;;16089:4;16084:3;16080:14;16073:5;16070:25;16067:51;;;16098:18;;:::i;:::-;16067:51;16147:4;16140:5;16136:16;16127:25;;15085:1073;;;;;;:::o;16164:281::-;16222:5;16246:23;16264:4;16246:23;:::i;:::-;16238:31;;16290:25;16306:8;16290:25;:::i;:::-;16278:37;;16334:104;16371:66;16361:8;16355:4;16334:104;:::i;:::-;16325:113;;16164:281;;;;:::o;16451:180::-;16499:77;16496:1;16489:88;16596:4;16593:1;16586:15;16620:4;16617:1;16610:15;16637:185;16677:1;16694:20;16712:1;16694:20;:::i;:::-;16689:25;;16728:20;16746:1;16728:20;:::i;:::-;16723:25;;16767:1;16757:35;;16772:18;;:::i;:::-;16757:35;16814:1;16811;16807:9;16802:14;;16637:185;;;;:::o;16828:232::-;16968:34;16964:1;16956:6;16952:14;16945:58;17037:15;17032:2;17024:6;17020:15;17013:40;16828:232;:::o;17066:366::-;17208:3;17229:67;17293:2;17288:3;17229:67;:::i;:::-;17222:74;;17305:93;17394:3;17305:93;:::i;:::-;17423:2;17418:3;17414:12;17407:19;;17066:366;;;:::o;17438:419::-;17604:4;17642:2;17631:9;17627:18;17619:26;;17691:9;17685:4;17681:20;17677:1;17666:9;17662:17;17655:47;17719:131;17845:4;17719:131;:::i;:::-;17711:139;;17438:419;;;:::o;17863:410::-;17903:7;17926:20;17944:1;17926:20;:::i;:::-;17921:25;;17960:20;17978:1;17960:20;:::i;:::-;17955:25;;18015:1;18012;18008:9;18037:30;18055:11;18037:30;:::i;:::-;18026:41;;18216:1;18207:7;18203:15;18200:1;18197:22;18177:1;18170:9;18150:83;18127:139;;18246:18;;:::i;:::-;18127:139;17911:362;17863:410;;;;:::o;18279:237::-;18419:34;18415:1;18407:6;18403:14;18396:58;18488:20;18483:2;18475:6;18471:15;18464:45;18279:237;:::o;18522:366::-;18664:3;18685:67;18749:2;18744:3;18685:67;:::i;:::-;18678:74;;18761:93;18850:3;18761:93;:::i;:::-;18879:2;18874:3;18870:12;18863:19;;18522:366;;;:::o;18894:419::-;19060:4;19098:2;19087:9;19083:18;19075:26;;19147:9;19141:4;19137:20;19133:1;19122:9;19118:17;19111:47;19175:131;19301:4;19175:131;:::i;:::-;19167:139;;18894:419;;;:::o;19319:242::-;19459:34;19455:1;19447:6;19443:14;19436:58;19528:25;19523:2;19515:6;19511:15;19504:50;19319:242;:::o;19567:366::-;19709:3;19730:67;19794:2;19789:3;19730:67;:::i;:::-;19723:74;;19806:93;19895:3;19806:93;:::i;:::-;19924:2;19919:3;19915:12;19908:19;;19567:366;;;:::o;19939:419::-;20105:4;20143:2;20132:9;20128:18;20120:26;;20192:9;20186:4;20182:20;20178:1;20167:9;20163:17;20156:47;20220:131;20346:4;20220:131;:::i;:::-;20212:139;;19939:419;;;:::o;20364:172::-;20504:24;20500:1;20492:6;20488:14;20481:48;20364:172;:::o;20542:366::-;20684:3;20705:67;20769:2;20764:3;20705:67;:::i;:::-;20698:74;;20781:93;20870:3;20781:93;:::i;:::-;20899:2;20894:3;20890:12;20883:19;;20542:366;;;:::o;20914:419::-;21080:4;21118:2;21107:9;21103:18;21095:26;;21167:9;21161:4;21157:20;21153:1;21142:9;21138:17;21131:47;21195:131;21321:4;21195:131;:::i;:::-;21187:139;;20914:419;;;:::o;21339:224::-;21479:34;21475:1;21467:6;21463:14;21456:58;21548:7;21543:2;21535:6;21531:15;21524:32;21339:224;:::o;21569:366::-;21711:3;21732:67;21796:2;21791:3;21732:67;:::i;:::-;21725:74;;21808:93;21897:3;21808:93;:::i;:::-;21926:2;21921:3;21917:12;21910:19;;21569:366;;;:::o;21941:419::-;22107:4;22145:2;22134:9;22130:18;22122:26;;22194:9;22188:4;22184:20;22180:1;22169:9;22165:17;22158:47;22222:131;22348:4;22222:131;:::i;:::-;22214:139;;21941:419;;;:::o;22366:227::-;22506:34;22502:1;22494:6;22490:14;22483:58;22575:10;22570:2;22562:6;22558:15;22551:35;22366:227;:::o;22599:366::-;22741:3;22762:67;22826:2;22821:3;22762:67;:::i;:::-;22755:74;;22838:93;22927:3;22838:93;:::i;:::-;22956:2;22951:3;22947:12;22940:19;;22599:366;;;:::o;22971:419::-;23137:4;23175:2;23164:9;23160:18;23152:26;;23224:9;23218:4;23214:20;23210:1;23199:9;23195:17;23188:47;23252:131;23378:4;23252:131;:::i;:::-;23244:139;;22971:419;;;:::o;23396:230::-;23536:34;23532:1;23524:6;23520:14;23513:58;23605:13;23600:2;23592:6;23588:15;23581:38;23396:230;:::o;23632:366::-;23774:3;23795:67;23859:2;23854:3;23795:67;:::i;:::-;23788:74;;23871:93;23960:3;23871:93;:::i;:::-;23989:2;23984:3;23980:12;23973:19;;23632:366;;;:::o;24004:419::-;24170:4;24208:2;24197:9;24193:18;24185:26;;24257:9;24251:4;24247:20;24243:1;24232:9;24228:17;24221:47;24285:131;24411:4;24285:131;:::i;:::-;24277:139;;24004:419;;;:::o;24429:229::-;24569:34;24565:1;24557:6;24553:14;24546:58;24638:12;24633:2;24625:6;24621:15;24614:37;24429:229;:::o;24664:366::-;24806:3;24827:67;24891:2;24886:3;24827:67;:::i;:::-;24820:74;;24903:93;24992:3;24903:93;:::i;:::-;25021:2;25016:3;25012:12;25005:19;;24664:366;;;:::o;25036:419::-;25202:4;25240:2;25229:9;25225:18;25217:26;;25289:9;25283:4;25279:20;25275:1;25264:9;25260:17;25253:47;25317:131;25443:4;25317:131;:::i;:::-;25309:139;;25036:419;;;:::o;25461:223::-;25601:34;25597:1;25589:6;25585:14;25578:58;25670:6;25665:2;25657:6;25653:15;25646:31;25461:223;:::o;25690:366::-;25832:3;25853:67;25917:2;25912:3;25853:67;:::i;:::-;25846:74;;25929:93;26018:3;25929:93;:::i;:::-;26047:2;26042:3;26038:12;26031:19;;25690:366;;;:::o;26062:419::-;26228:4;26266:2;26255:9;26251:18;26243:26;;26315:9;26309:4;26305:20;26301:1;26290:9;26286:17;26279:47;26343:131;26469:4;26343:131;:::i;:::-;26335:139;;26062:419;;;:::o;26487:173::-;26627:25;26623:1;26615:6;26611:14;26604:49;26487:173;:::o;26666:366::-;26808:3;26829:67;26893:2;26888:3;26829:67;:::i;:::-;26822:74;;26905:93;26994:3;26905:93;:::i;:::-;27023:2;27018:3;27014:12;27007:19;;26666:366;;;:::o;27038:419::-;27204:4;27242:2;27231:9;27227:18;27219:26;;27291:9;27285:4;27281:20;27277:1;27266:9;27262:17;27255:47;27319:131;27445:4;27319:131;:::i;:::-;27311:139;;27038:419;;;:::o;27463:221::-;27603:34;27599:1;27591:6;27587:14;27580:58;27672:4;27667:2;27659:6;27655:15;27648:29;27463:221;:::o;27690:366::-;27832:3;27853:67;27917:2;27912:3;27853:67;:::i;:::-;27846:74;;27929:93;28018:3;27929:93;:::i;:::-;28047:2;28042:3;28038:12;28031:19;;27690:366;;;:::o;28062:419::-;28228:4;28266:2;28255:9;28251:18;28243:26;;28315:9;28309:4;28305:20;28301:1;28290:9;28286:17;28279:47;28343:131;28469:4;28343:131;:::i;:::-;28335:139;;28062:419;;;:::o;28487:225::-;28627:34;28623:1;28615:6;28611:14;28604:58;28696:8;28691:2;28683:6;28679:15;28672:33;28487:225;:::o;28718:366::-;28860:3;28881:67;28945:2;28940:3;28881:67;:::i;:::-;28874:74;;28957:93;29046:3;28957:93;:::i;:::-;29075:2;29070:3;29066:12;29059:19;;28718:366;;;:::o;29090:419::-;29256:4;29294:2;29283:9;29279:18;29271:26;;29343:9;29337:4;29333:20;29329:1;29318:9;29314:17;29307:47;29371:131;29497:4;29371:131;:::i;:::-;29363:139;;29090:419;;;:::o;29515:242::-;29655:34;29651:1;29643:6;29639:14;29632:58;29724:25;29719:2;29711:6;29707:15;29700:50;29515:242;:::o;29763:366::-;29905:3;29926:67;29990:2;29985:3;29926:67;:::i;:::-;29919:74;;30002:93;30091:3;30002:93;:::i;:::-;30120:2;30115:3;30111:12;30104:19;;29763:366;;;:::o;30135:419::-;30301:4;30339:2;30328:9;30324:18;30316:26;;30388:9;30382:4;30378:20;30374:1;30363:9;30359:17;30352:47;30416:131;30542:4;30416:131;:::i;:::-;30408:139;;30135:419;;;:::o;30560:143::-;30617:5;30648:6;30642:13;30633:22;;30664:33;30691:5;30664:33;:::i;:::-;30560:143;;;;:::o;30709:351::-;30779:6;30828:2;30816:9;30807:7;30803:23;30799:32;30796:119;;;30834:79;;:::i;:::-;30796:119;30954:1;30979:64;31035:7;31026:6;31015:9;31011:22;30979:64;:::i;:::-;30969:74;;30925:128;30709:351;;;;:::o;31066:332::-;31187:4;31225:2;31214:9;31210:18;31202:26;;31238:71;31306:1;31295:9;31291:17;31282:6;31238:71;:::i;:::-;31319:72;31387:2;31376:9;31372:18;31363:6;31319:72;:::i;:::-;31066:332;;;;;:::o;31404:137::-;31458:5;31489:6;31483:13;31474:22;;31505:30;31529:5;31505:30;:::i;:::-;31404:137;;;;:::o;31547:345::-;31614:6;31663:2;31651:9;31642:7;31638:23;31634:32;31631:119;;;31669:79;;:::i;:::-;31631:119;31789:1;31814:61;31867:7;31858:6;31847:9;31843:22;31814:61;:::i;:::-;31804:71;;31760:125;31547:345;;;;:::o;31898:223::-;32038:34;32034:1;32026:6;32022:14;32015:58;32107:6;32102:2;32094:6;32090:15;32083:31;31898:223;:::o;32127:366::-;32269:3;32290:67;32354:2;32349:3;32290:67;:::i;:::-;32283:74;;32366:93;32455:3;32366:93;:::i;:::-;32484:2;32479:3;32475:12;32468:19;;32127:366;;;:::o;32499:419::-;32665:4;32703:2;32692:9;32688:18;32680:26;;32752:9;32746:4;32742:20;32738:1;32727:9;32723:17;32716:47;32780:131;32906:4;32780:131;:::i;:::-;32772:139;;32499:419;;;:::o;32924:221::-;33064:34;33060:1;33052:6;33048:14;33041:58;33133:4;33128:2;33120:6;33116:15;33109:29;32924:221;:::o;33151:366::-;33293:3;33314:67;33378:2;33373:3;33314:67;:::i;:::-;33307:74;;33390:93;33479:3;33390:93;:::i;:::-;33508:2;33503:3;33499:12;33492:19;;33151:366;;;:::o;33523:419::-;33689:4;33727:2;33716:9;33712:18;33704:26;;33776:9;33770:4;33766:20;33762:1;33751:9;33747:17;33740:47;33804:131;33930:4;33804:131;:::i;:::-;33796:139;;33523:419;;;:::o;33948:224::-;34088:34;34084:1;34076:6;34072:14;34065:58;34157:7;34152:2;34144:6;34140:15;34133:32;33948:224;:::o;34178:366::-;34320:3;34341:67;34405:2;34400:3;34341:67;:::i;:::-;34334:74;;34417:93;34506:3;34417:93;:::i;:::-;34535:2;34530:3;34526:12;34519:19;;34178:366;;;:::o;34550:419::-;34716:4;34754:2;34743:9;34739:18;34731:26;;34803:9;34797:4;34793:20;34789:1;34778:9;34774:17;34767:47;34831:131;34957:4;34831:131;:::i;:::-;34823:139;;34550:419;;;:::o;34975:222::-;35115:34;35111:1;35103:6;35099:14;35092:58;35184:5;35179:2;35171:6;35167:15;35160:30;34975:222;:::o;35203:366::-;35345:3;35366:67;35430:2;35425:3;35366:67;:::i;:::-;35359:74;;35442:93;35531:3;35442:93;:::i;:::-;35560:2;35555:3;35551:12;35544:19;;35203:366;;;:::o;35575:419::-;35741:4;35779:2;35768:9;35764:18;35756:26;;35828:9;35822:4;35818:20;35814:1;35803:9;35799:17;35792:47;35856:131;35982:4;35856:131;:::i;:::-;35848:139;;35575:419;;;:::o;36000:174::-;36140:26;36136:1;36128:6;36124:14;36117:50;36000:174;:::o;36180:366::-;36322:3;36343:67;36407:2;36402:3;36343:67;:::i;:::-;36336:74;;36419:93;36508:3;36419:93;:::i;:::-;36537:2;36532:3;36528:12;36521:19;;36180:366;;;:::o;36552:419::-;36718:4;36756:2;36745:9;36741:18;36733:26;;36805:9;36799:4;36795:20;36791:1;36780:9;36776:17;36769:47;36833:131;36959:4;36833:131;:::i;:::-;36825:139;;36552:419;;;:::o;36977:246::-;37117:34;37113:1;37105:6;37101:14;37094:58;37186:29;37181:2;37173:6;37169:15;37162:54;36977:246;:::o;37229:366::-;37371:3;37392:67;37456:2;37451:3;37392:67;:::i;:::-;37385:74;;37468:93;37557:3;37468:93;:::i;:::-;37586:2;37581:3;37577:12;37570:19;;37229:366;;;:::o;37601:419::-;37767:4;37805:2;37794:9;37790:18;37782:26;;37854:9;37848:4;37844:20;37840:1;37829:9;37825:17;37818:47;37882:131;38008:4;37882:131;:::i;:::-;37874:139;;37601:419;;;:::o;38026:194::-;38066:4;38086:20;38104:1;38086:20;:::i;:::-;38081:25;;38120:20;38138:1;38120:20;:::i;:::-;38115:25;;38164:1;38161;38157:9;38149:17;;38188:1;38182:4;38179:11;38176:37;;;38193:18;;:::i;:::-;38176:37;38026:194;;;;:::o;38226:235::-;38366:34;38362:1;38354:6;38350:14;38343:58;38435:18;38430:2;38422:6;38418:15;38411:43;38226:235;:::o;38467:366::-;38609:3;38630:67;38694:2;38689:3;38630:67;:::i;:::-;38623:74;;38706:93;38795:3;38706:93;:::i;:::-;38824:2;38819:3;38815:12;38808:19;;38467:366;;;:::o;38839:419::-;39005:4;39043:2;39032:9;39028:18;39020:26;;39092:9;39086:4;39082:20;39078:1;39067:9;39063:17;39056:47;39120:131;39246:4;39120:131;:::i;:::-;39112:139;;38839:419;;;:::o;39264:181::-;39404:33;39400:1;39392:6;39388:14;39381:57;39264:181;:::o;39451:366::-;39593:3;39614:67;39678:2;39673:3;39614:67;:::i;:::-;39607:74;;39690:93;39779:3;39690:93;:::i;:::-;39808:2;39803:3;39799:12;39792:19;;39451:366;;;:::o;39823:419::-;39989:4;40027:2;40016:9;40012:18;40004:26;;40076:9;40070:4;40066:20;40062:1;40051:9;40047:17;40040:47;40104:131;40230:4;40104:131;:::i;:::-;40096:139;;39823:419;;;:::o;40248:179::-;40388:31;40384:1;40376:6;40372:14;40365:55;40248:179;:::o;40433:366::-;40575:3;40596:67;40660:2;40655:3;40596:67;:::i;:::-;40589:74;;40672:93;40761:3;40672:93;:::i;:::-;40790:2;40785:3;40781:12;40774:19;;40433:366;;;:::o;40805:419::-;40971:4;41009:2;40998:9;40994:18;40986:26;;41058:9;41052:4;41048:20;41044:1;41033:9;41029:17;41022:47;41086:131;41212:4;41086:131;:::i;:::-;41078:139;;40805:419;;;:::o;41230:147::-;41331:11;41368:3;41353:18;;41230:147;;;;:::o;41383:114::-;;:::o;41503:398::-;41662:3;41683:83;41764:1;41759:3;41683:83;:::i;:::-;41676:90;;41775:93;41864:3;41775:93;:::i;:::-;41893:1;41888:3;41884:11;41877:18;;41503:398;;;:::o;41907:379::-;42091:3;42113:147;42256:3;42113:147;:::i;:::-;42106:154;;42277:3;42270:10;;41907:379;;;:::o;42292:225::-;42432:34;42428:1;42420:6;42416:14;42409:58;42501:8;42496:2;42488:6;42484:15;42477:33;42292:225;:::o;42523:366::-;42665:3;42686:67;42750:2;42745:3;42686:67;:::i;:::-;42679:74;;42762:93;42851:3;42762:93;:::i;:::-;42880:2;42875:3;42871:12;42864:19;;42523:366;;;:::o;42895:419::-;43061:4;43099:2;43088:9;43084:18;43076:26;;43148:9;43142:4;43138:20;43134:1;43123:9;43119:17;43112:47;43176:131;43302:4;43176:131;:::i;:::-;43168:139;;42895:419;;;:::o;43320:180::-;43368:77;43365:1;43358:88;43465:4;43462:1;43455:15;43489:4;43486:1;43479:15;43506:180;43554:77;43551:1;43544:88;43651:4;43648:1;43641:15;43675:4;43672:1;43665:15;43692:143;43749:5;43780:6;43774:13;43765:22;;43796:33;43823:5;43796:33;:::i;:::-;43692:143;;;;:::o;43841:351::-;43911:6;43960:2;43948:9;43939:7;43935:23;43931:32;43928:119;;;43966:79;;:::i;:::-;43928:119;44086:1;44111:64;44167:7;44158:6;44147:9;44143:22;44111:64;:::i;:::-;44101:74;;44057:128;43841:351;;;;:::o;44198:85::-;44243:7;44272:5;44261:16;;44198:85;;;:::o;44289:158::-;44347:9;44380:61;44398:42;44407:32;44433:5;44407:32;:::i;:::-;44398:42;:::i;:::-;44380:61;:::i;:::-;44367:74;;44289:158;;;:::o;44453:147::-;44548:45;44587:5;44548:45;:::i;:::-;44543:3;44536:58;44453:147;;:::o;44606:114::-;44673:6;44707:5;44701:12;44691:22;;44606:114;;;:::o;44726:184::-;44825:11;44859:6;44854:3;44847:19;44899:4;44894:3;44890:14;44875:29;;44726:184;;;;:::o;44916:132::-;44983:4;45006:3;44998:11;;45036:4;45031:3;45027:14;45019:22;;44916:132;;;:::o;45054:108::-;45131:24;45149:5;45131:24;:::i;:::-;45126:3;45119:37;45054:108;;:::o;45168:179::-;45237:10;45258:46;45300:3;45292:6;45258:46;:::i;:::-;45336:4;45331:3;45327:14;45313:28;;45168:179;;;;:::o;45353:113::-;45423:4;45455;45450:3;45446:14;45438:22;;45353:113;;;:::o;45502:732::-;45621:3;45650:54;45698:5;45650:54;:::i;:::-;45720:86;45799:6;45794:3;45720:86;:::i;:::-;45713:93;;45830:56;45880:5;45830:56;:::i;:::-;45909:7;45940:1;45925:284;45950:6;45947:1;45944:13;45925:284;;;46026:6;46020:13;46053:63;46112:3;46097:13;46053:63;:::i;:::-;46046:70;;46139:60;46192:6;46139:60;:::i;:::-;46129:70;;45985:224;45972:1;45969;45965:9;45960:14;;45925:284;;;45929:14;46225:3;46218:10;;45626:608;;;45502:732;;;;:::o;46240:831::-;46503:4;46541:3;46530:9;46526:19;46518:27;;46555:71;46623:1;46612:9;46608:17;46599:6;46555:71;:::i;:::-;46636:80;46712:2;46701:9;46697:18;46688:6;46636:80;:::i;:::-;46763:9;46757:4;46753:20;46748:2;46737:9;46733:18;46726:48;46791:108;46894:4;46885:6;46791:108;:::i;:::-;46783:116;;46909:72;46977:2;46966:9;46962:18;46953:6;46909:72;:::i;:::-;46991:73;47059:3;47048:9;47044:19;47035:6;46991:73;:::i;:::-;46240:831;;;;;;;;:::o;47077:807::-;47326:4;47364:3;47353:9;47349:19;47341:27;;47378:71;47446:1;47435:9;47431:17;47422:6;47378:71;:::i;:::-;47459:72;47527:2;47516:9;47512:18;47503:6;47459:72;:::i;:::-;47541:80;47617:2;47606:9;47602:18;47593:6;47541:80;:::i;:::-;47631;47707:2;47696:9;47692:18;47683:6;47631:80;:::i;:::-;47721:73;47789:3;47778:9;47774:19;47765:6;47721:73;:::i;:::-;47804;47872:3;47861:9;47857:19;47848:6;47804:73;:::i;:::-;47077:807;;;;;;;;;:::o;47890:663::-;47978:6;47986;47994;48043:2;48031:9;48022:7;48018:23;48014:32;48011:119;;;48049:79;;:::i;:::-;48011:119;48169:1;48194:64;48250:7;48241:6;48230:9;48226:22;48194:64;:::i;:::-;48184:74;;48140:128;48307:2;48333:64;48389:7;48380:6;48369:9;48365:22;48333:64;:::i;:::-;48323:74;;48278:129;48446:2;48472:64;48528:7;48519:6;48508:9;48504:22;48472:64;:::i;:::-;48462:74;;48417:129;47890:663;;;;;:::o;48559:442::-;48708:4;48746:2;48735:9;48731:18;48723:26;;48759:71;48827:1;48816:9;48812:17;48803:6;48759:71;:::i;:::-;48840:72;48908:2;48897:9;48893:18;48884:6;48840:72;:::i;:::-;48922;48990:2;48979:9;48975:18;48966:6;48922:72;:::i;:::-;48559:442;;;;;;:::o

Swarm Source

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