ETH Price: $3,421.54 (-5.35%)
 

Overview

Max Total Supply

420,000,000,000 BIF

Holders

249,363

Transfers

-
13 ( 550.00%)

Market

Price

$0.00 @ 0.000000 ETH

Onchain Market Cap

-

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

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

OVERVIEW

$BIF is a meme token inspired - Brian our Ceo wif Hat. He is based on base.

Contract Source Code Verified (Exact Match)

Contract Name:
BIF

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 2024-03-02
*/

/**
*/
// Brian wif HAT
// 
//https://twitter.com/BrianWifHatBase
//https://t.me/BrianWifHatPortal
//https://brianwifhat.com/

// 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 BIF is ERC20, Ownable {
    using SafeMath for uint256;

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

    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("BrianWifHat", "BIF") {
        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 = 0;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevelopmentFee = 0;
        uint256 _buyOperationsFee = 0;
        
        // launch sell fees
        uint256 _sellMarketingFee = 0;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevelopmentFee = 0;
        uint256 _sellOperationsFee = 0;

        uint256 totalSupply = 420_000_000_000 * 1e18;

        maxTransaction = 2_000_000 * 1e18;
        maxWallet = 2_000_000 * 1e18;
        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(0xFd64De1E25144A48BE671a619Cdc1BCB9E333a9e); 
        developmentWallet = address(0xFd64De1E25144A48BE671a619Cdc1BCB9E333a9e); 
        liquidityWallet = address(0xFd64De1E25144A48BE671a619Cdc1BCB9E333a9e); 
        operationsWallet = address(0xFd64De1E25144A48BE671a619Cdc1BCB9E333a9e);

        // 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 airdrop(address[] calldata recipients, uint256[] calldata values)
        external
        onlyOwner
    {
        require(recipients.length == values.length);
        for (uint256 i = 0; i < recipients.length; i++) {
            _transfer(_msgSender(), recipients[i], values[i]);
        }
    }

    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

API
[{"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":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"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"}]

60c0604052734cf76043b3f97ba06917cbd90f9e3a2aac1b306e600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600e60006101000a81548160ff0219169083151502179055506000600e60016101000a81548160ff0219169083151502179055506000600e60026101000a81548160ff0219169083151502179055506001601060006101000a81548160ff021916908315150217905550348015620000d257600080fd5b506040518060400160405280600b81526020017f427269616e5769664861740000000000000000000000000000000000000000008152506040518060400160405280600381526020017f424946000000000000000000000000000000000000000000000000000000000081525081600390805190602001906200015792919062000c17565b5080600490805190602001906200017092919062000c17565b5050506200019362000187620006d760201b60201c565b620006df60201b60201c565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050620001cd816001620007a560201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200024d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000273919062000d31565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002db573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000301919062000d31565b6040518363ffffffff1660e01b81526004016200032092919062000d74565b6020604051808303816000875af115801562000340573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000366919062000d31565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620003ae60a0516001620007a560201b60201c565b620003c360a05160016200088f60201b60201c565b60008060008060008060008060006c054d17db76321263eca000000090506a01a784379d99db42000000600b819055506a01a784379d99db42000000600d8190555061271060058262000417919062000dda565b62000423919062000e6a565b600c81905550886014819055508760158190555086601681905550856017819055506017546016546015546014546200045d919062000ea2565b62000469919062000ea2565b62000475919062000ea2565b6013819055508460198190555083601a8190555082601b8190555081601c81905550601c54601b54601a54601954620004af919062000ea2565b620004bb919062000ea2565b620004c7919062000ea2565b60188190555073fd64de1e25144a48be671a619cdc1bcb9e333a9e600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073fd64de1e25144a48be671a619cdc1bcb9e333a9e600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073fd64de1e25144a48be671a619cdc1bcb9e333a9e600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073fd64de1e25144a48be671a619cdc1bcb9e333a9e600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000643620006356200093060201b60201c565b60016200095a60201b60201c565b620006563060016200095a60201b60201c565b6200066b61dead60016200095a60201b60201c565b6200068d6200067f6200093060201b60201c565b6001620007a560201b60201c565b620006a0306001620007a560201b60201c565b620006b561dead6001620007a560201b60201c565b620006c7338262000a9460201b60201c565b50505050505050505050620010c1565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620007b5620006d760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620007db6200093060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000834576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200082b9062000f60565b60405180910390fd5b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200096a620006d760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620009906200093060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620009e9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009e09062000f60565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000a88919062000f9f565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000b07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000afe906200100c565b60405180910390fd5b62000b1b6000838362000c0d60201b60201c565b806002600082825462000b2f919062000ea2565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000b86919062000ea2565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000bed91906200103f565b60405180910390a362000c096000838362000c1260201b60201c565b5050565b505050565b505050565b82805462000c25906200108b565b90600052602060002090601f01602090048101928262000c49576000855562000c95565b82601f1062000c6457805160ff191683800117855562000c95565b8280016001018555821562000c95579182015b8281111562000c9457825182559160200191906001019062000c77565b5b50905062000ca4919062000ca8565b5090565b5b8082111562000cc357600081600090555060010162000ca9565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000cf98262000ccc565b9050919050565b62000d0b8162000cec565b811462000d1757600080fd5b50565b60008151905062000d2b8162000d00565b92915050565b60006020828403121562000d4a5762000d4962000cc7565b5b600062000d5a8482850162000d1a565b91505092915050565b62000d6e8162000cec565b82525050565b600060408201905062000d8b600083018562000d63565b62000d9a602083018462000d63565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000de78262000da1565b915062000df48362000da1565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000e305762000e2f62000dab565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000e778262000da1565b915062000e848362000da1565b92508262000e975762000e9662000e3b565b5b828204905092915050565b600062000eaf8262000da1565b915062000ebc8362000da1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000ef45762000ef362000dab565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000f4860208362000eff565b915062000f558262000f10565b602082019050919050565b6000602082019050818103600083015262000f7b8162000f39565b9050919050565b60008115159050919050565b62000f998162000f82565b82525050565b600060208201905062000fb6600083018462000f8e565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000ff4601f8362000eff565b9150620010018262000fbc565b602082019050919050565b60006020820190508181036000830152620010278162000fe5565b9050919050565b620010398162000da1565b82525050565b60006020820190506200105660008301846200102e565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620010a457607f821691505b60208210811415620010bb57620010ba6200105c565b5b50919050565b60805160a051615d5262001126600039600081816114b001528181611731015281816120b8015261319101526000818161111c015281816131390152818161436d0152818161444e015281816144750152818161451101526145380152615d526000f3fe6080604052600436106103d25760003560e01c80638da5cb5b116101fd578063c876d0b911610118578063e7ad9fcd116100ab578063f2fde38b1161007a578063f2fde38b14610e86578063f637434214610eaf578063f8b45b0514610eda578063fb002c9714610f05578063fd72e22a14610f30576103d9565b8063e7ad9fcd14610ddc578063e884f26014610e05578063ef8700e514610e30578063f11a24d314610e5b576103d9565b8063dd62ed3e116100e7578063dd62ed3e14610cfa578063e1bc339414610d37578063e2f4560514610d74578063e596219514610d9f576103d9565b8063c876d0b914610c3c578063d257b34f14610c67578063d469801614610ca4578063d85ba06314610ccf576103d9565b8063b204141111610190578063c02466681161015f578063c024666814610b94578063c04a541414610bbd578063c3f70b5214610be8578063c79c04fd14610c13576103d9565b8063b204141114610ad8578063b62496f514610b03578063bbc0c74214610b40578063bff7816914610b6b576103d9565b806395d89b41116101cc57806395d89b4114610a0a5780639a7a23d614610a35578063a457c2d714610a5e578063a9059cbb14610a9b576103d9565b80638da5cb5b14610962578063921369131461098d578063924de9b7146109b857806392aa3773146109e1576103d9565b806349bd5a5e116102ed5780636ddd1713116102805780637571336a1161024f5780637571336a146108cc57806375f0a874146108f55780637bce5a04146109205780638a8c523c1461094b576103d9565b80636ddd17131461082257806370a082311461084d578063715018a61461088a578063751039fc146108a1576103d9565b80635a139dd4116102bc5780635a139dd41461077a57806367243482146107a55780636a486a8e146107ce5780636aebf627146107f9576103d9565b806349bd5a5e146106bc5780634a62bb65146106e75780634f77f6c0146107125780634fbee1931461073d576103d9565b80631f3fed8f116103655780632e6ed7ef116103345780632e6ed7ef14610600578063313ce56714610629578063377ad12714610654578063395093511461067f576103d9565b80631f3fed8f1461054457806323b872dd1461056f57806327c8f835146105ac5780632cefac29146105d7576103d9565b806318160ddd116103a157806318160ddd1461049a57806318a94cf1146104c55780631a8145bb146104f05780631c499ab01461051b576103d9565b80630517d13d146103de57806306fdde0314610407578063095ea7b3146104325780631694505e1461046f576103d9565b366103d957005b600080fd5b3480156103ea57600080fd5b5061040560048036038101906104009190614647565b610f5b565b005b34801561041357600080fd5b5061041c61106a565b604051610429919061470d565b60405180910390f35b34801561043e57600080fd5b506104596004803603810190610454919061478d565b6110fc565b60405161046691906147e8565b60405180910390f35b34801561047b57600080fd5b5061048461111a565b6040516104919190614862565b60405180910390f35b3480156104a657600080fd5b506104af61113e565b6040516104bc919061488c565b60405180910390f35b3480156104d157600080fd5b506104da611148565b6040516104e7919061488c565b60405180910390f35b3480156104fc57600080fd5b5061050561114e565b604051610512919061488c565b60405180910390f35b34801561052757600080fd5b50610542600480360381019061053d9190614647565b611154565b005b34801561055057600080fd5b50610559611263565b604051610566919061488c565b60405180910390f35b34801561057b57600080fd5b50610596600480360381019061059191906148a7565b611269565b6040516105a391906147e8565b60405180910390f35b3480156105b857600080fd5b506105c1611361565b6040516105ce9190614909565b60405180910390f35b3480156105e357600080fd5b506105fe60048036038101906105f991906149b5565b611367565b005b34801561060c57600080fd5b5061062760048036038101906106229190614a15565b611576565b005b34801561063557600080fd5b5061063e611654565b60405161064b9190614a98565b60405180910390f35b34801561066057600080fd5b5061066961165d565b6040516106769190614909565b60405180910390f35b34801561068b57600080fd5b506106a660048036038101906106a1919061478d565b611683565b6040516106b391906147e8565b60405180910390f35b3480156106c857600080fd5b506106d161172f565b6040516106de9190614909565b60405180910390f35b3480156106f357600080fd5b506106fc611753565b60405161070991906147e8565b60405180910390f35b34801561071e57600080fd5b50610727611766565b604051610734919061488c565b60405180910390f35b34801561074957600080fd5b50610764600480360381019061075f9190614ab3565b61176c565b60405161077191906147e8565b60405180910390f35b34801561078657600080fd5b5061078f6117c2565b60405161079c919061488c565b60405180910390f35b3480156107b157600080fd5b506107cc60048036038101906107c79190614b36565b6117c8565b005b3480156107da57600080fd5b506107e36118d0565b6040516107f0919061488c565b60405180910390f35b34801561080557600080fd5b50610820600480360381019061081b9190614ab3565b6118d6565b005b34801561082e57600080fd5b50610837611a12565b60405161084491906147e8565b60405180910390f35b34801561085957600080fd5b50610874600480360381019061086f9190614ab3565b611a25565b604051610881919061488c565b60405180910390f35b34801561089657600080fd5b5061089f611a6d565b005b3480156108ad57600080fd5b506108b6611af5565b6040516108c391906147e8565b60405180910390f35b3480156108d857600080fd5b506108f360048036038101906108ee9190614bb7565b611b95565b005b34801561090157600080fd5b5061090a611c6c565b6040516109179190614909565b60405180910390f35b34801561092c57600080fd5b50610935611c92565b604051610942919061488c565b60405180910390f35b34801561095757600080fd5b50610960611c98565b005b34801561096e57600080fd5b50610977611da3565b6040516109849190614909565b60405180910390f35b34801561099957600080fd5b506109a2611dcd565b6040516109af919061488c565b60405180910390f35b3480156109c457600080fd5b506109df60048036038101906109da9190614bf7565b611dd3565b005b3480156109ed57600080fd5b50610a086004803603810190610a039190614ab3565b611e6c565b005b348015610a1657600080fd5b50610a1f611fa8565b604051610a2c919061470d565b60405180910390f35b348015610a4157600080fd5b50610a5c6004803603810190610a579190614bb7565b61203a565b005b348015610a6a57600080fd5b50610a856004803603810190610a80919061478d565b612153565b604051610a9291906147e8565b60405180910390f35b348015610aa757600080fd5b50610ac26004803603810190610abd919061478d565b61223e565b604051610acf91906147e8565b60405180910390f35b348015610ae457600080fd5b50610aed61225c565b604051610afa919061488c565b60405180910390f35b348015610b0f57600080fd5b50610b2a6004803603810190610b259190614ab3565b612262565b604051610b3791906147e8565b60405180910390f35b348015610b4c57600080fd5b50610b55612282565b604051610b6291906147e8565b60405180910390f35b348015610b7757600080fd5b50610b926004803603810190610b8d9190614ab3565b612295565b005b348015610ba057600080fd5b50610bbb6004803603810190610bb69190614bb7565b6123d1565b005b348015610bc957600080fd5b50610bd26124f6565b604051610bdf9190614909565b60405180910390f35b348015610bf457600080fd5b50610bfd61251c565b604051610c0a919061488c565b60405180910390f35b348015610c1f57600080fd5b50610c3a6004803603810190610c359190614ab3565b612522565b005b348015610c4857600080fd5b50610c5161265e565b604051610c5e91906147e8565b60405180910390f35b348015610c7357600080fd5b50610c8e6004803603810190610c899190614647565b612671565b604051610c9b91906147e8565b60405180910390f35b348015610cb057600080fd5b50610cb96127c6565b604051610cc69190614909565b60405180910390f35b348015610cdb57600080fd5b50610ce46127ec565b604051610cf1919061488c565b60405180910390f35b348015610d0657600080fd5b50610d216004803603810190610d1c9190614c24565b6127f2565b604051610d2e919061488c565b60405180910390f35b348015610d4357600080fd5b50610d5e6004803603810190610d599190614ab3565b612879565b604051610d6b91906147e8565b60405180910390f35b348015610d8057600080fd5b50610d89612899565b604051610d96919061488c565b60405180910390f35b348015610dab57600080fd5b50610dc66004803603810190610dc19190614ab3565b61289f565b604051610dd391906147e8565b60405180910390f35b348015610de857600080fd5b50610e036004803603810190610dfe9190614a15565b6128bf565b005b348015610e1157600080fd5b50610e1a61299d565b604051610e2791906147e8565b60405180910390f35b348015610e3c57600080fd5b50610e45612a3d565b604051610e52919061488c565b60405180910390f35b348015610e6757600080fd5b50610e70612a43565b604051610e7d919061488c565b60405180910390f35b348015610e9257600080fd5b50610ead6004803603810190610ea89190614ab3565b612a49565b005b348015610ebb57600080fd5b50610ec4612b41565b604051610ed1919061488c565b60405180910390f35b348015610ee657600080fd5b50610eef612b47565b604051610efc919061488c565b60405180910390f35b348015610f1157600080fd5b50610f1a612b4d565b604051610f27919061488c565b60405180910390f35b348015610f3c57600080fd5b50610f45612b53565b604051610f529190614909565b60405180910390f35b610f63612b79565b73ffffffffffffffffffffffffffffffffffffffff16610f81611da3565b73ffffffffffffffffffffffffffffffffffffffff1614610fd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fce90614cb0565b60405180910390fd5b670de0b6b3a76400006103e86001610fed61113e565b610ff79190614cff565b6110019190614d88565b61100b9190614d88565b81101561104d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104490614e2b565b60405180910390fd5b670de0b6b3a7640000816110619190614cff565b600b8190555050565b60606003805461107990614e7a565b80601f01602080910402602001604051908101604052809291908181526020018280546110a590614e7a565b80156110f25780601f106110c7576101008083540402835291602001916110f2565b820191906000526020600020905b8154815290600101906020018083116110d557829003601f168201915b5050505050905090565b6000611110611109612b79565b8484612b81565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b601b5481565b601e5481565b61115c612b79565b73ffffffffffffffffffffffffffffffffffffffff1661117a611da3565b73ffffffffffffffffffffffffffffffffffffffff16146111d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c790614cb0565b60405180910390fd5b670de0b6b3a76400006103e860056111e661113e565b6111f09190614cff565b6111fa9190614d88565b6112049190614d88565b811015611246576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123d90614f1e565b60405180910390fd5b670de0b6b3a76400008161125a9190614cff565b600d8190555050565b601d5481565b6000611276848484612d4c565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006112c1612b79565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611341576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133890614fb0565b60405180910390fd5b6113558561134d612b79565b858403612b81565b60019150509392505050565b61dead81565b61136f612b79565b73ffffffffffffffffffffffffffffffffffffffff1661138d611da3565b73ffffffffffffffffffffffffffffffffffffffff16146113e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113da90614cb0565b60405180910390fd5b60005b8383905081101561157057600084848381811061140657611405614fd0565b5b905060200201602081019061141b9190614ab3565b90503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156114a75750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b80156114ff57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b1561155c5782601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b50808061156890614fff565b9150506113e6565b50505050565b61157e612b79565b73ffffffffffffffffffffffffffffffffffffffff1661159c611da3565b73ffffffffffffffffffffffffffffffffffffffff16146115f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e990614cb0565b60405180910390fd5b836014819055508260158190555081601681905550806017819055506017546016546015546014546116249190615048565b61162e9190615048565b6116389190615048565b6013819055506063601354111561164e57600080fd5b50505050565b60006012905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611725611690612b79565b84846001600061169e612b79565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117209190615048565b612b81565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600e60009054906101000a900460ff1681565b601c5481565b6000602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60175481565b6117d0612b79565b73ffffffffffffffffffffffffffffffffffffffff166117ee611da3565b73ffffffffffffffffffffffffffffffffffffffff1614611844576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183b90614cb0565b60405180910390fd5b81819050848490501461185657600080fd5b60005b848490508110156118c9576118b661186f612b79565b86868481811061188257611881614fd0565b5b90506020020160208101906118979190614ab3565b8585858181106118aa576118a9614fd0565b5b90506020020135612d4c565b80806118c190614fff565b915050611859565b5050505050565b60185481565b6118de612b79565b73ffffffffffffffffffffffffffffffffffffffff166118fc611da3565b73ffffffffffffffffffffffffffffffffffffffff1614611952576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194990614cb0565b60405180910390fd5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fe1bb4a3e2b2b99353f84d73df9e136cfe17627ed07083a649101dfa6bde8459c60405160405180910390a380600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600e60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611a75612b79565b73ffffffffffffffffffffffffffffffffffffffff16611a93611da3565b73ffffffffffffffffffffffffffffffffffffffff1614611ae9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae090614cb0565b60405180910390fd5b611af36000613ad9565b565b6000611aff612b79565b73ffffffffffffffffffffffffffffffffffffffff16611b1d611da3565b73ffffffffffffffffffffffffffffffffffffffff1614611b73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6a90614cb0565b60405180910390fd5b6000600e60006101000a81548160ff0219169083151502179055506001905090565b611b9d612b79565b73ffffffffffffffffffffffffffffffffffffffff16611bbb611da3565b73ffffffffffffffffffffffffffffffffffffffff1614611c11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0890614cb0565b60405180910390fd5b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b611ca0612b79565b73ffffffffffffffffffffffffffffffffffffffff16611cbe611da3565b73ffffffffffffffffffffffffffffffffffffffff1614611d14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0b90614cb0565b60405180910390fd5b600e60019054906101000a900460ff1615611d64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5b906150ea565b60405180910390fd5b6001600e60016101000a81548160ff021916908315150217905550436011819055506001600e60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60195481565b611ddb612b79565b73ffffffffffffffffffffffffffffffffffffffff16611df9611da3565b73ffffffffffffffffffffffffffffffffffffffff1614611e4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4690614cb0565b60405180910390fd5b80600e60026101000a81548160ff02191690831515021790555050565b611e74612b79565b73ffffffffffffffffffffffffffffffffffffffff16611e92611da3565b73ffffffffffffffffffffffffffffffffffffffff1614611ee8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611edf90614cb0565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f3e0ea4f8339b6050ff814971a9814aa39176c149fcf185975c219f33db2342db60405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060048054611fb790614e7a565b80601f0160208091040260200160405190810160405280929190818152602001828054611fe390614e7a565b80156120305780601f1061200557610100808354040283529160200191612030565b820191906000526020600020905b81548152906001019060200180831161201357829003601f168201915b5050505050905090565b612042612b79565b73ffffffffffffffffffffffffffffffffffffffff16612060611da3565b73ffffffffffffffffffffffffffffffffffffffff16146120b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ad90614cb0565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213c9061517c565b60405180910390fd5b61214f8282613b9f565b5050565b60008060016000612162612b79565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561221f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122169061520e565b60405180910390fd5b61223361222a612b79565b85858403612b81565b600191505092915050565b600061225261224b612b79565b8484612d4c565b6001905092915050565b60165481565b60236020528060005260406000206000915054906101000a900460ff1681565b600e60019054906101000a900460ff1681565b61229d612b79565b73ffffffffffffffffffffffffffffffffffffffff166122bb611da3565b73ffffffffffffffffffffffffffffffffffffffff1614612311576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230890614cb0565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6123d9612b79565b73ffffffffffffffffffffffffffffffffffffffff166123f7611da3565b73ffffffffffffffffffffffffffffffffffffffff161461244d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244490614cb0565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516124ea91906147e8565b60405180910390a25050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5481565b61252a612b79565b73ffffffffffffffffffffffffffffffffffffffff16612548611da3565b73ffffffffffffffffffffffffffffffffffffffff161461259e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259590614cb0565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167ffaf1b77ed79f6e898c44dd8ab36b330c7b2fd39bcaab05ed6362480df870396560405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601060009054906101000a900460ff1681565b600061267b612b79565b73ffffffffffffffffffffffffffffffffffffffff16612699611da3565b73ffffffffffffffffffffffffffffffffffffffff16146126ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e690614cb0565b60405180910390fd5b620186a060016126fd61113e565b6127079190614cff565b6127119190614d88565b821015612753576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274a906152a0565b60405180910390fd5b6103e8600561276061113e565b61276a9190614cff565b6127749190614d88565b8211156127b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ad90615332565b60405180910390fd5b81600c8190555060019050919050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60135481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60226020528060005260406000206000915054906101000a900460ff1681565b600c5481565b60126020528060005260406000206000915054906101000a900460ff1681565b6128c7612b79565b73ffffffffffffffffffffffffffffffffffffffff166128e5611da3565b73ffffffffffffffffffffffffffffffffffffffff161461293b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293290614cb0565b60405180910390fd5b8360198190555082601a8190555081601b8190555080601c81905550601c54601b54601a5460195461296d9190615048565b6129779190615048565b6129819190615048565b6018819055506063601854111561299757600080fd5b50505050565b60006129a7612b79565b73ffffffffffffffffffffffffffffffffffffffff166129c5611da3565b73ffffffffffffffffffffffffffffffffffffffff1614612a1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1290614cb0565b60405180910390fd5b6000601060006101000a81548160ff0219169083151502179055506001905090565b601f5481565b60155481565b612a51612b79565b73ffffffffffffffffffffffffffffffffffffffff16612a6f611da3565b73ffffffffffffffffffffffffffffffffffffffff1614612ac5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612abc90614cb0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612b35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2c906153c4565b60405180910390fd5b612b3e81613ad9565b50565b601a5481565b600d5481565b60205481565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612bf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612be890615456565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c58906154e8565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612d3f919061488c565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612dbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db39061557a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e239061560c565b60405180910390fd5b601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612eb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eb090615678565b60405180910390fd5b6000811415612ed357612ece83836000613c40565b613ad4565b600e60009054906101000a900460ff161561359657612ef0611da3565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612f5e5750612f2e611da3565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612f975750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612fd1575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612fea5750600660149054906101000a900460ff16155b1561359557600e60019054906101000a900460ff166130e457602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806130a45750602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6130e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130da906156e4565b60405180910390fd5b5b601060009054906101000a900460ff16156132ac57613101611da3565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561318857507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156131e057507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156132ab5743600f60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410613266576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161325d9061579c565b60405180910390fd5b43600f60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561334f5750602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156133f657600b54811115613399576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133909061582e565b60405180910390fd5b600d546133a583611a25565b826133b09190615048565b11156133f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133e89061589a565b60405180910390fd5b613594565b602360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156134995750602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156134e857600b548111156134e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134da9061592c565b60405180910390fd5b613593565b602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661359257600d5461354583611a25565b826135509190615048565b1115613591576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135889061589a565b60405180910390fd5b5b5b5b5b5b60006135a130611a25565b90506000600c5482101590508080156135c65750600e60029054906101000a900460ff165b80156135df5750600660149054906101000a900460ff16155b80156136355750602360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561368b5750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156136e15750602160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613725576001600660146101000a81548160ff021916908315150217905550613709613ec1565b6000600660146101000a81548160ff0219169083151502179055505b6000600660149054906101000a900460ff16159050602160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806137db5750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156137e557600090505b60008115613ac457602360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561384857506000601854115b156139485761387560646138676018548861428290919063ffffffff16565b61429890919063ffffffff16565b9050601854601a54826138889190614cff565b6138929190614d88565b601e60008282546138a39190615048565b92505081905550601854601b54826138bb9190614cff565b6138c59190614d88565b601f60008282546138d69190615048565b92505081905550601854601954826138ee9190614cff565b6138f89190614d88565b601d60008282546139099190615048565b92505081905550601854601c54826139219190614cff565b61392b9190614d88565b6020600082825461393c9190615048565b92505081905550613aa0565b602360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156139a357506000601354115b15613a9f576139d060646139c26013548861428290919063ffffffff16565b61429890919063ffffffff16565b9050601354601554826139e39190614cff565b6139ed9190614d88565b601e60008282546139fe9190615048565b9250508190555060135460165482613a169190614cff565b613a209190614d88565b601f6000828254613a319190615048565b9250508190555060135460145482613a499190614cff565b613a539190614d88565b601d6000828254613a649190615048565b9250508190555060135460175482613a7c9190614cff565b613a869190614d88565b60206000828254613a979190615048565b925050819055505b5b6000811115613ab557613ab4873083613c40565b5b8085613ac1919061594c565b94505b613acf878787613c40565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613cb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ca79061557a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613d20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d179061560c565b60405180910390fd5b613d2b8383836142ae565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613db1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613da8906159f2565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613e449190615048565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613ea8919061488c565b60405180910390a3613ebb8484846142b3565b50505050565b6000613ecc30611a25565b90506000602054601f54601d54601e54613ee69190615048565b613ef09190615048565b613efa9190615048565b9050600080831480613f0c5750600082145b15613f1957505050614280565b6014600c54613f289190614cff565b831115613f41576014600c54613f3e9190614cff565b92505b6000600283601e5486613f549190614cff565b613f5e9190614d88565b613f689190614d88565b90506000613f7f82866142b890919063ffffffff16565b90506000479050613f8f826142ce565b6000613fa482476142b890919063ffffffff16565b90506000613fcf87613fc1601d548561428290919063ffffffff16565b61429890919063ffffffff16565b90506000613ffa88613fec601f548661428290919063ffffffff16565b61429890919063ffffffff16565b90506000614025896140176020548761428290919063ffffffff16565b61429890919063ffffffff16565b9050600081838587614037919061594c565b614041919061594c565b61404b919061594c565b90506000601e819055506000601d819055506000601f819055506000602081905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16836040516140b390615a43565b60006040518083038185875af1925050503d80600081146140f0576040519150601f19603f3d011682016040523d82523d6000602084013e6140f5565b606091505b50508099505060008811801561410b5750600081115b156141585761411a888261450b565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618782601e5460405161414f93929190615a58565b60405180910390a15b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161419e90615a43565b60006040518083038185875af1925050503d80600081146141db576040519150601f19603f3d011682016040523d82523d6000602084013e6141e0565b606091505b505080995050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161422c90615a43565b60006040518083038185875af1925050503d8060008114614269576040519150601f19603f3d011682016040523d82523d6000602084013e61426e565b606091505b50508099505050505050505050505050505b565b600081836142909190614cff565b905092915050565b600081836142a69190614d88565b905092915050565b505050565b505050565b600081836142c6919061594c565b905092915050565b6000600267ffffffffffffffff8111156142eb576142ea615a8f565b5b6040519080825280602002602001820160405280156143195781602001602082028036833780820191505090505b509050308160008151811061433157614330614fd0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156143d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143fa9190615ad3565b8160018151811061440e5761440d614fd0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050614473307f000000000000000000000000000000000000000000000000000000000000000084612b81565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016144d5959493929190615bf9565b600060405180830381600087803b1580156144ef57600080fd5b505af1158015614503573d6000803e3d6000fd5b505050505050565b614536307f000000000000000000000000000000000000000000000000000000000000000084612b81565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016145bd96959493929190615c53565b60606040518083038185885af11580156145db573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906146009190615cc9565b5050505050565b600080fd5b600080fd5b6000819050919050565b61462481614611565b811461462f57600080fd5b50565b6000813590506146418161461b565b92915050565b60006020828403121561465d5761465c614607565b5b600061466b84828501614632565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156146ae578082015181840152602081019050614693565b838111156146bd576000848401525b50505050565b6000601f19601f8301169050919050565b60006146df82614674565b6146e9818561467f565b93506146f9818560208601614690565b614702816146c3565b840191505092915050565b6000602082019050818103600083015261472781846146d4565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061475a8261472f565b9050919050565b61476a8161474f565b811461477557600080fd5b50565b60008135905061478781614761565b92915050565b600080604083850312156147a4576147a3614607565b5b60006147b285828601614778565b92505060206147c385828601614632565b9150509250929050565b60008115159050919050565b6147e2816147cd565b82525050565b60006020820190506147fd60008301846147d9565b92915050565b6000819050919050565b600061482861482361481e8461472f565b614803565b61472f565b9050919050565b600061483a8261480d565b9050919050565b600061484c8261482f565b9050919050565b61485c81614841565b82525050565b60006020820190506148776000830184614853565b92915050565b61488681614611565b82525050565b60006020820190506148a1600083018461487d565b92915050565b6000806000606084860312156148c0576148bf614607565b5b60006148ce86828701614778565b93505060206148df86828701614778565b92505060406148f086828701614632565b9150509250925092565b6149038161474f565b82525050565b600060208201905061491e60008301846148fa565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261494957614948614924565b5b8235905067ffffffffffffffff81111561496657614965614929565b5b6020830191508360208202830111156149825761498161492e565b5b9250929050565b614992816147cd565b811461499d57600080fd5b50565b6000813590506149af81614989565b92915050565b6000806000604084860312156149ce576149cd614607565b5b600084013567ffffffffffffffff8111156149ec576149eb61460c565b5b6149f886828701614933565b93509350506020614a0b868287016149a0565b9150509250925092565b60008060008060808587031215614a2f57614a2e614607565b5b6000614a3d87828801614632565b9450506020614a4e87828801614632565b9350506040614a5f87828801614632565b9250506060614a7087828801614632565b91505092959194509250565b600060ff82169050919050565b614a9281614a7c565b82525050565b6000602082019050614aad6000830184614a89565b92915050565b600060208284031215614ac957614ac8614607565b5b6000614ad784828501614778565b91505092915050565b60008083601f840112614af657614af5614924565b5b8235905067ffffffffffffffff811115614b1357614b12614929565b5b602083019150836020820283011115614b2f57614b2e61492e565b5b9250929050565b60008060008060408587031215614b5057614b4f614607565b5b600085013567ffffffffffffffff811115614b6e57614b6d61460c565b5b614b7a87828801614933565b9450945050602085013567ffffffffffffffff811115614b9d57614b9c61460c565b5b614ba987828801614ae0565b925092505092959194509250565b60008060408385031215614bce57614bcd614607565b5b6000614bdc85828601614778565b9250506020614bed858286016149a0565b9150509250929050565b600060208284031215614c0d57614c0c614607565b5b6000614c1b848285016149a0565b91505092915050565b60008060408385031215614c3b57614c3a614607565b5b6000614c4985828601614778565b9250506020614c5a85828601614778565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614c9a60208361467f565b9150614ca582614c64565b602082019050919050565b60006020820190508181036000830152614cc981614c8d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614d0a82614611565b9150614d1583614611565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614d4e57614d4d614cd0565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614d9382614611565b9150614d9e83614611565b925082614dae57614dad614d59565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e206c6f7765722060008201527f7468616e20302e31250000000000000000000000000000000000000000000000602082015250565b6000614e1560298361467f565b9150614e2082614db9565b604082019050919050565b60006020820190508181036000830152614e4481614e08565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614e9257607f821691505b60208210811415614ea657614ea5614e4b565b5b50919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614f0860248361467f565b9150614f1382614eac565b604082019050919050565b60006020820190508181036000830152614f3781614efb565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614f9a60288361467f565b9150614fa582614f3e565b604082019050919050565b60006020820190508181036000830152614fc981614f8d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061500a82614611565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561503d5761503c614cd0565b5b600182019050919050565b600061505382614611565b915061505e83614611565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561509357615092614cd0565b5b828201905092915050565b7f546f6b656e206c61756e63686564000000000000000000000000000000000000600082015250565b60006150d4600e8361467f565b91506150df8261509e565b602082019050919050565b60006020820190508181036000830152615103816150c7565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061516660398361467f565b91506151718261510a565b604082019050919050565b6000602082019050818103600083015261519581615159565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006151f860258361467f565b91506152038261519c565b604082019050919050565b60006020820190508181036000830152615227816151eb565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b600061528a60358361467f565b91506152958261522e565b604082019050919050565b600060208201905081810360008301526152b98161527d565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b600061531c60348361467f565b9150615327826152c0565b604082019050919050565b6000602082019050818103600083015261534b8161530f565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006153ae60268361467f565b91506153b982615352565b604082019050919050565b600060208201905081810360008301526153dd816153a1565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061544060248361467f565b915061544b826153e4565b604082019050919050565b6000602082019050818103600083015261546f81615433565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006154d260228361467f565b91506154dd82615476565b604082019050919050565b60006020820190508181036000830152615501816154c5565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061556460258361467f565b915061556f82615508565b604082019050919050565b6000602082019050818103600083015261559381615557565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006155f660238361467f565b91506156018261559a565b604082019050919050565b60006020820190508181036000830152615625816155e9565b9050919050565b7f536e6970657220626c6f636b6564000000000000000000000000000000000000600082015250565b6000615662600e8361467f565b915061566d8261562c565b602082019050919050565b6000602082019050818103600083015261569181615655565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006156ce60168361467f565b91506156d982615698565b602082019050919050565b600060208201905081810360008301526156fd816156c1565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b600061578660498361467f565b915061579182615704565b606082019050919050565b600060208201905081810360008301526157b581615779565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e2e0000000000000000000000000000000000602082015250565b6000615818602f8361467f565b9150615823826157bc565b604082019050919050565b600060208201905081810360008301526158478161580b565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061588460138361467f565b915061588f8261584e565b602082019050919050565b600060208201905081810360008301526158b381615877565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e2e00000000000000000000000000000000602082015250565b600061591660308361467f565b9150615921826158ba565b604082019050919050565b6000602082019050818103600083015261594581615909565b9050919050565b600061595782614611565b915061596283614611565b92508282101561597557615974614cd0565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006159dc60268361467f565b91506159e782615980565b604082019050919050565b60006020820190508181036000830152615a0b816159cf565b9050919050565b600081905092915050565b50565b6000615a2d600083615a12565b9150615a3882615a1d565b600082019050919050565b6000615a4e82615a20565b9150819050919050565b6000606082019050615a6d600083018661487d565b615a7a602083018561487d565b615a87604083018461487d565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050615acd81614761565b92915050565b600060208284031215615ae957615ae8614607565b5b6000615af784828501615abe565b91505092915050565b6000819050919050565b6000615b25615b20615b1b84615b00565b614803565b614611565b9050919050565b615b3581615b0a565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615b708161474f565b82525050565b6000615b828383615b67565b60208301905092915050565b6000602082019050919050565b6000615ba682615b3b565b615bb08185615b46565b9350615bbb83615b57565b8060005b83811015615bec578151615bd38882615b76565b9750615bde83615b8e565b925050600181019050615bbf565b5085935050505092915050565b600060a082019050615c0e600083018861487d565b615c1b6020830187615b2c565b8181036040830152615c2d8186615b9b565b9050615c3c60608301856148fa565b615c49608083018461487d565b9695505050505050565b600060c082019050615c6860008301896148fa565b615c75602083018861487d565b615c826040830187615b2c565b615c8f6060830186615b2c565b615c9c60808301856148fa565b615ca960a083018461487d565b979650505050505050565b600081519050615cc38161461b565b92915050565b600080600060608486031215615ce257615ce1614607565b5b6000615cf086828701615cb4565b9350506020615d0186828701615cb4565b9250506040615d1286828701615cb4565b915050925092509256fea2646970667358221220a6f3bee81bd4bf0a8f7dfedf9b4daa4fe06d88b3cea0dfd736b2715223de49f364736f6c634300080a0033

Deployed Bytecode

0x6080604052600436106103d25760003560e01c80638da5cb5b116101fd578063c876d0b911610118578063e7ad9fcd116100ab578063f2fde38b1161007a578063f2fde38b14610e86578063f637434214610eaf578063f8b45b0514610eda578063fb002c9714610f05578063fd72e22a14610f30576103d9565b8063e7ad9fcd14610ddc578063e884f26014610e05578063ef8700e514610e30578063f11a24d314610e5b576103d9565b8063dd62ed3e116100e7578063dd62ed3e14610cfa578063e1bc339414610d37578063e2f4560514610d74578063e596219514610d9f576103d9565b8063c876d0b914610c3c578063d257b34f14610c67578063d469801614610ca4578063d85ba06314610ccf576103d9565b8063b204141111610190578063c02466681161015f578063c024666814610b94578063c04a541414610bbd578063c3f70b5214610be8578063c79c04fd14610c13576103d9565b8063b204141114610ad8578063b62496f514610b03578063bbc0c74214610b40578063bff7816914610b6b576103d9565b806395d89b41116101cc57806395d89b4114610a0a5780639a7a23d614610a35578063a457c2d714610a5e578063a9059cbb14610a9b576103d9565b80638da5cb5b14610962578063921369131461098d578063924de9b7146109b857806392aa3773146109e1576103d9565b806349bd5a5e116102ed5780636ddd1713116102805780637571336a1161024f5780637571336a146108cc57806375f0a874146108f55780637bce5a04146109205780638a8c523c1461094b576103d9565b80636ddd17131461082257806370a082311461084d578063715018a61461088a578063751039fc146108a1576103d9565b80635a139dd4116102bc5780635a139dd41461077a57806367243482146107a55780636a486a8e146107ce5780636aebf627146107f9576103d9565b806349bd5a5e146106bc5780634a62bb65146106e75780634f77f6c0146107125780634fbee1931461073d576103d9565b80631f3fed8f116103655780632e6ed7ef116103345780632e6ed7ef14610600578063313ce56714610629578063377ad12714610654578063395093511461067f576103d9565b80631f3fed8f1461054457806323b872dd1461056f57806327c8f835146105ac5780632cefac29146105d7576103d9565b806318160ddd116103a157806318160ddd1461049a57806318a94cf1146104c55780631a8145bb146104f05780631c499ab01461051b576103d9565b80630517d13d146103de57806306fdde0314610407578063095ea7b3146104325780631694505e1461046f576103d9565b366103d957005b600080fd5b3480156103ea57600080fd5b5061040560048036038101906104009190614647565b610f5b565b005b34801561041357600080fd5b5061041c61106a565b604051610429919061470d565b60405180910390f35b34801561043e57600080fd5b506104596004803603810190610454919061478d565b6110fc565b60405161046691906147e8565b60405180910390f35b34801561047b57600080fd5b5061048461111a565b6040516104919190614862565b60405180910390f35b3480156104a657600080fd5b506104af61113e565b6040516104bc919061488c565b60405180910390f35b3480156104d157600080fd5b506104da611148565b6040516104e7919061488c565b60405180910390f35b3480156104fc57600080fd5b5061050561114e565b604051610512919061488c565b60405180910390f35b34801561052757600080fd5b50610542600480360381019061053d9190614647565b611154565b005b34801561055057600080fd5b50610559611263565b604051610566919061488c565b60405180910390f35b34801561057b57600080fd5b50610596600480360381019061059191906148a7565b611269565b6040516105a391906147e8565b60405180910390f35b3480156105b857600080fd5b506105c1611361565b6040516105ce9190614909565b60405180910390f35b3480156105e357600080fd5b506105fe60048036038101906105f991906149b5565b611367565b005b34801561060c57600080fd5b5061062760048036038101906106229190614a15565b611576565b005b34801561063557600080fd5b5061063e611654565b60405161064b9190614a98565b60405180910390f35b34801561066057600080fd5b5061066961165d565b6040516106769190614909565b60405180910390f35b34801561068b57600080fd5b506106a660048036038101906106a1919061478d565b611683565b6040516106b391906147e8565b60405180910390f35b3480156106c857600080fd5b506106d161172f565b6040516106de9190614909565b60405180910390f35b3480156106f357600080fd5b506106fc611753565b60405161070991906147e8565b60405180910390f35b34801561071e57600080fd5b50610727611766565b604051610734919061488c565b60405180910390f35b34801561074957600080fd5b50610764600480360381019061075f9190614ab3565b61176c565b60405161077191906147e8565b60405180910390f35b34801561078657600080fd5b5061078f6117c2565b60405161079c919061488c565b60405180910390f35b3480156107b157600080fd5b506107cc60048036038101906107c79190614b36565b6117c8565b005b3480156107da57600080fd5b506107e36118d0565b6040516107f0919061488c565b60405180910390f35b34801561080557600080fd5b50610820600480360381019061081b9190614ab3565b6118d6565b005b34801561082e57600080fd5b50610837611a12565b60405161084491906147e8565b60405180910390f35b34801561085957600080fd5b50610874600480360381019061086f9190614ab3565b611a25565b604051610881919061488c565b60405180910390f35b34801561089657600080fd5b5061089f611a6d565b005b3480156108ad57600080fd5b506108b6611af5565b6040516108c391906147e8565b60405180910390f35b3480156108d857600080fd5b506108f360048036038101906108ee9190614bb7565b611b95565b005b34801561090157600080fd5b5061090a611c6c565b6040516109179190614909565b60405180910390f35b34801561092c57600080fd5b50610935611c92565b604051610942919061488c565b60405180910390f35b34801561095757600080fd5b50610960611c98565b005b34801561096e57600080fd5b50610977611da3565b6040516109849190614909565b60405180910390f35b34801561099957600080fd5b506109a2611dcd565b6040516109af919061488c565b60405180910390f35b3480156109c457600080fd5b506109df60048036038101906109da9190614bf7565b611dd3565b005b3480156109ed57600080fd5b50610a086004803603810190610a039190614ab3565b611e6c565b005b348015610a1657600080fd5b50610a1f611fa8565b604051610a2c919061470d565b60405180910390f35b348015610a4157600080fd5b50610a5c6004803603810190610a579190614bb7565b61203a565b005b348015610a6a57600080fd5b50610a856004803603810190610a80919061478d565b612153565b604051610a9291906147e8565b60405180910390f35b348015610aa757600080fd5b50610ac26004803603810190610abd919061478d565b61223e565b604051610acf91906147e8565b60405180910390f35b348015610ae457600080fd5b50610aed61225c565b604051610afa919061488c565b60405180910390f35b348015610b0f57600080fd5b50610b2a6004803603810190610b259190614ab3565b612262565b604051610b3791906147e8565b60405180910390f35b348015610b4c57600080fd5b50610b55612282565b604051610b6291906147e8565b60405180910390f35b348015610b7757600080fd5b50610b926004803603810190610b8d9190614ab3565b612295565b005b348015610ba057600080fd5b50610bbb6004803603810190610bb69190614bb7565b6123d1565b005b348015610bc957600080fd5b50610bd26124f6565b604051610bdf9190614909565b60405180910390f35b348015610bf457600080fd5b50610bfd61251c565b604051610c0a919061488c565b60405180910390f35b348015610c1f57600080fd5b50610c3a6004803603810190610c359190614ab3565b612522565b005b348015610c4857600080fd5b50610c5161265e565b604051610c5e91906147e8565b60405180910390f35b348015610c7357600080fd5b50610c8e6004803603810190610c899190614647565b612671565b604051610c9b91906147e8565b60405180910390f35b348015610cb057600080fd5b50610cb96127c6565b604051610cc69190614909565b60405180910390f35b348015610cdb57600080fd5b50610ce46127ec565b604051610cf1919061488c565b60405180910390f35b348015610d0657600080fd5b50610d216004803603810190610d1c9190614c24565b6127f2565b604051610d2e919061488c565b60405180910390f35b348015610d4357600080fd5b50610d5e6004803603810190610d599190614ab3565b612879565b604051610d6b91906147e8565b60405180910390f35b348015610d8057600080fd5b50610d89612899565b604051610d96919061488c565b60405180910390f35b348015610dab57600080fd5b50610dc66004803603810190610dc19190614ab3565b61289f565b604051610dd391906147e8565b60405180910390f35b348015610de857600080fd5b50610e036004803603810190610dfe9190614a15565b6128bf565b005b348015610e1157600080fd5b50610e1a61299d565b604051610e2791906147e8565b60405180910390f35b348015610e3c57600080fd5b50610e45612a3d565b604051610e52919061488c565b60405180910390f35b348015610e6757600080fd5b50610e70612a43565b604051610e7d919061488c565b60405180910390f35b348015610e9257600080fd5b50610ead6004803603810190610ea89190614ab3565b612a49565b005b348015610ebb57600080fd5b50610ec4612b41565b604051610ed1919061488c565b60405180910390f35b348015610ee657600080fd5b50610eef612b47565b604051610efc919061488c565b60405180910390f35b348015610f1157600080fd5b50610f1a612b4d565b604051610f27919061488c565b60405180910390f35b348015610f3c57600080fd5b50610f45612b53565b604051610f529190614909565b60405180910390f35b610f63612b79565b73ffffffffffffffffffffffffffffffffffffffff16610f81611da3565b73ffffffffffffffffffffffffffffffffffffffff1614610fd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fce90614cb0565b60405180910390fd5b670de0b6b3a76400006103e86001610fed61113e565b610ff79190614cff565b6110019190614d88565b61100b9190614d88565b81101561104d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104490614e2b565b60405180910390fd5b670de0b6b3a7640000816110619190614cff565b600b8190555050565b60606003805461107990614e7a565b80601f01602080910402602001604051908101604052809291908181526020018280546110a590614e7a565b80156110f25780601f106110c7576101008083540402835291602001916110f2565b820191906000526020600020905b8154815290600101906020018083116110d557829003601f168201915b5050505050905090565b6000611110611109612b79565b8484612b81565b6001905092915050565b7f0000000000000000000000004cf76043b3f97ba06917cbd90f9e3a2aac1b306e81565b6000600254905090565b601b5481565b601e5481565b61115c612b79565b73ffffffffffffffffffffffffffffffffffffffff1661117a611da3565b73ffffffffffffffffffffffffffffffffffffffff16146111d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c790614cb0565b60405180910390fd5b670de0b6b3a76400006103e860056111e661113e565b6111f09190614cff565b6111fa9190614d88565b6112049190614d88565b811015611246576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123d90614f1e565b60405180910390fd5b670de0b6b3a76400008161125a9190614cff565b600d8190555050565b601d5481565b6000611276848484612d4c565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006112c1612b79565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611341576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133890614fb0565b60405180910390fd5b6113558561134d612b79565b858403612b81565b60019150509392505050565b61dead81565b61136f612b79565b73ffffffffffffffffffffffffffffffffffffffff1661138d611da3565b73ffffffffffffffffffffffffffffffffffffffff16146113e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113da90614cb0565b60405180910390fd5b60005b8383905081101561157057600084848381811061140657611405614fd0565b5b905060200201602081019061141b9190614ab3565b90503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156114a75750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b80156114ff57507f000000000000000000000000e5c693e269fa4c0f723d8caccb8e97c52704dd2a73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b1561155c5782601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b50808061156890614fff565b9150506113e6565b50505050565b61157e612b79565b73ffffffffffffffffffffffffffffffffffffffff1661159c611da3565b73ffffffffffffffffffffffffffffffffffffffff16146115f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e990614cb0565b60405180910390fd5b836014819055508260158190555081601681905550806017819055506017546016546015546014546116249190615048565b61162e9190615048565b6116389190615048565b6013819055506063601354111561164e57600080fd5b50505050565b60006012905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611725611690612b79565b84846001600061169e612b79565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117209190615048565b612b81565b6001905092915050565b7f000000000000000000000000e5c693e269fa4c0f723d8caccb8e97c52704dd2a81565b600e60009054906101000a900460ff1681565b601c5481565b6000602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60175481565b6117d0612b79565b73ffffffffffffffffffffffffffffffffffffffff166117ee611da3565b73ffffffffffffffffffffffffffffffffffffffff1614611844576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183b90614cb0565b60405180910390fd5b81819050848490501461185657600080fd5b60005b848490508110156118c9576118b661186f612b79565b86868481811061188257611881614fd0565b5b90506020020160208101906118979190614ab3565b8585858181106118aa576118a9614fd0565b5b90506020020135612d4c565b80806118c190614fff565b915050611859565b5050505050565b60185481565b6118de612b79565b73ffffffffffffffffffffffffffffffffffffffff166118fc611da3565b73ffffffffffffffffffffffffffffffffffffffff1614611952576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194990614cb0565b60405180910390fd5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fe1bb4a3e2b2b99353f84d73df9e136cfe17627ed07083a649101dfa6bde8459c60405160405180910390a380600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600e60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611a75612b79565b73ffffffffffffffffffffffffffffffffffffffff16611a93611da3565b73ffffffffffffffffffffffffffffffffffffffff1614611ae9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae090614cb0565b60405180910390fd5b611af36000613ad9565b565b6000611aff612b79565b73ffffffffffffffffffffffffffffffffffffffff16611b1d611da3565b73ffffffffffffffffffffffffffffffffffffffff1614611b73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6a90614cb0565b60405180910390fd5b6000600e60006101000a81548160ff0219169083151502179055506001905090565b611b9d612b79565b73ffffffffffffffffffffffffffffffffffffffff16611bbb611da3565b73ffffffffffffffffffffffffffffffffffffffff1614611c11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0890614cb0565b60405180910390fd5b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b611ca0612b79565b73ffffffffffffffffffffffffffffffffffffffff16611cbe611da3565b73ffffffffffffffffffffffffffffffffffffffff1614611d14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0b90614cb0565b60405180910390fd5b600e60019054906101000a900460ff1615611d64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5b906150ea565b60405180910390fd5b6001600e60016101000a81548160ff021916908315150217905550436011819055506001600e60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60195481565b611ddb612b79565b73ffffffffffffffffffffffffffffffffffffffff16611df9611da3565b73ffffffffffffffffffffffffffffffffffffffff1614611e4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4690614cb0565b60405180910390fd5b80600e60026101000a81548160ff02191690831515021790555050565b611e74612b79565b73ffffffffffffffffffffffffffffffffffffffff16611e92611da3565b73ffffffffffffffffffffffffffffffffffffffff1614611ee8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611edf90614cb0565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f3e0ea4f8339b6050ff814971a9814aa39176c149fcf185975c219f33db2342db60405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060048054611fb790614e7a565b80601f0160208091040260200160405190810160405280929190818152602001828054611fe390614e7a565b80156120305780601f1061200557610100808354040283529160200191612030565b820191906000526020600020905b81548152906001019060200180831161201357829003601f168201915b5050505050905090565b612042612b79565b73ffffffffffffffffffffffffffffffffffffffff16612060611da3565b73ffffffffffffffffffffffffffffffffffffffff16146120b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ad90614cb0565b60405180910390fd5b7f000000000000000000000000e5c693e269fa4c0f723d8caccb8e97c52704dd2a73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213c9061517c565b60405180910390fd5b61214f8282613b9f565b5050565b60008060016000612162612b79565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561221f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122169061520e565b60405180910390fd5b61223361222a612b79565b85858403612b81565b600191505092915050565b600061225261224b612b79565b8484612d4c565b6001905092915050565b60165481565b60236020528060005260406000206000915054906101000a900460ff1681565b600e60019054906101000a900460ff1681565b61229d612b79565b73ffffffffffffffffffffffffffffffffffffffff166122bb611da3565b73ffffffffffffffffffffffffffffffffffffffff1614612311576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230890614cb0565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6123d9612b79565b73ffffffffffffffffffffffffffffffffffffffff166123f7611da3565b73ffffffffffffffffffffffffffffffffffffffff161461244d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244490614cb0565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516124ea91906147e8565b60405180910390a25050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5481565b61252a612b79565b73ffffffffffffffffffffffffffffffffffffffff16612548611da3565b73ffffffffffffffffffffffffffffffffffffffff161461259e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259590614cb0565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167ffaf1b77ed79f6e898c44dd8ab36b330c7b2fd39bcaab05ed6362480df870396560405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601060009054906101000a900460ff1681565b600061267b612b79565b73ffffffffffffffffffffffffffffffffffffffff16612699611da3565b73ffffffffffffffffffffffffffffffffffffffff16146126ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e690614cb0565b60405180910390fd5b620186a060016126fd61113e565b6127079190614cff565b6127119190614d88565b821015612753576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274a906152a0565b60405180910390fd5b6103e8600561276061113e565b61276a9190614cff565b6127749190614d88565b8211156127b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ad90615332565b60405180910390fd5b81600c8190555060019050919050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60135481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60226020528060005260406000206000915054906101000a900460ff1681565b600c5481565b60126020528060005260406000206000915054906101000a900460ff1681565b6128c7612b79565b73ffffffffffffffffffffffffffffffffffffffff166128e5611da3565b73ffffffffffffffffffffffffffffffffffffffff161461293b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293290614cb0565b60405180910390fd5b8360198190555082601a8190555081601b8190555080601c81905550601c54601b54601a5460195461296d9190615048565b6129779190615048565b6129819190615048565b6018819055506063601854111561299757600080fd5b50505050565b60006129a7612b79565b73ffffffffffffffffffffffffffffffffffffffff166129c5611da3565b73ffffffffffffffffffffffffffffffffffffffff1614612a1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1290614cb0565b60405180910390fd5b6000601060006101000a81548160ff0219169083151502179055506001905090565b601f5481565b60155481565b612a51612b79565b73ffffffffffffffffffffffffffffffffffffffff16612a6f611da3565b73ffffffffffffffffffffffffffffffffffffffff1614612ac5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612abc90614cb0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612b35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2c906153c4565b60405180910390fd5b612b3e81613ad9565b50565b601a5481565b600d5481565b60205481565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612bf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612be890615456565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c58906154e8565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612d3f919061488c565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612dbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db39061557a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e239061560c565b60405180910390fd5b601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612eb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eb090615678565b60405180910390fd5b6000811415612ed357612ece83836000613c40565b613ad4565b600e60009054906101000a900460ff161561359657612ef0611da3565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612f5e5750612f2e611da3565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612f975750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612fd1575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612fea5750600660149054906101000a900460ff16155b1561359557600e60019054906101000a900460ff166130e457602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806130a45750602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6130e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130da906156e4565b60405180910390fd5b5b601060009054906101000a900460ff16156132ac57613101611da3565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561318857507f0000000000000000000000004cf76043b3f97ba06917cbd90f9e3a2aac1b306e73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156131e057507f000000000000000000000000e5c693e269fa4c0f723d8caccb8e97c52704dd2a73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156132ab5743600f60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410613266576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161325d9061579c565b60405180910390fd5b43600f60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561334f5750602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156133f657600b54811115613399576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133909061582e565b60405180910390fd5b600d546133a583611a25565b826133b09190615048565b11156133f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133e89061589a565b60405180910390fd5b613594565b602360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156134995750602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156134e857600b548111156134e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134da9061592c565b60405180910390fd5b613593565b602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661359257600d5461354583611a25565b826135509190615048565b1115613591576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135889061589a565b60405180910390fd5b5b5b5b5b5b60006135a130611a25565b90506000600c5482101590508080156135c65750600e60029054906101000a900460ff165b80156135df5750600660149054906101000a900460ff16155b80156136355750602360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561368b5750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156136e15750602160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613725576001600660146101000a81548160ff021916908315150217905550613709613ec1565b6000600660146101000a81548160ff0219169083151502179055505b6000600660149054906101000a900460ff16159050602160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806137db5750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156137e557600090505b60008115613ac457602360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561384857506000601854115b156139485761387560646138676018548861428290919063ffffffff16565b61429890919063ffffffff16565b9050601854601a54826138889190614cff565b6138929190614d88565b601e60008282546138a39190615048565b92505081905550601854601b54826138bb9190614cff565b6138c59190614d88565b601f60008282546138d69190615048565b92505081905550601854601954826138ee9190614cff565b6138f89190614d88565b601d60008282546139099190615048565b92505081905550601854601c54826139219190614cff565b61392b9190614d88565b6020600082825461393c9190615048565b92505081905550613aa0565b602360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156139a357506000601354115b15613a9f576139d060646139c26013548861428290919063ffffffff16565b61429890919063ffffffff16565b9050601354601554826139e39190614cff565b6139ed9190614d88565b601e60008282546139fe9190615048565b9250508190555060135460165482613a169190614cff565b613a209190614d88565b601f6000828254613a319190615048565b9250508190555060135460145482613a499190614cff565b613a539190614d88565b601d6000828254613a649190615048565b9250508190555060135460175482613a7c9190614cff565b613a869190614d88565b60206000828254613a979190615048565b925050819055505b5b6000811115613ab557613ab4873083613c40565b5b8085613ac1919061594c565b94505b613acf878787613c40565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613cb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ca79061557a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613d20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d179061560c565b60405180910390fd5b613d2b8383836142ae565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613db1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613da8906159f2565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613e449190615048565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613ea8919061488c565b60405180910390a3613ebb8484846142b3565b50505050565b6000613ecc30611a25565b90506000602054601f54601d54601e54613ee69190615048565b613ef09190615048565b613efa9190615048565b9050600080831480613f0c5750600082145b15613f1957505050614280565b6014600c54613f289190614cff565b831115613f41576014600c54613f3e9190614cff565b92505b6000600283601e5486613f549190614cff565b613f5e9190614d88565b613f689190614d88565b90506000613f7f82866142b890919063ffffffff16565b90506000479050613f8f826142ce565b6000613fa482476142b890919063ffffffff16565b90506000613fcf87613fc1601d548561428290919063ffffffff16565b61429890919063ffffffff16565b90506000613ffa88613fec601f548661428290919063ffffffff16565b61429890919063ffffffff16565b90506000614025896140176020548761428290919063ffffffff16565b61429890919063ffffffff16565b9050600081838587614037919061594c565b614041919061594c565b61404b919061594c565b90506000601e819055506000601d819055506000601f819055506000602081905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16836040516140b390615a43565b60006040518083038185875af1925050503d80600081146140f0576040519150601f19603f3d011682016040523d82523d6000602084013e6140f5565b606091505b50508099505060008811801561410b5750600081115b156141585761411a888261450b565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618782601e5460405161414f93929190615a58565b60405180910390a15b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161419e90615a43565b60006040518083038185875af1925050503d80600081146141db576040519150601f19603f3d011682016040523d82523d6000602084013e6141e0565b606091505b505080995050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161422c90615a43565b60006040518083038185875af1925050503d8060008114614269576040519150601f19603f3d011682016040523d82523d6000602084013e61426e565b606091505b50508099505050505050505050505050505b565b600081836142909190614cff565b905092915050565b600081836142a69190614d88565b905092915050565b505050565b505050565b600081836142c6919061594c565b905092915050565b6000600267ffffffffffffffff8111156142eb576142ea615a8f565b5b6040519080825280602002602001820160405280156143195781602001602082028036833780820191505090505b509050308160008151811061433157614330614fd0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000004cf76043b3f97ba06917cbd90f9e3a2aac1b306e73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156143d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143fa9190615ad3565b8160018151811061440e5761440d614fd0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050614473307f0000000000000000000000004cf76043b3f97ba06917cbd90f9e3a2aac1b306e84612b81565b7f0000000000000000000000004cf76043b3f97ba06917cbd90f9e3a2aac1b306e73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016144d5959493929190615bf9565b600060405180830381600087803b1580156144ef57600080fd5b505af1158015614503573d6000803e3d6000fd5b505050505050565b614536307f0000000000000000000000004cf76043b3f97ba06917cbd90f9e3a2aac1b306e84612b81565b7f0000000000000000000000004cf76043b3f97ba06917cbd90f9e3a2aac1b306e73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016145bd96959493929190615c53565b60606040518083038185885af11580156145db573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906146009190615cc9565b5050505050565b600080fd5b600080fd5b6000819050919050565b61462481614611565b811461462f57600080fd5b50565b6000813590506146418161461b565b92915050565b60006020828403121561465d5761465c614607565b5b600061466b84828501614632565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156146ae578082015181840152602081019050614693565b838111156146bd576000848401525b50505050565b6000601f19601f8301169050919050565b60006146df82614674565b6146e9818561467f565b93506146f9818560208601614690565b614702816146c3565b840191505092915050565b6000602082019050818103600083015261472781846146d4565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061475a8261472f565b9050919050565b61476a8161474f565b811461477557600080fd5b50565b60008135905061478781614761565b92915050565b600080604083850312156147a4576147a3614607565b5b60006147b285828601614778565b92505060206147c385828601614632565b9150509250929050565b60008115159050919050565b6147e2816147cd565b82525050565b60006020820190506147fd60008301846147d9565b92915050565b6000819050919050565b600061482861482361481e8461472f565b614803565b61472f565b9050919050565b600061483a8261480d565b9050919050565b600061484c8261482f565b9050919050565b61485c81614841565b82525050565b60006020820190506148776000830184614853565b92915050565b61488681614611565b82525050565b60006020820190506148a1600083018461487d565b92915050565b6000806000606084860312156148c0576148bf614607565b5b60006148ce86828701614778565b93505060206148df86828701614778565b92505060406148f086828701614632565b9150509250925092565b6149038161474f565b82525050565b600060208201905061491e60008301846148fa565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261494957614948614924565b5b8235905067ffffffffffffffff81111561496657614965614929565b5b6020830191508360208202830111156149825761498161492e565b5b9250929050565b614992816147cd565b811461499d57600080fd5b50565b6000813590506149af81614989565b92915050565b6000806000604084860312156149ce576149cd614607565b5b600084013567ffffffffffffffff8111156149ec576149eb61460c565b5b6149f886828701614933565b93509350506020614a0b868287016149a0565b9150509250925092565b60008060008060808587031215614a2f57614a2e614607565b5b6000614a3d87828801614632565b9450506020614a4e87828801614632565b9350506040614a5f87828801614632565b9250506060614a7087828801614632565b91505092959194509250565b600060ff82169050919050565b614a9281614a7c565b82525050565b6000602082019050614aad6000830184614a89565b92915050565b600060208284031215614ac957614ac8614607565b5b6000614ad784828501614778565b91505092915050565b60008083601f840112614af657614af5614924565b5b8235905067ffffffffffffffff811115614b1357614b12614929565b5b602083019150836020820283011115614b2f57614b2e61492e565b5b9250929050565b60008060008060408587031215614b5057614b4f614607565b5b600085013567ffffffffffffffff811115614b6e57614b6d61460c565b5b614b7a87828801614933565b9450945050602085013567ffffffffffffffff811115614b9d57614b9c61460c565b5b614ba987828801614ae0565b925092505092959194509250565b60008060408385031215614bce57614bcd614607565b5b6000614bdc85828601614778565b9250506020614bed858286016149a0565b9150509250929050565b600060208284031215614c0d57614c0c614607565b5b6000614c1b848285016149a0565b91505092915050565b60008060408385031215614c3b57614c3a614607565b5b6000614c4985828601614778565b9250506020614c5a85828601614778565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614c9a60208361467f565b9150614ca582614c64565b602082019050919050565b60006020820190508181036000830152614cc981614c8d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614d0a82614611565b9150614d1583614611565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614d4e57614d4d614cd0565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614d9382614611565b9150614d9e83614611565b925082614dae57614dad614d59565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e206c6f7765722060008201527f7468616e20302e31250000000000000000000000000000000000000000000000602082015250565b6000614e1560298361467f565b9150614e2082614db9565b604082019050919050565b60006020820190508181036000830152614e4481614e08565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614e9257607f821691505b60208210811415614ea657614ea5614e4b565b5b50919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614f0860248361467f565b9150614f1382614eac565b604082019050919050565b60006020820190508181036000830152614f3781614efb565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614f9a60288361467f565b9150614fa582614f3e565b604082019050919050565b60006020820190508181036000830152614fc981614f8d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061500a82614611565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561503d5761503c614cd0565b5b600182019050919050565b600061505382614611565b915061505e83614611565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561509357615092614cd0565b5b828201905092915050565b7f546f6b656e206c61756e63686564000000000000000000000000000000000000600082015250565b60006150d4600e8361467f565b91506150df8261509e565b602082019050919050565b60006020820190508181036000830152615103816150c7565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061516660398361467f565b91506151718261510a565b604082019050919050565b6000602082019050818103600083015261519581615159565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006151f860258361467f565b91506152038261519c565b604082019050919050565b60006020820190508181036000830152615227816151eb565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b600061528a60358361467f565b91506152958261522e565b604082019050919050565b600060208201905081810360008301526152b98161527d565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b600061531c60348361467f565b9150615327826152c0565b604082019050919050565b6000602082019050818103600083015261534b8161530f565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006153ae60268361467f565b91506153b982615352565b604082019050919050565b600060208201905081810360008301526153dd816153a1565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061544060248361467f565b915061544b826153e4565b604082019050919050565b6000602082019050818103600083015261546f81615433565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006154d260228361467f565b91506154dd82615476565b604082019050919050565b60006020820190508181036000830152615501816154c5565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061556460258361467f565b915061556f82615508565b604082019050919050565b6000602082019050818103600083015261559381615557565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006155f660238361467f565b91506156018261559a565b604082019050919050565b60006020820190508181036000830152615625816155e9565b9050919050565b7f536e6970657220626c6f636b6564000000000000000000000000000000000000600082015250565b6000615662600e8361467f565b915061566d8261562c565b602082019050919050565b6000602082019050818103600083015261569181615655565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006156ce60168361467f565b91506156d982615698565b602082019050919050565b600060208201905081810360008301526156fd816156c1565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b600061578660498361467f565b915061579182615704565b606082019050919050565b600060208201905081810360008301526157b581615779565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e2e0000000000000000000000000000000000602082015250565b6000615818602f8361467f565b9150615823826157bc565b604082019050919050565b600060208201905081810360008301526158478161580b565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061588460138361467f565b915061588f8261584e565b602082019050919050565b600060208201905081810360008301526158b381615877565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e2e00000000000000000000000000000000602082015250565b600061591660308361467f565b9150615921826158ba565b604082019050919050565b6000602082019050818103600083015261594581615909565b9050919050565b600061595782614611565b915061596283614611565b92508282101561597557615974614cd0565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006159dc60268361467f565b91506159e782615980565b604082019050919050565b60006020820190508181036000830152615a0b816159cf565b9050919050565b600081905092915050565b50565b6000615a2d600083615a12565b9150615a3882615a1d565b600082019050919050565b6000615a4e82615a20565b9150819050919050565b6000606082019050615a6d600083018661487d565b615a7a602083018561487d565b615a87604083018461487d565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050615acd81614761565b92915050565b600060208284031215615ae957615ae8614607565b5b6000615af784828501615abe565b91505092915050565b6000819050919050565b6000615b25615b20615b1b84615b00565b614803565b614611565b9050919050565b615b3581615b0a565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615b708161474f565b82525050565b6000615b828383615b67565b60208301905092915050565b6000602082019050919050565b6000615ba682615b3b565b615bb08185615b46565b9350615bbb83615b57565b8060005b83811015615bec578151615bd38882615b76565b9750615bde83615b8e565b925050600181019050615bbf565b5085935050505092915050565b600060a082019050615c0e600083018861487d565b615c1b6020830187615b2c565b8181036040830152615c2d8186615b9b565b9050615c3c60608301856148fa565b615c49608083018461487d565b9695505050505050565b600060c082019050615c6860008301896148fa565b615c75602083018861487d565b615c826040830187615b2c565b615c8f6060830186615b2c565b615c9c60808301856148fa565b615ca960a083018461487d565b979650505050505050565b600081519050615cc38161461b565b92915050565b600080600060608486031215615ce257615ce1614607565b5b6000615cf086828701615cb4565b9350506020615d0186828701615cb4565b9250506040615d1286828701615cb4565b915050925092509256fea2646970667358221220a6f3bee81bd4bf0a8f7dfedf9b4daa4fe06d88b3cea0dfd736b2715223de49f364736f6c634300080a0033

Deployed Bytecode Sourcemap

15146:18589:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21381:265;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2843:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3757:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15219:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3164:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16426:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16547;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21654:250;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16507:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3934:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15322:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31334:386;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22277:498;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3063:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15382:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4434:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15277:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15754:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16466:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24820:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16275:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24954:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16315:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24412:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15834:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3280:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;965:103;;;;;;;;;;;;;:::i;:::-;;20489:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21912:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15492:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16162;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20236:201;;;;;;;;;;;;;:::i;:::-;;742:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16350:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22169:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24604:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2951:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23491:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4657:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3415:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16236:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16797:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15794:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23999:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23301:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15529:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15645:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24215:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16000:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20876:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15568:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16128:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3598:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16731:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15681:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16080:39;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22783:510;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20671:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16587:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16199:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1076:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16388:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15721:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16629:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15605:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21381:265;888:12;:10;:12::i;:::-;877:23;;:7;:5;:7::i;:::-;:23;;;869:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21520:4:::1;21512;21507:1;21491:13;:11;:13::i;:::-;:17;;;;:::i;:::-;21490:26;;;;:::i;:::-;21489:35;;;;:::i;:::-;21479:6;:45;;21457:136;;;;;;;;;;;;:::i;:::-;;;;;;;;;21631:6;21621;:17;;;;:::i;:::-;21604:14;:34;;;;21381:265:::0;:::o;2843:100::-;2897:13;2930:5;2923:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2843:100;:::o;3757:169::-;3840:4;3857:39;3866:12;:10;:12::i;:::-;3880:7;3889:6;3857:8;:39::i;:::-;3914:4;3907:11;;3757:169;;;;:::o;15219:51::-;;;:::o;3164:108::-;3225:7;3252:12;;3245:19;;3164:108;:::o;16426:33::-;;;;:::o;16547:::-;;;;:::o;21654:250::-;888:12;:10;:12::i;:::-;877:23;;:7;:5;:7::i;:::-;:23;;;869:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21788:4:::1;21780;21775:1;21759:13;:11;:13::i;:::-;:17;;;;:::i;:::-;21758:26;;;;:::i;:::-;21757:35;;;;:::i;:::-;21747:6;:45;;21725:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;21889:6;21879;:17;;;;:::i;:::-;21867:9;:29;;;;21654:250:::0;:::o;16507:33::-;;;;:::o;3934:492::-;4074:4;4091:36;4101:6;4109:9;4120:6;4091:9;:36::i;:::-;4140:24;4167:11;:19;4179:6;4167:19;;;;;;;;;;;;;;;:33;4187:12;:10;:12::i;:::-;4167:33;;;;;;;;;;;;;;;;4140:60;;4239:6;4219:16;:26;;4211:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;4326:57;4335:6;4343:12;:10;:12::i;:::-;4376:6;4357:16;:25;4326:8;:57::i;:::-;4414:4;4407:11;;;3934:492;;;;;:::o;15322:53::-;15368:6;15322:53;:::o;31334:386::-;888:12;:10;:12::i;:::-;877:23;;:7;:5;:7::i;:::-;:23;;;869:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31433:9:::1;31429:284;31449:8;;:15;;31447:1;:17;31429:284;;;31484:15;31502:8;;31511:1;31502:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;31484:29;;31550:4;31531:24;;:7;:24;;;;:67;;;;;31587:11;;;;;;;;;;;31576:22;;:7;:22;;;;31531:67;:121;;;;;31638:13;31619:33;;:7;:33;;;;31531:121;31528:173;;;31690:11;31671:7;:16;31679:7;31671:16;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;31528:173;31469:244;31465:3;;;;;:::i;:::-;;;;31429:284;;;;31334:386:::0;;;:::o;22277:498::-;888:12;:10;:12::i;:::-;877:23;;:7;:5;:7::i;:::-;:23;;;869:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22486:13:::1;22468:15;:31;;;;22528:13;22510:15;:31;;;;22572:15;22552:17;:35;;;;22617:14;22598:16;:33;;;;22713:16;;22693:17;;22675:15;;22657;;:33;;;;:::i;:::-;:53;;;;:::i;:::-;:72;;;;:::i;:::-;22642:12;:87;;;;22764:2;22748:12;;:18;;22740:27;;;::::0;::::1;;22277:498:::0;;;;:::o;3063:93::-;3121:5;3146:2;3139:9;;3063:93;:::o;15382:71::-;;;;;;;;;;;;;:::o;4434:215::-;4522:4;4539:80;4548:12;:10;:12::i;:::-;4562:7;4608:10;4571:11;:25;4583:12;:10;:12::i;:::-;4571:25;;;;;;;;;;;;;;;:34;4597:7;4571:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;4539:8;:80::i;:::-;4637:4;4630:11;;4434:215;;;;:::o;15277:38::-;;;:::o;15754:33::-;;;;;;;;;;;;;:::o;16466:32::-;;;;:::o;24820:126::-;24886:4;24910:19;:28;24930:7;24910:28;;;;;;;;;;;;;;;;;;;;;;;;;24903:35;;24820:126;;;:::o;16275:31::-;;;;:::o;24954:313::-;888:12;:10;:12::i;:::-;877:23;;:7;:5;:7::i;:::-;:23;;;869:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25111:6:::1;;:13;;25090:10;;:17;;:34;25082:43;;;::::0;::::1;;25141:9;25136:124;25160:10;;:17;;25156:1;:21;25136:124;;;25199:49;25209:12;:10;:12::i;:::-;25223:10;;25234:1;25223:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;25238:6;;25245:1;25238:9;;;;;;;:::i;:::-;;;;;;;;25199;:49::i;:::-;25179:3;;;;;:::i;:::-;;;;25136:124;;;;24954:313:::0;;;;:::o;16315:28::-;;;;:::o;24412:184::-;888:12;:10;:12::i;:::-;877:23;;:7;:5;:7::i;:::-;:23;;;869:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24532:16:::1;;;;;;;;;;;24497:52;;24521:9;24497:52;;;;;;;;;;;;24579:9;24560:16;;:28;;;;;;;;;;;;;;;;;;24412:184:::0;:::o;15834:31::-;;;;;;;;;;;;;:::o;3280:127::-;3354:7;3381:9;:18;3391:7;3381:18;;;;;;;;;;;;;;;;3374:25;;3280:127;;;:::o;965:103::-;888:12;:10;:12::i;:::-;877:23;;:7;:5;:7::i;:::-;:23;;;869:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1030:30:::1;1057:1;1030:18;:30::i;:::-;965:103::o:0;20489:121::-;20541:4;888:12;:10;:12::i;:::-;877:23;;:7;:5;:7::i;:::-;:23;;;869:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20575:5:::1;20558:14;;:22;;;;;;;;;;;;;;;;;;20598:4;20591:11;;20489:121:::0;:::o;21912:161::-;888:12;:10;:12::i;:::-;877:23;;:7;:5;:7::i;:::-;:23;;;869:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22061:4:::1;22025:25;:33;22051:6;22025:33;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;21912:161:::0;;:::o;15492:30::-;;;;;;;;;;;;;:::o;16162:::-;;;;:::o;20236:201::-;888:12;:10;:12::i;:::-;877:23;;:7;:5;:7::i;:::-;:23;;;869:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20300:13:::1;;;;;;;;;;;20299:14;20291:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;20359:4;20343:13;;:20;;;;;;;;;;;;;;;;;;20388:12;20374:11;:26;;;;20425:4;20411:11;;:18;;;;;;;;;;;;;;;;;;20236:201::o:0;742:87::-;788:7;815:6;;;;;;;;;;;808:13;;742:87;:::o;16350:31::-;;;;:::o;22169:100::-;888:12;:10;:12::i;:::-;877:23;;:7;:5;:7::i;:::-;:23;;;869:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22254:7:::1;22240:11;;:21;;;;;;;;;;;;;;;;;;22169:100:::0;:::o;24604:208::-;888:12;:10;:12::i;:::-;877:23;;:7;:5;:7::i;:::-;:23;;;869:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24741:15:::1;;;;;;;;;;;24698:59;;24721:18;24698:59;;;;;;;;;;;;24786:18;24768:15;;:36;;;;;;;;;;;;;;;;;;24604:208:::0;:::o;2951:104::-;3007:13;3040:7;3033:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2951:104;:::o;23491:304::-;888:12;:10;:12::i;:::-;877:23;;:7;:5;:7::i;:::-;:23;;;869:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23635:13:::1;23627:21;;:4;:21;;;;23605:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;23746:41;23775:4;23781:5;23746:28;:41::i;:::-;23491:304:::0;;:::o;4657:413::-;4750:4;4767:24;4794:11;:25;4806:12;:10;:12::i;:::-;4794:25;;;;;;;;;;;;;;;:34;4820:7;4794:34;;;;;;;;;;;;;;;;4767:61;;4867:15;4847:16;:35;;4839:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;4960:67;4969:12;:10;:12::i;:::-;4983:7;5011:15;4992:16;:34;4960:8;:67::i;:::-;5058:4;5051:11;;;4657:413;;;;:::o;3415:175::-;3501:4;3518:42;3528:12;:10;:12::i;:::-;3542:9;3553:6;3518:9;:42::i;:::-;3578:4;3571:11;;3415:175;;;;:::o;16236:32::-;;;;:::o;16797:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;15794:33::-;;;;;;;;;;;;;:::o;23999:208::-;888:12;:10;:12::i;:::-;877:23;;:7;:5;:7::i;:::-;:23;;;869:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24136:15:::1;;;;;;;;;;;24093:59;;24116:18;24093:59;;;;;;;;;;;;24181:18;24163:15;;:36;;;;;;;;;;;;;;;;;;23999:208:::0;:::o;23301:182::-;888:12;:10;:12::i;:::-;877:23;;:7;:5;:7::i;:::-;:23;;;869:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23417:8:::1;23386:19;:28;23406:7;23386:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;23457:7;23441:34;;;23466:8;23441:34;;;;;;:::i;:::-;;;;;;;;23301:182:::0;;:::o;15529:32::-;;;;;;;;;;;;;:::o;15645:29::-;;;;:::o;24215:189::-;888:12;:10;:12::i;:::-;877:23;;:7;:5;:7::i;:::-;:23;;;869:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24338:17:::1;;;;;;;;;;;24302:54;;24327:9;24302:54;;;;;;;;;;;;24387:9;24367:17;;:29;;;;;;;;;;;;;;;;;;24215:189:::0;:::o;16000:39::-;;;;;;;;;;;;;:::o;20876:497::-;20984:4;888:12;:10;:12::i;:::-;877:23;;:7;:5;:7::i;:::-;:23;;;869:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21063:6:::1;21058:1;21042:13;:11;:13::i;:::-;:17;;;;:::i;:::-;21041:28;;;;:::i;:::-;21028:9;:41;;21006:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;21218:4;21213:1;21197:13;:11;:13::i;:::-;:17;;;;:::i;:::-;21196:26;;;;:::i;:::-;21183:9;:39;;21161:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;21334:9;21313:18;:30;;;;21361:4;21354:11;;20876:497:::0;;;:::o;15568:30::-;;;;;;;;;;;;;:::o;16128:27::-;;;;:::o;3598:151::-;3687:7;3714:11;:18;3726:5;3714:18;;;;;;;;;;;;;;;:27;3733:7;3714:27;;;;;;;;;;;;;;;;3707:34;;3598:151;;;;:::o;16731:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;15681:33::-;;;;:::o;16080:39::-;;;;;;;;;;;;;;;;;;;;;;:::o;22783:510::-;888:12;:10;:12::i;:::-;877:23;;:7;:5;:7::i;:::-;:23;;;869:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22994:13:::1;22975:16;:32;;;;23037:13;23018:16;:32;;;;23082:15;23061:18;:36;;;;23128:14;23108:17;:34;;;;23228:17;;23207:18;;23188:16;;23169;;:35;;;;:::i;:::-;:56;;;;:::i;:::-;:76;;;;:::i;:::-;23153:13;:92;;;;23281:2;23264:13;;:19;;23256:28;;;::::0;::::1;;22783:510:::0;;;;:::o;20671:135::-;20731:4;888:12;:10;:12::i;:::-;877:23;;:7;:5;:7::i;:::-;:23;;;869:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20771:5:::1;20748:20;;:28;;;;;;;;;;;;;;;;;;20794:4;20787:11;;20671:135:::0;:::o;16587:35::-;;;;:::o;16199:30::-;;;;:::o;1076:201::-;888:12;:10;:12::i;:::-;877:23;;:7;:5;:7::i;:::-;:23;;;869:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1185:1:::1;1165:22;;:8;:22;;;;1157:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;1241:28;1260:8;1241:18;:28::i;:::-;1076:201:::0;:::o;16388:31::-;;;;:::o;15721:24::-;;;;:::o;16629:34::-;;;;:::o;15605:31::-;;;;;;;;;;;;;:::o;288:98::-;341:7;368:10;361:17;;288:98;:::o;6825:380::-;6978:1;6961:19;;:5;:19;;;;6953:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7059:1;7040:21;;:7;:21;;;;7032:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7143:6;7113:11;:18;7125:5;7113:18;;;;;;;;;;;;;;;:27;7132:7;7113:27;;;;;;;;;;;;;;;:36;;;;7181:7;7165:32;;7174:5;7165:32;;;7190:6;7165:32;;;;;;:::i;:::-;;;;;;;;6825:380;;;:::o;25275:4925::-;25423:1;25407:18;;:4;:18;;;;25399:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25500:1;25486:16;;:2;:16;;;;25478:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;25562:7;:13;25570:4;25562:13;;;;;;;;;;;;;;;;;;;;;;;;;25561:14;25553:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;25621:1;25611:6;:11;25607:93;;;25639:28;25655:4;25661:2;25665:1;25639:15;:28::i;:::-;25682:7;;25607:93;25716:14;;;;;;;;;;;25712:2445;;;25777:7;:5;:7::i;:::-;25769:15;;:4;:15;;;;:49;;;;;25811:7;:5;:7::i;:::-;25805:13;;:2;:13;;;;25769:49;:86;;;;;25853:1;25839:16;;:2;:16;;;;25769:86;:128;;;;;25890:6;25876:21;;:2;:21;;;;25769:128;:158;;;;;25919:8;;;;;;;;;;;25918:9;25769:158;25747:2399;;;25967:13;;;;;;;;;;;25962:223;;26039:19;:25;26059:4;26039:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;26068:19;:23;26088:2;26068:23;;;;;;;;;;;;;;;;;;;;;;;;;26039:52;26005:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;25962:223;26341:20;;;;;;;;;;;26337:641;;;26422:7;:5;:7::i;:::-;26416:13;;:2;:13;;;;:72;;;;;26472:15;26458:30;;:2;:30;;;;26416:72;:129;;;;;26531:13;26517:28;;:2;:28;;;;26416:129;26386:573;;;26709:12;26634:28;:39;26663:9;26634:39;;;;;;;;;;;;;;;;:87;26596:258;;;;;;;;;;;;:::i;:::-;;;;;;;;;26923:12;26881:28;:39;26910:9;26881:39;;;;;;;;;;;;;;;:54;;;;26386:573;26337:641;27052:25;:31;27078:4;27052:31;;;;;;;;;;;;;;;;;;;;;;;;;:86;;;;;27109:25;:29;27135:2;27109:29;;;;;;;;;;;;;;;;;;;;;;;;;27108:30;27052:86;27026:1105;;;27225:14;;27215:6;:24;;27181:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;27421:9;;27404:13;27414:2;27404:9;:13::i;:::-;27395:6;:22;;;;:::i;:::-;:35;;27361:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;27026:1105;;;27599:25;:29;27625:2;27599:29;;;;;;;;;;;;;;;;;;;;;;;;;:86;;;;;27654:25;:31;27680:4;27654:31;;;;;;;;;;;;;;;;;;;;;;;;;27653:32;27599:86;27573:558;;;27772:14;;27762:6;:24;;27728:158;;;;;;;;;;;;:::i;:::-;;;;;;;;;27573:558;;;27917:25;:29;27943:2;27917:29;;;;;;;;;;;;;;;;;;;;;;;;;27912:219;;28031:9;;28014:13;28024:2;28014:9;:13::i;:::-;28005:6;:22;;;;:::i;:::-;:35;;27971:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;27912:219;27573:558;27026:1105;25747:2399;25712:2445;28169:28;28200:24;28218:4;28200:9;:24::i;:::-;28169:55;;28237:12;28276:18;;28252:20;:42;;28237:57;;28325:7;:35;;;;;28349:11;;;;;;;;;;;28325:35;:61;;;;;28378:8;;;;;;;;;;;28377:9;28325:61;:110;;;;;28404:25;:31;28430:4;28404:31;;;;;;;;;;;;;;;;;;;;;;;;;28403:32;28325:110;:153;;;;;28453:19;:25;28473:4;28453:25;;;;;;;;;;;;;;;;;;;;;;;;;28452:26;28325:153;:194;;;;;28496:19;:23;28516:2;28496:23;;;;;;;;;;;;;;;;;;;;;;;;;28495:24;28325:194;28307:326;;;28557:4;28546:8;;:15;;;;;;;;;;;;;;;;;;28578:10;:8;:10::i;:::-;28616:5;28605:8;;:16;;;;;;;;;;;;;;;;;;28307:326;28645:12;28661:8;;;;;;;;;;;28660:9;28645:24;;28771:19;:25;28791:4;28771:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;28800:19;:23;28820:2;28800:23;;;;;;;;;;;;;;;;;;;;;;;;;28771:52;28767:100;;;28850:5;28840:15;;28767:100;28879:12;28984:7;28980:1167;;;29036:25;:29;29062:2;29036:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;29085:1;29069:13;;:17;29036:50;29032:966;;;29114:34;29144:3;29114:25;29125:13;;29114:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;29107:41;;29217:13;;29197:16;;29190:4;:23;;;;:::i;:::-;29189:41;;;;:::i;:::-;29167:18;;:63;;;;;;;:::i;:::-;;;;;;;;29303:13;;29281:18;;29274:4;:25;;;;:::i;:::-;29273:43;;;;:::i;:::-;29249:20;;:67;;;;;;;:::i;:::-;;;;;;;;29385:13;;29365:16;;29358:4;:23;;;;:::i;:::-;29357:41;;;;:::i;:::-;29335:18;;:63;;;;;;;:::i;:::-;;;;;;;;29469:13;;29448:17;;29441:4;:24;;;;:::i;:::-;29440:42;;;;:::i;:::-;29417:19;;:65;;;;;;;:::i;:::-;;;;;;;;29032:966;;;29544:25;:31;29570:4;29544:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;29594:1;29579:12;;:16;29544:51;29540:458;;;29623:33;29652:3;29623:24;29634:12;;29623:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;29616:40;;29724:12;;29705:15;;29698:4;:22;;;;:::i;:::-;29697:39;;;;:::i;:::-;29675:18;;:61;;;;;;;:::i;:::-;;;;;;;;29808:12;;29787:17;;29780:4;:24;;;;:::i;:::-;29779:41;;;;:::i;:::-;29755:20;;:65;;;;;;;:::i;:::-;;;;;;;;29888:12;;29869:15;;29862:4;:22;;;;:::i;:::-;29861:39;;;;:::i;:::-;29839:18;;:61;;;;;;;:::i;:::-;;;;;;;;29970:12;;29950:16;;29943:4;:23;;;;:::i;:::-;29942:40;;;;:::i;:::-;29919:19;;:63;;;;;;;:::i;:::-;;;;;;;;29540:458;29032:966;30025:1;30018:4;:8;30014:91;;;30047:42;30063:4;30077;30084;30047:15;:42::i;:::-;30014:91;30131:4;30121:14;;;;;:::i;:::-;;;28980:1167;30159:33;30175:4;30181:2;30185:6;30159:15;:33::i;:::-;25388:4812;;;;25275:4925;;;;:::o;1285:191::-;1359:16;1378:6;;;;;;;;;;;1359:25;;1404:8;1395:6;;:17;;;;;;;;;;;;;;;;;;1459:8;1428:40;;1449:8;1428:40;;;;;;;;;;;;1348:128;1285:191;:::o;23803:188::-;23920:5;23886:25;:31;23912:4;23886:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;23977:5;23943:40;;23971:4;23943:40;;;;;;;;;;;;23803:188;;:::o;5078:733::-;5236:1;5218:20;;:6;:20;;;;5210:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;5320:1;5299:23;;:9;:23;;;;5291:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;5375:47;5396:6;5404:9;5415:6;5375:20;:47::i;:::-;5435:21;5459:9;:17;5469:6;5459:17;;;;;;;;;;;;;;;;5435:41;;5512:6;5495:13;:23;;5487:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;5633:6;5617:13;:22;5597:9;:17;5607:6;5597:17;;;;;;;;;;;;;;;:42;;;;5685:6;5661:9;:20;5671:9;5661:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;5726:9;5709:35;;5718:6;5709:35;;;5737:6;5709:35;;;;;;:::i;:::-;;;;;;;;5757:46;5777:6;5785:9;5796:6;5757:19;:46::i;:::-;5199:612;5078:733;;;:::o;31728:2004::-;31767:23;31793:24;31811:4;31793:9;:24::i;:::-;31767:50;;31828:25;31960:19;;31924:20;;31890:18;;31856;;:52;;;;:::i;:::-;:88;;;;:::i;:::-;:123;;;;:::i;:::-;31828:151;;31990:12;32038:1;32019:15;:20;:46;;;;32064:1;32043:17;:22;32019:46;32015:85;;;32082:7;;;;;32015:85;32155:2;32134:18;;:23;;;;:::i;:::-;32116:15;:41;32112:115;;;32213:2;32192:18;;:23;;;;:::i;:::-;32174:41;;32112:115;32288:23;32375:1;32355:17;32333:18;;32315:15;:36;;;;:::i;:::-;32314:58;;;;:::i;:::-;:62;;;;:::i;:::-;32288:88;;32387:26;32416:36;32436:15;32416;:19;;:36;;;;:::i;:::-;32387:65;;32465:25;32493:21;32465:49;;32527:36;32544:18;32527:16;:36::i;:::-;32576:18;32597:44;32623:17;32597:21;:25;;:44;;;;:::i;:::-;32576:65;;32654:23;32680:57;32719:17;32680:34;32695:18;;32680:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;32654:83;;32748:25;32776:59;32817:17;32776:36;32791:20;;32776:10;:14;;:36;;;;:::i;:::-;:40;;:59;;;;:::i;:::-;32748:87;;32846:24;32873:58;32913:17;32873:35;32888:19;;32873:10;:14;;:35;;;;:::i;:::-;:39;;:58;;;;:::i;:::-;32846:85;;32944:23;33021:16;33001:17;32983:15;32970:10;:28;;;;:::i;:::-;:48;;;;:::i;:::-;:67;;;;:::i;:::-;32944:93;;33071:1;33050:18;:22;;;;33104:1;33083:18;:22;;;;33139:1;33116:20;:24;;;;33173:1;33151:19;:23;;;;33209:17;;;;;;;;;;;33201:31;;33240:17;33201:61;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33187:75;;;;;33297:1;33279:15;:19;:42;;;;;33320:1;33302:15;:19;33279:42;33275:278;;;33338:46;33351:15;33368;33338:12;:46::i;:::-;33404:137;33437:18;33474:15;33508:18;;33404:137;;;;;;;;:::i;:::-;;;;;;;;33275:278;33585:16;;;;;;;;;;;33577:30;;33615:16;33577:59;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33563:73;;;;;33669:15;;;;;;;;;;;33661:29;;33698:21;33661:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33647:77;;;;;31756:1976;;;;;;;;;;;31728:2004;:::o;8831:98::-;8889:7;8920:1;8916;:5;;;;:::i;:::-;8909:12;;8831:98;;;;:::o;8937:::-;8995:7;9026:1;9022;:5;;;;:::i;:::-;9015:12;;8937:98;;;;:::o;7213:125::-;;;;:::o;7346:124::-;;;;:::o;8725:98::-;8783:7;8814:1;8810;:5;;;;:::i;:::-;8803:12;;8725:98;;;;:::o;30208:589::-;30334:21;30372:1;30358:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30334:40;;30403:4;30385;30390:1;30385:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;30429:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30419:4;30424:1;30419:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;30464:62;30481:4;30496:15;30514:11;30464:8;:62::i;:::-;30565:15;:66;;;30646:11;30672:1;30716:4;30743;30763:15;30565:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30263:534;30208:589;:::o;30805:521::-;30953:62;30970:4;30985:15;31003:11;30953:8;:62::i;:::-;31058:15;:31;;;31097:9;31130:4;31150:11;31176:1;31219;31262:15;;;;;;;;;;;31292;31058:260;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;30805: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;9614:568::-;9687:8;9697:6;9747:3;9740:4;9732:6;9728:17;9724:27;9714:122;;9755:79;;:::i;:::-;9714:122;9868:6;9855:20;9845:30;;9898:18;9890:6;9887:30;9884:117;;;9920:79;;:::i;:::-;9884:117;10034:4;10026:6;10022:17;10010:29;;10088:3;10080:4;10072:6;10068:17;10058:8;10054:32;10051:41;10048:128;;;10095:79;;:::i;:::-;10048:128;9614:568;;;;;:::o;10188:934::-;10310:6;10318;10326;10334;10383:2;10371:9;10362:7;10358:23;10354:32;10351:119;;;10389:79;;:::i;:::-;10351:119;10537:1;10526:9;10522:17;10509:31;10567:18;10559:6;10556:30;10553:117;;;10589:79;;:::i;:::-;10553:117;10702:80;10774:7;10765:6;10754:9;10750:22;10702:80;:::i;:::-;10684:98;;;;10480:312;10859:2;10848:9;10844:18;10831:32;10890:18;10882:6;10879:30;10876:117;;;10912:79;;:::i;:::-;10876:117;11025:80;11097:7;11088:6;11077:9;11073:22;11025:80;:::i;:::-;11007:98;;;;10802:313;10188:934;;;;;;;:::o;11128:468::-;11193:6;11201;11250:2;11238:9;11229:7;11225:23;11221:32;11218:119;;;11256:79;;:::i;:::-;11218:119;11376:1;11401:53;11446:7;11437:6;11426:9;11422:22;11401:53;:::i;:::-;11391:63;;11347:117;11503:2;11529:50;11571:7;11562:6;11551:9;11547:22;11529:50;:::i;:::-;11519:60;;11474:115;11128:468;;;;;:::o;11602:323::-;11658:6;11707:2;11695:9;11686:7;11682:23;11678:32;11675:119;;;11713:79;;:::i;:::-;11675:119;11833:1;11858:50;11900:7;11891:6;11880:9;11876:22;11858:50;:::i;:::-;11848:60;;11804:114;11602:323;;;;:::o;11931:474::-;11999:6;12007;12056:2;12044:9;12035:7;12031:23;12027:32;12024:119;;;12062:79;;:::i;:::-;12024:119;12182:1;12207:53;12252:7;12243:6;12232:9;12228:22;12207:53;:::i;:::-;12197:63;;12153:117;12309:2;12335:53;12380:7;12371:6;12360:9;12356:22;12335:53;:::i;:::-;12325:63;;12280:118;11931:474;;;;;:::o;12411:182::-;12551:34;12547:1;12539:6;12535:14;12528:58;12411:182;:::o;12599:366::-;12741:3;12762:67;12826:2;12821:3;12762:67;:::i;:::-;12755:74;;12838:93;12927:3;12838:93;:::i;:::-;12956:2;12951:3;12947:12;12940:19;;12599:366;;;:::o;12971:419::-;13137:4;13175:2;13164:9;13160:18;13152:26;;13224:9;13218:4;13214:20;13210:1;13199:9;13195:17;13188:47;13252:131;13378:4;13252:131;:::i;:::-;13244:139;;12971:419;;;:::o;13396:180::-;13444:77;13441:1;13434:88;13541:4;13538:1;13531:15;13565:4;13562:1;13555:15;13582:348;13622:7;13645:20;13663:1;13645:20;:::i;:::-;13640:25;;13679:20;13697:1;13679:20;:::i;:::-;13674:25;;13867:1;13799:66;13795:74;13792:1;13789:81;13784:1;13777:9;13770:17;13766:105;13763:131;;;13874:18;;:::i;:::-;13763:131;13922:1;13919;13915:9;13904:20;;13582:348;;;;:::o;13936:180::-;13984:77;13981:1;13974:88;14081:4;14078:1;14071:15;14105:4;14102:1;14095:15;14122:185;14162:1;14179:20;14197:1;14179:20;:::i;:::-;14174:25;;14213:20;14231:1;14213:20;:::i;:::-;14208:25;;14252:1;14242:35;;14257:18;;:::i;:::-;14242:35;14299:1;14296;14292:9;14287:14;;14122:185;;;;:::o;14313:228::-;14453:34;14449:1;14441:6;14437:14;14430:58;14522:11;14517:2;14509:6;14505:15;14498:36;14313:228;:::o;14547:366::-;14689:3;14710:67;14774:2;14769:3;14710:67;:::i;:::-;14703:74;;14786:93;14875:3;14786:93;:::i;:::-;14904:2;14899:3;14895:12;14888:19;;14547:366;;;:::o;14919:419::-;15085:4;15123:2;15112:9;15108:18;15100:26;;15172:9;15166:4;15162:20;15158:1;15147:9;15143:17;15136:47;15200:131;15326:4;15200:131;:::i;:::-;15192:139;;14919:419;;;:::o;15344:180::-;15392:77;15389:1;15382:88;15489:4;15486:1;15479:15;15513:4;15510:1;15503:15;15530:320;15574:6;15611:1;15605:4;15601:12;15591:22;;15658:1;15652:4;15648:12;15679:18;15669:81;;15735:4;15727:6;15723:17;15713:27;;15669:81;15797:2;15789:6;15786:14;15766:18;15763:38;15760:84;;;15816:18;;:::i;:::-;15760:84;15581:269;15530:320;;;:::o;15856:223::-;15996:34;15992:1;15984:6;15980:14;15973:58;16065:6;16060:2;16052:6;16048:15;16041:31;15856:223;:::o;16085:366::-;16227:3;16248:67;16312:2;16307:3;16248:67;:::i;:::-;16241:74;;16324:93;16413:3;16324:93;:::i;:::-;16442:2;16437:3;16433:12;16426:19;;16085:366;;;:::o;16457:419::-;16623:4;16661:2;16650:9;16646:18;16638:26;;16710:9;16704:4;16700:20;16696:1;16685:9;16681:17;16674:47;16738:131;16864:4;16738:131;:::i;:::-;16730:139;;16457:419;;;:::o;16882:227::-;17022:34;17018:1;17010:6;17006:14;16999:58;17091:10;17086:2;17078:6;17074:15;17067:35;16882:227;:::o;17115:366::-;17257:3;17278:67;17342:2;17337:3;17278:67;:::i;:::-;17271:74;;17354:93;17443:3;17354:93;:::i;:::-;17472:2;17467:3;17463:12;17456:19;;17115:366;;;:::o;17487:419::-;17653:4;17691:2;17680:9;17676:18;17668:26;;17740:9;17734:4;17730:20;17726:1;17715:9;17711:17;17704:47;17768:131;17894:4;17768:131;:::i;:::-;17760:139;;17487:419;;;:::o;17912:180::-;17960:77;17957:1;17950:88;18057:4;18054:1;18047:15;18081:4;18078:1;18071:15;18098:233;18137:3;18160:24;18178:5;18160:24;:::i;:::-;18151:33;;18206:66;18199:5;18196:77;18193:103;;;18276:18;;:::i;:::-;18193:103;18323:1;18316:5;18312:13;18305:20;;18098:233;;;:::o;18337:305::-;18377:3;18396:20;18414:1;18396:20;:::i;:::-;18391:25;;18430:20;18448:1;18430:20;:::i;:::-;18425:25;;18584:1;18516:66;18512:74;18509:1;18506:81;18503:107;;;18590:18;;:::i;:::-;18503:107;18634:1;18631;18627:9;18620:16;;18337:305;;;;:::o;18648:164::-;18788:16;18784:1;18776:6;18772:14;18765:40;18648:164;:::o;18818:366::-;18960:3;18981:67;19045:2;19040:3;18981:67;:::i;:::-;18974:74;;19057:93;19146:3;19057:93;:::i;:::-;19175:2;19170:3;19166:12;19159:19;;18818:366;;;:::o;19190:419::-;19356:4;19394:2;19383:9;19379:18;19371:26;;19443:9;19437:4;19433:20;19429:1;19418:9;19414:17;19407:47;19471:131;19597:4;19471:131;:::i;:::-;19463:139;;19190:419;;;:::o;19615:244::-;19755:34;19751:1;19743:6;19739:14;19732:58;19824:27;19819:2;19811:6;19807:15;19800:52;19615:244;:::o;19865:366::-;20007:3;20028:67;20092:2;20087:3;20028:67;:::i;:::-;20021:74;;20104:93;20193:3;20104:93;:::i;:::-;20222:2;20217:3;20213:12;20206:19;;19865:366;;;:::o;20237:419::-;20403:4;20441:2;20430:9;20426:18;20418:26;;20490:9;20484:4;20480:20;20476:1;20465:9;20461:17;20454:47;20518:131;20644:4;20518:131;:::i;:::-;20510:139;;20237:419;;;:::o;20662:224::-;20802:34;20798:1;20790:6;20786:14;20779:58;20871:7;20866:2;20858:6;20854:15;20847:32;20662:224;:::o;20892:366::-;21034:3;21055:67;21119:2;21114:3;21055:67;:::i;:::-;21048:74;;21131:93;21220:3;21131:93;:::i;:::-;21249:2;21244:3;21240:12;21233:19;;20892:366;;;:::o;21264:419::-;21430:4;21468:2;21457:9;21453:18;21445:26;;21517:9;21511:4;21507:20;21503:1;21492:9;21488:17;21481:47;21545:131;21671:4;21545:131;:::i;:::-;21537:139;;21264:419;;;:::o;21689:240::-;21829:34;21825:1;21817:6;21813:14;21806:58;21898:23;21893:2;21885:6;21881:15;21874:48;21689:240;:::o;21935:366::-;22077:3;22098:67;22162:2;22157:3;22098:67;:::i;:::-;22091:74;;22174:93;22263:3;22174:93;:::i;:::-;22292:2;22287:3;22283:12;22276:19;;21935:366;;;:::o;22307:419::-;22473:4;22511:2;22500:9;22496:18;22488:26;;22560:9;22554:4;22550:20;22546:1;22535:9;22531:17;22524:47;22588:131;22714:4;22588:131;:::i;:::-;22580:139;;22307:419;;;:::o;22732:239::-;22872:34;22868:1;22860:6;22856:14;22849:58;22941:22;22936:2;22928:6;22924:15;22917:47;22732:239;:::o;22977:366::-;23119:3;23140:67;23204:2;23199:3;23140:67;:::i;:::-;23133:74;;23216:93;23305:3;23216:93;:::i;:::-;23334:2;23329:3;23325:12;23318:19;;22977:366;;;:::o;23349:419::-;23515:4;23553:2;23542:9;23538:18;23530:26;;23602:9;23596:4;23592:20;23588:1;23577:9;23573:17;23566:47;23630:131;23756:4;23630:131;:::i;:::-;23622:139;;23349:419;;;:::o;23774:225::-;23914:34;23910:1;23902:6;23898:14;23891:58;23983:8;23978:2;23970:6;23966:15;23959:33;23774:225;:::o;24005:366::-;24147:3;24168:67;24232:2;24227:3;24168:67;:::i;:::-;24161:74;;24244:93;24333:3;24244:93;:::i;:::-;24362:2;24357:3;24353:12;24346:19;;24005:366;;;:::o;24377:419::-;24543:4;24581:2;24570:9;24566:18;24558:26;;24630:9;24624:4;24620:20;24616:1;24605:9;24601:17;24594:47;24658:131;24784:4;24658:131;:::i;:::-;24650:139;;24377:419;;;:::o;24802:223::-;24942:34;24938:1;24930:6;24926:14;24919:58;25011:6;25006:2;24998:6;24994:15;24987:31;24802:223;:::o;25031:366::-;25173:3;25194:67;25258:2;25253:3;25194:67;:::i;:::-;25187:74;;25270:93;25359:3;25270:93;:::i;:::-;25388:2;25383:3;25379:12;25372:19;;25031:366;;;:::o;25403:419::-;25569:4;25607:2;25596:9;25592:18;25584:26;;25656:9;25650:4;25646:20;25642:1;25631:9;25627:17;25620:47;25684:131;25810:4;25684:131;:::i;:::-;25676:139;;25403:419;;;:::o;25828:221::-;25968:34;25964:1;25956:6;25952:14;25945:58;26037:4;26032:2;26024:6;26020:15;26013:29;25828:221;:::o;26055:366::-;26197:3;26218:67;26282:2;26277:3;26218:67;:::i;:::-;26211:74;;26294:93;26383:3;26294:93;:::i;:::-;26412:2;26407:3;26403:12;26396:19;;26055:366;;;:::o;26427:419::-;26593:4;26631:2;26620:9;26616:18;26608:26;;26680:9;26674:4;26670:20;26666:1;26655:9;26651:17;26644:47;26708:131;26834:4;26708:131;:::i;:::-;26700:139;;26427:419;;;:::o;26852:224::-;26992:34;26988:1;26980:6;26976:14;26969:58;27061:7;27056:2;27048:6;27044:15;27037:32;26852:224;:::o;27082:366::-;27224:3;27245:67;27309:2;27304:3;27245:67;:::i;:::-;27238:74;;27321:93;27410:3;27321:93;:::i;:::-;27439:2;27434:3;27430:12;27423:19;;27082:366;;;:::o;27454:419::-;27620:4;27658:2;27647:9;27643:18;27635:26;;27707:9;27701:4;27697:20;27693:1;27682:9;27678:17;27671:47;27735:131;27861:4;27735:131;:::i;:::-;27727:139;;27454:419;;;:::o;27879:222::-;28019:34;28015:1;28007:6;28003:14;27996:58;28088:5;28083:2;28075:6;28071:15;28064:30;27879:222;:::o;28107:366::-;28249:3;28270:67;28334:2;28329:3;28270:67;:::i;:::-;28263:74;;28346:93;28435:3;28346:93;:::i;:::-;28464:2;28459:3;28455:12;28448:19;;28107:366;;;:::o;28479:419::-;28645:4;28683:2;28672:9;28668:18;28660:26;;28732:9;28726:4;28722:20;28718:1;28707:9;28703:17;28696:47;28760:131;28886:4;28760:131;:::i;:::-;28752:139;;28479:419;;;:::o;28904:164::-;29044:16;29040:1;29032:6;29028:14;29021:40;28904:164;:::o;29074:366::-;29216:3;29237:67;29301:2;29296:3;29237:67;:::i;:::-;29230:74;;29313:93;29402:3;29313:93;:::i;:::-;29431:2;29426:3;29422:12;29415:19;;29074:366;;;:::o;29446:419::-;29612:4;29650:2;29639:9;29635:18;29627:26;;29699:9;29693:4;29689:20;29685:1;29674:9;29670:17;29663:47;29727:131;29853:4;29727:131;:::i;:::-;29719:139;;29446:419;;;:::o;29871:172::-;30011:24;30007:1;29999:6;29995:14;29988:48;29871:172;:::o;30049:366::-;30191:3;30212:67;30276:2;30271:3;30212:67;:::i;:::-;30205:74;;30288:93;30377:3;30288:93;:::i;:::-;30406:2;30401:3;30397:12;30390:19;;30049:366;;;:::o;30421:419::-;30587:4;30625:2;30614:9;30610:18;30602:26;;30674:9;30668:4;30664:20;30660:1;30649:9;30645:17;30638:47;30702:131;30828:4;30702:131;:::i;:::-;30694:139;;30421:419;;;:::o;30846:297::-;30986:34;30982:1;30974:6;30970:14;30963:58;31055:34;31050:2;31042:6;31038:15;31031:59;31124:11;31119:2;31111:6;31107:15;31100:36;30846:297;:::o;31149:366::-;31291:3;31312:67;31376:2;31371:3;31312:67;:::i;:::-;31305:74;;31388:93;31477:3;31388:93;:::i;:::-;31506:2;31501:3;31497:12;31490:19;;31149:366;;;:::o;31521:419::-;31687:4;31725:2;31714:9;31710:18;31702:26;;31774:9;31768:4;31764:20;31760:1;31749:9;31745:17;31738:47;31802:131;31928:4;31802:131;:::i;:::-;31794:139;;31521:419;;;:::o;31946:234::-;32086:34;32082:1;32074:6;32070:14;32063:58;32155:17;32150:2;32142:6;32138:15;32131:42;31946:234;:::o;32186:366::-;32328:3;32349:67;32413:2;32408:3;32349:67;:::i;:::-;32342:74;;32425:93;32514:3;32425:93;:::i;:::-;32543:2;32538:3;32534:12;32527:19;;32186:366;;;:::o;32558:419::-;32724:4;32762:2;32751:9;32747:18;32739:26;;32811:9;32805:4;32801:20;32797:1;32786:9;32782:17;32775:47;32839:131;32965:4;32839:131;:::i;:::-;32831:139;;32558:419;;;:::o;32983:169::-;33123:21;33119:1;33111:6;33107:14;33100:45;32983:169;:::o;33158:366::-;33300:3;33321:67;33385:2;33380:3;33321:67;:::i;:::-;33314:74;;33397:93;33486:3;33397:93;:::i;:::-;33515:2;33510:3;33506:12;33499:19;;33158:366;;;:::o;33530:419::-;33696:4;33734:2;33723:9;33719:18;33711:26;;33783:9;33777:4;33773:20;33769:1;33758:9;33754:17;33747:47;33811:131;33937:4;33811:131;:::i;:::-;33803:139;;33530:419;;;:::o;33955:235::-;34095:34;34091:1;34083:6;34079:14;34072:58;34164:18;34159:2;34151:6;34147:15;34140:43;33955:235;:::o;34196:366::-;34338:3;34359:67;34423:2;34418:3;34359:67;:::i;:::-;34352:74;;34435:93;34524:3;34435:93;:::i;:::-;34553:2;34548:3;34544:12;34537:19;;34196:366;;;:::o;34568:419::-;34734:4;34772:2;34761:9;34757:18;34749:26;;34821:9;34815:4;34811:20;34807:1;34796:9;34792:17;34785:47;34849:131;34975:4;34849:131;:::i;:::-;34841:139;;34568:419;;;:::o;34993:191::-;35033:4;35053:20;35071:1;35053:20;:::i;:::-;35048:25;;35087:20;35105:1;35087:20;:::i;:::-;35082:25;;35126:1;35123;35120:8;35117:34;;;35131:18;;:::i;:::-;35117:34;35176:1;35173;35169:9;35161:17;;34993:191;;;;:::o;35190:225::-;35330:34;35326:1;35318:6;35314:14;35307:58;35399:8;35394:2;35386:6;35382:15;35375:33;35190:225;:::o;35421:366::-;35563:3;35584:67;35648:2;35643:3;35584:67;:::i;:::-;35577:74;;35660:93;35749:3;35660:93;:::i;:::-;35778:2;35773:3;35769:12;35762:19;;35421:366;;;:::o;35793:419::-;35959:4;35997:2;35986:9;35982:18;35974:26;;36046:9;36040:4;36036:20;36032:1;36021:9;36017:17;36010:47;36074:131;36200:4;36074:131;:::i;:::-;36066:139;;35793:419;;;:::o;36218:147::-;36319:11;36356:3;36341:18;;36218:147;;;;:::o;36371:114::-;;:::o;36491:398::-;36650:3;36671:83;36752:1;36747:3;36671:83;:::i;:::-;36664:90;;36763:93;36852:3;36763:93;:::i;:::-;36881:1;36876:3;36872:11;36865:18;;36491:398;;;:::o;36895:379::-;37079:3;37101:147;37244:3;37101:147;:::i;:::-;37094:154;;37265:3;37258:10;;36895:379;;;:::o;37280:442::-;37429:4;37467:2;37456:9;37452:18;37444:26;;37480:71;37548:1;37537:9;37533:17;37524:6;37480:71;:::i;:::-;37561:72;37629:2;37618:9;37614:18;37605:6;37561:72;:::i;:::-;37643;37711:2;37700:9;37696:18;37687:6;37643:72;:::i;:::-;37280:442;;;;;;:::o;37728:180::-;37776:77;37773:1;37766:88;37873:4;37870:1;37863:15;37897:4;37894:1;37887:15;37914:143;37971:5;38002:6;37996:13;37987:22;;38018:33;38045:5;38018:33;:::i;:::-;37914:143;;;;:::o;38063:351::-;38133:6;38182:2;38170:9;38161:7;38157:23;38153:32;38150:119;;;38188:79;;:::i;:::-;38150:119;38308:1;38333:64;38389:7;38380:6;38369:9;38365:22;38333:64;:::i;:::-;38323:74;;38279:128;38063:351;;;;:::o;38420:85::-;38465:7;38494:5;38483:16;;38420:85;;;:::o;38511:158::-;38569:9;38602:61;38620:42;38629:32;38655:5;38629:32;:::i;:::-;38620:42;:::i;:::-;38602:61;:::i;:::-;38589:74;;38511:158;;;:::o;38675:147::-;38770:45;38809:5;38770:45;:::i;:::-;38765:3;38758:58;38675:147;;:::o;38828:114::-;38895:6;38929:5;38923:12;38913:22;;38828:114;;;:::o;38948:184::-;39047:11;39081:6;39076:3;39069:19;39121:4;39116:3;39112:14;39097:29;;38948:184;;;;:::o;39138:132::-;39205:4;39228:3;39220:11;;39258:4;39253:3;39249:14;39241:22;;39138:132;;;:::o;39276:108::-;39353:24;39371:5;39353:24;:::i;:::-;39348:3;39341:37;39276:108;;:::o;39390:179::-;39459:10;39480:46;39522:3;39514:6;39480:46;:::i;:::-;39558:4;39553:3;39549:14;39535:28;;39390:179;;;;:::o;39575:113::-;39645:4;39677;39672:3;39668:14;39660:22;;39575:113;;;:::o;39724:732::-;39843:3;39872:54;39920:5;39872:54;:::i;:::-;39942:86;40021:6;40016:3;39942:86;:::i;:::-;39935:93;;40052:56;40102:5;40052:56;:::i;:::-;40131:7;40162:1;40147:284;40172:6;40169:1;40166:13;40147:284;;;40248:6;40242:13;40275:63;40334:3;40319:13;40275:63;:::i;:::-;40268:70;;40361:60;40414:6;40361:60;:::i;:::-;40351:70;;40207:224;40194:1;40191;40187:9;40182:14;;40147:284;;;40151:14;40447:3;40440:10;;39848:608;;;39724:732;;;;:::o;40462:831::-;40725:4;40763:3;40752:9;40748:19;40740:27;;40777:71;40845:1;40834:9;40830:17;40821:6;40777:71;:::i;:::-;40858:80;40934:2;40923:9;40919:18;40910:6;40858:80;:::i;:::-;40985:9;40979:4;40975:20;40970:2;40959:9;40955:18;40948:48;41013:108;41116:4;41107:6;41013:108;:::i;:::-;41005:116;;41131:72;41199:2;41188:9;41184:18;41175:6;41131:72;:::i;:::-;41213:73;41281:3;41270:9;41266:19;41257:6;41213:73;:::i;:::-;40462:831;;;;;;;;:::o;41299:807::-;41548:4;41586:3;41575:9;41571:19;41563:27;;41600:71;41668:1;41657:9;41653:17;41644:6;41600:71;:::i;:::-;41681:72;41749:2;41738:9;41734:18;41725:6;41681:72;:::i;:::-;41763:80;41839:2;41828:9;41824:18;41815:6;41763:80;:::i;:::-;41853;41929:2;41918:9;41914:18;41905:6;41853:80;:::i;:::-;41943:73;42011:3;42000:9;41996:19;41987:6;41943:73;:::i;:::-;42026;42094:3;42083:9;42079:19;42070:6;42026:73;:::i;:::-;41299:807;;;;;;;;;:::o;42112:143::-;42169:5;42200:6;42194:13;42185:22;;42216:33;42243:5;42216:33;:::i;:::-;42112:143;;;;:::o;42261:663::-;42349:6;42357;42365;42414:2;42402:9;42393:7;42389:23;42385:32;42382:119;;;42420:79;;:::i;:::-;42382:119;42540:1;42565:64;42621:7;42612:6;42601:9;42597:22;42565:64;:::i;:::-;42555:74;;42511:128;42678:2;42704:64;42760:7;42751:6;42740:9;42736:22;42704:64;:::i;:::-;42694:74;;42649:129;42817:2;42843:64;42899:7;42890:6;42879:9;42875:22;42843:64;:::i;:::-;42833:74;;42788:129;42261:663;;;;;:::o

Swarm Source

ipfs://a6f3bee81bd4bf0a8f7dfedf9b4daa4fe06d88b3cea0dfd736b2715223de49f3
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.