ETH Price: $3,452.59 (-1.14%)
Gas: 12 Gwei

Token

BitRunes (BRUNE)
 

Overview

Max Total Supply

21,000,000,000 BRUNE

Holders

732

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
1inch Network : Aggregation Router V6
Balance
0 BRUNE

Value
$0.00
0x111111125421ca6dc452d289314280a0f8842a65
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
BitRunes

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 Etherscan.io on 2024-04-18
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.10;

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

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

abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

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

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

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB)
        external
        view
        returns (address pair);

    function allPairs(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

    function createPair(address tokenA, address tokenB)
        external
        returns (address pair);

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

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

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

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

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

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

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

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

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

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

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

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

    bool private swapping;

    address public mktgWallet;
    address public dvlpmntWallet;

    uint256 public maxTransactionAllowed;
    uint256 public swapTokensAtAmount;
    uint256 public maximumWalletAllowed;

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

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

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

    uint256 public tokensForMarketing;
    uint256 public tokensForDev;

    mapping(address => bool) private _isBlackList;
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedmaxTransactionAllowed;

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

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

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

        uint256 _buyMarketingFee = 15;
        uint256 _buyDevFee = 10;

        uint256 _sellMarketingFee = 30;
        uint256 _sellDevFee = 20;

        uint256 totalSupply = 21_000_000_000 * 1e18;

        maxTransactionAllowed = 210_000_000 * 1e18; // 1% from total supply maxTransactionAllowedTxn
        maximumWalletAllowed = 210_000_000 * 1e18; // 1% from total supply maximumWalletAllowed
        swapTokensAtAmount = (totalSupply * 5) / 40000; // 0.05% swap wallet

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

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

        mktgWallet = address(0x1dA9BBa5FAEaD497950bA2ddCEc059cF507a8441);
        dvlpmntWallet = address(0x27EB24B4b87393F59c60Fc9Cda6038A3017e9B4e);

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

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

        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

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

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

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

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

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

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

        tradingActive = true;
        swapEnabled = true;
    }

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

    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = 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 updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 1) / 1000) / 1e18,
            "Cannot set maxTransactionAllowed lower than 0.1%"
        );
        maxTransactionAllowed = newNum * (10**18);
    }

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

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

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

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

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

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

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

        _setAutomatedMarketMakerPair(pair, value);
    }

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

    function updatemktgWallet(address newmktgWallet) external onlyOwner {
        emit mktgWalletUpdated(newmktgWallet, mktgWallet);
        mktgWallet = newmktgWallet;
    }

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

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

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

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

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

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

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

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

            swapping = true;
            swapBack();
            swapping = false;
        }

        bool takeFee = !swapping;

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

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

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

            amount -= fees;
        }

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

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

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

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

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

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

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

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

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

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

        tokensForMarketing = 0;
        tokensForDev = 0;

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"dvlpmntWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"mktgWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedmaxTransactionAllowed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"antiDrainer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dvlpmntWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"enableTradingWithPermit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFrommaxTransactionAllowed","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":"maxTransactionAllowed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maximumWalletAllowed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mktgWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_antiDrainer","type":"address"}],"name":"setAntiDrainer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"bool","name":"blocked","type":"bool"}],"name":"setBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updatedvlpmntWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updatemaximumWalletAllowedAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newmktgWallet","type":"address"}],"name":"updatemktgWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526001600e60006101000a81548160ff0219169083151502179055506000600e60016101000a81548160ff0219169083151502179055506000600e60026101000a81548160ff0219169083151502179055503480156200006257600080fd5b506040518060400160405280600881526020017f42697452756e65730000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f4252554e450000000000000000000000000000000000000000000000000000008152508160039080519060200190620000e792919062000bd7565b5080600490805190602001906200010092919062000bd7565b50505062000123620001176200069760201b60201c565b6200069f60201b60201c565b6001461480620001335750600546145b156200019457737a250d5630b4cf539739df2c5dacb4c659f2488d600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620001f7565b62aa36a7461415620001f65773c532a74256d3db42d0bf7a0400fefdbad7694008600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000265573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200028b919062000cf1565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000315573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033b919062000cf1565b6040518363ffffffff1660e01b81526004016200035a92919062000d34565b6020604051808303816000875af11580156200037a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003a0919062000cf1565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000415600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200076560201b60201c565b6200044a600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200076560201b60201c565b6200047f600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200084f60201b60201c565b6000600f90506000600a90506000601e905060006014905060006b43dacaf91c1a84ff0800000090506aadb53acfa41aee12000000600b819055506aadb53acfa41aee12000000600d81905550619c40600582620004de919062000d9a565b620004ea919062000e2a565b600c81905550846010819055508360118190555060115460105462000510919062000e62565b600f81905550826013819055508160148190555060145460135462000536919062000e62565b601281905550731da9bba5faead497950ba2ddcec059cf507a8441600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507327eb24b4b87393f59c60fc9cda6038a3017e9b4e600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000608620005fa620008f060201b60201c565b60016200091a60201b60201c565b6200061b3060016200091a60201b60201c565b6200063061dead60016200091a60201b60201c565b6200065262000644620008f060201b60201c565b60016200076560201b60201c565b620006653060016200076560201b60201c565b6200067a61dead60016200076560201b60201c565b6200068c338262000a5460201b60201c565b505050505062001081565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620007756200069760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200079b620008f060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620007f4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007eb9062000f20565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200092a6200069760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000950620008f060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620009a9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009a09062000f20565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000a48919062000f5f565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000ac7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000abe9062000fcc565b60405180910390fd5b62000adb6000838362000bcd60201b60201c565b806002600082825462000aef919062000e62565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000b46919062000e62565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000bad919062000fff565b60405180910390a362000bc96000838362000bd260201b60201c565b5050565b505050565b505050565b82805462000be5906200104b565b90600052602060002090601f01602090048101928262000c09576000855562000c55565b82601f1062000c2457805160ff191683800117855562000c55565b8280016001018555821562000c55579182015b8281111562000c5457825182559160200191906001019062000c37565b5b50905062000c64919062000c68565b5090565b5b8082111562000c8357600081600090555060010162000c69565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000cb98262000c8c565b9050919050565b62000ccb8162000cac565b811462000cd757600080fd5b50565b60008151905062000ceb8162000cc0565b92915050565b60006020828403121562000d0a5762000d0962000c87565b5b600062000d1a8482850162000cda565b91505092915050565b62000d2e8162000cac565b82525050565b600060408201905062000d4b600083018562000d23565b62000d5a602083018462000d23565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000da78262000d61565b915062000db48362000d61565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000df05762000def62000d6b565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000e378262000d61565b915062000e448362000d61565b92508262000e575762000e5662000dfb565b5b828204905092915050565b600062000e6f8262000d61565b915062000e7c8362000d61565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000eb45762000eb362000d6b565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000f0860208362000ebf565b915062000f158262000ed0565b602082019050919050565b6000602082019050818103600083015262000f3b8162000ef9565b9050919050565b60008115159050919050565b62000f598162000f42565b82525050565b600060208201905062000f76600083018462000f4e565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000fb4601f8362000ebf565b915062000fc18262000f7c565b602082019050919050565b6000602082019050818103600083015262000fe78162000fa5565b9050919050565b62000ff98162000d61565b82525050565b600060208201905062001016600083018462000fee565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200106457607f821691505b602082108114156200107b576200107a6200101c565b5b50919050565b61572c80620010916000396000f3fe6080604052600436106103035760003560e01c80637bce5a0411610190578063a90eab8c116100dc578063c024666811610095578063d85ba0631161006f578063d85ba06314610b91578063dd62ed3e14610bbc578063e2f4560514610bf9578063f2fde38b14610c245761030a565b8063c024666814610b00578063d1c3ee7f14610b29578063d257b34f14610b545761030a565b8063a90eab8c146109f2578063ac0ac72714610a1b578063b62496f514610a46578063bae14e1d14610a83578063bbc0c74214610aac578063bdf24ba114610ad75761030a565b806395d89b41116101495780639fccce32116101235780639fccce3214610922578063a0d82dc51461094d578063a457c2d714610978578063a9059cbb146109b55761030a565b806395d89b41146108a35780639a7a23d6146108ce5780639c3b4fdc146108f75761030a565b80637bce5a04146107b95780638a8c523c146107e45780638da5cb5b146107fb5780638f85a04314610826578063921369131461084f578063924de9b71461087a5761030a565b8063395093511161024f57806366ca9b83116102085780636ddd1713116101e25780636ddd17131461070f57806370a082311461073a578063715018a614610777578063751039fc1461078e5761030a565b806366ca9b831461069257806366f1f1ac146106bb5780636a486a8e146106e45761030a565b8063395093511461055c57806349bd5a5e146105995780634a62bb65146105c45780634fbee193146105ef5780635eadf7d31461062c57806364cd83dd146106695761030a565b80631f3fed8f116102bc57806324afaf8d1161029657806324afaf8d146104b0578063313ce567146104db57806337c2810f1461050657806337da26ca146105315761030a565b80631f3fed8f1461041f578063203e727e1461044a57806323b872dd146104735761030a565b806302dbd8f81461030f57806304dfa45a1461033857806306fdde0314610361578063095ea7b31461038c5780631694505e146103c957806318160ddd146103f45761030a565b3661030a57005b600080fd5b34801561031b57600080fd5b5061033660048036038101906103319190613e42565b610c4d565b005b34801561034457600080fd5b5061035f600480360381019061035a9190613ee0565b610d37565b005b34801561036d57600080fd5b50610376610e73565b6040516103839190613fa6565b60405180910390f35b34801561039857600080fd5b506103b360048036038101906103ae9190613fc8565b610f05565b6040516103c09190614023565b60405180910390f35b3480156103d557600080fd5b506103de610f23565b6040516103eb919061409d565b60405180910390f35b34801561040057600080fd5b50610409610f49565b60405161041691906140c7565b60405180910390f35b34801561042b57600080fd5b50610434610f53565b60405161044191906140c7565b60405180910390f35b34801561045657600080fd5b50610471600480360381019061046c91906140e2565b610f59565b005b34801561047f57600080fd5b5061049a6004803603810190610495919061410f565b611068565b6040516104a79190614023565b60405180910390f35b3480156104bc57600080fd5b506104c5611160565b6040516104d29190614171565b60405180910390f35b3480156104e757600080fd5b506104f0611186565b6040516104fd91906141a8565b60405180910390f35b34801561051257600080fd5b5061051b61118f565b6040516105289190614171565b60405180910390f35b34801561053d57600080fd5b506105466111b5565b60405161055391906140c7565b60405180910390f35b34801561056857600080fd5b50610583600480360381019061057e9190613fc8565b6111bb565b6040516105909190614023565b60405180910390f35b3480156105a557600080fd5b506105ae611267565b6040516105bb9190614171565b60405180910390f35b3480156105d057600080fd5b506105d961128d565b6040516105e69190614023565b60405180910390f35b3480156105fb57600080fd5b5061061660048036038101906106119190613ee0565b6112a0565b6040516106239190614023565b60405180910390f35b34801561063857600080fd5b50610653600480360381019061064e9190613ee0565b6112f6565b6040516106609190614023565b60405180910390f35b34801561067557600080fd5b50610690600480360381019061068b9190613ee0565b611316565b005b34801561069e57600080fd5b506106b960048036038101906106b49190613e42565b611452565b005b3480156106c757600080fd5b506106e260048036038101906106dd91906141ef565b61153c565b005b3480156106f057600080fd5b506106f9611613565b60405161070691906140c7565b60405180910390f35b34801561071b57600080fd5b50610724611619565b6040516107319190614023565b60405180910390f35b34801561074657600080fd5b50610761600480360381019061075c9190613ee0565b61162c565b60405161076e91906140c7565b60405180910390f35b34801561078357600080fd5b5061078c611674565b005b34801561079a57600080fd5b506107a36116fc565b6040516107b09190614023565b60405180910390f35b3480156107c557600080fd5b506107ce61179c565b6040516107db91906140c7565b60405180910390f35b3480156107f057600080fd5b506107f96117a2565b005b34801561080757600080fd5b50610810611856565b60405161081d9190614171565b60405180910390f35b34801561083257600080fd5b5061084d60048036038101906108489190614294565b611880565b005b34801561085b57600080fd5b506108646119a1565b60405161087191906140c7565b60405180910390f35b34801561088657600080fd5b506108a1600480360381019061089c91906142f4565b6119a7565b005b3480156108af57600080fd5b506108b8611a40565b6040516108c59190613fa6565b60405180910390f35b3480156108da57600080fd5b506108f560048036038101906108f091906141ef565b611ad2565b005b34801561090357600080fd5b5061090c611bed565b60405161091991906140c7565b60405180910390f35b34801561092e57600080fd5b50610937611bf3565b60405161094491906140c7565b60405180910390f35b34801561095957600080fd5b50610962611bf9565b60405161096f91906140c7565b60405180910390f35b34801561098457600080fd5b5061099f600480360381019061099a9190613fc8565b611bff565b6040516109ac9190614023565b60405180910390f35b3480156109c157600080fd5b506109dc60048036038101906109d79190613fc8565b611cea565b6040516109e99190614023565b60405180910390f35b3480156109fe57600080fd5b50610a196004803603810190610a149190614383565b611d08565b005b348015610a2757600080fd5b50610a30611f93565b604051610a3d91906140c7565b60405180910390f35b348015610a5257600080fd5b50610a6d6004803603810190610a689190613ee0565b611f99565b604051610a7a9190614023565b60405180910390f35b348015610a8f57600080fd5b50610aaa6004803603810190610aa59190613ee0565b611fb9565b005b348015610ab857600080fd5b50610ac16120e9565b604051610ace9190614023565b60405180910390f35b348015610ae357600080fd5b50610afe6004803603810190610af991906140e2565b6120fc565b005b348015610b0c57600080fd5b50610b276004803603810190610b2291906141ef565b61220b565b005b348015610b3557600080fd5b50610b3e612330565b604051610b4b9190614171565b60405180910390f35b348015610b6057600080fd5b50610b7b6004803603810190610b7691906140e2565b612356565b604051610b889190614023565b60405180910390f35b348015610b9d57600080fd5b50610ba66124ab565b604051610bb391906140c7565b60405180910390f35b348015610bc857600080fd5b50610be36004803603810190610bde91906143d6565b6124b1565b604051610bf091906140c7565b60405180910390f35b348015610c0557600080fd5b50610c0e612538565b604051610c1b91906140c7565b60405180910390f35b348015610c3057600080fd5b50610c4b6004803603810190610c469190613ee0565b61253e565b005b610c55612636565b73ffffffffffffffffffffffffffffffffffffffff16610c73611856565b73ffffffffffffffffffffffffffffffffffffffff1614610cc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc090614462565b60405180910390fd5b8160138190555080601481905550601454601354610ce791906144b1565b60128190555060636012541115610d33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2a90614553565b60405180910390fd5b5050565b610d3f612636565b73ffffffffffffffffffffffffffffffffffffffff16610d5d611856565b73ffffffffffffffffffffffffffffffffffffffff1614610db3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610daa90614462565b60405180910390fd5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f3de051b4d5ce18dec98386d8ec6a614ddd4c62f083cf99955b678ec978aa310160405160405180910390a380600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060038054610e82906145a2565b80601f0160208091040260200160405190810160405280929190818152602001828054610eae906145a2565b8015610efb5780601f10610ed057610100808354040283529160200191610efb565b820191906000526020600020905b815481529060010190602001808311610ede57829003601f168201915b5050505050905090565b6000610f19610f12612636565b848461263e565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b60155481565b610f61612636565b73ffffffffffffffffffffffffffffffffffffffff16610f7f611856565b73ffffffffffffffffffffffffffffffffffffffff1614610fd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcc90614462565b60405180910390fd5b670de0b6b3a76400006103e86001610feb610f49565b610ff591906145d4565b610fff919061465d565b611009919061465d565b81101561104b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104290614700565b60405180910390fd5b670de0b6b3a76400008161105f91906145d4565b600b8190555050565b6000611075848484612809565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006110c0612636565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611140576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113790614792565b60405180910390fd5b6111548561114c612636565b85840361263e565b60019150509392505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006012905090565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d5481565b600061125d6111c8612636565b8484600160006111d6612636565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461125891906144b1565b61263e565b6001905092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e60009054906101000a900460ff1681565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60196020528060005260406000206000915054906101000a900460ff1681565b61131e612636565b73ffffffffffffffffffffffffffffffffffffffff1661133c611856565b73ffffffffffffffffffffffffffffffffffffffff1614611392576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138990614462565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fceaa6f1f2115d0f5eb9934026e3a197b010d8bc98f70fe27bbfb441d6fe4a69c60405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61145a612636565b73ffffffffffffffffffffffffffffffffffffffff16611478611856565b73ffffffffffffffffffffffffffffffffffffffff16146114ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c590614462565b60405180910390fd5b81601081905550806011819055506011546010546114ec91906144b1565b600f819055506063600f541115611538576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152f90614553565b60405180910390fd5b5050565b611544612636565b73ffffffffffffffffffffffffffffffffffffffff16611562611856565b73ffffffffffffffffffffffffffffffffffffffff16146115b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115af90614462565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60125481565b600e60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61167c612636565b73ffffffffffffffffffffffffffffffffffffffff1661169a611856565b73ffffffffffffffffffffffffffffffffffffffff16146116f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e790614462565b60405180910390fd5b6116fa60006135a0565b565b6000611706612636565b73ffffffffffffffffffffffffffffffffffffffff16611724611856565b73ffffffffffffffffffffffffffffffffffffffff161461177a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177190614462565b60405180910390fd5b6000600e60006101000a81548160ff0219169083151502179055506001905090565b60105481565b6117aa612636565b73ffffffffffffffffffffffffffffffffffffffff166117c8611856565b73ffffffffffffffffffffffffffffffffffffffff161461181e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181590614462565b60405180910390fd5b6001600e60016101000a81548160ff0219169083151502179055506001600e60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611888612636565b73ffffffffffffffffffffffffffffffffffffffff166118a6611856565b73ffffffffffffffffffffffffffffffffffffffff16146118fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f390614462565b60405180910390fd5b60005b8383905081101561199b578160176000868685818110611922576119216147b2565b5b90506020020160208101906119379190613ee0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611993906147e1565b9150506118ff565b50505050565b60135481565b6119af612636565b73ffffffffffffffffffffffffffffffffffffffff166119cd611856565b73ffffffffffffffffffffffffffffffffffffffff1614611a23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1a90614462565b60405180910390fd5b80600e60026101000a81548160ff02191690831515021790555050565b606060048054611a4f906145a2565b80601f0160208091040260200160405190810160405280929190818152602001828054611a7b906145a2565b8015611ac85780601f10611a9d57610100808354040283529160200191611ac8565b820191906000526020600020905b815481529060010190602001808311611aab57829003601f168201915b5050505050905090565b611ada612636565b73ffffffffffffffffffffffffffffffffffffffff16611af8611856565b73ffffffffffffffffffffffffffffffffffffffff1614611b4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4590614462565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd69061489c565b60405180910390fd5b611be98282613666565b5050565b60115481565b60165481565b60145481565b60008060016000611c0e612636565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611ccb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc29061492e565b60405180910390fd5b611cdf611cd6612636565b8585840361263e565b600191505092915050565b6000611cfe611cf7612636565b8484612809565b6001905092915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6040518060400160405280600d81526020017f54726164696e6720546f6b656e00000000000000000000000000000000000000815250805190602001206040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250805190602001204630604051602001611dbb95949392919061495d565b60405160208183030381529060405280519060200120905060007f7dfdbf06c6260804b81338506aa4a709bd9f04b68ca0d2d054b8627926c90ae46040518060400160405280600e81526020017f456e61626c652054726164696e67000000000000000000000000000000000000815250805190602001206000604051602001611e47939291906149b0565b60405160208183030381529060405280519060200120905060008282604051602001611e74929190614a5f565b604051602081830303815290604052805190602001209050600060018288888860405160008152602001604052604051611eb19493929190614a96565b6020604051602081039080840390855afa158015611ed3573d6000803e3d6000fd5b505050602060405103519050611ee7611856565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611f54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4b90614b27565b60405180910390fd5b6001600e60016101000a81548160ff0219169083151502179055506001600e60026101000a81548160ff02191690831515021790555050505050505050565b600b5481565b601a6020528060005260406000206000915054906101000a900460ff1681565b611fc1612636565b73ffffffffffffffffffffffffffffffffffffffff16611fdf611856565b73ffffffffffffffffffffffffffffffffffffffff1614612035576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202c90614462565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156120a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209c90614b93565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600e60019054906101000a900460ff1681565b612104612636565b73ffffffffffffffffffffffffffffffffffffffff16612122611856565b73ffffffffffffffffffffffffffffffffffffffff1614612178576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216f90614462565b60405180910390fd5b670de0b6b3a76400006103e8600561218e610f49565b61219891906145d4565b6121a2919061465d565b6121ac919061465d565b8110156121ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e590614c25565b60405180910390fd5b670de0b6b3a76400008161220291906145d4565b600d8190555050565b612213612636565b73ffffffffffffffffffffffffffffffffffffffff16612231611856565b73ffffffffffffffffffffffffffffffffffffffff1614612287576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227e90614462565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516123249190614023565b60405180910390a25050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000612360612636565b73ffffffffffffffffffffffffffffffffffffffff1661237e611856565b73ffffffffffffffffffffffffffffffffffffffff16146123d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cb90614462565b60405180910390fd5b620186a060016123e2610f49565b6123ec91906145d4565b6123f6919061465d565b821015612438576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242f90614cb7565b60405180910390fd5b6103e86005612445610f49565b61244f91906145d4565b612459919061465d565b82111561249b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249290614d49565b60405180910390fd5b81600c8190555060019050919050565b600f5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600c5481565b612546612636565b73ffffffffffffffffffffffffffffffffffffffff16612564611856565b73ffffffffffffffffffffffffffffffffffffffff16146125ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b190614462565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561262a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262190614ddb565b60405180910390fd5b612633816135a0565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a590614e6d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561271e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271590614eff565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516127fc91906140c7565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612879576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287090614f91565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e090615023565b60405180910390fd5b601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612976576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296d9061508f565b60405180910390fd5b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612a03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129fa906150fb565b60405180910390fd5b6000811415612a1d57612a1883836000613707565b61359b565b600e60009054906101000a900460ff1615612f1857612a3a611856565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612aa85750612a78611856565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ae15750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b1b575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b345750600860149054906101000a900460ff16155b15612f1757600e60019054906101000a900460ff16612c2e57601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612bee5750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612c2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2490615167565b60405180910390fd5b5b601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612cd15750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d7857600b54811115612d1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d12906151f9565b60405180910390fd5b600d54612d278361162c565b82612d3291906144b1565b1115612d73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d6a90615265565b60405180910390fd5b612f16565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e1b5750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e6a57600b54811115612e65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e5c906152f7565b60405180910390fd5b612f15565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612f1457600d54612ec78361162c565b82612ed291906144b1565b1115612f13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f0a90615265565b60405180910390fd5b5b5b5b5b5b600073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415801561300f5750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639015d371306040518263ffffffff1660e01b8152600401612fcd9190614171565b602060405180830381865afa158015612fea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061300e919061532c565b5b1561312a576000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a20527fc8585600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600d54600b54600c546040518763ffffffff1660e01b81526004016130a396959493929190615359565b6020604051808303816000875af11580156130c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130e6919061532c565b905080613128576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161311f90615406565b60405180910390fd5b505b60006131353061162c565b90506000600c54821015905080801561315a5750600e60029054906101000a900460ff165b80156131735750600860149054906101000a900460ff16155b80156131c85750601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b801561321e5750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132745750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156132b8576001600860146101000a81548160ff02191690831515021790555061329c613988565b6000600860146101000a81548160ff0219169083151502179055505b6000600860149054906101000a900460ff16159050601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061336e5750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561337857600090505b6000811561358b57601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156133db57506000601254115b156134755761340860646133fa60125488613b7390919063ffffffff16565b613b8990919063ffffffff16565b90506012546014548261341b91906145d4565b613425919061465d565b6016600082825461343691906144b1565b925050819055506012546013548261344e91906145d4565b613458919061465d565b6015600082825461346991906144b1565b92505081905550613567565b601a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156134d057506000600f54115b15613566576134fd60646134ef600f5488613b7390919063ffffffff16565b613b8990919063ffffffff16565b9050600f546011548261351091906145d4565b61351a919061465d565b6016600082825461352b91906144b1565b92505081905550600f546010548261354391906145d4565b61354d919061465d565b6015600082825461355e91906144b1565b925050819055505b5b600081111561357c5761357b873083613707565b5b80856135889190615426565b94505b613596878787613707565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161376e90614f91565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156137e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137de90615023565b60405180910390fd5b6137f2838383613b9f565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613878576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161386f906154cc565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461390b91906144b1565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161396f91906140c7565b60405180910390a3613982848484613ba4565b50505050565b60006139933061162c565b905060006016546015546139a791906144b1565b90506000808314806139b95750600082145b156139c657505050613b71565b6014600c546139d591906145d4565b8311156139ee576014600c546139eb91906145d4565b92505b60004790506139fc84613ba9565b6000613a118247613dec90919063ffffffff16565b90506000613a3c85613a2e60165485613b7390919063ffffffff16565b613b8990919063ffffffff16565b905060006015819055506000601681905550600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051613a949061551d565b60006040518083038185875af1925050503d8060008114613ad1576040519150601f19603f3d011682016040523d82523d6000602084013e613ad6565b606091505b505080945050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613b229061551d565b60006040518083038185875af1925050503d8060008114613b5f576040519150601f19603f3d011682016040523d82523d6000602084013e613b64565b606091505b5050809450505050505050505b565b60008183613b8191906145d4565b905092915050565b60008183613b97919061465d565b905092915050565b505050565b505050565b6000600267ffffffffffffffff811115613bc657613bc5615532565b5b604051908082528060200260200182016040528015613bf45781602001602082028036833780820191505090505b5090503081600081518110613c0c57613c0b6147b2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613cb3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cd79190615576565b81600181518110613ceb57613cea6147b2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613d5230600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461263e565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613db695949392919061569c565b600060405180830381600087803b158015613dd057600080fd5b505af1158015613de4573d6000803e3d6000fd5b505050505050565b60008183613dfa9190615426565b905092915050565b600080fd5b600080fd5b6000819050919050565b613e1f81613e0c565b8114613e2a57600080fd5b50565b600081359050613e3c81613e16565b92915050565b60008060408385031215613e5957613e58613e02565b5b6000613e6785828601613e2d565b9250506020613e7885828601613e2d565b9150509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613ead82613e82565b9050919050565b613ebd81613ea2565b8114613ec857600080fd5b50565b600081359050613eda81613eb4565b92915050565b600060208284031215613ef657613ef5613e02565b5b6000613f0484828501613ecb565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613f47578082015181840152602081019050613f2c565b83811115613f56576000848401525b50505050565b6000601f19601f8301169050919050565b6000613f7882613f0d565b613f828185613f18565b9350613f92818560208601613f29565b613f9b81613f5c565b840191505092915050565b60006020820190508181036000830152613fc08184613f6d565b905092915050565b60008060408385031215613fdf57613fde613e02565b5b6000613fed85828601613ecb565b9250506020613ffe85828601613e2d565b9150509250929050565b60008115159050919050565b61401d81614008565b82525050565b60006020820190506140386000830184614014565b92915050565b6000819050919050565b600061406361405e61405984613e82565b61403e565b613e82565b9050919050565b600061407582614048565b9050919050565b60006140878261406a565b9050919050565b6140978161407c565b82525050565b60006020820190506140b2600083018461408e565b92915050565b6140c181613e0c565b82525050565b60006020820190506140dc60008301846140b8565b92915050565b6000602082840312156140f8576140f7613e02565b5b600061410684828501613e2d565b91505092915050565b60008060006060848603121561412857614127613e02565b5b600061413686828701613ecb565b935050602061414786828701613ecb565b925050604061415886828701613e2d565b9150509250925092565b61416b81613ea2565b82525050565b60006020820190506141866000830184614162565b92915050565b600060ff82169050919050565b6141a28161418c565b82525050565b60006020820190506141bd6000830184614199565b92915050565b6141cc81614008565b81146141d757600080fd5b50565b6000813590506141e9816141c3565b92915050565b6000806040838503121561420657614205613e02565b5b600061421485828601613ecb565b9250506020614225858286016141da565b9150509250929050565b600080fd5b600080fd5b600080fd5b60008083601f8401126142545761425361422f565b5b8235905067ffffffffffffffff81111561427157614270614234565b5b60208301915083602082028301111561428d5761428c614239565b5b9250929050565b6000806000604084860312156142ad576142ac613e02565b5b600084013567ffffffffffffffff8111156142cb576142ca613e07565b5b6142d78682870161423e565b935093505060206142ea868287016141da565b9150509250925092565b60006020828403121561430a57614309613e02565b5b6000614318848285016141da565b91505092915050565b61432a8161418c565b811461433557600080fd5b50565b60008135905061434781614321565b92915050565b6000819050919050565b6143608161434d565b811461436b57600080fd5b50565b60008135905061437d81614357565b92915050565b60008060006060848603121561439c5761439b613e02565b5b60006143aa86828701614338565b93505060206143bb8682870161436e565b92505060406143cc8682870161436e565b9150509250925092565b600080604083850312156143ed576143ec613e02565b5b60006143fb85828601613ecb565b925050602061440c85828601613ecb565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061444c602083613f18565b915061445782614416565b602082019050919050565b6000602082019050818103600083015261447b8161443f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006144bc82613e0c565b91506144c783613e0c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156144fc576144fb614482565b5b828201905092915050565b7f4d757374206b656570206665657320617420393925206f72206c657373000000600082015250565b600061453d601d83613f18565b915061454882614507565b602082019050919050565b6000602082019050818103600083015261456c81614530565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806145ba57607f821691505b602082108114156145ce576145cd614573565b5b50919050565b60006145df82613e0c565b91506145ea83613e0c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561462357614622614482565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061466882613e0c565b915061467383613e0c565b9250826146835761468261462e565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416c6c6f77656460008201527f206c6f776572207468616e20302e312500000000000000000000000000000000602082015250565b60006146ea603083613f18565b91506146f58261468e565b604082019050919050565b60006020820190508181036000830152614719816146dd565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b600061477c602883613f18565b915061478782614720565b604082019050919050565b600060208201905081810360008301526147ab8161476f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006147ec82613e0c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561481f5761481e614482565b5b600182019050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614886603983613f18565b91506148918261482a565b604082019050919050565b600060208201905081810360008301526148b581614879565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614918602583613f18565b9150614923826148bc565b604082019050919050565b600060208201905081810360008301526149478161490b565b9050919050565b6149578161434d565b82525050565b600060a082019050614972600083018861494e565b61497f602083018761494e565b61498c604083018661494e565b61499960608301856140b8565b6149a66080830184614162565b9695505050505050565b60006060820190506149c5600083018661494e565b6149d2602083018561494e565b6149df60408301846140b8565b949350505050565b600081905092915050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b6000614a286002836149e7565b9150614a33826149f2565b600282019050919050565b6000819050919050565b614a59614a548261434d565b614a3e565b82525050565b6000614a6a82614a1b565b9150614a768285614a48565b602082019150614a868284614a48565b6020820191508190509392505050565b6000608082019050614aab600083018761494e565b614ab86020830186614199565b614ac5604083018561494e565b614ad2606083018461494e565b95945050505050565b7f496e76616c6964207369676e6174757265000000000000000000000000000000600082015250565b6000614b11601183613f18565b9150614b1c82614adb565b602082019050919050565b60006020820190508181036000830152614b4081614b04565b9050919050565b7f496e76616c696420616e746920647261696e6572000000000000000000000000600082015250565b6000614b7d601483613f18565b9150614b8882614b47565b602082019050919050565b60006020820190508181036000830152614bac81614b70565b9050919050565b7f43616e6e6f7420736574206d6178696d756d57616c6c6574416c6c6f7765642060008201527f6c6f776572207468616e20302e35250000000000000000000000000000000000602082015250565b6000614c0f602f83613f18565b9150614c1a82614bb3565b604082019050919050565b60006020820190508181036000830152614c3e81614c02565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614ca1603583613f18565b9150614cac82614c45565b604082019050919050565b60006020820190508181036000830152614cd081614c94565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614d33603483613f18565b9150614d3e82614cd7565b604082019050919050565b60006020820190508181036000830152614d6281614d26565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614dc5602683613f18565b9150614dd082614d69565b604082019050919050565b60006020820190508181036000830152614df481614db8565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614e57602483613f18565b9150614e6282614dfb565b604082019050919050565b60006020820190508181036000830152614e8681614e4a565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614ee9602283613f18565b9150614ef482614e8d565b604082019050919050565b60006020820190508181036000830152614f1881614edc565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614f7b602583613f18565b9150614f8682614f1f565b604082019050919050565b60006020820190508181036000830152614faa81614f6e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061500d602383613f18565b915061501882614fb1565b604082019050919050565b6000602082019050818103600083015261503c81615000565b9050919050565b7f5b66726f6d5d20626c61636b206c697374000000000000000000000000000000600082015250565b6000615079601183613f18565b915061508482615043565b602082019050919050565b600060208201905081810360008301526150a88161506c565b9050919050565b7f5b746f5d20626c61636b206c6973740000000000000000000000000000000000600082015250565b60006150e5600f83613f18565b91506150f0826150af565b602082019050919050565b60006020820190508181036000830152615114816150d8565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000615151601683613f18565b915061515c8261511b565b602082019050919050565b6000602082019050818103600083015261518081615144565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416c6c6f7765642e00000000000000000000602082015250565b60006151e3603683613f18565b91506151ee82615187565b604082019050919050565b60006020820190508181036000830152615212816151d6565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061524f601383613f18565b915061525a82615219565b602082019050919050565b6000602082019050818103600083015261527e81615242565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416c6c6f7765642e000000000000000000602082015250565b60006152e1603783613f18565b91506152ec82615285565b604082019050919050565b60006020820190508181036000830152615310816152d4565b9050919050565b600081519050615326816141c3565b92915050565b60006020828403121561534257615341613e02565b5b600061535084828501615317565b91505092915050565b600060c08201905061536e6000830189614162565b61537b6020830188614162565b6153886040830187614162565b61539560608301866140b8565b6153a260808301856140b8565b6153af60a08301846140b8565b979650505050505050565b7f416e746920447261696e657220456e61626c6564000000000000000000000000600082015250565b60006153f0601483613f18565b91506153fb826153ba565b602082019050919050565b6000602082019050818103600083015261541f816153e3565b9050919050565b600061543182613e0c565b915061543c83613e0c565b92508282101561544f5761544e614482565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006154b6602683613f18565b91506154c18261545a565b604082019050919050565b600060208201905081810360008301526154e5816154a9565b9050919050565b600081905092915050565b50565b60006155076000836154ec565b9150615512826154f7565b600082019050919050565b6000615528826154fa565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008151905061557081613eb4565b92915050565b60006020828403121561558c5761558b613e02565b5b600061559a84828501615561565b91505092915050565b6000819050919050565b60006155c86155c36155be846155a3565b61403e565b613e0c565b9050919050565b6155d8816155ad565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61561381613ea2565b82525050565b6000615625838361560a565b60208301905092915050565b6000602082019050919050565b6000615649826155de565b61565381856155e9565b935061565e836155fa565b8060005b8381101561568f5781516156768882615619565b975061568183615631565b925050600181019050615662565b5085935050505092915050565b600060a0820190506156b160008301886140b8565b6156be60208301876155cf565b81810360408301526156d0818661563e565b90506156df6060830185614162565b6156ec60808301846140b8565b969550505050505056fea26469706673582212202c3c4fb34a1dd4104d9385a91f74b81eca2a36a40f34855e19bd652eb283a2bc64736f6c634300080a0033

