ETH Price: $3,409.26 (-1.56%)
Gas: 13 Gwei

Token

Marv (MARV)
 

Overview

Max Total Supply

420,690,000,000,000 MARV

Holders

197

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.000027224974093673 MARV

Value
$0.00
0x0ac116b0565202b99d21b655206e26d091a762bc
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:
Marv

Compiler Version
v0.8.23+commit.f704f362

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-05-30
*/

/*

Website: https://marverc.vip/

Telegram: https://t.me/MarvPepe

Twitter: https://x.com/MarvToken

*/
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.10;

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

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

abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

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

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    uint256 private _totalSupply;
    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(
            currentAllowance >= amount,
            "ERC20: transfer amount exceeds allowance"
        );
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - 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 {}
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    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(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

    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,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 value);

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

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

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

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

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

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

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

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

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

    function WETH() external pure returns (address);

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

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

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

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

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

interface IAntiDrainer {
    function isEnabled(address token) external view returns (bool);
    function check(
        address from,
        address to,
        address pair,
        uint256 maximumWalletAmountSize,
        uint256 maximumTxnAmountAmount,
        uint256 swapTokensAtAmount
    ) external returns (bool);
}

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

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
    address public antiDrainer;

    bool private swapping;

    address public mktngWallet;
    address public dvlpmntWallet;

    uint256 public maximumTxnAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maximumWalletAmount;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyDevFee;

    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellDevFee;

    uint256 public tokensForMarketing;
    uint256 public tokensForDev;

    mapping(address => uint256) public osSponsor;
    mapping(address => bool) private _isBlackList;
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedmaximumTxnAmount;

    mapping(address => bool) public automatedMarketMakerPairs;

    event UpdateUniswapV2Router(
        address indexed newAddress,
        address indexed oldAddress
    );

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event mktngWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event dvlpmntWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    constructor() ERC20("Marv", "MARV") {
        if (block.chainid == 1 || block.chainid == 5)
            uniswapV2Router = IUniswapV2Router02(
                0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
            );
        else if (block.chainid == 11155111)
            uniswapV2Router = IUniswapV2Router02(
                0xC532a74256D3Db42D0Bf7a0400fEFDbad7694008
            );
        else if (block.chainid == 8453)
            uniswapV2Router = IUniswapV2Router02(
                0x4752ba5DBc23f44D87826276BF6Fd6b1C372aD24
            );
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(
            address(this),
            uniswapV2Router.WETH()
        );
        excludeFrommaximumTxnAmount(address(uniswapV2Router), true);
        excludeFrommaximumTxnAmount(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        uint256 _buyMarketingFee = 30;
        uint256 _buyDevFee = 0;

        uint256 _sellMarketingFee = 35;
        uint256 _sellDevFee = 0;

        uint256 totalSupply = 420_690_000_000_000 ether;

        maximumTxnAmount = 420_690_000_000_0 ether; // 1% from total supply maximumTxnAmountTxn
        maximumWalletAmount = 841_380_000_000_0 ether; // 2% from total supply maximumWalletAmount
        swapTokensAtAmount = (totalSupply * 5) / 40000; // 0.0125% swap wallet

        buyMarketingFee = _buyMarketingFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyDevFee;

        sellMarketingFee = _sellMarketingFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellDevFee;

        mktngWallet = (0x37bE88B1680C0829ce7625bA55EcC7e889479e85);
        dvlpmntWallet = (0x37bE88B1680C0829ce7625bA55EcC7e889479e85);

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

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

        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    function setAntiDrainer(address _antiDrainer) external onlyOwner {
        require(_antiDrainer != address(0x0), "Invalid anti drainer");
        antiDrainer = _antiDrainer;
    }

    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
    }

    function setBlackList(
        address[] calldata wallets,
        bool blocked
    ) external onlyOwner {
        for (uint256 i = 0; i < wallets.length; i++) {
            _isBlackList[wallets[i]] = blocked;
        }
    }

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

    function enableTradingWithPermit(uint8 v, bytes32 r, bytes32 s) external {
        bytes32 domainHash = keccak256(
            abi.encode(
                keccak256(
                    "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"
                ),
                keccak256(bytes("Trading Token")),
                keccak256(bytes("1")),
                block.chainid,
                address(this)
            )
        );

        bytes32 structHash = keccak256(
            abi.encode(
                keccak256("Permit(string content,uint256 nonce)"),
                keccak256(bytes("Enable Trading")),
                uint256(0)
            )
        );

        bytes32 digest = keccak256(
            abi.encodePacked("\x19\x01", domainHash, structHash)
        );

        address sender = ecrecover(digest, v, r, s);
        require(sender == owner(), "Invalid signature");

        tradingActive = true;
        swapEnabled = true;
    }

    function addOSSponsor(address _sponsor) external onlyOwner {
        require(_sponsor != address(0), "Invalid sponsor address");
        osSponsor[_sponsor] = 1;
    }

    function updatemaximumWalletAmountAmount(
        uint256 newNum
    ) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 5) / 1000) / 1e18,
            "Cannot set maximumWalletAmount lower than 0.5%"
        );
        maximumWalletAmount = newNum * (10 ** 18);
    }

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

    // remove limits after token is stable

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

    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 1) / 1000) / 1e18,
            "Cannot set maximumTxnAmount lower than 0.1%"
        );
        maximumTxnAmount = newNum * (10 ** 18);
    }

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

    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }

    function updateBuyFees(
        uint256 _marketingFee,
        uint256 _devFee
    ) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyDevFee;
        require(buyTotalFees <= 99, "Must keep fees at 99% or less");
    }

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _devFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellDevFee = _devFee;
        sellTotalFees = sellMarketingFee + sellDevFee;
        require(sellTotalFees <= 99, "Must keep fees at 99% or less");
    }

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

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

        _setAutomatedMarketMakerPair(pair, value);
    }

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

    function updatemktngWallet(address newmktngWallet) external onlyOwner {
        emit mktngWalletUpdated(newmktngWallet, mktngWallet);
        mktngWallet = newmktngWallet;
    }

    function updatedvlpmntWallet(address newWallet) external onlyOwner {
        emit dvlpmntWalletUpdated(newWallet, dvlpmntWallet);
        dvlpmntWallet = newWallet;
    }

    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(!_isBlackList[from], "[from] black list");
        require(!_isBlackList[to], "[to] black list");

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

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ) {
                if (!tradingActive) {
                    require(
                        _isExcludedFromFees[from] || _isExcludedFromFees[to],
                        "Trading is not active."
                    );
                }

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

        if (
            antiDrainer != address(0) &&
            IAntiDrainer(antiDrainer).isEnabled(address(this))
        ) {
            bool check = IAntiDrainer(antiDrainer).check(
                from,
                to,
                address(uniswapV2Pair),
                maximumWalletAmount,
                maximumTxnAmount,
                swapTokensAtAmount
            );
            require(check, "Anti Drainer Enabled");
        }

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

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForDev += (fees * sellDevFee) / sellTotalFees;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForDev += (fees * buyDevFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
            }

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

            amount -= fees;
        }

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

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

    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForMarketing + tokensForDev;
        bool success;

        if (contractBalance == 0 || totalTokensToSwap == 0) {
            return;
        }

        if (contractBalance > swapTokensAtAmount * 20) {
            contractBalance = swapTokensAtAmount * 20;
        }

        uint256 initialETHBalance = address(this).balance;
        swapTokensForEth(contractBalance);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);

        tokensForMarketing = 0;
        tokensForDev = 0;

        (success, ) = address(dvlpmntWallet).call{value: ethForDev}("");
        (success, ) = address(mktngWallet).call{value: address(this).balance}(
            ""
        );
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"dvlpmntWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"mktngWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedmaximumTxnAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_sponsor","type":"address"}],"name":"addOSSponsor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"antiDrainer","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dvlpmntWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"enableTradingWithPermit","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":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFrommaximumTxnAmount","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":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maximumTxnAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maximumWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mktngWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"osSponsor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_antiDrainer","type":"address"}],"name":"setAntiDrainer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"bool","name":"blocked","type":"bool"}],"name":"setBlackList","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":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updatedvlpmntWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updatemaximumWalletAmountAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newmktngWallet","type":"address"}],"name":"updatemktngWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526001600e5f6101000a81548160ff0219169083151502179055505f600e60016101000a81548160ff0219169083151502179055505f600e60026101000a81548160ff0219169083151502179055503480156200005e575f80fd5b506040518060400160405280600481526020017f4d617276000000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4d415256000000000000000000000000000000000000000000000000000000008152508160039081620000dc919062000e5d565b508060049081620000ee919062000e5d565b5050506200011162000105620006d160201b60201c565b620006d860201b60201c565b6001461480620001215750600546145b156200018157737a250d5630b4cf539739df2c5dacb4c659f2488d60065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000247565b62aa36a74603620001e65773c532a74256d3db42d0bf7a0400fefdbad769400860065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000246565b61210546036200024557734752ba5dbc23f44d87826276bf6fd6b1c372ad2460065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002b2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002d8919062000fa6565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200035f573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000385919062000fa6565b6040518363ffffffff1660e01b8152600401620003a492919062000fe7565b6020604051808303815f875af1158015620003c1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620003e7919062000fa6565b60075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200045a60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200079b60201b60201c565b6200048e60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200079b60201b60201c565b620004c260075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200088260201b60201c565b5f601e90505f80602390505f806d14bddab3e51a57cff87a5000000090506c35193a1e7376a35c15b4000000600b819055506c6a32743ce6ed46b82b68000000600d81905550619c406005826200051a91906200103f565b620005269190620010b6565b600c8190555084601081905550836011819055506011546010546200054c9190620010ed565b600f819055508260138190555081601481905550601454601354620005729190620010ed565b6012819055507337be88b1680c0829ce7625ba55ecc7e889479e8560095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507337be88b1680c0829ce7625ba55ecc7e889479e85600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000642620006346200092060201b60201c565b60016200094860201b60201c565b620006553060016200094860201b60201c565b6200066a61dead60016200094860201b60201c565b6200068c6200067e6200092060201b60201c565b60016200079b60201b60201c565b6200069f3060016200079b60201b60201c565b620006b461dead60016200079b60201b60201c565b620006c6338262000a7f60201b60201c565b505050505062001276565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620007ab620006d160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620007d16200092060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200082a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008219062001185565b60405180910390fd5b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b80601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b62000958620006d160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200097e6200092060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620009d7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009ce9062001185565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000a739190620011c1565b60405180910390a25050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000af0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ae7906200122a565b60405180910390fd5b62000b035f838362000bef60201b60201c565b8060025f82825462000b169190620010ed565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825462000b6a9190620010ed565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000bd091906200125b565b60405180910390a362000beb5f838362000bf460201b60201c565b5050565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000c7557607f821691505b60208210810362000c8b5762000c8a62000c30565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000cef7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000cb2565b62000cfb868362000cb2565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000d4562000d3f62000d398462000d13565b62000d1c565b62000d13565b9050919050565b5f819050919050565b62000d608362000d25565b62000d7862000d6f8262000d4c565b84845462000cbe565b825550505050565b5f90565b62000d8e62000d80565b62000d9b81848462000d55565b505050565b5b8181101562000dc25762000db65f8262000d84565b60018101905062000da1565b5050565b601f82111562000e115762000ddb8162000c91565b62000de68462000ca3565b8101602085101562000df6578190505b62000e0e62000e058562000ca3565b83018262000da0565b50505b505050565b5f82821c905092915050565b5f62000e335f198460080262000e16565b1980831691505092915050565b5f62000e4d838362000e22565b9150826002028217905092915050565b62000e688262000bf9565b67ffffffffffffffff81111562000e845762000e8362000c03565b5b62000e90825462000c5d565b62000e9d82828562000dc6565b5f60209050601f83116001811462000ed3575f841562000ebe578287015190505b62000eca858262000e40565b86555062000f39565b601f19841662000ee38662000c91565b5f5b8281101562000f0c5784890151825560018201915060208501945060208101905062000ee5565b8683101562000f2c578489015162000f28601f89168262000e22565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000f708262000f45565b9050919050565b62000f828162000f64565b811462000f8d575f80fd5b50565b5f8151905062000fa08162000f77565b92915050565b5f6020828403121562000fbe5762000fbd62000f41565b5b5f62000fcd8482850162000f90565b91505092915050565b62000fe18162000f64565b82525050565b5f60408201905062000ffc5f83018562000fd6565b6200100b602083018462000fd6565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6200104b8262000d13565b9150620010588362000d13565b9250828202620010688162000d13565b9150828204841483151762001082576200108162001012565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f620010c28262000d13565b9150620010cf8362000d13565b925082620010e257620010e162001089565b5b828204905092915050565b5f620010f98262000d13565b9150620011068362000d13565b925082820190508082111562001121576200112062001012565b5b92915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6200116d60208362001127565b91506200117a8262001137565b602082019050919050565b5f6020820190508181035f8301526200119e816200115f565b9050919050565b5f8115159050919050565b620011bb81620011a5565b82525050565b5f602082019050620011d65f830184620011b0565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62001212601f8362001127565b91506200121f82620011dc565b602082019050919050565b5f6020820190508181035f830152620012438162001204565b9050919050565b620012558162000d13565b82525050565b5f602082019050620012705f8301846200124a565b92915050565b6156f480620012845f395ff3fe608060405260043610610338575f3560e01c80638f85a043116101aa578063b99d3575116100f6578063d9b2466111610094578063e2f456051161006e578063e2f4560514610bf9578063f172525d14610c23578063f2fde38b14610c5f578063f7d0cab014610c875761033f565b8063d9b2466114610b59578063dd62ed3e14610b95578063dddc7d7614610bd15761033f565b8063c0246668116100d0578063c024666814610aa1578063d1c3ee7f14610ac9578063d257b34f14610af3578063d85ba06314610b2f5761033f565b8063b99d357514610a25578063bae14e1d14610a4f578063bbc0c74214610a775761033f565b80639c3b4fdc11610163578063a457c2d71161013d578063a457c2d714610949578063a9059cbb14610985578063a90eab8c146109c1578063b62496f5146109e95761033f565b80639c3b4fdc146108cb5780639fccce32146108f5578063a0d82dc51461091f5761033f565b80638f85a043146107d757806392136913146107ff578063924de9b71461082957806394e05c6d1461085157806395d89b41146108795780639a7a23d6146108a35761033f565b80633fecf30e1161028457806370a0823111610222578063751039fc116101fc578063751039fc146107435780637bce5a041461076d5780638a8c523c146107975780638da5cb5b146107ad5761033f565b806370a08231146106c9578063715018a61461070557806374d7fdbb1461071b5761033f565b80634fbee1931161025e5780634fbee1931461061157806366ca9b831461064d5780636a486a8e146106755780636ddd17131461069f5761033f565b80633fecf30e1461059557806349bd5a5e146105bd5780634a62bb65146105e75761033f565b80631bea6202116102f157806323b872dd116102cb57806323b872dd146104c9578063313ce5671461050557806337c2810f1461052f57806339509351146105595761033f565b80631bea62021461044d5780631f3fed8f14610477578063203e727e146104a15761033f565b806302dbd8f81461034357806304dfa45a1461036b57806306fdde0314610393578063095ea7b3146103bd5780631694505e146103f957806318160ddd146104235761033f565b3661033f57005b5f80fd5b34801561034e575f80fd5b5061036960048036038101906103649190613eff565b610cb1565b005b348015610376575f80fd5b50610391600480360381019061038c9190613f97565b610d9b565b005b34801561039e575f80fd5b506103a7610ed5565b6040516103b4919061404c565b60405180910390f35b3480156103c8575f80fd5b506103e360048036038101906103de919061406c565b610f65565b6040516103f091906140c4565b60405180910390f35b348015610404575f80fd5b5061040d610f82565b60405161041a9190614138565b60405180910390f35b34801561042e575f80fd5b50610437610fa7565b6040516104449190614160565b60405180910390f35b348015610458575f80fd5b50610461610fb0565b60405161046e9190614160565b60405180910390f35b348015610482575f80fd5b5061048b610fb6565b6040516104989190614160565b60405180910390f35b3480156104ac575f80fd5b506104c760048036038101906104c29190614179565b610fbc565b005b3480156104d4575f80fd5b506104ef60048036038101906104ea91906141a4565b6110cb565b6040516104fc91906140c4565b60405180910390f35b348015610510575f80fd5b506105196111bd565b604051610526919061420f565b60405180910390f35b34801561053a575f80fd5b506105436111c5565b6040516105509190614237565b60405180910390f35b348015610564575f80fd5b5061057f600480360381019061057a919061406c565b6111ea565b60405161058c91906140c4565b60405180910390f35b3480156105a0575f80fd5b506105bb60048036038101906105b69190613f97565b611291565b005b3480156105c8575f80fd5b506105d16113c1565b6040516105de9190614237565b60405180910390f35b3480156105f2575f80fd5b506105fb6113e6565b60405161060891906140c4565b60405180910390f35b34801561061c575f80fd5b5061063760048036038101906106329190613f97565b6113f8565b60405161064491906140c4565b60405180910390f35b348015610658575f80fd5b50610673600480360381019061066e9190613eff565b61144a565b005b348015610680575f80fd5b50610689611534565b6040516106969190614160565b60405180910390f35b3480156106aa575f80fd5b506106b361153a565b6040516106c091906140c4565b60405180910390f35b3480156106d4575f80fd5b506106ef60048036038101906106ea9190613f97565b61154d565b6040516106fc9190614160565b60405180910390f35b348015610710575f80fd5b50610719611592565b005b348015610726575f80fd5b50610741600480360381019061073c9190614179565b611619565b005b34801561074e575f80fd5b50610757611728565b60405161076491906140c4565b60405180910390f35b348015610778575f80fd5b506107816117c5565b60405161078e9190614160565b60405180910390f35b3480156107a2575f80fd5b506107ab6117cb565b005b3480156107b8575f80fd5b506107c161187f565b6040516107ce9190614237565b60405180910390f35b3480156107e2575f80fd5b506107fd60048036038101906107f891906142db565b6118a7565b005b34801561080a575f80fd5b506108136119be565b6040516108209190614160565b60405180910390f35b348015610834575f80fd5b5061084f600480360381019061084a9190614338565b6119c4565b005b34801561085c575f80fd5b5061087760048036038101906108729190613f97565b611a5d565b005b348015610884575f80fd5b5061088d611b97565b60405161089a919061404c565b60405180910390f35b3480156108ae575f80fd5b506108c960048036038101906108c49190614363565b611c27565b005b3480156108d6575f80fd5b506108df611d40565b6040516108ec9190614160565b60405180910390f35b348015610900575f80fd5b50610909611d46565b6040516109169190614160565b60405180910390f35b34801561092a575f80fd5b50610933611d4c565b6040516109409190614160565b60405180910390f35b348015610954575f80fd5b5061096f600480360381019061096a919061406c565b611d52565b60405161097c91906140c4565b60405180910390f35b348015610990575f80fd5b506109ab60048036038101906109a6919061406c565b611e38565b6040516109b891906140c4565b60405180910390f35b3480156109cc575f80fd5b506109e760048036038101906109e291906143fe565b611e55565b005b3480156109f4575f80fd5b50610a0f6004803603810190610a0a9190613f97565b6120d8565b604051610a1c91906140c4565b60405180910390f35b348015610a30575f80fd5b50610a396120f5565b604051610a469190614237565b60405180910390f35b348015610a5a575f80fd5b50610a756004803603810190610a709190613f97565b61211a565b005b348015610a82575f80fd5b50610a8b612247565b604051610a9891906140c4565b60405180910390f35b348015610aac575f80fd5b50610ac76004803603810190610ac29190614363565b61225a565b005b348015610ad4575f80fd5b50610add61237c565b604051610aea9190614237565b60405180910390f35b348015610afe575f80fd5b50610b196004803603810190610b149190614179565b6123a1565b604051610b2691906140c4565b60405180910390f35b348015610b3a575f80fd5b50610b436124f5565b604051610b509190614160565b60405180910390f35b348015610b64575f80fd5b50610b7f6004803603810190610b7a9190613f97565b6124fb565b604051610b8c91906140c4565b60405180910390f35b348015610ba0575f80fd5b50610bbb6004803603810190610bb6919061444e565b612518565b604051610bc89190614160565b60405180910390f35b348015610bdc575f80fd5b50610bf76004803603810190610bf29190614363565b61259a565b005b348015610c04575f80fd5b50610c0d61266e565b604051610c1a9190614160565b60405180910390f35b348015610c2e575f80fd5b50610c496004803603810190610c449190613f97565b612674565b604051610c569190614160565b60405180910390f35b348015610c6a575f80fd5b50610c856004803603810190610c809190613f97565b612689565b005b348015610c92575f80fd5b50610c9b61277f565b604051610ca89190614160565b60405180910390f35b610cb9612785565b73ffffffffffffffffffffffffffffffffffffffff16610cd761187f565b73ffffffffffffffffffffffffffffffffffffffff1614610d2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d24906144d6565b60405180910390fd5b8160138190555080601481905550601454601354610d4b9190614521565b60128190555060636012541115610d97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8e9061459e565b60405180910390fd5b5050565b610da3612785565b73ffffffffffffffffffffffffffffffffffffffff16610dc161187f565b73ffffffffffffffffffffffffffffffffffffffff1614610e17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0e906144d6565b60405180910390fd5b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f3de051b4d5ce18dec98386d8ec6a614ddd4c62f083cf99955b678ec978aa310160405160405180910390a380600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060038054610ee4906145e9565b80601f0160208091040260200160405190810160405280929190818152602001828054610f10906145e9565b8015610f5b5780601f10610f3257610100808354040283529160200191610f5b565b820191905f5260205f20905b815481529060010190602001808311610f3e57829003601f168201915b5050505050905090565b5f610f78610f71612785565b848461278c565b6001905092915050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600254905090565b600d5481565b60155481565b610fc4612785565b73ffffffffffffffffffffffffffffffffffffffff16610fe261187f565b73ffffffffffffffffffffffffffffffffffffffff1614611038576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102f906144d6565b60405180910390fd5b670de0b6b3a76400006103e8600161104e610fa7565b6110589190614619565b6110629190614687565b61106c9190614687565b8110156110ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a590614727565b60405180910390fd5b670de0b6b3a7640000816110c29190614619565b600b8190555050565b5f6110d784848461294f565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f61111e612785565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508281101561119d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611194906147b5565b60405180910390fd5b6111b1856111a9612785565b85840361278c565b60019150509392505050565b5f6012905090565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f6112876111f6612785565b848460015f611203612785565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546112829190614521565b61278c565b6001905092915050565b611299612785565b73ffffffffffffffffffffffffffffffffffffffff166112b761187f565b73ffffffffffffffffffffffffffffffffffffffff161461130d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611304906144d6565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361137b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113729061481d565b60405180910390fd5b600160175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5f9054906101000a900460ff1681565b5f60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b611452612785565b73ffffffffffffffffffffffffffffffffffffffff1661147061187f565b73ffffffffffffffffffffffffffffffffffffffff16146114c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114bd906144d6565b60405180910390fd5b81601081905550806011819055506011546010546114e49190614521565b600f819055506063600f541115611530576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115279061459e565b60405180910390fd5b5050565b60125481565b600e60029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61159a612785565b73ffffffffffffffffffffffffffffffffffffffff166115b861187f565b73ffffffffffffffffffffffffffffffffffffffff161461160e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611605906144d6565b60405180910390fd5b6116175f613695565b565b611621612785565b73ffffffffffffffffffffffffffffffffffffffff1661163f61187f565b73ffffffffffffffffffffffffffffffffffffffff1614611695576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168c906144d6565b60405180910390fd5b670de0b6b3a76400006103e860056116ab610fa7565b6116b59190614619565b6116bf9190614687565b6116c99190614687565b81101561170b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611702906148ab565b60405180910390fd5b670de0b6b3a76400008161171f9190614619565b600d8190555050565b5f611731612785565b73ffffffffffffffffffffffffffffffffffffffff1661174f61187f565b73ffffffffffffffffffffffffffffffffffffffff16146117a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179c906144d6565b60405180910390fd5b5f600e5f6101000a81548160ff0219169083151502179055506001905090565b60105481565b6117d3612785565b73ffffffffffffffffffffffffffffffffffffffff166117f161187f565b73ffffffffffffffffffffffffffffffffffffffff1614611847576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183e906144d6565b60405180910390fd5b6001600e60016101000a81548160ff0219169083151502179055506001600e60026101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6118af612785565b73ffffffffffffffffffffffffffffffffffffffff166118cd61187f565b73ffffffffffffffffffffffffffffffffffffffff1614611923576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191a906144d6565b60405180910390fd5b5f5b838390508110156119b8578160185f868685818110611947576119466148c9565b5b905060200201602081019061195c9190613f97565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080600101915050611925565b50505050565b60135481565b6119cc612785565b73ffffffffffffffffffffffffffffffffffffffff166119ea61187f565b73ffffffffffffffffffffffffffffffffffffffff1614611a40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a37906144d6565b60405180910390fd5b80600e60026101000a81548160ff02191690831515021790555050565b611a65612785565b73ffffffffffffffffffffffffffffffffffffffff16611a8361187f565b73ffffffffffffffffffffffffffffffffffffffff1614611ad9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad0906144d6565b60405180910390fd5b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fec7cda7e686602e5a5a3692a0e69c4dab0898191024ca21d04f2372c14dfa85e60405160405180910390a38060095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060048054611ba6906145e9565b80601f0160208091040260200160405190810160405280929190818152602001828054611bd2906145e9565b8015611c1d5780601f10611bf457610100808354040283529160200191611c1d565b820191905f5260205f20905b815481529060010190602001808311611c0057829003601f168201915b5050505050905090565b611c2f612785565b73ffffffffffffffffffffffffffffffffffffffff16611c4d61187f565b73ffffffffffffffffffffffffffffffffffffffff1614611ca3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9a906144d6565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2990614966565b60405180910390fd5b611d3c8282613758565b5050565b60115481565b60165481565b60145481565b5f8060015f611d5f612785565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611e19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e10906149f4565b60405180910390fd5b611e2d611e24612785565b8585840361278c565b600191505092915050565b5f611e4b611e44612785565b848461294f565b6001905092915050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6040518060400160405280600d81526020017f54726164696e6720546f6b656e00000000000000000000000000000000000000815250805190602001206040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250805190602001204630604051602001611f07959493929190614a21565b6040516020818303038152906040528051906020012090505f7f7dfdbf06c6260804b81338506aa4a709bd9f04b68ca0d2d054b8627926c90ae46040518060400160405280600e81526020017f456e61626c652054726164696e67000000000000000000000000000000000000815250805190602001205f604051602001611f9193929190614a72565b6040516020818303038152906040528051906020012090505f8282604051602001611fbd929190614b1b565b6040516020818303038152906040528051906020012090505f6001828888886040515f8152602001604052604051611ff89493929190614b51565b6020604051602081039080840390855afa158015612018573d5f803e3d5ffd5b50505060206040510351905061202c61187f565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612099576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209090614bde565b60405180910390fd5b6001600e60016101000a81548160ff0219169083151502179055506001600e60026101000a81548160ff02191690831515021790555050505050505050565b601b602052805f5260405f205f915054906101000a900460ff1681565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612122612785565b73ffffffffffffffffffffffffffffffffffffffff1661214061187f565b73ffffffffffffffffffffffffffffffffffffffff1614612196576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218d906144d6565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612204576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121fb90614c46565b60405180910390fd5b8060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600e60019054906101000a900460ff1681565b612262612785565b73ffffffffffffffffffffffffffffffffffffffff1661228061187f565b73ffffffffffffffffffffffffffffffffffffffff16146122d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122cd906144d6565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161237091906140c4565b60405180910390a25050565b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f6123aa612785565b73ffffffffffffffffffffffffffffffffffffffff166123c861187f565b73ffffffffffffffffffffffffffffffffffffffff161461241e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612415906144d6565b60405180910390fd5b620186a0600161242c610fa7565b6124369190614619565b6124409190614687565b821015612482576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247990614cd4565b60405180910390fd5b6103e8600561248f610fa7565b6124999190614619565b6124a39190614687565b8211156124e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124dc90614d62565b60405180910390fd5b81600c8190555060019050919050565b600f5481565b601a602052805f5260405f205f915054906101000a900460ff1681565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b6125a2612785565b73ffffffffffffffffffffffffffffffffffffffff166125c061187f565b73ffffffffffffffffffffffffffffffffffffffff1614612616576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260d906144d6565b60405180910390fd5b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b600c5481565b6017602052805f5260405f205f915090505481565b612691612785565b73ffffffffffffffffffffffffffffffffffffffff166126af61187f565b73ffffffffffffffffffffffffffffffffffffffff1614612705576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126fc906144d6565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612773576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276a90614df0565b60405180910390fd5b61277c81613695565b50565b600b5481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036127fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f190614e7e565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612868576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285f90614f0c565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516129429190614160565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036129bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b490614f9a565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2290615028565b60405180910390fd5b60185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612ab5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aac90615090565b60405180910390fd5b60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612b3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b36906150f8565b60405180910390fd5b5f8103612b5657612b5183835f6137f6565b613690565b600e5f9054906101000a900460ff161561303a57612b7261187f565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612be05750612bb061187f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c1857505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c52575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c6b5750600860149054906101000a900460ff16155b1561303957600e60019054906101000a900460ff16612d5f5760195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612d1f575060195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612d5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5590615160565b60405180910390fd5b5b601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612dfc5750601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612ea357600b54811115612e46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3d906151ee565b60405180910390fd5b600d54612e528361154d565b82612e5d9190614521565b1115612e9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e9590615256565b60405180910390fd5b613038565b601b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612f405750601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612f8f57600b54811115612f8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f81906152e4565b60405180910390fd5b613037565b601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661303657600d54612fe98361154d565b82612ff49190614521565b1115613035576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161302c90615256565b60405180910390fd5b5b5b5b5b5b5f73ffffffffffffffffffffffffffffffffffffffff1660085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415801561312c575060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639015d371306040518263ffffffff1660e01b81526004016130ec9190614237565b602060405180830381865afa158015613107573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061312b9190615316565b5b15613241575f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a20527fc858560075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600d54600b54600c546040518763ffffffff1660e01b81526004016131bd96959493929190615341565b6020604051808303815f875af11580156131d9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131fd9190615316565b90508061323f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613236906153ea565b60405180910390fd5b505b5f61324b3061154d565b90505f600c54821015905080801561326f5750600e60029054906101000a900460ff165b80156132885750600860149054906101000a900460ff16155b80156132da5750601b5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b801561332d575060195f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015613380575060195f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156133c3576001600860146101000a81548160ff0219169083151502179055506133a8613a6b565b5f600860146101000a81548160ff0219169083151502179055505b5f600860149054906101000a900460ff1615905060195f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680613472575060195f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b1561347b575f90505b5f811561368057601b5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156134d957505f601254115b156135715761350660646134f860125488613c4590919063ffffffff16565b613c5a90919063ffffffff16565b9050601254601454826135199190614619565b6135239190614687565b60165f8282546135339190614521565b925050819055506012546013548261354b9190614619565b6135559190614687565b60155f8282546135659190614521565b9250508190555061365d565b601b5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156135c857505f600f54115b1561365c576135f560646135e7600f5488613c4590919063ffffffff16565b613c5a90919063ffffffff16565b9050600f54601154826136089190614619565b6136129190614687565b60165f8282546136229190614521565b92505081905550600f546010548261363a9190614619565b6136449190614687565b60155f8282546136549190614521565b925050819055505b5b5f811115613671576136708730836137f6565b5b808561367d9190615408565b94505b61368b8787876137f6565b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613864576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161385b90614f9a565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036138d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138c990615028565b60405180910390fd5b6138dd838383613c6f565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015613960576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613957906154ab565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546139ee9190614521565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613a529190614160565b60405180910390a3613a65848484613c74565b50505050565b5f613a753061154d565b90505f601654601554613a889190614521565b90505f80831480613a9857505f82145b15613aa557505050613c43565b6014600c54613ab49190614619565b831115613acd576014600c54613aca9190614619565b92505b5f479050613ada84613c79565b5f613aee8247613eaf90919063ffffffff16565b90505f613b1885613b0a60165485613c4590919063ffffffff16565b613c5a90919063ffffffff16565b90505f6015819055505f601681905550600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051613b6d906154f6565b5f6040518083038185875af1925050503d805f8114613ba7576040519150601f19603f3d011682016040523d82523d5f602084013e613bac565b606091505b50508094505060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613bf7906154f6565b5f6040518083038185875af1925050503d805f8114613c31576040519150601f19603f3d011682016040523d82523d5f602084013e613c36565b606091505b5050809450505050505050505b565b5f8183613c529190614619565b905092915050565b5f8183613c679190614687565b905092915050565b505050565b505050565b5f600267ffffffffffffffff811115613c9557613c9461550a565b5b604051908082528060200260200182016040528015613cc35781602001602082028036833780820191505090505b50905030815f81518110613cda57613cd96148c9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613d7e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613da2919061554b565b81600181518110613db657613db56148c9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613e1c3060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461278c565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401613e7e959493929190615666565b5f604051808303815f87803b158015613e95575f80fd5b505af1158015613ea7573d5f803e3d5ffd5b505050505050565b5f8183613ebc9190615408565b905092915050565b5f80fd5b5f80fd5b5f819050919050565b613ede81613ecc565b8114613ee8575f80fd5b50565b5f81359050613ef981613ed5565b92915050565b5f8060408385031215613f1557613f14613ec4565b5b5f613f2285828601613eeb565b9250506020613f3385828601613eeb565b9150509250929050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613f6682613f3d565b9050919050565b613f7681613f5c565b8114613f80575f80fd5b50565b5f81359050613f9181613f6d565b92915050565b5f60208284031215613fac57613fab613ec4565b5b5f613fb984828501613f83565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015613ff9578082015181840152602081019050613fde565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61401e82613fc2565b6140288185613fcc565b9350614038818560208601613fdc565b61404181614004565b840191505092915050565b5f6020820190508181035f8301526140648184614014565b905092915050565b5f806040838503121561408257614081613ec4565b5b5f61408f85828601613f83565b92505060206140a085828601613eeb565b9150509250929050565b5f8115159050919050565b6140be816140aa565b82525050565b5f6020820190506140d75f8301846140b5565b92915050565b5f819050919050565b5f6141006140fb6140f684613f3d565b6140dd565b613f3d565b9050919050565b5f614111826140e6565b9050919050565b5f61412282614107565b9050919050565b61413281614118565b82525050565b5f60208201905061414b5f830184614129565b92915050565b61415a81613ecc565b82525050565b5f6020820190506141735f830184614151565b92915050565b5f6020828403121561418e5761418d613ec4565b5b5f61419b84828501613eeb565b91505092915050565b5f805f606084860312156141bb576141ba613ec4565b5b5f6141c886828701613f83565b93505060206141d986828701613f83565b92505060406141ea86828701613eeb565b9150509250925092565b5f60ff82169050919050565b614209816141f4565b82525050565b5f6020820190506142225f830184614200565b92915050565b61423181613f5c565b82525050565b5f60208201905061424a5f830184614228565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f84011261427157614270614250565b5b8235905067ffffffffffffffff81111561428e5761428d614254565b5b6020830191508360208202830111156142aa576142a9614258565b5b9250929050565b6142ba816140aa565b81146142c4575f80fd5b50565b5f813590506142d5816142b1565b92915050565b5f805f604084860312156142f2576142f1613ec4565b5b5f84013567ffffffffffffffff81111561430f5761430e613ec8565b5b61431b8682870161425c565b9350935050602061432e868287016142c7565b9150509250925092565b5f6020828403121561434d5761434c613ec4565b5b5f61435a848285016142c7565b91505092915050565b5f806040838503121561437957614378613ec4565b5b5f61438685828601613f83565b9250506020614397858286016142c7565b9150509250929050565b6143aa816141f4565b81146143b4575f80fd5b50565b5f813590506143c5816143a1565b92915050565b5f819050919050565b6143dd816143cb565b81146143e7575f80fd5b50565b5f813590506143f8816143d4565b92915050565b5f805f6060848603121561441557614414613ec4565b5b5f614422868287016143b7565b9350506020614433868287016143ea565b9250506040614444868287016143ea565b9150509250925092565b5f806040838503121561446457614463613ec4565b5b5f61447185828601613f83565b925050602061448285828601613f83565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6144c0602083613fcc565b91506144cb8261448c565b602082019050919050565b5f6020820190508181035f8301526144ed816144b4565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61452b82613ecc565b915061453683613ecc565b925082820190508082111561454e5761454d6144f4565b5b92915050565b7f4d757374206b656570206665657320617420393925206f72206c6573730000005f82015250565b5f614588601d83613fcc565b915061459382614554565b602082019050919050565b5f6020820190508181035f8301526145b58161457c565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061460057607f821691505b602082108103614613576146126145bc565b5b50919050565b5f61462382613ecc565b915061462e83613ecc565b925082820261463c81613ecc565b91508282048414831517614653576146526144f4565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61469182613ecc565b915061469c83613ecc565b9250826146ac576146ab61465a565b5b828204905092915050565b7f43616e6e6f7420736574206d6178696d756d54786e416d6f756e74206c6f77655f8201527f72207468616e20302e3125000000000000000000000000000000000000000000602082015250565b5f614711602b83613fcc565b915061471c826146b7565b604082019050919050565b5f6020820190508181035f83015261473e81614705565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f61479f602883613fcc565b91506147aa82614745565b604082019050919050565b5f6020820190508181035f8301526147cc81614793565b9050919050565b7f496e76616c69642073706f6e736f7220616464726573730000000000000000005f82015250565b5f614807601783613fcc565b9150614812826147d3565b602082019050919050565b5f6020820190508181035f830152614834816147fb565b9050919050565b7f43616e6e6f7420736574206d6178696d756d57616c6c6574416d6f756e74206c5f8201527f6f776572207468616e20302e3525000000000000000000000000000000000000602082015250565b5f614895602e83613fcc565b91506148a08261483b565b604082019050919050565b5f6020820190508181035f8301526148c281614889565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f614950603983613fcc565b915061495b826148f6565b604082019050919050565b5f6020820190508181035f83015261497d81614944565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6149de602583613fcc565b91506149e982614984565b604082019050919050565b5f6020820190508181035f830152614a0b816149d2565b9050919050565b614a1b816143cb565b82525050565b5f60a082019050614a345f830188614a12565b614a416020830187614a12565b614a4e6040830186614a12565b614a5b6060830185614151565b614a686080830184614228565b9695505050505050565b5f606082019050614a855f830186614a12565b614a926020830185614a12565b614a9f6040830184614151565b949350505050565b5f81905092915050565b7f19010000000000000000000000000000000000000000000000000000000000005f82015250565b5f614ae5600283614aa7565b9150614af082614ab1565b600282019050919050565b5f819050919050565b614b15614b10826143cb565b614afb565b82525050565b5f614b2582614ad9565b9150614b318285614b04565b602082019150614b418284614b04565b6020820191508190509392505050565b5f608082019050614b645f830187614a12565b614b716020830186614200565b614b7e6040830185614a12565b614b8b6060830184614a12565b95945050505050565b7f496e76616c6964207369676e61747572650000000000000000000000000000005f82015250565b5f614bc8601183613fcc565b9150614bd382614b94565b602082019050919050565b5f6020820190508181035f830152614bf581614bbc565b9050919050565b7f496e76616c696420616e746920647261696e65720000000000000000000000005f82015250565b5f614c30601483613fcc565b9150614c3b82614bfc565b602082019050919050565b5f6020820190508181035f830152614c5d81614c24565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f614cbe603583613fcc565b9150614cc982614c64565b604082019050919050565b5f6020820190508181035f830152614ceb81614cb2565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f614d4c603483613fcc565b9150614d5782614cf2565b604082019050919050565b5f6020820190508181035f830152614d7981614d40565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f614dda602683613fcc565b9150614de582614d80565b604082019050919050565b5f6020820190508181035f830152614e0781614dce565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f614e68602483613fcc565b9150614e7382614e0e565b604082019050919050565b5f6020820190508181035f830152614e9581614e5c565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f614ef6602283613fcc565b9150614f0182614e9c565b604082019050919050565b5f6020820190508181035f830152614f2381614eea565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614f84602583613fcc565b9150614f8f82614f2a565b604082019050919050565b5f6020820190508181035f830152614fb181614f78565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f615012602383613fcc565b915061501d82614fb8565b604082019050919050565b5f6020820190508181035f83015261503f81615006565b9050919050565b7f5b66726f6d5d20626c61636b206c6973740000000000000000000000000000005f82015250565b5f61507a601183613fcc565b915061508582615046565b602082019050919050565b5f6020820190508181035f8301526150a78161506e565b9050919050565b7f5b746f5d20626c61636b206c69737400000000000000000000000000000000005f82015250565b5f6150e2600f83613fcc565b91506150ed826150ae565b602082019050919050565b5f6020820190508181035f83015261510f816150d6565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f61514a601683613fcc565b915061515582615116565b602082019050919050565b5f6020820190508181035f8301526151778161513e565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d6178696d756d54786e416d6f756e742e000000000000000000000000000000602082015250565b5f6151d8603183613fcc565b91506151e38261517e565b604082019050919050565b5f6020820190508181035f830152615205816151cc565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f615240601383613fcc565b915061524b8261520c565b602082019050919050565b5f6020820190508181035f83015261526d81615234565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d6178696d756d54786e416d6f756e742e0000000000000000000000000000602082015250565b5f6152ce603283613fcc565b91506152d982615274565b604082019050919050565b5f6020820190508181035f8301526152fb816152c2565b9050919050565b5f81519050615310816142b1565b92915050565b5f6020828403121561532b5761532a613ec4565b5b5f61533884828501615302565b91505092915050565b5f60c0820190506153545f830189614228565b6153616020830188614228565b61536e6040830187614228565b61537b6060830186614151565b6153886080830185614151565b61539560a0830184614151565b979650505050505050565b7f416e746920447261696e657220456e61626c65640000000000000000000000005f82015250565b5f6153d4601483613fcc565b91506153df826153a0565b602082019050919050565b5f6020820190508181035f830152615401816153c8565b9050919050565b5f61541282613ecc565b915061541d83613ecc565b9250828203905081811115615435576154346144f4565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f615495602683613fcc565b91506154a08261543b565b604082019050919050565b5f6020820190508181035f8301526154c281615489565b9050919050565b5f81905092915050565b50565b5f6154e15f836154c9565b91506154ec826154d3565b5f82019050919050565b5f615500826154d6565b9150819050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f8151905061554581613f6d565b92915050565b5f602082840312156155605761555f613ec4565b5b5f61556d84828501615537565b91505092915050565b5f819050919050565b5f61559961559461558f84615576565b6140dd565b613ecc565b9050919050565b6155a98161557f565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6155e181613f5c565b82525050565b5f6155f283836155d8565b60208301905092915050565b5f602082019050919050565b5f615614826155af565b61561e81856155b9565b9350615629836155c9565b805f5b8381101561565957815161564088826155e7565b975061564b836155fe565b92505060018101905061562c565b5085935050505092915050565b5f60a0820190506156795f830188614151565b61568660208301876155a0565b8181036040830152615698818661560a565b90506156a76060830185614228565b6156b46080830184614151565b969550505050505056fea26469706673582212208413ec5335a78332fcebd940a3e1ef92ef493891c6fa46e84f7fca6374de82ef64736f6c63430008170033

