ETH Price: $3,054.87 (+1.32%)
Gas: 3 Gwei

Token

Sage Market (SAGE)
 

Overview

Max Total Supply

100,000,000 SAGE

Holders

378

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0 SAGE

Value
$0.00
0x101745af21d0f0fa93f1758f38c252a1175b9941
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:
Sage

Compiler Version
v0.8.26+commit.8a97fa7a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SAGE
// --an offering, from ceremonies--

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.25;

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

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

abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

interface IERC20 {

    function totalSupply() external view returns (uint256);

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

    function transfer(address recipient, uint256 amount) external returns (bool);

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);

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

interface IERC20Metadata is IERC20 {

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

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

    function decimals() external view returns (uint8);
}

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

library SafeMath {

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

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

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

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

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

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

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

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

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

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

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

    bool private swapping;

    address public marketerWallet;
    address public devsWallet;

    uint256 public maxTx;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallets;

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

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

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

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

    uint256 public tokensForMarkets;
    uint256 public tokensForDev;

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

    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 MarketerWalletUpdated(
        address indexed newWallet,
        address indexed oldMarketerWallet
    );

    event DevsWalletUpdated(
        address indexed newWallet,
        address indexed oldDevWallet
    );

    constructor() ERC20("Sage Market", unicode"SAGE") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

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

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

        uint256 _buyMarketingFee = 20;
        uint256 _buyDevFee = 0;

        uint256 _sellMarketingFee = 50;
        uint256 _sellDevFee = 0;

        uint256 totalSupply = 100_000_000 * 1e18;

        maxTx = 1_000_000 * 1e18; // 1% from total supply 
        maxWallets = 1_000_000 * 1e18; // 1% from total supply
        swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% swap wallet

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

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

        marketerWallet = address(0x987807b56B2d4F41A590f6dF153055432C650044);
        devsWallet = address(0x7600fd0d0fdF22aE50ad64f8Cb0Ce3058E0eAF9D);

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

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

        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

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

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

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

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

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

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

    function excludeFromMaxTx(address updAds, bool isEx)
        public
        onlyOwner
    {
        _isExcludedmaxTx[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 <= 75, "Must keep fees at 75% or less");
    }

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _devFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellDevFee = _devFee;
        sellTotalFees = sellMarketingFee + sellDevFee;
        require(sellTotalFees <= 75, "Must keep fees at 75% 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 updatemarketerWallet(address newmarketerWallet) external onlyOwner {
        emit MarketerWalletUpdated(newmarketerWallet, marketerWallet);
        marketerWallet = newmarketerWallet;
    }

    function updateDevsWallet(address newWallet) external onlyOwner {
        emit DevsWalletUpdated(newWallet, devsWallet);
        devsWallet = newWallet;
    }

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

    event BoughtEarly(address indexed sniper);

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

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

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

        uint256 contractTokenBalance = balanceOf(address(this));
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]) {
            swapping = true;

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

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

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForDev += (fees * sellDevFee) / sellTotalFees;
                tokensForMarkets += (fees * sellMarketingFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForDev += (fees * buyDevFee) / buyTotalFees;
                tokensForMarkets += (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 manualSwap(uint256 amount) external {
        require(_msgSender() == marketerWallet);
        require(amount <= balanceOf(address(this)) && amount > 0, "Wrong amount");
        swapTokensForEth(amount);
    }    

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

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

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

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

        if (contractBalance == 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);

        tokensForMarkets = 0;
        tokensForDev = 0;

        (success, ) = address(devsWallet).call{value: ethForDev}("");
        (success, ) = address(marketerWallet).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":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldDevWallet","type":"address"}],"name":"DevsWalletUpdated","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":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldMarketerWallet","type":"address"}],"name":"MarketerWalletUpdated","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"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedmaxTx","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"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":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devsWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"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":"excludeFromMaxTx","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":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketerWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallets","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarkets","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"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":"address","name":"newWallet","type":"address"}],"name":"updateDevsWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletsAmount","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":"newmarketerWallet","type":"address"}],"name":"updatemarketerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526001600c5f6101000a81548160ff0219169083151502179055505f600c60016101000a81548160ff0219169083151502179055505f600c60026101000a81548160ff0219169083151502179055506001600e5f6101000a81548160ff021916908315150217905550348015610077575f80fd5b506040518060400160405280600b81526020017f53616765204d61726b65740000000000000000000000000000000000000000008152506040518060400160405280600481526020017f534147450000000000000000000000000000000000000000000000000000000081525081600390816100f39190610ca6565b5080600490816101039190610ca6565b50505061012261011761056160201b60201c565b61056860201b60201c565b5f737a250d5630b4cf539739df2c5dacb4c659f2488d905061014b81600161062b60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101c8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101ec9190610dd3565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610251573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102759190610dd3565b6040518363ffffffff1660e01b8152600401610292929190610e0d565b6020604051808303815f875af11580156102ae573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102d29190610dd3565b60065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061034360065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600161062b60201b60201c565b61037560065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600161070b60201b60201c565b5f601490505f80603290505f806a52b7d2dcc80cd2e4000000905069d3c21bcecceda100000060098190555069d3c21bcecceda1000000600b819055506127106005826103c29190610e61565b6103cc9190610ecf565b600a8190555084601081905550836011819055506011546010546103f09190610eff565b600f8190555082601381905550816014819055506014546013546104149190610eff565b60128190555073987807b56b2d4f41a590f6df153055432c65004460075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737600fd0d0fdf22ae50ad64f8cb0ce3058e0eaf9d60085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506104e06104d36107a960201b60201c565b60016107d160201b60201c565b6104f13060016107d160201b60201c565b61050461dead60016107d160201b60201c565b6105226105156107a960201b60201c565b600161062b60201b60201c565b61053330600161062b60201b60201c565b61054661dead600161062b60201b60201c565b61055633826108ff60201b60201c565b50505050505061106d565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61063961056160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1661065d6107a960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146106b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106aa90610f8c565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6107df61056160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166108036107a960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614610859576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085090610f8c565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516108f39190610fc4565b60405180910390a25050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361096d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096490611027565b60405180910390fd5b61097e5f8383610a6260201b60201c565b8060025f82825461098f9190610eff565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546109e19190610eff565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610a459190611054565b60405180910390a3610a5e5f8383610a6760201b60201c565b5050565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680610ae757607f821691505b602082108103610afa57610af9610aa3565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302610b5c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610b21565b610b668683610b21565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f610baa610ba5610ba084610b7e565b610b87565b610b7e565b9050919050565b5f819050919050565b610bc383610b90565b610bd7610bcf82610bb1565b848454610b2d565b825550505050565b5f90565b610beb610bdf565b610bf6818484610bba565b505050565b5b81811015610c1957610c0e5f82610be3565b600181019050610bfc565b5050565b601f821115610c5e57610c2f81610b00565b610c3884610b12565b81016020851015610c47578190505b610c5b610c5385610b12565b830182610bfb565b50505b505050565b5f82821c905092915050565b5f610c7e5f1984600802610c63565b1980831691505092915050565b5f610c968383610c6f565b9150826002028217905092915050565b610caf82610a6c565b67ffffffffffffffff811115610cc857610cc7610a76565b5b610cd28254610ad0565b610cdd828285610c1d565b5f60209050601f831160018114610d0e575f8415610cfc578287015190505b610d068582610c8b565b865550610d6d565b601f198416610d1c86610b00565b5f5b82811015610d4357848901518255600182019150602085019450602081019050610d1e565b86831015610d605784890151610d5c601f891682610c6f565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610da282610d79565b9050919050565b610db281610d98565b8114610dbc575f80fd5b50565b5f81519050610dcd81610da9565b92915050565b5f60208284031215610de857610de7610d75565b5b5f610df584828501610dbf565b91505092915050565b610e0781610d98565b82525050565b5f604082019050610e205f830185610dfe565b610e2d6020830184610dfe565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610e6b82610b7e565b9150610e7683610b7e565b9250828202610e8481610b7e565b91508282048414831517610e9b57610e9a610e34565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f610ed982610b7e565b9150610ee483610b7e565b925082610ef457610ef3610ea2565b5b828204905092915050565b5f610f0982610b7e565b9150610f1483610b7e565b9250828201905080821115610f2c57610f2b610e34565b5b92915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f610f76602083610f32565b9150610f8182610f42565b602082019050919050565b5f6020820190508181035f830152610fa381610f6a565b9050919050565b5f8115159050919050565b610fbe81610faa565b82525050565b5f602082019050610fd75f830184610fb5565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f611011601f83610f32565b915061101c82610fdd565b602082019050919050565b5f6020820190508181035f83015261103e81611005565b9050919050565b61104e81610b7e565b82525050565b5f6020820190506110675f830184611045565b92915050565b60805161525c6110a15f395f8181610df701528181612b27015281816135c5015281816136a401526136cb015261525c5ff3fe60806040526004361061031d575f3560e01c8063924de9b7116101aa578063b819a1a9116100f6578063d85ba06311610094578063e6819ba71161006e578063e6819ba714610ba8578063e884f26014610be4578063f1b9ad6b14610c0e578063f2fde38b14610c3657610324565b8063d85ba06314610b18578063dd62ed3e14610b42578063e2f4560514610b7e57610324565b8063c0246668116100d0578063c024666814610a62578063c876d0b914610a8a578063d257b34f14610ab4578063d4c989d314610af057610324565b8063b819a1a9146109e6578063bbc0c74214610a0e578063bbf30f2d14610a3857610324565b8063a457c2d711610163578063a9059cbb1161013d578063a9059cbb1461091e578063a90eab8c1461095a578063b62496f514610982578063b70143c9146109be57610324565b8063a457c2d714610890578063a48138dd146108cc578063a72f4586146108f457610324565b8063924de9b71461079857806395d89b41146107c05780639a7a23d6146107ea5780639c3b4fdc146108125780639fccce321461083c578063a0d82dc51461086657610324565b80634fbee19311610269578063715018a6116102225780637bce5a04116101fc5780637bce5a04146107045780638a8c523c1461072e5780638da5cb5b14610744578063921369131461076e57610324565b8063715018a61461069a5780637437681e146106b0578063751039fc146106da57610324565b80634fbee1931461057c57806361528e27146105b857806366ca9b83146105e25780636a486a8e1461060a5780636ddd17131461063457806370a082311461065e57610324565b806323b872dd116102d6578063313ce567116102b0578063313ce567146104c257806339509351146104ec57806349bd5a5e146105285780634a62bb651461055257610324565b806323b872dd1461043257806327c8f8351461046e57806330a136ad1461049857610324565b806302dbd8f81461032857806306fdde0314610350578063095ea7b31461037a5780631694505e146103b657806318160ddd146103e0578063203e727e1461040a57610324565b3661032457005b5f80fd5b348015610333575f80fd5b5061034e60048036038101906103499190613c1f565b610c5e565b005b34801561035b575f80fd5b50610364610d48565b6040516103719190613ccd565b60405180910390f35b348015610385575f80fd5b506103a0600480360381019061039b9190613d47565b610dd8565b6040516103ad9190613d9f565b60405180910390f35b3480156103c1575f80fd5b506103ca610df5565b6040516103d79190613e13565b60405180910390f35b3480156103eb575f80fd5b506103f4610e19565b6040516104019190613e3b565b60405180910390f35b348015610415575f80fd5b50610430600480360381019061042b9190613e54565b610e22565b005b34801561043d575f80fd5b5061045860048036038101906104539190613e7f565b610f31565b6040516104659190613d9f565b60405180910390f35b348015610479575f80fd5b50610482611023565b60405161048f9190613ede565b60405180910390f35b3480156104a3575f80fd5b506104ac611029565b6040516104b99190613e3b565b60405180910390f35b3480156104cd575f80fd5b506104d661102f565b6040516104e39190613f12565b60405180910390f35b3480156104f7575f80fd5b50610512600480360381019061050d9190613d47565b611037565b60405161051f9190613d9f565b60405180910390f35b348015610533575f80fd5b5061053c6110de565b6040516105499190613ede565b60405180910390f35b34801561055d575f80fd5b50610566611103565b6040516105739190613d9f565b60405180910390f35b348015610587575f80fd5b506105a2600480360381019061059d9190613f2b565b611115565b6040516105af9190613d9f565b60405180910390f35b3480156105c3575f80fd5b506105cc611167565b6040516105d99190613e3b565b60405180910390f35b3480156105ed575f80fd5b5061060860048036038101906106039190613c1f565b61116d565b005b348015610615575f80fd5b5061061e611257565b60405161062b9190613e3b565b60405180910390f35b34801561063f575f80fd5b5061064861125d565b6040516106559190613d9f565b60405180910390f35b348015610669575f80fd5b50610684600480360381019061067f9190613f2b565b611270565b6040516106919190613e3b565b60405180910390f35b3480156106a5575f80fd5b506106ae6112b5565b005b3480156106bb575f80fd5b506106c461133c565b6040516106d19190613e3b565b60405180910390f35b3480156106e5575f80fd5b506106ee611342565b6040516106fb9190613d9f565b60405180910390f35b34801561070f575f80fd5b506107186113df565b6040516107259190613e3b565b60405180910390f35b348015610739575f80fd5b506107426113e5565b005b34801561074f575f80fd5b50610758611499565b6040516107659190613ede565b60405180910390f35b348015610779575f80fd5b506107826114c1565b60405161078f9190613e3b565b60405180910390f35b3480156107a3575f80fd5b506107be60048036038101906107b99190613f80565b6114c7565b005b3480156107cb575f80fd5b506107d4611560565b6040516107e19190613ccd565b60405180910390f35b3480156107f5575f80fd5b50610810600480360381019061080b9190613fab565b6115f0565b005b34801561081d575f80fd5b50610826611709565b6040516108339190613e3b565b60405180910390f35b348015610847575f80fd5b5061085061170f565b60405161085d9190613e3b565b60405180910390f35b348015610871575f80fd5b5061087a611715565b6040516108879190613e3b565b60405180910390f35b34801561089b575f80fd5b506108b660048036038101906108b19190613d47565b61171b565b6040516108c39190613d9f565b60405180910390f35b3480156108d7575f80fd5b506108f260048036038101906108ed9190613e54565b611801565b005b3480156108ff575f80fd5b50610908611910565b6040516109159190613ede565b60405180910390f35b348015610929575f80fd5b50610944600480360381019061093f9190613d47565b611935565b6040516109519190613d9f565b60405180910390f35b348015610965575f80fd5b50610980600480360381019061097b9190614046565b611952565b005b34801561098d575f80fd5b506109a860048036038101906109a39190613f2b565b611bd5565b6040516109b59190613d9f565b60405180910390f35b3480156109c9575f80fd5b506109e460048036038101906109df9190613e54565b611bf2565b005b3480156109f1575f80fd5b50610a0c6004803603810190610a079190613f2b565b611cb3565b005b348015610a19575f80fd5b50610a22611ded565b604051610a2f9190613d9f565b60405180910390f35b348015610a43575f80fd5b50610a4c611e00565b604051610a599190613ede565b60405180910390f35b348015610a6d575f80fd5b50610a886004803603810190610a839190613fab565b611e25565b005b348015610a95575f80fd5b50610a9e611f47565b604051610aab9190613d9f565b60405180910390f35b348015610abf575f80fd5b50610ada6004803603810190610ad59190613e54565b611f59565b604051610ae79190613d9f565b60405180910390f35b348015610afb575f80fd5b50610b166004803603810190610b119190613fab565b6120ad565b005b348015610b23575f80fd5b50610b2c612181565b604051610b399190613e3b565b60405180910390f35b348015610b4d575f80fd5b50610b686004803603810190610b639190614096565b612187565b604051610b759190613e3b565b60405180910390f35b348015610b89575f80fd5b50610b92612209565b604051610b9f9190613e3b565b60405180910390f35b348015610bb3575f80fd5b50610bce6004803603810190610bc99190613f2b565b61220f565b604051610bdb9190613d9f565b60405180910390f35b348015610bef575f80fd5b50610bf861222c565b604051610c059190613d9f565b60405180910390f35b348015610c19575f80fd5b50610c346004803603810190610c2f9190613f2b565b6122c9565b005b348015610c41575f80fd5b50610c5c6004803603810190610c579190613f2b565b612403565b005b610c666124f9565b73ffffffffffffffffffffffffffffffffffffffff16610c84611499565b73ffffffffffffffffffffffffffffffffffffffff1614610cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd19061411e565b60405180910390fd5b8160138190555080601481905550601454601354610cf89190614169565b601281905550604b6012541115610d44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3b906141e6565b60405180910390fd5b5050565b606060038054610d5790614231565b80601f0160208091040260200160405190810160405280929190818152602001828054610d8390614231565b8015610dce5780601f10610da557610100808354040283529160200191610dce565b820191905f5260205f20905b815481529060010190602001808311610db157829003601f168201915b5050505050905090565b5f610deb610de46124f9565b8484612500565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600254905090565b610e2a6124f9565b73ffffffffffffffffffffffffffffffffffffffff16610e48611499565b73ffffffffffffffffffffffffffffffffffffffff1614610e9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e959061411e565b60405180910390fd5b670de0b6b3a76400006103e86001610eb4610e19565b610ebe9190614261565b610ec891906142cf565b610ed291906142cf565b811015610f14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0b90614349565b60405180910390fd5b670de0b6b3a764000081610f289190614261565b60098190555050565b5f610f3d8484846126c3565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610f846124f9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611003576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffa906143d7565b60405180910390fd5b6110178561100f6124f9565b858403612500565b60019150509392505050565b61dead81565b600b5481565b5f6012905090565b5f6110d46110436124f9565b848460015f6110506124f9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546110cf9190614169565b612500565b6001905092915050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5f9054906101000a900460ff1681565b5f60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60155481565b6111756124f9565b73ffffffffffffffffffffffffffffffffffffffff16611193611499565b73ffffffffffffffffffffffffffffffffffffffff16146111e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e09061411e565b60405180910390fd5b81601081905550806011819055506011546010546112079190614169565b600f81905550604b600f541115611253576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124a906141e6565b60405180910390fd5b5050565b60125481565b600c60029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6112bd6124f9565b73ffffffffffffffffffffffffffffffffffffffff166112db611499565b73ffffffffffffffffffffffffffffffffffffffff1614611331576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113289061411e565b60405180910390fd5b61133a5f6133c7565b565b60095481565b5f61134b6124f9565b73ffffffffffffffffffffffffffffffffffffffff16611369611499565b73ffffffffffffffffffffffffffffffffffffffff16146113bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b69061411e565b60405180910390fd5b5f600c5f6101000a81548160ff0219169083151502179055506001905090565b60105481565b6113ed6124f9565b73ffffffffffffffffffffffffffffffffffffffff1661140b611499565b73ffffffffffffffffffffffffffffffffffffffff1614611461576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114589061411e565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60135481565b6114cf6124f9565b73ffffffffffffffffffffffffffffffffffffffff166114ed611499565b73ffffffffffffffffffffffffffffffffffffffff1614611543576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153a9061411e565b60405180910390fd5b80600c60026101000a81548160ff02191690831515021790555050565b60606004805461156f90614231565b80601f016020809104026020016040519081016040528092919081815260200182805461159b90614231565b80156115e65780601f106115bd576101008083540402835291602001916115e6565b820191905f5260205f20905b8154815290600101906020018083116115c957829003601f168201915b5050505050905090565b6115f86124f9565b73ffffffffffffffffffffffffffffffffffffffff16611616611499565b73ffffffffffffffffffffffffffffffffffffffff161461166c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116639061411e565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f290614465565b60405180910390fd5b611705828261348a565b5050565b60115481565b60165481565b60145481565b5f8060015f6117286124f9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050828110156117e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d9906144f3565b60405180910390fd5b6117f66117ed6124f9565b85858403612500565b600191505092915050565b6118096124f9565b73ffffffffffffffffffffffffffffffffffffffff16611827611499565b73ffffffffffffffffffffffffffffffffffffffff161461187d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118749061411e565b60405180910390fd5b670de0b6b3a76400006103e86005611893610e19565b61189d9190614261565b6118a791906142cf565b6118b191906142cf565b8110156118f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ea90614581565b60405180910390fd5b670de0b6b3a7640000816119079190614261565b600b8190555050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f6119486119416124f9565b84846126c3565b6001905092915050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6040518060400160405280600d81526020017f54726164696e6720546f6b656e00000000000000000000000000000000000000815250805190602001206040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250805190602001204630604051602001611a049594939291906145ae565b6040516020818303038152906040528051906020012090505f7f7dfdbf06c6260804b81338506aa4a709bd9f04b68ca0d2d054b8627926c90ae46040518060400160405280600e81526020017f456e61626c652054726164696e67000000000000000000000000000000000000815250805190602001205f604051602001611a8e939291906145ff565b6040516020818303038152906040528051906020012090505f8282604051602001611aba9291906146a8565b6040516020818303038152906040528051906020012090505f6001828888886040515f8152602001604052604051611af594939291906146de565b6020604051602081039080840390855afa158015611b15573d5f803e3d5ffd5b505050602060405103519050611b29611499565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611b96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8d9061476b565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff02191690831515021790555050505050505050565b601a602052805f5260405f205f915054906101000a900460ff1681565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611c326124f9565b73ffffffffffffffffffffffffffffffffffffffff1614611c51575f80fd5b611c5a30611270565b8111158015611c6857505f81115b611ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9e906147d3565b60405180910390fd5b611cb081613528565b50565b611cbb6124f9565b73ffffffffffffffffffffffffffffffffffffffff16611cd9611499565b73ffffffffffffffffffffffffffffffffffffffff1614611d2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d269061411e565b60405180910390fd5b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f9e3da7e72199adc414f24e73d3985f288cce5edbc5c370e29af583afdd78c2c260405160405180910390a38060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c60019054906101000a900460ff1681565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611e2d6124f9565b73ffffffffffffffffffffffffffffffffffffffff16611e4b611499565b73ffffffffffffffffffffffffffffffffffffffff1614611ea1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e989061411e565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611f3b9190613d9f565b60405180910390a25050565b600e5f9054906101000a900460ff1681565b5f611f626124f9565b73ffffffffffffffffffffffffffffffffffffffff16611f80611499565b73ffffffffffffffffffffffffffffffffffffffff1614611fd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fcd9061411e565b60405180910390fd5b620186a06001611fe4610e19565b611fee9190614261565b611ff891906142cf565b82101561203a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203190614861565b60405180910390fd5b6103e86005612047610e19565b6120519190614261565b61205b91906142cf565b82111561209d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612094906148ef565b60405180910390fd5b81600a8190555060019050919050565b6120b56124f9565b73ffffffffffffffffffffffffffffffffffffffff166120d3611499565b73ffffffffffffffffffffffffffffffffffffffff1614612129576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121209061411e565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b600f5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600a5481565b6019602052805f5260405f205f915054906101000a900460ff1681565b5f6122356124f9565b73ffffffffffffffffffffffffffffffffffffffff16612253611499565b73ffffffffffffffffffffffffffffffffffffffff16146122a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a09061411e565b60405180910390fd5b5f600e5f6101000a81548160ff0219169083151502179055506001905090565b6122d16124f9565b73ffffffffffffffffffffffffffffffffffffffff166122ef611499565b73ffffffffffffffffffffffffffffffffffffffff1614612345576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233c9061411e565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167ff333166df72feccd0c64d291d00a7afdb4ee8ef820fc1096dc367083bf184a3260405160405180910390a38060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61240b6124f9565b73ffffffffffffffffffffffffffffffffffffffff16612429611499565b73ffffffffffffffffffffffffffffffffffffffff161461247f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124769061411e565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036124ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e49061497d565b60405180910390fd5b6124f6816133c7565b50565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361256e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256590614a0b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036125dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d390614a99565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516126b69190613e3b565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612731576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272890614b27565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361279f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279690614bb5565b60405180910390fd5b60175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612829576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282090614c1d565b60405180910390fd5b60175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156128b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128aa90614c85565b60405180910390fd5b5f81036128ca576128c583835f61375b565b6133c2565b600c5f9054906101000a900460ff1615612f72576128e6611499565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156129545750612924611499565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561298c57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129c6575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129df5750600660149054906101000a900460ff16155b15612f7157600c60019054906101000a900460ff16612ad35760185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612a93575060185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612ad2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac990614ced565b60405180910390fd5b5b600e5f9054906101000a900460ff1615612c9757612aef611499565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612b7657507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612bcf575060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612c965743600d5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410612c53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4a90614da1565b60405180910390fd5b43600d5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612d34575060195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612ddb57600954811115612d7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7590614e2f565b60405180910390fd5b600b54612d8a83611270565b82612d959190614169565b1115612dd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dcd90614e97565b60405180910390fd5b612f70565b601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612e78575060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612ec757600954811115612ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eb990614f25565b60405180910390fd5b612f6f565b60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612f6e57600b54612f2183611270565b82612f2c9190614169565b1115612f6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f6490614e97565b60405180910390fd5b5b5b5b5b5b5f612f7c30611270565b90505f600a548210159050808015612fa05750600c60029054906101000a900460ff165b8015612fb95750600660149054906101000a900460ff16155b801561300c5750601a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561305f575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156130b2575060185f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156130f5576001600660146101000a81548160ff0219169083151502179055506130da6139d0565b5f600660146101000a81548160ff0219169083151502179055505b5f600660149054906101000a900460ff1615905060185f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806131a4575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156131ad575f90505b5f81156133b257601a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561320b57505f601254115b156132a357613238606461322a60125488613b9f90919063ffffffff16565b613bb490919063ffffffff16565b90506012546014548261324b9190614261565b61325591906142cf565b60165f8282546132659190614169565b925050819055506012546013548261327d9190614261565b61328791906142cf565b60155f8282546132979190614169565b9250508190555061338f565b601a5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156132fa57505f600f54115b1561338e576133276064613319600f5488613b9f90919063ffffffff16565b613bb490919063ffffffff16565b9050600f546011548261333a9190614261565b61334491906142cf565b60165f8282546133549190614169565b92505081905550600f546010548261336c9190614261565b61337691906142cf565b60155f8282546133869190614169565b925050819055505b5b5f8111156133a3576133a287308361375b565b5b80856133af9190614f43565b94505b6133bd87878761375b565b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f600267ffffffffffffffff81111561354457613543614f76565b5b6040519080825280602002602001820160405280156135725781602001602082028036833780820191505090505b50905030815f8151811061358957613588614fa3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561362c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136509190614fe4565b8160018151811061366457613663614fa3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506136c9307f000000000000000000000000000000000000000000000000000000000000000084612500565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b815260040161372a9594939291906150ff565b5f604051808303815f87803b158015613741575f80fd5b505af1158015613753573d5f803e3d5ffd5b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036137c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137c090614b27565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613837576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161382e90614bb5565b60405180910390fd5b613842838383613bc9565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156138c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138bc906151c7565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546139539190614169565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516139b79190613e3b565b60405180910390a36139ca848484613bce565b50505050565b5f6139da30611270565b90505f6016546015546139ed9190614169565b90505f8083036139ff57505050613b9d565b6014600a54613a0e9190614261565b831115613a27576014600a54613a249190614261565b92505b5f479050613a3484613528565b5f613a488247613bd390919063ffffffff16565b90505f613a7285613a6460165485613b9f90919063ffffffff16565b613bb490919063ffffffff16565b90505f6015819055505f60168190555060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051613ac790615212565b5f6040518083038185875af1925050503d805f8114613b01576040519150601f19603f3d011682016040523d82523d5f602084013e613b06565b606091505b50508094505060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613b5190615212565b5f6040518083038185875af1925050503d805f8114613b8b576040519150601f19603f3d011682016040523d82523d5f602084013e613b90565b606091505b5050809450505050505050505b565b5f8183613bac9190614261565b905092915050565b5f8183613bc191906142cf565b905092915050565b505050565b505050565b5f8183613be09190614f43565b905092915050565b5f80fd5b5f819050919050565b613bfe81613bec565b8114613c08575f80fd5b50565b5f81359050613c1981613bf5565b92915050565b5f8060408385031215613c3557613c34613be8565b5b5f613c4285828601613c0b565b9250506020613c5385828601613c0b565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f613c9f82613c5d565b613ca98185613c67565b9350613cb9818560208601613c77565b613cc281613c85565b840191505092915050565b5f6020820190508181035f830152613ce58184613c95565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613d1682613ced565b9050919050565b613d2681613d0c565b8114613d30575f80fd5b50565b5f81359050613d4181613d1d565b92915050565b5f8060408385031215613d5d57613d5c613be8565b5b5f613d6a85828601613d33565b9250506020613d7b85828601613c0b565b9150509250929050565b5f8115159050919050565b613d9981613d85565b82525050565b5f602082019050613db25f830184613d90565b92915050565b5f819050919050565b5f613ddb613dd6613dd184613ced565b613db8565b613ced565b9050919050565b5f613dec82613dc1565b9050919050565b5f613dfd82613de2565b9050919050565b613e0d81613df3565b82525050565b5f602082019050613e265f830184613e04565b92915050565b613e3581613bec565b82525050565b5f602082019050613e4e5f830184613e2c565b92915050565b5f60208284031215613e6957613e68613be8565b5b5f613e7684828501613c0b565b91505092915050565b5f805f60608486031215613e9657613e95613be8565b5b5f613ea386828701613d33565b9350506020613eb486828701613d33565b9250506040613ec586828701613c0b565b9150509250925092565b613ed881613d0c565b82525050565b5f602082019050613ef15f830184613ecf565b92915050565b5f60ff82169050919050565b613f0c81613ef7565b82525050565b5f602082019050613f255f830184613f03565b92915050565b5f60208284031215613f4057613f3f613be8565b5b5f613f4d84828501613d33565b91505092915050565b613f5f81613d85565b8114613f69575f80fd5b50565b5f81359050613f7a81613f56565b92915050565b5f60208284031215613f9557613f94613be8565b5b5f613fa284828501613f6c565b91505092915050565b5f8060408385031215613fc157613fc0613be8565b5b5f613fce85828601613d33565b9250506020613fdf85828601613f6c565b9150509250929050565b613ff281613ef7565b8114613ffc575f80fd5b50565b5f8135905061400d81613fe9565b92915050565b5f819050919050565b61402581614013565b811461402f575f80fd5b50565b5f813590506140408161401c565b92915050565b5f805f6060848603121561405d5761405c613be8565b5b5f61406a86828701613fff565b935050602061407b86828701614032565b925050604061408c86828701614032565b9150509250925092565b5f80604083850312156140ac576140ab613be8565b5b5f6140b985828601613d33565b92505060206140ca85828601613d33565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f614108602083613c67565b9150614113826140d4565b602082019050919050565b5f6020820190508181035f830152614135816140fc565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61417382613bec565b915061417e83613bec565b92508282019050808211156141965761419561413c565b5b92915050565b7f4d757374206b656570206665657320617420373525206f72206c6573730000005f82015250565b5f6141d0601d83613c67565b91506141db8261419c565b602082019050919050565b5f6020820190508181035f8301526141fd816141c4565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061424857607f821691505b60208210810361425b5761425a614204565b5b50919050565b5f61426b82613bec565b915061427683613bec565b925082820261428481613bec565b9150828204841483151761429b5761429a61413c565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6142d982613bec565b91506142e483613bec565b9250826142f4576142f36142a2565b5b828204905092915050565b7f43616e6e6f7420736574206d61785478206c6f776572207468616e20302e31255f82015250565b5f614333602083613c67565b915061433e826142ff565b602082019050919050565b5f6020820190508181035f83015261436081614327565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f6143c1602883613c67565b91506143cc82614367565b604082019050919050565b5f6020820190508181035f8301526143ee816143b5565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f61444f603983613c67565b915061445a826143f5565b604082019050919050565b5f6020820190508181035f83015261447c81614443565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6144dd602583613c67565b91506144e882614483565b604082019050919050565b5f6020820190508181035f83015261450a816144d1565b9050919050565b7f43616e6e6f7420736574206d617857616c6c657473206c6f776572207468616e5f8201527f20302e3525000000000000000000000000000000000000000000000000000000602082015250565b5f61456b602583613c67565b915061457682614511565b604082019050919050565b5f6020820190508181035f8301526145988161455f565b9050919050565b6145a881614013565b82525050565b5f60a0820190506145c15f83018861459f565b6145ce602083018761459f565b6145db604083018661459f565b6145e86060830185613e2c565b6145f56080830184613ecf565b9695505050505050565b5f6060820190506146125f83018661459f565b61461f602083018561459f565b61462c6040830184613e2c565b949350505050565b5f81905092915050565b7f19010000000000000000000000000000000000000000000000000000000000005f82015250565b5f614672600283614634565b915061467d8261463e565b600282019050919050565b5f819050919050565b6146a261469d82614013565b614688565b82525050565b5f6146b282614666565b91506146be8285614691565b6020820191506146ce8284614691565b6020820191508190509392505050565b5f6080820190506146f15f83018761459f565b6146fe6020830186613f03565b61470b604083018561459f565b614718606083018461459f565b95945050505050565b7f496e76616c6964207369676e61747572650000000000000000000000000000005f82015250565b5f614755601183613c67565b915061476082614721565b602082019050919050565b5f6020820190508181035f83015261478281614749565b9050919050565b7f57726f6e6720616d6f756e7400000000000000000000000000000000000000005f82015250565b5f6147bd600c83613c67565b91506147c882614789565b602082019050919050565b5f6020820190508181035f8301526147ea816147b1565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f61484b603583613c67565b9150614856826147f1565b604082019050919050565b5f6020820190508181035f8301526148788161483f565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f6148d9603483613c67565b91506148e48261487f565b604082019050919050565b5f6020820190508181035f830152614906816148cd565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f614967602683613c67565b91506149728261490d565b604082019050919050565b5f6020820190508181035f8301526149948161495b565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6149f5602483613c67565b9150614a008261499b565b604082019050919050565b5f6020820190508181035f830152614a22816149e9565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f614a83602283613c67565b9150614a8e82614a29565b604082019050919050565b5f6020820190508181035f830152614ab081614a77565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614b11602583613c67565b9150614b1c82614ab7565b604082019050919050565b5f6020820190508181035f830152614b3e81614b05565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f614b9f602383613c67565b9150614baa82614b45565b604082019050919050565b5f6020820190508181035f830152614bcc81614b93565b9050919050565b7f5b66726f6d5d20626c61636b206c6973740000000000000000000000000000005f82015250565b5f614c07601183613c67565b9150614c1282614bd3565b602082019050919050565b5f6020820190508181035f830152614c3481614bfb565b9050919050565b7f5b746f5d20626c61636b206c69737400000000000000000000000000000000005f82015250565b5f614c6f600f83613c67565b9150614c7a82614c3b565b602082019050919050565b5f6020820190508181035f830152614c9c81614c63565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f614cd7601683613c67565b9150614ce282614ca3565b602082019050919050565b5f6020820190508181035f830152614d0481614ccb565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c5f8201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b5f614d8b604983613c67565b9150614d9682614d0b565b606082019050919050565b5f6020820190508181035f830152614db881614d7f565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d617854782e0000000000000000000000000000000000000000000000000000602082015250565b5f614e19602683613c67565b9150614e2482614dbf565b604082019050919050565b5f6020820190508181035f830152614e4681614e0d565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f614e81601383613c67565b9150614e8c82614e4d565b602082019050919050565b5f6020820190508181035f830152614eae81614e75565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d617854782e00000000000000000000000000000000000000000000000000602082015250565b5f614f0f602783613c67565b9150614f1a82614eb5565b604082019050919050565b5f6020820190508181035f830152614f3c81614f03565b9050919050565b5f614f4d82613bec565b9150614f5883613bec565b9250828203905081811115614f7057614f6f61413c565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050614fde81613d1d565b92915050565b5f60208284031215614ff957614ff8613be8565b5b5f61500684828501614fd0565b91505092915050565b5f819050919050565b5f61503261502d6150288461500f565b613db8565b613bec565b9050919050565b61504281615018565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61507a81613d0c565b82525050565b5f61508b8383615071565b60208301905092915050565b5f602082019050919050565b5f6150ad82615048565b6150b78185615052565b93506150c283615062565b805f5b838110156150f25781516150d98882615080565b97506150e483615097565b9250506001810190506150c5565b5085935050505092915050565b5f60a0820190506151125f830188613e2c565b61511f6020830187615039565b818103604083015261513181866150a3565b90506151406060830185613ecf565b61514d6080830184613e2c565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6151b1602683613c67565b91506151bc82615157565b604082019050919050565b5f6020820190508181035f8301526151de816151a5565b9050919050565b5f81905092915050565b50565b5f6151fd5f836151e5565b9150615208826151ef565b5f82019050919050565b5f61521c826151f2565b915081905091905056fea2646970667358221220cae574f2573e3ede9e6643dc6e3ee43b9f3a2af8f2a3a89f07c2f748c2f70c1c64736f6c634300081a0033

Deployed Bytecode

0x60806040526004361061031d575f3560e01c8063924de9b7116101aa578063b819a1a9116100f6578063d85ba06311610094578063e6819ba71161006e578063e6819ba714610ba8578063e884f26014610be4578063f1b9ad6b14610c0e578063f2fde38b14610c3657610324565b8063d85ba06314610b18578063dd62ed3e14610b42578063e2f4560514610b7e57610324565b8063c0246668116100d0578063c024666814610a62578063c876d0b914610a8a578063d257b34f14610ab4578063d4c989d314610af057610324565b8063b819a1a9146109e6578063bbc0c74214610a0e578063bbf30f2d14610a3857610324565b8063a457c2d711610163578063a9059cbb1161013d578063a9059cbb1461091e578063a90eab8c1461095a578063b62496f514610982578063b70143c9146109be57610324565b8063a457c2d714610890578063a48138dd146108cc578063a72f4586146108f457610324565b8063924de9b71461079857806395d89b41146107c05780639a7a23d6146107ea5780639c3b4fdc146108125780639fccce321461083c578063a0d82dc51461086657610324565b80634fbee19311610269578063715018a6116102225780637bce5a04116101fc5780637bce5a04146107045780638a8c523c1461072e5780638da5cb5b14610744578063921369131461076e57610324565b8063715018a61461069a5780637437681e146106b0578063751039fc146106da57610324565b80634fbee1931461057c57806361528e27146105b857806366ca9b83146105e25780636a486a8e1461060a5780636ddd17131461063457806370a082311461065e57610324565b806323b872dd116102d6578063313ce567116102b0578063313ce567146104c257806339509351146104ec57806349bd5a5e146105285780634a62bb651461055257610324565b806323b872dd1461043257806327c8f8351461046e57806330a136ad1461049857610324565b806302dbd8f81461032857806306fdde0314610350578063095ea7b31461037a5780631694505e146103b657806318160ddd146103e0578063203e727e1461040a57610324565b3661032457005b5f80fd5b348015610333575f80fd5b5061034e60048036038101906103499190613c1f565b610c5e565b005b34801561035b575f80fd5b50610364610d48565b6040516103719190613ccd565b60405180910390f35b348015610385575f80fd5b506103a0600480360381019061039b9190613d47565b610dd8565b6040516103ad9190613d9f565b60405180910390f35b3480156103c1575f80fd5b506103ca610df5565b6040516103d79190613e13565b60405180910390f35b3480156103eb575f80fd5b506103f4610e19565b6040516104019190613e3b565b60405180910390f35b348015610415575f80fd5b50610430600480360381019061042b9190613e54565b610e22565b005b34801561043d575f80fd5b5061045860048036038101906104539190613e7f565b610f31565b6040516104659190613d9f565b60405180910390f35b348015610479575f80fd5b50610482611023565b60405161048f9190613ede565b60405180910390f35b3480156104a3575f80fd5b506104ac611029565b6040516104b99190613e3b565b60405180910390f35b3480156104cd575f80fd5b506104d661102f565b6040516104e39190613f12565b60405180910390f35b3480156104f7575f80fd5b50610512600480360381019061050d9190613d47565b611037565b60405161051f9190613d9f565b60405180910390f35b348015610533575f80fd5b5061053c6110de565b6040516105499190613ede565b60405180910390f35b34801561055d575f80fd5b50610566611103565b6040516105739190613d9f565b60405180910390f35b348015610587575f80fd5b506105a2600480360381019061059d9190613f2b565b611115565b6040516105af9190613d9f565b60405180910390f35b3480156105c3575f80fd5b506105cc611167565b6040516105d99190613e3b565b60405180910390f35b3480156105ed575f80fd5b5061060860048036038101906106039190613c1f565b61116d565b005b348015610615575f80fd5b5061061e611257565b60405161062b9190613e3b565b60405180910390f35b34801561063f575f80fd5b5061064861125d565b6040516106559190613d9f565b60405180910390f35b348015610669575f80fd5b50610684600480360381019061067f9190613f2b565b611270565b6040516106919190613e3b565b60405180910390f35b3480156106a5575f80fd5b506106ae6112b5565b005b3480156106bb575f80fd5b506106c461133c565b6040516106d19190613e3b565b60405180910390f35b3480156106e5575f80fd5b506106ee611342565b6040516106fb9190613d9f565b60405180910390f35b34801561070f575f80fd5b506107186113df565b6040516107259190613e3b565b60405180910390f35b348015610739575f80fd5b506107426113e5565b005b34801561074f575f80fd5b50610758611499565b6040516107659190613ede565b60405180910390f35b348015610779575f80fd5b506107826114c1565b60405161078f9190613e3b565b60405180910390f35b3480156107a3575f80fd5b506107be60048036038101906107b99190613f80565b6114c7565b005b3480156107cb575f80fd5b506107d4611560565b6040516107e19190613ccd565b60405180910390f35b3480156107f5575f80fd5b50610810600480360381019061080b9190613fab565b6115f0565b005b34801561081d575f80fd5b50610826611709565b6040516108339190613e3b565b60405180910390f35b348015610847575f80fd5b5061085061170f565b60405161085d9190613e3b565b60405180910390f35b348015610871575f80fd5b5061087a611715565b6040516108879190613e3b565b60405180910390f35b34801561089b575f80fd5b506108b660048036038101906108b19190613d47565b61171b565b6040516108c39190613d9f565b60405180910390f35b3480156108d7575f80fd5b506108f260048036038101906108ed9190613e54565b611801565b005b3480156108ff575f80fd5b50610908611910565b6040516109159190613ede565b60405180910390f35b348015610929575f80fd5b50610944600480360381019061093f9190613d47565b611935565b6040516109519190613d9f565b60405180910390f35b348015610965575f80fd5b50610980600480360381019061097b9190614046565b611952565b005b34801561098d575f80fd5b506109a860048036038101906109a39190613f2b565b611bd5565b6040516109b59190613d9f565b60405180910390f35b3480156109c9575f80fd5b506109e460048036038101906109df9190613e54565b611bf2565b005b3480156109f1575f80fd5b50610a0c6004803603810190610a079190613f2b565b611cb3565b005b348015610a19575f80fd5b50610a22611ded565b604051610a2f9190613d9f565b60405180910390f35b348015610a43575f80fd5b50610a4c611e00565b604051610a599190613ede565b60405180910390f35b348015610a6d575f80fd5b50610a886004803603810190610a839190613fab565b611e25565b005b348015610a95575f80fd5b50610a9e611f47565b604051610aab9190613d9f565b60405180910390f35b348015610abf575f80fd5b50610ada6004803603810190610ad59190613e54565b611f59565b604051610ae79190613d9f565b60405180910390f35b348015610afb575f80fd5b50610b166004803603810190610b119190613fab565b6120ad565b005b348015610b23575f80fd5b50610b2c612181565b604051610b399190613e3b565b60405180910390f35b348015610b4d575f80fd5b50610b686004803603810190610b639190614096565b612187565b604051610b759190613e3b565b60405180910390f35b348015610b89575f80fd5b50610b92612209565b604051610b9f9190613e3b565b60405180910390f35b348015610bb3575f80fd5b50610bce6004803603810190610bc99190613f2b565b61220f565b604051610bdb9190613d9f565b60405180910390f35b348015610bef575f80fd5b50610bf861222c565b604051610c059190613d9f565b60405180910390f35b348015610c19575f80fd5b50610c346004803603810190610c2f9190613f2b565b6122c9565b005b348015610c41575f80fd5b50610c5c6004803603810190610c579190613f2b565b612403565b005b610c666124f9565b73ffffffffffffffffffffffffffffffffffffffff16610c84611499565b73ffffffffffffffffffffffffffffffffffffffff1614610cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd19061411e565b60405180910390fd5b8160138190555080601481905550601454601354610cf89190614169565b601281905550604b6012541115610d44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3b906141e6565b60405180910390fd5b5050565b606060038054610d5790614231565b80601f0160208091040260200160405190810160405280929190818152602001828054610d8390614231565b8015610dce5780601f10610da557610100808354040283529160200191610dce565b820191905f5260205f20905b815481529060010190602001808311610db157829003601f168201915b5050505050905090565b5f610deb610de46124f9565b8484612500565b6001905092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600254905090565b610e2a6124f9565b73ffffffffffffffffffffffffffffffffffffffff16610e48611499565b73ffffffffffffffffffffffffffffffffffffffff1614610e9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e959061411e565b60405180910390fd5b670de0b6b3a76400006103e86001610eb4610e19565b610ebe9190614261565b610ec891906142cf565b610ed291906142cf565b811015610f14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0b90614349565b60405180910390fd5b670de0b6b3a764000081610f289190614261565b60098190555050565b5f610f3d8484846126c3565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610f846124f9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611003576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffa906143d7565b60405180910390fd5b6110178561100f6124f9565b858403612500565b60019150509392505050565b61dead81565b600b5481565b5f6012905090565b5f6110d46110436124f9565b848460015f6110506124f9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546110cf9190614169565b612500565b6001905092915050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5f9054906101000a900460ff1681565b5f60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60155481565b6111756124f9565b73ffffffffffffffffffffffffffffffffffffffff16611193611499565b73ffffffffffffffffffffffffffffffffffffffff16146111e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e09061411e565b60405180910390fd5b81601081905550806011819055506011546010546112079190614169565b600f81905550604b600f541115611253576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124a906141e6565b60405180910390fd5b5050565b60125481565b600c60029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6112bd6124f9565b73ffffffffffffffffffffffffffffffffffffffff166112db611499565b73ffffffffffffffffffffffffffffffffffffffff1614611331576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113289061411e565b60405180910390fd5b61133a5f6133c7565b565b60095481565b5f61134b6124f9565b73ffffffffffffffffffffffffffffffffffffffff16611369611499565b73ffffffffffffffffffffffffffffffffffffffff16146113bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b69061411e565b60405180910390fd5b5f600c5f6101000a81548160ff0219169083151502179055506001905090565b60105481565b6113ed6124f9565b73ffffffffffffffffffffffffffffffffffffffff1661140b611499565b73ffffffffffffffffffffffffffffffffffffffff1614611461576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114589061411e565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60135481565b6114cf6124f9565b73ffffffffffffffffffffffffffffffffffffffff166114ed611499565b73ffffffffffffffffffffffffffffffffffffffff1614611543576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153a9061411e565b60405180910390fd5b80600c60026101000a81548160ff02191690831515021790555050565b60606004805461156f90614231565b80601f016020809104026020016040519081016040528092919081815260200182805461159b90614231565b80156115e65780601f106115bd576101008083540402835291602001916115e6565b820191905f5260205f20905b8154815290600101906020018083116115c957829003601f168201915b5050505050905090565b6115f86124f9565b73ffffffffffffffffffffffffffffffffffffffff16611616611499565b73ffffffffffffffffffffffffffffffffffffffff161461166c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116639061411e565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f290614465565b60405180910390fd5b611705828261348a565b5050565b60115481565b60165481565b60145481565b5f8060015f6117286124f9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050828110156117e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d9906144f3565b60405180910390fd5b6117f66117ed6124f9565b85858403612500565b600191505092915050565b6118096124f9565b73ffffffffffffffffffffffffffffffffffffffff16611827611499565b73ffffffffffffffffffffffffffffffffffffffff161461187d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118749061411e565b60405180910390fd5b670de0b6b3a76400006103e86005611893610e19565b61189d9190614261565b6118a791906142cf565b6118b191906142cf565b8110156118f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ea90614581565b60405180910390fd5b670de0b6b3a7640000816119079190614261565b600b8190555050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f6119486119416124f9565b84846126c3565b6001905092915050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6040518060400160405280600d81526020017f54726164696e6720546f6b656e00000000000000000000000000000000000000815250805190602001206040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250805190602001204630604051602001611a049594939291906145ae565b6040516020818303038152906040528051906020012090505f7f7dfdbf06c6260804b81338506aa4a709bd9f04b68ca0d2d054b8627926c90ae46040518060400160405280600e81526020017f456e61626c652054726164696e67000000000000000000000000000000000000815250805190602001205f604051602001611a8e939291906145ff565b6040516020818303038152906040528051906020012090505f8282604051602001611aba9291906146a8565b6040516020818303038152906040528051906020012090505f6001828888886040515f8152602001604052604051611af594939291906146de565b6020604051602081039080840390855afa158015611b15573d5f803e3d5ffd5b505050602060405103519050611b29611499565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611b96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8d9061476b565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff02191690831515021790555050505050505050565b601a602052805f5260405f205f915054906101000a900460ff1681565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611c326124f9565b73ffffffffffffffffffffffffffffffffffffffff1614611c51575f80fd5b611c5a30611270565b8111158015611c6857505f81115b611ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9e906147d3565b60405180910390fd5b611cb081613528565b50565b611cbb6124f9565b73ffffffffffffffffffffffffffffffffffffffff16611cd9611499565b73ffffffffffffffffffffffffffffffffffffffff1614611d2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d269061411e565b60405180910390fd5b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f9e3da7e72199adc414f24e73d3985f288cce5edbc5c370e29af583afdd78c2c260405160405180910390a38060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c60019054906101000a900460ff1681565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611e2d6124f9565b73ffffffffffffffffffffffffffffffffffffffff16611e4b611499565b73ffffffffffffffffffffffffffffffffffffffff1614611ea1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e989061411e565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611f3b9190613d9f565b60405180910390a25050565b600e5f9054906101000a900460ff1681565b5f611f626124f9565b73ffffffffffffffffffffffffffffffffffffffff16611f80611499565b73ffffffffffffffffffffffffffffffffffffffff1614611fd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fcd9061411e565b60405180910390fd5b620186a06001611fe4610e19565b611fee9190614261565b611ff891906142cf565b82101561203a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203190614861565b60405180910390fd5b6103e86005612047610e19565b6120519190614261565b61205b91906142cf565b82111561209d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612094906148ef565b60405180910390fd5b81600a8190555060019050919050565b6120b56124f9565b73ffffffffffffffffffffffffffffffffffffffff166120d3611499565b73ffffffffffffffffffffffffffffffffffffffff1614612129576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121209061411e565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b600f5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600a5481565b6019602052805f5260405f205f915054906101000a900460ff1681565b5f6122356124f9565b73ffffffffffffffffffffffffffffffffffffffff16612253611499565b73ffffffffffffffffffffffffffffffffffffffff16146122a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a09061411e565b60405180910390fd5b5f600e5f6101000a81548160ff0219169083151502179055506001905090565b6122d16124f9565b73ffffffffffffffffffffffffffffffffffffffff166122ef611499565b73ffffffffffffffffffffffffffffffffffffffff1614612345576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233c9061411e565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167ff333166df72feccd0c64d291d00a7afdb4ee8ef820fc1096dc367083bf184a3260405160405180910390a38060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61240b6124f9565b73ffffffffffffffffffffffffffffffffffffffff16612429611499565b73ffffffffffffffffffffffffffffffffffffffff161461247f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124769061411e565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036124ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e49061497d565b60405180910390fd5b6124f6816133c7565b50565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361256e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256590614a0b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036125dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d390614a99565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516126b69190613e3b565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612731576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272890614b27565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361279f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279690614bb5565b60405180910390fd5b60175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612829576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282090614c1d565b60405180910390fd5b60175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156128b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128aa90614c85565b60405180910390fd5b5f81036128ca576128c583835f61375b565b6133c2565b600c5f9054906101000a900460ff1615612f72576128e6611499565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156129545750612924611499565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561298c57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129c6575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129df5750600660149054906101000a900460ff16155b15612f7157600c60019054906101000a900460ff16612ad35760185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612a93575060185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612ad2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac990614ced565b60405180910390fd5b5b600e5f9054906101000a900460ff1615612c9757612aef611499565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612b7657507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612bcf575060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612c965743600d5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410612c53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4a90614da1565b60405180910390fd5b43600d5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612d34575060195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612ddb57600954811115612d7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7590614e2f565b60405180910390fd5b600b54612d8a83611270565b82612d959190614169565b1115612dd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dcd90614e97565b60405180910390fd5b612f70565b601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612e78575060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612ec757600954811115612ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eb990614f25565b60405180910390fd5b612f6f565b60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612f6e57600b54612f2183611270565b82612f2c9190614169565b1115612f6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f6490614e97565b60405180910390fd5b5b5b5b5b5b5f612f7c30611270565b90505f600a548210159050808015612fa05750600c60029054906101000a900460ff165b8015612fb95750600660149054906101000a900460ff16155b801561300c5750601a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561305f575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156130b2575060185f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156130f5576001600660146101000a81548160ff0219169083151502179055506130da6139d0565b5f600660146101000a81548160ff0219169083151502179055505b5f600660149054906101000a900460ff1615905060185f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806131a4575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156131ad575f90505b5f81156133b257601a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561320b57505f601254115b156132a357613238606461322a60125488613b9f90919063ffffffff16565b613bb490919063ffffffff16565b90506012546014548261324b9190614261565b61325591906142cf565b60165f8282546132659190614169565b925050819055506012546013548261327d9190614261565b61328791906142cf565b60155f8282546132979190614169565b9250508190555061338f565b601a5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156132fa57505f600f54115b1561338e576133276064613319600f5488613b9f90919063ffffffff16565b613bb490919063ffffffff16565b9050600f546011548261333a9190614261565b61334491906142cf565b60165f8282546133549190614169565b92505081905550600f546010548261336c9190614261565b61337691906142cf565b60155f8282546133869190614169565b925050819055505b5b5f8111156133a3576133a287308361375b565b5b80856133af9190614f43565b94505b6133bd87878761375b565b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f600267ffffffffffffffff81111561354457613543614f76565b5b6040519080825280602002602001820160405280156135725781602001602082028036833780820191505090505b50905030815f8151811061358957613588614fa3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561362c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136509190614fe4565b8160018151811061366457613663614fa3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506136c9307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612500565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b815260040161372a9594939291906150ff565b5f604051808303815f87803b158015613741575f80fd5b505af1158015613753573d5f803e3d5ffd5b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036137c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137c090614b27565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613837576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161382e90614bb5565b60405180910390fd5b613842838383613bc9565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156138c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138bc906151c7565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546139539190614169565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516139b79190613e3b565b60405180910390a36139ca848484613bce565b50505050565b5f6139da30611270565b90505f6016546015546139ed9190614169565b90505f8083036139ff57505050613b9d565b6014600a54613a0e9190614261565b831115613a27576014600a54613a249190614261565b92505b5f479050613a3484613528565b5f613a488247613bd390919063ffffffff16565b90505f613a7285613a6460165485613b9f90919063ffffffff16565b613bb490919063ffffffff16565b90505f6015819055505f60168190555060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051613ac790615212565b5f6040518083038185875af1925050503d805f8114613b01576040519150601f19603f3d011682016040523d82523d5f602084013e613b06565b606091505b50508094505060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613b5190615212565b5f6040518083038185875af1925050503d805f8114613b8b576040519150601f19603f3d011682016040523d82523d5f602084013e613b90565b606091505b5050809450505050505050505b565b5f8183613bac9190614261565b905092915050565b5f8183613bc191906142cf565b905092915050565b505050565b505050565b5f8183613be09190614f43565b905092915050565b5f80fd5b5f819050919050565b613bfe81613bec565b8114613c08575f80fd5b50565b5f81359050613c1981613bf5565b92915050565b5f8060408385031215613c3557613c34613be8565b5b5f613c4285828601613c0b565b9250506020613c5385828601613c0b565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f613c9f82613c5d565b613ca98185613c67565b9350613cb9818560208601613c77565b613cc281613c85565b840191505092915050565b5f6020820190508181035f830152613ce58184613c95565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613d1682613ced565b9050919050565b613d2681613d0c565b8114613d30575f80fd5b50565b5f81359050613d4181613d1d565b92915050565b5f8060408385031215613d5d57613d5c613be8565b5b5f613d6a85828601613d33565b9250506020613d7b85828601613c0b565b9150509250929050565b5f8115159050919050565b613d9981613d85565b82525050565b5f602082019050613db25f830184613d90565b92915050565b5f819050919050565b5f613ddb613dd6613dd184613ced565b613db8565b613ced565b9050919050565b5f613dec82613dc1565b9050919050565b5f613dfd82613de2565b9050919050565b613e0d81613df3565b82525050565b5f602082019050613e265f830184613e04565b92915050565b613e3581613bec565b82525050565b5f602082019050613e4e5f830184613e2c565b92915050565b5f60208284031215613e6957613e68613be8565b5b5f613e7684828501613c0b565b91505092915050565b5f805f60608486031215613e9657613e95613be8565b5b5f613ea386828701613d33565b9350506020613eb486828701613d33565b9250506040613ec586828701613c0b565b9150509250925092565b613ed881613d0c565b82525050565b5f602082019050613ef15f830184613ecf565b92915050565b5f60ff82169050919050565b613f0c81613ef7565b82525050565b5f602082019050613f255f830184613f03565b92915050565b5f60208284031215613f4057613f3f613be8565b5b5f613f4d84828501613d33565b91505092915050565b613f5f81613d85565b8114613f69575f80fd5b50565b5f81359050613f7a81613f56565b92915050565b5f60208284031215613f9557613f94613be8565b5b5f613fa284828501613f6c565b91505092915050565b5f8060408385031215613fc157613fc0613be8565b5b5f613fce85828601613d33565b9250506020613fdf85828601613f6c565b9150509250929050565b613ff281613ef7565b8114613ffc575f80fd5b50565b5f8135905061400d81613fe9565b92915050565b5f819050919050565b61402581614013565b811461402f575f80fd5b50565b5f813590506140408161401c565b92915050565b5f805f6060848603121561405d5761405c613be8565b5b5f61406a86828701613fff565b935050602061407b86828701614032565b925050604061408c86828701614032565b9150509250925092565b5f80604083850312156140ac576140ab613be8565b5b5f6140b985828601613d33565b92505060206140ca85828601613d33565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f614108602083613c67565b9150614113826140d4565b602082019050919050565b5f6020820190508181035f830152614135816140fc565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61417382613bec565b915061417e83613bec565b92508282019050808211156141965761419561413c565b5b92915050565b7f4d757374206b656570206665657320617420373525206f72206c6573730000005f82015250565b5f6141d0601d83613c67565b91506141db8261419c565b602082019050919050565b5f6020820190508181035f8301526141fd816141c4565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061424857607f821691505b60208210810361425b5761425a614204565b5b50919050565b5f61426b82613bec565b915061427683613bec565b925082820261428481613bec565b9150828204841483151761429b5761429a61413c565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6142d982613bec565b91506142e483613bec565b9250826142f4576142f36142a2565b5b828204905092915050565b7f43616e6e6f7420736574206d61785478206c6f776572207468616e20302e31255f82015250565b5f614333602083613c67565b915061433e826142ff565b602082019050919050565b5f6020820190508181035f83015261436081614327565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f6143c1602883613c67565b91506143cc82614367565b604082019050919050565b5f6020820190508181035f8301526143ee816143b5565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f61444f603983613c67565b915061445a826143f5565b604082019050919050565b5f6020820190508181035f83015261447c81614443565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6144dd602583613c67565b91506144e882614483565b604082019050919050565b5f6020820190508181035f83015261450a816144d1565b9050919050565b7f43616e6e6f7420736574206d617857616c6c657473206c6f776572207468616e5f8201527f20302e3525000000000000000000000000000000000000000000000000000000602082015250565b5f61456b602583613c67565b915061457682614511565b604082019050919050565b5f6020820190508181035f8301526145988161455f565b9050919050565b6145a881614013565b82525050565b5f60a0820190506145c15f83018861459f565b6145ce602083018761459f565b6145db604083018661459f565b6145e86060830185613e2c565b6145f56080830184613ecf565b9695505050505050565b5f6060820190506146125f83018661459f565b61461f602083018561459f565b61462c6040830184613e2c565b949350505050565b5f81905092915050565b7f19010000000000000000000000000000000000000000000000000000000000005f82015250565b5f614672600283614634565b915061467d8261463e565b600282019050919050565b5f819050919050565b6146a261469d82614013565b614688565b82525050565b5f6146b282614666565b91506146be8285614691565b6020820191506146ce8284614691565b6020820191508190509392505050565b5f6080820190506146f15f83018761459f565b6146fe6020830186613f03565b61470b604083018561459f565b614718606083018461459f565b95945050505050565b7f496e76616c6964207369676e61747572650000000000000000000000000000005f82015250565b5f614755601183613c67565b915061476082614721565b602082019050919050565b5f6020820190508181035f83015261478281614749565b9050919050565b7f57726f6e6720616d6f756e7400000000000000000000000000000000000000005f82015250565b5f6147bd600c83613c67565b91506147c882614789565b602082019050919050565b5f6020820190508181035f8301526147ea816147b1565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f61484b603583613c67565b9150614856826147f1565b604082019050919050565b5f6020820190508181035f8301526148788161483f565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f6148d9603483613c67565b91506148e48261487f565b604082019050919050565b5f6020820190508181035f830152614906816148cd565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f614967602683613c67565b91506149728261490d565b604082019050919050565b5f6020820190508181035f8301526149948161495b565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6149f5602483613c67565b9150614a008261499b565b604082019050919050565b5f6020820190508181035f830152614a22816149e9565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f614a83602283613c67565b9150614a8e82614a29565b604082019050919050565b5f6020820190508181035f830152614ab081614a77565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614b11602583613c67565b9150614b1c82614ab7565b604082019050919050565b5f6020820190508181035f830152614b3e81614b05565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f614b9f602383613c67565b9150614baa82614b45565b604082019050919050565b5f6020820190508181035f830152614bcc81614b93565b9050919050565b7f5b66726f6d5d20626c61636b206c6973740000000000000000000000000000005f82015250565b5f614c07601183613c67565b9150614c1282614bd3565b602082019050919050565b5f6020820190508181035f830152614c3481614bfb565b9050919050565b7f5b746f5d20626c61636b206c69737400000000000000000000000000000000005f82015250565b5f614c6f600f83613c67565b9150614c7a82614c3b565b602082019050919050565b5f6020820190508181035f830152614c9c81614c63565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f614cd7601683613c67565b9150614ce282614ca3565b602082019050919050565b5f6020820190508181035f830152614d0481614ccb565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c5f8201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b5f614d8b604983613c67565b9150614d9682614d0b565b606082019050919050565b5f6020820190508181035f830152614db881614d7f565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d617854782e0000000000000000000000000000000000000000000000000000602082015250565b5f614e19602683613c67565b9150614e2482614dbf565b604082019050919050565b5f6020820190508181035f830152614e4681614e0d565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f614e81601383613c67565b9150614e8c82614e4d565b602082019050919050565b5f6020820190508181035f830152614eae81614e75565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d617854782e00000000000000000000000000000000000000000000000000602082015250565b5f614f0f602783613c67565b9150614f1a82614eb5565b604082019050919050565b5f6020820190508181035f830152614f3c81614f03565b9050919050565b5f614f4d82613bec565b9150614f5883613bec565b9250828203905081811115614f7057614f6f61413c565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050614fde81613d1d565b92915050565b5f60208284031215614ff957614ff8613be8565b5b5f61500684828501614fd0565b91505092915050565b5f819050919050565b5f61503261502d6150288461500f565b613db8565b613bec565b9050919050565b61504281615018565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61507a81613d0c565b82525050565b5f61508b8383615071565b60208301905092915050565b5f602082019050919050565b5f6150ad82615048565b6150b78185615052565b93506150c283615062565b805f5b838110156150f25781516150d98882615080565b97506150e483615097565b9250506001810190506150c5565b5085935050505092915050565b5f60a0820190506151125f830188613e2c565b61511f6020830187615039565b818103604083015261513181866150a3565b90506151406060830185613ecf565b61514d6080830184613e2c565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6151b1602683613c67565b91506151bc82615157565b604082019050919050565b5f6020820190508181035f8301526151de816151a5565b9050919050565b5f81905092915050565b50565b5f6151fd5f836151e5565b9150615208826151ef565b5f82019050919050565b5f61521c826151f2565b915081905091905056fea2646970667358221220cae574f2573e3ede9e6643dc6e3ee43b9f3a2af8f2a3a89f07c2f748c2f70c1c64736f6c634300081a0033

Deployed Bytecode Sourcemap

15002:14108:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21871:318;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2699:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3613:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15076:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3020:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20685:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3790:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15169:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15398:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2919:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4290:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15134:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15432:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23273:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15937:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21552:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15830:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15512:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3136:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;821:103;;;;;;;;;;;;;:::i;:::-;;15331:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19793:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15760:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18559:112;;;;;;;;;;;;;:::i;:::-;;598:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15865:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21444:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2807:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22387:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15797:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15975:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15903:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4513:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20938:259;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15261:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3271:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18679:1062;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16179:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27400:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23104:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15472:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15297:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22197:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15678:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20180:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21205:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15726:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3454:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15358:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16122:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19975:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22895:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;932;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21871:318;744:12;:10;:12::i;:::-;733:23;;:7;:5;:7::i;:::-;:23;;;725:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22009:13:::1;21990:16;:32;;;;22046:7;22033:10;:20;;;;22099:10;;22080:16;;:29;;;;:::i;:::-;22064:13;:45;;;;22145:2;22128:13;;:19;;22120:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;21871:318:::0;;:::o;2699:100::-;2753:13;2786:5;2779:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2699:100;:::o;3613:169::-;3696:4;3713:39;3722:12;:10;:12::i;:::-;3736:7;3745:6;3713:8;:39::i;:::-;3770:4;3763:11;;3613:169;;;;:::o;15076:51::-;;;:::o;3020:108::-;3081:7;3108:12;;3101:19;;3020:108;:::o;20685:245::-;744:12;:10;:12::i;:::-;733:23;;:7;:5;:7::i;:::-;:23;;;725:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20822:4:::1;20814;20809:1;20793:13;:11;:13::i;:::-;:17;;;;:::i;:::-;20792:26;;;;:::i;:::-;20791:35;;;;:::i;:::-;20781:6;:45;;20759:127;;;;;;;;;;;;:::i;:::-;;;;;;;;;20915:6;20905;:17;;;;:::i;:::-;20897:5;:25;;;;20685:245:::0;:::o;3790:492::-;3930:4;3947:36;3957:6;3965:9;3976:6;3947:9;:36::i;:::-;3996:24;4023:11;:19;4035:6;4023:19;;;;;;;;;;;;;;;:33;4043:12;:10;:12::i;:::-;4023:33;;;;;;;;;;;;;;;;3996:60;;4095:6;4075:16;:26;;4067:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;4182:57;4191:6;4199:12;:10;:12::i;:::-;4232:6;4213:16;:25;4182:8;:57::i;:::-;4270:4;4263:11;;;3790:492;;;;;:::o;15169:53::-;15215:6;15169:53;:::o;15398:25::-;;;;:::o;2919:93::-;2977:5;3002:2;2995:9;;2919:93;:::o;4290:215::-;4378:4;4395:80;4404:12;:10;:12::i;:::-;4418:7;4464:10;4427:11;:25;4439:12;:10;:12::i;:::-;4427:25;;;;;;;;;;;;;;;:34;4453:7;4427:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;4395:8;:80::i;:::-;4493:4;4486:11;;4290:215;;;;:::o;15134:28::-;;;;;;;;;;;;;:::o;15432:33::-;;;;;;;;;;;;;:::o;23273:126::-;23339:4;23363:19;:28;23383:7;23363:28;;;;;;;;;;;;;;;;;;;;;;;;;23356:35;;23273:126;;;:::o;15937:31::-;;;;:::o;21552:311::-;744:12;:10;:12::i;:::-;733:23;;:7;:5;:7::i;:::-;:23;;;725:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21688:13:::1;21670:15;:31;;;;21724:7;21712:9;:19;;;;21775:9;;21757:15;;:27;;;;:::i;:::-;21742:12;:42;;;;21819:2;21803:12;;:18;;21795:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;21552:311:::0;;:::o;15830:28::-;;;;:::o;15512:31::-;;;;;;;;;;;;;:::o;3136:127::-;3210:7;3237:9;:18;3247:7;3237:18;;;;;;;;;;;;;;;;3230:25;;3136:127;;;:::o;821:103::-;744:12;:10;:12::i;:::-;733:23;;:7;:5;:7::i;:::-;:23;;;725:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;886:30:::1;913:1;886:18;:30::i;:::-;821:103::o:0;15331:20::-;;;;:::o;19793:121::-;19845:4;744:12;:10;:12::i;:::-;733:23;;:7;:5;:7::i;:::-;:23;;;725:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19879:5:::1;19862:14;;:22;;;;;;;;;;;;;;;;;;19902:4;19895:11;;19793:121:::0;:::o;15760:30::-;;;;:::o;18559:112::-;744:12;:10;:12::i;:::-;733:23;;:7;:5;:7::i;:::-;:23;;;725:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18630:4:::1;18614:13;;:20;;;;;;;;;;;;;;;;;;18659:4;18645:11;;:18;;;;;;;;;;;;;;;;;;18559:112::o:0;598:87::-;644:7;671:6;;;;;;;;;;;664:13;;598:87;:::o;15865:31::-;;;;:::o;21444:100::-;744:12;:10;:12::i;:::-;733:23;;:7;:5;:7::i;:::-;:23;;;725:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21529:7:::1;21515:11;;:21;;;;;;;;;;;;;;;;;;21444:100:::0;:::o;2807:104::-;2863:13;2896:7;2889:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2807:104;:::o;22387:304::-;744:12;:10;:12::i;:::-;733:23;;:7;:5;:7::i;:::-;:23;;;725:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22531:13:::1;;;;;;;;;;;22523:21;;:4;:21;;::::0;22501:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22642:41;22671:4;22677:5;22642:28;:41::i;:::-;22387:304:::0;;:::o;15797:24::-;;;;:::o;15975:27::-;;;;:::o;15903:25::-;;;;:::o;4513:413::-;4606:4;4623:24;4650:11;:25;4662:12;:10;:12::i;:::-;4650:25;;;;;;;;;;;;;;;:34;4676:7;4650:34;;;;;;;;;;;;;;;;4623:61;;4723:15;4703:16;:35;;4695:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;4816:67;4825:12;:10;:12::i;:::-;4839:7;4867:15;4848:16;:34;4816:8;:67::i;:::-;4914:4;4907:11;;;4513:413;;;;:::o;20938:259::-;744:12;:10;:12::i;:::-;733:23;;:7;:5;:7::i;:::-;:23;;;725:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21079:4:::1;21071;21066:1;21050:13;:11;:13::i;:::-;:17;;;;:::i;:::-;21049:26;;;;:::i;:::-;21048:35;;;;:::i;:::-;21038:6;:45;;21016:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;21182:6;21172;:17;;;;:::i;:::-;21159:10;:30;;;;20938:259:::0;:::o;15261:29::-;;;;;;;;;;;;;:::o;3271:175::-;3357:4;3374:42;3384:12;:10;:12::i;:::-;3398:9;3409:6;3374:9;:42::i;:::-;3434:4;3427:11;;3271:175;;;;:::o;18679:1062::-;18763:18;18837:95;18961:22;;;;;;;;;;;;;;;;;18951:33;;;;;;19013:10;;;;;;;;;;;;;;;;;19003:21;;;;;;19043:13;19083:4;18808:295;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;18784:330;;;;;;18763:351;;19127:18;19201:49;19279:23;;;;;;;;;;;;;;;;;19269:34;;;;;;19330:1;19172:175;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;19148:210;;;;;;19127:231;;19371:14;19476:10;19505;19412:134;;;;;;;;;:::i;:::-;;;;;;;;;;;;;19388:169;;;;;;19371:186;;19570:14;19587:26;19597:6;19605:1;19608;19611;19587:26;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19570:43;;19642:7;:5;:7::i;:::-;19632:17;;:6;:17;;;19624:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;19700:4;19684:13;;:20;;;;;;;;;;;;;;;;;;19729:4;19715:11;;:18;;;;;;;;;;;;;;;;;;18752:989;;;;18679:1062;;;:::o;16179:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;27400:222::-;27480:14;;;;;;;;;;;27464:30;;:12;:10;:12::i;:::-;:30;;;27456:39;;;;;;27524:24;27542:4;27524:9;:24::i;:::-;27514:6;:34;;:48;;;;;27561:1;27552:6;:10;27514:48;27506:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27590:24;27607:6;27590:16;:24::i;:::-;27400:222;:::o;23104:161::-;744:12;:10;:12::i;:::-;733:23;;:7;:5;:7::i;:::-;:23;;;725:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23213:10:::1;;;;;;;;;;;23184:40;;23202:9;23184:40;;;;;;;;;;;;23248:9;23235:10;;:22;;;;;;;;;;;;;;;;;;23104:161:::0;:::o;15472:33::-;;;;;;;;;;;;;:::o;15297:25::-;;;;;;;;;;;;;:::o;22197:182::-;744:12;:10;:12::i;:::-;733:23;;:7;:5;:7::i;:::-;:23;;;725:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22313:8:::1;22282:19;:28;22302:7;22282:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;22353:7;22337:34;;;22362:8;22337:34;;;;;;:::i;:::-;;;;;;;;22197:182:::0;;:::o;15678:39::-;;;;;;;;;;;;;:::o;20180:497::-;20288:4;744:12;:10;:12::i;:::-;733:23;;:7;:5;:7::i;:::-;:23;;;725:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20367:6:::1;20362:1;20346:13;:11;:13::i;:::-;:17;;;;:::i;:::-;20345:28;;;;:::i;:::-;20332:9;:41;;20310:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;20522:4;20517:1;20501:13;:11;:13::i;:::-;:17;;;;:::i;:::-;20500:26;;;;:::i;:::-;20487:9;:39;;20465:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;20638:9;20617:18;:30;;;;20665:4;20658:11;;20180:497:::0;;;:::o;21205:143::-;744:12;:10;:12::i;:::-;733:23;;:7;:5;:7::i;:::-;:23;;;725:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21336:4:::1;21309:16;:24;21326:6;21309:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;21205:143:::0;;:::o;15726:27::-;;;;:::o;3454:151::-;3543:7;3570:11;:18;3582:5;3570:18;;;;;;;;;;;;;;;:27;3589:7;3570:27;;;;;;;;;;;;;;;;3563:34;;3454:151;;;;:::o;15358:33::-;;;;:::o;16122:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;19975:135::-;20035:4;744:12;:10;:12::i;:::-;733:23;;:7;:5;:7::i;:::-;:23;;;725:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20075:5:::1;20052:20;;:28;;;;;;;;;;;;;;;;;;20098:4;20091:11;;19975:135:::0;:::o;22895:201::-;744:12;:10;:12::i;:::-;733:23;;:7;:5;:7::i;:::-;:23;;;725:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23028:14:::1;;;;;;;;;;;22987:56;;23009:17;22987:56;;;;;;;;;;;;23071:17;23054:14;;:34;;;;;;;;;;;;;;;;;;22895:201:::0;:::o;932:::-;744:12;:10;:12::i;:::-;733:23;;:7;:5;:7::i;:::-;:23;;;725:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1041:1:::1;1021:22;;:8;:22;;::::0;1013:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1097:28;1116:8;1097:18;:28::i;:::-;932:201:::0;:::o;144:98::-;197:7;224:10;217:17;;144:98;:::o;6681:380::-;6834:1;6817:19;;:5;:19;;;6809:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6915:1;6896:21;;:7;:21;;;6888:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6999:6;6969:11;:18;6981:5;6969:18;;;;;;;;;;;;;;;:27;6988:7;6969:27;;;;;;;;;;;;;;;:36;;;;7037:7;7021:32;;7030:5;7021:32;;;7046:6;7021:32;;;;;;:::i;:::-;;;;;;;;6681:380;;;:::o;23457:3820::-;23605:1;23589:18;;:4;:18;;;23581:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23682:1;23668:16;;:2;:16;;;23660:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;23744:12;:18;23757:4;23744:18;;;;;;;;;;;;;;;;;;;;;;;;;23743:19;23735:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;23804:12;:16;23817:2;23804:16;;;;;;;;;;;;;;;;;;;;;;;;;23803:17;23795:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;23867:1;23857:6;:11;23853:93;;23885:28;23901:4;23907:2;23911:1;23885:15;:28::i;:::-;23928:7;;23853:93;23962:14;;;;;;;;;;;23958:1666;;;24005:7;:5;:7::i;:::-;23997:15;;:4;:15;;;;:49;;;;;24039:7;:5;:7::i;:::-;24033:13;;:2;:13;;;;23997:49;:86;;;;;24081:1;24067:16;;:2;:16;;;;23997:86;:128;;;;;24118:6;24104:21;;:2;:21;;;;23997:128;:158;;;;;24147:8;;;;;;;;;;;24146:9;23997:158;23993:1620;;;24181:13;;;;;;;;;;;24176:150;;24227:19;:25;24247:4;24227:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;24256:19;:23;24276:2;24256:23;;;;;;;;;;;;;;;;;;;;;;;;;24227:52;24219:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;24176:150;24482:20;;;;;;;;;;;24478:425;;;24537:7;:5;:7::i;:::-;24531:13;;:2;:13;;;;:47;;;;;24562:15;24548:30;;:2;:30;;;;24531:47;:79;;;;;24596:13;;;;;;;;;;;24582:28;;:2;:28;;;;24531:79;24527:357;;;24689:12;24647:28;:39;24676:9;24647:39;;;;;;;;;;;;;;;;:54;24639:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;24848:12;24806:28;:39;24835:9;24806:39;;;;;;;;;;;;;;;:54;;;;24527:357;24478:425;24955:25;:31;24981:4;24955:31;;;;;;;;;;;;;;;;;;;;;;;;;:56;;;;;24991:16;:20;25008:2;24991:20;;;;;;;;;;;;;;;;;;;;;;;;;24990:21;24955:56;24951:647;;;25054:5;;25044:6;:15;;25036:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;25159:10;;25142:13;25152:2;25142:9;:13::i;:::-;25133:6;:22;;;;:::i;:::-;:36;;25125:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24951:647;;;25269:25;:29;25295:2;25269:29;;;;;;;;;;;;;;;;;;;;;;;;;:56;;;;;25303:16;:22;25320:4;25303:22;;;;;;;;;;;;;;;;;;;;;;;;;25302:23;25269:56;25265:333;;;25368:5;;25358:6;:15;;25350:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25265:333;;;25465:16;:20;25482:2;25465:20;;;;;;;;;;;;;;;;;;;;;;;;;25460:138;;25544:10;;25527:13;25537:2;25527:9;:13::i;:::-;25518:6;:22;;;;:::i;:::-;:36;;25510:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25460:138;25265:333;24951:647;23993:1620;23958:1666;25636:28;25667:24;25685:4;25667:9;:24::i;:::-;25636:55;;25702:12;25741:18;;25717:20;:42;;25702:57;;25776:7;:35;;;;;25800:11;;;;;;;;;;;25776:35;:61;;;;;25829:8;;;;;;;;;;;25828:9;25776:61;:110;;;;;25855:25;:31;25881:4;25855:31;;;;;;;;;;;;;;;;;;;;;;;;;25854:32;25776:110;:153;;;;;25904:19;:25;25924:4;25904:25;;;;;;;;;;;;;;;;;;;;;;;;;25903:26;25776:153;:194;;;;;25947:19;:23;25967:2;25947:23;;;;;;;;;;;;;;;;;;;;;;;;;25946:24;25776:194;25772:302;;;25998:4;25987:8;;:15;;;;;;;;;;;;;;;;;;26019:10;:8;:10::i;:::-;26057:5;26046:8;;:16;;;;;;;;;;;;;;;;;;25772:302;26086:12;26102:8;;;;;;;;;;;26101:9;26086:24;;26212:19;:25;26232:4;26212:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;26241:19;:23;26261:2;26241:23;;;;;;;;;;;;;;;;;;;;;;;;;26212:52;26208:100;;;26291:5;26281:15;;26208:100;26320:12;26425:7;26421:803;;;26477:25;:29;26503:2;26477:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;26526:1;26510:13;;:17;26477:50;26473:602;;;26555:34;26585:3;26555:25;26566:13;;26555:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;26548:41;;26646:13;;26632:10;;26625:4;:17;;;;:::i;:::-;26624:35;;;;:::i;:::-;26608:12;;:51;;;;;;;:::i;:::-;;;;;;;;26726:13;;26706:16;;26699:4;:23;;;;:::i;:::-;26698:41;;;;:::i;:::-;26678:16;;:61;;;;;;;:::i;:::-;;;;;;;;26473:602;;;26801:25;:31;26827:4;26801:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;26851:1;26836:12;;:16;26801:51;26797:278;;;26880:33;26909:3;26880:24;26891:12;;26880:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;26873:40;;26969:12;;26956:9;;26949:4;:16;;;;:::i;:::-;26948:33;;;;:::i;:::-;26932:12;;:49;;;;;;;:::i;:::-;;;;;;;;27047:12;;27028:15;;27021:4;:22;;;;:::i;:::-;27020:39;;;;:::i;:::-;27000:16;;:59;;;;;;;:::i;:::-;;;;;;;;26797:278;26473:602;27102:1;27095:4;:8;27091:91;;;27124:42;27140:4;27154;27161;27124:15;:42::i;:::-;27091:91;27208:4;27198:14;;;;;:::i;:::-;;;26421:803;27236:33;27252:4;27258:2;27262:6;27236:15;:33::i;:::-;23570:3707;;;;23457:3820;;;;:::o;1141:191::-;1215:16;1234:6;;;;;;;;;;;1215:25;;1260:8;1251:6;;:17;;;;;;;;;;;;;;;;;;1315:8;1284:40;;1305:8;1284:40;;;;;;;;;;;;1204:128;1141:191;:::o;22699:188::-;22816:5;22782:25;:31;22808:4;22782:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;22873:5;22839:40;;22867:4;22839:40;;;;;;;;;;;;22699:188;;:::o;27634:589::-;27760:21;27798:1;27784:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27760:40;;27829:4;27811;27816:1;27811:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;27855:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27845:4;27850:1;27845:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;27890:62;27907:4;27922:15;27940:11;27890:8;:62::i;:::-;27991:15;:66;;;28072:11;28098:1;28142:4;28169;28189:15;27991:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27689:534;27634:589;:::o;4934:733::-;5092:1;5074:20;;:6;:20;;;5066:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;5176:1;5155:23;;:9;:23;;;5147:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;5231:47;5252:6;5260:9;5271:6;5231:20;:47::i;:::-;5291:21;5315:9;:17;5325:6;5315:17;;;;;;;;;;;;;;;;5291:41;;5368:6;5351:13;:23;;5343:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;5489:6;5473:13;:22;5453:9;:17;5463:6;5453:17;;;;;;;;;;;;;;;:42;;;;5541:6;5517:9;:20;5527:9;5517:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;5582:9;5565:35;;5574:6;5565:35;;;5593:6;5565:35;;;;;;:::i;:::-;;;;;;;;5613:46;5633:6;5641:9;5652:6;5613:19;:46::i;:::-;5055:612;4934:733;;;:::o;28231:876::-;28270:23;28296:24;28314:4;28296:9;:24::i;:::-;28270:50;;28331:25;28378:12;;28359:16;;:31;;;;:::i;:::-;28331:59;;28401:12;28449:1;28430:15;:20;28426:59;;28467:7;;;;;28426:59;28540:2;28519:18;;:23;;;;:::i;:::-;28501:15;:41;28497:115;;;28598:2;28577:18;;:23;;;;:::i;:::-;28559:41;;28497:115;28624:25;28652:21;28624:49;;28684:33;28701:15;28684:16;:33::i;:::-;28730:18;28751:44;28777:17;28751:21;:25;;:44;;;;:::i;:::-;28730:65;;28806:17;28826:51;28859:17;28826:28;28841:12;;28826:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;28806:71;;28909:1;28890:16;:20;;;;28936:1;28921:12;:16;;;;28972:10;;;;;;;;;;;28964:24;;28996:9;28964:46;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28950:60;;;;;29043:14;;;;;;;;;;;29035:28;;29072:21;29035:64;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29021:78;;;;;28259:848;;;;;;28231:876;:::o;8687:98::-;8745:7;8776:1;8772;:5;;;;:::i;:::-;8765:12;;8687:98;;;;:::o;8793:::-;8851:7;8882:1;8878;:5;;;;:::i;:::-;8871:12;;8793:98;;;;:::o;7069:125::-;;;;:::o;7202:124::-;;;;:::o;8581:98::-;8639:7;8670:1;8666;:5;;;;:::i;:::-;8659:12;;8581:98;;;;:::o;88:117:1:-;197:1;194;187: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:99::-;1222:6;1256:5;1250:12;1240:22;;1170:99;;;:::o;1275:169::-;1359:11;1393:6;1388:3;1381:19;1433:4;1428:3;1424:14;1409:29;;1275:169;;;;:::o;1450:139::-;1539:6;1534:3;1529;1523:23;1580:1;1571:6;1566:3;1562:16;1555:27;1450:139;;;:::o;1595:102::-;1636:6;1687:2;1683:7;1678:2;1671:5;1667:14;1663:28;1653:38;;1595:102;;;:::o;1703:377::-;1791:3;1819:39;1852:5;1819:39;:::i;:::-;1874:71;1938:6;1933:3;1874:71;:::i;:::-;1867:78;;1954:65;2012:6;2007:3;2000:4;1993:5;1989:16;1954:65;:::i;:::-;2044:29;2066:6;2044:29;:::i;:::-;2039:3;2035:39;2028:46;;1795:285;1703:377;;;;:::o;2086:313::-;2199:4;2237:2;2226:9;2222:18;2214:26;;2286:9;2280:4;2276:20;2272:1;2261:9;2257:17;2250:47;2314:78;2387:4;2378:6;2314:78;:::i;:::-;2306:86;;2086:313;;;;:::o;2405:126::-;2442:7;2482:42;2475:5;2471:54;2460:65;;2405:126;;;:::o;2537:96::-;2574:7;2603:24;2621:5;2603:24;:::i;:::-;2592:35;;2537:96;;;:::o;2639:122::-;2712:24;2730:5;2712:24;:::i;:::-;2705:5;2702:35;2692:63;;2751:1;2748;2741:12;2692:63;2639:122;:::o;2767:139::-;2813:5;2851:6;2838:20;2829:29;;2867:33;2894:5;2867:33;:::i;:::-;2767:139;;;;:::o;2912:474::-;2980:6;2988;3037:2;3025:9;3016:7;3012:23;3008:32;3005:119;;;3043:79;;:::i;:::-;3005:119;3163:1;3188:53;3233:7;3224:6;3213:9;3209:22;3188:53;:::i;:::-;3178:63;;3134:117;3290:2;3316:53;3361:7;3352:6;3341:9;3337:22;3316:53;:::i;:::-;3306:63;;3261:118;2912:474;;;;;:::o;3392:90::-;3426:7;3469:5;3462:13;3455:21;3444:32;;3392:90;;;:::o;3488:109::-;3569:21;3584:5;3569:21;:::i;:::-;3564:3;3557:34;3488:109;;:::o;3603:210::-;3690:4;3728:2;3717:9;3713:18;3705:26;;3741:65;3803:1;3792:9;3788:17;3779:6;3741:65;:::i;:::-;3603:210;;;;:::o;3819:60::-;3847:3;3868:5;3861:12;;3819:60;;;:::o;3885:142::-;3935:9;3968:53;3986:34;3995:24;4013:5;3995:24;:::i;:::-;3986:34;:::i;:::-;3968:53;:::i;:::-;3955:66;;3885:142;;;:::o;4033:126::-;4083:9;4116:37;4147:5;4116:37;:::i;:::-;4103:50;;4033:126;;;:::o;4165:153::-;4242:9;4275:37;4306:5;4275:37;:::i;:::-;4262:50;;4165:153;;;:::o;4324:185::-;4438:64;4496:5;4438:64;:::i;:::-;4433:3;4426:77;4324:185;;:::o;4515:276::-;4635:4;4673:2;4662:9;4658:18;4650:26;;4686:98;4781:1;4770:9;4766:17;4757:6;4686:98;:::i;:::-;4515:276;;;;:::o;4797:118::-;4884:24;4902:5;4884:24;:::i;:::-;4879:3;4872:37;4797:118;;:::o;4921:222::-;5014:4;5052:2;5041:9;5037:18;5029:26;;5065:71;5133:1;5122:9;5118:17;5109:6;5065:71;:::i;:::-;4921:222;;;;:::o;5149:329::-;5208:6;5257:2;5245:9;5236:7;5232:23;5228:32;5225:119;;;5263:79;;:::i;:::-;5225:119;5383:1;5408:53;5453:7;5444:6;5433:9;5429:22;5408:53;:::i;:::-;5398:63;;5354:117;5149:329;;;;:::o;5484:619::-;5561:6;5569;5577;5626:2;5614:9;5605:7;5601:23;5597:32;5594:119;;;5632:79;;:::i;:::-;5594:119;5752:1;5777:53;5822:7;5813:6;5802:9;5798:22;5777:53;:::i;:::-;5767:63;;5723:117;5879:2;5905:53;5950:7;5941:6;5930:9;5926:22;5905:53;:::i;:::-;5895:63;;5850:118;6007:2;6033:53;6078:7;6069:6;6058:9;6054:22;6033:53;:::i;:::-;6023:63;;5978:118;5484:619;;;;;:::o;6109:118::-;6196:24;6214:5;6196:24;:::i;:::-;6191:3;6184:37;6109:118;;:::o;6233:222::-;6326:4;6364:2;6353:9;6349:18;6341:26;;6377:71;6445:1;6434:9;6430:17;6421:6;6377:71;:::i;:::-;6233:222;;;;:::o;6461:86::-;6496:7;6536:4;6529:5;6525:16;6514:27;;6461:86;;;:::o;6553:112::-;6636:22;6652:5;6636:22;:::i;:::-;6631:3;6624:35;6553:112;;:::o;6671:214::-;6760:4;6798:2;6787:9;6783:18;6775:26;;6811:67;6875:1;6864:9;6860:17;6851:6;6811:67;:::i;:::-;6671:214;;;;:::o;6891:329::-;6950:6;6999:2;6987:9;6978:7;6974:23;6970:32;6967:119;;;7005:79;;:::i;:::-;6967:119;7125:1;7150:53;7195:7;7186:6;7175:9;7171:22;7150:53;:::i;:::-;7140:63;;7096:117;6891:329;;;;:::o;7226:116::-;7296:21;7311:5;7296:21;:::i;:::-;7289:5;7286:32;7276:60;;7332:1;7329;7322:12;7276:60;7226:116;:::o;7348:133::-;7391:5;7429:6;7416:20;7407:29;;7445:30;7469:5;7445:30;:::i;:::-;7348:133;;;;:::o;7487:323::-;7543:6;7592:2;7580:9;7571:7;7567:23;7563:32;7560:119;;;7598:79;;:::i;:::-;7560:119;7718:1;7743:50;7785:7;7776:6;7765:9;7761:22;7743:50;:::i;:::-;7733:60;;7689:114;7487:323;;;;:::o;7816:468::-;7881:6;7889;7938:2;7926:9;7917:7;7913:23;7909:32;7906:119;;;7944:79;;:::i;:::-;7906:119;8064:1;8089:53;8134:7;8125:6;8114:9;8110:22;8089:53;:::i;:::-;8079:63;;8035:117;8191:2;8217:50;8259:7;8250:6;8239:9;8235:22;8217:50;:::i;:::-;8207:60;;8162:115;7816:468;;;;;:::o;8290:118::-;8361:22;8377:5;8361:22;:::i;:::-;8354:5;8351:33;8341:61;;8398:1;8395;8388:12;8341:61;8290:118;:::o;8414:135::-;8458:5;8496:6;8483:20;8474:29;;8512:31;8537:5;8512:31;:::i;:::-;8414:135;;;;:::o;8555:77::-;8592:7;8621:5;8610:16;;8555:77;;;:::o;8638:122::-;8711:24;8729:5;8711:24;:::i;:::-;8704:5;8701:35;8691:63;;8750:1;8747;8740:12;8691:63;8638:122;:::o;8766:139::-;8812:5;8850:6;8837:20;8828:29;;8866:33;8893:5;8866:33;:::i;:::-;8766:139;;;;:::o;8911:615::-;8986:6;8994;9002;9051:2;9039:9;9030:7;9026:23;9022:32;9019:119;;;9057:79;;:::i;:::-;9019:119;9177:1;9202:51;9245:7;9236:6;9225:9;9221:22;9202:51;:::i;:::-;9192:61;;9148:115;9302:2;9328:53;9373:7;9364:6;9353:9;9349:22;9328:53;:::i;:::-;9318:63;;9273:118;9430:2;9456:53;9501:7;9492:6;9481:9;9477:22;9456:53;:::i;:::-;9446:63;;9401:118;8911:615;;;;;:::o;9532:474::-;9600:6;9608;9657:2;9645:9;9636:7;9632:23;9628:32;9625:119;;;9663:79;;:::i;:::-;9625:119;9783:1;9808:53;9853:7;9844:6;9833:9;9829:22;9808:53;:::i;:::-;9798:63;;9754:117;9910:2;9936:53;9981:7;9972:6;9961:9;9957:22;9936:53;:::i;:::-;9926:63;;9881:118;9532:474;;;;;:::o;10012:182::-;10152:34;10148:1;10140:6;10136:14;10129:58;10012:182;:::o;10200:366::-;10342:3;10363:67;10427:2;10422:3;10363:67;:::i;:::-;10356:74;;10439:93;10528:3;10439:93;:::i;:::-;10557:2;10552:3;10548:12;10541:19;;10200:366;;;:::o;10572:419::-;10738:4;10776:2;10765:9;10761:18;10753:26;;10825:9;10819:4;10815:20;10811:1;10800:9;10796:17;10789:47;10853:131;10979:4;10853:131;:::i;:::-;10845:139;;10572:419;;;:::o;10997:180::-;11045:77;11042:1;11035:88;11142:4;11139:1;11132:15;11166:4;11163:1;11156:15;11183:191;11223:3;11242:20;11260:1;11242:20;:::i;:::-;11237:25;;11276:20;11294:1;11276:20;:::i;:::-;11271:25;;11319:1;11316;11312:9;11305:16;;11340:3;11337:1;11334:10;11331:36;;;11347:18;;:::i;:::-;11331:36;11183:191;;;;:::o;11380:179::-;11520:31;11516:1;11508:6;11504:14;11497:55;11380:179;:::o;11565:366::-;11707:3;11728:67;11792:2;11787:3;11728:67;:::i;:::-;11721:74;;11804:93;11893:3;11804:93;:::i;:::-;11922:2;11917:3;11913:12;11906:19;;11565:366;;;:::o;11937:419::-;12103:4;12141:2;12130:9;12126:18;12118:26;;12190:9;12184:4;12180:20;12176:1;12165:9;12161:17;12154:47;12218:131;12344:4;12218:131;:::i;:::-;12210:139;;11937:419;;;:::o;12362:180::-;12410:77;12407:1;12400:88;12507:4;12504:1;12497:15;12531:4;12528:1;12521:15;12548:320;12592:6;12629:1;12623:4;12619:12;12609:22;;12676:1;12670:4;12666:12;12697:18;12687:81;;12753:4;12745:6;12741:17;12731:27;;12687:81;12815:2;12807:6;12804:14;12784:18;12781:38;12778:84;;12834:18;;:::i;:::-;12778:84;12599:269;12548:320;;;:::o;12874:410::-;12914:7;12937:20;12955:1;12937:20;:::i;:::-;12932:25;;12971:20;12989:1;12971:20;:::i;:::-;12966:25;;13026:1;13023;13019:9;13048:30;13066:11;13048:30;:::i;:::-;13037:41;;13227:1;13218:7;13214:15;13211:1;13208:22;13188:1;13181:9;13161:83;13138:139;;13257:18;;:::i;:::-;13138:139;12922:362;12874:410;;;;:::o;13290:180::-;13338:77;13335:1;13328:88;13435:4;13432:1;13425:15;13459:4;13456:1;13449:15;13476:185;13516:1;13533:20;13551:1;13533:20;:::i;:::-;13528:25;;13567:20;13585:1;13567:20;:::i;:::-;13562:25;;13606:1;13596:35;;13611:18;;:::i;:::-;13596:35;13653:1;13650;13646:9;13641:14;;13476:185;;;;:::o;13667:182::-;13807:34;13803:1;13795:6;13791:14;13784:58;13667:182;:::o;13855:366::-;13997:3;14018:67;14082:2;14077:3;14018:67;:::i;:::-;14011:74;;14094:93;14183:3;14094:93;:::i;:::-;14212:2;14207:3;14203:12;14196:19;;13855:366;;;:::o;14227:419::-;14393:4;14431:2;14420:9;14416:18;14408:26;;14480:9;14474:4;14470:20;14466:1;14455:9;14451:17;14444:47;14508:131;14634:4;14508:131;:::i;:::-;14500:139;;14227:419;;;:::o;14652:227::-;14792:34;14788:1;14780:6;14776:14;14769:58;14861:10;14856:2;14848:6;14844:15;14837:35;14652:227;:::o;14885:366::-;15027:3;15048:67;15112:2;15107:3;15048:67;:::i;:::-;15041:74;;15124:93;15213:3;15124:93;:::i;:::-;15242:2;15237:3;15233:12;15226:19;;14885:366;;;:::o;15257:419::-;15423:4;15461:2;15450:9;15446:18;15438:26;;15510:9;15504:4;15500:20;15496:1;15485:9;15481:17;15474:47;15538:131;15664:4;15538:131;:::i;:::-;15530:139;;15257:419;;;:::o;15682:244::-;15822:34;15818:1;15810:6;15806:14;15799:58;15891:27;15886:2;15878:6;15874:15;15867:52;15682:244;:::o;15932:366::-;16074:3;16095:67;16159:2;16154:3;16095:67;:::i;:::-;16088:74;;16171:93;16260:3;16171:93;:::i;:::-;16289:2;16284:3;16280:12;16273:19;;15932:366;;;:::o;16304:419::-;16470:4;16508:2;16497:9;16493:18;16485:26;;16557:9;16551:4;16547:20;16543:1;16532:9;16528:17;16521:47;16585:131;16711:4;16585:131;:::i;:::-;16577:139;;16304:419;;;:::o;16729:224::-;16869:34;16865:1;16857:6;16853:14;16846:58;16938:7;16933:2;16925:6;16921:15;16914:32;16729:224;:::o;16959:366::-;17101:3;17122:67;17186:2;17181:3;17122:67;:::i;:::-;17115:74;;17198:93;17287:3;17198:93;:::i;:::-;17316:2;17311:3;17307:12;17300:19;;16959:366;;;:::o;17331:419::-;17497:4;17535:2;17524:9;17520:18;17512:26;;17584:9;17578:4;17574:20;17570:1;17559:9;17555:17;17548:47;17612:131;17738:4;17612:131;:::i;:::-;17604:139;;17331:419;;;:::o;17756:224::-;17896:34;17892:1;17884:6;17880:14;17873:58;17965:7;17960:2;17952:6;17948:15;17941:32;17756:224;:::o;17986:366::-;18128:3;18149:67;18213:2;18208:3;18149:67;:::i;:::-;18142:74;;18225:93;18314:3;18225:93;:::i;:::-;18343:2;18338:3;18334:12;18327:19;;17986:366;;;:::o;18358:419::-;18524:4;18562:2;18551:9;18547:18;18539:26;;18611:9;18605:4;18601:20;18597:1;18586:9;18582:17;18575:47;18639:131;18765:4;18639:131;:::i;:::-;18631:139;;18358:419;;;:::o;18783:118::-;18870:24;18888:5;18870:24;:::i;:::-;18865:3;18858:37;18783:118;;:::o;18907:664::-;19112:4;19150:3;19139:9;19135:19;19127:27;;19164:71;19232:1;19221:9;19217:17;19208:6;19164:71;:::i;:::-;19245:72;19313:2;19302:9;19298:18;19289:6;19245:72;:::i;:::-;19327;19395:2;19384:9;19380:18;19371:6;19327:72;:::i;:::-;19409;19477:2;19466:9;19462:18;19453:6;19409:72;:::i;:::-;19491:73;19559:3;19548:9;19544:19;19535:6;19491:73;:::i;:::-;18907:664;;;;;;;;:::o;19577:442::-;19726:4;19764:2;19753:9;19749:18;19741:26;;19777:71;19845:1;19834:9;19830:17;19821:6;19777:71;:::i;:::-;19858:72;19926:2;19915:9;19911:18;19902:6;19858:72;:::i;:::-;19940;20008:2;19997:9;19993:18;19984:6;19940:72;:::i;:::-;19577:442;;;;;;:::o;20025:148::-;20127:11;20164:3;20149:18;;20025:148;;;;:::o;20179:214::-;20319:66;20315:1;20307:6;20303:14;20296:90;20179:214;:::o;20399:400::-;20559:3;20580:84;20662:1;20657:3;20580:84;:::i;:::-;20573:91;;20673:93;20762:3;20673:93;:::i;:::-;20791:1;20786:3;20782:11;20775:18;;20399:400;;;:::o;20805:79::-;20844:7;20873:5;20862:16;;20805:79;;;:::o;20890:157::-;20995:45;21015:24;21033:5;21015:24;:::i;:::-;20995:45;:::i;:::-;20990:3;20983:58;20890:157;;:::o;21053:663::-;21294:3;21316:148;21460:3;21316:148;:::i;:::-;21309:155;;21474:75;21545:3;21536:6;21474:75;:::i;:::-;21574:2;21569:3;21565:12;21558:19;;21587:75;21658:3;21649:6;21587:75;:::i;:::-;21687:2;21682:3;21678:12;21671:19;;21707:3;21700:10;;21053:663;;;;;:::o;21722:545::-;21895:4;21933:3;21922:9;21918:19;21910:27;;21947:71;22015:1;22004:9;22000:17;21991:6;21947:71;:::i;:::-;22028:68;22092:2;22081:9;22077:18;22068:6;22028:68;:::i;:::-;22106:72;22174:2;22163:9;22159:18;22150:6;22106:72;:::i;:::-;22188;22256:2;22245:9;22241:18;22232:6;22188:72;:::i;:::-;21722:545;;;;;;;:::o;22273:167::-;22413:19;22409:1;22401:6;22397:14;22390:43;22273:167;:::o;22446:366::-;22588:3;22609:67;22673:2;22668:3;22609:67;:::i;:::-;22602:74;;22685:93;22774:3;22685:93;:::i;:::-;22803:2;22798:3;22794:12;22787:19;;22446:366;;;:::o;22818:419::-;22984:4;23022:2;23011:9;23007:18;22999:26;;23071:9;23065:4;23061:20;23057:1;23046:9;23042:17;23035:47;23099:131;23225:4;23099:131;:::i;:::-;23091:139;;22818:419;;;:::o;23243:162::-;23383:14;23379:1;23371:6;23367:14;23360:38;23243:162;:::o;23411:366::-;23553:3;23574:67;23638:2;23633:3;23574:67;:::i;:::-;23567:74;;23650:93;23739:3;23650:93;:::i;:::-;23768:2;23763:3;23759:12;23752:19;;23411:366;;;:::o;23783:419::-;23949:4;23987:2;23976:9;23972:18;23964:26;;24036:9;24030:4;24026:20;24022:1;24011:9;24007:17;24000:47;24064:131;24190:4;24064:131;:::i;:::-;24056:139;;23783:419;;;:::o;24208:240::-;24348:34;24344:1;24336:6;24332:14;24325:58;24417:23;24412:2;24404:6;24400:15;24393:48;24208:240;:::o;24454:366::-;24596:3;24617:67;24681:2;24676:3;24617:67;:::i;:::-;24610:74;;24693:93;24782:3;24693:93;:::i;:::-;24811:2;24806:3;24802:12;24795:19;;24454:366;;;:::o;24826:419::-;24992:4;25030:2;25019:9;25015:18;25007:26;;25079:9;25073:4;25069:20;25065:1;25054:9;25050:17;25043:47;25107:131;25233:4;25107:131;:::i;:::-;25099:139;;24826:419;;;:::o;25251:239::-;25391:34;25387:1;25379:6;25375:14;25368:58;25460:22;25455:2;25447:6;25443:15;25436:47;25251:239;:::o;25496:366::-;25638:3;25659:67;25723:2;25718:3;25659:67;:::i;:::-;25652:74;;25735:93;25824:3;25735:93;:::i;:::-;25853:2;25848:3;25844:12;25837:19;;25496:366;;;:::o;25868:419::-;26034:4;26072:2;26061:9;26057:18;26049:26;;26121:9;26115:4;26111:20;26107:1;26096:9;26092:17;26085:47;26149:131;26275:4;26149:131;:::i;:::-;26141:139;;25868:419;;;:::o;26293:225::-;26433:34;26429:1;26421:6;26417:14;26410:58;26502:8;26497:2;26489:6;26485:15;26478:33;26293:225;:::o;26524:366::-;26666:3;26687:67;26751:2;26746:3;26687:67;:::i;:::-;26680:74;;26763:93;26852:3;26763:93;:::i;:::-;26881:2;26876:3;26872:12;26865:19;;26524:366;;;:::o;26896:419::-;27062:4;27100:2;27089:9;27085:18;27077:26;;27149:9;27143:4;27139:20;27135:1;27124:9;27120:17;27113:47;27177:131;27303:4;27177:131;:::i;:::-;27169:139;;26896:419;;;:::o;27321:223::-;27461:34;27457:1;27449:6;27445:14;27438:58;27530:6;27525:2;27517:6;27513:15;27506:31;27321:223;:::o;27550:366::-;27692:3;27713:67;27777:2;27772:3;27713:67;:::i;:::-;27706:74;;27789:93;27878:3;27789:93;:::i;:::-;27907:2;27902:3;27898:12;27891:19;;27550:366;;;:::o;27922:419::-;28088:4;28126:2;28115:9;28111:18;28103:26;;28175:9;28169:4;28165:20;28161:1;28150:9;28146:17;28139:47;28203:131;28329:4;28203:131;:::i;:::-;28195:139;;27922:419;;;:::o;28347:221::-;28487:34;28483:1;28475:6;28471:14;28464:58;28556:4;28551:2;28543:6;28539:15;28532:29;28347:221;:::o;28574:366::-;28716:3;28737:67;28801:2;28796:3;28737:67;:::i;:::-;28730:74;;28813:93;28902:3;28813:93;:::i;:::-;28931:2;28926:3;28922:12;28915:19;;28574:366;;;:::o;28946:419::-;29112:4;29150:2;29139:9;29135:18;29127:26;;29199:9;29193:4;29189:20;29185:1;29174:9;29170:17;29163:47;29227:131;29353:4;29227:131;:::i;:::-;29219:139;;28946:419;;;:::o;29371:224::-;29511:34;29507:1;29499:6;29495:14;29488:58;29580:7;29575:2;29567:6;29563:15;29556:32;29371:224;:::o;29601:366::-;29743:3;29764:67;29828:2;29823:3;29764:67;:::i;:::-;29757:74;;29840:93;29929:3;29840:93;:::i;:::-;29958:2;29953:3;29949:12;29942:19;;29601:366;;;:::o;29973:419::-;30139:4;30177:2;30166:9;30162:18;30154:26;;30226:9;30220:4;30216:20;30212:1;30201:9;30197:17;30190:47;30254:131;30380:4;30254:131;:::i;:::-;30246:139;;29973:419;;;:::o;30398:222::-;30538:34;30534:1;30526:6;30522:14;30515:58;30607:5;30602:2;30594:6;30590:15;30583:30;30398:222;:::o;30626:366::-;30768:3;30789:67;30853:2;30848:3;30789:67;:::i;:::-;30782:74;;30865:93;30954:3;30865:93;:::i;:::-;30983:2;30978:3;30974:12;30967:19;;30626:366;;;:::o;30998:419::-;31164:4;31202:2;31191:9;31187:18;31179:26;;31251:9;31245:4;31241:20;31237:1;31226:9;31222:17;31215:47;31279:131;31405:4;31279:131;:::i;:::-;31271:139;;30998:419;;;:::o;31423:167::-;31563:19;31559:1;31551:6;31547:14;31540:43;31423:167;:::o;31596:366::-;31738:3;31759:67;31823:2;31818:3;31759:67;:::i;:::-;31752:74;;31835:93;31924:3;31835:93;:::i;:::-;31953:2;31948:3;31944:12;31937:19;;31596:366;;;:::o;31968:419::-;32134:4;32172:2;32161:9;32157:18;32149:26;;32221:9;32215:4;32211:20;32207:1;32196:9;32192:17;32185:47;32249:131;32375:4;32249:131;:::i;:::-;32241:139;;31968:419;;;:::o;32393:165::-;32533:17;32529:1;32521:6;32517:14;32510:41;32393:165;:::o;32564:366::-;32706:3;32727:67;32791:2;32786:3;32727:67;:::i;:::-;32720:74;;32803:93;32892:3;32803:93;:::i;:::-;32921:2;32916:3;32912:12;32905:19;;32564:366;;;:::o;32936:419::-;33102:4;33140:2;33129:9;33125:18;33117:26;;33189:9;33183:4;33179:20;33175:1;33164:9;33160:17;33153:47;33217:131;33343:4;33217:131;:::i;:::-;33209:139;;32936:419;;;:::o;33361:172::-;33501:24;33497:1;33489:6;33485:14;33478:48;33361:172;:::o;33539:366::-;33681:3;33702:67;33766:2;33761:3;33702:67;:::i;:::-;33695:74;;33778:93;33867:3;33778:93;:::i;:::-;33896:2;33891:3;33887:12;33880:19;;33539:366;;;:::o;33911:419::-;34077:4;34115:2;34104:9;34100:18;34092:26;;34164:9;34158:4;34154:20;34150:1;34139:9;34135:17;34128:47;34192:131;34318:4;34192:131;:::i;:::-;34184:139;;33911:419;;;:::o;34336:297::-;34476:34;34472:1;34464:6;34460:14;34453:58;34545:34;34540:2;34532:6;34528:15;34521:59;34614:11;34609:2;34601:6;34597:15;34590:36;34336:297;:::o;34639:366::-;34781:3;34802:67;34866:2;34861:3;34802:67;:::i;:::-;34795:74;;34878:93;34967:3;34878:93;:::i;:::-;34996:2;34991:3;34987:12;34980:19;;34639:366;;;:::o;35011:419::-;35177:4;35215:2;35204:9;35200:18;35192:26;;35264:9;35258:4;35254:20;35250:1;35239:9;35235:17;35228:47;35292:131;35418:4;35292:131;:::i;:::-;35284:139;;35011:419;;;:::o;35436:225::-;35576:34;35572:1;35564:6;35560:14;35553:58;35645:8;35640:2;35632:6;35628:15;35621:33;35436:225;:::o;35667:366::-;35809:3;35830:67;35894:2;35889:3;35830:67;:::i;:::-;35823:74;;35906:93;35995:3;35906:93;:::i;:::-;36024:2;36019:3;36015:12;36008:19;;35667:366;;;:::o;36039:419::-;36205:4;36243:2;36232:9;36228:18;36220:26;;36292:9;36286:4;36282:20;36278:1;36267:9;36263:17;36256:47;36320:131;36446:4;36320:131;:::i;:::-;36312:139;;36039:419;;;:::o;36464:169::-;36604:21;36600:1;36592:6;36588:14;36581:45;36464:169;:::o;36639:366::-;36781:3;36802:67;36866:2;36861:3;36802:67;:::i;:::-;36795:74;;36878:93;36967:3;36878:93;:::i;:::-;36996:2;36991:3;36987:12;36980:19;;36639:366;;;:::o;37011:419::-;37177:4;37215:2;37204:9;37200:18;37192:26;;37264:9;37258:4;37254:20;37250:1;37239:9;37235:17;37228:47;37292:131;37418:4;37292:131;:::i;:::-;37284:139;;37011:419;;;:::o;37436:226::-;37576:34;37572:1;37564:6;37560:14;37553:58;37645:9;37640:2;37632:6;37628:15;37621:34;37436:226;:::o;37668:366::-;37810:3;37831:67;37895:2;37890:3;37831:67;:::i;:::-;37824:74;;37907:93;37996:3;37907:93;:::i;:::-;38025:2;38020:3;38016:12;38009:19;;37668:366;;;:::o;38040:419::-;38206:4;38244:2;38233:9;38229:18;38221:26;;38293:9;38287:4;38283:20;38279:1;38268:9;38264:17;38257:47;38321:131;38447:4;38321:131;:::i;:::-;38313:139;;38040:419;;;:::o;38465:194::-;38505:4;38525:20;38543:1;38525:20;:::i;:::-;38520:25;;38559:20;38577:1;38559:20;:::i;:::-;38554:25;;38603:1;38600;38596:9;38588:17;;38627:1;38621:4;38618:11;38615:37;;;38632:18;;:::i;:::-;38615:37;38465:194;;;;:::o;38665:180::-;38713:77;38710:1;38703:88;38810:4;38807:1;38800:15;38834:4;38831:1;38824:15;38851:180;38899:77;38896:1;38889:88;38996:4;38993:1;38986:15;39020:4;39017:1;39010:15;39037:143;39094:5;39125:6;39119:13;39110:22;;39141:33;39168:5;39141:33;:::i;:::-;39037:143;;;;:::o;39186:351::-;39256:6;39305:2;39293:9;39284:7;39280:23;39276:32;39273:119;;;39311:79;;:::i;:::-;39273:119;39431:1;39456:64;39512:7;39503:6;39492:9;39488:22;39456:64;:::i;:::-;39446:74;;39402:128;39186:351;;;;:::o;39543:85::-;39588:7;39617:5;39606:16;;39543:85;;;:::o;39634:158::-;39692:9;39725:61;39743:42;39752:32;39778:5;39752:32;:::i;:::-;39743:42;:::i;:::-;39725:61;:::i;:::-;39712:74;;39634:158;;;:::o;39798:147::-;39893:45;39932:5;39893:45;:::i;:::-;39888:3;39881:58;39798:147;;:::o;39951:114::-;40018:6;40052:5;40046:12;40036:22;;39951:114;;;:::o;40071:184::-;40170:11;40204:6;40199:3;40192:19;40244:4;40239:3;40235:14;40220:29;;40071:184;;;;:::o;40261:132::-;40328:4;40351:3;40343:11;;40381:4;40376:3;40372:14;40364:22;;40261:132;;;:::o;40399:108::-;40476:24;40494:5;40476:24;:::i;:::-;40471:3;40464:37;40399:108;;:::o;40513:179::-;40582:10;40603:46;40645:3;40637:6;40603:46;:::i;:::-;40681:4;40676:3;40672:14;40658:28;;40513:179;;;;:::o;40698:113::-;40768:4;40800;40795:3;40791:14;40783:22;;40698:113;;;:::o;40847:732::-;40966:3;40995:54;41043:5;40995:54;:::i;:::-;41065:86;41144:6;41139:3;41065:86;:::i;:::-;41058:93;;41175:56;41225:5;41175:56;:::i;:::-;41254:7;41285:1;41270:284;41295:6;41292:1;41289:13;41270:284;;;41371:6;41365:13;41398:63;41457:3;41442:13;41398:63;:::i;:::-;41391:70;;41484:60;41537:6;41484:60;:::i;:::-;41474:70;;41330:224;41317:1;41314;41310:9;41305:14;;41270:284;;;41274:14;41570:3;41563:10;;40971:608;;;40847:732;;;;:::o;41585:831::-;41848:4;41886:3;41875:9;41871:19;41863:27;;41900:71;41968:1;41957:9;41953:17;41944:6;41900:71;:::i;:::-;41981:80;42057:2;42046:9;42042:18;42033:6;41981:80;:::i;:::-;42108:9;42102:4;42098:20;42093:2;42082:9;42078:18;42071:48;42136:108;42239:4;42230:6;42136:108;:::i;:::-;42128:116;;42254:72;42322:2;42311:9;42307:18;42298:6;42254:72;:::i;:::-;42336:73;42404:3;42393:9;42389:19;42380:6;42336:73;:::i;:::-;41585:831;;;;;;;;:::o;42422:225::-;42562:34;42558:1;42550:6;42546:14;42539:58;42631:8;42626:2;42618:6;42614:15;42607:33;42422:225;:::o;42653:366::-;42795:3;42816:67;42880:2;42875:3;42816:67;:::i;:::-;42809:74;;42892:93;42981:3;42892:93;:::i;:::-;43010:2;43005:3;43001:12;42994:19;;42653:366;;;:::o;43025:419::-;43191:4;43229:2;43218:9;43214:18;43206:26;;43278:9;43272:4;43268:20;43264:1;43253:9;43249:17;43242:47;43306:131;43432:4;43306:131;:::i;:::-;43298:139;;43025:419;;;:::o;43450:147::-;43551:11;43588:3;43573:18;;43450:147;;;;:::o;43603:114::-;;:::o;43723:398::-;43882:3;43903:83;43984:1;43979:3;43903:83;:::i;:::-;43896:90;;43995:93;44084:3;43995:93;:::i;:::-;44113:1;44108:3;44104:11;44097:18;;43723:398;;;:::o;44127:379::-;44311:3;44333:147;44476:3;44333:147;:::i;:::-;44326:154;;44497:3;44490:10;;44127:379;;;:::o

Swarm Source

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