Deployed Bytecode

0x6080604052600436106103035760003560e01c80637bce5a0411610190578063a90eab8c116100dc578063c024666811610095578063d85ba0631161006f578063d85ba06314610b91578063dd62ed3e14610bbc578063e2f4560514610bf9578063f2fde38b14610c245761030a565b8063c024666814610b00578063d1c3ee7f14610b29578063d257b34f14610b545761030a565b8063a90eab8c146109f2578063ac0ac72714610a1b578063b62496f514610a46578063bae14e1d14610a83578063bbc0c74214610aac578063bdf24ba114610ad75761030a565b806395d89b41116101495780639fccce32116101235780639fccce3214610922578063a0d82dc51461094d578063a457c2d714610978578063a9059cbb146109b55761030a565b806395d89b41146108a35780639a7a23d6146108ce5780639c3b4fdc146108f75761030a565b80637bce5a04146107b95780638a8c523c146107e45780638da5cb5b146107fb5780638f85a04314610826578063921369131461084f578063924de9b71461087a5761030a565b8063395093511161024f57806366ca9b83116102085780636ddd1713116101e25780636ddd17131461070f57806370a082311461073a578063715018a614610777578063751039fc1461078e5761030a565b806366ca9b831461069257806366f1f1ac146106bb5780636a486a8e146106e45761030a565b8063395093511461055c57806349bd5a5e146105995780634a62bb65146105c45780634fbee193146105ef5780635eadf7d31461062c57806364cd83dd146106695761030a565b80631f3fed8f116102bc57806324afaf8d1161029657806324afaf8d146104b0578063313ce567146104db57806337c2810f1461050657806337da26ca146105315761030a565b80631f3fed8f1461041f578063203e727e1461044a57806323b872dd146104735761030a565b806302dbd8f81461030f57806304dfa45a1461033857806306fdde0314610361578063095ea7b31461038c5780631694505e146103c957806318160ddd146103f45761030a565b3661030a57005b600080fd5b34801561031b57600080fd5b5061033660048036038101906103319190613e42565b610c4d565b005b34801561034457600080fd5b5061035f600480360381019061035a9190613ee0565b610d37565b005b34801561036d57600080fd5b50610376610e73565b6040516103839190613fa6565b60405180910390f35b34801561039857600080fd5b506103b360048036038101906103ae9190613fc8565b610f05565b6040516103c09190614023565b60405180910390f35b3480156103d557600080fd5b506103de610f23565b6040516103eb919061409d565b60405180910390f35b34801561040057600080fd5b50610409610f49565b60405161041691906140c7565b60405180910390f35b34801561042b57600080fd5b50610434610f53565b60405161044191906140c7565b60405180910390f35b34801561045657600080fd5b50610471600480360381019061046c91906140e2565b610f59565b005b34801561047f57600080fd5b5061049a6004803603810190610495919061410f565b611068565b6040516104a79190614023565b60405180910390f35b3480156104bc57600080fd5b506104c5611160565b6040516104d29190614171565b60405180910390f35b3480156104e757600080fd5b506104f0611186565b6040516104fd91906141a8565b60405180910390f35b34801561051257600080fd5b5061051b61118f565b6040516105289190614171565b60405180910390f35b34801561053d57600080fd5b506105466111b5565b60405161055391906140c7565b60405180910390f35b34801561056857600080fd5b50610583600480360381019061057e9190613fc8565b6111bb565b6040516105909190614023565b60405180910390f35b3480156105a557600080fd5b506105ae611267565b6040516105bb9190614171565b60405180910390f35b3480156105d057600080fd5b506105d961128d565b6040516105e69190614023565b60405180910390f35b3480156105fb57600080fd5b5061061660048036038101906106119190613ee0565b6112a0565b6040516106239190614023565b60405180910390f35b34801561063857600080fd5b50610653600480360381019061064e9190613ee0565b6112f6565b6040516106609190614023565b60405180910390f35b34801561067557600080fd5b50610690600480360381019061068b9190613ee0565b611316565b005b34801561069e57600080fd5b506106b960048036038101906106b49190613e42565b611452565b005b3480156106c757600080fd5b506106e260048036038101906106dd91906141ef565b61153c565b005b3480156106f057600080fd5b506106f9611613565b60405161070691906140c7565b60405180910390f35b34801561071b57600080fd5b50610724611619565b6040516107319190614023565b60405180910390f35b34801561074657600080fd5b50610761600480360381019061075c9190613ee0565b61162c565b60405161076e91906140c7565b60405180910390f35b34801561078357600080fd5b5061078c611674565b005b34801561079a57600080fd5b506107a36116fc565b6040516107b09190614023565b60405180910390f35b3480156107c557600080fd5b506107ce61179c565b6040516107db91906140c7565b60405180910390f35b3480156107f057600080fd5b506107f96117a2565b005b34801561080757600080fd5b50610810611856565b60405161081d9190614171565b60405180910390f35b34801561083257600080fd5b5061084d60048036038101906108489190614294565b611880565b005b34801561085b57600080fd5b506108646119a1565b60405161087191906140c7565b60405180910390f35b34801561088657600080fd5b506108a1600480360381019061089c91906142f4565b6119a7565b005b3480156108af57600080fd5b506108b8611a40565b6040516108c59190613fa6565b60405180910390f35b3480156108da57600080fd5b506108f560048036038101906108f091906141ef565b611ad2565b005b34801561090357600080fd5b5061090c611bed565b60405161091991906140c7565b60405180910390f35b34801561092e57600080fd5b50610937611bf3565b60405161094491906140c7565b60405180910390f35b34801561095957600080fd5b50610962611bf9565b60405161096f91906140c7565b60405180910390f35b34801561098457600080fd5b5061099f600480360381019061099a9190613fc8565b611bff565b6040516109ac9190614023565b60405180910390f35b3480156109c157600080fd5b506109dc60048036038101906109d79190613fc8565b611cea565b6040516109e99190614023565b60405180910390f35b3480156109fe57600080fd5b50610a196004803603810190610a149190614383565b611d08565b005b348015610a2757600080fd5b50610a30611f93565b604051610a3d91906140c7565b60405180910390f35b348015610a5257600080fd5b50610a6d6004803603810190610a689190613ee0565b611f99565b604051610a7a9190614023565b60405180910390f35b348015610a8f57600080fd5b50610aaa6004803603810190610aa59190613ee0565b611fb9565b005b348015610ab857600080fd5b50610ac16120e9565b604051610ace9190614023565b60405180910390f35b348015610ae357600080fd5b50610afe6004803603810190610af991906140e2565b6120fc565b005b348015610b0c57600080fd5b50610b276004803603810190610b2291906141ef565b61220b565b005b348015610b3557600080fd5b50610b3e612330565b604051610b4b9190614171565b60405180910390f35b348015610b6057600080fd5b50610b7b6004803603810190610b7691906140e2565b612356565b604051610b889190614023565b60405180910390f35b348015610b9d57600080fd5b50610ba66124ab565b604051610bb391906140c7565b60405180910390f35b348015610bc857600080fd5b50610be36004803603810190610bde91906143d6565b6124b1565b604051610bf091906140c7565b60405180910390f35b348015610c0557600080fd5b50610c0e612538565b604051610c1b91906140c7565b60405180910390f35b348015610c3057600080fd5b50610c4b6004803603810190610c469190613ee0565b61253e565b005b610c55612636565b73ffffffffffffffffffffffffffffffffffffffff16610c73611856565b73ffffffffffffffffffffffffffffffffffffffff1614610cc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc090614462565b60405180910390fd5b8160138190555080601481905550601454601354610ce791906144b1565b60128190555060636012541115610d33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2a90614553565b60405180910390fd5b5050565b610d3f612636565b73ffffffffffffffffffffffffffffffffffffffff16610d5d611856565b73ffffffffffffffffffffffffffffffffffffffff1614610db3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610daa90614462565b60405180910390fd5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f3de051b4d5ce18dec98386d8ec6a614ddd4c62f083cf99955b678ec978aa310160405160405180910390a380600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060038054610e82906145a2565b80601f0160208091040260200160405190810160405280929190818152602001828054610eae906145a2565b8015610efb5780601f10610ed057610100808354040283529160200191610efb565b820191906000526020600020905b815481529060010190602001808311610ede57829003601f168201915b5050505050905090565b6000610f19610f12612636565b848461263e565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b60155481565b610f61612636565b73ffffffffffffffffffffffffffffffffffffffff16610f7f611856565b73ffffffffffffffffffffffffffffffffffffffff1614610fd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcc90614462565b60405180910390fd5b670de0b6b3a76400006103e86001610feb610f49565b610ff591906145d4565b610fff919061465d565b611009919061465d565b81101561104b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104290614700565b60405180910390fd5b670de0b6b3a76400008161105f91906145d4565b600b8190555050565b6000611075848484612809565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006110c0612636565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611140576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113790614792565b60405180910390fd5b6111548561114c612636565b85840361263e565b60019150509392505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006012905090565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d5481565b600061125d6111c8612636565b8484600160006111d6612636565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461125891906144b1565b61263e565b6001905092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e60009054906101000a900460ff1681565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60196020528060005260406000206000915054906101000a900460ff1681565b61131e612636565b73ffffffffffffffffffffffffffffffffffffffff1661133c611856565b73ffffffffffffffffffffffffffffffffffffffff1614611392576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138990614462565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fceaa6f1f2115d0f5eb9934026e3a197b010d8bc98f70fe27bbfb441d6fe4a69c60405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61145a612636565b73ffffffffffffffffffffffffffffffffffffffff16611478611856565b73ffffffffffffffffffffffffffffffffffffffff16146114ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c590614462565b60405180910390fd5b81601081905550806011819055506011546010546114ec91906144b1565b600f819055506063600f541115611538576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152f90614553565b60405180910390fd5b5050565b611544612636565b73ffffffffffffffffffffffffffffffffffffffff16611562611856565b73ffffffffffffffffffffffffffffffffffffffff16146115b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115af90614462565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60125481565b600e60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61167c612636565b73ffffffffffffffffffffffffffffffffffffffff1661169a611856565b73ffffffffffffffffffffffffffffffffffffffff16146116f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e790614462565b60405180910390fd5b6116fa60006135a0565b565b6000611706612636565b73ffffffffffffffffffffffffffffffffffffffff16611724611856565b73ffffffffffffffffffffffffffffffffffffffff161461177a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177190614462565b60405180910390fd5b6000600e60006101000a81548160ff0219169083151502179055506001905090565b60105481565b6117aa612636565b73ffffffffffffffffffffffffffffffffffffffff166117c8611856565b73ffffffffffffffffffffffffffffffffffffffff161461181e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181590614462565b60405180910390fd5b6001600e60016101000a81548160ff0219169083151502179055506001600e60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611888612636565b73ffffffffffffffffffffffffffffffffffffffff166118a6611856565b73ffffffffffffffffffffffffffffffffffffffff16146118fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f390614462565b60405180910390fd5b60005b8383905081101561199b578160176000868685818110611922576119216147b2565b5b90506020020160208101906119379190613ee0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611993906147e1565b9150506118ff565b50505050565b60135481565b6119af612636565b73ffffffffffffffffffffffffffffffffffffffff166119cd611856565b73ffffffffffffffffffffffffffffffffffffffff1614611a23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1a90614462565b60405180910390fd5b80600e60026101000a81548160ff02191690831515021790555050565b606060048054611a4f906145a2565b80601f0160208091040260200160405190810160405280929190818152602001828054611a7b906145a2565b8015611ac85780601f10611a9d57610100808354040283529160200191611ac8565b820191906000526020600020905b815481529060010190602001808311611aab57829003601f168201915b5050505050905090565b611ada612636565b73ffffffffffffffffffffffffffffffffffffffff16611af8611856565b73ffffffffffffffffffffffffffffffffffffffff1614611b4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4590614462565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd69061489c565b60405180910390fd5b611be98282613666565b5050565b60115481565b60165481565b60145481565b60008060016000611c0e612636565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611ccb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc29061492e565b60405180910390fd5b611cdf611cd6612636565b8585840361263e565b600191505092915050565b6000611cfe611cf7612636565b8484612809565b6001905092915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6040518060400160405280600d81526020017f54726164696e6720546f6b656e00000000000000000000000000000000000000815250805190602001206040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250805190602001204630604051602001611dbb95949392919061495d565b60405160208183030381529060405280519060200120905060007f7dfdbf06c6260804b81338506aa4a709bd9f04b68ca0d2d054b8627926c90ae46040518060400160405280600e81526020017f456e61626c652054726164696e67000000000000000000000000000000000000815250805190602001206000604051602001611e47939291906149b0565b60405160208183030381529060405280519060200120905060008282604051602001611e74929190614a5f565b604051602081830303815290604052805190602001209050600060018288888860405160008152602001604052604051611eb19493929190614a96565b6020604051602081039080840390855afa158015611ed3573d6000803e3d6000fd5b505050602060405103519050611ee7611856565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611f54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4b90614b27565b60405180910390fd5b6001600e60016101000a81548160ff0219169083151502179055506001600e60026101000a81548160ff02191690831515021790555050505050505050565b600b5481565b601a6020528060005260406000206000915054906101000a900460ff1681565b611fc1612636565b73ffffffffffffffffffffffffffffffffffffffff16611fdf611856565b73ffffffffffffffffffffffffffffffffffffffff1614612035576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202c90614462565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156120a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209c90614b93565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600e60019054906101000a900460ff1681565b612104612636565b73ffffffffffffffffffffffffffffffffffffffff16612122611856565b73ffffffffffffffffffffffffffffffffffffffff1614612178576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216f90614462565b60405180910390fd5b670de0b6b3a76400006103e8600561218e610f49565b61219891906145d4565b6121a2919061465d565b6121ac919061465d565b8110156121ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e590614c25565b60405180910390fd5b670de0b6b3a76400008161220291906145d4565b600d8190555050565b612213612636565b73ffffffffffffffffffffffffffffffffffffffff16612231611856565b73ffffffffffffffffffffffffffffffffffffffff1614612287576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227e90614462565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516123249190614023565b60405180910390a25050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000612360612636565b73ffffffffffffffffffffffffffffffffffffffff1661237e611856565b73ffffffffffffffffffffffffffffffffffffffff16146123d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cb90614462565b60405180910390fd5b620186a060016123e2610f49565b6123ec91906145d4565b6123f6919061465d565b821015612438576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242f90614cb7565b60405180910390fd5b6103e86005612445610f49565b61244f91906145d4565b612459919061465d565b82111561249b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249290614d49565b60405180910390fd5b81600c8190555060019050919050565b600f5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600c5481565b612546612636565b73ffffffffffffffffffffffffffffffffffffffff16612564611856565b73ffffffffffffffffffffffffffffffffffffffff16146125ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b190614462565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561262a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262190614ddb565b60405180910390fd5b612633816135a0565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a590614e6d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561271e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271590614eff565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516127fc91906140c7565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612879576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287090614f91565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e090615023565b60405180910390fd5b601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612976576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296d9061508f565b60405180910390fd5b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612a03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129fa906150fb565b60405180910390fd5b6000811415612a1d57612a1883836000613707565b61359b565b600e60009054906101000a900460ff1615612f1857612a3a611856565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612aa85750612a78611856565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ae15750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b1b575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b345750600860149054906101000a900460ff16155b15612f1757600e60019054906101000a900460ff16612c2e57601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612bee5750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612c2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2490615167565b60405180910390fd5b5b601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612cd15750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d7857600b54811115612d1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d12906151f9565b60405180910390fd5b600d54612d278361162c565b82612d3291906144b1565b1115612d73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d6a90615265565b60405180910390fd5b612f16565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e1b5750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e6a57600b54811115612e65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e5c906152f7565b60405180910390fd5b612f15565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612f1457600d54612ec78361162c565b82612ed291906144b1565b1115612f13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f0a90615265565b60405180910390fd5b5b5b5b5b5b600073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415801561300f5750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639015d371306040518263ffffffff1660e01b8152600401612fcd9190614171565b602060405180830381865afa158015612fea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061300e919061532c565b5b1561312a576000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a20527fc8585600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600d54600b54600c546040518763ffffffff1660e01b81526004016130a396959493929190615359565b6020604051808303816000875af11580156130c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130e6919061532c565b905080613128576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161311f90615406565b60405180910390fd5b505b60006131353061162c565b90506000600c54821015905080801561315a5750600e60029054906101000a900460ff165b80156131735750600860149054906101000a900460ff16155b80156131c85750601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b801561321e5750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132745750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156132b8576001600860146101000a81548160ff02191690831515021790555061329c613988565b6000600860146101000a81548160ff0219169083151502179055505b6000600860149054906101000a900460ff16159050601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061336e5750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561337857600090505b6000811561358b57601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156133db57506000601254115b156134755761340860646133fa60125488613b7390919063ffffffff16565b613b8990919063ffffffff16565b90506012546014548261341b91906145d4565b613425919061465d565b6016600082825461343691906144b1565b925050819055506012546013548261344e91906145d4565b613458919061465d565b6015600082825461346991906144b1565b92505081905550613567565b601a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156134d057506000600f54115b15613566576134fd60646134ef600f5488613b7390919063ffffffff16565b613b8990919063ffffffff16565b9050600f546011548261351091906145d4565b61351a919061465d565b6016600082825461352b91906144b1565b92505081905550600f546010548261354391906145d4565b61354d919061465d565b6015600082825461355e91906144b1565b925050819055505b5b600081111561357c5761357b873083613707565b5b80856135889190615426565b94505b613596878787613707565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161376e90614f91565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156137e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137de90615023565b60405180910390fd5b6137f2838383613b9f565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613878576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161386f906154cc565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461390b91906144b1565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161396f91906140c7565b60405180910390a3613982848484613ba4565b50505050565b60006139933061162c565b905060006016546015546139a791906144b1565b90506000808314806139b95750600082145b156139c657505050613b71565b6014600c546139d591906145d4565b8311156139ee576014600c546139eb91906145d4565b92505b60004790506139fc84613ba9565b6000613a118247613dec90919063ffffffff16565b90506000613a3c85613a2e60165485613b7390919063ffffffff16565b613b8990919063ffffffff16565b905060006015819055506000601681905550600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051613a949061551d565b60006040518083038185875af1925050503d8060008114613ad1576040519150601f19603f3d011682016040523d82523d6000602084013e613ad6565b606091505b505080945050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613b229061551d565b60006040518083038185875af1925050503d8060008114613b5f576040519150601f19603f3d011682016040523d82523d6000602084013e613b64565b606091505b5050809450505050505050505b565b60008183613b8191906145d4565b905092915050565b60008183613b97919061465d565b905092915050565b505050565b505050565b6000600267ffffffffffffffff811115613bc657613bc5615532565b5b604051908082528060200260200182016040528015613bf45781602001602082028036833780820191505090505b5090503081600081518110613c0c57613c0b6147b2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613cb3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cd79190615576565b81600181518110613ceb57613cea6147b2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613d5230600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461263e565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613db695949392919061569c565b600060405180830381600087803b158015613dd057600080fd5b505af1158015613de4573d6000803e3d6000fd5b505050505050565b60008183613dfa9190615426565b905092915050565b600080fd5b600080fd5b6000819050919050565b613e1f81613e0c565b8114613e2a57600080fd5b50565b600081359050613e3c81613e16565b92915050565b60008060408385031215613e5957613e58613e02565b5b6000613e6785828601613e2d565b9250506020613e7885828601613e2d565b9150509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613ead82613e82565b9050919050565b613ebd81613ea2565b8114613ec857600080fd5b50565b600081359050613eda81613eb4565b92915050565b600060208284031215613ef657613ef5613e02565b5b6000613f0484828501613ecb565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613f47578082015181840152602081019050613f2c565b83811115613f56576000848401525b50505050565b6000601f19601f8301169050919050565b6000613f7882613f0d565b613f828185613f18565b9350613f92818560208601613f29565b613f9b81613f5c565b840191505092915050565b60006020820190508181036000830152613fc08184613f6d565b905092915050565b60008060408385031215613fdf57613fde613e02565b5b6000613fed85828601613ecb565b9250506020613ffe85828601613e2d565b9150509250929050565b60008115159050919050565b61401d81614008565b82525050565b60006020820190506140386000830184614014565b92915050565b6000819050919050565b600061406361405e61405984613e82565b61403e565b613e82565b9050919050565b600061407582614048565b9050919050565b60006140878261406a565b9050919050565b6140978161407c565b82525050565b60006020820190506140b2600083018461408e565b92915050565b6140c181613e0c565b82525050565b60006020820190506140dc60008301846140b8565b92915050565b6000602082840312156140f8576140f7613e02565b5b600061410684828501613e2d565b91505092915050565b60008060006060848603121561412857614127613e02565b5b600061413686828701613ecb565b935050602061414786828701613ecb565b925050604061415886828701613e2d565b9150509250925092565b61416b81613ea2565b82525050565b60006020820190506141866000830184614162565b92915050565b600060ff82169050919050565b6141a28161418c565b82525050565b60006020820190506141bd6000830184614199565b92915050565b6141cc81614008565b81146141d757600080fd5b50565b6000813590506141e9816141c3565b92915050565b6000806040838503121561420657614205613e02565b5b600061421485828601613ecb565b9250506020614225858286016141da565b9150509250929050565b600080fd5b600080fd5b600080fd5b60008083601f8401126142545761425361422f565b5b8235905067ffffffffffffffff81111561427157614270614234565b5b60208301915083602082028301111561428d5761428c614239565b5b9250929050565b6000806000604084860312156142ad576142ac613e02565b5b600084013567ffffffffffffffff8111156142cb576142ca613e07565b5b6142d78682870161423e565b935093505060206142ea868287016141da565b9150509250925092565b60006020828403121561430a57614309613e02565b5b6000614318848285016141da565b91505092915050565b61432a8161418c565b811461433557600080fd5b50565b60008135905061434781614321565b92915050565b6000819050919050565b6143608161434d565b811461436b57600080fd5b50565b60008135905061437d81614357565b92915050565b60008060006060848603121561439c5761439b613e02565b5b60006143aa86828701614338565b93505060206143bb8682870161436e565b92505060406143cc8682870161436e565b9150509250925092565b600080604083850312156143ed576143ec613e02565b5b60006143fb85828601613ecb565b925050602061440c85828601613ecb565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061444c602083613f18565b915061445782614416565b602082019050919050565b6000602082019050818103600083015261447b8161443f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006144bc82613e0c565b91506144c783613e0c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156144fc576144fb614482565b5b828201905092915050565b7f4d757374206b656570206665657320617420393925206f72206c657373000000600082015250565b600061453d601d83613f18565b915061454882614507565b602082019050919050565b6000602082019050818103600083015261456c81614530565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806145ba57607f821691505b602082108114156145ce576145cd614573565b5b50919050565b60006145df82613e0c565b91506145ea83613e0c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561462357614622614482565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061466882613e0c565b915061467383613e0c565b9250826146835761468261462e565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416c6c6f77656460008201527f206c6f776572207468616e20302e312500000000000000000000000000000000602082015250565b60006146ea603083613f18565b91506146f58261468e565b604082019050919050565b60006020820190508181036000830152614719816146dd565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b600061477c602883613f18565b915061478782614720565b604082019050919050565b600060208201905081810360008301526147ab8161476f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006147ec82613e0c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561481f5761481e614482565b5b600182019050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614886603983613f18565b91506148918261482a565b604082019050919050565b600060208201905081810360008301526148b581614879565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614918602583613f18565b9150614923826148bc565b604082019050919050565b600060208201905081810360008301526149478161490b565b9050919050565b6149578161434d565b82525050565b600060a082019050614972600083018861494e565b61497f602083018761494e565b61498c604083018661494e565b61499960608301856140b8565b6149a66080830184614162565b9695505050505050565b60006060820190506149c5600083018661494e565b6149d2602083018561494e565b6149df60408301846140b8565b949350505050565b600081905092915050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b6000614a286002836149e7565b9150614a33826149f2565b600282019050919050565b6000819050919050565b614a59614a548261434d565b614a3e565b82525050565b6000614a6a82614a1b565b9150614a768285614a48565b602082019150614a868284614a48565b6020820191508190509392505050565b6000608082019050614aab600083018761494e565b614ab86020830186614199565b614ac5604083018561494e565b614ad2606083018461494e565b95945050505050565b7f496e76616c6964207369676e6174757265000000000000000000000000000000600082015250565b6000614b11601183613f18565b9150614b1c82614adb565b602082019050919050565b60006020820190508181036000830152614b4081614b04565b9050919050565b7f496e76616c696420616e746920647261696e6572000000000000000000000000600082015250565b6000614b7d601483613f18565b9150614b8882614b47565b602082019050919050565b60006020820190508181036000830152614bac81614b70565b9050919050565b7f43616e6e6f7420736574206d6178696d756d57616c6c6574416c6c6f7765642060008201527f6c6f776572207468616e20302e35250000000000000000000000000000000000602082015250565b6000614c0f602f83613f18565b9150614c1a82614bb3565b604082019050919050565b60006020820190508181036000830152614c3e81614c02565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614ca1603583613f18565b9150614cac82614c45565b604082019050919050565b60006020820190508181036000830152614cd081614c94565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614d33603483613f18565b9150614d3e82614cd7565b604082019050919050565b60006020820190508181036000830152614d6281614d26565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614dc5602683613f18565b9150614dd082614d69565b604082019050919050565b60006020820190508181036000830152614df481614db8565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614e57602483613f18565b9150614e6282614dfb565b604082019050919050565b60006020820190508181036000830152614e8681614e4a565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614ee9602283613f18565b9150614ef482614e8d565b604082019050919050565b60006020820190508181036000830152614f1881614edc565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614f7b602583613f18565b9150614f8682614f1f565b604082019050919050565b60006020820190508181036000830152614faa81614f6e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061500d602383613f18565b915061501882614fb1565b604082019050919050565b6000602082019050818103600083015261503c81615000565b9050919050565b7f5b66726f6d5d20626c61636b206c697374000000000000000000000000000000600082015250565b6000615079601183613f18565b915061508482615043565b602082019050919050565b600060208201905081810360008301526150a88161506c565b9050919050565b7f5b746f5d20626c61636b206c6973740000000000000000000000000000000000600082015250565b60006150e5600f83613f18565b91506150f0826150af565b602082019050919050565b60006020820190508181036000830152615114816150d8565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000615151601683613f18565b915061515c8261511b565b602082019050919050565b6000602082019050818103600083015261518081615144565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416c6c6f7765642e00000000000000000000602082015250565b60006151e3603683613f18565b91506151ee82615187565b604082019050919050565b60006020820190508181036000830152615212816151d6565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061524f601383613f18565b915061525a82615219565b602082019050919050565b6000602082019050818103600083015261527e81615242565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416c6c6f7765642e000000000000000000602082015250565b60006152e1603783613f18565b91506152ec82615285565b604082019050919050565b60006020820190508181036000830152615310816152d4565b9050919050565b600081519050615326816141c3565b92915050565b60006020828403121561534257615341613e02565b5b600061535084828501615317565b91505092915050565b600060c08201905061536e6000830189614162565b61537b6020830188614162565b6153886040830187614162565b61539560608301866140b8565b6153a260808301856140b8565b6153af60a08301846140b8565b979650505050505050565b7f416e746920447261696e657220456e61626c6564000000000000000000000000600082015250565b60006153f0601483613f18565b91506153fb826153ba565b602082019050919050565b6000602082019050818103600083015261541f816153e3565b9050919050565b600061543182613e0c565b915061543c83613e0c565b92508282101561544f5761544e614482565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006154b6602683613f18565b91506154c18261545a565b604082019050919050565b600060208201905081810360008301526154e5816154a9565b9050919050565b600081905092915050565b50565b60006155076000836154ec565b9150615512826154f7565b600082019050919050565b6000615528826154fa565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008151905061557081613eb4565b92915050565b60006020828403121561558c5761558b613e02565b5b600061559a84828501615561565b91505092915050565b6000819050919050565b60006155c86155c36155be846155a3565b61403e565b613e0c565b9050919050565b6155d8816155ad565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61561381613ea2565b82525050565b6000615625838361560a565b60208301905092915050565b6000602082019050919050565b6000615649826155de565b61565381856155e9565b935061565e836155fa565b8060005b8381101561568f5781516156768882615619565b975061568183615631565b925050600181019050615662565b5085935050505092915050565b600060a0820190506156b160008301886140b8565b6156be60208301876155cf565b81810360408301526156d0818661563e565b90506156df6060830185614162565b6156ec60808301846140b8565b969550505050505056fea26469706673582212202c3c4fb34a1dd4104d9385a91f74b81eca2a36a40f34855e19bd652eb283a2bc64736f6c634300080a0033