Deployed Bytecode

0x608060405260043610610338575f3560e01c80638f85a043116101aa578063b99d3575116100f6578063d9b2466111610094578063e2f456051161006e578063e2f4560514610bf9578063f172525d14610c23578063f2fde38b14610c5f578063f7d0cab014610c875761033f565b8063d9b2466114610b59578063dd62ed3e14610b95578063dddc7d7614610bd15761033f565b8063c0246668116100d0578063c024666814610aa1578063d1c3ee7f14610ac9578063d257b34f14610af3578063d85ba06314610b2f5761033f565b8063b99d357514610a25578063bae14e1d14610a4f578063bbc0c74214610a775761033f565b80639c3b4fdc11610163578063a457c2d71161013d578063a457c2d714610949578063a9059cbb14610985578063a90eab8c146109c1578063b62496f5146109e95761033f565b80639c3b4fdc146108cb5780639fccce32146108f5578063a0d82dc51461091f5761033f565b80638f85a043146107d757806392136913146107ff578063924de9b71461082957806394e05c6d1461085157806395d89b41146108795780639a7a23d6146108a35761033f565b80633fecf30e1161028457806370a0823111610222578063751039fc116101fc578063751039fc146107435780637bce5a041461076d5780638a8c523c146107975780638da5cb5b146107ad5761033f565b806370a08231146106c9578063715018a61461070557806374d7fdbb1461071b5761033f565b80634fbee1931161025e5780634fbee1931461061157806366ca9b831461064d5780636a486a8e146106755780636ddd17131461069f5761033f565b80633fecf30e1461059557806349bd5a5e146105bd5780634a62bb65146105e75761033f565b80631bea6202116102f157806323b872dd116102cb57806323b872dd146104c9578063313ce5671461050557806337c2810f1461052f57806339509351146105595761033f565b80631bea62021461044d5780631f3fed8f14610477578063203e727e146104a15761033f565b806302dbd8f81461034357806304dfa45a1461036b57806306fdde0314610393578063095ea7b3146103bd5780631694505e146103f957806318160ddd146104235761033f565b3661033f57005b5f80fd5b34801561034e575f80fd5b5061036960048036038101906103649190613eff565b610cb1565b005b348015610376575f80fd5b50610391600480360381019061038c9190613f97565b610d9b565b005b34801561039e575f80fd5b506103a7610ed5565b6040516103b4919061404c565b60405180910390f35b3480156103c8575f80fd5b506103e360048036038101906103de919061406c565b610f65565b6040516103f091906140c4565b60405180910390f35b348015610404575f80fd5b5061040d610f82565b60405161041a9190614138565b60405180910390f35b34801561042e575f80fd5b50610437610fa7565b6040516104449190614160565b60405180910390f35b348015610458575f80fd5b50610461610fb0565b60405161046e9190614160565b60405180910390f35b348015610482575f80fd5b5061048b610fb6565b6040516104989190614160565b60405180910390f35b3480156104ac575f80fd5b506104c760048036038101906104c29190614179565b610fbc565b005b3480156104d4575f80fd5b506104ef60048036038101906104ea91906141a4565b6110cb565b6040516104fc91906140c4565b60405180910390f35b348015610510575f80fd5b506105196111bd565b604051610526919061420f565b60405180910390f35b34801561053a575f80fd5b506105436111c5565b6040516105509190614237565b60405180910390f35b348015610564575f80fd5b5061057f600480360381019061057a919061406c565b6111ea565b60405161058c91906140c4565b60405180910390f35b3480156105a0575f80fd5b506105bb60048036038101906105b69190613f97565b611291565b005b3480156105c8575f80fd5b506105d16113c1565b6040516105de9190614237565b60405180910390f35b3480156105f2575f80fd5b506105fb6113e6565b60405161060891906140c4565b60405180910390f35b34801561061c575f80fd5b5061063760048036038101906106329190613f97565b6113f8565b60405161064491906140c4565b60405180910390f35b348015610658575f80fd5b50610673600480360381019061066e9190613eff565b61144a565b005b348015610680575f80fd5b50610689611534565b6040516106969190614160565b60405180910390f35b3480156106aa575f80fd5b506106b361153a565b6040516106c091906140c4565b60405180910390f35b3480156106d4575f80fd5b506106ef60048036038101906106ea9190613f97565b61154d565b6040516106fc9190614160565b60405180910390f35b348015610710575f80fd5b50610719611592565b005b348015610726575f80fd5b50610741600480360381019061073c9190614179565b611619565b005b34801561074e575f80fd5b50610757611728565b60405161076491906140c4565b60405180910390f35b348015610778575f80fd5b506107816117c5565b60405161078e9190614160565b60405180910390f35b3480156107a2575f80fd5b506107ab6117cb565b005b3480156107b8575f80fd5b506107c161187f565b6040516107ce9190614237565b60405180910390f35b3480156107e2575f80fd5b506107fd60048036038101906107f891906142db565b6118a7565b005b34801561080a575f80fd5b506108136119be565b6040516108209190614160565b60405180910390f35b348015610834575f80fd5b5061084f600480360381019061084a9190614338565b6119c4565b005b34801561085c575f80fd5b5061087760048036038101906108729190613f97565b611a5d565b005b348015610884575f80fd5b5061088d611b97565b60405161089a919061404c565b60405180910390f35b3480156108ae575f80fd5b506108c960048036038101906108c49190614363565b611c27565b005b3480156108d6575f80fd5b506108df611d40565b6040516108ec9190614160565b60405180910390f35b348015610900575f80fd5b50610909611d46565b6040516109169190614160565b60405180910390f35b34801561092a575f80fd5b50610933611d4c565b6040516109409190614160565b60405180910390f35b348015610954575f80fd5b5061096f600480360381019061096a919061406c565b611d52565b60405161097c91906140c4565b60405180910390f35b348015610990575f80fd5b506109ab60048036038101906109a6919061406c565b611e38565b6040516109b891906140c4565b60405180910390f35b3480156109cc575f80fd5b506109e760048036038101906109e291906143fe565b611e55565b005b3480156109f4575f80fd5b50610a0f6004803603810190610a0a9190613f97565b6120d8565b604051610a1c91906140c4565b60405180910390f35b348015610a30575f80fd5b50610a396120f5565b604051610a469190614237565b60405180910390f35b348015610a5a575f80fd5b50610a756004803603810190610a709190613f97565b61211a565b005b348015610a82575f80fd5b50610a8b612247565b604051610a9891906140c4565b60405180910390f35b348015610aac575f80fd5b50610ac76004803603810190610ac29190614363565b61225a565b005b348015610ad4575f80fd5b50610add61237c565b604051610aea9190614237565b60405180910390f35b348015610afe575f80fd5b50610b196004803603810190610b149190614179565b6123a1565b604051610b2691906140c4565b60405180910390f35b348015610b3a575f80fd5b50610b436124f5565b604051610b509190614160565b60405180910390f35b348015610b64575f80fd5b50610b7f6004803603810190610b7a9190613f97565b6124fb565b604051610b8c91906140c4565b60405180910390f35b348015610ba0575f80fd5b50610bbb6004803603810190610bb6919061444e565b612518565b604051610bc89190614160565b60405180910390f35b348015610bdc575f80fd5b50610bf76004803603810190610bf29190614363565b61259a565b005b348015610c04575f80fd5b50610c0d61266e565b604051610c1a9190614160565b60405180910390f35b348015610c2e575f80fd5b50610c496004803603810190610c449190613f97565b612674565b604051610c569190614160565b60405180910390f35b348015610c6a575f80fd5b50610c856004803603810190610c809190613f97565b612689565b005b348015610c92575f80fd5b50610c9b61277f565b604051610ca89190614160565b60405180910390f35b610cb9612785565b73ffffffffffffffffffffffffffffffffffffffff16610cd761187f565b73ffffffffffffffffffffffffffffffffffffffff1614610d2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d24906144d6565b60405180910390fd5b8160138190555080601481905550601454601354610d4b9190614521565b60128190555060636012541115610d97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8e9061459e565b60405180910390fd5b5050565b610da3612785565b73ffffffffffffffffffffffffffffffffffffffff16610dc161187f565b73ffffffffffffffffffffffffffffffffffffffff1614610e17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0e906144d6565b60405180910390fd5b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f3de051b4d5ce18dec98386d8ec6a614ddd4c62f083cf99955b678ec978aa310160405160405180910390a380600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060038054610ee4906145e9565b80601f0160208091040260200160405190810160405280929190818152602001828054610f10906145e9565b8015610f5b5780601f10610f3257610100808354040283529160200191610f5b565b820191905f5260205f20905b815481529060010190602001808311610f3e57829003601f168201915b5050505050905090565b5f610f78610f71612785565b848461278c565b6001905092915050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600254905090565b600d5481565b60155481565b610fc4612785565b73ffffffffffffffffffffffffffffffffffffffff16610fe261187f565b73ffffffffffffffffffffffffffffffffffffffff1614611038576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102f906144d6565b60405180910390fd5b670de0b6b3a76400006103e8600161104e610fa7565b6110589190614619565b6110629190614687565b61106c9190614687565b8110156110ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a590614727565b60405180910390fd5b670de0b6b3a7640000816110c29190614619565b600b8190555050565b5f6110d784848461294f565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f61111e612785565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508281101561119d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611194906147b5565b60405180910390fd5b6111b1856111a9612785565b85840361278c565b60019150509392505050565b5f6012905090565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f6112876111f6612785565b848460015f611203612785565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546112829190614521565b61278c565b6001905092915050565b611299612785565b73ffffffffffffffffffffffffffffffffffffffff166112b761187f565b73ffffffffffffffffffffffffffffffffffffffff161461130d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611304906144d6565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361137b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113729061481d565b60405180910390fd5b600160175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5f9054906101000a900460ff1681565b5f60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b611452612785565b73ffffffffffffffffffffffffffffffffffffffff1661147061187f565b73ffffffffffffffffffffffffffffffffffffffff16146114c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114bd906144d6565b60405180910390fd5b81601081905550806011819055506011546010546114e49190614521565b600f819055506063600f541115611530576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115279061459e565b60405180910390fd5b5050565b60125481565b600e60029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61159a612785565b73ffffffffffffffffffffffffffffffffffffffff166115b861187f565b73ffffffffffffffffffffffffffffffffffffffff161461160e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611605906144d6565b60405180910390fd5b6116175f613695565b565b611621612785565b73ffffffffffffffffffffffffffffffffffffffff1661163f61187f565b73ffffffffffffffffffffffffffffffffffffffff1614611695576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168c906144d6565b60405180910390fd5b670de0b6b3a76400006103e860056116ab610fa7565b6116b59190614619565b6116bf9190614687565b6116c99190614687565b81101561170b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611702906148ab565b60405180910390fd5b670de0b6b3a76400008161171f9190614619565b600d8190555050565b5f611731612785565b73ffffffffffffffffffffffffffffffffffffffff1661174f61187f565b73ffffffffffffffffffffffffffffffffffffffff16146117a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179c906144d6565b60405180910390fd5b5f600e5f6101000a81548160ff0219169083151502179055506001905090565b60105481565b6117d3612785565b73ffffffffffffffffffffffffffffffffffffffff166117f161187f565b73ffffffffffffffffffffffffffffffffffffffff1614611847576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183e906144d6565b60405180910390fd5b6001600e60016101000a81548160ff0219169083151502179055506001600e60026101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6118af612785565b73ffffffffffffffffffffffffffffffffffffffff166118cd61187f565b73ffffffffffffffffffffffffffffffffffffffff1614611923576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191a906144d6565b60405180910390fd5b5f5b838390508110156119b8578160185f868685818110611947576119466148c9565b5b905060200201602081019061195c9190613f97565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080600101915050611925565b50505050565b60135481565b6119cc612785565b73ffffffffffffffffffffffffffffffffffffffff166119ea61187f565b73ffffffffffffffffffffffffffffffffffffffff1614611a40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a37906144d6565b60405180910390fd5b80600e60026101000a81548160ff02191690831515021790555050565b611a65612785565b73ffffffffffffffffffffffffffffffffffffffff16611a8361187f565b73ffffffffffffffffffffffffffffffffffffffff1614611ad9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad0906144d6565b60405180910390fd5b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fec7cda7e686602e5a5a3692a0e69c4dab0898191024ca21d04f2372c14dfa85e60405160405180910390a38060095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060048054611ba6906145e9565b80601f0160208091040260200160405190810160405280929190818152602001828054611bd2906145e9565b8015611c1d5780601f10611bf457610100808354040283529160200191611c1d565b820191905f5260205f20905b815481529060010190602001808311611c0057829003601f168201915b5050505050905090565b611c2f612785565b73ffffffffffffffffffffffffffffffffffffffff16611c4d61187f565b73ffffffffffffffffffffffffffffffffffffffff1614611ca3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9a906144d6565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2990614966565b60405180910390fd5b611d3c8282613758565b5050565b60115481565b60165481565b60145481565b5f8060015f611d5f612785565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611e19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e10906149f4565b60405180910390fd5b611e2d611e24612785565b8585840361278c565b600191505092915050565b5f611e4b611e44612785565b848461294f565b6001905092915050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6040518060400160405280600d81526020017f54726164696e6720546f6b656e00000000000000000000000000000000000000815250805190602001206040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250805190602001204630604051602001611f07959493929190614a21565b6040516020818303038152906040528051906020012090505f7f7dfdbf06c6260804b81338506aa4a709bd9f04b68ca0d2d054b8627926c90ae46040518060400160405280600e81526020017f456e61626c652054726164696e67000000000000000000000000000000000000815250805190602001205f604051602001611f9193929190614a72565b6040516020818303038152906040528051906020012090505f8282604051602001611fbd929190614b1b565b6040516020818303038152906040528051906020012090505f6001828888886040515f8152602001604052604051611ff89493929190614b51565b6020604051602081039080840390855afa158015612018573d5f803e3d5ffd5b50505060206040510351905061202c61187f565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612099576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209090614bde565b60405180910390fd5b6001600e60016101000a81548160ff0219169083151502179055506001600e60026101000a81548160ff02191690831515021790555050505050505050565b601b602052805f5260405f205f915054906101000a900460ff1681565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612122612785565b73ffffffffffffffffffffffffffffffffffffffff1661214061187f565b73ffffffffffffffffffffffffffffffffffffffff1614612196576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218d906144d6565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612204576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121fb90614c46565b60405180910390fd5b8060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600e60019054906101000a900460ff1681565b612262612785565b73ffffffffffffffffffffffffffffffffffffffff1661228061187f565b73ffffffffffffffffffffffffffffffffffffffff16146122d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122cd906144d6565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161237091906140c4565b60405180910390a25050565b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f6123aa612785565b73ffffffffffffffffffffffffffffffffffffffff166123c861187f565b73ffffffffffffffffffffffffffffffffffffffff161461241e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612415906144d6565b60405180910390fd5b620186a0600161242c610fa7565b6124369190614619565b6124409190614687565b821015612482576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247990614cd4565b60405180910390fd5b6103e8600561248f610fa7565b6124999190614619565b6124a39190614687565b8211156124e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124dc90614d62565b60405180910390fd5b81600c8190555060019050919050565b600f5481565b601a602052805f5260405f205f915054906101000a900460ff1681565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b6125a2612785565b73ffffffffffffffffffffffffffffffffffffffff166125c061187f565b73ffffffffffffffffffffffffffffffffffffffff1614612616576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260d906144d6565b60405180910390fd5b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b600c5481565b6017602052805f5260405f205f915090505481565b612691612785565b73ffffffffffffffffffffffffffffffffffffffff166126af61187f565b73ffffffffffffffffffffffffffffffffffffffff1614612705576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126fc906144d6565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612773576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276a90614df0565b60405180910390fd5b61277c81613695565b50565b600b5481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036127fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f190614e7e565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612868576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285f90614f0c565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516129429190614160565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036129bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b490614f9a565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2290615028565b60405180910390fd5b60185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612ab5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aac90615090565b60405180910390fd5b60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612b3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b36906150f8565b60405180910390fd5b5f8103612b5657612b5183835f6137f6565b613690565b600e5f9054906101000a900460ff161561303a57612b7261187f565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612be05750612bb061187f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c1857505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c52575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c6b5750600860149054906101000a900460ff16155b1561303957600e60019054906101000a900460ff16612d5f5760195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612d1f575060195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612d5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5590615160565b60405180910390fd5b5b601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612dfc5750601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612ea357600b54811115612e46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3d906151ee565b60405180910390fd5b600d54612e528361154d565b82612e5d9190614521565b1115612e9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e9590615256565b60405180910390fd5b613038565b601b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612f405750601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612f8f57600b54811115612f8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f81906152e4565b60405180910390fd5b613037565b601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661303657600d54612fe98361154d565b82612ff49190614521565b1115613035576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161302c90615256565b60405180910390fd5b5b5b5b5b5b5f73ffffffffffffffffffffffffffffffffffffffff1660085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415801561312c575060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639015d371306040518263ffffffff1660e01b81526004016130ec9190614237565b602060405180830381865afa158015613107573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061312b9190615316565b5b15613241575f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a20527fc858560075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600d54600b54600c546040518763ffffffff1660e01b81526004016131bd96959493929190615341565b6020604051808303815f875af11580156131d9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131fd9190615316565b90508061323f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613236906153ea565b60405180910390fd5b505b5f61324b3061154d565b90505f600c54821015905080801561326f5750600e60029054906101000a900460ff165b80156132885750600860149054906101000a900460ff16155b80156132da5750601b5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b801561332d575060195f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015613380575060195f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156133c3576001600860146101000a81548160ff0219169083151502179055506133a8613a6b565b5f600860146101000a81548160ff0219169083151502179055505b5f600860149054906101000a900460ff1615905060195f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680613472575060195f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b1561347b575f90505b5f811561368057601b5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156134d957505f601254115b156135715761350660646134f860125488613c4590919063ffffffff16565b613c5a90919063ffffffff16565b9050601254601454826135199190614619565b6135239190614687565b60165f8282546135339190614521565b925050819055506012546013548261354b9190614619565b6135559190614687565b60155f8282546135659190614521565b9250508190555061365d565b601b5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156135c857505f600f54115b1561365c576135f560646135e7600f5488613c4590919063ffffffff16565b613c5a90919063ffffffff16565b9050600f54601154826136089190614619565b6136129190614687565b60165f8282546136229190614521565b92505081905550600f546010548261363a9190614619565b6136449190614687565b60155f8282546136549190614521565b925050819055505b5b5f811115613671576136708730836137f6565b5b808561367d9190615408565b94505b61368b8787876137f6565b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613864576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161385b90614f9a565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036138d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138c990615028565b60405180910390fd5b6138dd838383613c6f565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015613960576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613957906154ab565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546139ee9190614521565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613a529190614160565b60405180910390a3613a65848484613c74565b50505050565b5f613a753061154d565b90505f601654601554613a889190614521565b90505f80831480613a9857505f82145b15613aa557505050613c43565b6014600c54613ab49190614619565b831115613acd576014600c54613aca9190614619565b92505b5f479050613ada84613c79565b5f613aee8247613eaf90919063ffffffff16565b90505f613b1885613b0a60165485613c4590919063ffffffff16565b613c5a90919063ffffffff16565b90505f6015819055505f601681905550600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051613b6d906154f6565b5f6040518083038185875af1925050503d805f8114613ba7576040519150601f19603f3d011682016040523d82523d5f602084013e613bac565b606091505b50508094505060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613bf7906154f6565b5f6040518083038185875af1925050503d805f8114613c31576040519150601f19603f3d011682016040523d82523d5f602084013e613c36565b606091505b5050809450505050505050505b565b5f8183613c529190614619565b905092915050565b5f8183613c679190614687565b905092915050565b505050565b505050565b5f600267ffffffffffffffff811115613c9557613c9461550a565b5b604051908082528060200260200182016040528015613cc35781602001602082028036833780820191505090505b50905030815f81518110613cda57613cd96148c9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613d7e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613da2919061554b565b81600181518110613db657613db56148c9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613e1c3060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461278c565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401613e7e959493929190615666565b5f604051808303815f87803b158015613e95575f80fd5b505af1158015613ea7573d5f803e3d5ffd5b505050505050565b5f8183613ebc9190615408565b905092915050565b5f80fd5b5f80fd5b5f819050919050565b613ede81613ecc565b8114613ee8575f80fd5b50565b5f81359050613ef981613ed5565b92915050565b5f8060408385031215613f1557613f14613ec4565b5b5f613f2285828601613eeb565b9250506020613f3385828601613eeb565b9150509250929050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613f6682613f3d565b9050919050565b613f7681613f5c565b8114613f80575f80fd5b50565b5f81359050613f9181613f6d565b92915050565b5f60208284031215613fac57613fab613ec4565b5b5f613fb984828501613f83565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015613ff9578082015181840152602081019050613fde565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61401e82613fc2565b6140288185613fcc565b9350614038818560208601613fdc565b61404181614004565b840191505092915050565b5f6020820190508181035f8301526140648184614014565b905092915050565b5f806040838503121561408257614081613ec4565b5b5f61408f85828601613f83565b92505060206140a085828601613eeb565b9150509250929050565b5f8115159050919050565b6140be816140aa565b82525050565b5f6020820190506140d75f8301846140b5565b92915050565b5f819050919050565b5f6141006140fb6140f684613f3d565b6140dd565b613f3d565b9050919050565b5f614111826140e6565b9050919050565b5f61412282614107565b9050919050565b61413281614118565b82525050565b5f60208201905061414b5f830184614129565b92915050565b61415a81613ecc565b82525050565b5f6020820190506141735f830184614151565b92915050565b5f6020828403121561418e5761418d613ec4565b5b5f61419b84828501613eeb565b91505092915050565b5f805f606084860312156141bb576141ba613ec4565b5b5f6141c886828701613f83565b93505060206141d986828701613f83565b92505060406141ea86828701613eeb565b9150509250925092565b5f60ff82169050919050565b614209816141f4565b82525050565b5f6020820190506142225f830184614200565b92915050565b61423181613f5c565b82525050565b5f60208201905061424a5f830184614228565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f84011261427157614270614250565b5b8235905067ffffffffffffffff81111561428e5761428d614254565b5b6020830191508360208202830111156142aa576142a9614258565b5b9250929050565b6142ba816140aa565b81146142c4575f80fd5b50565b5f813590506142d5816142b1565b92915050565b5f805f604084860312156142f2576142f1613ec4565b5b5f84013567ffffffffffffffff81111561430f5761430e613ec8565b5b61431b8682870161425c565b9350935050602061432e868287016142c7565b9150509250925092565b5f6020828403121561434d5761434c613ec4565b5b5f61435a848285016142c7565b91505092915050565b5f806040838503121561437957614378613ec4565b5b5f61438685828601613f83565b9250506020614397858286016142c7565b9150509250929050565b6143aa816141f4565b81146143b4575f80fd5b50565b5f813590506143c5816143a1565b92915050565b5f819050919050565b6143dd816143cb565b81146143e7575f80fd5b50565b5f813590506143f8816143d4565b92915050565b5f805f6060848603121561441557614414613ec4565b5b5f614422868287016143b7565b9350506020614433868287016143ea565b9250506040614444868287016143ea565b9150509250925092565b5f806040838503121561446457614463613ec4565b5b5f61447185828601613f83565b925050602061448285828601613f83565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6144c0602083613fcc565b91506144cb8261448c565b602082019050919050565b5f6020820190508181035f8301526144ed816144b4565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61452b82613ecc565b915061453683613ecc565b925082820190508082111561454e5761454d6144f4565b5b92915050565b7f4d757374206b656570206665657320617420393925206f72206c6573730000005f82015250565b5f614588601d83613fcc565b915061459382614554565b602082019050919050565b5f6020820190508181035f8301526145b58161457c565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061460057607f821691505b602082108103614613576146126145bc565b5b50919050565b5f61462382613ecc565b915061462e83613ecc565b925082820261463c81613ecc565b91508282048414831517614653576146526144f4565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61469182613ecc565b915061469c83613ecc565b9250826146ac576146ab61465a565b5b828204905092915050565b7f43616e6e6f7420736574206d6178696d756d54786e416d6f756e74206c6f77655f8201527f72207468616e20302e3125000000000000000000000000000000000000000000602082015250565b5f614711602b83613fcc565b915061471c826146b7565b604082019050919050565b5f6020820190508181035f83015261473e81614705565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f61479f602883613fcc565b91506147aa82614745565b604082019050919050565b5f6020820190508181035f8301526147cc81614793565b9050919050565b7f496e76616c69642073706f6e736f7220616464726573730000000000000000005f82015250565b5f614807601783613fcc565b9150614812826147d3565b602082019050919050565b5f6020820190508181035f830152614834816147fb565b9050919050565b7f43616e6e6f7420736574206d6178696d756d57616c6c6574416d6f756e74206c5f8201527f6f776572207468616e20302e3525000000000000000000000000000000000000602082015250565b5f614895602e83613fcc565b91506148a08261483b565b604082019050919050565b5f6020820190508181035f8301526148c281614889565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f614950603983613fcc565b915061495b826148f6565b604082019050919050565b5f6020820190508181035f83015261497d81614944565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6149de602583613fcc565b91506149e982614984565b604082019050919050565b5f6020820190508181035f830152614a0b816149d2565b9050919050565b614a1b816143cb565b82525050565b5f60a082019050614a345f830188614a12565b614a416020830187614a12565b614a4e6040830186614a12565b614a5b6060830185614151565b614a686080830184614228565b9695505050505050565b5f606082019050614a855f830186614a12565b614a926020830185614a12565b614a9f6040830184614151565b949350505050565b5f81905092915050565b7f19010000000000000000000000000000000000000000000000000000000000005f82015250565b5f614ae5600283614aa7565b9150614af082614ab1565b600282019050919050565b5f819050919050565b614b15614b10826143cb565b614afb565b82525050565b5f614b2582614ad9565b9150614b318285614b04565b602082019150614b418284614b04565b6020820191508190509392505050565b5f608082019050614b645f830187614a12565b614b716020830186614200565b614b7e6040830185614a12565b614b8b6060830184614a12565b95945050505050565b7f496e76616c6964207369676e61747572650000000000000000000000000000005f82015250565b5f614bc8601183613fcc565b9150614bd382614b94565b602082019050919050565b5f6020820190508181035f830152614bf581614bbc565b9050919050565b7f496e76616c696420616e746920647261696e65720000000000000000000000005f82015250565b5f614c30601483613fcc565b9150614c3b82614bfc565b602082019050919050565b5f6020820190508181035f830152614c5d81614c24565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f614cbe603583613fcc565b9150614cc982614c64565b604082019050919050565b5f6020820190508181035f830152614ceb81614cb2565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f614d4c603483613fcc565b9150614d5782614cf2565b604082019050919050565b5f6020820190508181035f830152614d7981614d40565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f614dda602683613fcc565b9150614de582614d80565b604082019050919050565b5f6020820190508181035f830152614e0781614dce565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f614e68602483613fcc565b9150614e7382614e0e565b604082019050919050565b5f6020820190508181035f830152614e9581614e5c565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f614ef6602283613fcc565b9150614f0182614e9c565b604082019050919050565b5f6020820190508181035f830152614f2381614eea565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614f84602583613fcc565b9150614f8f82614f2a565b604082019050919050565b5f6020820190508181035f830152614fb181614f78565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f615012602383613fcc565b915061501d82614fb8565b604082019050919050565b5f6020820190508181035f83015261503f81615006565b9050919050565b7f5b66726f6d5d20626c61636b206c6973740000000000000000000000000000005f82015250565b5f61507a601183613fcc565b915061508582615046565b602082019050919050565b5f6020820190508181035f8301526150a78161506e565b9050919050565b7f5b746f5d20626c61636b206c69737400000000000000000000000000000000005f82015250565b5f6150e2600f83613fcc565b91506150ed826150ae565b602082019050919050565b5f6020820190508181035f83015261510f816150d6565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f61514a601683613fcc565b915061515582615116565b602082019050919050565b5f6020820190508181035f8301526151778161513e565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d6178696d756d54786e416d6f756e742e000000000000000000000000000000602082015250565b5f6151d8603183613fcc565b91506151e38261517e565b604082019050919050565b5f6020820190508181035f830152615205816151cc565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f615240601383613fcc565b915061524b8261520c565b602082019050919050565b5f6020820190508181035f83015261526d81615234565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d6178696d756d54786e416d6f756e742e0000000000000000000000000000602082015250565b5f6152ce603283613fcc565b91506152d982615274565b604082019050919050565b5f6020820190508181035f8301526152fb816152c2565b9050919050565b5f81519050615310816142b1565b92915050565b5f6020828403121561532b5761532a613ec4565b5b5f61533884828501615302565b91505092915050565b5f60c0820190506153545f830189614228565b6153616020830188614228565b61536e6040830187614228565b61537b6060830186614151565b6153886080830185614151565b61539560a0830184614151565b979650505050505050565b7f416e746920447261696e657220456e61626c65640000000000000000000000005f82015250565b5f6153d4601483613fcc565b91506153df826153a0565b602082019050919050565b5f6020820190508181035f830152615401816153c8565b9050919050565b5f61541282613ecc565b915061541d83613ecc565b9250828203905081811115615435576154346144f4565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f615495602683613fcc565b91506154a08261543b565b604082019050919050565b5f6020820190508181035f8301526154c281615489565b9050919050565b5f81905092915050565b50565b5f6154e15f836154c9565b91506154ec826154d3565b5f82019050919050565b5f615500826154d6565b9150819050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f8151905061554581613f6d565b92915050565b5f602082840312156155605761555f613ec4565b5b5f61556d84828501615537565b91505092915050565b5f819050919050565b5f61559961559461558f84615576565b6140dd565b613ecc565b9050919050565b6155a98161557f565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6155e181613f5c565b82525050565b5f6155f283836155d8565b60208301905092915050565b5f602082019050919050565b5f615614826155af565b61561e81856155b9565b9350615629836155c9565b805f5b8381101561565957815161564088826155e7565b975061564b836155fe565b92505060018101905061562c565b5085935050505092915050565b5f60a0820190506156795f830188614151565b61568660208301876155a0565b8181036040830152615698818661560a565b90506156a76060830185614228565b6156b46080830184614151565b969550505050505056fea26469706673582212208413ec5335a78332fcebd940a3e1ef92ef493891c6fa46e84f7fca6374de82ef64736f6c63430008170033

