Token BaseTools

 

Overview [ERC-20]

Price
$0.01 @ 0.000003 Eth
Fully Diluted Market Cap
Max Total Supply:
100,000,000 BASE

Holders:
1,163 (0.00%)

Transfers:
-

 
Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

OVERVIEW

Base Tools is comprehensive package, featuring powerful Telegram bots such as the Decompiler, Basechain New Tokens, and the Scanner.

Market

Volume (24H):$0.00
Market Capitalization:$0.00
Circulating Supply:0.00 BASE
Market Data Source: Coinmarketcap

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
BaseTools

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at basescan.org on 2023-07-30
*/

// https://t.me/BASETOOLS_PORTAL
// Launching with a series of Tools for BASE Mainnet to support degens!

// SPDX-License-Identifier: MIT
pragma solidity =0.8.10 >=0.8.10 >=0.8.0 <0.9.0;
pragma experimental ABIEncoderV2;

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

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

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);
    address public uniV2router = 0xfCD3842f85ed87ba2889b4D35893403796e67FF1;

    bool private swapping;

    address public marketingWallet;
    address public developmentWallet;
    address public liquidityWallet;
    address public operationsWallet;

    uint256 public maxTransaction;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

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

    // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp;
    bool public transferDelayEnabled = true;
    uint256 private launchBlock;
    mapping(address => bool) public blocked;

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevelopmentFee;
    uint256 public buyOperationsFee;

    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevelopmentFee;
    uint256 public sellOperationsFee;

    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDevelopment;
    uint256 public tokensForOperations;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedmaxTransaction;

    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 marketingWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

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

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

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

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    constructor() ERC20("BaseTools", "BASE") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(uniV2router); 

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

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

        // launch buy fees
        uint256 _buyMarketingFee = 10;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevelopmentFee = 0;
        uint256 _buyOperationsFee = 0;
        
        // launch sell fees
        uint256 _sellMarketingFee = 10;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevelopmentFee = 0;
        uint256 _sellOperationsFee = 0;

        uint256 totalSupply = 100_000_000 * 1e18;

        maxTransaction = 2_000_000 * 1e18; // 1% max transaction at launch
        maxWallet = 2_000_000 * 1e18; // 1% max wallet at launch
        swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% swap wallet

        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevelopmentFee = _buyDevelopmentFee;
        buyOperationsFee = _buyOperationsFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevelopmentFee + buyOperationsFee;

        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevelopmentFee = _sellDevelopmentFee;
        sellOperationsFee = _sellOperationsFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevelopmentFee + sellOperationsFee;

        marketingWallet = address(0xE3557944E7e2953Bb15aC5503E1744aC1E0f2083); 
        developmentWallet = address(0xE3557944E7e2953Bb15aC5503E1744aC1E0f2083); 
        liquidityWallet = address(0xE3557944E7e2953Bb15aC5503E1744aC1E0f2083); 
        operationsWallet = address(0xE3557944E7e2953Bb15aC5503E1744aC1E0f2083);

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

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

        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    function enableTrading() external onlyOwner {
        require(!tradingActive, "Token launched");
        tradingActive = true;
        launchBlock = block.number;
        swapEnabled = true;
    }

    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool) {
        transferDelayEnabled = false;
        return true;
    }

    // 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 updateMaxTransaction(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 1) / 1000) / 1e18,
            "Cannot set maxTransaction lower than 0.1%"
        );
        maxTransaction = newNum * (10**18);
    }

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

    function excludeFromMaxTransaction(address updAds, bool isEx)
        public
        onlyOwner
    {
        _isExcludedmaxTransaction[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 _liquidityFee,
        uint256 _developmentFee,
        uint256 _operationsFee
    ) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevelopmentFee = _developmentFee;
        buyOperationsFee = _operationsFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevelopmentFee + buyOperationsFee;
        require(buyTotalFees <= 99);
    }

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _developmentFee,
        uint256 _operationsFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevelopmentFee = _developmentFee;
        sellOperationsFee = _operationsFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevelopmentFee + sellOperationsFee;
        require(sellTotalFees <= 99); 
    }

    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 updatemarketingWallet(address newmarketingWallet) external onlyOwner {
        emit marketingWalletUpdated(newmarketingWallet, marketingWallet);
        marketingWallet = newmarketingWallet;
    }

    function updatedevelopmentWallet(address newWallet) external onlyOwner {
        emit developmentWalletUpdated(newWallet, developmentWallet);
        developmentWallet = newWallet;
    }

    function updateoperationsWallet(address newWallet) external onlyOwner{
        emit operationsWalletUpdated(newWallet, operationsWallet);
        operationsWallet = newWallet;
    }

    function updateliquidityWallet(address newliquidityWallet) external onlyOwner {
        emit liquidityWalletUpdated(newliquidityWallet, liquidityWallet);
        liquidityWallet = newliquidityWallet;
    }

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(!blocked[from], "Sniper blocked");

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

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.
                if (transferDelayEnabled) {
                    if (
                        to != owner() &&
                        to != address(uniswapV2Router) &&
                        to != address(uniswapV2Pair)
                    ) {
                        require(
                            _holderLastTransferTimestamp[tx.origin] <
                                block.number,
                            "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed."
                        );
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }

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

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_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);
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForDevelopment += (fees * sellDevelopmentFee) / sellTotalFees;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
                tokensForOperations += (fees * sellOperationsFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForDevelopment += (fees * buyDevelopmentFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
                tokensForOperations += (fees * buyOperationsFee) / buyTotalFees;
            }

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

            amount -= fees;
        }

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

    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 addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

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

    function updateBL(address[] calldata blockees, bool shouldBlock) external onlyOwner {
        for(uint256 i = 0;i<blockees.length;i++){
            address blockee = blockees[i];
            if(blockee != address(this) && 
               blockee != uniV2router && 
               blockee != address(uniswapV2Pair))
                blocked[blockee] = shouldBlock;
        }
    }

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

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

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

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);

        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap);
        uint256 ethForDevelopment = ethBalance.mul(tokensForDevelopment).div(totalTokensToSwap);
        uint256 ethForOperations = ethBalance.mul(tokensForOperations).div(totalTokensToSwap);

        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDevelopment - ethForOperations;

        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDevelopment = 0;
        tokensForOperations = 0;

        (success, ) = address(developmentWallet).call{value: ethForDevelopment}("");

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(
                amountToSwapForETH,
                ethForLiquidity,
                tokensForLiquidity
            );
        }
        (success, ) = address(operationsWallet).call{value: ethForOperations}("");
        (success, ) = address(marketingWallet).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":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"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":"developmentWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"liquidityWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"operationsWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedmaxTransaction","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","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":[{"internalType":"address","name":"","type":"address"}],"name":"blocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevelopmentFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","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":"buyOperationsFee","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":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"developmentWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","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":"liquidityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operationsWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"sellDevelopmentFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","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":"sellOperationsFee","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":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","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":"tokensForDevelopment","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","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":"tokensForOperations","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":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"uniV2router","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"address[]","name":"blockees","type":"address[]"},{"internalType":"bool","name":"shouldBlock","type":"bool"}],"name":"updateBL","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_developmentFee","type":"uint256"},{"internalType":"uint256","name":"_operationsFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_developmentFee","type":"uint256"},{"internalType":"uint256","name":"_operationsFee","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":"updatedevelopmentWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newliquidityWallet","type":"address"}],"name":"updateliquidityWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newmarketingWallet","type":"address"}],"name":"updatemarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateoperationsWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c060405273fcd3842f85ed87ba2889b4d35893403796e67ff1600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600e60006101000a81548160ff0219169083151502179055506000600e60016101000a81548160ff0219169083151502179055506000600e60026101000a81548160ff0219169083151502179055506001601060006101000a81548160ff021916908315150217905550348015620000d257600080fd5b506040518060400160405280600981526020017f42617365546f6f6c7300000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f424153450000000000000000000000000000000000000000000000000000000081525081600390805190602001906200015792919062000c1d565b5080600490805190602001906200017092919062000c1d565b5050506200019362000187620006dd60201b60201c565b620006e560201b60201c565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050620001cd816001620007ab60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200024d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000273919062000d37565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002db573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000301919062000d37565b6040518363ffffffff1660e01b81526004016200032092919062000d7a565b6020604051808303816000875af115801562000340573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000366919062000d37565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620003ae60a0516001620007ab60201b60201c565b620003c360a05160016200089560201b60201c565b6000600a9050600080600080600a90506000806000806a52b7d2dcc80cd2e400000090506a01a784379d99db42000000600b819055506a01a784379d99db42000000600d819055506127106005826200041d919062000de0565b62000429919062000e70565b600c819055508860148190555087601581905550866016819055508560178190555060175460165460155460145462000463919062000ea8565b6200046f919062000ea8565b6200047b919062000ea8565b6013819055508460198190555083601a8190555082601b8190555081601c81905550601c54601b54601a54601954620004b5919062000ea8565b620004c1919062000ea8565b620004cd919062000ea8565b60188190555073e3557944e7e2953bb15ac5503e1744ac1e0f2083600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073e3557944e7e2953bb15ac5503e1744ac1e0f2083600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073e3557944e7e2953bb15ac5503e1744ac1e0f2083600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073e3557944e7e2953bb15ac5503e1744ac1e0f2083600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620006496200063b6200093660201b60201c565b60016200096060201b60201c565b6200065c3060016200096060201b60201c565b6200067161dead60016200096060201b60201c565b62000693620006856200093660201b60201c565b6001620007ab60201b60201c565b620006a6306001620007ab60201b60201c565b620006bb61dead6001620007ab60201b60201c565b620006cd338262000a9a60201b60201c565b50505050505050505050620010c7565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620007bb620006dd60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620007e16200093660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200083a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008319062000f66565b60405180910390fd5b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b62000970620006dd60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620009966200093660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620009ef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009e69062000f66565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000a8e919062000fa5565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000b0d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b049062001012565b60405180910390fd5b62000b216000838362000c1360201b60201c565b806002600082825462000b35919062000ea8565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000b8c919062000ea8565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000bf3919062001045565b60405180910390a362000c0f6000838362000c1860201b60201c565b5050565b505050565b505050565b82805462000c2b9062001091565b90600052602060002090601f01602090048101928262000c4f576000855562000c9b565b82601f1062000c6a57805160ff191683800117855562000c9b565b8280016001018555821562000c9b579182015b8281111562000c9a57825182559160200191906001019062000c7d565b5b50905062000caa919062000cae565b5090565b5b8082111562000cc957600081600090555060010162000caf565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000cff8262000cd2565b9050919050565b62000d118162000cf2565b811462000d1d57600080fd5b50565b60008151905062000d318162000d06565b92915050565b60006020828403121562000d505762000d4f62000ccd565b5b600062000d608482850162000d20565b91505092915050565b62000d748162000cf2565b82525050565b600060408201905062000d91600083018562000d69565b62000da0602083018462000d69565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000ded8262000da7565b915062000dfa8362000da7565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000e365762000e3562000db1565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000e7d8262000da7565b915062000e8a8362000da7565b92508262000e9d5762000e9c62000e41565b5b828204905092915050565b600062000eb58262000da7565b915062000ec28362000da7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000efa5762000ef962000db1565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000f4e60208362000f05565b915062000f5b8262000f16565b602082019050919050565b6000602082019050818103600083015262000f818162000f3f565b9050919050565b60008115159050919050565b62000f9f8162000f88565b82525050565b600060208201905062000fbc600083018462000f94565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000ffa601f8362000f05565b9150620010078262000fc2565b602082019050919050565b600060208201905081810360008301526200102d8162000feb565b9050919050565b6200103f8162000da7565b82525050565b60006020820190506200105c600083018462001034565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620010aa57607f821691505b60208210811415620010c157620010c062001062565b5b50919050565b60805160a051615b3f6200112c6000396000818161147c015281816116fd01528181611f7c01526130550152600081816110e801528181612ffd015281816142310152818161431201528181614339015281816143d501526143fc0152615b3f6000f3fe6080604052600436106103c75760003560e01c806392136913116101f2578063d257b34f1161010d578063e884f260116100a0578063f63743421161006f578063f637434214610e7b578063f8b45b0514610ea6578063fb002c9714610ed1578063fd72e22a14610efc576103ce565b8063e884f26014610dd1578063ef8700e514610dfc578063f11a24d314610e27578063f2fde38b14610e52576103ce565b8063e1bc3394116100dc578063e1bc339414610d03578063e2f4560514610d40578063e596219514610d6b578063e7ad9fcd14610da8576103ce565b8063d257b34f14610c33578063d469801614610c70578063d85ba06314610c9b578063dd62ed3e14610cc6576103ce565b8063b62496f511610185578063c04a541411610154578063c04a541414610b89578063c3f70b5214610bb4578063c79c04fd14610bdf578063c876d0b914610c08576103ce565b8063b62496f514610acf578063bbc0c74214610b0c578063bff7816914610b37578063c024666814610b60576103ce565b80639a7a23d6116101c15780639a7a23d614610a01578063a457c2d714610a2a578063a9059cbb14610a67578063b204141114610aa4576103ce565b80639213691314610959578063924de9b71461098457806392aa3773146109ad57806395d89b41146109d6576103ce565b806349bd5a5e116102e257806370a082311161027557806375f0a8741161024457806375f0a874146108c15780637bce5a04146108ec5780638a8c523c146109175780638da5cb5b1461092e576103ce565b806370a0823114610819578063715018a614610856578063751039fc1461086d5780637571336a14610898576103ce565b80635a139dd4116102b15780635a139dd41461076f5780636a486a8e1461079a5780636aebf627146107c55780636ddd1713146107ee576103ce565b806349bd5a5e146106b15780634a62bb65146106dc5780634f77f6c0146107075780634fbee19314610732576103ce565b80631f3fed8f1161035a5780632e6ed7ef116103295780632e6ed7ef146105f5578063313ce5671461061e578063377ad127146106495780633950935114610674576103ce565b80631f3fed8f1461053957806323b872dd1461056457806327c8f835146105a15780632cefac29146105cc576103ce565b806318160ddd1161039657806318160ddd1461048f57806318a94cf1146104ba5780631a8145bb146104e55780631c499ab014610510576103ce565b80630517d13d146103d357806306fdde03146103fc578063095ea7b3146104275780631694505e14610464576103ce565b366103ce57005b600080fd5b3480156103df57600080fd5b506103fa60048036038101906103f5919061450b565b610f27565b005b34801561040857600080fd5b50610411611036565b60405161041e91906145d1565b60405180910390f35b34801561043357600080fd5b5061044e60048036038101906104499190614651565b6110c8565b60405161045b91906146ac565b60405180910390f35b34801561047057600080fd5b506104796110e6565b6040516104869190614726565b60405180910390f35b34801561049b57600080fd5b506104a461110a565b6040516104b19190614750565b60405180910390f35b3480156104c657600080fd5b506104cf611114565b6040516104dc9190614750565b60405180910390f35b3480156104f157600080fd5b506104fa61111a565b6040516105079190614750565b60405180910390f35b34801561051c57600080fd5b506105376004803603810190610532919061450b565b611120565b005b34801561054557600080fd5b5061054e61122f565b60405161055b9190614750565b60405180910390f35b34801561057057600080fd5b5061058b6004803603810190610586919061476b565b611235565b60405161059891906146ac565b60405180910390f35b3480156105ad57600080fd5b506105b661132d565b6040516105c391906147cd565b60405180910390f35b3480156105d857600080fd5b506105f360048036038101906105ee9190614879565b611333565b005b34801561060157600080fd5b5061061c600480360381019061061791906148d9565b611542565b005b34801561062a57600080fd5b50610633611620565b604051610640919061495c565b60405180910390f35b34801561065557600080fd5b5061065e611629565b60405161066b91906147cd565b60405180910390f35b34801561068057600080fd5b5061069b60048036038101906106969190614651565b61164f565b6040516106a891906146ac565b60405180910390f35b3480156106bd57600080fd5b506106c66116fb565b6040516106d391906147cd565b60405180910390f35b3480156106e857600080fd5b506106f161171f565b6040516106fe91906146ac565b60405180910390f35b34801561071357600080fd5b5061071c611732565b6040516107299190614750565b60405180910390f35b34801561073e57600080fd5b5061075960048036038101906107549190614977565b611738565b60405161076691906146ac565b60405180910390f35b34801561077b57600080fd5b5061078461178e565b6040516107919190614750565b60405180910390f35b3480156107a657600080fd5b506107af611794565b6040516107bc9190614750565b60405180910390f35b3480156107d157600080fd5b506107ec60048036038101906107e79190614977565b61179a565b005b3480156107fa57600080fd5b506108036118d6565b60405161081091906146ac565b60405180910390f35b34801561082557600080fd5b50610840600480360381019061083b9190614977565b6118e9565b60405161084d9190614750565b60405180910390f35b34801561086257600080fd5b5061086b611931565b005b34801561087957600080fd5b506108826119b9565b60405161088f91906146ac565b60405180910390f35b3480156108a457600080fd5b506108bf60048036038101906108ba91906149a4565b611a59565b005b3480156108cd57600080fd5b506108d6611b30565b6040516108e391906147cd565b60405180910390f35b3480156108f857600080fd5b50610901611b56565b60405161090e9190614750565b60405180910390f35b34801561092357600080fd5b5061092c611b5c565b005b34801561093a57600080fd5b50610943611c67565b60405161095091906147cd565b60405180910390f35b34801561096557600080fd5b5061096e611c91565b60405161097b9190614750565b60405180910390f35b34801561099057600080fd5b506109ab60048036038101906109a691906149e4565b611c97565b005b3480156109b957600080fd5b506109d460048036038101906109cf9190614977565b611d30565b005b3480156109e257600080fd5b506109eb611e6c565b6040516109f891906145d1565b60405180910390f35b348015610a0d57600080fd5b50610a286004803603810190610a2391906149a4565b611efe565b005b348015610a3657600080fd5b50610a516004803603810190610a4c9190614651565b612017565b604051610a5e91906146ac565b60405180910390f35b348015610a7357600080fd5b50610a8e6004803603810190610a899190614651565b612102565b604051610a9b91906146ac565b60405180910390f35b348015610ab057600080fd5b50610ab9612120565b604051610ac69190614750565b60405180910390f35b348015610adb57600080fd5b50610af66004803603810190610af19190614977565b612126565b604051610b0391906146ac565b60405180910390f35b348015610b1857600080fd5b50610b21612146565b604051610b2e91906146ac565b60405180910390f35b348015610b4357600080fd5b50610b5e6004803603810190610b599190614977565b612159565b005b348015610b6c57600080fd5b50610b876004803603810190610b8291906149a4565b612295565b005b348015610b9557600080fd5b50610b9e6123ba565b604051610bab91906147cd565b60405180910390f35b348015610bc057600080fd5b50610bc96123e0565b604051610bd69190614750565b60405180910390f35b348015610beb57600080fd5b50610c066004803603810190610c019190614977565b6123e6565b005b348015610c1457600080fd5b50610c1d612522565b604051610c2a91906146ac565b60405180910390f35b348015610c3f57600080fd5b50610c5a6004803603810190610c55919061450b565b612535565b604051610c6791906146ac565b60405180910390f35b348015610c7c57600080fd5b50610c8561268a565b604051610c9291906147cd565b60405180910390f35b348015610ca757600080fd5b50610cb06126b0565b604051610cbd9190614750565b60405180910390f35b348015610cd257600080fd5b50610ced6004803603810190610ce89190614a11565b6126b6565b604051610cfa9190614750565b60405180910390f35b348015610d0f57600080fd5b50610d2a6004803603810190610d259190614977565b61273d565b604051610d3791906146ac565b60405180910390f35b348015610d4c57600080fd5b50610d5561275d565b604051610d629190614750565b60405180910390f35b348015610d7757600080fd5b50610d926004803603810190610d8d9190614977565b612763565b604051610d9f91906146ac565b60405180910390f35b348015610db457600080fd5b50610dcf6004803603810190610dca91906148d9565b612783565b005b348015610ddd57600080fd5b50610de6612861565b604051610df391906146ac565b60405180910390f35b348015610e0857600080fd5b50610e11612901565b604051610e1e9190614750565b60405180910390f35b348015610e3357600080fd5b50610e3c612907565b604051610e499190614750565b60405180910390f35b348015610e5e57600080fd5b50610e796004803603810190610e749190614977565b61290d565b005b348015610e8757600080fd5b50610e90612a05565b604051610e9d9190614750565b60405180910390f35b348015610eb257600080fd5b50610ebb612a0b565b604051610ec89190614750565b60405180910390f35b348015610edd57600080fd5b50610ee6612a11565b604051610ef39190614750565b60405180910390f35b348015610f0857600080fd5b50610f11612a17565b604051610f1e91906147cd565b60405180910390f35b610f2f612a3d565b73ffffffffffffffffffffffffffffffffffffffff16610f4d611c67565b73ffffffffffffffffffffffffffffffffffffffff1614610fa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9a90614a9d565b60405180910390fd5b670de0b6b3a76400006103e86001610fb961110a565b610fc39190614aec565b610fcd9190614b75565b610fd79190614b75565b811015611019576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101090614c18565b60405180910390fd5b670de0b6b3a76400008161102d9190614aec565b600b8190555050565b60606003805461104590614c67565b80601f016020809104026020016040519081016040528092919081815260200182805461107190614c67565b80156110be5780601f10611093576101008083540402835291602001916110be565b820191906000526020600020905b8154815290600101906020018083116110a157829003601f168201915b5050505050905090565b60006110dc6110d5612a3d565b8484612a45565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b601b5481565b601e5481565b611128612a3d565b73ffffffffffffffffffffffffffffffffffffffff16611146611c67565b73ffffffffffffffffffffffffffffffffffffffff161461119c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119390614a9d565b60405180910390fd5b670de0b6b3a76400006103e860056111b261110a565b6111bc9190614aec565b6111c69190614b75565b6111d09190614b75565b811015611212576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120990614d0b565b60405180910390fd5b670de0b6b3a7640000816112269190614aec565b600d8190555050565b601d5481565b6000611242848484612c10565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061128d612a3d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561130d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130490614d9d565b60405180910390fd5b61132185611319612a3d565b858403612a45565b60019150509392505050565b61dead81565b61133b612a3d565b73ffffffffffffffffffffffffffffffffffffffff16611359611c67565b73ffffffffffffffffffffffffffffffffffffffff16146113af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a690614a9d565b60405180910390fd5b60005b8383905081101561153c5760008484838181106113d2576113d1614dbd565b5b90506020020160208101906113e79190614977565b90503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156114735750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b80156114cb57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b156115285782601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b50808061153490614dec565b9150506113b2565b50505050565b61154a612a3d565b73ffffffffffffffffffffffffffffffffffffffff16611568611c67565b73ffffffffffffffffffffffffffffffffffffffff16146115be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b590614a9d565b60405180910390fd5b836014819055508260158190555081601681905550806017819055506017546016546015546014546115f09190614e35565b6115fa9190614e35565b6116049190614e35565b6013819055506063601354111561161a57600080fd5b50505050565b60006012905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006116f161165c612a3d565b84846001600061166a612a3d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116ec9190614e35565b612a45565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600e60009054906101000a900460ff1681565b601c5481565b6000602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60175481565b60185481565b6117a2612a3d565b73ffffffffffffffffffffffffffffffffffffffff166117c0611c67565b73ffffffffffffffffffffffffffffffffffffffff1614611816576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180d90614a9d565b60405180910390fd5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fe1bb4a3e2b2b99353f84d73df9e136cfe17627ed07083a649101dfa6bde8459c60405160405180910390a380600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600e60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611939612a3d565b73ffffffffffffffffffffffffffffffffffffffff16611957611c67565b73ffffffffffffffffffffffffffffffffffffffff16146119ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a490614a9d565b60405180910390fd5b6119b7600061399d565b565b60006119c3612a3d565b73ffffffffffffffffffffffffffffffffffffffff166119e1611c67565b73ffffffffffffffffffffffffffffffffffffffff1614611a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2e90614a9d565b60405180910390fd5b6000600e60006101000a81548160ff0219169083151502179055506001905090565b611a61612a3d565b73ffffffffffffffffffffffffffffffffffffffff16611a7f611c67565b73ffffffffffffffffffffffffffffffffffffffff1614611ad5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611acc90614a9d565b60405180910390fd5b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b611b64612a3d565b73ffffffffffffffffffffffffffffffffffffffff16611b82611c67565b73ffffffffffffffffffffffffffffffffffffffff1614611bd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bcf90614a9d565b60405180910390fd5b600e60019054906101000a900460ff1615611c28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1f90614ed7565b60405180910390fd5b6001600e60016101000a81548160ff021916908315150217905550436011819055506001600e60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60195481565b611c9f612a3d565b73ffffffffffffffffffffffffffffffffffffffff16611cbd611c67565b73ffffffffffffffffffffffffffffffffffffffff1614611d13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0a90614a9d565b60405180910390fd5b80600e60026101000a81548160ff02191690831515021790555050565b611d38612a3d565b73ffffffffffffffffffffffffffffffffffffffff16611d56611c67565b73ffffffffffffffffffffffffffffffffffffffff1614611dac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da390614a9d565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f3e0ea4f8339b6050ff814971a9814aa39176c149fcf185975c219f33db2342db60405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060048054611e7b90614c67565b80601f0160208091040260200160405190810160405280929190818152602001828054611ea790614c67565b8015611ef45780601f10611ec957610100808354040283529160200191611ef4565b820191906000526020600020905b815481529060010190602001808311611ed757829003601f168201915b5050505050905090565b611f06612a3d565b73ffffffffffffffffffffffffffffffffffffffff16611f24611c67565b73ffffffffffffffffffffffffffffffffffffffff1614611f7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7190614a9d565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612009576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200090614f69565b60405180910390fd5b6120138282613a63565b5050565b60008060016000612026612a3d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156120e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120da90614ffb565b60405180910390fd5b6120f76120ee612a3d565b85858403612a45565b600191505092915050565b600061211661210f612a3d565b8484612c10565b6001905092915050565b60165481565b60236020528060005260406000206000915054906101000a900460ff1681565b600e60019054906101000a900460ff1681565b612161612a3d565b73ffffffffffffffffffffffffffffffffffffffff1661217f611c67565b73ffffffffffffffffffffffffffffffffffffffff16146121d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121cc90614a9d565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61229d612a3d565b73ffffffffffffffffffffffffffffffffffffffff166122bb611c67565b73ffffffffffffffffffffffffffffffffffffffff1614612311576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230890614a9d565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516123ae91906146ac565b60405180910390a25050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5481565b6123ee612a3d565b73ffffffffffffffffffffffffffffffffffffffff1661240c611c67565b73ffffffffffffffffffffffffffffffffffffffff1614612462576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245990614a9d565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167ffaf1b77ed79f6e898c44dd8ab36b330c7b2fd39bcaab05ed6362480df870396560405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601060009054906101000a900460ff1681565b600061253f612a3d565b73ffffffffffffffffffffffffffffffffffffffff1661255d611c67565b73ffffffffffffffffffffffffffffffffffffffff16146125b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125aa90614a9d565b60405180910390fd5b620186a060016125c161110a565b6125cb9190614aec565b6125d59190614b75565b821015612617576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260e9061508d565b60405180910390fd5b6103e8600561262461110a565b61262e9190614aec565b6126389190614b75565b82111561267a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126719061511f565b60405180910390fd5b81600c8190555060019050919050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60135481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60226020528060005260406000206000915054906101000a900460ff1681565b600c5481565b60126020528060005260406000206000915054906101000a900460ff1681565b61278b612a3d565b73ffffffffffffffffffffffffffffffffffffffff166127a9611c67565b73ffffffffffffffffffffffffffffffffffffffff16146127ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f690614a9d565b60405180910390fd5b8360198190555082601a8190555081601b8190555080601c81905550601c54601b54601a546019546128319190614e35565b61283b9190614e35565b6128459190614e35565b6018819055506063601854111561285b57600080fd5b50505050565b600061286b612a3d565b73ffffffffffffffffffffffffffffffffffffffff16612889611c67565b73ffffffffffffffffffffffffffffffffffffffff16146128df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128d690614a9d565b60405180910390fd5b6000601060006101000a81548160ff0219169083151502179055506001905090565b601f5481565b60155481565b612915612a3d565b73ffffffffffffffffffffffffffffffffffffffff16612933611c67565b73ffffffffffffffffffffffffffffffffffffffff1614612989576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298090614a9d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156129f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f0906151b1565b60405180910390fd5b612a028161399d565b50565b601a5481565b600d5481565b60205481565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612ab5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aac90615243565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1c906152d5565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612c039190614750565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7790615367565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612cf0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ce7906153f9565b60405180910390fd5b601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612d7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7490615465565b60405180910390fd5b6000811415612d9757612d9283836000613b04565b613998565b600e60009054906101000a900460ff161561345a57612db4611c67565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612e225750612df2611c67565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e5b5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e95575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612eae5750600660149054906101000a900460ff16155b1561345957600e60019054906101000a900460ff16612fa857602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f685750602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612fa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f9e906154d1565b60405180910390fd5b5b601060009054906101000a900460ff161561317057612fc5611c67565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561304c57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156130a457507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561316f5743600f60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541061312a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161312190615589565b60405180910390fd5b43600f60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132135750602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156132ba57600b5481111561325d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132549061561b565b60405180910390fd5b600d54613269836118e9565b826132749190614e35565b11156132b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132ac90615687565b60405180910390fd5b613458565b602360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561335d5750602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156133ac57600b548111156133a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161339e90615719565b60405180910390fd5b613457565b602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661345657600d54613409836118e9565b826134149190614e35565b1115613455576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161344c90615687565b60405180910390fd5b5b5b5b5b5b6000613465306118e9565b90506000600c54821015905080801561348a5750600e60029054906101000a900460ff165b80156134a35750600660149054906101000a900460ff16155b80156134f95750602360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561354f5750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156135a55750602160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156135e9576001600660146101000a81548160ff0219169083151502179055506135cd613d85565b6000600660146101000a81548160ff0219169083151502179055505b6000600660149054906101000a900460ff16159050602160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061369f5750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156136a957600090505b6000811561398857602360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561370c57506000601854115b1561380c57613739606461372b6018548861414690919063ffffffff16565b61415c90919063ffffffff16565b9050601854601a548261374c9190614aec565b6137569190614b75565b601e60008282546137679190614e35565b92505081905550601854601b548261377f9190614aec565b6137899190614b75565b601f600082825461379a9190614e35565b92505081905550601854601954826137b29190614aec565b6137bc9190614b75565b601d60008282546137cd9190614e35565b92505081905550601854601c54826137e59190614aec565b6137ef9190614b75565b602060008282546138009190614e35565b92505081905550613964565b602360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561386757506000601354115b156139635761389460646138866013548861414690919063ffffffff16565b61415c90919063ffffffff16565b9050601354601554826138a79190614aec565b6138b19190614b75565b601e60008282546138c29190614e35565b92505081905550601354601654826138da9190614aec565b6138e49190614b75565b601f60008282546138f59190614e35565b925050819055506013546014548261390d9190614aec565b6139179190614b75565b601d60008282546139289190614e35565b92505081905550601354601754826139409190614aec565b61394a9190614b75565b6020600082825461395b9190614e35565b925050819055505b5b600081111561397957613978873083613b04565b5b80856139859190615739565b94505b613993878787613b04565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613b74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b6b90615367565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613be4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bdb906153f9565b60405180910390fd5b613bef838383614172565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613c75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c6c906157df565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613d089190614e35565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613d6c9190614750565b60405180910390a3613d7f848484614177565b50505050565b6000613d90306118e9565b90506000602054601f54601d54601e54613daa9190614e35565b613db49190614e35565b613dbe9190614e35565b9050600080831480613dd05750600082145b15613ddd57505050614144565b6014600c54613dec9190614aec565b831115613e05576014600c54613e029190614aec565b92505b6000600283601e5486613e189190614aec565b613e229190614b75565b613e2c9190614b75565b90506000613e43828661417c90919063ffffffff16565b90506000479050613e5382614192565b6000613e68824761417c90919063ffffffff16565b90506000613e9387613e85601d548561414690919063ffffffff16565b61415c90919063ffffffff16565b90506000613ebe88613eb0601f548661414690919063ffffffff16565b61415c90919063ffffffff16565b90506000613ee989613edb6020548761414690919063ffffffff16565b61415c90919063ffffffff16565b9050600081838587613efb9190615739565b613f059190615739565b613f0f9190615739565b90506000601e819055506000601d819055506000601f819055506000602081905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051613f7790615830565b60006040518083038185875af1925050503d8060008114613fb4576040519150601f19603f3d011682016040523d82523d6000602084013e613fb9565b606091505b505080995050600088118015613fcf5750600081115b1561401c57613fde88826143cf565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618782601e5460405161401393929190615845565b60405180910390a15b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161406290615830565b60006040518083038185875af1925050503d806000811461409f576040519150601f19603f3d011682016040523d82523d6000602084013e6140a4565b606091505b505080995050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516140f090615830565b60006040518083038185875af1925050503d806000811461412d576040519150601f19603f3d011682016040523d82523d6000602084013e614132565b606091505b50508099505050505050505050505050505b565b600081836141549190614aec565b905092915050565b6000818361416a9190614b75565b905092915050565b505050565b505050565b6000818361418a9190615739565b905092915050565b6000600267ffffffffffffffff8111156141af576141ae61587c565b5b6040519080825280602002602001820160405280156141dd5781602001602082028036833780820191505090505b50905030816000815181106141f5576141f4614dbd565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561429a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142be91906158c0565b816001815181106142d2576142d1614dbd565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050614337307f000000000000000000000000000000000000000000000000000000000000000084612a45565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016143999594939291906159e6565b600060405180830381600087803b1580156143b357600080fd5b505af11580156143c7573d6000803e3d6000fd5b505050505050565b6143fa307f000000000000000000000000000000000000000000000000000000000000000084612a45565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161448196959493929190615a40565b60606040518083038185885af115801561449f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906144c49190615ab6565b5050505050565b600080fd5b600080fd5b6000819050919050565b6144e8816144d5565b81146144f357600080fd5b50565b600081359050614505816144df565b92915050565b600060208284031215614521576145206144cb565b5b600061452f848285016144f6565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614572578082015181840152602081019050614557565b83811115614581576000848401525b50505050565b6000601f19601f8301169050919050565b60006145a382614538565b6145ad8185614543565b93506145bd818560208601614554565b6145c681614587565b840191505092915050565b600060208201905081810360008301526145eb8184614598565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061461e826145f3565b9050919050565b61462e81614613565b811461463957600080fd5b50565b60008135905061464b81614625565b92915050565b60008060408385031215614668576146676144cb565b5b60006146768582860161463c565b9250506020614687858286016144f6565b9150509250929050565b60008115159050919050565b6146a681614691565b82525050565b60006020820190506146c1600083018461469d565b92915050565b6000819050919050565b60006146ec6146e76146e2846145f3565b6146c7565b6145f3565b9050919050565b60006146fe826146d1565b9050919050565b6000614710826146f3565b9050919050565b61472081614705565b82525050565b600060208201905061473b6000830184614717565b92915050565b61474a816144d5565b82525050565b60006020820190506147656000830184614741565b92915050565b600080600060608486031215614784576147836144cb565b5b60006147928682870161463c565b93505060206147a38682870161463c565b92505060406147b4868287016144f6565b9150509250925092565b6147c781614613565b82525050565b60006020820190506147e260008301846147be565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261480d5761480c6147e8565b5b8235905067ffffffffffffffff81111561482a576148296147ed565b5b602083019150836020820283011115614846576148456147f2565b5b9250929050565b61485681614691565b811461486157600080fd5b50565b6000813590506148738161484d565b92915050565b600080600060408486031215614892576148916144cb565b5b600084013567ffffffffffffffff8111156148b0576148af6144d0565b5b6148bc868287016147f7565b935093505060206148cf86828701614864565b9150509250925092565b600080600080608085870312156148f3576148f26144cb565b5b6000614901878288016144f6565b9450506020614912878288016144f6565b9350506040614923878288016144f6565b9250506060614934878288016144f6565b91505092959194509250565b600060ff82169050919050565b61495681614940565b82525050565b6000602082019050614971600083018461494d565b92915050565b60006020828403121561498d5761498c6144cb565b5b600061499b8482850161463c565b91505092915050565b600080604083850312156149bb576149ba6144cb565b5b60006149c98582860161463c565b92505060206149da85828601614864565b9150509250929050565b6000602082840312156149fa576149f96144cb565b5b6000614a0884828501614864565b91505092915050565b60008060408385031215614a2857614a276144cb565b5b6000614a368582860161463c565b9250506020614a478582860161463c565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614a87602083614543565b9150614a9282614a51565b602082019050919050565b60006020820190508181036000830152614ab681614a7a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614af7826144d5565b9150614b02836144d5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614b3b57614b3a614abd565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614b80826144d5565b9150614b8b836144d5565b925082614b9b57614b9a614b46565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e206c6f7765722060008201527f7468616e20302e31250000000000000000000000000000000000000000000000602082015250565b6000614c02602983614543565b9150614c0d82614ba6565b604082019050919050565b60006020820190508181036000830152614c3181614bf5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614c7f57607f821691505b60208210811415614c9357614c92614c38565b5b50919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614cf5602483614543565b9150614d0082614c99565b604082019050919050565b60006020820190508181036000830152614d2481614ce8565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614d87602883614543565b9150614d9282614d2b565b604082019050919050565b60006020820190508181036000830152614db681614d7a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614df7826144d5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614e2a57614e29614abd565b5b600182019050919050565b6000614e40826144d5565b9150614e4b836144d5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614e8057614e7f614abd565b5b828201905092915050565b7f546f6b656e206c61756e63686564000000000000000000000000000000000000600082015250565b6000614ec1600e83614543565b9150614ecc82614e8b565b602082019050919050565b60006020820190508181036000830152614ef081614eb4565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614f53603983614543565b9150614f5e82614ef7565b604082019050919050565b60006020820190508181036000830152614f8281614f46565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614fe5602583614543565b9150614ff082614f89565b604082019050919050565b6000602082019050818103600083015261501481614fd8565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000615077603583614543565b91506150828261501b565b604082019050919050565b600060208201905081810360008301526150a68161506a565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000615109603483614543565b9150615114826150ad565b604082019050919050565b60006020820190508181036000830152615138816150fc565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061519b602683614543565b91506151a68261513f565b604082019050919050565b600060208201905081810360008301526151ca8161518e565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061522d602483614543565b9150615238826151d1565b604082019050919050565b6000602082019050818103600083015261525c81615220565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006152bf602283614543565b91506152ca82615263565b604082019050919050565b600060208201905081810360008301526152ee816152b2565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615351602583614543565b915061535c826152f5565b604082019050919050565b6000602082019050818103600083015261538081615344565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006153e3602383614543565b91506153ee82615387565b604082019050919050565b60006020820190508181036000830152615412816153d6565b9050919050565b7f536e6970657220626c6f636b6564000000000000000000000000000000000000600082015250565b600061544f600e83614543565b915061545a82615419565b602082019050919050565b6000602082019050818103600083015261547e81615442565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006154bb601683614543565b91506154c682615485565b602082019050919050565b600060208201905081810360008301526154ea816154ae565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000615573604983614543565b915061557e826154f1565b606082019050919050565b600060208201905081810360008301526155a281615566565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e2e0000000000000000000000000000000000602082015250565b6000615605602f83614543565b9150615610826155a9565b604082019050919050565b60006020820190508181036000830152615634816155f8565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000615671601383614543565b915061567c8261563b565b602082019050919050565b600060208201905081810360008301526156a081615664565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e2e00000000000000000000000000000000602082015250565b6000615703603083614543565b915061570e826156a7565b604082019050919050565b60006020820190508181036000830152615732816156f6565b9050919050565b6000615744826144d5565b915061574f836144d5565b92508282101561576257615761614abd565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006157c9602683614543565b91506157d48261576d565b604082019050919050565b600060208201905081810360008301526157f8816157bc565b9050919050565b600081905092915050565b50565b600061581a6000836157ff565b91506158258261580a565b600082019050919050565b600061583b8261580d565b9150819050919050565b600060608201905061585a6000830186614741565b6158676020830185614741565b6158746040830184614741565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506158ba81614625565b92915050565b6000602082840312156158d6576158d56144cb565b5b60006158e4848285016158ab565b91505092915050565b6000819050919050565b600061591261590d615908846158ed565b6146c7565b6144d5565b9050919050565b615922816158f7565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61595d81614613565b82525050565b600061596f8383615954565b60208301905092915050565b6000602082019050919050565b600061599382615928565b61599d8185615933565b93506159a883615944565b8060005b838110156159d95781516159c08882615963565b97506159cb8361597b565b9250506001810190506159ac565b5085935050505092915050565b600060a0820190506159fb6000830188614741565b615a086020830187615919565b8181036040830152615a1a8186615988565b9050615a2960608301856147be565b615a366080830184614741565b9695505050505050565b600060c082019050615a5560008301896147be565b615a626020830188614741565b615a6f6040830187615919565b615a7c6060830186615919565b615a8960808301856147be565b615a9660a0830184614741565b979650505050505050565b600081519050615ab0816144df565b92915050565b600080600060608486031215615acf57615ace6144cb565b5b6000615add86828701615aa1565b9350506020615aee86828701615aa1565b9250506040615aff86828701615aa1565b915050925092509256fea2646970667358221220eb4158c5fdd6e0262bb31106e42a082f10af386a1dfbc5e9bb7577c4a2a4165164736f6c634300080a0033