Deployed Bytecode Sourcemap

15210:14111:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22483:318;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23686:173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2625:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3539:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15288:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2946:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15963:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21203:277;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3716:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15436:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2845:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15371:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15588:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4216:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15336:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15632:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23867:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16150:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23505:173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22164:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21785:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15856:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15712:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3062:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;773:103;;;;;;;;;;;;;:::i;:::-;;20507:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15786:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19058:112;;;;;;;;;;;;;:::i;:::-;;550:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20248:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15891:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22056:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2733:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22999:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15823:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16003:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15929:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4439:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3197:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19178:1062;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15505:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16223:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18868:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15672:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21488:289;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22809:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15468:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20698:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15752:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3380:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15548:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;884:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22483:318;696:12;:10;:12::i;:::-;685:23;;:7;:5;:7::i;:::-;:23;;;677:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22621:13:::1;22602:16;:32;;;;22658:7;22645:10;:20;;;;22711:10;;22692:16;;:29;;;;:::i;:::-;22676:13;:45;;;;22757:2;22740:13;;:19;;22732:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;22483:318:::0;;:::o;23686:173::-;696:12;:10;:12::i;:::-;685:23;;:7;:5;:7::i;:::-;:23;;;677:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23801:13:::1;;;;;;;;;;;23769:46;;23790:9;23769:46;;;;;;;;;;;;23842:9;23826:13;;:25;;;;;;;;;;;;;;;;;;23686:173:::0;:::o;2625:100::-;2679:13;2712:5;2705:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2625:100;:::o;3539:169::-;3622:4;3639:39;3648:12;:10;:12::i;:::-;3662:7;3671:6;3639:8;:39::i;:::-;3696:4;3689:11;;3539:169;;;;:::o;15288:41::-;;;;;;;;;;;;;:::o;2946:108::-;3007:7;3034:12;;3027:19;;2946:108;:::o;15963:33::-;;;;:::o;21203:277::-;696:12;:10;:12::i;:::-;685:23;;:7;:5;:7::i;:::-;:23;;;677:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21340:4:::1;21332;21327:1;21311:13;:11;:13::i;:::-;:17;;;;:::i;:::-;21310:26;;;;:::i;:::-;21309:35;;;;:::i;:::-;21299:6;:45;;21277:143;;;;;;;;;;;;:::i;:::-;;;;;;;;;21465:6;21455;:17;;;;:::i;:::-;21431:21;:41;;;;21203:277:::0;:::o;3716:492::-;3856:4;3873:36;3883:6;3891:9;3902:6;3873:9;:36::i;:::-;3922:24;3949:11;:19;3961:6;3949:19;;;;;;;;;;;;;;;:33;3969:12;:10;:12::i;:::-;3949:33;;;;;;;;;;;;;;;;3922:60;;4021:6;4001:16;:26;;3993:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;4108:57;4117:6;4125:12;:10;:12::i;:::-;4158:6;4139:16;:25;4108:8;:57::i;:::-;4196:4;4189:11;;;3716:492;;;;;:::o;15436:25::-;;;;;;;;;;;;;:::o;2845:93::-;2903:5;2928:2;2921:9;;2845:93;:::o;15371:26::-;;;;;;;;;;;;;:::o;15588:35::-;;;;:::o;4216:215::-;4304:4;4321:80;4330:12;:10;:12::i;:::-;4344:7;4390:10;4353:11;:25;4365:12;:10;:12::i;:::-;4353:25;;;;;;;;;;;;;;;:34;4379:7;4353:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;4321:8;:80::i;:::-;4419:4;4412:11;;4216:215;;;;:::o;15336:28::-;;;;;;;;;;;;;:::o;15632:33::-;;;;;;;;;;;;;:::o;23867:126::-;23933:4;23957:19;:28;23977:7;23957:28;;;;;;;;;;;;;;;;;;;;;;;;;23950:35;;23867:126;;;:::o;16150:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;23505:173::-;696:12;:10;:12::i;:::-;685:23;;:7;:5;:7::i;:::-;:23;;;677:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23622:10:::1;;;;;;;;;;;23589:44;;23607:13;23589:44;;;;;;;;;;;;23657:13;23644:10;;:26;;;;;;;;;;;;;;;;;;23505:173:::0;:::o;22164:311::-;696:12;:10;:12::i;:::-;685:23;;:7;:5;:7::i;:::-;:23;;;677:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22300:13:::1;22282:15;:31;;;;22336:7;22324:9;:19;;;;22387:9;;22369:15;;:27;;;;:::i;:::-;22354:12;:42;;;;22431:2;22415:12;;:18;;22407:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;22164:311:::0;;:::o;21785:175::-;696:12;:10;:12::i;:::-;685:23;;:7;:5;:7::i;:::-;:23;;;677:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21948:4:::1;21905:32;:40;21938:6;21905:40;;;;;;;;;;;;;;;;:47;;;;;;;;;;;;;;;;;;21785:175:::0;;:::o;15856:28::-;;;;:::o;15712:31::-;;;;;;;;;;;;;:::o;3062:127::-;3136:7;3163:9;:18;3173:7;3163:18;;;;;;;;;;;;;;;;3156:25;;3062:127;;;:::o;773:103::-;696:12;:10;:12::i;:::-;685:23;;:7;:5;:7::i;:::-;:23;;;677:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;838:30:::1;865:1;838:18;:30::i;:::-;773:103::o:0;20507:121::-;20559:4;696:12;:10;:12::i;:::-;685:23;;:7;:5;:7::i;:::-;:23;;;677:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20593:5:::1;20576:14;;:22;;;;;;;;;;;;;;;;;;20616:4;20609:11;;20507:121:::0;:::o;15786:30::-;;;;:::o;19058:112::-;696:12;:10;:12::i;:::-;685:23;;:7;:5;:7::i;:::-;:23;;;677:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19129:4:::1;19113:13;;:20;;;;;;;;;;;;;;;;;;19158:4;19144:11;;:18;;;;;;;;;;;;;;;;;;19058:112::o:0;550:87::-;596:7;623:6;;;;;;;;;;;616:13;;550:87;:::o;20248:207::-;696:12;:10;:12::i;:::-;685:23;;:7;:5;:7::i;:::-;:23;;;677:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20347:9:::1;20342:106;20366:7;;:14;;20362:1;:18;20342:106;;;20429:7;20402:12;:24;20415:7;;20423:1;20415:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;20402:24;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;20382:3;;;;;:::i;:::-;;;;20342:106;;;;20248:207:::0;;;:::o;15891:31::-;;;;:::o;22056:100::-;696:12;:10;:12::i;:::-;685:23;;:7;:5;:7::i;:::-;:23;;;677:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22141:7:::1;22127:11;;:21;;;;;;;;;;;;;;;;;;22056:100:::0;:::o;2733:104::-;2789:13;2822:7;2815:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2733:104;:::o;22999:304::-;696:12;:10;:12::i;:::-;685:23;;:7;:5;:7::i;:::-;:23;;;677:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23143:13:::1;;;;;;;;;;;23135:21;;:4;:21;;;;23113:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;23254:41;23283:4;23289:5;23254:28;:41::i;:::-;22999:304:::0;;:::o;15823:24::-;;;;:::o;16003:27::-;;;;:::o;15929:25::-;;;;:::o;4439:413::-;4532:4;4549:24;4576:11;:25;4588:12;:10;:12::i;:::-;4576:25;;;;;;;;;;;;;;;:34;4602:7;4576:34;;;;;;;;;;;;;;;;4549:61;;4649:15;4629:16;:35;;4621:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;4742:67;4751:12;:10;:12::i;:::-;4765:7;4793:15;4774:16;:34;4742:8;:67::i;:::-;4840:4;4833:11;;;4439:413;;;;:::o;3197:175::-;3283:4;3300:42;3310:12;:10;:12::i;:::-;3324:9;3335:6;3300:9;:42::i;:::-;3360:4;3353:11;;3197:175;;;;:::o;19178:1062::-;19262:18;19336:95;19460:22;;;;;;;;;;;;;;;;;19450:33;;;;;;19512:10;;;;;;;;;;;;;;;;;19502:21;;;;;;19542:13;19582:4;19307:295;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;19283:330;;;;;;19262:351;;19626:18;19700:49;19778:23;;;;;;;;;;;;;;;;;19768:34;;;;;;19829:1;19671:175;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;19647:210;;;;;;19626:231;;19870:14;19975:10;20004;19911:134;;;;;;;;;:::i;:::-;;;;;;;;;;;;;19887:169;;;;;;19870:186;;20069:14;20086:26;20096:6;20104:1;20107;20110;20086:26;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20069:43;;20141:7;:5;:7::i;:::-;20131:17;;:6;:17;;;20123:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;20199:4;20183:13;;:20;;;;;;;;;;;;;;;;;;20228:4;20214:11;;:18;;;;;;;;;;;;;;;;;;19251:989;;;;19178:1062;;;:::o;15505:36::-;;;;:::o;16223:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;18868:182::-;696:12;:10;:12::i;:::-;685:23;;:7;:5;:7::i;:::-;:23;;;677:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18976:3:::1;18952:28;;:12;:28;;;;18944:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;19030:12;19016:11;;:26;;;;;;;;;;;;;;;;;;18868:182:::0;:::o;15672:33::-;;;;;;;;;;;;;:::o;21488:289::-;696:12;:10;:12::i;:::-;685:23;;:7;:5;:7::i;:::-;:23;;;677:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21639:4:::1;21631;21626:1;21610:13;:11;:13::i;:::-;:17;;;;:::i;:::-;21609:26;;;;:::i;:::-;21608:35;;;;:::i;:::-;21598:6;:45;;21576:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;21762:6;21752;:17;;;;:::i;:::-;21729:20;:40;;;;21488:289:::0;:::o;22809:182::-;696:12;:10;:12::i;:::-;685:23;;:7;:5;:7::i;:::-;:23;;;677:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22925:8:::1;22894:19;:28;22914:7;22894:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;22965:7;22949:34;;;22974:8;22949:34;;;;;;:::i;:::-;;;;;;;;22809:182:::0;;:::o;15468:28::-;;;;;;;;;;;;;:::o;20698:497::-;20806:4;696:12;:10;:12::i;:::-;685:23;;:7;:5;:7::i;:::-;:23;;;677:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20885:6:::1;20880:1;20864:13;:11;:13::i;:::-;:17;;;;:::i;:::-;20863:28;;;;:::i;:::-;20850:9;:41;;20828:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;21040:4;21035:1;21019:13;:11;:13::i;:::-;:17;;;;:::i;:::-;21018:26;;;;:::i;:::-;21005:9;:39;;20983:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;21156:9;21135:18;:30;;;;21183:4;21176:11;;20698:497:::0;;;:::o;15752:27::-;;;;:::o;3380:151::-;3469:7;3496:11;:18;3508:5;3496:18;;;;;;;;;;;;;;;:27;3515:7;3496:27;;;;;;;;;;;;;;;;3489:34;;3380:151;;;;:::o;15548:33::-;;;;:::o;884:201::-;696:12;:10;:12::i;:::-;685:23;;:7;:5;:7::i;:::-;:23;;;677:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;993:1:::1;973:22;;:8;:22;;;;965:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;1049:28;1068:8;1049:18;:28::i;:::-;884:201:::0;:::o;96:98::-;149:7;176:10;169:17;;96:98;:::o;6607:380::-;6760:1;6743:19;;:5;:19;;;;6735:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6841:1;6822:21;;:7;:21;;;;6814:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6925:6;6895:11;:18;6907:5;6895:18;;;;;;;;;;;;;;;:27;6914:7;6895:27;;;;;;;;;;;;;;;:36;;;;6963:7;6947:32;;6956:5;6947:32;;;6972:6;6947:32;;;;;;:::i;:::-;;;;;;;;6607:380;;;:::o;24001:3692::-;24149:1;24133:18;;:4;:18;;;;24125:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24226:1;24212:16;;:2;:16;;;;24204:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;24288:12;:18;24301:4;24288:18;;;;;;;;;;;;;;;;;;;;;;;;;24287:19;24279:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;24348:12;:16;24361:2;24348:16;;;;;;;;;;;;;;;;;;;;;;;;;24347:17;24339:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;24411:1;24401:6;:11;24397:93;;;24429:28;24445:4;24451:2;24455:1;24429:15;:28::i;:::-;24472:7;;24397:93;24506:14;;;;;;;;;;;24502:1221;;;24549:7;:5;:7::i;:::-;24541:15;;:4;:15;;;;:49;;;;;24583:7;:5;:7::i;:::-;24577:13;;:2;:13;;;;24541:49;:86;;;;;24625:1;24611:16;;:2;:16;;;;24541:86;:128;;;;;24662:6;24648:21;;:2;:21;;;;24541:128;:158;;;;;24691:8;;;;;;;;;;;24690:9;24541:158;24537:1175;;;24725:13;;;;;;;;;;;24720:150;;24771:19;:25;24791:4;24771:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;24800:19;:23;24820:2;24800:23;;;;;;;;;;;;;;;;;;;;;;;;;24771:52;24763:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;24720:150;24922:25;:31;24948:4;24922:31;;;;;;;;;;;;;;;;;;;;;;;;;:72;;;;;24958:32;:36;24991:2;24958:36;;;;;;;;;;;;;;;;;;;;;;;;;24957:37;24922:72;24918:779;;;25037:21;;25027:6;:31;;25019:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;25174:20;;25157:13;25167:2;25157:9;:13::i;:::-;25148:6;:22;;;;:::i;:::-;:46;;25140:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;24918:779;;;25294:25;:29;25320:2;25294:29;;;;;;;;;;;;;;;;;;;;;;;;;:72;;;;;25328:32;:38;25361:4;25328:38;;;;;;;;;;;;;;;;;;;;;;;;;25327:39;25294:72;25290:407;;;25409:21;;25399:6;:31;;25391:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;25290:407;;;25538:32;:36;25571:2;25538:36;;;;;;;;;;;;;;;;;;;;;;;;;25533:164;;25633:20;;25616:13;25626:2;25616:9;:13::i;:::-;25607:6;:22;;;;:::i;:::-;:46;;25599:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;25533:164;25290:407;24918:779;24537:1175;24502:1221;25762:1;25739:25;;:11;;;;;;;;;;;:25;;;;:79;;;;;25781:11;;;;;;;;;;;25768:35;;;25812:4;25768:50;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25739:79;25735:308;;;25835:10;25861:11;;;;;;;;;;;25848:31;;;25880:4;25886:2;25898:13;;;;;;;;;;;25914:20;;25936:21;;25959:18;;25848:130;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25835:143;;26001:5;25993:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;25820:223;25735:308;26055:28;26086:24;26104:4;26086:9;:24::i;:::-;26055:55;;26121:12;26160:18;;26136:20;:42;;26121:57;;26193:7;:35;;;;;26217:11;;;;;;;;;;;26193:35;:61;;;;;26246:8;;;;;;;;;;;26245:9;26193:61;:107;;;;;26271:25;:29;26297:2;26271:29;;;;;;;;;;;;;;;;;;;;;;;;;26193:107;:150;;;;;26318:19;:25;26338:4;26318:25;;;;;;;;;;;;;;;;;;;;;;;;;26317:26;26193:150;:191;;;;;26361:19;:23;26381:2;26361:23;;;;;;;;;;;;;;;;;;;;;;;;;26360:24;26193:191;26189:297;;;26414:4;26403:8;;:15;;;;;;;;;;;;;;;;;;26433:10;:8;:10::i;:::-;26469:5;26458:8;;:16;;;;;;;;;;;;;;;;;;26189:297;26498:12;26514:8;;;;;;;;;;;26513:9;26498:24;;26624:19;:25;26644:4;26624:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;26653:19;:23;26673:2;26653:23;;;;;;;;;;;;;;;;;;;;;;;;;26624:52;26620:100;;;26703:5;26693:15;;26620:100;26732:12;26837:7;26833:807;;;26889:25;:29;26915:2;26889:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;26938:1;26922:13;;:17;26889:50;26885:606;;;26967:34;26997:3;26967:25;26978:13;;26967:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;26960:41;;27058:13;;27044:10;;27037:4;:17;;;;:::i;:::-;27036:35;;;;:::i;:::-;27020:12;;:51;;;;;;;:::i;:::-;;;;;;;;27140:13;;27120:16;;27113:4;:23;;;;:::i;:::-;27112:41;;;;:::i;:::-;27090:18;;:63;;;;;;;:::i;:::-;;;;;;;;26885:606;;;27215:25;:31;27241:4;27215:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;27265:1;27250:12;;:16;27215:51;27211:280;;;27294:33;27323:3;27294:24;27305:12;;27294:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;27287:40;;27383:12;;27370:9;;27363:4;:16;;;;:::i;:::-;27362:33;;;;:::i;:::-;27346:12;;:49;;;;;;;:::i;:::-;;;;;;;;27463:12;;27444:15;;27437:4;:22;;;;:::i;:::-;27436:39;;;;:::i;:::-;27414:18;;:61;;;;;;;:::i;:::-;;;;;;;;27211:280;26885:606;27518:1;27511:4;:8;27507:91;;;27540:42;27556:4;27570;27577;27540:15;:42::i;:::-;27507:91;27624:4;27614:14;;;;;:::i;:::-;;;26833:807;27652:33;27668:4;27674:2;27678:6;27652:15;:33::i;:::-;24114:3579;;;;24001:3692;;;;:::o;1093:191::-;1167:16;1186:6;;;;;;;;;;;1167:25;;1212:8;1203:6;;:17;;;;;;;;;;;;;;;;;;1267:8;1236:40;;1257:8;1236:40;;;;;;;;;;;;1156:128;1093:191;:::o;23311:186::-;23428:5;23394:25;:31;23420:4;23394:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;23483:5;23449:40;;23477:4;23449:40;;;;;;;;;;;;23311:186;;:::o;4860:733::-;5018:1;5000:20;;:6;:20;;;;4992:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;5102:1;5081:23;;:9;:23;;;;5073:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;5157:47;5178:6;5186:9;5197:6;5157:20;:47::i;:::-;5217:21;5241:9;:17;5251:6;5241:17;;;;;;;;;;;;;;;;5217:41;;5294:6;5277:13;:23;;5269:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;5415:6;5399:13;:22;5379:9;:17;5389:6;5379:17;;;;;;;;;;;;;;;:42;;;;5467:6;5443:9;:20;5453:9;5443:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;5508:9;5491:35;;5500:6;5491:35;;;5519:6;5491:35;;;;;;:::i;:::-;;;;;;;;5539:46;5559:6;5567:9;5578:6;5539:19;:46::i;:::-;4981:612;4860:733;;;:::o;28413:905::-;28452:23;28478:24;28496:4;28478:9;:24::i;:::-;28452:50;;28513:25;28562:12;;28541:18;;:33;;;;:::i;:::-;28513:61;;28585:12;28633:1;28614:15;:20;:46;;;;28659:1;28638:17;:22;28614:46;28610:85;;;28677:7;;;;;28610:85;28750:2;28729:18;;:23;;;;:::i;:::-;28711:15;:41;28707:115;;;28808:2;28787:18;;:23;;;;:::i;:::-;28769:41;;28707:115;28834:25;28862:21;28834:49;;28894:33;28911:15;28894:16;:33::i;:::-;28940:18;28961:44;28987:17;28961:21;:25;;:44;;;;:::i;:::-;28940:65;;29016:17;29036:51;29069:17;29036:28;29051:12;;29036:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;29016:71;;29121:1;29100:18;:22;;;;29148:1;29133:12;:16;;;;29184:13;;;;;;;;;;;29176:27;;29211:9;29176:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29162:63;;;;;29258:10;;;;;;;;;;;29250:24;;29283:21;29250:60;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29236:74;;;;;28441:877;;;;;;28413:905;:::o;8611:98::-;8669:7;8700:1;8696;:5;;;;:::i;:::-;8689:12;;8611:98;;;;:::o;8717:::-;8775:7;8806:1;8802;:5;;;;:::i;:::-;8795:12;;8717:98;;;;:::o;6995:125::-;;;;:::o;7128:124::-;;;;:::o;27816:589::-;27942:21;27980:1;27966:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27942:40;;28011:4;27993;27998:1;27993:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;28037:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28027:4;28032:1;28027:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;28072:62;28089:4;28104:15;;;;;;;;;;;28122:11;28072:8;:62::i;:::-;28173:15;;;;;;;;;;;:66;;;28254:11;28280:1;28324:4;28351;28371:15;28173:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27871:534;27816:589;:::o;8505:98::-;8563:7;8594:1;8590;:5;;;;:::i;:::-;8583:12;;8505:98;;;;:::o;88:117:1:-;197:1;194;187:12;211:117;320:1;317;310:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:126::-;1207:7;1247:42;1240:5;1236:54;1225:65;;1170:126;;;:::o;1302:96::-;1339:7;1368:24;1386:5;1368:24;:::i;:::-;1357:35;;1302:96;;;:::o;1404:122::-;1477:24;1495:5;1477:24;:::i;:::-;1470:5;1467:35;1457:63;;1516:1;1513;1506:12;1457:63;1404:122;:::o;1532:139::-;1578:5;1616:6;1603:20;1594:29;;1632:33;1659:5;1632:33;:::i;:::-;1532:139;;;;:::o;1677:329::-;1736:6;1785:2;1773:9;1764:7;1760:23;1756:32;1753:119;;;1791:79;;:::i;:::-;1753:119;1911:1;1936:53;1981:7;1972:6;1961:9;1957:22;1936:53;:::i;:::-;1926:63;;1882:117;1677:329;;;;:::o;2012:99::-;2064:6;2098:5;2092:12;2082:22;;2012:99;;;:::o;2117:169::-;2201:11;2235:6;2230:3;2223:19;2275:4;2270:3;2266:14;2251:29;;2117:169;;;;:::o;2292:307::-;2360:1;2370:113;2384:6;2381:1;2378:13;2370:113;;;2469:1;2464:3;2460:11;2454:18;2450:1;2445:3;2441:11;2434:39;2406:2;2403:1;2399:10;2394:15;;2370:113;;;2501:6;2498:1;2495:13;2492:101;;;2581:1;2572:6;2567:3;2563:16;2556:27;2492:101;2341:258;2292:307;;;:::o;2605:102::-;2646:6;2697:2;2693:7;2688:2;2681:5;2677:14;2673:28;2663:38;;2605:102;;;:::o;2713:364::-;2801:3;2829:39;2862:5;2829:39;:::i;:::-;2884:71;2948:6;2943:3;2884:71;:::i;:::-;2877:78;;2964:52;3009:6;3004:3;2997:4;2990:5;2986:16;2964:52;:::i;:::-;3041:29;3063:6;3041:29;:::i;:::-;3036:3;3032:39;3025:46;;2805:272;2713:364;;;;:::o;3083:313::-;3196:4;3234:2;3223:9;3219:18;3211:26;;3283:9;3277:4;3273:20;3269:1;3258:9;3254:17;3247:47;3311:78;3384:4;3375:6;3311:78;:::i;:::-;3303:86;;3083:313;;;;:::o;3402:474::-;3470:6;3478;3527:2;3515:9;3506:7;3502:23;3498:32;3495:119;;;3533:79;;:::i;:::-;3495:119;3653:1;3678:53;3723:7;3714:6;3703:9;3699:22;3678:53;:::i;:::-;3668:63;;3624:117;3780:2;3806:53;3851:7;3842:6;3831:9;3827:22;3806:53;:::i;:::-;3796:63;;3751:118;3402:474;;;;;:::o;3882:90::-;3916:7;3959:5;3952:13;3945:21;3934:32;;3882:90;;;:::o;3978:109::-;4059:21;4074:5;4059:21;:::i;:::-;4054:3;4047:34;3978:109;;:::o;4093:210::-;4180:4;4218:2;4207:9;4203:18;4195:26;;4231:65;4293:1;4282:9;4278:17;4269:6;4231:65;:::i;:::-;4093:210;;;;:::o;4309:60::-;4337:3;4358:5;4351:12;;4309:60;;;:::o;4375:142::-;4425:9;4458:53;4476:34;4485:24;4503:5;4485:24;:::i;:::-;4476:34;:::i;:::-;4458:53;:::i;:::-;4445:66;;4375:142;;;:::o;4523:126::-;4573:9;4606:37;4637:5;4606:37;:::i;:::-;4593:50;;4523:126;;;:::o;4655:153::-;4732:9;4765:37;4796:5;4765:37;:::i;:::-;4752:50;;4655:153;;;:::o;4814:185::-;4928:64;4986:5;4928:64;:::i;:::-;4923:3;4916:77;4814:185;;:::o;5005:276::-;5125:4;5163:2;5152:9;5148:18;5140:26;;5176:98;5271:1;5260:9;5256:17;5247:6;5176:98;:::i;:::-;5005:276;;;;:::o;5287:118::-;5374:24;5392:5;5374:24;:::i;:::-;5369:3;5362:37;5287:118;;:::o;5411:222::-;5504:4;5542:2;5531:9;5527:18;5519:26;;5555:71;5623:1;5612:9;5608:17;5599:6;5555:71;:::i;:::-;5411:222;;;;:::o;5639:329::-;5698:6;5747:2;5735:9;5726:7;5722:23;5718:32;5715:119;;;5753:79;;:::i;:::-;5715:119;5873:1;5898:53;5943:7;5934:6;5923:9;5919:22;5898:53;:::i;:::-;5888:63;;5844:117;5639:329;;;;:::o;5974:619::-;6051:6;6059;6067;6116:2;6104:9;6095:7;6091:23;6087:32;6084:119;;;6122:79;;:::i;:::-;6084:119;6242:1;6267:53;6312:7;6303:6;6292:9;6288:22;6267:53;:::i;:::-;6257:63;;6213:117;6369:2;6395:53;6440:7;6431:6;6420:9;6416:22;6395:53;:::i;:::-;6385:63;;6340:118;6497:2;6523:53;6568:7;6559:6;6548:9;6544:22;6523:53;:::i;:::-;6513:63;;6468:118;5974:619;;;;;:::o;6599:118::-;6686:24;6704:5;6686:24;:::i;:::-;6681:3;6674:37;6599:118;;:::o;6723:222::-;6816:4;6854:2;6843:9;6839:18;6831:26;;6867:71;6935:1;6924:9;6920:17;6911:6;6867:71;:::i;:::-;6723:222;;;;:::o;6951:86::-;6986:7;7026:4;7019:5;7015:16;7004:27;;6951:86;;;:::o;7043:112::-;7126:22;7142:5;7126:22;:::i;:::-;7121:3;7114:35;7043:112;;:::o;7161:214::-;7250:4;7288:2;7277:9;7273:18;7265:26;;7301:67;7365:1;7354:9;7350:17;7341:6;7301:67;:::i;:::-;7161:214;;;;:::o;7381:116::-;7451:21;7466:5;7451:21;:::i;:::-;7444:5;7441:32;7431:60;;7487:1;7484;7477:12;7431:60;7381:116;:::o;7503:133::-;7546:5;7584:6;7571:20;7562:29;;7600:30;7624:5;7600:30;:::i;:::-;7503:133;;;;:::o;7642:468::-;7707:6;7715;7764:2;7752:9;7743:7;7739:23;7735:32;7732:119;;;7770:79;;:::i;:::-;7732:119;7890:1;7915:53;7960:7;7951:6;7940:9;7936:22;7915:53;:::i;:::-;7905:63;;7861:117;8017:2;8043:50;8085:7;8076:6;8065:9;8061:22;8043:50;:::i;:::-;8033:60;;7988:115;7642:468;;;;;:::o;8116:117::-;8225:1;8222;8215:12;8239:117;8348:1;8345;8338:12;8362:117;8471:1;8468;8461:12;8502:568;8575:8;8585:6;8635:3;8628:4;8620:6;8616:17;8612:27;8602:122;;8643:79;;:::i;:::-;8602:122;8756:6;8743:20;8733:30;;8786:18;8778:6;8775:30;8772:117;;;8808:79;;:::i;:::-;8772:117;8922:4;8914:6;8910:17;8898:29;;8976:3;8968:4;8960:6;8956:17;8946:8;8942:32;8939:41;8936:128;;;8983:79;;:::i;:::-;8936:128;8502:568;;;;;:::o;9076:698::-;9168:6;9176;9184;9233:2;9221:9;9212:7;9208:23;9204:32;9201:119;;;9239:79;;:::i;:::-;9201:119;9387:1;9376:9;9372:17;9359:31;9417:18;9409:6;9406:30;9403:117;;;9439:79;;:::i;:::-;9403:117;9552:80;9624:7;9615:6;9604:9;9600:22;9552:80;:::i;:::-;9534:98;;;;9330:312;9681:2;9707:50;9749:7;9740:6;9729:9;9725:22;9707:50;:::i;:::-;9697:60;;9652:115;9076:698;;;;;:::o;9780:323::-;9836:6;9885:2;9873:9;9864:7;9860:23;9856:32;9853:119;;;9891:79;;:::i;:::-;9853:119;10011:1;10036:50;10078:7;10069:6;10058:9;10054:22;10036:50;:::i;:::-;10026:60;;9982:114;9780:323;;;;:::o;10109:118::-;10180:22;10196:5;10180:22;:::i;:::-;10173:5;10170:33;10160:61;;10217:1;10214;10207:12;10160:61;10109:118;:::o;10233:135::-;10277:5;10315:6;10302:20;10293:29;;10331:31;10356:5;10331:31;:::i;:::-;10233:135;;;;:::o;10374:77::-;10411:7;10440:5;10429:16;;10374:77;;;:::o;10457:122::-;10530:24;10548:5;10530:24;:::i;:::-;10523:5;10520:35;10510:63;;10569:1;10566;10559:12;10510:63;10457:122;:::o;10585:139::-;10631:5;10669:6;10656:20;10647:29;;10685:33;10712:5;10685:33;:::i;:::-;10585:139;;;;:::o;10730:615::-;10805:6;10813;10821;10870:2;10858:9;10849:7;10845:23;10841:32;10838:119;;;10876:79;;:::i;:::-;10838:119;10996:1;11021:51;11064:7;11055:6;11044:9;11040:22;11021:51;:::i;:::-;11011:61;;10967:115;11121:2;11147:53;11192:7;11183:6;11172:9;11168:22;11147:53;:::i;:::-;11137:63;;11092:118;11249:2;11275:53;11320:7;11311:6;11300:9;11296:22;11275:53;:::i;:::-;11265:63;;11220:118;10730:615;;;;;:::o;11351:474::-;11419:6;11427;11476:2;11464:9;11455:7;11451:23;11447:32;11444:119;;;11482:79;;:::i;:::-;11444:119;11602:1;11627:53;11672:7;11663:6;11652:9;11648:22;11627:53;:::i;:::-;11617:63;;11573:117;11729:2;11755:53;11800:7;11791:6;11780:9;11776:22;11755:53;:::i;:::-;11745:63;;11700:118;11351:474;;;;;:::o;11831:182::-;11971:34;11967:1;11959:6;11955:14;11948:58;11831:182;:::o;12019:366::-;12161:3;12182:67;12246:2;12241:3;12182:67;:::i;:::-;12175:74;;12258:93;12347:3;12258:93;:::i;:::-;12376:2;12371:3;12367:12;12360:19;;12019:366;;;:::o;12391:419::-;12557:4;12595:2;12584:9;12580:18;12572:26;;12644:9;12638:4;12634:20;12630:1;12619:9;12615:17;12608:47;12672:131;12798:4;12672:131;:::i;:::-;12664:139;;12391:419;;;:::o;12816:180::-;12864:77;12861:1;12854:88;12961:4;12958:1;12951:15;12985:4;12982:1;12975:15;13002:305;13042:3;13061:20;13079:1;13061:20;:::i;:::-;13056:25;;13095:20;13113:1;13095:20;:::i;:::-;13090:25;;13249:1;13181:66;13177:74;13174:1;13171:81;13168:107;;;13255:18;;:::i;:::-;13168:107;13299:1;13296;13292:9;13285:16;;13002:305;;;;:::o;13313:179::-;13453:31;13449:1;13441:6;13437:14;13430:55;13313:179;:::o;13498:366::-;13640:3;13661:67;13725:2;13720:3;13661:67;:::i;:::-;13654:74;;13737:93;13826:3;13737:93;:::i;:::-;13855:2;13850:3;13846:12;13839:19;;13498:366;;;:::o;13870:419::-;14036:4;14074:2;14063:9;14059:18;14051:26;;14123:9;14117:4;14113:20;14109:1;14098:9;14094:17;14087:47;14151:131;14277:4;14151:131;:::i;:::-;14143:139;;13870:419;;;:::o;14295:180::-;14343:77;14340:1;14333:88;14440:4;14437:1;14430:15;14464:4;14461:1;14454:15;14481:320;14525:6;14562:1;14556:4;14552:12;14542:22;;14609:1;14603:4;14599:12;14630:18;14620:81;;14686:4;14678:6;14674:17;14664:27;;14620:81;14748:2;14740:6;14737:14;14717:18;14714:38;14711:84;;;14767:18;;:::i;:::-;14711:84;14532:269;14481:320;;;:::o;14807:348::-;14847:7;14870:20;14888:1;14870:20;:::i;:::-;14865:25;;14904:20;14922:1;14904:20;:::i;:::-;14899:25;;15092:1;15024:66;15020:74;15017:1;15014:81;15009:1;15002:9;14995:17;14991:105;14988:131;;;15099:18;;:::i;:::-;14988:131;15147:1;15144;15140:9;15129:20;;14807:348;;;;:::o;15161:180::-;15209:77;15206:1;15199:88;15306:4;15303:1;15296:15;15330:4;15327:1;15320:15;15347:185;15387:1;15404:20;15422:1;15404:20;:::i;:::-;15399:25;;15438:20;15456:1;15438:20;:::i;:::-;15433:25;;15477:1;15467:35;;15482:18;;:::i;:::-;15467:35;15524:1;15521;15517:9;15512:14;;15347:185;;;;:::o;15538:235::-;15678:34;15674:1;15666:6;15662:14;15655:58;15747:18;15742:2;15734:6;15730:15;15723:43;15538:235;:::o;15779:366::-;15921:3;15942:67;16006:2;16001:3;15942:67;:::i;:::-;15935:74;;16018:93;16107:3;16018:93;:::i;:::-;16136:2;16131:3;16127:12;16120:19;;15779:366;;;:::o;16151:419::-;16317:4;16355:2;16344:9;16340:18;16332:26;;16404:9;16398:4;16394:20;16390:1;16379:9;16375:17;16368:47;16432:131;16558:4;16432:131;:::i;:::-;16424:139;;16151:419;;;:::o;16576:227::-;16716:34;16712:1;16704:6;16700:14;16693:58;16785:10;16780:2;16772:6;16768:15;16761:35;16576:227;:::o;16809:366::-;16951:3;16972:67;17036:2;17031:3;16972:67;:::i;:::-;16965:74;;17048:93;17137:3;17048:93;:::i;:::-;17166:2;17161:3;17157:12;17150:19;;16809:366;;;:::o;17181:419::-;17347:4;17385:2;17374:9;17370:18;17362:26;;17434:9;17428:4;17424:20;17420:1;17409:9;17405:17;17398:47;17462:131;17588:4;17462:131;:::i;:::-;17454:139;;17181:419;;;:::o;17606:180::-;17654:77;17651:1;17644:88;17751:4;17748:1;17741:15;17775:4;17772:1;17765:15;17792:233;17831:3;17854:24;17872:5;17854:24;:::i;:::-;17845:33;;17900:66;17893:5;17890:77;17887:103;;;17970:18;;:::i;:::-;17887:103;18017:1;18010:5;18006:13;17999:20;;17792:233;;;:::o;18031:244::-;18171:34;18167:1;18159:6;18155:14;18148:58;18240:27;18235:2;18227:6;18223:15;18216:52;18031:244;:::o;18281:366::-;18423:3;18444:67;18508:2;18503:3;18444:67;:::i;:::-;18437:74;;18520:93;18609:3;18520:93;:::i;:::-;18638:2;18633:3;18629:12;18622:19;;18281:366;;;:::o;18653:419::-;18819:4;18857:2;18846:9;18842:18;18834:26;;18906:9;18900:4;18896:20;18892:1;18881:9;18877:17;18870:47;18934:131;19060:4;18934:131;:::i;:::-;18926:139;;18653:419;;;:::o;19078:224::-;19218:34;19214:1;19206:6;19202:14;19195:58;19287:7;19282:2;19274:6;19270:15;19263:32;19078:224;:::o;19308:366::-;19450:3;19471:67;19535:2;19530:3;19471:67;:::i;:::-;19464:74;;19547:93;19636:3;19547:93;:::i;:::-;19665:2;19660:3;19656:12;19649:19;;19308:366;;;:::o;19680:419::-;19846:4;19884:2;19873:9;19869:18;19861:26;;19933:9;19927:4;19923:20;19919:1;19908:9;19904:17;19897:47;19961:131;20087:4;19961:131;:::i;:::-;19953:139;;19680:419;;;:::o;20105:118::-;20192:24;20210:5;20192:24;:::i;:::-;20187:3;20180:37;20105:118;;:::o;20229:664::-;20434:4;20472:3;20461:9;20457:19;20449:27;;20486:71;20554:1;20543:9;20539:17;20530:6;20486:71;:::i;:::-;20567:72;20635:2;20624:9;20620:18;20611:6;20567:72;:::i;:::-;20649;20717:2;20706:9;20702:18;20693:6;20649:72;:::i;:::-;20731;20799:2;20788:9;20784:18;20775:6;20731:72;:::i;:::-;20813:73;20881:3;20870:9;20866:19;20857:6;20813:73;:::i;:::-;20229:664;;;;;;;;:::o;20899:442::-;21048:4;21086:2;21075:9;21071:18;21063:26;;21099:71;21167:1;21156:9;21152:17;21143:6;21099:71;:::i;:::-;21180:72;21248:2;21237:9;21233:18;21224:6;21180:72;:::i;:::-;21262;21330:2;21319:9;21315:18;21306:6;21262:72;:::i;:::-;20899:442;;;;;;:::o;21347:148::-;21449:11;21486:3;21471:18;;21347:148;;;;:::o;21501:214::-;21641:66;21637:1;21629:6;21625:14;21618:90;21501:214;:::o;21721:400::-;21881:3;21902:84;21984:1;21979:3;21902:84;:::i;:::-;21895:91;;21995:93;22084:3;21995:93;:::i;:::-;22113:1;22108:3;22104:11;22097:18;;21721:400;;;:::o;22127:79::-;22166:7;22195:5;22184:16;;22127:79;;;:::o;22212:157::-;22317:45;22337:24;22355:5;22337:24;:::i;:::-;22317:45;:::i;:::-;22312:3;22305:58;22212:157;;:::o;22375:663::-;22616:3;22638:148;22782:3;22638:148;:::i;:::-;22631:155;;22796:75;22867:3;22858:6;22796:75;:::i;:::-;22896:2;22891:3;22887:12;22880:19;;22909:75;22980:3;22971:6;22909:75;:::i;:::-;23009:2;23004:3;23000:12;22993:19;;23029:3;23022:10;;22375:663;;;;;:::o;23044:545::-;23217:4;23255:3;23244:9;23240:19;23232:27;;23269:71;23337:1;23326:9;23322:17;23313:6;23269:71;:::i;:::-;23350:68;23414:2;23403:9;23399:18;23390:6;23350:68;:::i;:::-;23428:72;23496:2;23485:9;23481:18;23472:6;23428:72;:::i;:::-;23510;23578:2;23567:9;23563:18;23554:6;23510:72;:::i;:::-;23044:545;;;;;;;:::o;23595:167::-;23735:19;23731:1;23723:6;23719:14;23712:43;23595:167;:::o;23768:366::-;23910:3;23931:67;23995:2;23990:3;23931:67;:::i;:::-;23924:74;;24007:93;24096:3;24007:93;:::i;:::-;24125:2;24120:3;24116:12;24109:19;;23768:366;;;:::o;24140:419::-;24306:4;24344:2;24333:9;24329:18;24321:26;;24393:9;24387:4;24383:20;24379:1;24368:9;24364:17;24357:47;24421:131;24547:4;24421:131;:::i;:::-;24413:139;;24140:419;;;:::o;24565:170::-;24705:22;24701:1;24693:6;24689:14;24682:46;24565:170;:::o;24741:366::-;24883:3;24904:67;24968:2;24963:3;24904:67;:::i;:::-;24897:74;;24980:93;25069:3;24980:93;:::i;:::-;25098:2;25093:3;25089:12;25082:19;;24741:366;;;:::o;25113:419::-;25279:4;25317:2;25306:9;25302:18;25294:26;;25366:9;25360:4;25356:20;25352:1;25341:9;25337:17;25330:47;25394:131;25520:4;25394:131;:::i;:::-;25386:139;;25113:419;;;:::o;25538:234::-;25678:34;25674:1;25666:6;25662:14;25655:58;25747:17;25742:2;25734:6;25730:15;25723:42;25538:234;:::o;25778:366::-;25920:3;25941:67;26005:2;26000:3;25941:67;:::i;:::-;25934:74;;26017:93;26106:3;26017:93;:::i;:::-;26135:2;26130:3;26126:12;26119:19;;25778:366;;;:::o;26150:419::-;26316:4;26354:2;26343:9;26339:18;26331:26;;26403:9;26397:4;26393:20;26389:1;26378:9;26374:17;26367:47;26431:131;26557:4;26431:131;:::i;:::-;26423:139;;26150:419;;;:::o;26575:240::-;26715:34;26711:1;26703:6;26699:14;26692:58;26784:23;26779:2;26771:6;26767:15;26760:48;26575:240;:::o;26821:366::-;26963:3;26984:67;27048:2;27043:3;26984:67;:::i;:::-;26977:74;;27060:93;27149:3;27060:93;:::i;:::-;27178:2;27173:3;27169:12;27162:19;;26821:366;;;:::o;27193:419::-;27359:4;27397:2;27386:9;27382:18;27374:26;;27446:9;27440:4;27436:20;27432:1;27421:9;27417:17;27410:47;27474:131;27600:4;27474:131;:::i;:::-;27466:139;;27193:419;;;:::o;27618:239::-;27758:34;27754:1;27746:6;27742:14;27735:58;27827:22;27822:2;27814:6;27810:15;27803:47;27618:239;:::o;27863:366::-;28005:3;28026:67;28090:2;28085:3;28026:67;:::i;:::-;28019:74;;28102:93;28191:3;28102:93;:::i;:::-;28220:2;28215:3;28211:12;28204:19;;27863:366;;;:::o;28235:419::-;28401:4;28439:2;28428:9;28424:18;28416:26;;28488:9;28482:4;28478:20;28474:1;28463:9;28459:17;28452:47;28516:131;28642:4;28516:131;:::i;:::-;28508:139;;28235:419;;;:::o;28660:225::-;28800:34;28796:1;28788:6;28784:14;28777:58;28869:8;28864:2;28856:6;28852:15;28845:33;28660:225;:::o;28891:366::-;29033:3;29054:67;29118:2;29113:3;29054:67;:::i;:::-;29047:74;;29130:93;29219:3;29130:93;:::i;:::-;29248:2;29243:3;29239:12;29232:19;;28891:366;;;:::o;29263:419::-;29429:4;29467:2;29456:9;29452:18;29444:26;;29516:9;29510:4;29506:20;29502:1;29491:9;29487:17;29480:47;29544:131;29670:4;29544:131;:::i;:::-;29536:139;;29263:419;;;:::o;29688:223::-;29828:34;29824:1;29816:6;29812:14;29805:58;29897:6;29892:2;29884:6;29880:15;29873:31;29688:223;:::o;29917:366::-;30059:3;30080:67;30144:2;30139:3;30080:67;:::i;:::-;30073:74;;30156:93;30245:3;30156:93;:::i;:::-;30274:2;30269:3;30265:12;30258:19;;29917:366;;;:::o;30289:419::-;30455:4;30493:2;30482:9;30478:18;30470:26;;30542:9;30536:4;30532:20;30528:1;30517:9;30513:17;30506:47;30570:131;30696:4;30570:131;:::i;:::-;30562:139;;30289:419;;;:::o;30714:221::-;30854:34;30850:1;30842:6;30838:14;30831:58;30923:4;30918:2;30910:6;30906:15;30899:29;30714:221;:::o;30941:366::-;31083:3;31104:67;31168:2;31163:3;31104:67;:::i;:::-;31097:74;;31180:93;31269:3;31180:93;:::i;:::-;31298:2;31293:3;31289:12;31282:19;;30941:366;;;:::o;31313:419::-;31479:4;31517:2;31506:9;31502:18;31494:26;;31566:9;31560:4;31556:20;31552:1;31541:9;31537:17;31530:47;31594:131;31720:4;31594:131;:::i;:::-;31586:139;;31313:419;;;:::o;31738:224::-;31878:34;31874:1;31866:6;31862:14;31855:58;31947:7;31942:2;31934:6;31930:15;31923:32;31738:224;:::o;31968:366::-;32110:3;32131:67;32195:2;32190:3;32131:67;:::i;:::-;32124:74;;32207:93;32296:3;32207:93;:::i;:::-;32325:2;32320:3;32316:12;32309:19;;31968:366;;;:::o;32340:419::-;32506:4;32544:2;32533:9;32529:18;32521:26;;32593:9;32587:4;32583:20;32579:1;32568:9;32564:17;32557:47;32621:131;32747:4;32621:131;:::i;:::-;32613:139;;32340:419;;;:::o;32765:222::-;32905:34;32901:1;32893:6;32889:14;32882:58;32974:5;32969:2;32961:6;32957:15;32950:30;32765:222;:::o;32993:366::-;33135:3;33156:67;33220:2;33215:3;33156:67;:::i;:::-;33149:74;;33232:93;33321:3;33232:93;:::i;:::-;33350:2;33345:3;33341:12;33334:19;;32993:366;;;:::o;33365:419::-;33531:4;33569:2;33558:9;33554:18;33546:26;;33618:9;33612:4;33608:20;33604:1;33593:9;33589:17;33582:47;33646:131;33772:4;33646:131;:::i;:::-;33638:139;;33365:419;;;:::o;33790:167::-;33930:19;33926:1;33918:6;33914:14;33907:43;33790:167;:::o;33963:366::-;34105:3;34126:67;34190:2;34185:3;34126:67;:::i;:::-;34119:74;;34202:93;34291:3;34202:93;:::i;:::-;34320:2;34315:3;34311:12;34304:19;;33963:366;;;:::o;34335:419::-;34501:4;34539:2;34528:9;34524:18;34516:26;;34588:9;34582:4;34578:20;34574:1;34563:9;34559:17;34552:47;34616:131;34742:4;34616:131;:::i;:::-;34608:139;;34335:419;;;:::o;34760:165::-;34900:17;34896:1;34888:6;34884:14;34877:41;34760:165;:::o;34931:366::-;35073:3;35094:67;35158:2;35153:3;35094:67;:::i;:::-;35087:74;;35170:93;35259:3;35170:93;:::i;:::-;35288:2;35283:3;35279:12;35272:19;;34931:366;;;:::o;35303:419::-;35469:4;35507:2;35496:9;35492:18;35484:26;;35556:9;35550:4;35546:20;35542:1;35531:9;35527:17;35520:47;35584:131;35710:4;35584:131;:::i;:::-;35576:139;;35303:419;;;:::o;35728:172::-;35868:24;35864:1;35856:6;35852:14;35845:48;35728:172;:::o;35906:366::-;36048:3;36069:67;36133:2;36128:3;36069:67;:::i;:::-;36062:74;;36145:93;36234:3;36145:93;:::i;:::-;36263:2;36258:3;36254:12;36247:19;;35906:366;;;:::o;36278:419::-;36444:4;36482:2;36471:9;36467:18;36459:26;;36531:9;36525:4;36521:20;36517:1;36506:9;36502:17;36495:47;36559:131;36685:4;36559:131;:::i;:::-;36551:139;;36278:419;;;:::o;36703:241::-;36843:34;36839:1;36831:6;36827:14;36820:58;36912:24;36907:2;36899:6;36895:15;36888:49;36703:241;:::o;36950:366::-;37092:3;37113:67;37177:2;37172:3;37113:67;:::i;:::-;37106:74;;37189:93;37278:3;37189:93;:::i;:::-;37307:2;37302:3;37298:12;37291:19;;36950:366;;;:::o;37322:419::-;37488:4;37526:2;37515:9;37511:18;37503:26;;37575:9;37569:4;37565:20;37561:1;37550:9;37546:17;37539:47;37603:131;37729:4;37603:131;:::i;:::-;37595:139;;37322:419;;;:::o;37747:169::-;37887:21;37883:1;37875:6;37871:14;37864:45;37747:169;:::o;37922:366::-;38064:3;38085:67;38149:2;38144:3;38085:67;:::i;:::-;38078:74;;38161:93;38250:3;38161:93;:::i;:::-;38279:2;38274:3;38270:12;38263:19;;37922:366;;;:::o;38294:419::-;38460:4;38498:2;38487:9;38483:18;38475:26;;38547:9;38541:4;38537:20;38533:1;38522:9;38518:17;38511:47;38575:131;38701:4;38575:131;:::i;:::-;38567:139;;38294:419;;;:::o;38719:242::-;38859:34;38855:1;38847:6;38843:14;38836:58;38928:25;38923:2;38915:6;38911:15;38904:50;38719:242;:::o;38967:366::-;39109:3;39130:67;39194:2;39189:3;39130:67;:::i;:::-;39123:74;;39206:93;39295:3;39206:93;:::i;:::-;39324:2;39319:3;39315:12;39308:19;;38967:366;;;:::o;39339:419::-;39505:4;39543:2;39532:9;39528:18;39520:26;;39592:9;39586:4;39582:20;39578:1;39567:9;39563:17;39556:47;39620:131;39746:4;39620:131;:::i;:::-;39612:139;;39339:419;;;:::o;39764:137::-;39818:5;39849:6;39843:13;39834:22;;39865:30;39889:5;39865:30;:::i;:::-;39764:137;;;;:::o;39907:345::-;39974:6;40023:2;40011:9;40002:7;39998:23;39994:32;39991:119;;;40029:79;;:::i;:::-;39991:119;40149:1;40174:61;40227:7;40218:6;40207:9;40203:22;40174:61;:::i;:::-;40164:71;;40120:125;39907:345;;;;:::o;40258:775::-;40491:4;40529:3;40518:9;40514:19;40506:27;;40543:71;40611:1;40600:9;40596:17;40587:6;40543:71;:::i;:::-;40624:72;40692:2;40681:9;40677:18;40668:6;40624:72;:::i;:::-;40706;40774:2;40763:9;40759:18;40750:6;40706:72;:::i;:::-;40788;40856:2;40845:9;40841:18;40832:6;40788:72;:::i;:::-;40870:73;40938:3;40927:9;40923:19;40914:6;40870:73;:::i;:::-;40953;41021:3;41010:9;41006:19;40997:6;40953:73;:::i;:::-;40258:775;;;;;;;;;:::o;41039:170::-;41179:22;41175:1;41167:6;41163:14;41156:46;41039:170;:::o;41215:366::-;41357:3;41378:67;41442:2;41437:3;41378:67;:::i;:::-;41371:74;;41454:93;41543:3;41454:93;:::i;:::-;41572:2;41567:3;41563:12;41556:19;;41215:366;;;:::o;41587:419::-;41753:4;41791:2;41780:9;41776:18;41768:26;;41840:9;41834:4;41830:20;41826:1;41815:9;41811:17;41804:47;41868:131;41994:4;41868:131;:::i;:::-;41860:139;;41587:419;;;:::o;42012:191::-;42052:4;42072:20;42090:1;42072:20;:::i;:::-;42067:25;;42106:20;42124:1;42106:20;:::i;:::-;42101:25;;42145:1;42142;42139:8;42136:34;;;42150:18;;:::i;:::-;42136:34;42195:1;42192;42188:9;42180:17;;42012:191;;;;:::o;42209:225::-;42349:34;42345:1;42337:6;42333:14;42326:58;42418:8;42413:2;42405:6;42401:15;42394:33;42209:225;:::o;42440:366::-;42582:3;42603:67;42667:2;42662:3;42603:67;:::i;:::-;42596:74;;42679:93;42768:3;42679:93;:::i;:::-;42797:2;42792:3;42788:12;42781:19;;42440:366;;;:::o;42812:419::-;42978:4;43016:2;43005:9;43001:18;42993:26;;43065:9;43059:4;43055:20;43051:1;43040:9;43036:17;43029:47;43093:131;43219:4;43093:131;:::i;:::-;43085:139;;42812:419;;;:::o;43237:147::-;43338:11;43375:3;43360:18;;43237:147;;;;:::o;43390:114::-;;:::o;43510:398::-;43669:3;43690:83;43771:1;43766:3;43690:83;:::i;:::-;43683:90;;43782:93;43871:3;43782:93;:::i;:::-;43900:1;43895:3;43891:11;43884:18;;43510:398;;;:::o;43914:379::-;44098:3;44120:147;44263:3;44120:147;:::i;:::-;44113:154;;44284:3;44277:10;;43914:379;;;:::o;44299:180::-;44347:77;44344:1;44337:88;44444:4;44441:1;44434:15;44468:4;44465:1;44458:15;44485:143;44542:5;44573:6;44567:13;44558:22;;44589:33;44616:5;44589:33;:::i;:::-;44485:143;;;;:::o;44634:351::-;44704:6;44753:2;44741:9;44732:7;44728:23;44724:32;44721:119;;;44759:79;;:::i;:::-;44721:119;44879:1;44904:64;44960:7;44951:6;44940:9;44936:22;44904:64;:::i;:::-;44894:74;;44850:128;44634:351;;;;:::o;44991:85::-;45036:7;45065:5;45054:16;;44991:85;;;:::o;45082:158::-;45140:9;45173:61;45191:42;45200:32;45226:5;45200:32;:::i;:::-;45191:42;:::i;:::-;45173:61;:::i;:::-;45160:74;;45082:158;;;:::o;45246:147::-;45341:45;45380:5;45341:45;:::i;:::-;45336:3;45329:58;45246:147;;:::o;45399:114::-;45466:6;45500:5;45494:12;45484:22;;45399:114;;;:::o;45519:184::-;45618:11;45652:6;45647:3;45640:19;45692:4;45687:3;45683:14;45668:29;;45519:184;;;;:::o;45709:132::-;45776:4;45799:3;45791:11;;45829:4;45824:3;45820:14;45812:22;;45709:132;;;:::o;45847:108::-;45924:24;45942:5;45924:24;:::i;:::-;45919:3;45912:37;45847:108;;:::o;45961:179::-;46030:10;46051:46;46093:3;46085:6;46051:46;:::i;:::-;46129:4;46124:3;46120:14;46106:28;;45961:179;;;;:::o;46146:113::-;46216:4;46248;46243:3;46239:14;46231:22;;46146:113;;;:::o;46295:732::-;46414:3;46443:54;46491:5;46443:54;:::i;:::-;46513:86;46592:6;46587:3;46513:86;:::i;:::-;46506:93;;46623:56;46673:5;46623:56;:::i;:::-;46702:7;46733:1;46718:284;46743:6;46740:1;46737:13;46718:284;;;46819:6;46813:13;46846:63;46905:3;46890:13;46846:63;:::i;:::-;46839:70;;46932:60;46985:6;46932:60;:::i;:::-;46922:70;;46778:224;46765:1;46762;46758:9;46753:14;;46718:284;;;46722:14;47018:3;47011:10;;46419:608;;;46295:732;;;;:::o;47033:831::-;47296:4;47334:3;47323:9;47319:19;47311:27;;47348:71;47416:1;47405:9;47401:17;47392:6;47348:71;:::i;:::-;47429:80;47505:2;47494:9;47490:18;47481:6;47429:80;:::i;:::-;47556:9;47550:4;47546:20;47541:2;47530:9;47526:18;47519:48;47584:108;47687:4;47678:6;47584:108;:::i;:::-;47576:116;;47702:72;47770:2;47759:9;47755:18;47746:6;47702:72;:::i;:::-;47784:73;47852:3;47841:9;47837:19;47828:6;47784:73;:::i;:::-;47033:831;;;;;;;;:::o

Swarm Source

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