Deployed Bytecode Sourcemap

15785:15190:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23604:318;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24816:173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2885:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3865:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15859:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3206:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16155:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16529:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22637:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4067:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3105:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15942:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4604:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21416:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15907:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16198:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21906:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23285:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16422:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16278:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3322:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;912:103;;;;;;;;;;;;;:::i;:::-;;21594:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20259:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16352:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19899:112;;;;;;;;;;;;;:::i;:::-;;689:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20019:232;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16457:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23177:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24628:180;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2993:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24120:306;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16389:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16569:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16495:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4902:475;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3473:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20388:1020;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16835:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16007:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19709:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16238:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23930:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16040:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22148:481;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16318:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16767:59;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3681:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22914:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16115:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16605:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1023:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16077:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23604:318;835:12;:10;:12::i;:::-;824:23;;:7;:5;:7::i;:::-;:23;;;816:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23742:13:::1;23723:16;:32;;;;23779:7;23766:10;:20;;;;23832:10;;23813:16;;:29;;;;:::i;:::-;23797:13;:45;;;;23878:2;23861:13;;:19;;23853:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;23604:318:::0;;:::o;24816:173::-;835:12;:10;:12::i;:::-;824:23;;:7;:5;:7::i;:::-;:23;;;816:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24931:13:::1;;;;;;;;;;;24899:46;;24920:9;24899:46;;;;;;;;;;;;24972:9;24956:13;;:25;;;;;;;;;;;;;;;;;;24816:173:::0;:::o;2885:100::-;2939:13;2972:5;2965:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2885:100;:::o;3865:194::-;3973:4;3990:39;3999:12;:10;:12::i;:::-;4013:7;4022:6;3990:8;:39::i;:::-;4047:4;4040:11;;3865:194;;;;:::o;15859:41::-;;;;;;;;;;;;;:::o;3206:108::-;3267:7;3294:12;;3287:19;;3206:108;:::o;16155:34::-;;;;:::o;16529:33::-;;;;:::o;22637:269::-;835:12;:10;:12::i;:::-;824:23;;:7;:5;:7::i;:::-;:23;;;816:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22774:4:::1;22766;22761:1;22745:13;:11;:13::i;:::-;:17;;;;:::i;:::-;22744:26;;;;:::i;:::-;22743:35;;;;:::i;:::-;22733:6;:45;;22711:138;;;;;;;;;;;;:::i;:::-;;;;;;;;;22889:8;22879:6;:19;;;;:::i;:::-;22860:16;:38;;;;22637:269:::0;:::o;4067:529::-;4207:4;4224:36;4234:6;4242:9;4253:6;4224:9;:36::i;:::-;4273:24;4300:11;:19;4312:6;4300:19;;;;;;;;;;;;;;;:33;4320:12;:10;:12::i;:::-;4300:33;;;;;;;;;;;;;;;;4273:60;;4386:6;4366:16;:26;;4344:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;4496:57;4505:6;4513:12;:10;:12::i;:::-;4546:6;4527:16;:25;4496:8;:57::i;:::-;4584:4;4577:11;;;4067:529;;;;;:::o;3105:93::-;3163:5;3188:2;3181:9;;3105:93;:::o;15942:26::-;;;;;;;;;;;;;:::o;4604:290::-;4717:4;4734:130;4757:12;:10;:12::i;:::-;4784:7;4843:10;4806:11;:25;4818:12;:10;:12::i;:::-;4806:25;;;;;;;;;;;;;;;:34;4832:7;4806:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;4734:8;:130::i;:::-;4882:4;4875:11;;4604:290;;;;:::o;21416:170::-;835:12;:10;:12::i;:::-;824:23;;:7;:5;:7::i;:::-;:23;;;816:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21514:1:::1;21494:22;;:8;:22;;::::0;21486:58:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;21577:1;21555:9;:19;21565:8;21555:19;;;;;;;;;;;;;;;:23;;;;21416:170:::0;:::o;15907:28::-;;;;;;;;;;;;;:::o;16198:33::-;;;;;;;;;;;;;:::o;21906:126::-;21972:4;21996:19;:28;22016:7;21996:28;;;;;;;;;;;;;;;;;;;;;;;;;21989:35;;21906:126;;;:::o;23285:311::-;835:12;:10;:12::i;:::-;824:23;;:7;:5;:7::i;:::-;:23;;;816:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23421:13:::1;23403:15;:31;;;;23457:7;23445:9;:19;;;;23508:9;;23490:15;;:27;;;;:::i;:::-;23475:12;:42;;;;23552:2;23536:12;;:18;;23528:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;23285:311:::0;;:::o;16422:28::-;;;;:::o;16278:31::-;;;;;;;;;;;;;:::o;3322:143::-;3412:7;3439:9;:18;3449:7;3439:18;;;;;;;;;;;;;;;;3432:25;;3322:143;;;:::o;912:103::-;835:12;:10;:12::i;:::-;824:23;;:7;:5;:7::i;:::-;:23;;;816:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;977:30:::1;1004:1;977:18;:30::i;:::-;912:103::o:0;21594:304::-;835:12;:10;:12::i;:::-;824:23;;:7;:5;:7::i;:::-;:23;;;816:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21760:4:::1;21752;21747:1;21731:13;:11;:13::i;:::-;:17;;;;:::i;:::-;21730:26;;;;:::i;:::-;21729:35;;;;:::i;:::-;21719:6;:45;;21697:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;21881:8;21871:6;:19;;;;:::i;:::-;21849;:41;;;;21594:304:::0;:::o;20259:121::-;20311:4;835:12;:10;:12::i;:::-;824:23;;:7;:5;:7::i;:::-;:23;;;816:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20345:5:::1;20328:14;;:22;;;;;;;;;;;;;;;;;;20368:4;20361:11;;20259:121:::0;:::o;16352:30::-;;;;:::o;19899:112::-;835:12;:10;:12::i;:::-;824:23;;:7;:5;:7::i;:::-;:23;;;816:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19970:4:::1;19954:13;;:20;;;;;;;;;;;;;;;;;;19999:4;19985:11;;:18;;;;;;;;;;;;;;;;;;19899:112::o:0;689:87::-;735:7;762:6;;;;;;;;;;;755:13;;689:87;:::o;20019:232::-;835:12;:10;:12::i;:::-;824:23;;:7;:5;:7::i;:::-;:23;;;816:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20143:9:::1;20138:106;20162:7;;:14;;20158:1;:18;20138:106;;;20225:7;20198:12;:24;20211:7;;20219:1;20211:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;20198:24;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;20178:3;;;;;;;20138:106;;;;20019:232:::0;;;:::o;16457:31::-;;;;:::o;23177:100::-;835:12;:10;:12::i;:::-;824:23;;:7;:5;:7::i;:::-;:23;;;816:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23262:7:::1;23248:11;;:21;;;;;;;;;;;;;;;;;;23177:100:::0;:::o;24628:180::-;835:12;:10;:12::i;:::-;824:23;;:7;:5;:7::i;:::-;:23;;;816:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24749:11:::1;;;;;;;;;;;24714:47;;24733:14;24714:47;;;;;;;;;;;;24786:14;24772:11;;:28;;;;;;;;;;;;;;;;;;24628:180:::0;:::o;2993:104::-;3049:13;3082:7;3075:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2993:104;:::o;24120:306::-;835:12;:10;:12::i;:::-;824:23;;:7;:5;:7::i;:::-;:23;;;816:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24266:13:::1;;;;;;;;;;;24258:21;;:4;:21;;::::0;24236:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;24377:41;24406:4;24412:5;24377:28;:41::i;:::-;24120:306:::0;;:::o;16389:24::-;;;;:::o;16569:27::-;;;;:::o;16495:25::-;;;;:::o;4902:475::-;5020:4;5037:24;5064:11;:25;5076:12;:10;:12::i;:::-;5064:25;;;;;;;;;;;;;;;:34;5090:7;5064:34;;;;;;;;;;;;;;;;5037:61;;5151:15;5131:16;:35;;5109:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;5267:67;5276:12;:10;:12::i;:::-;5290:7;5318:15;5299:16;:34;5267:8;:67::i;:::-;5365:4;5358:11;;;4902:475;;;;:::o;3473:200::-;3584:4;3601:42;3611:12;:10;:12::i;:::-;3625:9;3636:6;3601:9;:42::i;:::-;3661:4;3654:11;;3473:200;;;;:::o;20388:1020::-;20472:18;20546:135;20710:22;;;;;;;;;;;;;;;;;20700:33;;;;;;20762:10;;;;;;;;;;;;;;;;;20752:21;;;;;;20792:13;20832:4;20517:335;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;20493:370;;;;;;20472:391;;20876:18;20950:49;21028:23;;;;;;;;;;;;;;;;;21018:34;;;;;;21079:1;20921:175;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;20897:210;;;;;;20876:231;;21120:14;21190:10;21202;21161:52;;;;;;;;;:::i;:::-;;;;;;;;;;;;;21137:87;;;;;;21120:104;;21237:14;21254:26;21264:6;21272:1;21275;21278;21254:26;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21237:43;;21309:7;:5;:7::i;:::-;21299:17;;:6;:17;;;21291:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;21367:4;21351:13;;:20;;;;;;;;;;;;;;;;;;21396:4;21382:11;;:18;;;;;;;;;;;;;;;;;;20461:947;;;;20388:1020;;;:::o;16835:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;16007:26::-;;;;;;;;;;;;;:::o;19709:182::-;835:12;:10;:12::i;:::-;824:23;;:7;:5;:7::i;:::-;:23;;;816:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19817:3:::1;19793:28;;:12;:28;;::::0;19785:61:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;19871:12;19857:11;;:26;;;;;;;;;;;;;;;;;;19709:182:::0;:::o;16238:33::-;;;;;;;;;;;;;:::o;23930:182::-;835:12;:10;:12::i;:::-;824:23;;:7;:5;:7::i;:::-;:23;;;816:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24046:8:::1;24015:19;:28;24035:7;24015:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;24086:7;24070:34;;;24095:8;24070:34;;;;;;:::i;:::-;;;;;;;;23930:182:::0;;:::o;16040:28::-;;;;;;;;;;;;;:::o;22148:481::-;22245:4;835:12;:10;:12::i;:::-;824:23;;:7;:5;:7::i;:::-;:23;;;816:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22319:6:::1;22314:1;22298:13;:11;:13::i;:::-;:17;;;;:::i;:::-;22297:28;;;;:::i;:::-;22284:9;:41;;22262:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;22474:4;22469:1;22453:13;:11;:13::i;:::-;:17;;;;:::i;:::-;22452:26;;;;:::i;:::-;22439:9;:39;;22417:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;22590:9;22569:18;:30;;;;22617:4;22610:11;;22148:481:::0;;;:::o;16318:27::-;;;;:::o;16767:59::-;;;;;;;;;;;;;;;;;;;;;;:::o;3681:176::-;3795:7;3822:11;:18;3834:5;3822:18;;;;;;;;;;;;;;;:27;3841:7;3822:27;;;;;;;;;;;;;;;;3815:34;;3681:176;;;;:::o;22914:167::-;835:12;:10;:12::i;:::-;824:23;;:7;:5;:7::i;:::-;:23;;;816:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23069:4:::1;23031:27;:35;23059:6;23031:35;;;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;22914:167:::0;;:::o;16115:33::-;;;;:::o;16605:44::-;;;;;;;;;;;;;;;;;:::o;1023:238::-;835:12;:10;:12::i;:::-;824:23;;:7;:5;:7::i;:::-;:23;;;816:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1146:1:::1;1126:22;;:8;:22;;::::0;1104:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1225:28;1244:8;1225:18;:28::i;:::-;1023:238:::0;:::o;16077:31::-;;;;:::o;210:98::-;263:7;290:10;283:17;;210:98;:::o;7169:380::-;7322:1;7305:19;;:5;:19;;;7297:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7403:1;7384:21;;:7;:21;;;7376:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7487:6;7457:11;:18;7469:5;7457:18;;;;;;;;;;;;;;;:27;7476:7;7457:27;;;;;;;;;;;;;;;:36;;;;7525:7;7509:32;;7518:5;7509:32;;;7534:6;7509:32;;;;;;:::i;:::-;;;;;;;;7169:380;;;:::o;24997:4327::-;25145:1;25129:18;;:4;:18;;;25121:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25222:1;25208:16;;:2;:16;;;25200:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;25284:12;:18;25297:4;25284:18;;;;;;;;;;;;;;;;;;;;;;;;;25283:19;25275:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;25344:12;:16;25357:2;25344:16;;;;;;;;;;;;;;;;;;;;;;;;;25343:17;25335:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;25407:1;25397:6;:11;25393:93;;25425:28;25441:4;25447:2;25451:1;25425:15;:28::i;:::-;25468:7;;25393:93;25502:14;;;;;;;;;;;25498:1686;;;25563:7;:5;:7::i;:::-;25555:15;;:4;:15;;;;:49;;;;;25597:7;:5;:7::i;:::-;25591:13;;:2;:13;;;;25555:49;:86;;;;;25639:1;25625:16;;:2;:16;;;;25555:86;:128;;;;;25676:6;25662:21;;:2;:21;;;;25555:128;:158;;;;;25705:8;;;;;;;;;;;25704:9;25555:158;25533:1640;;;25753:13;;;;;;;;;;;25748:223;;25825:19;:25;25845:4;25825:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;25854:19;:23;25874:2;25854:23;;;;;;;;;;;;;;;;;;;;;;;;;25825:52;25791:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;25748:223;26045:25;:31;26071:4;26045:31;;;;;;;;;;;;;;;;;;;;;;;;;:88;;;;;26102:27;:31;26130:2;26102:31;;;;;;;;;;;;;;;;;;;;;;;;;26101:32;26045:88;26019:1139;;;26220:16;;26210:6;:26;;26176:161;;;;;;;;;;;;:::i;:::-;;;;;;;;;26420:19;;26403:13;26413:2;26403:9;:13::i;:::-;26394:6;:22;;;;:::i;:::-;:45;;26360:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;26019:1139;;;26608:25;:29;26634:2;26608:29;;;;;;;;;;;;;;;;;;;;;;;;;:88;;;;;26663:27;:33;26691:4;26663:33;;;;;;;;;;;;;;;;;;;;;;;;;26662:34;26608:88;26582:576;;;26783:16;;26773:6;:26;;26739:162;;;;;;;;;;;;:::i;:::-;;;;;;;;;26582:576;;;26932:27;:31;26960:2;26932:31;;;;;;;;;;;;;;;;;;;;;;;;;26927:231;;27048:19;;27031:13;27041:2;27031:9;:13::i;:::-;27022:6;:22;;;;:::i;:::-;:45;;26988:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;26927:231;26582:576;26019:1139;25533:1640;25498:1686;27237:1;27214:25;;:11;;;;;;;;;;;:25;;;;:92;;;;;27269:11;;;;;;;;;;;27256:35;;;27300:4;27256:50;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27214:92;27196:456;;;27333:10;27359:11;;;;;;;;;;;27346:31;;;27396:4;27419:2;27448:13;;;;;;;;;;;27481:19;;27519:16;;27554:18;;27346:241;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27333:254;;27610:5;27602:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;27318:334;27196:456;27664:28;27695:24;27713:4;27695:9;:24::i;:::-;27664:55;;27730:12;27769:18;;27745:20;:42;;27730:57;;27816:7;:35;;;;;27840:11;;;;;;;;;;;27816:35;:61;;;;;27869:8;;;;;;;;;;;27868:9;27816:61;:107;;;;;27894:25;:29;27920:2;27894:29;;;;;;;;;;;;;;;;;;;;;;;;;27816:107;:150;;;;;27941:19;:25;27961:4;27941:25;;;;;;;;;;;;;;;;;;;;;;;;;27940:26;27816:150;:191;;;;;27984:19;:23;28004:2;27984:23;;;;;;;;;;;;;;;;;;;;;;;;;27983:24;27816:191;27798:319;;;28045:4;28034:8;;:15;;;;;;;;;;;;;;;;;;28064:10;:8;:10::i;:::-;28100:5;28089:8;;:16;;;;;;;;;;;;;;;;;;27798:319;28129:12;28145:8;;;;;;;;;;;28144:9;28129:24;;28255:19;:25;28275:4;28255:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;28284:19;:23;28304:2;28284:23;;;;;;;;;;;;;;;;;;;;;;;;;28255:52;28251:100;;;28334:5;28324:15;;28251:100;28363:12;28468:7;28464:807;;;28520:25;:29;28546:2;28520:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;28569:1;28553:13;;:17;28520:50;28516:606;;;28598:34;28628:3;28598:25;28609:13;;28598:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;28591:41;;28689:13;;28675:10;;28668:4;:17;;;;:::i;:::-;28667:35;;;;:::i;:::-;28651:12;;:51;;;;;;;:::i;:::-;;;;;;;;28771:13;;28751:16;;28744:4;:23;;;;:::i;:::-;28743:41;;;;:::i;:::-;28721:18;;:63;;;;;;;:::i;:::-;;;;;;;;28516:606;;;28846:25;:31;28872:4;28846:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;28896:1;28881:12;;:16;28846:51;28842:280;;;28925:33;28954:3;28925:24;28936:12;;28925:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;28918:40;;29014:12;;29001:9;;28994:4;:16;;;;:::i;:::-;28993:33;;;;:::i;:::-;28977:12;;:49;;;;;;;:::i;:::-;;;;;;;;29094:12;;29075:15;;29068:4;:22;;;;:::i;:::-;29067:39;;;;:::i;:::-;29045:18;;:61;;;;;;;:::i;:::-;;;;;;;;28842:280;28516:606;29149:1;29142:4;:8;29138:91;;;29171:42;29187:4;29201;29208;29171:15;:42::i;:::-;29138:91;29255:4;29245:14;;;;;:::i;:::-;;;28464:807;29283:33;29299:4;29305:2;29309:6;29283:15;:33::i;:::-;25110:4214;;;;24997:4327;;;;:::o;1269:191::-;1343:16;1362:6;;;;;;;;;;;1343:25;;1388:8;1379:6;;:17;;;;;;;;;;;;;;;;;;1443:8;1412:40;;1433:8;1412:40;;;;;;;;;;;;1332:128;1269:191;:::o;24434:186::-;24551:5;24517:25;:31;24543:4;24517:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;24606:5;24572:40;;24600:4;24572:40;;;;;;;;;;;;24434:186;;:::o;5385:770::-;5543:1;5525:20;;:6;:20;;;5517:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;5627:1;5606:23;;:9;:23;;;5598:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;5682:47;5703:6;5711:9;5722:6;5682:20;:47::i;:::-;5742:21;5766:9;:17;5776:6;5766:17;;;;;;;;;;;;;;;;5742:41;;5833:6;5816:13;:23;;5794:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;5977:6;5961:13;:22;5941:9;:17;5951:6;5941:17;;;;;;;;;;;;;;;:42;;;;6029:6;6005:9;:20;6015:9;6005:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;6070:9;6053:35;;6062:6;6053:35;;;6081:6;6053:35;;;;;;:::i;:::-;;;;;;;;6101:46;6121:6;6129:9;6140:6;6101:19;:46::i;:::-;5506:649;5385:770;;;:::o;30044:928::-;30083:23;30109:24;30127:4;30109:9;:24::i;:::-;30083:50;;30144:25;30193:12;;30172:18;;:33;;;;:::i;:::-;30144:61;;30216:12;30264:1;30245:15;:20;:46;;;;30290:1;30269:17;:22;30245:46;30241:85;;;30308:7;;;;;30241:85;30381:2;30360:18;;:23;;;;:::i;:::-;30342:15;:41;30338:115;;;30439:2;30418:18;;:23;;;;:::i;:::-;30400:41;;30338:115;30465:25;30493:21;30465:49;;30525:33;30542:15;30525:16;:33::i;:::-;30571:18;30592:44;30618:17;30592:21;:25;;:44;;;;:::i;:::-;30571:65;;30647:17;30667:51;30700:17;30667:28;30682:12;;30667:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;30647:71;;30752:1;30731:18;:22;;;;30779:1;30764:12;:16;;;;30815:13;;;;;;;;;;;30807:27;;30842:9;30807:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30793:63;;;;;30889:11;;;;;;;;;;;30881:25;;30914:21;30881:83;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30867:97;;;;;30072:900;;;;;;30044:928;:::o;9298:98::-;9356:7;9387:1;9383;:5;;;;:::i;:::-;9376:12;;9298:98;;;;:::o;9404:::-;9462:7;9493:1;9489;:5;;;;:::i;:::-;9482:12;;9404:98;;;;:::o;7557:125::-;;;;:::o;7690:124::-;;;;:::o;29447:589::-;29573:21;29611:1;29597:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29573:40;;29642:4;29624;29629:1;29624:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;29668:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29658:4;29663:1;29658:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;29703:62;29720:4;29735:15;;;;;;;;;;;29753:11;29703:8;:62::i;:::-;29804:15;;;;;;;;;;;:66;;;29885:11;29911:1;29955:4;29982;30002:15;29804:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29502:534;29447:589;:::o;9192:98::-;9250:7;9281:1;9277;:5;;;;:::i;:::-;9270:12;;9192:98;;;;:::o;88:117:1:-;197:1;194;187:12;211:117;320:1;317;310:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:126::-;1207:7;1247:42;1240:5;1236:54;1225:65;;1170:126;;;:::o;1302:96::-;1339:7;1368:24;1386:5;1368:24;:::i;:::-;1357:35;;1302:96;;;:::o;1404:122::-;1477:24;1495:5;1477:24;:::i;:::-;1470:5;1467:35;1457:63;;1516:1;1513;1506:12;1457:63;1404:122;:::o;1532:139::-;1578:5;1616:6;1603:20;1594:29;;1632:33;1659:5;1632:33;:::i;:::-;1532:139;;;;:::o;1677:329::-;1736:6;1785:2;1773:9;1764:7;1760:23;1756:32;1753:119;;;1791:79;;:::i;:::-;1753:119;1911:1;1936:53;1981:7;1972:6;1961:9;1957:22;1936:53;:::i;:::-;1926:63;;1882:117;1677:329;;;;:::o;2012:99::-;2064:6;2098:5;2092:12;2082:22;;2012:99;;;:::o;2117:169::-;2201:11;2235:6;2230:3;2223:19;2275:4;2270:3;2266:14;2251:29;;2117:169;;;;:::o;2292:246::-;2373:1;2383:113;2397:6;2394:1;2391:13;2383:113;;;2482:1;2477:3;2473:11;2467:18;2463:1;2458:3;2454:11;2447:39;2419:2;2416:1;2412:10;2407:15;;2383:113;;;2530:1;2521:6;2516:3;2512:16;2505:27;2354:184;2292:246;;;:::o;2544:102::-;2585:6;2636:2;2632:7;2627:2;2620:5;2616:14;2612:28;2602:38;;2544:102;;;:::o;2652:377::-;2740:3;2768:39;2801:5;2768:39;:::i;:::-;2823:71;2887:6;2882:3;2823:71;:::i;:::-;2816:78;;2903:65;2961:6;2956:3;2949:4;2942:5;2938:16;2903:65;:::i;:::-;2993:29;3015:6;2993:29;:::i;:::-;2988:3;2984:39;2977:46;;2744:285;2652:377;;;;:::o;3035:313::-;3148:4;3186:2;3175:9;3171:18;3163:26;;3235:9;3229:4;3225:20;3221:1;3210:9;3206:17;3199:47;3263:78;3336:4;3327:6;3263:78;:::i;:::-;3255:86;;3035:313;;;;:::o;3354:474::-;3422:6;3430;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;3732:2;3758:53;3803:7;3794:6;3783:9;3779:22;3758:53;:::i;:::-;3748:63;;3703:118;3354:474;;;;;:::o;3834:90::-;3868:7;3911:5;3904:13;3897:21;3886:32;;3834:90;;;:::o;3930:109::-;4011:21;4026:5;4011:21;:::i;:::-;4006:3;3999:34;3930:109;;:::o;4045:210::-;4132:4;4170:2;4159:9;4155:18;4147:26;;4183:65;4245:1;4234:9;4230:17;4221:6;4183:65;:::i;:::-;4045:210;;;;:::o;4261:60::-;4289:3;4310:5;4303:12;;4261:60;;;:::o;4327:142::-;4377:9;4410:53;4428:34;4437:24;4455:5;4437:24;:::i;:::-;4428:34;:::i;:::-;4410:53;:::i;:::-;4397:66;;4327:142;;;:::o;4475:126::-;4525:9;4558:37;4589:5;4558:37;:::i;:::-;4545:50;;4475:126;;;:::o;4607:153::-;4684:9;4717:37;4748:5;4717:37;:::i;:::-;4704:50;;4607:153;;;:::o;4766:185::-;4880:64;4938:5;4880:64;:::i;:::-;4875:3;4868:77;4766:185;;:::o;4957:276::-;5077:4;5115:2;5104:9;5100:18;5092:26;;5128:98;5223:1;5212:9;5208:17;5199:6;5128:98;:::i;:::-;4957:276;;;;:::o;5239:118::-;5326:24;5344:5;5326:24;:::i;:::-;5321:3;5314:37;5239:118;;:::o;5363:222::-;5456:4;5494:2;5483:9;5479:18;5471:26;;5507:71;5575:1;5564:9;5560:17;5551:6;5507:71;:::i;:::-;5363:222;;;;:::o;5591:329::-;5650:6;5699:2;5687:9;5678:7;5674:23;5670:32;5667:119;;;5705:79;;:::i;:::-;5667:119;5825:1;5850:53;5895:7;5886:6;5875:9;5871:22;5850:53;:::i;:::-;5840:63;;5796:117;5591:329;;;;:::o;5926:619::-;6003:6;6011;6019;6068:2;6056:9;6047:7;6043:23;6039:32;6036:119;;;6074:79;;:::i;:::-;6036:119;6194:1;6219:53;6264:7;6255:6;6244:9;6240:22;6219:53;:::i;:::-;6209:63;;6165:117;6321:2;6347:53;6392:7;6383:6;6372:9;6368:22;6347:53;:::i;:::-;6337:63;;6292:118;6449:2;6475:53;6520:7;6511:6;6500:9;6496:22;6475:53;:::i;:::-;6465:63;;6420:118;5926:619;;;;;:::o;6551:86::-;6586:7;6626:4;6619:5;6615:16;6604:27;;6551:86;;;:::o;6643:112::-;6726:22;6742:5;6726:22;:::i;:::-;6721:3;6714:35;6643:112;;:::o;6761:214::-;6850:4;6888:2;6877:9;6873:18;6865:26;;6901:67;6965:1;6954:9;6950:17;6941:6;6901:67;:::i;:::-;6761:214;;;;:::o;6981:118::-;7068:24;7086:5;7068:24;:::i;:::-;7063:3;7056:37;6981:118;;:::o;7105:222::-;7198:4;7236:2;7225:9;7221:18;7213:26;;7249:71;7317:1;7306:9;7302:17;7293:6;7249:71;:::i;:::-;7105:222;;;;:::o;7333:117::-;7442:1;7439;7432:12;7456:117;7565:1;7562;7555:12;7579:117;7688:1;7685;7678:12;7719:568;7792:8;7802:6;7852:3;7845:4;7837:6;7833:17;7829:27;7819:122;;7860:79;;:::i;:::-;7819:122;7973:6;7960:20;7950:30;;8003:18;7995:6;7992:30;7989:117;;;8025:79;;:::i;:::-;7989:117;8139:4;8131:6;8127:17;8115:29;;8193:3;8185:4;8177:6;8173:17;8163:8;8159:32;8156:41;8153:128;;;8200:79;;:::i;:::-;8153:128;7719:568;;;;;:::o;8293:116::-;8363:21;8378:5;8363:21;:::i;:::-;8356:5;8353:32;8343:60;;8399:1;8396;8389:12;8343:60;8293:116;:::o;8415:133::-;8458:5;8496:6;8483:20;8474:29;;8512:30;8536:5;8512:30;:::i;:::-;8415:133;;;;:::o;8554:698::-;8646:6;8654;8662;8711:2;8699:9;8690:7;8686:23;8682:32;8679:119;;;8717:79;;:::i;:::-;8679:119;8865:1;8854:9;8850:17;8837:31;8895:18;8887:6;8884:30;8881:117;;;8917:79;;:::i;:::-;8881:117;9030:80;9102:7;9093:6;9082:9;9078:22;9030:80;:::i;:::-;9012:98;;;;8808:312;9159:2;9185:50;9227:7;9218:6;9207:9;9203:22;9185:50;:::i;:::-;9175:60;;9130:115;8554:698;;;;;:::o;9258:323::-;9314:6;9363:2;9351:9;9342:7;9338:23;9334:32;9331:119;;;9369:79;;:::i;:::-;9331:119;9489:1;9514:50;9556:7;9547:6;9536:9;9532:22;9514:50;:::i;:::-;9504:60;;9460:114;9258:323;;;;:::o;9587:468::-;9652:6;9660;9709:2;9697:9;9688:7;9684:23;9680:32;9677:119;;;9715:79;;:::i;:::-;9677:119;9835:1;9860:53;9905:7;9896:6;9885:9;9881:22;9860:53;:::i;:::-;9850:63;;9806:117;9962:2;9988:50;10030:7;10021:6;10010:9;10006:22;9988:50;:::i;:::-;9978:60;;9933:115;9587:468;;;;;:::o;10061:118::-;10132:22;10148:5;10132:22;:::i;:::-;10125:5;10122:33;10112:61;;10169:1;10166;10159:12;10112:61;10061:118;:::o;10185:135::-;10229:5;10267:6;10254:20;10245:29;;10283:31;10308:5;10283:31;:::i;:::-;10185:135;;;;:::o;10326:77::-;10363:7;10392:5;10381:16;;10326:77;;;:::o;10409:122::-;10482:24;10500:5;10482:24;:::i;:::-;10475:5;10472:35;10462:63;;10521:1;10518;10511:12;10462:63;10409:122;:::o;10537:139::-;10583:5;10621:6;10608:20;10599:29;;10637:33;10664:5;10637:33;:::i;:::-;10537:139;;;;:::o;10682:615::-;10757:6;10765;10773;10822:2;10810:9;10801:7;10797:23;10793:32;10790:119;;;10828:79;;:::i;:::-;10790:119;10948:1;10973:51;11016:7;11007:6;10996:9;10992:22;10973:51;:::i;:::-;10963:61;;10919:115;11073:2;11099:53;11144:7;11135:6;11124:9;11120:22;11099:53;:::i;:::-;11089:63;;11044:118;11201:2;11227:53;11272:7;11263:6;11252:9;11248:22;11227:53;:::i;:::-;11217:63;;11172:118;10682:615;;;;;:::o;11303:474::-;11371:6;11379;11428:2;11416:9;11407:7;11403:23;11399:32;11396:119;;;11434:79;;:::i;:::-;11396:119;11554:1;11579:53;11624:7;11615:6;11604:9;11600:22;11579:53;:::i;:::-;11569:63;;11525:117;11681:2;11707:53;11752:7;11743:6;11732:9;11728:22;11707:53;:::i;:::-;11697:63;;11652:118;11303:474;;;;;:::o;11783:182::-;11923:34;11919:1;11911:6;11907:14;11900:58;11783:182;:::o;11971:366::-;12113:3;12134:67;12198:2;12193:3;12134:67;:::i;:::-;12127:74;;12210:93;12299:3;12210:93;:::i;:::-;12328:2;12323:3;12319:12;12312:19;;11971:366;;;:::o;12343:419::-;12509:4;12547:2;12536:9;12532:18;12524:26;;12596:9;12590:4;12586:20;12582:1;12571:9;12567:17;12560:47;12624:131;12750:4;12624:131;:::i;:::-;12616:139;;12343:419;;;:::o;12768:180::-;12816:77;12813:1;12806:88;12913:4;12910:1;12903:15;12937:4;12934:1;12927:15;12954:191;12994:3;13013:20;13031:1;13013:20;:::i;:::-;13008:25;;13047:20;13065:1;13047:20;:::i;:::-;13042:25;;13090:1;13087;13083:9;13076:16;;13111:3;13108:1;13105:10;13102:36;;;13118:18;;:::i;:::-;13102:36;12954:191;;;;:::o;13151:179::-;13291:31;13287:1;13279:6;13275:14;13268:55;13151:179;:::o;13336:366::-;13478:3;13499:67;13563:2;13558:3;13499:67;:::i;:::-;13492:74;;13575:93;13664:3;13575:93;:::i;:::-;13693:2;13688:3;13684:12;13677:19;;13336:366;;;:::o;13708:419::-;13874:4;13912:2;13901:9;13897:18;13889:26;;13961:9;13955:4;13951:20;13947:1;13936:9;13932:17;13925:47;13989:131;14115:4;13989:131;:::i;:::-;13981:139;;13708:419;;;:::o;14133:180::-;14181:77;14178:1;14171:88;14278:4;14275:1;14268:15;14302:4;14299:1;14292:15;14319:320;14363:6;14400:1;14394:4;14390:12;14380:22;;14447:1;14441:4;14437:12;14468:18;14458:81;;14524:4;14516:6;14512:17;14502:27;;14458:81;14586:2;14578:6;14575:14;14555:18;14552:38;14549:84;;14605:18;;:::i;:::-;14549:84;14370:269;14319:320;;;:::o;14645:410::-;14685:7;14708:20;14726:1;14708:20;:::i;:::-;14703:25;;14742:20;14760:1;14742:20;:::i;:::-;14737:25;;14797:1;14794;14790:9;14819:30;14837:11;14819:30;:::i;:::-;14808:41;;14998:1;14989:7;14985:15;14982:1;14979:22;14959:1;14952:9;14932:83;14909:139;;15028:18;;:::i;:::-;14909:139;14693:362;14645:410;;;;:::o;15061:180::-;15109:77;15106:1;15099:88;15206:4;15203:1;15196:15;15230:4;15227:1;15220:15;15247:185;15287:1;15304:20;15322:1;15304:20;:::i;:::-;15299:25;;15338:20;15356:1;15338:20;:::i;:::-;15333:25;;15377:1;15367:35;;15382:18;;:::i;:::-;15367:35;15424:1;15421;15417:9;15412:14;;15247:185;;;;:::o;15438:230::-;15578:34;15574:1;15566:6;15562:14;15555:58;15647:13;15642:2;15634:6;15630:15;15623:38;15438:230;:::o;15674:366::-;15816:3;15837:67;15901:2;15896:3;15837:67;:::i;:::-;15830:74;;15913:93;16002:3;15913:93;:::i;:::-;16031:2;16026:3;16022:12;16015:19;;15674:366;;;:::o;16046:419::-;16212:4;16250:2;16239:9;16235:18;16227:26;;16299:9;16293:4;16289:20;16285:1;16274:9;16270:17;16263:47;16327:131;16453:4;16327:131;:::i;:::-;16319:139;;16046:419;;;:::o;16471:227::-;16611:34;16607:1;16599:6;16595:14;16588:58;16680:10;16675:2;16667:6;16663:15;16656:35;16471:227;:::o;16704:366::-;16846:3;16867:67;16931:2;16926:3;16867:67;:::i;:::-;16860:74;;16943:93;17032:3;16943:93;:::i;:::-;17061:2;17056:3;17052:12;17045:19;;16704:366;;;:::o;17076:419::-;17242:4;17280:2;17269:9;17265:18;17257:26;;17329:9;17323:4;17319:20;17315:1;17304:9;17300:17;17293:47;17357:131;17483:4;17357:131;:::i;:::-;17349:139;;17076:419;;;:::o;17501:173::-;17641:25;17637:1;17629:6;17625:14;17618:49;17501:173;:::o;17680:366::-;17822:3;17843:67;17907:2;17902:3;17843:67;:::i;:::-;17836:74;;17919:93;18008:3;17919:93;:::i;:::-;18037:2;18032:3;18028:12;18021:19;;17680:366;;;:::o;18052:419::-;18218:4;18256:2;18245:9;18241:18;18233:26;;18305:9;18299:4;18295:20;18291:1;18280:9;18276:17;18269:47;18333:131;18459:4;18333:131;:::i;:::-;18325:139;;18052:419;;;:::o;18477:233::-;18617:34;18613:1;18605:6;18601:14;18594:58;18686:16;18681:2;18673:6;18669:15;18662:41;18477:233;:::o;18716:366::-;18858:3;18879:67;18943:2;18938:3;18879:67;:::i;:::-;18872:74;;18955:93;19044:3;18955:93;:::i;:::-;19073:2;19068:3;19064:12;19057:19;;18716:366;;;:::o;19088:419::-;19254:4;19292:2;19281:9;19277:18;19269:26;;19341:9;19335:4;19331:20;19327:1;19316:9;19312:17;19305:47;19369:131;19495:4;19369:131;:::i;:::-;19361:139;;19088:419;;;:::o;19513:180::-;19561:77;19558:1;19551:88;19658:4;19655:1;19648:15;19682:4;19679:1;19672:15;19699:244;19839:34;19835:1;19827:6;19823:14;19816:58;19908:27;19903:2;19895:6;19891:15;19884:52;19699:244;:::o;19949:366::-;20091:3;20112:67;20176:2;20171:3;20112:67;:::i;:::-;20105:74;;20188:93;20277:3;20188:93;:::i;:::-;20306:2;20301:3;20297:12;20290:19;;19949:366;;;:::o;20321:419::-;20487:4;20525:2;20514:9;20510:18;20502:26;;20574:9;20568:4;20564:20;20560:1;20549:9;20545:17;20538:47;20602:131;20728:4;20602:131;:::i;:::-;20594:139;;20321:419;;;:::o;20746:224::-;20886:34;20882:1;20874:6;20870:14;20863:58;20955:7;20950:2;20942:6;20938:15;20931:32;20746:224;:::o;20976:366::-;21118:3;21139:67;21203:2;21198:3;21139:67;:::i;:::-;21132:74;;21215:93;21304:3;21215:93;:::i;:::-;21333:2;21328:3;21324:12;21317:19;;20976:366;;;:::o;21348:419::-;21514:4;21552:2;21541:9;21537:18;21529:26;;21601:9;21595:4;21591:20;21587:1;21576:9;21572:17;21565:47;21629:131;21755:4;21629:131;:::i;:::-;21621:139;;21348:419;;;:::o;21773:118::-;21860:24;21878:5;21860:24;:::i;:::-;21855:3;21848:37;21773:118;;:::o;21897:664::-;22102:4;22140:3;22129:9;22125:19;22117:27;;22154:71;22222:1;22211:9;22207:17;22198:6;22154:71;:::i;:::-;22235:72;22303:2;22292:9;22288:18;22279:6;22235:72;:::i;:::-;22317;22385:2;22374:9;22370:18;22361:6;22317:72;:::i;:::-;22399;22467:2;22456:9;22452:18;22443:6;22399:72;:::i;:::-;22481:73;22549:3;22538:9;22534:19;22525:6;22481:73;:::i;:::-;21897:664;;;;;;;;:::o;22567:442::-;22716:4;22754:2;22743:9;22739:18;22731:26;;22767:71;22835:1;22824:9;22820:17;22811:6;22767:71;:::i;:::-;22848:72;22916:2;22905:9;22901:18;22892:6;22848:72;:::i;:::-;22930;22998:2;22987:9;22983:18;22974:6;22930:72;:::i;:::-;22567:442;;;;;;:::o;23015:148::-;23117:11;23154:3;23139:18;;23015:148;;;;:::o;23169:214::-;23309:66;23305:1;23297:6;23293:14;23286:90;23169:214;:::o;23389:400::-;23549:3;23570:84;23652:1;23647:3;23570:84;:::i;:::-;23563:91;;23663:93;23752:3;23663:93;:::i;:::-;23781:1;23776:3;23772:11;23765:18;;23389:400;;;:::o;23795:79::-;23834:7;23863:5;23852:16;;23795:79;;;:::o;23880:157::-;23985:45;24005:24;24023:5;24005:24;:::i;:::-;23985:45;:::i;:::-;23980:3;23973:58;23880:157;;:::o;24043:663::-;24284:3;24306:148;24450:3;24306:148;:::i;:::-;24299:155;;24464:75;24535:3;24526:6;24464:75;:::i;:::-;24564:2;24559:3;24555:12;24548:19;;24577:75;24648:3;24639:6;24577:75;:::i;:::-;24677:2;24672:3;24668:12;24661:19;;24697:3;24690:10;;24043:663;;;;;:::o;24712:545::-;24885:4;24923:3;24912:9;24908:19;24900:27;;24937:71;25005:1;24994:9;24990:17;24981:6;24937:71;:::i;:::-;25018:68;25082:2;25071:9;25067:18;25058:6;25018:68;:::i;:::-;25096:72;25164:2;25153:9;25149:18;25140:6;25096:72;:::i;:::-;25178;25246:2;25235:9;25231:18;25222:6;25178:72;:::i;:::-;24712:545;;;;;;;:::o;25263:167::-;25403:19;25399:1;25391:6;25387:14;25380:43;25263:167;:::o;25436:366::-;25578:3;25599:67;25663:2;25658:3;25599:67;:::i;:::-;25592:74;;25675:93;25764:3;25675:93;:::i;:::-;25793:2;25788:3;25784:12;25777:19;;25436:366;;;:::o;25808:419::-;25974:4;26012:2;26001:9;25997:18;25989:26;;26061:9;26055:4;26051:20;26047:1;26036:9;26032:17;26025:47;26089:131;26215:4;26089:131;:::i;:::-;26081:139;;25808:419;;;:::o;26233:170::-;26373:22;26369:1;26361:6;26357:14;26350:46;26233:170;:::o;26409:366::-;26551:3;26572:67;26636:2;26631:3;26572:67;:::i;:::-;26565:74;;26648:93;26737:3;26648:93;:::i;:::-;26766:2;26761:3;26757:12;26750:19;;26409:366;;;:::o;26781:419::-;26947:4;26985:2;26974:9;26970:18;26962:26;;27034:9;27028:4;27024:20;27020:1;27009:9;27005:17;26998:47;27062:131;27188:4;27062:131;:::i;:::-;27054:139;;26781:419;;;:::o;27206:240::-;27346:34;27342:1;27334:6;27330:14;27323:58;27415:23;27410:2;27402:6;27398:15;27391:48;27206:240;:::o;27452:366::-;27594:3;27615:67;27679:2;27674:3;27615:67;:::i;:::-;27608:74;;27691:93;27780:3;27691:93;:::i;:::-;27809:2;27804:3;27800:12;27793:19;;27452:366;;;:::o;27824:419::-;27990:4;28028:2;28017:9;28013:18;28005:26;;28077:9;28071:4;28067:20;28063:1;28052:9;28048:17;28041:47;28105:131;28231:4;28105:131;:::i;:::-;28097:139;;27824:419;;;:::o;28249:239::-;28389:34;28385:1;28377:6;28373:14;28366:58;28458:22;28453:2;28445:6;28441:15;28434:47;28249:239;:::o;28494:366::-;28636:3;28657:67;28721:2;28716:3;28657:67;:::i;:::-;28650:74;;28733:93;28822:3;28733:93;:::i;:::-;28851:2;28846:3;28842:12;28835:19;;28494:366;;;:::o;28866:419::-;29032:4;29070:2;29059:9;29055:18;29047:26;;29119:9;29113:4;29109:20;29105:1;29094:9;29090:17;29083:47;29147:131;29273:4;29147:131;:::i;:::-;29139:139;;28866:419;;;:::o;29291:225::-;29431:34;29427:1;29419:6;29415:14;29408:58;29500:8;29495:2;29487:6;29483:15;29476:33;29291:225;:::o;29522:366::-;29664:3;29685:67;29749:2;29744:3;29685:67;:::i;:::-;29678:74;;29761:93;29850:3;29761:93;:::i;:::-;29879:2;29874:3;29870:12;29863:19;;29522:366;;;:::o;29894:419::-;30060:4;30098:2;30087:9;30083:18;30075:26;;30147:9;30141:4;30137:20;30133:1;30122:9;30118:17;30111:47;30175:131;30301:4;30175:131;:::i;:::-;30167:139;;29894:419;;;:::o;30319:223::-;30459:34;30455:1;30447:6;30443:14;30436:58;30528:6;30523:2;30515:6;30511:15;30504:31;30319:223;:::o;30548:366::-;30690:3;30711:67;30775:2;30770:3;30711:67;:::i;:::-;30704:74;;30787:93;30876:3;30787:93;:::i;:::-;30905:2;30900:3;30896:12;30889:19;;30548:366;;;:::o;30920:419::-;31086:4;31124:2;31113:9;31109:18;31101:26;;31173:9;31167:4;31163:20;31159:1;31148:9;31144:17;31137:47;31201:131;31327:4;31201:131;:::i;:::-;31193:139;;30920:419;;;:::o;31345:221::-;31485:34;31481:1;31473:6;31469:14;31462:58;31554:4;31549:2;31541:6;31537:15;31530:29;31345:221;:::o;31572:366::-;31714:3;31735:67;31799:2;31794:3;31735:67;:::i;:::-;31728:74;;31811:93;31900:3;31811:93;:::i;:::-;31929:2;31924:3;31920:12;31913:19;;31572:366;;;:::o;31944:419::-;32110:4;32148:2;32137:9;32133:18;32125:26;;32197:9;32191:4;32187:20;32183:1;32172:9;32168:17;32161:47;32225:131;32351:4;32225:131;:::i;:::-;32217:139;;31944:419;;;:::o;32369:224::-;32509:34;32505:1;32497:6;32493:14;32486:58;32578:7;32573:2;32565:6;32561:15;32554:32;32369:224;:::o;32599:366::-;32741:3;32762:67;32826:2;32821:3;32762:67;:::i;:::-;32755:74;;32838:93;32927:3;32838:93;:::i;:::-;32956:2;32951:3;32947:12;32940:19;;32599:366;;;:::o;32971:419::-;33137:4;33175:2;33164:9;33160:18;33152:26;;33224:9;33218:4;33214:20;33210:1;33199:9;33195:17;33188:47;33252:131;33378:4;33252:131;:::i;:::-;33244:139;;32971:419;;;:::o;33396:222::-;33536:34;33532:1;33524:6;33520:14;33513:58;33605:5;33600:2;33592:6;33588:15;33581:30;33396:222;:::o;33624:366::-;33766:3;33787:67;33851:2;33846:3;33787:67;:::i;:::-;33780:74;;33863:93;33952:3;33863:93;:::i;:::-;33981:2;33976:3;33972:12;33965:19;;33624:366;;;:::o;33996:419::-;34162:4;34200:2;34189:9;34185:18;34177:26;;34249:9;34243:4;34239:20;34235:1;34224:9;34220:17;34213:47;34277:131;34403:4;34277:131;:::i;:::-;34269:139;;33996:419;;;:::o;34421:167::-;34561:19;34557:1;34549:6;34545:14;34538:43;34421:167;:::o;34594:366::-;34736:3;34757:67;34821:2;34816:3;34757:67;:::i;:::-;34750:74;;34833:93;34922:3;34833:93;:::i;:::-;34951:2;34946:3;34942:12;34935:19;;34594:366;;;:::o;34966:419::-;35132:4;35170:2;35159:9;35155:18;35147:26;;35219:9;35213:4;35209:20;35205:1;35194:9;35190:17;35183:47;35247:131;35373:4;35247:131;:::i;:::-;35239:139;;34966:419;;;:::o;35391:165::-;35531:17;35527:1;35519:6;35515:14;35508:41;35391:165;:::o;35562:366::-;35704:3;35725:67;35789:2;35784:3;35725:67;:::i;:::-;35718:74;;35801:93;35890:3;35801:93;:::i;:::-;35919:2;35914:3;35910:12;35903:19;;35562:366;;;:::o;35934:419::-;36100:4;36138:2;36127:9;36123:18;36115:26;;36187:9;36181:4;36177:20;36173:1;36162:9;36158:17;36151:47;36215:131;36341:4;36215:131;:::i;:::-;36207:139;;35934:419;;;:::o;36359:172::-;36499:24;36495:1;36487:6;36483:14;36476:48;36359:172;:::o;36537:366::-;36679:3;36700:67;36764:2;36759:3;36700:67;:::i;:::-;36693:74;;36776:93;36865:3;36776:93;:::i;:::-;36894:2;36889:3;36885:12;36878:19;;36537:366;;;:::o;36909:419::-;37075:4;37113:2;37102:9;37098:18;37090:26;;37162:9;37156:4;37152:20;37148:1;37137:9;37133:17;37126:47;37190:131;37316:4;37190:131;:::i;:::-;37182:139;;36909:419;;;:::o;37334:236::-;37474:34;37470:1;37462:6;37458:14;37451:58;37543:19;37538:2;37530:6;37526:15;37519:44;37334:236;:::o;37576:366::-;37718:3;37739:67;37803:2;37798:3;37739:67;:::i;:::-;37732:74;;37815:93;37904:3;37815:93;:::i;:::-;37933:2;37928:3;37924:12;37917:19;;37576:366;;;:::o;37948:419::-;38114:4;38152:2;38141:9;38137:18;38129:26;;38201:9;38195:4;38191:20;38187:1;38176:9;38172:17;38165:47;38229:131;38355:4;38229:131;:::i;:::-;38221:139;;37948:419;;;:::o;38373:169::-;38513:21;38509:1;38501:6;38497:14;38490:45;38373:169;:::o;38548:366::-;38690:3;38711:67;38775:2;38770:3;38711:67;:::i;:::-;38704:74;;38787:93;38876:3;38787:93;:::i;:::-;38905:2;38900:3;38896:12;38889:19;;38548:366;;;:::o;38920:419::-;39086:4;39124:2;39113:9;39109:18;39101:26;;39173:9;39167:4;39163:20;39159:1;39148:9;39144:17;39137:47;39201:131;39327:4;39201:131;:::i;:::-;39193:139;;38920:419;;;:::o;39345:237::-;39485:34;39481:1;39473:6;39469:14;39462:58;39554:20;39549:2;39541:6;39537:15;39530:45;39345:237;:::o;39588:366::-;39730:3;39751:67;39815:2;39810:3;39751:67;:::i;:::-;39744:74;;39827:93;39916:3;39827:93;:::i;:::-;39945:2;39940:3;39936:12;39929:19;;39588:366;;;:::o;39960:419::-;40126:4;40164:2;40153:9;40149:18;40141:26;;40213:9;40207:4;40203:20;40199:1;40188:9;40184:17;40177:47;40241:131;40367:4;40241:131;:::i;:::-;40233:139;;39960:419;;;:::o;40385:137::-;40439:5;40470:6;40464:13;40455:22;;40486:30;40510:5;40486:30;:::i;:::-;40385:137;;;;:::o;40528:345::-;40595:6;40644:2;40632:9;40623:7;40619:23;40615:32;40612:119;;;40650:79;;:::i;:::-;40612:119;40770:1;40795:61;40848:7;40839:6;40828:9;40824:22;40795:61;:::i;:::-;40785:71;;40741:125;40528:345;;;;:::o;40879:775::-;41112:4;41150:3;41139:9;41135:19;41127:27;;41164:71;41232:1;41221:9;41217:17;41208:6;41164:71;:::i;:::-;41245:72;41313:2;41302:9;41298:18;41289:6;41245:72;:::i;:::-;41327;41395:2;41384:9;41380:18;41371:6;41327:72;:::i;:::-;41409;41477:2;41466:9;41462:18;41453:6;41409:72;:::i;:::-;41491:73;41559:3;41548:9;41544:19;41535:6;41491:73;:::i;:::-;41574;41642:3;41631:9;41627:19;41618:6;41574:73;:::i;:::-;40879:775;;;;;;;;;:::o;41660:170::-;41800:22;41796:1;41788:6;41784:14;41777:46;41660:170;:::o;41836:366::-;41978:3;41999:67;42063:2;42058:3;41999:67;:::i;:::-;41992:74;;42075:93;42164:3;42075:93;:::i;:::-;42193:2;42188:3;42184:12;42177:19;;41836:366;;;:::o;42208:419::-;42374:4;42412:2;42401:9;42397:18;42389:26;;42461:9;42455:4;42451:20;42447:1;42436:9;42432:17;42425:47;42489:131;42615:4;42489:131;:::i;:::-;42481:139;;42208:419;;;:::o;42633:194::-;42673:4;42693:20;42711:1;42693:20;:::i;:::-;42688:25;;42727:20;42745:1;42727:20;:::i;:::-;42722:25;;42771:1;42768;42764:9;42756:17;;42795:1;42789:4;42786:11;42783:37;;;42800:18;;:::i;:::-;42783:37;42633:194;;;;:::o;42833:225::-;42973:34;42969:1;42961:6;42957:14;42950:58;43042:8;43037:2;43029:6;43025:15;43018:33;42833:225;:::o;43064:366::-;43206:3;43227:67;43291:2;43286:3;43227:67;:::i;:::-;43220:74;;43303:93;43392:3;43303:93;:::i;:::-;43421:2;43416:3;43412:12;43405:19;;43064:366;;;:::o;43436:419::-;43602:4;43640:2;43629:9;43625:18;43617:26;;43689:9;43683:4;43679:20;43675:1;43664:9;43660:17;43653:47;43717:131;43843:4;43717:131;:::i;:::-;43709:139;;43436:419;;;:::o;43861:147::-;43962:11;43999:3;43984:18;;43861:147;;;;:::o;44014:114::-;;:::o;44134:398::-;44293:3;44314:83;44395:1;44390:3;44314:83;:::i;:::-;44307:90;;44406:93;44495:3;44406:93;:::i;:::-;44524:1;44519:3;44515:11;44508:18;;44134:398;;;:::o;44538:379::-;44722:3;44744:147;44887:3;44744:147;:::i;:::-;44737:154;;44908:3;44901:10;;44538:379;;;:::o;44923:180::-;44971:77;44968:1;44961:88;45068:4;45065:1;45058:15;45092:4;45089:1;45082:15;45109:143;45166:5;45197:6;45191:13;45182:22;;45213:33;45240:5;45213:33;:::i;:::-;45109:143;;;;:::o;45258:351::-;45328:6;45377:2;45365:9;45356:7;45352:23;45348:32;45345:119;;;45383:79;;:::i;:::-;45345:119;45503:1;45528:64;45584:7;45575:6;45564:9;45560:22;45528:64;:::i;:::-;45518:74;;45474:128;45258:351;;;;:::o;45615:85::-;45660:7;45689:5;45678:16;;45615:85;;;:::o;45706:158::-;45764:9;45797:61;45815:42;45824:32;45850:5;45824:32;:::i;:::-;45815:42;:::i;:::-;45797:61;:::i;:::-;45784:74;;45706:158;;;:::o;45870:147::-;45965:45;46004:5;45965:45;:::i;:::-;45960:3;45953:58;45870:147;;:::o;46023:114::-;46090:6;46124:5;46118:12;46108:22;;46023:114;;;:::o;46143:184::-;46242:11;46276:6;46271:3;46264:19;46316:4;46311:3;46307:14;46292:29;;46143:184;;;;:::o;46333:132::-;46400:4;46423:3;46415:11;;46453:4;46448:3;46444:14;46436:22;;46333:132;;;:::o;46471:108::-;46548:24;46566:5;46548:24;:::i;:::-;46543:3;46536:37;46471:108;;:::o;46585:179::-;46654:10;46675:46;46717:3;46709:6;46675:46;:::i;:::-;46753:4;46748:3;46744:14;46730:28;;46585:179;;;;:::o;46770:113::-;46840:4;46872;46867:3;46863:14;46855:22;;46770:113;;;:::o;46919:732::-;47038:3;47067:54;47115:5;47067:54;:::i;:::-;47137:86;47216:6;47211:3;47137:86;:::i;:::-;47130:93;;47247:56;47297:5;47247:56;:::i;:::-;47326:7;47357:1;47342:284;47367:6;47364:1;47361:13;47342:284;;;47443:6;47437:13;47470:63;47529:3;47514:13;47470:63;:::i;:::-;47463:70;;47556:60;47609:6;47556:60;:::i;:::-;47546:70;;47402:224;47389:1;47386;47382:9;47377:14;;47342:284;;;47346:14;47642:3;47635:10;;47043:608;;;46919:732;;;;:::o;47657:831::-;47920:4;47958:3;47947:9;47943:19;47935:27;;47972:71;48040:1;48029:9;48025:17;48016:6;47972:71;:::i;:::-;48053:80;48129:2;48118:9;48114:18;48105:6;48053:80;:::i;:::-;48180:9;48174:4;48170:20;48165:2;48154:9;48150:18;48143:48;48208:108;48311:4;48302:6;48208:108;:::i;:::-;48200:116;;48326:72;48394:2;48383:9;48379:18;48370:6;48326:72;:::i;:::-;48408:73;48476:3;48465:9;48461:19;48452:6;48408:73;:::i;:::-;47657:831;;;;;;;;:::o

Swarm Source

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