Deployed Bytecode

0x6080604052600436106103c75760003560e01c806392136913116101f2578063d257b34f1161010d578063e884f260116100a0578063f63743421161006f578063f637434214610e7b578063f8b45b0514610ea6578063fb002c9714610ed1578063fd72e22a14610efc576103ce565b8063e884f26014610dd1578063ef8700e514610dfc578063f11a24d314610e27578063f2fde38b14610e52576103ce565b8063e1bc3394116100dc578063e1bc339414610d03578063e2f4560514610d40578063e596219514610d6b578063e7ad9fcd14610da8576103ce565b8063d257b34f14610c33578063d469801614610c70578063d85ba06314610c9b578063dd62ed3e14610cc6576103ce565b8063b62496f511610185578063c04a541411610154578063c04a541414610b89578063c3f70b5214610bb4578063c79c04fd14610bdf578063c876d0b914610c08576103ce565b8063b62496f514610acf578063bbc0c74214610b0c578063bff7816914610b37578063c024666814610b60576103ce565b80639a7a23d6116101c15780639a7a23d614610a01578063a457c2d714610a2a578063a9059cbb14610a67578063b204141114610aa4576103ce565b80639213691314610959578063924de9b71461098457806392aa3773146109ad57806395d89b41146109d6576103ce565b806349bd5a5e116102e257806370a082311161027557806375f0a8741161024457806375f0a874146108c15780637bce5a04146108ec5780638a8c523c146109175780638da5cb5b1461092e576103ce565b806370a0823114610819578063715018a614610856578063751039fc1461086d5780637571336a14610898576103ce565b80635a139dd4116102b15780635a139dd41461076f5780636a486a8e1461079a5780636aebf627146107c55780636ddd1713146107ee576103ce565b806349bd5a5e146106b15780634a62bb65146106dc5780634f77f6c0146107075780634fbee19314610732576103ce565b80631f3fed8f1161035a5780632e6ed7ef116103295780632e6ed7ef146105f5578063313ce5671461061e578063377ad127146106495780633950935114610674576103ce565b80631f3fed8f1461053957806323b872dd1461056457806327c8f835146105a15780632cefac29146105cc576103ce565b806318160ddd1161039657806318160ddd1461048f57806318a94cf1146104ba5780631a8145bb146104e55780631c499ab014610510576103ce565b80630517d13d146103d357806306fdde03146103fc578063095ea7b3146104275780631694505e14610464576103ce565b366103ce57005b600080fd5b3480156103df57600080fd5b506103fa60048036038101906103f5919061450b565b610f27565b005b34801561040857600080fd5b50610411611036565b60405161041e91906145d1565b60405180910390f35b34801561043357600080fd5b5061044e60048036038101906104499190614651565b6110c8565b60405161045b91906146ac565b60405180910390f35b34801561047057600080fd5b506104796110e6565b6040516104869190614726565b60405180910390f35b34801561049b57600080fd5b506104a461110a565b6040516104b19190614750565b60405180910390f35b3480156104c657600080fd5b506104cf611114565b6040516104dc9190614750565b60405180910390f35b3480156104f157600080fd5b506104fa61111a565b6040516105079190614750565b60405180910390f35b34801561051c57600080fd5b506105376004803603810190610532919061450b565b611120565b005b34801561054557600080fd5b5061054e61122f565b60405161055b9190614750565b60405180910390f35b34801561057057600080fd5b5061058b6004803603810190610586919061476b565b611235565b60405161059891906146ac565b60405180910390f35b3480156105ad57600080fd5b506105b661132d565b6040516105c391906147cd565b60405180910390f35b3480156105d857600080fd5b506105f360048036038101906105ee9190614879565b611333565b005b34801561060157600080fd5b5061061c600480360381019061061791906148d9565b611542565b005b34801561062a57600080fd5b50610633611620565b604051610640919061495c565b60405180910390f35b34801561065557600080fd5b5061065e611629565b60405161066b91906147cd565b60405180910390f35b34801561068057600080fd5b5061069b60048036038101906106969190614651565b61164f565b6040516106a891906146ac565b60405180910390f35b3480156106bd57600080fd5b506106c66116fb565b6040516106d391906147cd565b60405180910390f35b3480156106e857600080fd5b506106f161171f565b6040516106fe91906146ac565b60405180910390f35b34801561071357600080fd5b5061071c611732565b6040516107299190614750565b60405180910390f35b34801561073e57600080fd5b5061075960048036038101906107549190614977565b611738565b60405161076691906146ac565b60405180910390f35b34801561077b57600080fd5b5061078461178e565b6040516107919190614750565b60405180910390f35b3480156107a657600080fd5b506107af611794565b6040516107bc9190614750565b60405180910390f35b3480156107d157600080fd5b506107ec60048036038101906107e79190614977565b61179a565b005b3480156107fa57600080fd5b506108036118d6565b60405161081091906146ac565b60405180910390f35b34801561082557600080fd5b50610840600480360381019061083b9190614977565b6118e9565b60405161084d9190614750565b60405180910390f35b34801561086257600080fd5b5061086b611931565b005b34801561087957600080fd5b506108826119b9565b60405161088f91906146ac565b60405180910390f35b3480156108a457600080fd5b506108bf60048036038101906108ba91906149a4565b611a59565b005b3480156108cd57600080fd5b506108d6611b30565b6040516108e391906147cd565b60405180910390f35b3480156108f857600080fd5b50610901611b56565b60405161090e9190614750565b60405180910390f35b34801561092357600080fd5b5061092c611b5c565b005b34801561093a57600080fd5b50610943611c67565b60405161095091906147cd565b60405180910390f35b34801561096557600080fd5b5061096e611c91565b60405161097b9190614750565b60405180910390f35b34801561099057600080fd5b506109ab60048036038101906109a691906149e4565b611c97565b005b3480156109b957600080fd5b506109d460048036038101906109cf9190614977565b611d30565b005b3480156109e257600080fd5b506109eb611e6c565b6040516109f891906145d1565b60405180910390f35b348015610a0d57600080fd5b50610a286004803603810190610a2391906149a4565b611efe565b005b348015610a3657600080fd5b50610a516004803603810190610a4c9190614651565b612017565b604051610a5e91906146ac565b60405180910390f35b348015610a7357600080fd5b50610a8e6004803603810190610a899190614651565b612102565b604051610a9b91906146ac565b60405180910390f35b348015610ab057600080fd5b50610ab9612120565b604051610ac69190614750565b60405180910390f35b348015610adb57600080fd5b50610af66004803603810190610af19190614977565b612126565b604051610b0391906146ac565b60405180910390f35b348015610b1857600080fd5b50610b21612146565b604051610b2e91906146ac565b60405180910390f35b348015610b4357600080fd5b50610b5e6004803603810190610b599190614977565b612159565b005b348015610b6c57600080fd5b50610b876004803603810190610b8291906149a4565b612295565b005b348015610b9557600080fd5b50610b9e6123ba565b604051610bab91906147cd565b60405180910390f35b348015610bc057600080fd5b50610bc96123e0565b604051610bd69190614750565b60405180910390f35b348015610beb57600080fd5b50610c066004803603810190610c019190614977565b6123e6565b005b348015610c1457600080fd5b50610c1d612522565b604051610c2a91906146ac565b60405180910390f35b348015610c3f57600080fd5b50610c5a6004803603810190610c55919061450b565b612535565b604051610c6791906146ac565b60405180910390f35b348015610c7c57600080fd5b50610c8561268a565b604051610c9291906147cd565b60405180910390f35b348015610ca757600080fd5b50610cb06126b0565b604051610cbd9190614750565b60405180910390f35b348015610cd257600080fd5b50610ced6004803603810190610ce89190614a11565b6126b6565b604051610cfa9190614750565b60405180910390f35b348015610d0f57600080fd5b50610d2a6004803603810190610d259190614977565b61273d565b604051610d3791906146ac565b60405180910390f35b348015610d4c57600080fd5b50610d5561275d565b604051610d629190614750565b60405180910390f35b348015610d7757600080fd5b50610d926004803603810190610d8d9190614977565b612763565b604051610d9f91906146ac565b60405180910390f35b348015610db457600080fd5b50610dcf6004803603810190610dca91906148d9565b612783565b005b348015610ddd57600080fd5b50610de6612861565b604051610df391906146ac565b60405180910390f35b348015610e0857600080fd5b50610e11612901565b604051610e1e9190614750565b60405180910390f35b348015610e3357600080fd5b50610e3c612907565b604051610e499190614750565b60405180910390f35b348015610e5e57600080fd5b50610e796004803603810190610e749190614977565b61290d565b005b348015610e8757600080fd5b50610e90612a05565b604051610e9d9190614750565b60405180910390f35b348015610eb257600080fd5b50610ebb612a0b565b604051610ec89190614750565b60405180910390f35b348015610edd57600080fd5b50610ee6612a11565b604051610ef39190614750565b60405180910390f35b348015610f0857600080fd5b50610f11612a17565b604051610f1e91906147cd565b60405180910390f35b610f2f612a3d565b73ffffffffffffffffffffffffffffffffffffffff16610f4d611c67565b73ffffffffffffffffffffffffffffffffffffffff1614610fa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9a90614a9d565b60405180910390fd5b670de0b6b3a76400006103e86001610fb961110a565b610fc39190614aec565b610fcd9190614b75565b610fd79190614b75565b811015611019576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101090614c18565b60405180910390fd5b670de0b6b3a76400008161102d9190614aec565b600b8190555050565b60606003805461104590614c67565b80601f016020809104026020016040519081016040528092919081815260200182805461107190614c67565b80156110be5780601f10611093576101008083540402835291602001916110be565b820191906000526020600020905b8154815290600101906020018083116110a157829003601f168201915b5050505050905090565b60006110dc6110d5612a3d565b8484612a45565b6001905092915050565b7f000000000000000000000000fcd3842f85ed87ba2889b4d35893403796e67ff181565b6000600254905090565b601b5481565b601e5481565b611128612a3d565b73ffffffffffffffffffffffffffffffffffffffff16611146611c67565b73ffffffffffffffffffffffffffffffffffffffff161461119c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119390614a9d565b60405180910390fd5b670de0b6b3a76400006103e860056111b261110a565b6111bc9190614aec565b6111c69190614b75565b6111d09190614b75565b811015611212576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120990614d0b565b60405180910390fd5b670de0b6b3a7640000816112269190614aec565b600d8190555050565b601d5481565b6000611242848484612c10565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061128d612a3d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561130d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130490614d9d565b60405180910390fd5b61132185611319612a3d565b858403612a45565b60019150509392505050565b61dead81565b61133b612a3d565b73ffffffffffffffffffffffffffffffffffffffff16611359611c67565b73ffffffffffffffffffffffffffffffffffffffff16146113af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a690614a9d565b60405180910390fd5b60005b8383905081101561153c5760008484838181106113d2576113d1614dbd565b5b90506020020160208101906113e79190614977565b90503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156114735750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b80156114cb57507f00000000000000000000000089efcb16d55a8a9257159112d8bd9f28b4d7f9e673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b156115285782601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b50808061153490614dec565b9150506113b2565b50505050565b61154a612a3d565b73ffffffffffffffffffffffffffffffffffffffff16611568611c67565b73ffffffffffffffffffffffffffffffffffffffff16146115be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b590614a9d565b60405180910390fd5b836014819055508260158190555081601681905550806017819055506017546016546015546014546115f09190614e35565b6115fa9190614e35565b6116049190614e35565b6013819055506063601354111561161a57600080fd5b50505050565b60006012905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006116f161165c612a3d565b84846001600061166a612a3d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116ec9190614e35565b612a45565b6001905092915050565b7f00000000000000000000000089efcb16d55a8a9257159112d8bd9f28b4d7f9e681565b600e60009054906101000a900460ff1681565b601c5481565b6000602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60175481565b60185481565b6117a2612a3d565b73ffffffffffffffffffffffffffffffffffffffff166117c0611c67565b73ffffffffffffffffffffffffffffffffffffffff1614611816576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180d90614a9d565b60405180910390fd5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fe1bb4a3e2b2b99353f84d73df9e136cfe17627ed07083a649101dfa6bde8459c60405160405180910390a380600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600e60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611939612a3d565b73ffffffffffffffffffffffffffffffffffffffff16611957611c67565b73ffffffffffffffffffffffffffffffffffffffff16146119ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a490614a9d565b60405180910390fd5b6119b7600061399d565b565b60006119c3612a3d565b73ffffffffffffffffffffffffffffffffffffffff166119e1611c67565b73ffffffffffffffffffffffffffffffffffffffff1614611a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2e90614a9d565b60405180910390fd5b6000600e60006101000a81548160ff0219169083151502179055506001905090565b611a61612a3d565b73ffffffffffffffffffffffffffffffffffffffff16611a7f611c67565b73ffffffffffffffffffffffffffffffffffffffff1614611ad5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611acc90614a9d565b60405180910390fd5b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b611b64612a3d565b73ffffffffffffffffffffffffffffffffffffffff16611b82611c67565b73ffffffffffffffffffffffffffffffffffffffff1614611bd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bcf90614a9d565b60405180910390fd5b600e60019054906101000a900460ff1615611c28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1f90614ed7565b60405180910390fd5b6001600e60016101000a81548160ff021916908315150217905550436011819055506001600e60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60195481565b611c9f612a3d565b73ffffffffffffffffffffffffffffffffffffffff16611cbd611c67565b73ffffffffffffffffffffffffffffffffffffffff1614611d13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0a90614a9d565b60405180910390fd5b80600e60026101000a81548160ff02191690831515021790555050565b611d38612a3d565b73ffffffffffffffffffffffffffffffffffffffff16611d56611c67565b73ffffffffffffffffffffffffffffffffffffffff1614611dac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da390614a9d565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f3e0ea4f8339b6050ff814971a9814aa39176c149fcf185975c219f33db2342db60405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060048054611e7b90614c67565b80601f0160208091040260200160405190810160405280929190818152602001828054611ea790614c67565b8015611ef45780601f10611ec957610100808354040283529160200191611ef4565b820191906000526020600020905b815481529060010190602001808311611ed757829003601f168201915b5050505050905090565b611f06612a3d565b73ffffffffffffffffffffffffffffffffffffffff16611f24611c67565b73ffffffffffffffffffffffffffffffffffffffff1614611f7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7190614a9d565b60405180910390fd5b7f00000000000000000000000089efcb16d55a8a9257159112d8bd9f28b4d7f9e673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612009576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200090614f69565b60405180910390fd5b6120138282613a63565b5050565b60008060016000612026612a3d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156120e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120da90614ffb565b60405180910390fd5b6120f76120ee612a3d565b85858403612a45565b600191505092915050565b600061211661210f612a3d565b8484612c10565b6001905092915050565b60165481565b60236020528060005260406000206000915054906101000a900460ff1681565b600e60019054906101000a900460ff1681565b612161612a3d565b73ffffffffffffffffffffffffffffffffffffffff1661217f611c67565b73ffffffffffffffffffffffffffffffffffffffff16146121d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121cc90614a9d565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61229d612a3d565b73ffffffffffffffffffffffffffffffffffffffff166122bb611c67565b73ffffffffffffffffffffffffffffffffffffffff1614612311576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230890614a9d565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516123ae91906146ac565b60405180910390a25050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5481565b6123ee612a3d565b73ffffffffffffffffffffffffffffffffffffffff1661240c611c67565b73ffffffffffffffffffffffffffffffffffffffff1614612462576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245990614a9d565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167ffaf1b77ed79f6e898c44dd8ab36b330c7b2fd39bcaab05ed6362480df870396560405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601060009054906101000a900460ff1681565b600061253f612a3d565b73ffffffffffffffffffffffffffffffffffffffff1661255d611c67565b73ffffffffffffffffffffffffffffffffffffffff16146125b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125aa90614a9d565b60405180910390fd5b620186a060016125c161110a565b6125cb9190614aec565b6125d59190614b75565b821015612617576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260e9061508d565b60405180910390fd5b6103e8600561262461110a565b61262e9190614aec565b6126389190614b75565b82111561267a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126719061511f565b60405180910390fd5b81600c8190555060019050919050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60135481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60226020528060005260406000206000915054906101000a900460ff1681565b600c5481565b60126020528060005260406000206000915054906101000a900460ff1681565b61278b612a3d565b73ffffffffffffffffffffffffffffffffffffffff166127a9611c67565b73ffffffffffffffffffffffffffffffffffffffff16146127ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f690614a9d565b60405180910390fd5b8360198190555082601a8190555081601b8190555080601c81905550601c54601b54601a546019546128319190614e35565b61283b9190614e35565b6128459190614e35565b6018819055506063601854111561285b57600080fd5b50505050565b600061286b612a3d565b73ffffffffffffffffffffffffffffffffffffffff16612889611c67565b73ffffffffffffffffffffffffffffffffffffffff16146128df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128d690614a9d565b60405180910390fd5b6000601060006101000a81548160ff0219169083151502179055506001905090565b601f5481565b60155481565b612915612a3d565b73ffffffffffffffffffffffffffffffffffffffff16612933611c67565b73ffffffffffffffffffffffffffffffffffffffff1614612989576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298090614a9d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156129f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f0906151b1565b60405180910390fd5b612a028161399d565b50565b601a5481565b600d5481565b60205481565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612ab5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aac90615243565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1c906152d5565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612c039190614750565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7790615367565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612cf0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ce7906153f9565b60405180910390fd5b601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612d7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7490615465565b60405180910390fd5b6000811415612d9757612d9283836000613b04565b613998565b600e60009054906101000a900460ff161561345a57612db4611c67565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612e225750612df2611c67565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e5b5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e95575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612eae5750600660149054906101000a900460ff16155b1561345957600e60019054906101000a900460ff16612fa857602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f685750602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612fa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f9e906154d1565b60405180910390fd5b5b601060009054906101000a900460ff161561317057612fc5611c67565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561304c57507f000000000000000000000000fcd3842f85ed87ba2889b4d35893403796e67ff173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156130a457507f00000000000000000000000089efcb16d55a8a9257159112d8bd9f28b4d7f9e673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561316f5743600f60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541061312a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161312190615589565b60405180910390fd5b43600f60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132135750602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156132ba57600b5481111561325d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132549061561b565b60405180910390fd5b600d54613269836118e9565b826132749190614e35565b11156132b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132ac90615687565b60405180910390fd5b613458565b602360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561335d5750602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156133ac57600b548111156133a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161339e90615719565b60405180910390fd5b613457565b602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661345657600d54613409836118e9565b826134149190614e35565b1115613455576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161344c90615687565b60405180910390fd5b5b5b5b5b5b6000613465306118e9565b90506000600c54821015905080801561348a5750600e60029054906101000a900460ff165b80156134a35750600660149054906101000a900460ff16155b80156134f95750602360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561354f5750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156135a55750602160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156135e9576001600660146101000a81548160ff0219169083151502179055506135cd613d85565b6000600660146101000a81548160ff0219169083151502179055505b6000600660149054906101000a900460ff16159050602160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061369f5750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156136a957600090505b6000811561398857602360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561370c57506000601854115b1561380c57613739606461372b6018548861414690919063ffffffff16565b61415c90919063ffffffff16565b9050601854601a548261374c9190614aec565b6137569190614b75565b601e60008282546137679190614e35565b92505081905550601854601b548261377f9190614aec565b6137899190614b75565b601f600082825461379a9190614e35565b92505081905550601854601954826137b29190614aec565b6137bc9190614b75565b601d60008282546137cd9190614e35565b92505081905550601854601c54826137e59190614aec565b6137ef9190614b75565b602060008282546138009190614e35565b92505081905550613964565b602360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561386757506000601354115b156139635761389460646138866013548861414690919063ffffffff16565b61415c90919063ffffffff16565b9050601354601554826138a79190614aec565b6138b19190614b75565b601e60008282546138c29190614e35565b92505081905550601354601654826138da9190614aec565b6138e49190614b75565b601f60008282546138f59190614e35565b925050819055506013546014548261390d9190614aec565b6139179190614b75565b601d60008282546139289190614e35565b92505081905550601354601754826139409190614aec565b61394a9190614b75565b6020600082825461395b9190614e35565b925050819055505b5b600081111561397957613978873083613b04565b5b80856139859190615739565b94505b613993878787613b04565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613b74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b6b90615367565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613be4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bdb906153f9565b60405180910390fd5b613bef838383614172565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613c75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c6c906157df565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613d089190614e35565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613d6c9190614750565b60405180910390a3613d7f848484614177565b50505050565b6000613d90306118e9565b90506000602054601f54601d54601e54613daa9190614e35565b613db49190614e35565b613dbe9190614e35565b9050600080831480613dd05750600082145b15613ddd57505050614144565b6014600c54613dec9190614aec565b831115613e05576014600c54613e029190614aec565b92505b6000600283601e5486613e189190614aec565b613e229190614b75565b613e2c9190614b75565b90506000613e43828661417c90919063ffffffff16565b90506000479050613e5382614192565b6000613e68824761417c90919063ffffffff16565b90506000613e9387613e85601d548561414690919063ffffffff16565b61415c90919063ffffffff16565b90506000613ebe88613eb0601f548661414690919063ffffffff16565b61415c90919063ffffffff16565b90506000613ee989613edb6020548761414690919063ffffffff16565b61415c90919063ffffffff16565b9050600081838587613efb9190615739565b613f059190615739565b613f0f9190615739565b90506000601e819055506000601d819055506000601f819055506000602081905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051613f7790615830565b60006040518083038185875af1925050503d8060008114613fb4576040519150601f19603f3d011682016040523d82523d6000602084013e613fb9565b606091505b505080995050600088118015613fcf5750600081115b1561401c57613fde88826143cf565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618782601e5460405161401393929190615845565b60405180910390a15b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161406290615830565b60006040518083038185875af1925050503d806000811461409f576040519150601f19603f3d011682016040523d82523d6000602084013e6140a4565b606091505b505080995050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516140f090615830565b60006040518083038185875af1925050503d806000811461412d576040519150601f19603f3d011682016040523d82523d6000602084013e614132565b606091505b50508099505050505050505050505050505b565b600081836141549190614aec565b905092915050565b6000818361416a9190614b75565b905092915050565b505050565b505050565b6000818361418a9190615739565b905092915050565b6000600267ffffffffffffffff8111156141af576141ae61587c565b5b6040519080825280602002602001820160405280156141dd5781602001602082028036833780820191505090505b50905030816000815181106141f5576141f4614dbd565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000fcd3842f85ed87ba2889b4d35893403796e67ff173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561429a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142be91906158c0565b816001815181106142d2576142d1614dbd565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050614337307f000000000000000000000000fcd3842f85ed87ba2889b4d35893403796e67ff184612a45565b7f000000000000000000000000fcd3842f85ed87ba2889b4d35893403796e67ff173ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016143999594939291906159e6565b600060405180830381600087803b1580156143b357600080fd5b505af11580156143c7573d6000803e3d6000fd5b505050505050565b6143fa307f000000000000000000000000fcd3842f85ed87ba2889b4d35893403796e67ff184612a45565b7f000000000000000000000000fcd3842f85ed87ba2889b4d35893403796e67ff173ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161448196959493929190615a40565b60606040518083038185885af115801561449f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906144c49190615ab6565b5050505050565b600080fd5b600080fd5b6000819050919050565b6144e8816144d5565b81146144f357600080fd5b50565b600081359050614505816144df565b92915050565b600060208284031215614521576145206144cb565b5b600061452f848285016144f6565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614572578082015181840152602081019050614557565b83811115614581576000848401525b50505050565b6000601f19601f8301169050919050565b60006145a382614538565b6145ad8185614543565b93506145bd818560208601614554565b6145c681614587565b840191505092915050565b600060208201905081810360008301526145eb8184614598565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061461e826145f3565b9050919050565b61462e81614613565b811461463957600080fd5b50565b60008135905061464b81614625565b92915050565b60008060408385031215614668576146676144cb565b5b60006146768582860161463c565b9250506020614687858286016144f6565b9150509250929050565b60008115159050919050565b6146a681614691565b82525050565b60006020820190506146c1600083018461469d565b92915050565b6000819050919050565b60006146ec6146e76146e2846145f3565b6146c7565b6145f3565b9050919050565b60006146fe826146d1565b9050919050565b6000614710826146f3565b9050919050565b61472081614705565b82525050565b600060208201905061473b6000830184614717565b92915050565b61474a816144d5565b82525050565b60006020820190506147656000830184614741565b92915050565b600080600060608486031215614784576147836144cb565b5b60006147928682870161463c565b93505060206147a38682870161463c565b92505060406147b4868287016144f6565b9150509250925092565b6147c781614613565b82525050565b60006020820190506147e260008301846147be565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261480d5761480c6147e8565b5b8235905067ffffffffffffffff81111561482a576148296147ed565b5b602083019150836020820283011115614846576148456147f2565b5b9250929050565b61485681614691565b811461486157600080fd5b50565b6000813590506148738161484d565b92915050565b600080600060408486031215614892576148916144cb565b5b600084013567ffffffffffffffff8111156148b0576148af6144d0565b5b6148bc868287016147f7565b935093505060206148cf86828701614864565b9150509250925092565b600080600080608085870312156148f3576148f26144cb565b5b6000614901878288016144f6565b9450506020614912878288016144f6565b9350506040614923878288016144f6565b9250506060614934878288016144f6565b91505092959194509250565b600060ff82169050919050565b61495681614940565b82525050565b6000602082019050614971600083018461494d565b92915050565b60006020828403121561498d5761498c6144cb565b5b600061499b8482850161463c565b91505092915050565b600080604083850312156149bb576149ba6144cb565b5b60006149c98582860161463c565b92505060206149da85828601614864565b9150509250929050565b6000602082840312156149fa576149f96144cb565b5b6000614a0884828501614864565b91505092915050565b60008060408385031215614a2857614a276144cb565b5b6000614a368582860161463c565b9250506020614a478582860161463c565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614a87602083614543565b9150614a9282614a51565b602082019050919050565b60006020820190508181036000830152614ab681614a7a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614af7826144d5565b9150614b02836144d5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614b3b57614b3a614abd565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614b80826144d5565b9150614b8b836144d5565b925082614b9b57614b9a614b46565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e206c6f7765722060008201527f7468616e20302e31250000000000000000000000000000000000000000000000602082015250565b6000614c02602983614543565b9150614c0d82614ba6565b604082019050919050565b60006020820190508181036000830152614c3181614bf5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614c7f57607f821691505b60208210811415614c9357614c92614c38565b5b50919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614cf5602483614543565b9150614d0082614c99565b604082019050919050565b60006020820190508181036000830152614d2481614ce8565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614d87602883614543565b9150614d9282614d2b565b604082019050919050565b60006020820190508181036000830152614db681614d7a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614df7826144d5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614e2a57614e29614abd565b5b600182019050919050565b6000614e40826144d5565b9150614e4b836144d5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614e8057614e7f614abd565b5b828201905092915050565b7f546f6b656e206c61756e63686564000000000000000000000000000000000000600082015250565b6000614ec1600e83614543565b9150614ecc82614e8b565b602082019050919050565b60006020820190508181036000830152614ef081614eb4565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614f53603983614543565b9150614f5e82614ef7565b604082019050919050565b60006020820190508181036000830152614f8281614f46565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614fe5602583614543565b9150614ff082614f89565b604082019050919050565b6000602082019050818103600083015261501481614fd8565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000615077603583614543565b91506150828261501b565b604082019050919050565b600060208201905081810360008301526150a68161506a565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000615109603483614543565b9150615114826150ad565b604082019050919050565b60006020820190508181036000830152615138816150fc565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061519b602683614543565b91506151a68261513f565b604082019050919050565b600060208201905081810360008301526151ca8161518e565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061522d602483614543565b9150615238826151d1565b604082019050919050565b6000602082019050818103600083015261525c81615220565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006152bf602283614543565b91506152ca82615263565b604082019050919050565b600060208201905081810360008301526152ee816152b2565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615351602583614543565b915061535c826152f5565b604082019050919050565b6000602082019050818103600083015261538081615344565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006153e3602383614543565b91506153ee82615387565b604082019050919050565b60006020820190508181036000830152615412816153d6565b9050919050565b7f536e6970657220626c6f636b6564000000000000000000000000000000000000600082015250565b600061544f600e83614543565b915061545a82615419565b602082019050919050565b6000602082019050818103600083015261547e81615442565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006154bb601683614543565b91506154c682615485565b602082019050919050565b600060208201905081810360008301526154ea816154ae565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000615573604983614543565b915061557e826154f1565b606082019050919050565b600060208201905081810360008301526155a281615566565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e2e0000000000000000000000000000000000602082015250565b6000615605602f83614543565b9150615610826155a9565b604082019050919050565b60006020820190508181036000830152615634816155f8565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000615671601383614543565b915061567c8261563b565b602082019050919050565b600060208201905081810360008301526156a081615664565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e2e00000000000000000000000000000000602082015250565b6000615703603083614543565b915061570e826156a7565b604082019050919050565b60006020820190508181036000830152615732816156f6565b9050919050565b6000615744826144d5565b915061574f836144d5565b92508282101561576257615761614abd565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006157c9602683614543565b91506157d48261576d565b604082019050919050565b600060208201905081810360008301526157f8816157bc565b9050919050565b600081905092915050565b50565b600061581a6000836157ff565b91506158258261580a565b600082019050919050565b600061583b8261580d565b9150819050919050565b600060608201905061585a6000830186614741565b6158676020830185614741565b6158746040830184614741565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506158ba81614625565b92915050565b6000602082840312156158d6576158d56144cb565b5b60006158e4848285016158ab565b91505092915050565b6000819050919050565b600061591261590d615908846158ed565b6146c7565b6144d5565b9050919050565b615922816158f7565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61595d81614613565b82525050565b600061596f8383615954565b60208301905092915050565b6000602082019050919050565b600061599382615928565b61599d8185615933565b93506159a883615944565b8060005b838110156159d95781516159c08882615963565b97506159cb8361597b565b9250506001810190506159ac565b5085935050505092915050565b600060a0820190506159fb6000830188614741565b615a086020830187615919565b8181036040830152615a1a8186615988565b9050615a2960608301856147be565b615a366080830184614741565b9695505050505050565b600060c082019050615a5560008301896147be565b615a626020830188614741565b615a6f6040830187615919565b615a7c6060830186615919565b615a8960808301856147be565b615a9660a0830184614741565b979650505050505050565b600081519050615ab0816144df565b92915050565b600080600060608486031215615acf57615ace6144cb565b5b6000615add86828701615aa1565b9350506020615aee86828701615aa1565b9250506040615aff86828701615aa1565b915050925092509256fea2646970667358221220eb4158c5fdd6e0262bb31106e42a082f10af386a1dfbc5e9bb7577c4a2a4165164736f6c634300080a0033

Deployed ByteCode Sourcemap

15120:18330:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21417:265;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2817:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3731:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15199:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3138:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16406:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16527;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21690:250;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16487:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3908:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15302:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31049:386;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22313:498;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3037:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15362:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4408:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15257:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15734:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16446:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24856:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16255:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16295:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24448:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15814:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3254:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;939:103;;;;;;;;;;;;;:::i;:::-;;20525:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21948:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15472:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16142;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20272:201;;;;;;;;;;;;;:::i;:::-;;716:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16330:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22205:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24640:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2925:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23527:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4631:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3389:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16216:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16777:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15774:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24035:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23337:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15509:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15625:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24251:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15980:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20912:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15548:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16108:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3572:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16711:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15661:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16060:39;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22819:510;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20707:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16567:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16179:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1050:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16368:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15701:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16609:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15585:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21417:265;862:12;:10;:12::i;:::-;851:23;;:7;:5;:7::i;:::-;:23;;;843:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21556:4:::1;21548;21543:1;21527:13;:11;:13::i;:::-;:17;;;;:::i;:::-;21526:26;;;;:::i;:::-;21525:35;;;;:::i;:::-;21515:6;:45;;21493:136;;;;;;;;;;;;:::i;:::-;;;;;;;;;21667:6;21657;:17;;;;:::i;:::-;21640:14;:34;;;;21417:265:::0;:::o;2817:100::-;2871:13;2904:5;2897:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2817:100;:::o;3731:169::-;3814:4;3831:39;3840:12;:10;:12::i;:::-;3854:7;3863:6;3831:8;:39::i;:::-;3888:4;3881:11;;3731:169;;;;:::o;15199:51::-;;;:::o;3138:108::-;3199:7;3226:12;;3219:19;;3138:108;:::o;16406:33::-;;;;:::o;16527:::-;;;;:::o;21690:250::-;862:12;:10;:12::i;:::-;851:23;;:7;:5;:7::i;:::-;:23;;;843:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21824:4:::1;21816;21811:1;21795:13;:11;:13::i;:::-;:17;;;;:::i;:::-;21794:26;;;;:::i;:::-;21793:35;;;;:::i;:::-;21783:6;:45;;21761:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;21925:6;21915;:17;;;;:::i;:::-;21903:9;:29;;;;21690:250:::0;:::o;16487:33::-;;;;:::o;3908:492::-;4048:4;4065:36;4075:6;4083:9;4094:6;4065:9;:36::i;:::-;4114:24;4141:11;:19;4153:6;4141:19;;;;;;;;;;;;;;;:33;4161:12;:10;:12::i;:::-;4141:33;;;;;;;;;;;;;;;;4114:60;;4213:6;4193:16;:26;;4185:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;4300:57;4309:6;4317:12;:10;:12::i;:::-;4350:6;4331:16;:25;4300:8;:57::i;:::-;4388:4;4381:11;;;3908:492;;;;;:::o;15302:53::-;15348:6;15302:53;:::o;31049:386::-;862:12;:10;:12::i;:::-;851:23;;:7;:5;:7::i;:::-;:23;;;843:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31148:9:::1;31144:284;31164:8;;:15;;31162:1;:17;31144:284;;;31199:15;31217:8;;31226:1;31217:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;31199:29;;31265:4;31246:24;;:7;:24;;;;:67;;;;;31302:11;;;;;;;;;;;31291:22;;:7;:22;;;;31246:67;:121;;;;;31353:13;31334:33;;:7;:33;;;;31246:121;31243:173;;;31405:11;31386:7;:16;31394:7;31386:16;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;31243:173;31184:244;31180:3;;;;;:::i;:::-;;;;31144:284;;;;31049:386:::0;;;:::o;22313:498::-;862:12;:10;:12::i;:::-;851:23;;:7;:5;:7::i;:::-;:23;;;843:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22522:13:::1;22504:15;:31;;;;22564:13;22546:15;:31;;;;22608:15;22588:17;:35;;;;22653:14;22634:16;:33;;;;22749:16;;22729:17;;22711:15;;22693;;:33;;;;:::i;:::-;:53;;;;:::i;:::-;:72;;;;:::i;:::-;22678:12;:87;;;;22800:2;22784:12;;:18;;22776:27;;;::::0;::::1;;22313:498:::0;;;;:::o;3037:93::-;3095:5;3120:2;3113:9;;3037:93;:::o;15362:71::-;;;;;;;;;;;;;:::o;4408:215::-;4496:4;4513:80;4522:12;:10;:12::i;:::-;4536:7;4582:10;4545:11;:25;4557:12;:10;:12::i;:::-;4545:25;;;;;;;;;;;;;;;:34;4571:7;4545:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;4513:8;:80::i;:::-;4611:4;4604:11;;4408:215;;;;:::o;15257:38::-;;;:::o;15734:33::-;;;;;;;;;;;;;:::o;16446:32::-;;;;:::o;24856:126::-;24922:4;24946:19;:28;24966:7;24946:28;;;;;;;;;;;;;;;;;;;;;;;;;24939:35;;24856:126;;;:::o;16255:31::-;;;;:::o;16295:28::-;;;;:::o;24448:184::-;862:12;:10;:12::i;:::-;851:23;;:7;:5;:7::i;:::-;:23;;;843:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24568:16:::1;;;;;;;;;;;24533:52;;24557:9;24533:52;;;;;;;;;;;;24615:9;24596:16;;:28;;;;;;;;;;;;;;;;;;24448:184:::0;:::o;15814:31::-;;;;;;;;;;;;;:::o;3254:127::-;3328:7;3355:9;:18;3365:7;3355:18;;;;;;;;;;;;;;;;3348:25;;3254:127;;;:::o;939:103::-;862:12;:10;:12::i;:::-;851:23;;:7;:5;:7::i;:::-;:23;;;843:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1004:30:::1;1031:1;1004:18;:30::i;:::-;939:103::o:0;20525:121::-;20577:4;862:12;:10;:12::i;:::-;851:23;;:7;:5;:7::i;:::-;:23;;;843:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20611:5:::1;20594:14;;:22;;;;;;;;;;;;;;;;;;20634:4;20627:11;;20525:121:::0;:::o;21948:161::-;862:12;:10;:12::i;:::-;851:23;;:7;:5;:7::i;:::-;:23;;;843:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22097:4:::1;22061:25;:33;22087:6;22061:33;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;21948:161:::0;;:::o;15472:30::-;;;;;;;;;;;;;:::o;16142:::-;;;;:::o;20272:201::-;862:12;:10;:12::i;:::-;851:23;;:7;:5;:7::i;:::-;:23;;;843:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20336:13:::1;;;;;;;;;;;20335:14;20327:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;20395:4;20379:13;;:20;;;;;;;;;;;;;;;;;;20424:12;20410:11;:26;;;;20461:4;20447:11;;:18;;;;;;;;;;;;;;;;;;20272:201::o:0;716:87::-;762:7;789:6;;;;;;;;;;;782:13;;716:87;:::o;16330:31::-;;;;:::o;22205:100::-;862:12;:10;:12::i;:::-;851:23;;:7;:5;:7::i;:::-;:23;;;843:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22290:7:::1;22276:11;;:21;;;;;;;;;;;;;;;;;;22205:100:::0;:::o;24640:208::-;862:12;:10;:12::i;:::-;851:23;;:7;:5;:7::i;:::-;:23;;;843:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24777:15:::1;;;;;;;;;;;24734:59;;24757:18;24734:59;;;;;;;;;;;;24822:18;24804:15;;:36;;;;;;;;;;;;;;;;;;24640:208:::0;:::o;2925:104::-;2981:13;3014:7;3007:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2925:104;:::o;23527:304::-;862:12;:10;:12::i;:::-;851:23;;:7;:5;:7::i;:::-;:23;;;843:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23671:13:::1;23663:21;;:4;:21;;;;23641:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;23782:41;23811:4;23817:5;23782:28;:41::i;:::-;23527:304:::0;;:::o;4631:413::-;4724:4;4741:24;4768:11;:25;4780:12;:10;:12::i;:::-;4768:25;;;;;;;;;;;;;;;:34;4794:7;4768:34;;;;;;;;;;;;;;;;4741:61;;4841:15;4821:16;:35;;4813:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;4934:67;4943:12;:10;:12::i;:::-;4957:7;4985:15;4966:16;:34;4934:8;:67::i;:::-;5032:4;5025:11;;;4631:413;;;;:::o;3389:175::-;3475:4;3492:42;3502:12;:10;:12::i;:::-;3516:9;3527:6;3492:9;:42::i;:::-;3552:4;3545:11;;3389:175;;;;:::o;16216:32::-;;;;:::o;16777:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;15774:33::-;;;;;;;;;;;;;:::o;24035:208::-;862:12;:10;:12::i;:::-;851:23;;:7;:5;:7::i;:::-;:23;;;843:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24172:15:::1;;;;;;;;;;;24129:59;;24152:18;24129:59;;;;;;;;;;;;24217:18;24199:15;;:36;;;;;;;;;;;;;;;;;;24035:208:::0;:::o;23337:182::-;862:12;:10;:12::i;:::-;851:23;;:7;:5;:7::i;:::-;:23;;;843:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23453:8:::1;23422:19;:28;23442:7;23422:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;23493:7;23477:34;;;23502:8;23477:34;;;;;;:::i;:::-;;;;;;;;23337:182:::0;;:::o;15509:32::-;;;;;;;;;;;;;:::o;15625:29::-;;;;:::o;24251:189::-;862:12;:10;:12::i;:::-;851:23;;:7;:5;:7::i;:::-;:23;;;843:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24374:17:::1;;;;;;;;;;;24338:54;;24363:9;24338:54;;;;;;;;;;;;24423:9;24403:17;;:29;;;;;;;;;;;;;;;;;;24251:189:::0;:::o;15980:39::-;;;;;;;;;;;;;:::o;20912:497::-;21020:4;862:12;:10;:12::i;:::-;851:23;;:7;:5;:7::i;:::-;:23;;;843:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21099:6:::1;21094:1;21078:13;:11;:13::i;:::-;:17;;;;:::i;:::-;21077:28;;;;:::i;:::-;21064:9;:41;;21042:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;21254:4;21249:1;21233:13;:11;:13::i;:::-;:17;;;;:::i;:::-;21232:26;;;;:::i;:::-;21219:9;:39;;21197:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;21370:9;21349:18;:30;;;;21397:4;21390:11;;20912:497:::0;;;:::o;15548:30::-;;;;;;;;;;;;;:::o;16108:27::-;;;;:::o;3572:151::-;3661:7;3688:11;:18;3700:5;3688:18;;;;;;;;;;;;;;;:27;3707:7;3688:27;;;;;;;;;;;;;;;;3681:34;;3572:151;;;;:::o;16711:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;15661:33::-;;;;:::o;16060:39::-;;;;;;;;;;;;;;;;;;;;;;:::o;22819:510::-;862:12;:10;:12::i;:::-;851:23;;:7;:5;:7::i;:::-;:23;;;843:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23030:13:::1;23011:16;:32;;;;23073:13;23054:16;:32;;;;23118:15;23097:18;:36;;;;23164:14;23144:17;:34;;;;23264:17;;23243:18;;23224:16;;23205;;:35;;;;:::i;:::-;:56;;;;:::i;:::-;:76;;;;:::i;:::-;23189:13;:92;;;;23317:2;23300:13;;:19;;23292:28;;;::::0;::::1;;22819:510:::0;;;;:::o;20707:135::-;20767:4;862:12;:10;:12::i;:::-;851:23;;:7;:5;:7::i;:::-;:23;;;843:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20807:5:::1;20784:20;;:28;;;;;;;;;;;;;;;;;;20830:4;20823:11;;20707:135:::0;:::o;16567:35::-;;;;:::o;16179:30::-;;;;:::o;1050:201::-;862:12;:10;:12::i;:::-;851:23;;:7;:5;:7::i;:::-;:23;;;843:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1159:1:::1;1139:22;;:8;:22;;;;1131:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;1215:28;1234:8;1215:18;:28::i;:::-;1050:201:::0;:::o;16368:31::-;;;;:::o;15701:24::-;;;;:::o;16609:34::-;;;;:::o;15585:31::-;;;;;;;;;;;;;:::o;262:98::-;315:7;342:10;335:17;;262:98;:::o;6799:380::-;6952:1;6935:19;;:5;:19;;;;6927:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7033:1;7014:21;;:7;:21;;;;7006:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7117:6;7087:11;:18;7099:5;7087:18;;;;;;;;;;;;;;;:27;7106:7;7087:27;;;;;;;;;;;;;;;:36;;;;7155:7;7139:32;;7148:5;7139:32;;;7164:6;7139:32;;;;;;:::i;:::-;;;;;;;;6799:380;;;:::o;24990:4925::-;25138:1;25122:18;;:4;:18;;;;25114:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25215:1;25201:16;;:2;:16;;;;25193:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;25277:7;:13;25285:4;25277:13;;;;;;;;;;;;;;;;;;;;;;;;;25276:14;25268:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;25336:1;25326:6;:11;25322:93;;;25354:28;25370:4;25376:2;25380:1;25354:15;:28::i;:::-;25397:7;;25322:93;25431:14;;;;;;;;;;;25427:2445;;;25492:7;:5;:7::i;:::-;25484:15;;:4;:15;;;;:49;;;;;25526:7;:5;:7::i;:::-;25520:13;;:2;:13;;;;25484:49;:86;;;;;25568:1;25554:16;;:2;:16;;;;25484:86;:128;;;;;25605:6;25591:21;;:2;:21;;;;25484:128;:158;;;;;25634:8;;;;;;;;;;;25633:9;25484:158;25462:2399;;;25682:13;;;;;;;;;;;25677:223;;25754:19;:25;25774:4;25754:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;25783:19;:23;25803:2;25783:23;;;;;;;;;;;;;;;;;;;;;;;;;25754:52;25720:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;25677:223;26056:20;;;;;;;;;;;26052:641;;;26137:7;:5;:7::i;:::-;26131:13;;:2;:13;;;;:72;;;;;26187:15;26173:30;;:2;:30;;;;26131:72;:129;;;;;26246:13;26232:28;;:2;:28;;;;26131:129;26101:573;;;26424:12;26349:28;:39;26378:9;26349:39;;;;;;;;;;;;;;;;:87;26311:258;;;;;;;;;;;;:::i;:::-;;;;;;;;;26638:12;26596:28;:39;26625:9;26596:39;;;;;;;;;;;;;;;:54;;;;26101:573;26052:641;26767:25;:31;26793:4;26767:31;;;;;;;;;;;;;;;;;;;;;;;;;:86;;;;;26824:25;:29;26850:2;26824:29;;;;;;;;;;;;;;;;;;;;;;;;;26823:30;26767:86;26741:1105;;;26940:14;;26930:6;:24;;26896:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;27136:9;;27119:13;27129:2;27119:9;:13::i;:::-;27110:6;:22;;;;:::i;:::-;:35;;27076:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;26741:1105;;;27314:25;:29;27340:2;27314:29;;;;;;;;;;;;;;;;;;;;;;;;;:86;;;;;27369:25;:31;27395:4;27369:31;;;;;;;;;;;;;;;;;;;;;;;;;27368:32;27314:86;27288:558;;;27487:14;;27477:6;:24;;27443:158;;;;;;;;;;;;:::i;:::-;;;;;;;;;27288:558;;;27632:25;:29;27658:2;27632:29;;;;;;;;;;;;;;;;;;;;;;;;;27627:219;;27746:9;;27729:13;27739:2;27729:9;:13::i;:::-;27720:6;:22;;;;:::i;:::-;:35;;27686:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;27627:219;27288:558;26741:1105;25462:2399;25427:2445;27884:28;27915:24;27933:4;27915:9;:24::i;:::-;27884:55;;27952:12;27991:18;;27967:20;:42;;27952:57;;28040:7;:35;;;;;28064:11;;;;;;;;;;;28040:35;:61;;;;;28093:8;;;;;;;;;;;28092:9;28040:61;:110;;;;;28119:25;:31;28145:4;28119:31;;;;;;;;;;;;;;;;;;;;;;;;;28118:32;28040:110;:153;;;;;28168:19;:25;28188:4;28168:25;;;;;;;;;;;;;;;;;;;;;;;;;28167:26;28040:153;:194;;;;;28211:19;:23;28231:2;28211:23;;;;;;;;;;;;;;;;;;;;;;;;;28210:24;28040:194;28022:326;;;28272:4;28261:8;;:15;;;;;;;;;;;;;;;;;;28293:10;:8;:10::i;:::-;28331:5;28320:8;;:16;;;;;;;;;;;;;;;;;;28022:326;28360:12;28376:8;;;;;;;;;;;28375:9;28360:24;;28486:19;:25;28506:4;28486:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;28515:19;:23;28535:2;28515:23;;;;;;;;;;;;;;;;;;;;;;;;;28486:52;28482:100;;;28565:5;28555:15;;28482:100;28594:12;28699:7;28695:1167;;;28751:25;:29;28777:2;28751:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;28800:1;28784:13;;:17;28751:50;28747:966;;;28829:34;28859:3;28829:25;28840:13;;28829:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;28822:41;;28932:13;;28912:16;;28905:4;:23;;;;:::i;:::-;28904:41;;;;:::i;:::-;28882:18;;:63;;;;;;;:::i;:::-;;;;;;;;29018:13;;28996:18;;28989:4;:25;;;;:::i;:::-;28988:43;;;;:::i;:::-;28964:20;;:67;;;;;;;:::i;:::-;;;;;;;;29100:13;;29080:16;;29073:4;:23;;;;:::i;:::-;29072:41;;;;:::i;:::-;29050:18;;:63;;;;;;;:::i;:::-;;;;;;;;29184:13;;29163:17;;29156:4;:24;;;;:::i;:::-;29155:42;;;;:::i;:::-;29132:19;;:65;;;;;;;:::i;:::-;;;;;;;;28747:966;;;29259:25;:31;29285:4;29259:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;29309:1;29294:12;;:16;29259:51;29255:458;;;29338:33;29367:3;29338:24;29349:12;;29338:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;29331:40;;29439:12;;29420:15;;29413:4;:22;;;;:::i;:::-;29412:39;;;;:::i;:::-;29390:18;;:61;;;;;;;:::i;:::-;;;;;;;;29523:12;;29502:17;;29495:4;:24;;;;:::i;:::-;29494:41;;;;:::i;:::-;29470:20;;:65;;;;;;;:::i;:::-;;;;;;;;29603:12;;29584:15;;29577:4;:22;;;;:::i;:::-;29576:39;;;;:::i;:::-;29554:18;;:61;;;;;;;:::i;:::-;;;;;;;;29685:12;;29665:16;;29658:4;:23;;;;:::i;:::-;29657:40;;;;:::i;:::-;29634:19;;:63;;;;;;;:::i;:::-;;;;;;;;29255:458;28747:966;29740:1;29733:4;:8;29729:91;;;29762:42;29778:4;29792;29799;29762:15;:42::i;:::-;29729:91;29846:4;29836:14;;;;;:::i;:::-;;;28695:1167;29874:33;29890:4;29896:2;29900:6;29874:15;:33::i;:::-;25103:4812;;;;24990:4925;;;;:::o;1259:191::-;1333:16;1352:6;;;;;;;;;;;1333:25;;1378:8;1369:6;;:17;;;;;;;;;;;;;;;;;;1433:8;1402:40;;1423:8;1402:40;;;;;;;;;;;;1322:128;1259:191;:::o;23839:188::-;23956:5;23922:25;:31;23948:4;23922:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;24013:5;23979:40;;24007:4;23979:40;;;;;;;;;;;;23839:188;;:::o;5052:733::-;5210:1;5192:20;;:6;:20;;;;5184:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;5294:1;5273:23;;:9;:23;;;;5265:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;5349:47;5370:6;5378:9;5389:6;5349:20;:47::i;:::-;5409:21;5433:9;:17;5443:6;5433:17;;;;;;;;;;;;;;;;5409:41;;5486:6;5469:13;:23;;5461:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;5607:6;5591:13;:22;5571:9;:17;5581:6;5571:17;;;;;;;;;;;;;;;:42;;;;5659:6;5635:9;:20;5645:9;5635:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;5700:9;5683:35;;5692:6;5683:35;;;5711:6;5683:35;;;;;;:::i;:::-;;;;;;;;5731:46;5751:6;5759:9;5770:6;5731:19;:46::i;:::-;5173:612;5052:733;;;:::o;31443:2004::-;31482:23;31508:24;31526:4;31508:9;:24::i;:::-;31482:50;;31543:25;31675:19;;31639:20;;31605:18;;31571;;:52;;;;:::i;:::-;:88;;;;:::i;:::-;:123;;;;:::i;:::-;31543:151;;31705:12;31753:1;31734:15;:20;:46;;;;31779:1;31758:17;:22;31734:46;31730:85;;;31797:7;;;;;31730:85;31870:2;31849:18;;:23;;;;:::i;:::-;31831:15;:41;31827:115;;;31928:2;31907:18;;:23;;;;:::i;:::-;31889:41;;31827:115;32003:23;32090:1;32070:17;32048:18;;32030:15;:36;;;;:::i;:::-;32029:58;;;;:::i;:::-;:62;;;;:::i;:::-;32003:88;;32102:26;32131:36;32151:15;32131;:19;;:36;;;;:::i;:::-;32102:65;;32180:25;32208:21;32180:49;;32242:36;32259:18;32242:16;:36::i;:::-;32291:18;32312:44;32338:17;32312:21;:25;;:44;;;;:::i;:::-;32291:65;;32369:23;32395:57;32434:17;32395:34;32410:18;;32395:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;32369:83;;32463:25;32491:59;32532:17;32491:36;32506:20;;32491:10;:14;;:36;;;;:::i;:::-;:40;;:59;;;;:::i;:::-;32463:87;;32561:24;32588:58;32628:17;32588:35;32603:19;;32588:10;:14;;:35;;;;:::i;:::-;:39;;:58;;;;:::i;:::-;32561:85;;32659:23;32736:16;32716:17;32698:15;32685:10;:28;;;;:::i;:::-;:48;;;;:::i;:::-;:67;;;;:::i;:::-;32659:93;;32786:1;32765:18;:22;;;;32819:1;32798:18;:22;;;;32854:1;32831:20;:24;;;;32888:1;32866:19;:23;;;;32924:17;;;;;;;;;;;32916:31;;32955:17;32916:61;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32902:75;;;;;33012:1;32994:15;:19;:42;;;;;33035:1;33017:15;:19;32994:42;32990:278;;;33053:46;33066:15;33083;33053:12;:46::i;:::-;33119:137;33152:18;33189:15;33223:18;;33119:137;;;;;;;;:::i;:::-;;;;;;;;32990:278;33300:16;;;;;;;;;;;33292:30;;33330:16;33292:59;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33278:73;;;;;33384:15;;;;;;;;;;;33376:29;;33413:21;33376:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33362:77;;;;;31471:1976;;;;;;;;;;;31443:2004;:::o;8805:98::-;8863:7;8894:1;8890;:5;;;;:::i;:::-;8883:12;;8805:98;;;;:::o;8911:::-;8969:7;9000:1;8996;:5;;;;:::i;:::-;8989:12;;8911:98;;;;:::o;7187:125::-;;;;:::o;7320:124::-;;;;:::o;8699:98::-;8757:7;8788:1;8784;:5;;;;:::i;:::-;8777:12;;8699:98;;;;:::o;29923:589::-;30049:21;30087:1;30073:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30049:40;;30118:4;30100;30105:1;30100:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;30144:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30134:4;30139:1;30134:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;30179:62;30196:4;30211:15;30229:11;30179:8;:62::i;:::-;30280:15;:66;;;30361:11;30387:1;30431:4;30458;30478:15;30280:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29978:534;29923:589;:::o;30520:521::-;30668:62;30685:4;30700:15;30718:11;30668:8;:62::i;:::-;30773:15;:31;;;30812:9;30845:4;30865:11;30891:1;30934;30977:15;;;;;;;;;;;31007;30773:260;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;30520:521;;:::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:329::-;749:6;798:2;786:9;777:7;773:23;769:32;766:119;;;804:79;;:::i;:::-;766:119;924:1;949:53;994:7;985:6;974:9;970:22;949:53;:::i;:::-;939:63;;895:117;690:329;;;;:::o;1025:99::-;1077:6;1111:5;1105:12;1095:22;;1025:99;;;:::o;1130:169::-;1214:11;1248:6;1243:3;1236:19;1288:4;1283:3;1279:14;1264:29;;1130:169;;;;:::o;1305:307::-;1373:1;1383:113;1397:6;1394:1;1391:13;1383:113;;;1482:1;1477:3;1473:11;1467:18;1463:1;1458:3;1454:11;1447:39;1419:2;1416:1;1412:10;1407:15;;1383:113;;;1514:6;1511:1;1508:13;1505:101;;;1594:1;1585:6;1580:3;1576:16;1569:27;1505:101;1354:258;1305:307;;;:::o;1618:102::-;1659:6;1710:2;1706:7;1701:2;1694:5;1690:14;1686:28;1676:38;;1618:102;;;:::o;1726:364::-;1814:3;1842:39;1875:5;1842:39;:::i;:::-;1897:71;1961:6;1956:3;1897:71;:::i;:::-;1890:78;;1977:52;2022:6;2017:3;2010:4;2003:5;1999:16;1977:52;:::i;:::-;2054:29;2076:6;2054:29;:::i;:::-;2049:3;2045:39;2038:46;;1818:272;1726:364;;;;:::o;2096:313::-;2209:4;2247:2;2236:9;2232:18;2224:26;;2296:9;2290:4;2286:20;2282:1;2271:9;2267:17;2260:47;2324:78;2397:4;2388:6;2324:78;:::i;:::-;2316:86;;2096:313;;;;:::o;2415:126::-;2452:7;2492:42;2485:5;2481:54;2470:65;;2415:126;;;:::o;2547:96::-;2584:7;2613:24;2631:5;2613:24;:::i;:::-;2602:35;;2547:96;;;:::o;2649:122::-;2722:24;2740:5;2722:24;:::i;:::-;2715:5;2712:35;2702:63;;2761:1;2758;2751:12;2702:63;2649:122;:::o;2777:139::-;2823:5;2861:6;2848:20;2839:29;;2877:33;2904:5;2877:33;:::i;:::-;2777:139;;;;:::o;2922:474::-;2990:6;2998;3047:2;3035:9;3026:7;3022:23;3018:32;3015:119;;;3053:79;;:::i;:::-;3015:119;3173:1;3198:53;3243:7;3234:6;3223:9;3219:22;3198:53;:::i;:::-;3188:63;;3144:117;3300:2;3326:53;3371:7;3362:6;3351:9;3347:22;3326:53;:::i;:::-;3316:63;;3271:118;2922:474;;;;;:::o;3402:90::-;3436:7;3479:5;3472:13;3465:21;3454:32;;3402:90;;;:::o;3498:109::-;3579:21;3594:5;3579:21;:::i;:::-;3574:3;3567:34;3498:109;;:::o;3613:210::-;3700:4;3738:2;3727:9;3723:18;3715:26;;3751:65;3813:1;3802:9;3798:17;3789:6;3751:65;:::i;:::-;3613:210;;;;:::o;3829:60::-;3857:3;3878:5;3871:12;;3829:60;;;:::o;3895:142::-;3945:9;3978:53;3996:34;4005:24;4023:5;4005:24;:::i;:::-;3996:34;:::i;:::-;3978:53;:::i;:::-;3965:66;;3895:142;;;:::o;4043:126::-;4093:9;4126:37;4157:5;4126:37;:::i;:::-;4113:50;;4043:126;;;:::o;4175:153::-;4252:9;4285:37;4316:5;4285:37;:::i;:::-;4272:50;;4175:153;;;:::o;4334:185::-;4448:64;4506:5;4448:64;:::i;:::-;4443:3;4436:77;4334:185;;:::o;4525:276::-;4645:4;4683:2;4672:9;4668:18;4660:26;;4696:98;4791:1;4780:9;4776:17;4767:6;4696:98;:::i;:::-;4525:276;;;;:::o;4807:118::-;4894:24;4912:5;4894:24;:::i;:::-;4889:3;4882:37;4807:118;;:::o;4931:222::-;5024:4;5062:2;5051:9;5047:18;5039:26;;5075:71;5143:1;5132:9;5128:17;5119:6;5075:71;:::i;:::-;4931:222;;;;:::o;5159:619::-;5236:6;5244;5252;5301:2;5289:9;5280:7;5276:23;5272:32;5269:119;;;5307:79;;:::i;:::-;5269:119;5427:1;5452:53;5497:7;5488:6;5477:9;5473:22;5452:53;:::i;:::-;5442:63;;5398:117;5554:2;5580:53;5625:7;5616:6;5605:9;5601:22;5580:53;:::i;:::-;5570:63;;5525:118;5682:2;5708:53;5753:7;5744:6;5733:9;5729:22;5708:53;:::i;:::-;5698:63;;5653:118;5159:619;;;;;:::o;5784:118::-;5871:24;5889:5;5871:24;:::i;:::-;5866:3;5859:37;5784:118;;:::o;5908:222::-;6001:4;6039:2;6028:9;6024:18;6016:26;;6052:71;6120:1;6109:9;6105:17;6096:6;6052:71;:::i;:::-;5908:222;;;;:::o;6136:117::-;6245:1;6242;6235:12;6259:117;6368:1;6365;6358:12;6382:117;6491:1;6488;6481:12;6522:568;6595:8;6605:6;6655:3;6648:4;6640:6;6636:17;6632:27;6622:122;;6663:79;;:::i;:::-;6622:122;6776:6;6763:20;6753:30;;6806:18;6798:6;6795:30;6792:117;;;6828:79;;:::i;:::-;6792:117;6942:4;6934:6;6930:17;6918:29;;6996:3;6988:4;6980:6;6976:17;6966:8;6962:32;6959:41;6956:128;;;7003:79;;:::i;:::-;6956:128;6522:568;;;;;:::o;7096:116::-;7166:21;7181:5;7166:21;:::i;:::-;7159:5;7156:32;7146:60;;7202:1;7199;7192:12;7146:60;7096:116;:::o;7218:133::-;7261:5;7299:6;7286:20;7277:29;;7315:30;7339:5;7315:30;:::i;:::-;7218:133;;;;:::o;7357:698::-;7449:6;7457;7465;7514:2;7502:9;7493:7;7489:23;7485:32;7482:119;;;7520:79;;:::i;:::-;7482:119;7668:1;7657:9;7653:17;7640:31;7698:18;7690:6;7687:30;7684:117;;;7720:79;;:::i;:::-;7684:117;7833:80;7905:7;7896:6;7885:9;7881:22;7833:80;:::i;:::-;7815:98;;;;7611:312;7962:2;7988:50;8030:7;8021:6;8010:9;8006:22;7988:50;:::i;:::-;7978:60;;7933:115;7357:698;;;;;:::o;8061:765::-;8147:6;8155;8163;8171;8220:3;8208:9;8199:7;8195:23;8191:33;8188:120;;;8227:79;;:::i;:::-;8188:120;8347:1;8372:53;8417:7;8408:6;8397:9;8393:22;8372:53;:::i;:::-;8362:63;;8318:117;8474:2;8500:53;8545:7;8536:6;8525:9;8521:22;8500:53;:::i;:::-;8490:63;;8445:118;8602:2;8628:53;8673:7;8664:6;8653:9;8649:22;8628:53;:::i;:::-;8618:63;;8573:118;8730:2;8756:53;8801:7;8792:6;8781:9;8777:22;8756:53;:::i;:::-;8746:63;;8701:118;8061:765;;;;;;;:::o;8832:86::-;8867:7;8907:4;8900:5;8896:16;8885:27;;8832:86;;;:::o;8924:112::-;9007:22;9023:5;9007:22;:::i;:::-;9002:3;8995:35;8924:112;;:::o;9042:214::-;9131:4;9169:2;9158:9;9154:18;9146:26;;9182:67;9246:1;9235:9;9231:17;9222:6;9182:67;:::i;:::-;9042:214;;;;:::o;9262:329::-;9321:6;9370:2;9358:9;9349:7;9345:23;9341:32;9338:119;;;9376:79;;:::i;:::-;9338:119;9496:1;9521:53;9566:7;9557:6;9546:9;9542:22;9521:53;:::i;:::-;9511:63;;9467:117;9262:329;;;;:::o;9597:468::-;9662:6;9670;9719:2;9707:9;9698:7;9694:23;9690:32;9687:119;;;9725:79;;:::i;:::-;9687:119;9845:1;9870:53;9915:7;9906:6;9895:9;9891:22;9870:53;:::i;:::-;9860:63;;9816:117;9972:2;9998:50;10040:7;10031:6;10020:9;10016:22;9998:50;:::i;:::-;9988:60;;9943:115;9597:468;;;;;:::o;10071:323::-;10127:6;10176:2;10164:9;10155:7;10151:23;10147:32;10144:119;;;10182:79;;:::i;:::-;10144:119;10302:1;10327:50;10369:7;10360:6;10349:9;10345:22;10327:50;:::i;:::-;10317:60;;10273:114;10071:323;;;;:::o;10400:474::-;10468:6;10476;10525:2;10513:9;10504:7;10500:23;10496:32;10493:119;;;10531:79;;:::i;:::-;10493:119;10651:1;10676:53;10721:7;10712:6;10701:9;10697:22;10676:53;:::i;:::-;10666:63;;10622:117;10778:2;10804:53;10849:7;10840:6;10829:9;10825:22;10804:53;:::i;:::-;10794:63;;10749:118;10400:474;;;;;:::o;10880:182::-;11020:34;11016:1;11008:6;11004:14;10997:58;10880:182;:::o;11068:366::-;11210:3;11231:67;11295:2;11290:3;11231:67;:::i;:::-;11224:74;;11307:93;11396:3;11307:93;:::i;:::-;11425:2;11420:3;11416:12;11409:19;;11068:366;;;:::o;11440:419::-;11606:4;11644:2;11633:9;11629:18;11621:26;;11693:9;11687:4;11683:20;11679:1;11668:9;11664:17;11657:47;11721:131;11847:4;11721:131;:::i;:::-;11713:139;;11440:419;;;:::o;11865:180::-;11913:77;11910:1;11903:88;12010:4;12007:1;12000:15;12034:4;12031:1;12024:15;12051:348;12091:7;12114:20;12132:1;12114:20;:::i;:::-;12109:25;;12148:20;12166:1;12148:20;:::i;:::-;12143:25;;12336:1;12268:66;12264:74;12261:1;12258:81;12253:1;12246:9;12239:17;12235:105;12232:131;;;12343:18;;:::i;:::-;12232:131;12391:1;12388;12384:9;12373:20;;12051:348;;;;:::o;12405:180::-;12453:77;12450:1;12443:88;12550:4;12547:1;12540:15;12574:4;12571:1;12564:15;12591:185;12631:1;12648:20;12666:1;12648:20;:::i;:::-;12643:25;;12682:20;12700:1;12682:20;:::i;:::-;12677:25;;12721:1;12711:35;;12726:18;;:::i;:::-;12711:35;12768:1;12765;12761:9;12756:14;;12591:185;;;;:::o;12782:228::-;12922:34;12918:1;12910:6;12906:14;12899:58;12991:11;12986:2;12978:6;12974:15;12967:36;12782:228;:::o;13016:366::-;13158:3;13179:67;13243:2;13238:3;13179:67;:::i;:::-;13172:74;;13255:93;13344:3;13255:93;:::i;:::-;13373:2;13368:3;13364:12;13357:19;;13016:366;;;:::o;13388:419::-;13554:4;13592:2;13581:9;13577:18;13569:26;;13641:9;13635:4;13631:20;13627:1;13616:9;13612:17;13605:47;13669:131;13795:4;13669:131;:::i;:::-;13661:139;;13388:419;;;:::o;13813:180::-;13861:77;13858:1;13851:88;13958:4;13955:1;13948:15;13982:4;13979:1;13972:15;13999:320;14043:6;14080:1;14074:4;14070:12;14060:22;;14127:1;14121:4;14117:12;14148:18;14138:81;;14204:4;14196:6;14192:17;14182:27;;14138:81;14266:2;14258:6;14255:14;14235:18;14232:38;14229:84;;;14285:18;;:::i;:::-;14229:84;14050:269;13999:320;;;:::o;14325:223::-;14465:34;14461:1;14453:6;14449:14;14442:58;14534:6;14529:2;14521:6;14517:15;14510:31;14325:223;:::o;14554:366::-;14696:3;14717:67;14781:2;14776:3;14717:67;:::i;:::-;14710:74;;14793:93;14882:3;14793:93;:::i;:::-;14911:2;14906:3;14902:12;14895:19;;14554:366;;;:::o;14926:419::-;15092:4;15130:2;15119:9;15115:18;15107:26;;15179:9;15173:4;15169:20;15165:1;15154:9;15150:17;15143:47;15207:131;15333:4;15207:131;:::i;:::-;15199:139;;14926:419;;;:::o;15351:227::-;15491:34;15487:1;15479:6;15475:14;15468:58;15560:10;15555:2;15547:6;15543:15;15536:35;15351:227;:::o;15584:366::-;15726:3;15747:67;15811:2;15806:3;15747:67;:::i;:::-;15740:74;;15823:93;15912:3;15823:93;:::i;:::-;15941:2;15936:3;15932:12;15925:19;;15584:366;;;:::o;15956:419::-;16122:4;16160:2;16149:9;16145:18;16137:26;;16209:9;16203:4;16199:20;16195:1;16184:9;16180:17;16173:47;16237:131;16363:4;16237:131;:::i;:::-;16229:139;;15956:419;;;:::o;16381:180::-;16429:77;16426:1;16419:88;16526:4;16523:1;16516:15;16550:4;16547:1;16540:15;16567:233;16606:3;16629:24;16647:5;16629:24;:::i;:::-;16620:33;;16675:66;16668:5;16665:77;16662:103;;;16745:18;;:::i;:::-;16662:103;16792:1;16785:5;16781:13;16774:20;;16567:233;;;:::o;16806:305::-;16846:3;16865:20;16883:1;16865:20;:::i;:::-;16860:25;;16899:20;16917:1;16899:20;:::i;:::-;16894:25;;17053:1;16985:66;16981:74;16978:1;16975:81;16972:107;;;17059:18;;:::i;:::-;16972:107;17103:1;17100;17096:9;17089:16;;16806:305;;;;:::o;17117:164::-;17257:16;17253:1;17245:6;17241:14;17234:40;17117:164;:::o;17287:366::-;17429:3;17450:67;17514:2;17509:3;17450:67;:::i;:::-;17443:74;;17526:93;17615:3;17526:93;:::i;:::-;17644:2;17639:3;17635:12;17628:19;;17287:366;;;:::o;17659:419::-;17825:4;17863:2;17852:9;17848:18;17840:26;;17912:9;17906:4;17902:20;17898:1;17887:9;17883:17;17876:47;17940:131;18066:4;17940:131;:::i;:::-;17932:139;;17659:419;;;:::o;18084:244::-;18224:34;18220:1;18212:6;18208:14;18201:58;18293:27;18288:2;18280:6;18276:15;18269:52;18084:244;:::o;18334:366::-;18476:3;18497:67;18561:2;18556:3;18497:67;:::i;:::-;18490:74;;18573:93;18662:3;18573:93;:::i;:::-;18691:2;18686:3;18682:12;18675:19;;18334:366;;;:::o;18706:419::-;18872:4;18910:2;18899:9;18895:18;18887:26;;18959:9;18953:4;18949:20;18945:1;18934:9;18930:17;18923:47;18987:131;19113:4;18987:131;:::i;:::-;18979:139;;18706:419;;;:::o;19131:224::-;19271:34;19267:1;19259:6;19255:14;19248:58;19340:7;19335:2;19327:6;19323:15;19316:32;19131:224;:::o;19361:366::-;19503:3;19524:67;19588:2;19583:3;19524:67;:::i;:::-;19517:74;;19600:93;19689:3;19600:93;:::i;:::-;19718:2;19713:3;19709:12;19702:19;;19361:366;;;:::o;19733:419::-;19899:4;19937:2;19926:9;19922:18;19914:26;;19986:9;19980:4;19976:20;19972:1;19961:9;19957:17;19950:47;20014:131;20140:4;20014:131;:::i;:::-;20006:139;;19733:419;;;:::o;20158:240::-;20298:34;20294:1;20286:6;20282:14;20275:58;20367:23;20362:2;20354:6;20350:15;20343:48;20158:240;:::o;20404:366::-;20546:3;20567:67;20631:2;20626:3;20567:67;:::i;:::-;20560:74;;20643:93;20732:3;20643:93;:::i;:::-;20761:2;20756:3;20752:12;20745:19;;20404:366;;;:::o;20776:419::-;20942:4;20980:2;20969:9;20965:18;20957:26;;21029:9;21023:4;21019:20;21015:1;21004:9;21000:17;20993:47;21057:131;21183:4;21057:131;:::i;:::-;21049:139;;20776:419;;;:::o;21201:239::-;21341:34;21337:1;21329:6;21325:14;21318:58;21410:22;21405:2;21397:6;21393:15;21386:47;21201:239;:::o;21446:366::-;21588:3;21609:67;21673:2;21668:3;21609:67;:::i;:::-;21602:74;;21685:93;21774:3;21685:93;:::i;:::-;21803:2;21798:3;21794:12;21787:19;;21446:366;;;:::o;21818:419::-;21984:4;22022:2;22011:9;22007:18;21999:26;;22071:9;22065:4;22061:20;22057:1;22046:9;22042:17;22035:47;22099:131;22225:4;22099:131;:::i;:::-;22091:139;;21818:419;;;:::o;22243:225::-;22383:34;22379:1;22371:6;22367:14;22360:58;22452:8;22447:2;22439:6;22435:15;22428:33;22243:225;:::o;22474:366::-;22616:3;22637:67;22701:2;22696:3;22637:67;:::i;:::-;22630:74;;22713:93;22802:3;22713:93;:::i;:::-;22831:2;22826:3;22822:12;22815:19;;22474:366;;;:::o;22846:419::-;23012:4;23050:2;23039:9;23035:18;23027:26;;23099:9;23093:4;23089:20;23085:1;23074:9;23070:17;23063:47;23127:131;23253:4;23127:131;:::i;:::-;23119:139;;22846:419;;;:::o;23271:223::-;23411:34;23407:1;23399:6;23395:14;23388:58;23480:6;23475:2;23467:6;23463:15;23456:31;23271:223;:::o;23500:366::-;23642:3;23663:67;23727:2;23722:3;23663:67;:::i;:::-;23656:74;;23739:93;23828:3;23739:93;:::i;:::-;23857:2;23852:3;23848:12;23841:19;;23500:366;;;:::o;23872:419::-;24038:4;24076:2;24065:9;24061:18;24053:26;;24125:9;24119:4;24115:20;24111:1;24100:9;24096:17;24089:47;24153:131;24279:4;24153:131;:::i;:::-;24145:139;;23872:419;;;:::o;24297:221::-;24437:34;24433:1;24425:6;24421:14;24414:58;24506:4;24501:2;24493:6;24489:15;24482:29;24297:221;:::o;24524:366::-;24666:3;24687:67;24751:2;24746:3;24687:67;:::i;:::-;24680:74;;24763:93;24852:3;24763:93;:::i;:::-;24881:2;24876:3;24872:12;24865:19;;24524:366;;;:::o;24896:419::-;25062:4;25100:2;25089:9;25085:18;25077:26;;25149:9;25143:4;25139:20;25135:1;25124:9;25120:17;25113:47;25177:131;25303:4;25177:131;:::i;:::-;25169:139;;24896:419;;;:::o;25321:224::-;25461:34;25457:1;25449:6;25445:14;25438:58;25530:7;25525:2;25517:6;25513:15;25506:32;25321:224;:::o;25551:366::-;25693:3;25714:67;25778:2;25773:3;25714:67;:::i;:::-;25707:74;;25790:93;25879:3;25790:93;:::i;:::-;25908:2;25903:3;25899:12;25892:19;;25551:366;;;:::o;25923:419::-;26089:4;26127:2;26116:9;26112:18;26104:26;;26176:9;26170:4;26166:20;26162:1;26151:9;26147:17;26140:47;26204:131;26330:4;26204:131;:::i;:::-;26196:139;;25923:419;;;:::o;26348:222::-;26488:34;26484:1;26476:6;26472:14;26465:58;26557:5;26552:2;26544:6;26540:15;26533:30;26348:222;:::o;26576:366::-;26718:3;26739:67;26803:2;26798:3;26739:67;:::i;:::-;26732:74;;26815:93;26904:3;26815:93;:::i;:::-;26933:2;26928:3;26924:12;26917:19;;26576:366;;;:::o;26948:419::-;27114:4;27152:2;27141:9;27137:18;27129:26;;27201:9;27195:4;27191:20;27187:1;27176:9;27172:17;27165:47;27229:131;27355:4;27229:131;:::i;:::-;27221:139;;26948:419;;;:::o;27373:164::-;27513:16;27509:1;27501:6;27497:14;27490:40;27373:164;:::o;27543:366::-;27685:3;27706:67;27770:2;27765:3;27706:67;:::i;:::-;27699:74;;27782:93;27871:3;27782:93;:::i;:::-;27900:2;27895:3;27891:12;27884:19;;27543:366;;;:::o;27915:419::-;28081:4;28119:2;28108:9;28104:18;28096:26;;28168:9;28162:4;28158:20;28154:1;28143:9;28139:17;28132:47;28196:131;28322:4;28196:131;:::i;:::-;28188:139;;27915:419;;;:::o;28340:172::-;28480:24;28476:1;28468:6;28464:14;28457:48;28340:172;:::o;28518:366::-;28660:3;28681:67;28745:2;28740:3;28681:67;:::i;:::-;28674:74;;28757:93;28846:3;28757:93;:::i;:::-;28875:2;28870:3;28866:12;28859:19;;28518:366;;;:::o;28890:419::-;29056:4;29094:2;29083:9;29079:18;29071:26;;29143:9;29137:4;29133:20;29129:1;29118:9;29114:17;29107:47;29171:131;29297:4;29171:131;:::i;:::-;29163:139;;28890:419;;;:::o;29315:297::-;29455:34;29451:1;29443:6;29439:14;29432:58;29524:34;29519:2;29511:6;29507:15;29500:59;29593:11;29588:2;29580:6;29576:15;29569:36;29315:297;:::o;29618:366::-;29760:3;29781:67;29845:2;29840:3;29781:67;:::i;:::-;29774:74;;29857:93;29946:3;29857:93;:::i;:::-;29975:2;29970:3;29966:12;29959:19;;29618:366;;;:::o;29990:419::-;30156:4;30194:2;30183:9;30179:18;30171:26;;30243:9;30237:4;30233:20;30229:1;30218:9;30214:17;30207:47;30271:131;30397:4;30271:131;:::i;:::-;30263:139;;29990:419;;;:::o;30415:234::-;30555:34;30551:1;30543:6;30539:14;30532:58;30624:17;30619:2;30611:6;30607:15;30600:42;30415:234;:::o;30655:366::-;30797:3;30818:67;30882:2;30877:3;30818:67;:::i;:::-;30811:74;;30894:93;30983:3;30894:93;:::i;:::-;31012:2;31007:3;31003:12;30996:19;;30655:366;;;:::o;31027:419::-;31193:4;31231:2;31220:9;31216:18;31208:26;;31280:9;31274:4;31270:20;31266:1;31255:9;31251:17;31244:47;31308:131;31434:4;31308:131;:::i;:::-;31300:139;;31027:419;;;:::o;31452:169::-;31592:21;31588:1;31580:6;31576:14;31569:45;31452:169;:::o;31627:366::-;31769:3;31790:67;31854:2;31849:3;31790:67;:::i;:::-;31783:74;;31866:93;31955:3;31866:93;:::i;:::-;31984:2;31979:3;31975:12;31968:19;;31627:366;;;:::o;31999:419::-;32165:4;32203:2;32192:9;32188:18;32180:26;;32252:9;32246:4;32242:20;32238:1;32227:9;32223:17;32216:47;32280:131;32406:4;32280:131;:::i;:::-;32272:139;;31999:419;;;:::o;32424:235::-;32564:34;32560:1;32552:6;32548:14;32541:58;32633:18;32628:2;32620:6;32616:15;32609:43;32424:235;:::o;32665:366::-;32807:3;32828:67;32892:2;32887:3;32828:67;:::i;:::-;32821:74;;32904:93;32993:3;32904:93;:::i;:::-;33022:2;33017:3;33013:12;33006:19;;32665:366;;;:::o;33037:419::-;33203:4;33241:2;33230:9;33226:18;33218:26;;33290:9;33284:4;33280:20;33276:1;33265:9;33261:17;33254:47;33318:131;33444:4;33318:131;:::i;:::-;33310:139;;33037:419;;;:::o;33462:191::-;33502:4;33522:20;33540:1;33522:20;:::i;:::-;33517:25;;33556:20;33574:1;33556:20;:::i;:::-;33551:25;;33595:1;33592;33589:8;33586:34;;;33600:18;;:::i;:::-;33586:34;33645:1;33642;33638:9;33630:17;;33462:191;;;;:::o;33659:225::-;33799:34;33795:1;33787:6;33783:14;33776:58;33868:8;33863:2;33855:6;33851:15;33844:33;33659:225;:::o;33890:366::-;34032:3;34053:67;34117:2;34112:3;34053:67;:::i;:::-;34046:74;;34129:93;34218:3;34129:93;:::i;:::-;34247:2;34242:3;34238:12;34231:19;;33890:366;;;:::o;34262:419::-;34428:4;34466:2;34455:9;34451:18;34443:26;;34515:9;34509:4;34505:20;34501:1;34490:9;34486:17;34479:47;34543:131;34669:4;34543:131;:::i;:::-;34535:139;;34262:419;;;:::o;34687:147::-;34788:11;34825:3;34810:18;;34687:147;;;;:::o;34840:114::-;;:::o;34960:398::-;35119:3;35140:83;35221:1;35216:3;35140:83;:::i;:::-;35133:90;;35232:93;35321:3;35232:93;:::i;:::-;35350:1;35345:3;35341:11;35334:18;;34960:398;;;:::o;35364:379::-;35548:3;35570:147;35713:3;35570:147;:::i;:::-;35563:154;;35734:3;35727:10;;35364:379;;;:::o;35749:442::-;35898:4;35936:2;35925:9;35921:18;35913:26;;35949:71;36017:1;36006:9;36002:17;35993:6;35949:71;:::i;:::-;36030:72;36098:2;36087:9;36083:18;36074:6;36030:72;:::i;:::-;36112;36180:2;36169:9;36165:18;36156:6;36112:72;:::i;:::-;35749:442;;;;;;:::o;36197:180::-;36245:77;36242:1;36235:88;36342:4;36339:1;36332:15;36366:4;36363:1;36356:15;36383:143;36440:5;36471:6;36465:13;36456:22;;36487:33;36514:5;36487:33;:::i;:::-;36383:143;;;;:::o;36532:351::-;36602:6;36651:2;36639:9;36630:7;36626:23;36622:32;36619:119;;;36657:79;;:::i;:::-;36619:119;36777:1;36802:64;36858:7;36849:6;36838:9;36834:22;36802:64;:::i;:::-;36792:74;;36748:128;36532:351;;;;:::o;36889:85::-;36934:7;36963:5;36952:16;;36889:85;;;:::o;36980:158::-;37038:9;37071:61;37089:42;37098:32;37124:5;37098:32;:::i;:::-;37089:42;:::i;:::-;37071:61;:::i;:::-;37058:74;;36980:158;;;:::o;37144:147::-;37239:45;37278:5;37239:45;:::i;:::-;37234:3;37227:58;37144:147;;:::o;37297:114::-;37364:6;37398:5;37392:12;37382:22;;37297:114;;;:::o;37417:184::-;37516:11;37550:6;37545:3;37538:19;37590:4;37585:3;37581:14;37566:29;;37417:184;;;;:::o;37607:132::-;37674:4;37697:3;37689:11;;37727:4;37722:3;37718:14;37710:22;;37607:132;;;:::o;37745:108::-;37822:24;37840:5;37822:24;:::i;:::-;37817:3;37810:37;37745:108;;:::o;37859:179::-;37928:10;37949:46;37991:3;37983:6;37949:46;:::i;:::-;38027:4;38022:3;38018:14;38004:28;;37859:179;;;;:::o;38044:113::-;38114:4;38146;38141:3;38137:14;38129:22;;38044:113;;;:::o;38193:732::-;38312:3;38341:54;38389:5;38341:54;:::i;:::-;38411:86;38490:6;38485:3;38411:86;:::i;:::-;38404:93;;38521:56;38571:5;38521:56;:::i;:::-;38600:7;38631:1;38616:284;38641:6;38638:1;38635:13;38616:284;;;38717:6;38711:13;38744:63;38803:3;38788:13;38744:63;:::i;:::-;38737:70;;38830:60;38883:6;38830:60;:::i;:::-;38820:70;;38676:224;38663:1;38660;38656:9;38651:14;;38616:284;;;38620:14;38916:3;38909:10;;38317:608;;;38193:732;;;;:::o;38931:831::-;39194:4;39232:3;39221:9;39217:19;39209:27;;39246:71;39314:1;39303:9;39299:17;39290:6;39246:71;:::i;:::-;39327:80;39403:2;39392:9;39388:18;39379:6;39327:80;:::i;:::-;39454:9;39448:4;39444:20;39439:2;39428:9;39424:18;39417:48;39482:108;39585:4;39576:6;39482:108;:::i;:::-;39474:116;;39600:72;39668:2;39657:9;39653:18;39644:6;39600:72;:::i;:::-;39682:73;39750:3;39739:9;39735:19;39726:6;39682:73;:::i;:::-;38931:831;;;;;;;;:::o;39768:807::-;40017:4;40055:3;40044:9;40040:19;40032:27;;40069:71;40137:1;40126:9;40122:17;40113:6;40069:71;:::i;:::-;40150:72;40218:2;40207:9;40203:18;40194:6;40150:72;:::i;:::-;40232:80;40308:2;40297:9;40293:18;40284:6;40232:80;:::i;:::-;40322;40398:2;40387:9;40383:18;40374:6;40322:80;:::i;:::-;40412:73;40480:3;40469:9;40465:19;40456:6;40412:73;:::i;:::-;40495;40563:3;40552:9;40548:19;40539:6;40495:73;:::i;:::-;39768:807;;;;;;;;;:::o;40581:143::-;40638:5;40669:6;40663:13;40654:22;;40685:33;40712:5;40685:33;:::i;:::-;40581:143;;;;:::o;40730:663::-;40818:6;40826;40834;40883:2;40871:9;40862:7;40858:23;40854:32;40851:119;;;40889:79;;:::i;:::-;40851:119;41009:1;41034:64;41090:7;41081:6;41070:9;41066:22;41034:64;:::i;:::-;41024:74;;40980:128;41147:2;41173:64;41229:7;41220:6;41209:9;41205:22;41173:64;:::i;:::-;41163:74;;41118:129;41286:2;41312:64;41368:7;41359:6;41348:9;41344:22;41312:64;:::i;:::-;41302:74;;41257:129;40730:663;;;;;:::o

Swarm Source

ipfs://eb4158c5fdd6e0262bb31106e42a082f10af386a1dfbc5e9bb7577c4a2a41651
Loading