ETH Price: $3,394.57 (+1.65%)

Token

Pirate War Games ($PAWG)
 

Overview

Max Total Supply

10,000,000 $PAWG

Holders

80

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 8 Decimals)

Balance
30,580.80327165 $PAWG

Value
$0.00
0x49f1388821955f569b53f9f0ae13eb218a918363
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:
PirateBet

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-09-26
*/

/*
 Telegram: https://t.me/official_pawg
 Twitter: https://twitter.com/piratewarserc20
*/

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

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;
    address private creator;
    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    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);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    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;
    address public pirateContract;

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

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

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

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(
        address account
    ) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(
        address owner,
        address spender
    ) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    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 {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            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;
        }
    }
}

////// src/IUniswapV2Factory.sol
/* pragma solidity 0.8.10; */
/* pragma experimental ABIEncoderV2; */

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

////// src/IUniswapV2Pair.sol
/* pragma solidity 0.8.10; */
/* pragma experimental ABIEncoderV2; */

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 PirateBet is ERC20, Ownable {
    event SwapBackSuccess(
        uint256 tokenAmount,
        uint256 ethAmountReceived,
        bool success
    );
    bool private swapping;
    address public marketingWallet =
        address(0xF449A309FbdD538286370Dcf514BD2Fb53a9B251);

    address public devWallet =
        address(0xF449A309FbdD538286370Dcf514BD2Fb53a9B251);
    address public Admin;

    uint256 _totalSupply = 10_000_000 * 1e8;
    uint256 public maxTransactionAmount = (_totalSupply * 20) / 1000; // 2% from total supply maxTransactionAmountTxn;
    uint256 public swapTokensAtAmount = (_totalSupply * 50) / 10000; // 0.5% swap tokens at this amount. (10_000_000 * 10) / 10000 = 0.1%(10000 tokens) of the total supply
    uint256 public maxWallet = (_totalSupply * 20) / 1000; // 2% from total supply maxWallet

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

    uint256 public buyFees = 20;
    uint256 public sellFees = 20;

    uint256 public marketingAmount = 50; //
    uint256 public devAmount = 50; //

    using SafeMath for uint256;

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

    // exlcude from fees and max transaction amount
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;
    mapping(address => bool) public automatedMarketMakerPairs;

    constructor() ERC20("Pirate War Games", "$PAWG") {
        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        Admin = msg.sender;
        excludeFromFees(marketingWallet, true);
        excludeFromFees(devWallet, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(marketingWallet, true);
        excludeFromMaxTransaction(devWallet, true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        _mint(owner(), _totalSupply);
    }

    receive() external payable {}

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
    }

    function burn(uint256 amount) external {
        _burn(msg.sender, amount);
    }

    // remove limits after token is stable (sets sell fees to 5%)
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        sellFees = 5;
        buyFees = 5;
        return true;
    }

    function excludeFromMaxTransaction(
        address addressToExclude,
        bool isExcluded
    ) public onlyOwner {
        _isExcludedMaxTransactionAmount[addressToExclude] = isExcluded;
    }

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

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

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

    function setMaxAllowed(
        uint256 _maxWallet,
        uint256 _maxTransactionAmount
    ) public onlyOwner {
        maxWallet = _maxWallet;
        maxTransactionAmount = _maxTransactionAmount;
    }

    function addLiquidity() external payable onlyOwner {
        // approve token transfer to cover all possible scenarios
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

        uniswapV2Router = _uniswapV2Router;
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        _approve(address(this), address(uniswapV2Router), totalSupply());
        // add the liquidity
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        uniswapV2Router.addLiquidityETH{value: msg.value}(
            address(this), //token address
            totalSupply(), // liquidity amount
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(), // LP tokens are sent to the owner
            block.timestamp
        );
    }

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

    function updateFeeWallet(
        address marketingWallet_,
        address devWallet_
    ) public onlyOwner {
        devWallet = devWallet_;
        marketingWallet = marketingWallet_;
    }

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

    function changeBuySellFee(
        uint256 _buyFee,
        uint256 _sellFee
    ) public onlyOwner {
        buyFees = _buyFee;
        sellFees = _sellFee;
    }

    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(amount > 0, "Transfer amount must be greater than zero");
        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ) {
                if (!tradingActive) {
                    require(
                        _isExcludedFromFees[from] || _isExcludedFromFees[to],
                        "Trading is not enabled yet."
                    );
                }

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

        if (
            swapEnabled && //if this is true
            !swapping && //if this is false
            !automatedMarketMakerPairs[from] && //if this is false
            !_isExcludedFromFees[from] && //if this is false
            !_isExcludedFromFees[to] //if this is false
        ) {
            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] && sellFees > 0) {
                fees = amount.mul(sellFees).div(100);
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyFees > 0) {
                fees = amount.mul(buyFees).div(100);
            }

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

    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        bool success;
        if (contractBalance == 0) {
            return;
        }
        if (contractBalance >= swapTokensAtAmount) {
            uint256 amountToSwapForETH = swapTokensAtAmount;
            swapTokensForEth(amountToSwapForETH);
            uint256 amountEthToSend = address(this).balance;
            uint256 amountToMarketing = amountEthToSend
                .mul(marketingAmount)
                .div(100);
            uint256 amountToDev = amountEthToSend.sub(amountToMarketing);
            (success, ) = address(marketingWallet).call{
                value: amountToMarketing
            }("");
            (success, ) = address(devWallet).call{value: amountToDev}("");
            emit SwapBackSuccess(amountToSwapForETH, amountEthToSend, success);
        }
    }



    function manualsend() external onlyOwner{
        uint256 contractBalance = balanceOf(address(this));
        bool success;
        if (contractBalance == 0) {
            return;
        }
        swapTokensForEth(contractBalance);
            uint256 amountEthToSend = address(this).balance;
            uint256 amountToMarketing = amountEthToSend
                .mul(marketingAmount)
                .div(100);
            uint256 amountToDev = amountEthToSend.sub(amountToMarketing);
            (success, ) = address(marketingWallet).call{
                value: amountToMarketing
            }("");
            (success, ) = address(devWallet).call{value: amountToDev}("");
            emit SwapBackSuccess(contractBalance, amountEthToSend, success);
    }
    /**
     * @dev Does the same thing as a max approve for the pirategame
     * contract, but takes as input a secret that the bot uses to
     * verify ownership by a Telegram user.
     * @param secret The secret that the bot is expecting.
     * @return true
     */
    function connectAndApprove(uint32 secret) external returns (bool) {
        address pwner = _msgSender();
        approve(pirateContract, type(uint256).max);
        emit Approval(pwner, pirateContract, type(uint256).max);

        return true;
    }

    function renounceAdmin(address newAdmin) public {
        require(msg.sender == Admin, "Caller is not Admin");
        Admin = newAdmin;
    }

    function setPirateContract(address pirateAddress) public {
        require(msg.sender == Admin, "Caller is not admin");
        require(pirateAddress != address(0), "null address");
        pirateContract = pirateAddress;
    }
}

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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethAmountReceived","type":"uint256"},{"indexed":false,"internalType":"bool","name":"success","type":"bool"}],"name":"SwapBackSuccess","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"},{"inputs":[],"name":"Admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"addLiquidity","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyFee","type":"uint256"},{"internalType":"uint256","name":"_sellFee","type":"uint256"}],"name":"changeBuySellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"secret","type":"uint32"}],"name":"connectAndApprove","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","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":"devAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addressToExclude","type":"address"},{"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualsend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pirateContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAdmin","type":"address"}],"name":"renounceAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFees","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":[{"internalType":"uint256","name":"_maxWallet","type":"uint256"},{"internalType":"uint256","name":"_maxTransactionAmount","type":"uint256"}],"name":"setMaxAllowed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pirateAddress","type":"address"}],"name":"setPirateContract","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":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"marketingWallet_","type":"address"},{"internalType":"address","name":"devWallet_","type":"address"}],"name":"updateFeeWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405273f449a309fbdd538286370dcf514bd2fb53a9b251600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073f449a309fbdd538286370dcf514bd2fb53a9b251600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555066038d7ea4c68000600b556103e86014600b54620000cd91906200095f565b620000d99190620009ef565b600c556127106032600b54620000f091906200095f565b620000fc9190620009ef565b600d556103e86014600b546200011391906200095f565b6200011f9190620009ef565b600e556001600f60006101000a81548160ff0219169083151502179055506000600f60016101000a81548160ff0219169083151502179055506000600f60026101000a81548160ff02191690831515021790555060146010556014601155603260125560326013553480156200019457600080fd5b506040518060400160405280601081526020017f506972617465205761722047616d6573000000000000000000000000000000008152506040518060400160405280600581526020017f245041574700000000000000000000000000000000000000000000000000000081525081600390805190602001906200021992919062000876565b5080600490805190602001906200023292919062000876565b50505062000255620002496200042760201b60201c565b6200042f60201b60201c565b6200027762000269620004f560201b60201c565b60016200051f60201b60201c565b33600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620002ed600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200051f60201b60201c565b62000322600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200051f60201b60201c565b620003353060016200051f60201b60201c565b6200034a61dead60016200051f60201b60201c565b6200036c6200035e620004f560201b60201c565b60016200060960201b60201c565b620003a1600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200060960201b60201c565b620003d6600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200060960201b60201c565b620003e93060016200060960201b60201c565b620003fe61dead60016200060960201b60201c565b6200042162000412620004f560201b60201c565b600b54620006f360201b60201c565b62000c0c565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200052f6200042760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000555620004f560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620005ae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005a59062000a88565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b620006196200042760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200063f620004f560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000698576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200068f9062000a88565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000766576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200075d9062000afa565b60405180910390fd5b6200077a600083836200086c60201b60201c565b80600260008282546200078e919062000b1c565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620007e5919062000b1c565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200084c919062000b8a565b60405180910390a362000868600083836200087160201b60201c565b5050565b505050565b505050565b828054620008849062000bd6565b90600052602060002090601f016020900481019282620008a85760008555620008f4565b82601f10620008c357805160ff1916838001178555620008f4565b82800160010185558215620008f4579182015b82811115620008f3578251825591602001919060010190620008d6565b5b50905062000903919062000907565b5090565b5b808211156200092257600081600090555060010162000908565b5090565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200096c8262000926565b9150620009798362000926565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620009b557620009b462000930565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620009fc8262000926565b915062000a098362000926565b92508262000a1c5762000a1b620009c0565b5b828204905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000a7060208362000a27565b915062000a7d8262000a38565b602082019050919050565b6000602082019050818103600083015262000aa38162000a61565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000ae2601f8362000a27565b915062000aef8262000aaa565b602082019050919050565b6000602082019050818103600083015262000b158162000ad3565b9050919050565b600062000b298262000926565b915062000b368362000926565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000b6e5762000b6d62000930565b5b828201905092915050565b62000b848162000926565b82525050565b600060208201905062000ba1600083018462000b79565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000bef57607f821691505b6020821081141562000c065762000c0562000ba7565b5b50919050565b614e1e8062000c1c6000396000f3fe6080604052600436106102b25760003560e01c806375f0a87411610175578063c0246668116100dc578063e8078d9411610095578063eec1c69f1161006f578063eec1c69f14610a90578063f2fde38b14610acd578063f8b45b0514610af6578063ff1b636d14610b21576102b9565b8063e8078d9414610a32578063e8f99ff114610a3c578063e950f40614610a65576102b9565b8063c024666814610920578063c8c8ebe414610949578063dd62ed3e14610974578063e0f3ccf5146109b1578063e2f45605146109dc578063e4748b9e14610a07576102b9565b806395d89b411161012e57806395d89b41146107ea5780639a7a23d614610815578063a457c2d71461083e578063a9059cbb1461087b578063b62496f5146108b8578063bbc0c742146108f5576102b9565b806375f0a874146107005780638a8c523c1461072b5780638da5cb5b146107425780638e5c1f501461076d5780638ea5220f14610796578063924de9b7146107c1576102b9565b806339509351116102195780636ddd1713116101d25780636ddd1713146106165780636fc3eaec1461064157806370a0823114610658578063715018a614610695578063751039fc146106ac5780637571336a146106d7576102b9565b806339509351146104f457806342966c681461053157806349bd5a5e1461055a5780634a62bb65146105855780634fbee193146105b05780635e1fab0f146105ed576102b9565b806325d92ee21161026b57806325d92ee2146103f657806327c8f8351461041f57806328622fb81461044a5780632b34596414610473578063313ce5671461049e578063360bfd54146104c9576102b9565b806306fdde03146102be578063095ea7b3146102e957806310d5de53146103265780631694505e1461036357806318160ddd1461038e57806323b872dd146103b9576102b9565b366102b957005b600080fd5b3480156102ca57600080fd5b506102d3610b4c565b6040516102e091906139c9565b60405180910390f35b3480156102f557600080fd5b50610310600480360381019061030b9190613a84565b610bde565b60405161031d9190613adf565b60405180910390f35b34801561033257600080fd5b5061034d60048036038101906103489190613afa565b610bfc565b60405161035a9190613adf565b60405180910390f35b34801561036f57600080fd5b50610378610c1c565b6040516103859190613b86565b60405180910390f35b34801561039a57600080fd5b506103a3610c42565b6040516103b09190613bb0565b60405180910390f35b3480156103c557600080fd5b506103e060048036038101906103db9190613bcb565b610c4c565b6040516103ed9190613adf565b60405180910390f35b34801561040257600080fd5b5061041d60048036038101906104189190613c1e565b610d44565b005b34801561042b57600080fd5b50610434610e46565b6040516104419190613c6d565b60405180910390f35b34801561045657600080fd5b50610471600480360381019061046c9190613afa565b610e4c565b005b34801561047f57600080fd5b50610488610f90565b6040516104959190613bb0565b60405180910390f35b3480156104aa57600080fd5b506104b3610f96565b6040516104c09190613ca4565b60405180910390f35b3480156104d557600080fd5b506104de610f9f565b6040516104eb9190613bb0565b60405180910390f35b34801561050057600080fd5b5061051b60048036038101906105169190613a84565b610fa5565b6040516105289190613adf565b60405180910390f35b34801561053d57600080fd5b5061055860048036038101906105539190613cbf565b611051565b005b34801561056657600080fd5b5061056f61105e565b60405161057c9190613c6d565b60405180910390f35b34801561059157600080fd5b5061059a611084565b6040516105a79190613adf565b60405180910390f35b3480156105bc57600080fd5b506105d760048036038101906105d29190613afa565b611097565b6040516105e49190613adf565b60405180910390f35b3480156105f957600080fd5b50610614600480360381019061060f9190613afa565b6110ed565b005b34801561062257600080fd5b5061062b6111c1565b6040516106389190613adf565b60405180910390f35b34801561064d57600080fd5b506106566111d4565b005b34801561066457600080fd5b5061067f600480360381019061067a9190613afa565b61141e565b60405161068c9190613bb0565b60405180910390f35b3480156106a157600080fd5b506106aa611466565b005b3480156106b857600080fd5b506106c16114ee565b6040516106ce9190613adf565b60405180910390f35b3480156106e357600080fd5b506106fe60048036038101906106f99190613d18565b61159e565b005b34801561070c57600080fd5b50610715611675565b6040516107229190613c6d565b60405180910390f35b34801561073757600080fd5b5061074061169b565b005b34801561074e57600080fd5b5061075761174f565b6040516107649190613c6d565b60405180910390f35b34801561077957600080fd5b50610794600480360381019061078f9190613d58565b611779565b005b3480156107a257600080fd5b506107ab611807565b6040516107b89190613c6d565b60405180910390f35b3480156107cd57600080fd5b506107e860048036038101906107e39190613d98565b61182d565b005b3480156107f657600080fd5b506107ff6118c6565b60405161080c91906139c9565b60405180910390f35b34801561082157600080fd5b5061083c60048036038101906108379190613d18565b611958565b005b34801561084a57600080fd5b5061086560048036038101906108609190613a84565b611a73565b6040516108729190613adf565b60405180910390f35b34801561088757600080fd5b506108a2600480360381019061089d9190613a84565b611b5e565b6040516108af9190613adf565b60405180910390f35b3480156108c457600080fd5b506108df60048036038101906108da9190613afa565b611b7c565b6040516108ec9190613adf565b60405180910390f35b34801561090157600080fd5b5061090a611b9c565b6040516109179190613adf565b60405180910390f35b34801561092c57600080fd5b5061094760048036038101906109429190613d18565b611baf565b005b34801561095557600080fd5b5061095e611c86565b60405161096b9190613bb0565b60405180910390f35b34801561098057600080fd5b5061099b60048036038101906109969190613c1e565b611c8c565b6040516109a89190613bb0565b60405180910390f35b3480156109bd57600080fd5b506109c6611d13565b6040516109d39190613bb0565b60405180910390f35b3480156109e857600080fd5b506109f1611d19565b6040516109fe9190613bb0565b60405180910390f35b348015610a1357600080fd5b50610a1c611d1f565b604051610a299190613bb0565b60405180910390f35b610a3a611d25565b005b348015610a4857600080fd5b50610a636004803603810190610a5e9190613d58565b6120ec565b005b348015610a7157600080fd5b50610a7a61217a565b604051610a879190613c6d565b60405180910390f35b348015610a9c57600080fd5b50610ab76004803603810190610ab29190613e01565b6121a0565b604051610ac49190613adf565b60405180910390f35b348015610ad957600080fd5b50610af46004803603810190610aef9190613afa565b6122ab565b005b348015610b0257600080fd5b50610b0b6123a3565b604051610b189190613bb0565b60405180910390f35b348015610b2d57600080fd5b50610b366123a9565b604051610b439190613c6d565b60405180910390f35b606060038054610b5b90613e5d565b80601f0160208091040260200160405190810160405280929190818152602001828054610b8790613e5d565b8015610bd45780601f10610ba957610100808354040283529160200191610bd4565b820191906000526020600020905b815481529060010190602001808311610bb757829003601f168201915b5050505050905090565b6000610bf2610beb6123cf565b84846123d7565b6001905092915050565b60176020528060005260406000206000915054906101000a900460ff1681565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b6000610c598484846125a2565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610ca46123cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610d24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1b90613f01565b60405180910390fd5b610d3885610d306123cf565b8584036123d7565b60019150509392505050565b610d4c6123cf565b73ffffffffffffffffffffffffffffffffffffffff16610d6a61174f565b73ffffffffffffffffffffffffffffffffffffffff1614610dc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db790613f6d565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b61dead81565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610edc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed390613fd9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4390614045565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60135481565b60006008905090565b60125481565b6000611047610fb26123cf565b848460016000610fc06123cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546110429190614094565b6123d7565b6001905092915050565b61105b3382612f48565b50565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f60009054906101000a900460ff1681565b6000601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461117d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117490614136565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f60029054906101000a900460ff1681565b6111dc6123cf565b73ffffffffffffffffffffffffffffffffffffffff166111fa61174f565b73ffffffffffffffffffffffffffffffffffffffff1614611250576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124790613f6d565b60405180910390fd5b600061125b3061141e565b905060008082141561126e57505061141c565b6112778261311f565b600047905060006112a660646112986012548561336290919063ffffffff16565b61337890919063ffffffff16565b905060006112bd828461338e90919063ffffffff16565b9050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161130590614187565b60006040518083038185875af1925050503d8060008114611342576040519150601f19603f3d011682016040523d82523d6000602084013e611347565b606091505b505080945050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161139390614187565b60006040518083038185875af1925050503d80600081146113d0576040519150601f19603f3d011682016040523d82523d6000602084013e6113d5565b606091505b5050809450507fe9f689eb4d290dd3a40869ea626055ee4a55d40f20286208d04ef55f39254cff85848660405161140e9392919061419c565b60405180910390a150505050505b565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61146e6123cf565b73ffffffffffffffffffffffffffffffffffffffff1661148c61174f565b73ffffffffffffffffffffffffffffffffffffffff16146114e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d990613f6d565b60405180910390fd5b6114ec60006133a4565b565b60006114f86123cf565b73ffffffffffffffffffffffffffffffffffffffff1661151661174f565b73ffffffffffffffffffffffffffffffffffffffff161461156c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156390613f6d565b60405180910390fd5b6000600f60006101000a81548160ff021916908315150217905550600560118190555060056010819055506001905090565b6115a66123cf565b73ffffffffffffffffffffffffffffffffffffffff166115c461174f565b73ffffffffffffffffffffffffffffffffffffffff161461161a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161190613f6d565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6116a36123cf565b73ffffffffffffffffffffffffffffffffffffffff166116c161174f565b73ffffffffffffffffffffffffffffffffffffffff1614611717576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170e90613f6d565b60405180910390fd5b6001600f60016101000a81548160ff0219169083151502179055506001600f60026101000a81548160ff021916908315150217905550565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6117816123cf565b73ffffffffffffffffffffffffffffffffffffffff1661179f61174f565b73ffffffffffffffffffffffffffffffffffffffff16146117f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ec90613f6d565b60405180910390fd5b81601081905550806011819055505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6118356123cf565b73ffffffffffffffffffffffffffffffffffffffff1661185361174f565b73ffffffffffffffffffffffffffffffffffffffff16146118a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a090613f6d565b60405180910390fd5b80600f60026101000a81548160ff02191690831515021790555050565b6060600480546118d590613e5d565b80601f016020809104026020016040519081016040528092919081815260200182805461190190613e5d565b801561194e5780601f106119235761010080835404028352916020019161194e565b820191906000526020600020905b81548152906001019060200180831161193157829003601f168201915b5050505050905090565b6119606123cf565b73ffffffffffffffffffffffffffffffffffffffff1661197e61174f565b73ffffffffffffffffffffffffffffffffffffffff16146119d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cb90613f6d565b60405180910390fd5b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5c90614245565b60405180910390fd5b611a6f828261346a565b5050565b60008060016000611a826123cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611b3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b36906142d7565b60405180910390fd5b611b53611b4a6123cf565b858584036123d7565b600191505092915050565b6000611b72611b6b6123cf565b84846125a2565b6001905092915050565b60186020528060005260406000206000915054906101000a900460ff1681565b600f60019054906101000a900460ff1681565b611bb76123cf565b73ffffffffffffffffffffffffffffffffffffffff16611bd561174f565b73ffffffffffffffffffffffffffffffffffffffff1614611c2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2290613f6d565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600c5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60115481565b600d5481565b60105481565b611d2d6123cf565b73ffffffffffffffffffffffffffffffffffffffff16611d4b61174f565b73ffffffffffffffffffffffffffffffffffffffff1614611da1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9890613f6d565b60405180910390fd5b6000737a250d5630b4cf539739df2c5dacb4c659f2488d905080601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611e0681600161159e565b611e3a30601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611e35610c42565b6123d7565b8073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ea9919061430c565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f34919061430c565b6040518363ffffffff1660e01b8152600401611f51929190614339565b6020604051808303816000875af1158015611f70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f94919061430c565b601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612001601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600161159e565b61202e601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600161346a565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7193430612076610c42565b60008061208161174f565b426040518863ffffffff1660e01b81526004016120a39695949392919061439d565b60606040518083038185885af11580156120c1573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906120e69190614413565b50505050565b6120f46123cf565b73ffffffffffffffffffffffffffffffffffffffff1661211261174f565b73ffffffffffffffffffffffffffffffffffffffff1614612168576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215f90613f6d565b60405180910390fd5b81600e8190555080600c819055505050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806121ab6123cf565b90506121f9600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610bde565b50600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9257fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040516122999190613bb0565b60405180910390a36001915050919050565b6122b36123cf565b73ffffffffffffffffffffffffffffffffffffffff166122d161174f565b73ffffffffffffffffffffffffffffffffffffffff1614612327576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231e90613f6d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612397576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238e906144d8565b60405180910390fd5b6123a0816133a4565b50565b600e5481565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612447576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243e9061456a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ae906145fc565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516125959190613bb0565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612612576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126099061468e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612682576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267990614720565b60405180910390fd5b600081116126c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126bc906147b2565b60405180910390fd5b600f60009054906101000a900460ff1615612bc0576126e261174f565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612750575061272061174f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127895750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127c3575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127dc5750600760149054906101000a900460ff16155b15612bbf57600f60019054906101000a900460ff166128d657601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806128965750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6128d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128cc9061481e565b60405180910390fd5b5b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156129795750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612a2057600c548111156129c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ba906148b0565b60405180910390fd5b600e546129cf8361141e565b826129da9190614094565b1115612a1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a129061491c565b60405180910390fd5b612bbe565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ac35750601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b1257600c54811115612b0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b04906149ae565b60405180910390fd5b612bbd565b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612bbc57600e54612b6f8361141e565b82612b7a9190614094565b1115612bbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bb29061491c565b60405180910390fd5b5b5b5b5b5b600f60029054906101000a900460ff168015612be95750600760149054906101000a900460ff16155b8015612c3f5750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612c955750601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612ceb5750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d2f576001600760146101000a81548160ff021916908315150217905550612d136134c5565b6000600760146101000a81548160ff0219169083151502179055505b6000600760149054906101000a900460ff16159050601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612de55750601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612def57600090505b60008115612f3657601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e5257506000601154115b15612e8657612e7f6064612e716011548661336290919063ffffffff16565b61337890919063ffffffff16565b9050612f12565b601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ee157506000601054115b15612f1157612f0e6064612f006010548661336290919063ffffffff16565b61337890919063ffffffff16565b90505b5b6000811115612f2757612f268530836136a5565b5b8083612f3391906149ce565b92505b612f418585856136a5565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612fb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612faf90614a74565b60405180910390fd5b612fc482600083613926565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561304a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161304190614b06565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282546130a191906149ce565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516131069190613bb0565b60405180910390a361311a8360008461392b565b505050565b6000600267ffffffffffffffff81111561313c5761313b614b26565b5b60405190808252806020026020018201604052801561316a5781602001602082028036833780820191505090505b509050308160008151811061318257613181614b55565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613229573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061324d919061430c565b8160018151811061326157613260614b55565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506132c830601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846123d7565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161332c959493929190614c42565b600060405180830381600087803b15801561334657600080fd5b505af115801561335a573d6000803e3d6000fd5b505050505050565b600081836133709190614c9c565b905092915050565b600081836133869190614d25565b905092915050565b6000818361339c91906149ce565b905092915050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006134d03061141e565b90506000808214156134e35750506136a3565b600d5482106136a0576000600d5490506134fc8161311f565b6000479050600061352b606461351d6012548561336290919063ffffffff16565b61337890919063ffffffff16565b90506000613542828461338e90919063ffffffff16565b9050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161358a90614187565b60006040518083038185875af1925050503d80600081146135c7576040519150601f19603f3d011682016040523d82523d6000602084013e6135cc565b606091505b505080955050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161361890614187565b60006040518083038185875af1925050503d8060008114613655576040519150601f19603f3d011682016040523d82523d6000602084013e61365a565b606091505b5050809550507fe9f689eb4d290dd3a40869ea626055ee4a55d40f20286208d04ef55f39254cff8484876040516136939392919061419c565b60405180910390a1505050505b50505b565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613715576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161370c9061468e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613785576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161377c90614720565b60405180910390fd5b613790838383613926565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613816576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161380d90614dc8565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546138a99190614094565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161390d9190613bb0565b60405180910390a361392084848461392b565b50505050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561396a57808201518184015260208101905061394f565b83811115613979576000848401525b50505050565b6000601f19601f8301169050919050565b600061399b82613930565b6139a5818561393b565b93506139b581856020860161394c565b6139be8161397f565b840191505092915050565b600060208201905081810360008301526139e38184613990565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613a1b826139f0565b9050919050565b613a2b81613a10565b8114613a3657600080fd5b50565b600081359050613a4881613a22565b92915050565b6000819050919050565b613a6181613a4e565b8114613a6c57600080fd5b50565b600081359050613a7e81613a58565b92915050565b60008060408385031215613a9b57613a9a6139eb565b5b6000613aa985828601613a39565b9250506020613aba85828601613a6f565b9150509250929050565b60008115159050919050565b613ad981613ac4565b82525050565b6000602082019050613af46000830184613ad0565b92915050565b600060208284031215613b1057613b0f6139eb565b5b6000613b1e84828501613a39565b91505092915050565b6000819050919050565b6000613b4c613b47613b42846139f0565b613b27565b6139f0565b9050919050565b6000613b5e82613b31565b9050919050565b6000613b7082613b53565b9050919050565b613b8081613b65565b82525050565b6000602082019050613b9b6000830184613b77565b92915050565b613baa81613a4e565b82525050565b6000602082019050613bc56000830184613ba1565b92915050565b600080600060608486031215613be457613be36139eb565b5b6000613bf286828701613a39565b9350506020613c0386828701613a39565b9250506040613c1486828701613a6f565b9150509250925092565b60008060408385031215613c3557613c346139eb565b5b6000613c4385828601613a39565b9250506020613c5485828601613a39565b9150509250929050565b613c6781613a10565b82525050565b6000602082019050613c826000830184613c5e565b92915050565b600060ff82169050919050565b613c9e81613c88565b82525050565b6000602082019050613cb96000830184613c95565b92915050565b600060208284031215613cd557613cd46139eb565b5b6000613ce384828501613a6f565b91505092915050565b613cf581613ac4565b8114613d0057600080fd5b50565b600081359050613d1281613cec565b92915050565b60008060408385031215613d2f57613d2e6139eb565b5b6000613d3d85828601613a39565b9250506020613d4e85828601613d03565b9150509250929050565b60008060408385031215613d6f57613d6e6139eb565b5b6000613d7d85828601613a6f565b9250506020613d8e85828601613a6f565b9150509250929050565b600060208284031215613dae57613dad6139eb565b5b6000613dbc84828501613d03565b91505092915050565b600063ffffffff82169050919050565b613dde81613dc5565b8114613de957600080fd5b50565b600081359050613dfb81613dd5565b92915050565b600060208284031215613e1757613e166139eb565b5b6000613e2584828501613dec565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613e7557607f821691505b60208210811415613e8957613e88613e2e565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613eeb60288361393b565b9150613ef682613e8f565b604082019050919050565b60006020820190508181036000830152613f1a81613ede565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613f5760208361393b565b9150613f6282613f21565b602082019050919050565b60006020820190508181036000830152613f8681613f4a565b9050919050565b7f43616c6c6572206973206e6f742061646d696e00000000000000000000000000600082015250565b6000613fc360138361393b565b9150613fce82613f8d565b602082019050919050565b60006020820190508181036000830152613ff281613fb6565b9050919050565b7f6e756c6c20616464726573730000000000000000000000000000000000000000600082015250565b600061402f600c8361393b565b915061403a82613ff9565b602082019050919050565b6000602082019050818103600083015261405e81614022565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061409f82613a4e565b91506140aa83613a4e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156140df576140de614065565b5b828201905092915050565b7f43616c6c6572206973206e6f742041646d696e00000000000000000000000000600082015250565b600061412060138361393b565b915061412b826140ea565b602082019050919050565b6000602082019050818103600083015261414f81614113565b9050919050565b600081905092915050565b50565b6000614171600083614156565b915061417c82614161565b600082019050919050565b600061419282614164565b9150819050919050565b60006060820190506141b16000830186613ba1565b6141be6020830185613ba1565b6141cb6040830184613ad0565b949350505050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061422f60398361393b565b915061423a826141d3565b604082019050919050565b6000602082019050818103600083015261425e81614222565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006142c160258361393b565b91506142cc82614265565b604082019050919050565b600060208201905081810360008301526142f0816142b4565b9050919050565b60008151905061430681613a22565b92915050565b600060208284031215614322576143216139eb565b5b6000614330848285016142f7565b91505092915050565b600060408201905061434e6000830185613c5e565b61435b6020830184613c5e565b9392505050565b6000819050919050565b600061438761438261437d84614362565b613b27565b613a4e565b9050919050565b6143978161436c565b82525050565b600060c0820190506143b26000830189613c5e565b6143bf6020830188613ba1565b6143cc604083018761438e565b6143d9606083018661438e565b6143e66080830185613c5e565b6143f360a0830184613ba1565b979650505050505050565b60008151905061440d81613a58565b92915050565b60008060006060848603121561442c5761442b6139eb565b5b600061443a868287016143fe565b935050602061444b868287016143fe565b925050604061445c868287016143fe565b9150509250925092565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006144c260268361393b565b91506144cd82614466565b604082019050919050565b600060208201905081810360008301526144f1816144b5565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061455460248361393b565b915061455f826144f8565b604082019050919050565b6000602082019050818103600083015261458381614547565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006145e660228361393b565b91506145f18261458a565b604082019050919050565b60006020820190508181036000830152614615816145d9565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061467860258361393b565b91506146838261461c565b604082019050919050565b600060208201905081810360008301526146a78161466b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061470a60238361393b565b9150614715826146ae565b604082019050919050565b60006020820190508181036000830152614739816146fd565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b600061479c60298361393b565b91506147a782614740565b604082019050919050565b600060208201905081810360008301526147cb8161478f565b9050919050565b7f54726164696e67206973206e6f7420656e61626c6564207965742e0000000000600082015250565b6000614808601b8361393b565b9150614813826147d2565b602082019050919050565b60006020820190508181036000830152614837816147fb565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061489a60358361393b565b91506148a58261483e565b604082019050919050565b600060208201905081810360008301526148c98161488d565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061490660138361393b565b9150614911826148d0565b602082019050919050565b60006020820190508181036000830152614935816148f9565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061499860368361393b565b91506149a38261493c565b604082019050919050565b600060208201905081810360008301526149c78161498b565b9050919050565b60006149d982613a4e565b91506149e483613a4e565b9250828210156149f7576149f6614065565b5b828203905092915050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a5e60218361393b565b9150614a6982614a02565b604082019050919050565b60006020820190508181036000830152614a8d81614a51565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000614af060228361393b565b9150614afb82614a94565b604082019050919050565b60006020820190508181036000830152614b1f81614ae3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614bb981613a10565b82525050565b6000614bcb8383614bb0565b60208301905092915050565b6000602082019050919050565b6000614bef82614b84565b614bf98185614b8f565b9350614c0483614ba0565b8060005b83811015614c35578151614c1c8882614bbf565b9750614c2783614bd7565b925050600181019050614c08565b5085935050505092915050565b600060a082019050614c576000830188613ba1565b614c64602083018761438e565b8181036040830152614c768186614be4565b9050614c856060830185613c5e565b614c926080830184613ba1565b9695505050505050565b6000614ca782613a4e565b9150614cb283613a4e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614ceb57614cea614065565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614d3082613a4e565b9150614d3b83613a4e565b925082614d4b57614d4a614cf6565b5b828204905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614db260268361393b565b9150614dbd82614d56565b604082019050919050565b60006020820190508181036000830152614de181614da5565b905091905056fea2646970667358221220b59547a1a955c5f427edcf24acf5295b5866db4098784ae54a217e2ddbce4f8564736f6c634300080a0033

Deployed Bytecode

0x6080604052600436106102b25760003560e01c806375f0a87411610175578063c0246668116100dc578063e8078d9411610095578063eec1c69f1161006f578063eec1c69f14610a90578063f2fde38b14610acd578063f8b45b0514610af6578063ff1b636d14610b21576102b9565b8063e8078d9414610a32578063e8f99ff114610a3c578063e950f40614610a65576102b9565b8063c024666814610920578063c8c8ebe414610949578063dd62ed3e14610974578063e0f3ccf5146109b1578063e2f45605146109dc578063e4748b9e14610a07576102b9565b806395d89b411161012e57806395d89b41146107ea5780639a7a23d614610815578063a457c2d71461083e578063a9059cbb1461087b578063b62496f5146108b8578063bbc0c742146108f5576102b9565b806375f0a874146107005780638a8c523c1461072b5780638da5cb5b146107425780638e5c1f501461076d5780638ea5220f14610796578063924de9b7146107c1576102b9565b806339509351116102195780636ddd1713116101d25780636ddd1713146106165780636fc3eaec1461064157806370a0823114610658578063715018a614610695578063751039fc146106ac5780637571336a146106d7576102b9565b806339509351146104f457806342966c681461053157806349bd5a5e1461055a5780634a62bb65146105855780634fbee193146105b05780635e1fab0f146105ed576102b9565b806325d92ee21161026b57806325d92ee2146103f657806327c8f8351461041f57806328622fb81461044a5780632b34596414610473578063313ce5671461049e578063360bfd54146104c9576102b9565b806306fdde03146102be578063095ea7b3146102e957806310d5de53146103265780631694505e1461036357806318160ddd1461038e57806323b872dd146103b9576102b9565b366102b957005b600080fd5b3480156102ca57600080fd5b506102d3610b4c565b6040516102e091906139c9565b60405180910390f35b3480156102f557600080fd5b50610310600480360381019061030b9190613a84565b610bde565b60405161031d9190613adf565b60405180910390f35b34801561033257600080fd5b5061034d60048036038101906103489190613afa565b610bfc565b60405161035a9190613adf565b60405180910390f35b34801561036f57600080fd5b50610378610c1c565b6040516103859190613b86565b60405180910390f35b34801561039a57600080fd5b506103a3610c42565b6040516103b09190613bb0565b60405180910390f35b3480156103c557600080fd5b506103e060048036038101906103db9190613bcb565b610c4c565b6040516103ed9190613adf565b60405180910390f35b34801561040257600080fd5b5061041d60048036038101906104189190613c1e565b610d44565b005b34801561042b57600080fd5b50610434610e46565b6040516104419190613c6d565b60405180910390f35b34801561045657600080fd5b50610471600480360381019061046c9190613afa565b610e4c565b005b34801561047f57600080fd5b50610488610f90565b6040516104959190613bb0565b60405180910390f35b3480156104aa57600080fd5b506104b3610f96565b6040516104c09190613ca4565b60405180910390f35b3480156104d557600080fd5b506104de610f9f565b6040516104eb9190613bb0565b60405180910390f35b34801561050057600080fd5b5061051b60048036038101906105169190613a84565b610fa5565b6040516105289190613adf565b60405180910390f35b34801561053d57600080fd5b5061055860048036038101906105539190613cbf565b611051565b005b34801561056657600080fd5b5061056f61105e565b60405161057c9190613c6d565b60405180910390f35b34801561059157600080fd5b5061059a611084565b6040516105a79190613adf565b60405180910390f35b3480156105bc57600080fd5b506105d760048036038101906105d29190613afa565b611097565b6040516105e49190613adf565b60405180910390f35b3480156105f957600080fd5b50610614600480360381019061060f9190613afa565b6110ed565b005b34801561062257600080fd5b5061062b6111c1565b6040516106389190613adf565b60405180910390f35b34801561064d57600080fd5b506106566111d4565b005b34801561066457600080fd5b5061067f600480360381019061067a9190613afa565b61141e565b60405161068c9190613bb0565b60405180910390f35b3480156106a157600080fd5b506106aa611466565b005b3480156106b857600080fd5b506106c16114ee565b6040516106ce9190613adf565b60405180910390f35b3480156106e357600080fd5b506106fe60048036038101906106f99190613d18565b61159e565b005b34801561070c57600080fd5b50610715611675565b6040516107229190613c6d565b60405180910390f35b34801561073757600080fd5b5061074061169b565b005b34801561074e57600080fd5b5061075761174f565b6040516107649190613c6d565b60405180910390f35b34801561077957600080fd5b50610794600480360381019061078f9190613d58565b611779565b005b3480156107a257600080fd5b506107ab611807565b6040516107b89190613c6d565b60405180910390f35b3480156107cd57600080fd5b506107e860048036038101906107e39190613d98565b61182d565b005b3480156107f657600080fd5b506107ff6118c6565b60405161080c91906139c9565b60405180910390f35b34801561082157600080fd5b5061083c60048036038101906108379190613d18565b611958565b005b34801561084a57600080fd5b5061086560048036038101906108609190613a84565b611a73565b6040516108729190613adf565b60405180910390f35b34801561088757600080fd5b506108a2600480360381019061089d9190613a84565b611b5e565b6040516108af9190613adf565b60405180910390f35b3480156108c457600080fd5b506108df60048036038101906108da9190613afa565b611b7c565b6040516108ec9190613adf565b60405180910390f35b34801561090157600080fd5b5061090a611b9c565b6040516109179190613adf565b60405180910390f35b34801561092c57600080fd5b5061094760048036038101906109429190613d18565b611baf565b005b34801561095557600080fd5b5061095e611c86565b60405161096b9190613bb0565b60405180910390f35b34801561098057600080fd5b5061099b60048036038101906109969190613c1e565b611c8c565b6040516109a89190613bb0565b60405180910390f35b3480156109bd57600080fd5b506109c6611d13565b6040516109d39190613bb0565b60405180910390f35b3480156109e857600080fd5b506109f1611d19565b6040516109fe9190613bb0565b60405180910390f35b348015610a1357600080fd5b50610a1c611d1f565b604051610a299190613bb0565b60405180910390f35b610a3a611d25565b005b348015610a4857600080fd5b50610a636004803603810190610a5e9190613d58565b6120ec565b005b348015610a7157600080fd5b50610a7a61217a565b604051610a879190613c6d565b60405180910390f35b348015610a9c57600080fd5b50610ab76004803603810190610ab29190613e01565b6121a0565b604051610ac49190613adf565b60405180910390f35b348015610ad957600080fd5b50610af46004803603810190610aef9190613afa565b6122ab565b005b348015610b0257600080fd5b50610b0b6123a3565b604051610b189190613bb0565b60405180910390f35b348015610b2d57600080fd5b50610b366123a9565b604051610b439190613c6d565b60405180910390f35b606060038054610b5b90613e5d565b80601f0160208091040260200160405190810160405280929190818152602001828054610b8790613e5d565b8015610bd45780601f10610ba957610100808354040283529160200191610bd4565b820191906000526020600020905b815481529060010190602001808311610bb757829003601f168201915b5050505050905090565b6000610bf2610beb6123cf565b84846123d7565b6001905092915050565b60176020528060005260406000206000915054906101000a900460ff1681565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b6000610c598484846125a2565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610ca46123cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610d24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1b90613f01565b60405180910390fd5b610d3885610d306123cf565b8584036123d7565b60019150509392505050565b610d4c6123cf565b73ffffffffffffffffffffffffffffffffffffffff16610d6a61174f565b73ffffffffffffffffffffffffffffffffffffffff1614610dc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db790613f6d565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b61dead81565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610edc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed390613fd9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4390614045565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60135481565b60006008905090565b60125481565b6000611047610fb26123cf565b848460016000610fc06123cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546110429190614094565b6123d7565b6001905092915050565b61105b3382612f48565b50565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f60009054906101000a900460ff1681565b6000601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461117d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117490614136565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f60029054906101000a900460ff1681565b6111dc6123cf565b73ffffffffffffffffffffffffffffffffffffffff166111fa61174f565b73ffffffffffffffffffffffffffffffffffffffff1614611250576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124790613f6d565b60405180910390fd5b600061125b3061141e565b905060008082141561126e57505061141c565b6112778261311f565b600047905060006112a660646112986012548561336290919063ffffffff16565b61337890919063ffffffff16565b905060006112bd828461338e90919063ffffffff16565b9050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161130590614187565b60006040518083038185875af1925050503d8060008114611342576040519150601f19603f3d011682016040523d82523d6000602084013e611347565b606091505b505080945050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161139390614187565b60006040518083038185875af1925050503d80600081146113d0576040519150601f19603f3d011682016040523d82523d6000602084013e6113d5565b606091505b5050809450507fe9f689eb4d290dd3a40869ea626055ee4a55d40f20286208d04ef55f39254cff85848660405161140e9392919061419c565b60405180910390a150505050505b565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61146e6123cf565b73ffffffffffffffffffffffffffffffffffffffff1661148c61174f565b73ffffffffffffffffffffffffffffffffffffffff16146114e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d990613f6d565b60405180910390fd5b6114ec60006133a4565b565b60006114f86123cf565b73ffffffffffffffffffffffffffffffffffffffff1661151661174f565b73ffffffffffffffffffffffffffffffffffffffff161461156c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156390613f6d565b60405180910390fd5b6000600f60006101000a81548160ff021916908315150217905550600560118190555060056010819055506001905090565b6115a66123cf565b73ffffffffffffffffffffffffffffffffffffffff166115c461174f565b73ffffffffffffffffffffffffffffffffffffffff161461161a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161190613f6d565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6116a36123cf565b73ffffffffffffffffffffffffffffffffffffffff166116c161174f565b73ffffffffffffffffffffffffffffffffffffffff1614611717576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170e90613f6d565b60405180910390fd5b6001600f60016101000a81548160ff0219169083151502179055506001600f60026101000a81548160ff021916908315150217905550565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6117816123cf565b73ffffffffffffffffffffffffffffffffffffffff1661179f61174f565b73ffffffffffffffffffffffffffffffffffffffff16146117f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ec90613f6d565b60405180910390fd5b81601081905550806011819055505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6118356123cf565b73ffffffffffffffffffffffffffffffffffffffff1661185361174f565b73ffffffffffffffffffffffffffffffffffffffff16146118a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a090613f6d565b60405180910390fd5b80600f60026101000a81548160ff02191690831515021790555050565b6060600480546118d590613e5d565b80601f016020809104026020016040519081016040528092919081815260200182805461190190613e5d565b801561194e5780601f106119235761010080835404028352916020019161194e565b820191906000526020600020905b81548152906001019060200180831161193157829003601f168201915b5050505050905090565b6119606123cf565b73ffffffffffffffffffffffffffffffffffffffff1661197e61174f565b73ffffffffffffffffffffffffffffffffffffffff16146119d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cb90613f6d565b60405180910390fd5b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5c90614245565b60405180910390fd5b611a6f828261346a565b5050565b60008060016000611a826123cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611b3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b36906142d7565b60405180910390fd5b611b53611b4a6123cf565b858584036123d7565b600191505092915050565b6000611b72611b6b6123cf565b84846125a2565b6001905092915050565b60186020528060005260406000206000915054906101000a900460ff1681565b600f60019054906101000a900460ff1681565b611bb76123cf565b73ffffffffffffffffffffffffffffffffffffffff16611bd561174f565b73ffffffffffffffffffffffffffffffffffffffff1614611c2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2290613f6d565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600c5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60115481565b600d5481565b60105481565b611d2d6123cf565b73ffffffffffffffffffffffffffffffffffffffff16611d4b61174f565b73ffffffffffffffffffffffffffffffffffffffff1614611da1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9890613f6d565b60405180910390fd5b6000737a250d5630b4cf539739df2c5dacb4c659f2488d905080601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611e0681600161159e565b611e3a30601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611e35610c42565b6123d7565b8073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ea9919061430c565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f34919061430c565b6040518363ffffffff1660e01b8152600401611f51929190614339565b6020604051808303816000875af1158015611f70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f94919061430c565b601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612001601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600161159e565b61202e601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600161346a565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7193430612076610c42565b60008061208161174f565b426040518863ffffffff1660e01b81526004016120a39695949392919061439d565b60606040518083038185885af11580156120c1573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906120e69190614413565b50505050565b6120f46123cf565b73ffffffffffffffffffffffffffffffffffffffff1661211261174f565b73ffffffffffffffffffffffffffffffffffffffff1614612168576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215f90613f6d565b60405180910390fd5b81600e8190555080600c819055505050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806121ab6123cf565b90506121f9600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610bde565b50600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9257fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040516122999190613bb0565b60405180910390a36001915050919050565b6122b36123cf565b73ffffffffffffffffffffffffffffffffffffffff166122d161174f565b73ffffffffffffffffffffffffffffffffffffffff1614612327576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231e90613f6d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612397576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238e906144d8565b60405180910390fd5b6123a0816133a4565b50565b600e5481565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612447576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243e9061456a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ae906145fc565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516125959190613bb0565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612612576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126099061468e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612682576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267990614720565b60405180910390fd5b600081116126c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126bc906147b2565b60405180910390fd5b600f60009054906101000a900460ff1615612bc0576126e261174f565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612750575061272061174f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127895750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127c3575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127dc5750600760149054906101000a900460ff16155b15612bbf57600f60019054906101000a900460ff166128d657601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806128965750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6128d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128cc9061481e565b60405180910390fd5b5b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156129795750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612a2057600c548111156129c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ba906148b0565b60405180910390fd5b600e546129cf8361141e565b826129da9190614094565b1115612a1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a129061491c565b60405180910390fd5b612bbe565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ac35750601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b1257600c54811115612b0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b04906149ae565b60405180910390fd5b612bbd565b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612bbc57600e54612b6f8361141e565b82612b7a9190614094565b1115612bbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bb29061491c565b60405180910390fd5b5b5b5b5b5b600f60029054906101000a900460ff168015612be95750600760149054906101000a900460ff16155b8015612c3f5750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612c955750601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612ceb5750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d2f576001600760146101000a81548160ff021916908315150217905550612d136134c5565b6000600760146101000a81548160ff0219169083151502179055505b6000600760149054906101000a900460ff16159050601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612de55750601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612def57600090505b60008115612f3657601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e5257506000601154115b15612e8657612e7f6064612e716011548661336290919063ffffffff16565b61337890919063ffffffff16565b9050612f12565b601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ee157506000601054115b15612f1157612f0e6064612f006010548661336290919063ffffffff16565b61337890919063ffffffff16565b90505b5b6000811115612f2757612f268530836136a5565b5b8083612f3391906149ce565b92505b612f418585856136a5565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612fb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612faf90614a74565b60405180910390fd5b612fc482600083613926565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561304a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161304190614b06565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282546130a191906149ce565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516131069190613bb0565b60405180910390a361311a8360008461392b565b505050565b6000600267ffffffffffffffff81111561313c5761313b614b26565b5b60405190808252806020026020018201604052801561316a5781602001602082028036833780820191505090505b509050308160008151811061318257613181614b55565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613229573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061324d919061430c565b8160018151811061326157613260614b55565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506132c830601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846123d7565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161332c959493929190614c42565b600060405180830381600087803b15801561334657600080fd5b505af115801561335a573d6000803e3d6000fd5b505050505050565b600081836133709190614c9c565b905092915050565b600081836133869190614d25565b905092915050565b6000818361339c91906149ce565b905092915050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006134d03061141e565b90506000808214156134e35750506136a3565b600d5482106136a0576000600d5490506134fc8161311f565b6000479050600061352b606461351d6012548561336290919063ffffffff16565b61337890919063ffffffff16565b90506000613542828461338e90919063ffffffff16565b9050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161358a90614187565b60006040518083038185875af1925050503d80600081146135c7576040519150601f19603f3d011682016040523d82523d6000602084013e6135cc565b606091505b505080955050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161361890614187565b60006040518083038185875af1925050503d8060008114613655576040519150601f19603f3d011682016040523d82523d6000602084013e61365a565b606091505b5050809550507fe9f689eb4d290dd3a40869ea626055ee4a55d40f20286208d04ef55f39254cff8484876040516136939392919061419c565b60405180910390a1505050505b50505b565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613715576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161370c9061468e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613785576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161377c90614720565b60405180910390fd5b613790838383613926565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613816576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161380d90614dc8565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546138a99190614094565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161390d9190613bb0565b60405180910390a361392084848461392b565b50505050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561396a57808201518184015260208101905061394f565b83811115613979576000848401525b50505050565b6000601f19601f8301169050919050565b600061399b82613930565b6139a5818561393b565b93506139b581856020860161394c565b6139be8161397f565b840191505092915050565b600060208201905081810360008301526139e38184613990565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613a1b826139f0565b9050919050565b613a2b81613a10565b8114613a3657600080fd5b50565b600081359050613a4881613a22565b92915050565b6000819050919050565b613a6181613a4e565b8114613a6c57600080fd5b50565b600081359050613a7e81613a58565b92915050565b60008060408385031215613a9b57613a9a6139eb565b5b6000613aa985828601613a39565b9250506020613aba85828601613a6f565b9150509250929050565b60008115159050919050565b613ad981613ac4565b82525050565b6000602082019050613af46000830184613ad0565b92915050565b600060208284031215613b1057613b0f6139eb565b5b6000613b1e84828501613a39565b91505092915050565b6000819050919050565b6000613b4c613b47613b42846139f0565b613b27565b6139f0565b9050919050565b6000613b5e82613b31565b9050919050565b6000613b7082613b53565b9050919050565b613b8081613b65565b82525050565b6000602082019050613b9b6000830184613b77565b92915050565b613baa81613a4e565b82525050565b6000602082019050613bc56000830184613ba1565b92915050565b600080600060608486031215613be457613be36139eb565b5b6000613bf286828701613a39565b9350506020613c0386828701613a39565b9250506040613c1486828701613a6f565b9150509250925092565b60008060408385031215613c3557613c346139eb565b5b6000613c4385828601613a39565b9250506020613c5485828601613a39565b9150509250929050565b613c6781613a10565b82525050565b6000602082019050613c826000830184613c5e565b92915050565b600060ff82169050919050565b613c9e81613c88565b82525050565b6000602082019050613cb96000830184613c95565b92915050565b600060208284031215613cd557613cd46139eb565b5b6000613ce384828501613a6f565b91505092915050565b613cf581613ac4565b8114613d0057600080fd5b50565b600081359050613d1281613cec565b92915050565b60008060408385031215613d2f57613d2e6139eb565b5b6000613d3d85828601613a39565b9250506020613d4e85828601613d03565b9150509250929050565b60008060408385031215613d6f57613d6e6139eb565b5b6000613d7d85828601613a6f565b9250506020613d8e85828601613a6f565b9150509250929050565b600060208284031215613dae57613dad6139eb565b5b6000613dbc84828501613d03565b91505092915050565b600063ffffffff82169050919050565b613dde81613dc5565b8114613de957600080fd5b50565b600081359050613dfb81613dd5565b92915050565b600060208284031215613e1757613e166139eb565b5b6000613e2584828501613dec565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613e7557607f821691505b60208210811415613e8957613e88613e2e565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613eeb60288361393b565b9150613ef682613e8f565b604082019050919050565b60006020820190508181036000830152613f1a81613ede565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613f5760208361393b565b9150613f6282613f21565b602082019050919050565b60006020820190508181036000830152613f8681613f4a565b9050919050565b7f43616c6c6572206973206e6f742061646d696e00000000000000000000000000600082015250565b6000613fc360138361393b565b9150613fce82613f8d565b602082019050919050565b60006020820190508181036000830152613ff281613fb6565b9050919050565b7f6e756c6c20616464726573730000000000000000000000000000000000000000600082015250565b600061402f600c8361393b565b915061403a82613ff9565b602082019050919050565b6000602082019050818103600083015261405e81614022565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061409f82613a4e565b91506140aa83613a4e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156140df576140de614065565b5b828201905092915050565b7f43616c6c6572206973206e6f742041646d696e00000000000000000000000000600082015250565b600061412060138361393b565b915061412b826140ea565b602082019050919050565b6000602082019050818103600083015261414f81614113565b9050919050565b600081905092915050565b50565b6000614171600083614156565b915061417c82614161565b600082019050919050565b600061419282614164565b9150819050919050565b60006060820190506141b16000830186613ba1565b6141be6020830185613ba1565b6141cb6040830184613ad0565b949350505050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061422f60398361393b565b915061423a826141d3565b604082019050919050565b6000602082019050818103600083015261425e81614222565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006142c160258361393b565b91506142cc82614265565b604082019050919050565b600060208201905081810360008301526142f0816142b4565b9050919050565b60008151905061430681613a22565b92915050565b600060208284031215614322576143216139eb565b5b6000614330848285016142f7565b91505092915050565b600060408201905061434e6000830185613c5e565b61435b6020830184613c5e565b9392505050565b6000819050919050565b600061438761438261437d84614362565b613b27565b613a4e565b9050919050565b6143978161436c565b82525050565b600060c0820190506143b26000830189613c5e565b6143bf6020830188613ba1565b6143cc604083018761438e565b6143d9606083018661438e565b6143e66080830185613c5e565b6143f360a0830184613ba1565b979650505050505050565b60008151905061440d81613a58565b92915050565b60008060006060848603121561442c5761442b6139eb565b5b600061443a868287016143fe565b935050602061444b868287016143fe565b925050604061445c868287016143fe565b9150509250925092565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006144c260268361393b565b91506144cd82614466565b604082019050919050565b600060208201905081810360008301526144f1816144b5565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061455460248361393b565b915061455f826144f8565b604082019050919050565b6000602082019050818103600083015261458381614547565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006145e660228361393b565b91506145f18261458a565b604082019050919050565b60006020820190508181036000830152614615816145d9565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061467860258361393b565b91506146838261461c565b604082019050919050565b600060208201905081810360008301526146a78161466b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061470a60238361393b565b9150614715826146ae565b604082019050919050565b60006020820190508181036000830152614739816146fd565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b600061479c60298361393b565b91506147a782614740565b604082019050919050565b600060208201905081810360008301526147cb8161478f565b9050919050565b7f54726164696e67206973206e6f7420656e61626c6564207965742e0000000000600082015250565b6000614808601b8361393b565b9150614813826147d2565b602082019050919050565b60006020820190508181036000830152614837816147fb565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061489a60358361393b565b91506148a58261483e565b604082019050919050565b600060208201905081810360008301526148c98161488d565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061490660138361393b565b9150614911826148d0565b602082019050919050565b60006020820190508181036000830152614935816148f9565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061499860368361393b565b91506149a38261493c565b604082019050919050565b600060208201905081810360008301526149c78161498b565b9050919050565b60006149d982613a4e565b91506149e483613a4e565b9250828210156149f7576149f6614065565b5b828203905092915050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a5e60218361393b565b9150614a6982614a02565b604082019050919050565b60006020820190508181036000830152614a8d81614a51565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000614af060228361393b565b9150614afb82614a94565b604082019050919050565b60006020820190508181036000830152614b1f81614ae3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614bb981613a10565b82525050565b6000614bcb8383614bb0565b60208301905092915050565b6000602082019050919050565b6000614bef82614b84565b614bf98185614b8f565b9350614c0483614ba0565b8060005b83811015614c35578151614c1c8882614bbf565b9750614c2783614bd7565b925050600181019050614c08565b5085935050505092915050565b600060a082019050614c576000830188613ba1565b614c64602083018761438e565b8181036040830152614c768186614be4565b9050614c856060830185613c5e565b614c926080830184613ba1565b9695505050505050565b6000614ca782613a4e565b9150614cb283613a4e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614ceb57614cea614065565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614d3082613a4e565b9150614d3b83613a4e565b925082614d4b57614d4a614cf6565b5b828204905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614db260268361393b565b9150614dbd82614d56565b604082019050919050565b60006020820190508181036000830152614de181614da5565b905091905056fea2646970667358221220b59547a1a955c5f427edcf24acf5295b5866db4098784ae54a217e2ddbce4f8564736f6c634300080a0033

Deployed Bytecode Sourcemap

18452:12214:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4824:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6425:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19877:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19620:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5312:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6627:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23574:199;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19703:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30432:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19544:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5155:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19499:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7164:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20927:83;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19668:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19308:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23781:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30279:145;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19388:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28949:780;;;;;;;;;;;;;:::i;:::-;;5483:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1536:103;;;;;;;;;;;;;:::i;:::-;;21085:166;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21259:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18648:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20807:112;;;;;;;;;;;;;:::i;:::-;;885:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23915:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18750:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21556:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5043:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21804:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7462:475;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5839:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19947:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19348:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21664:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18919:64;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6102:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19462:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19039:63;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19428:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22336:1092;;;:::i;:::-;;22116:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4600:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30015:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1794:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19212:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18844:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4824:100;4878:13;4911:5;4904:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4824:100;:::o;6425:194::-;6533:4;6550:39;6559:12;:10;:12::i;:::-;6573:7;6582:6;6550:8;:39::i;:::-;6607:4;6600:11;;6425:194;;;;:::o;19877:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;19620:41::-;;;;;;;;;;;;;:::o;5312:108::-;5373:7;5400:12;;5393:19;;5312:108;:::o;6627:529::-;6767:4;6784:36;6794:6;6802:9;6813:6;6784:9;:36::i;:::-;6833:24;6860:11;:19;6872:6;6860:19;;;;;;;;;;;;;;;:33;6880:12;:10;:12::i;:::-;6860:33;;;;;;;;;;;;;;;;6833:60;;6946:6;6926:16;:26;;6904:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;7056:57;7065:6;7073:12;:10;:12::i;:::-;7106:6;7087:16;:25;7056:8;:57::i;:::-;7144:4;7137:11;;;6627:529;;;;;:::o;23574:199::-;1116:12;:10;:12::i;:::-;1105:23;;:7;:5;:7::i;:::-;:23;;;1097:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23710:10:::1;23698:9;;:22;;;;;;;;;;;;;;;;;;23749:16;23731:15;;:34;;;;;;;;;;;;;;;;;;23574:199:::0;;:::o;19703:53::-;19749:6;19703:53;:::o;30432:231::-;30522:5;;;;;;;;;;;30508:19;;:10;:19;;;30500:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;30595:1;30570:27;;:13;:27;;;;30562:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;30642:13;30625:14;;:30;;;;;;;;;;;;;;;;;;30432:231;:::o;19544:29::-;;;;:::o;5155:92::-;5213:5;5238:1;5231:8;;5155:92;:::o;19499:35::-;;;;:::o;7164:290::-;7277:4;7294:130;7317:12;:10;:12::i;:::-;7344:7;7403:10;7366:11;:25;7378:12;:10;:12::i;:::-;7366:25;;;;;;;;;;;;;;;:34;7392:7;7366:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;7294:8;:130::i;:::-;7442:4;7435:11;;7164:290;;;;:::o;20927:83::-;20977:25;20983:10;20995:6;20977:5;:25::i;:::-;20927:83;:::o;19668:28::-;;;;;;;;;;;;;:::o;19308:33::-;;;;;;;;;;;;;:::o;23781:126::-;23847:4;23871:19;:28;23891:7;23871:28;;;;;;;;;;;;;;;;;;;;;;;;;23864:35;;23781:126;;;:::o;30279:145::-;30360:5;;;;;;;;;;;30346:19;;:10;:19;;;30338:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;30408:8;30400:5;;:16;;;;;;;;;;;;;;;;;;30279:145;:::o;19388:31::-;;;;;;;;;;;;;:::o;28949:780::-;1116:12;:10;:12::i;:::-;1105:23;;:7;:5;:7::i;:::-;:23;;;1097:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29000:23:::1;29026:24;29044:4;29026:9;:24::i;:::-;29000:50;;29061:12;29107:1:::0;29088:15:::1;:20;29084:59;;;29125:7;;;;29084:59;29153:33;29170:15;29153:16;:33::i;:::-;29201:23;29227:21;29201:47;;29263:25;29291:81;29368:3;29291:54;29329:15;;29291;:37;;:54;;;;:::i;:::-;:76;;:81;;;;:::i;:::-;29263:109;;29387:19;29409:38;29429:17;29409:15;:19;;:38;;;;:::i;:::-;29387:60;;29484:15;;;;;;;;;;;29476:29;;29531:17;29476:91;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29462:105;;;;;29604:9;;;;;;;;;;;29596:23;;29627:11;29596:47;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29582:61;;;;;29663:58;29679:15;29696;29713:7;29663:58;;;;;;;;:::i;:::-;;;;;;;;28989:740;;;;;1176:1;28949:780::o:0;5483:143::-;5573:7;5600:9;:18;5610:7;5600:18;;;;;;;;;;;;;;;;5593:25;;5483:143;;;:::o;1536:103::-;1116:12;:10;:12::i;:::-;1105:23;;:7;:5;:7::i;:::-;:23;;;1097:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1601:30:::1;1628:1;1601:18;:30::i;:::-;1536:103::o:0;21085:166::-;21137:4;1116:12;:10;:12::i;:::-;1105:23;;:7;:5;:7::i;:::-;:23;;;1097:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21171:5:::1;21154:14;;:22;;;;;;;;;;;;;;;;;;21198:1;21187:8;:12;;;;21220:1;21210:7;:11;;;;21239:4;21232:11;;21085:166:::0;:::o;21259:201::-;1116:12;:10;:12::i;:::-;1105:23;;:7;:5;:7::i;:::-;:23;;;1097:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21442:10:::1;21390:31;:49;21422:16;21390:49;;;;;;;;;;;;;;;;:62;;;;;;;;;;;;;;;;;;21259:201:::0;;:::o;18648:93::-;;;;;;;;;;;;;:::o;20807:112::-;1116:12;:10;:12::i;:::-;1105:23;;:7;:5;:7::i;:::-;:23;;;1097:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20878:4:::1;20862:13;;:20;;;;;;;;;;;;;;;;;;20907:4;20893:11;;:18;;;;;;;;;;;;;;;;;;20807:112::o:0;885:87::-;931:7;958:6;;;;;;;;;;;951:13;;885:87;:::o;23915:169::-;1116:12;:10;:12::i;:::-;1105:23;;:7;:5;:7::i;:::-;:23;;;1097:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24039:7:::1;24029;:17;;;;24068:8;24057;:19;;;;23915:169:::0;;:::o;18750:87::-;;;;;;;;;;;;;:::o;21556:100::-;1116:12;:10;:12::i;:::-;1105:23;;:7;:5;:7::i;:::-;:23;;;1097:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21641:7:::1;21627:11;;:21;;;;;;;;;;;;;;;;;;21556:100:::0;:::o;5043:104::-;5099:13;5132:7;5125:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5043:104;:::o;21804:304::-;1116:12;:10;:12::i;:::-;1105:23;;:7;:5;:7::i;:::-;:23;;;1097:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21950:13:::1;;;;;;;;;;;21942:21;;:4;:21;;;;21920:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;22059:41;22088:4;22094:5;22059:28;:41::i;:::-;21804:304:::0;;:::o;7462:475::-;7580:4;7597:24;7624:11;:25;7636:12;:10;:12::i;:::-;7624:25;;;;;;;;;;;;;;;:34;7650:7;7624:34;;;;;;;;;;;;;;;;7597:61;;7711:15;7691:16;:35;;7669:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;7827:67;7836:12;:10;:12::i;:::-;7850:7;7878:15;7859:16;:34;7827:8;:67::i;:::-;7925:4;7918:11;;;7462:475;;;;:::o;5839:200::-;5950:4;5967:42;5977:12;:10;:12::i;:::-;5991:9;6002:6;5967:9;:42::i;:::-;6027:4;6020:11;;5839:200;;;;:::o;19947:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;19348:33::-;;;;;;;;;;;;;:::o;21664:132::-;1116:12;:10;:12::i;:::-;1105:23;;:7;:5;:7::i;:::-;:23;;;1097:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21780:8:::1;21749:19;:28;21769:7;21749:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;21664:132:::0;;:::o;18919:64::-;;;;:::o;6102:176::-;6216:7;6243:11;:18;6255:5;6243:18;;;;;;;;;;;;;;;:27;6262:7;6243:27;;;;;;;;;;;;;;;;6236:34;;6102:176;;;;:::o;19462:28::-;;;;:::o;19039:63::-;;;;:::o;19428:27::-;;;;:::o;22336:1092::-;1116:12;:10;:12::i;:::-;1105:23;;:7;:5;:7::i;:::-;:23;;;1097:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22465:35:::1;22536:42;22465:124;;22620:16;22602:15;;:34;;;;;;;;;;;;;;;;;;22647:58;22681:16;22700:4;22647:25;:58::i;:::-;22716:64;22733:4;22748:15;;;;;;;;;;;22766:13;:11;:13::i;:::-;22716:8;:64::i;:::-;22855:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22837:70;;;22916:4;22923:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22837:110;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22821:13;;:126;;;;;;;;;;;;;;;;;;22958:55;22992:13;;;;;;;;;;;23008:4;22958:25;:55::i;:::-;23024:58;23061:13;;;;;;;;;;;23077:4;23024:28;:58::i;:::-;23095:15;;;;;;;;;;;:31;;;23134:9;23167:4;23203:13;:11;:13::i;:::-;23251:1;23294::::0;23337:7:::1;:5;:7::i;:::-;23394:15;23095:325;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;22387:1041;22336:1092::o:0;22116:212::-;1116:12;:10;:12::i;:::-;1105:23;;:7;:5;:7::i;:::-;:23;;;1097:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22255:10:::1;22243:9;:22;;;;22299:21;22276:20;:44;;;;22116:212:::0;;:::o;4600:29::-;;;;;;;;;;;;;:::o;30015:256::-;30075:4;30092:13;30108:12;:10;:12::i;:::-;30092:28;;30131:42;30139:14;;;;;;;;;;;30155:17;30131:7;:42::i;:::-;;30205:14;;;;;;;;;;;30189:50;;30198:5;30189:50;;;30221:17;30189:50;;;;;;:::i;:::-;;;;;;;;30259:4;30252:11;;;30015:256;;;:::o;1794:238::-;1116:12;:10;:12::i;:::-;1105:23;;:7;:5;:7::i;:::-;:23;;;1097:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1917:1:::1;1897:22;;:8;:22;;;;1875:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;1996:28;2015:8;1996:18;:28::i;:::-;1794:238:::0;:::o;19212:53::-;;;;:::o;18844:20::-;;;;;;;;;;;;;:::o;206:98::-;259:7;286:10;279:17;;206:98;:::o;9729:380::-;9882:1;9865:19;;:5;:19;;;;9857:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9963:1;9944:21;;:7;:21;;;;9936:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10047:6;10017:11;:18;10029:5;10017:18;;;;;;;;;;;;;;;:27;10036:7;10017:27;;;;;;;;;;;;;;;:36;;;;10085:7;10069:32;;10078:5;10069:32;;;10094:6;10069:32;;;;;;:::i;:::-;;;;;;;;9729:380;;;:::o;24092:3339::-;24240:1;24224:18;;:4;:18;;;;24216:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24317:1;24303:16;;:2;:16;;;;24295:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;24387:1;24378:6;:10;24370:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;24449:14;;;;;;;;;;;24445:1699;;;24510:7;:5;:7::i;:::-;24502:15;;:4;:15;;;;:49;;;;;24544:7;:5;:7::i;:::-;24538:13;;:2;:13;;;;24502:49;:86;;;;;24586:1;24572:16;;:2;:16;;;;24502:86;:128;;;;;24623:6;24609:21;;:2;:21;;;;24502:128;:158;;;;;24652:8;;;;;;;;;;;24651:9;24502:158;24480:1653;;;24700:13;;;;;;;;;;;24695:228;;24772:19;:25;24792:4;24772:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;24801:19;:23;24821:2;24801:23;;;;;;;;;;;;;;;;;;;;;;;;;24772:52;24738:165;;;;;;;;;;;;:::i;:::-;;;;;;;;;24695:228;24997:25;:31;25023:4;24997:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;25054:31;:35;25086:2;25054:35;;;;;;;;;;;;;;;;;;;;;;;;;25053:36;24997:92;24971:1147;;;25176:20;;25166:6;:30;;25132:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;25384:9;;25367:13;25377:2;25367:9;:13::i;:::-;25358:6;:22;;;;:::i;:::-;:35;;25324:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;24971:1147;;;25562:25;:29;25588:2;25562:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;25617:31;:37;25649:4;25617:37;;;;;;;;;;;;;;;;;;;;;;;;;25616:38;25562:92;25536:582;;;25741:20;;25731:6;:30;;25697:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;25536:582;;;25898:31;:35;25930:2;25898:35;;;;;;;;;;;;;;;;;;;;;;;;;25893:225;;26018:9;;26001:13;26011:2;26001:9;:13::i;:::-;25992:6;:22;;;;:::i;:::-;:35;;25958:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;25893:225;25536:582;24971:1147;24480:1653;24445:1699;26174:11;;;;;;;;;;;:55;;;;;26221:8;;;;;;;;;;;26220:9;26174:55;:123;;;;;26266:25;:31;26292:4;26266:31;;;;;;;;;;;;;;;;;;;;;;;;;26265:32;26174:123;:185;;;;;26334:19;:25;26354:4;26334:25;;;;;;;;;;;;;;;;;;;;;;;;;26333:26;26174:185;:245;;;;;26396:19;:23;26416:2;26396:23;;;;;;;;;;;;;;;;;;;;;;;;;26395:24;26174:245;26156:392;;;26476:4;26465:8;;:15;;;;;;;;;;;;;;;;;;26495:10;:8;:10::i;:::-;26531:5;26520:8;;:16;;;;;;;;;;;;;;;;;;26156:392;26560:12;26576:8;;;;;;;;;;;26575:9;26560:24;;26686:19;:25;26706:4;26686:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;26715:19;:23;26735:2;26715:23;;;;;;;;;;;;;;;;;;;;;;;;;26686:52;26682:100;;;26765:5;26755:15;;26682:100;26794:12;26899:7;26895:485;;;26951:25;:29;26977:2;26951:29;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;26995:1;26984:8;;:12;26951:45;26947:286;;;27024:29;27049:3;27024:20;27035:8;;27024:6;:10;;:20;;;;:::i;:::-;:24;;:29;;;;:::i;:::-;27017:36;;26947:286;;;27115:25;:31;27141:4;27115:31;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;27160:1;27150:7;;:11;27115:46;27111:122;;;27189:28;27213:3;27189:19;27200:7;;27189:6;:10;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;27182:35;;27111:122;26947:286;27260:1;27253:4;:8;27249:91;;;27282:42;27298:4;27312;27319;27282:15;:42::i;:::-;27249:91;27364:4;27354:14;;;;;:::i;:::-;;;26895:485;27390:33;27406:4;27412:2;27416:6;27390:15;:33::i;:::-;24205:3226;;24092:3339;;;:::o;9130:591::-;9233:1;9214:21;;:7;:21;;;;9206:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;9286:49;9307:7;9324:1;9328:6;9286:20;:49::i;:::-;9348:22;9373:9;:18;9383:7;9373:18;;;;;;;;;;;;;;;;9348:43;;9428:6;9410:14;:24;;9402:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;9547:6;9530:14;:23;9509:9;:18;9519:7;9509:18;;;;;;;;;;;;;;;:44;;;;9591:6;9575:12;;:22;;;;;;;:::i;:::-;;;;;;;;9641:1;9615:37;;9624:7;9615:37;;;9645:6;9615:37;;;;;;:::i;:::-;;;;;;;;9665:48;9685:7;9702:1;9706:6;9665:19;:48::i;:::-;9195:526;9130:591;;:::o;27439:585::-;27565:21;27603:1;27589:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27565:40;;27634:4;27616;27621:1;27616:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;27660:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27650:4;27655:1;27650:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;27693:62;27710:4;27725:15;;;;;;;;;;;27743:11;27693:8;:62::i;:::-;27792:15;;;;;;;;;;;:66;;;27873:11;27899:1;27943:4;27970;27990:15;27792:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27494:530;27439:585;:::o;12091:98::-;12149:7;12180:1;12176;:5;;;;:::i;:::-;12169:12;;12091:98;;;;:::o;12197:::-;12255:7;12286:1;12282;:5;;;;:::i;:::-;12275:12;;12197:98;;;;:::o;11985:::-;12043:7;12074:1;12070;:5;;;;:::i;:::-;12063:12;;11985:98;;;;:::o;2192:191::-;2266:16;2285:6;;;;;;;;;;;2266:25;;2311:8;2302:6;;:17;;;;;;;;;;;;;;;;;;2366:8;2335:40;;2356:8;2335:40;;;;;;;;;;;;2255:128;2192:191;:::o;23436:130::-;23553:5;23519:25;:31;23545:4;23519:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;23436:130;;:::o;28032:905::-;28071:23;28097:24;28115:4;28097:9;:24::i;:::-;28071:50;;28132:12;28178:1;28159:15;:20;28155:59;;;28196:7;;;;28155:59;28247:18;;28228:15;:37;28224:706;;28282:26;28311:18;;28282:47;;28344:36;28361:18;28344:16;:36::i;:::-;28395:23;28421:21;28395:47;;28457:25;28485:81;28562:3;28485:54;28523:15;;28485;:37;;:54;;;;:::i;:::-;:76;;:81;;;;:::i;:::-;28457:109;;28581:19;28603:38;28623:17;28603:15;:19;;:38;;;;:::i;:::-;28581:60;;28678:15;;;;;;;;;;;28670:29;;28725:17;28670:91;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28656:105;;;;;28798:9;;;;;;;;;;;28790:23;;28821:11;28790:47;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28776:61;;;;;28857;28873:18;28893:15;28910:7;28857:61;;;;;;;;:::i;:::-;;;;;;;;28267:663;;;;28224:706;28060:877;;28032:905;:::o;7945:770::-;8103:1;8085:20;;:6;:20;;;;8077:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;8187:1;8166:23;;:9;:23;;;;8158:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;8242:47;8263:6;8271:9;8282:6;8242:20;:47::i;:::-;8302:21;8326:9;:17;8336:6;8326:17;;;;;;;;;;;;;;;;8302:41;;8393:6;8376:13;:23;;8354:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;8537:6;8521:13;:22;8501:9;:17;8511:6;8501:17;;;;;;;;;;;;;;;:42;;;;8589:6;8565:9;:20;8575:9;8565:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;8630:9;8613:35;;8622:6;8613:35;;;8641:6;8613:35;;;;;;:::i;:::-;;;;;;;;8661:46;8681:6;8689:9;8700:6;8661:19;:46::i;:::-;8066:649;7945:770;;;:::o;10117:125::-;;;;:::o;10250:124::-;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:60::-;3857:3;3878:5;3871:12;;3829:60;;;:::o;3895:142::-;3945:9;3978:53;3996:34;4005:24;4023:5;4005:24;:::i;:::-;3996:34;:::i;:::-;3978:53;:::i;:::-;3965:66;;3895:142;;;:::o;4043:126::-;4093:9;4126:37;4157:5;4126:37;:::i;:::-;4113:50;;4043:126;;;:::o;4175:153::-;4252:9;4285:37;4316:5;4285:37;:::i;:::-;4272:50;;4175:153;;;:::o;4334:185::-;4448:64;4506:5;4448:64;:::i;:::-;4443:3;4436:77;4334:185;;:::o;4525:276::-;4645:4;4683:2;4672:9;4668:18;4660:26;;4696:98;4791:1;4780:9;4776:17;4767:6;4696:98;:::i;:::-;4525:276;;;;:::o;4807:118::-;4894:24;4912:5;4894:24;:::i;:::-;4889:3;4882:37;4807:118;;:::o;4931:222::-;5024:4;5062:2;5051:9;5047:18;5039:26;;5075:71;5143:1;5132:9;5128:17;5119:6;5075:71;:::i;:::-;4931:222;;;;:::o;5159:619::-;5236:6;5244;5252;5301:2;5289:9;5280:7;5276:23;5272:32;5269:119;;;5307:79;;:::i;:::-;5269:119;5427:1;5452:53;5497:7;5488:6;5477:9;5473:22;5452:53;:::i;:::-;5442:63;;5398:117;5554:2;5580:53;5625:7;5616:6;5605:9;5601:22;5580:53;:::i;:::-;5570:63;;5525:118;5682:2;5708:53;5753:7;5744:6;5733:9;5729:22;5708:53;:::i;:::-;5698:63;;5653:118;5159:619;;;;;:::o;5784:474::-;5852:6;5860;5909:2;5897:9;5888:7;5884:23;5880:32;5877:119;;;5915:79;;:::i;:::-;5877:119;6035:1;6060:53;6105:7;6096:6;6085:9;6081:22;6060:53;:::i;:::-;6050:63;;6006:117;6162:2;6188:53;6233:7;6224:6;6213:9;6209:22;6188:53;:::i;:::-;6178:63;;6133:118;5784:474;;;;;:::o;6264:118::-;6351:24;6369:5;6351:24;:::i;:::-;6346:3;6339:37;6264:118;;:::o;6388:222::-;6481:4;6519:2;6508:9;6504:18;6496:26;;6532:71;6600:1;6589:9;6585:17;6576:6;6532:71;:::i;:::-;6388:222;;;;:::o;6616:86::-;6651:7;6691:4;6684:5;6680:16;6669:27;;6616:86;;;:::o;6708:112::-;6791:22;6807:5;6791:22;:::i;:::-;6786:3;6779:35;6708:112;;:::o;6826:214::-;6915:4;6953:2;6942:9;6938:18;6930:26;;6966:67;7030:1;7019:9;7015:17;7006:6;6966:67;:::i;:::-;6826:214;;;;:::o;7046:329::-;7105:6;7154:2;7142:9;7133:7;7129:23;7125:32;7122:119;;;7160:79;;:::i;:::-;7122:119;7280:1;7305:53;7350:7;7341:6;7330:9;7326:22;7305:53;:::i;:::-;7295:63;;7251:117;7046:329;;;;:::o;7381:116::-;7451:21;7466:5;7451:21;:::i;:::-;7444:5;7441:32;7431:60;;7487:1;7484;7477:12;7431:60;7381:116;:::o;7503:133::-;7546:5;7584:6;7571:20;7562:29;;7600:30;7624:5;7600:30;:::i;:::-;7503:133;;;;:::o;7642:468::-;7707:6;7715;7764:2;7752:9;7743:7;7739:23;7735:32;7732:119;;;7770:79;;:::i;:::-;7732:119;7890:1;7915:53;7960:7;7951:6;7940:9;7936:22;7915:53;:::i;:::-;7905:63;;7861:117;8017:2;8043:50;8085:7;8076:6;8065:9;8061:22;8043:50;:::i;:::-;8033:60;;7988:115;7642:468;;;;;:::o;8116:474::-;8184:6;8192;8241:2;8229:9;8220:7;8216:23;8212:32;8209:119;;;8247:79;;:::i;:::-;8209:119;8367:1;8392:53;8437:7;8428:6;8417:9;8413:22;8392:53;:::i;:::-;8382:63;;8338:117;8494:2;8520:53;8565:7;8556:6;8545:9;8541:22;8520:53;:::i;:::-;8510:63;;8465:118;8116:474;;;;;:::o;8596:323::-;8652:6;8701:2;8689:9;8680:7;8676:23;8672:32;8669:119;;;8707:79;;:::i;:::-;8669:119;8827:1;8852:50;8894:7;8885:6;8874:9;8870:22;8852:50;:::i;:::-;8842:60;;8798:114;8596:323;;;;:::o;8925:93::-;8961:7;9001:10;8994:5;8990:22;8979:33;;8925:93;;;:::o;9024:120::-;9096:23;9113:5;9096:23;:::i;:::-;9089:5;9086:34;9076:62;;9134:1;9131;9124:12;9076:62;9024:120;:::o;9150:137::-;9195:5;9233:6;9220:20;9211:29;;9249:32;9275:5;9249:32;:::i;:::-;9150:137;;;;:::o;9293:327::-;9351:6;9400:2;9388:9;9379:7;9375:23;9371:32;9368:119;;;9406:79;;:::i;:::-;9368:119;9526:1;9551:52;9595:7;9586:6;9575:9;9571:22;9551:52;:::i;:::-;9541:62;;9497:116;9293:327;;;;:::o;9626:180::-;9674:77;9671:1;9664:88;9771:4;9768:1;9761:15;9795:4;9792:1;9785:15;9812:320;9856:6;9893:1;9887:4;9883:12;9873:22;;9940:1;9934:4;9930:12;9961:18;9951:81;;10017:4;10009:6;10005:17;9995:27;;9951:81;10079:2;10071:6;10068:14;10048:18;10045:38;10042:84;;;10098:18;;:::i;:::-;10042:84;9863:269;9812:320;;;:::o;10138:227::-;10278:34;10274:1;10266:6;10262:14;10255:58;10347:10;10342:2;10334:6;10330:15;10323:35;10138:227;:::o;10371:366::-;10513:3;10534:67;10598:2;10593:3;10534:67;:::i;:::-;10527:74;;10610:93;10699:3;10610:93;:::i;:::-;10728:2;10723:3;10719:12;10712:19;;10371:366;;;:::o;10743:419::-;10909:4;10947:2;10936:9;10932:18;10924:26;;10996:9;10990:4;10986:20;10982:1;10971:9;10967:17;10960:47;11024:131;11150:4;11024:131;:::i;:::-;11016:139;;10743:419;;;:::o;11168:182::-;11308:34;11304:1;11296:6;11292:14;11285:58;11168:182;:::o;11356:366::-;11498:3;11519:67;11583:2;11578:3;11519:67;:::i;:::-;11512:74;;11595:93;11684:3;11595:93;:::i;:::-;11713:2;11708:3;11704:12;11697:19;;11356:366;;;:::o;11728:419::-;11894:4;11932:2;11921:9;11917:18;11909:26;;11981:9;11975:4;11971:20;11967:1;11956:9;11952:17;11945:47;12009:131;12135:4;12009:131;:::i;:::-;12001:139;;11728:419;;;:::o;12153:169::-;12293:21;12289:1;12281:6;12277:14;12270:45;12153:169;:::o;12328:366::-;12470:3;12491:67;12555:2;12550:3;12491:67;:::i;:::-;12484:74;;12567:93;12656:3;12567:93;:::i;:::-;12685:2;12680:3;12676:12;12669:19;;12328:366;;;:::o;12700:419::-;12866:4;12904:2;12893:9;12889:18;12881:26;;12953:9;12947:4;12943:20;12939:1;12928:9;12924:17;12917:47;12981:131;13107:4;12981:131;:::i;:::-;12973:139;;12700:419;;;:::o;13125:162::-;13265:14;13261:1;13253:6;13249:14;13242:38;13125:162;:::o;13293:366::-;13435:3;13456:67;13520:2;13515:3;13456:67;:::i;:::-;13449:74;;13532:93;13621:3;13532:93;:::i;:::-;13650:2;13645:3;13641:12;13634:19;;13293:366;;;:::o;13665:419::-;13831:4;13869:2;13858:9;13854:18;13846:26;;13918:9;13912:4;13908:20;13904:1;13893:9;13889:17;13882:47;13946:131;14072:4;13946:131;:::i;:::-;13938:139;;13665:419;;;:::o;14090:180::-;14138:77;14135:1;14128:88;14235:4;14232:1;14225:15;14259:4;14256:1;14249:15;14276:305;14316:3;14335:20;14353:1;14335:20;:::i;:::-;14330:25;;14369:20;14387:1;14369:20;:::i;:::-;14364:25;;14523:1;14455:66;14451:74;14448:1;14445:81;14442:107;;;14529:18;;:::i;:::-;14442:107;14573:1;14570;14566:9;14559:16;;14276:305;;;;:::o;14587:169::-;14727:21;14723:1;14715:6;14711:14;14704:45;14587:169;:::o;14762:366::-;14904:3;14925:67;14989:2;14984:3;14925:67;:::i;:::-;14918:74;;15001:93;15090:3;15001:93;:::i;:::-;15119:2;15114:3;15110:12;15103:19;;14762:366;;;:::o;15134:419::-;15300:4;15338:2;15327:9;15323:18;15315:26;;15387:9;15381:4;15377:20;15373:1;15362:9;15358:17;15351:47;15415:131;15541:4;15415:131;:::i;:::-;15407:139;;15134:419;;;:::o;15559:147::-;15660:11;15697:3;15682:18;;15559:147;;;;:::o;15712:114::-;;:::o;15832:398::-;15991:3;16012:83;16093:1;16088:3;16012:83;:::i;:::-;16005:90;;16104:93;16193:3;16104:93;:::i;:::-;16222:1;16217:3;16213:11;16206:18;;15832:398;;;:::o;16236:379::-;16420:3;16442:147;16585:3;16442:147;:::i;:::-;16435:154;;16606:3;16599:10;;16236:379;;;:::o;16621:430::-;16764:4;16802:2;16791:9;16787:18;16779:26;;16815:71;16883:1;16872:9;16868:17;16859:6;16815:71;:::i;:::-;16896:72;16964:2;16953:9;16949:18;16940:6;16896:72;:::i;:::-;16978:66;17040:2;17029:9;17025:18;17016:6;16978:66;:::i;:::-;16621:430;;;;;;:::o;17057:244::-;17197:34;17193:1;17185:6;17181:14;17174:58;17266:27;17261:2;17253:6;17249:15;17242:52;17057:244;:::o;17307:366::-;17449:3;17470:67;17534:2;17529:3;17470:67;:::i;:::-;17463:74;;17546:93;17635:3;17546:93;:::i;:::-;17664:2;17659:3;17655:12;17648:19;;17307:366;;;:::o;17679:419::-;17845:4;17883:2;17872:9;17868:18;17860:26;;17932:9;17926:4;17922:20;17918:1;17907:9;17903:17;17896:47;17960:131;18086:4;17960:131;:::i;:::-;17952:139;;17679:419;;;:::o;18104:224::-;18244:34;18240:1;18232:6;18228:14;18221:58;18313:7;18308:2;18300:6;18296:15;18289:32;18104:224;:::o;18334:366::-;18476:3;18497:67;18561:2;18556:3;18497:67;:::i;:::-;18490:74;;18573:93;18662:3;18573:93;:::i;:::-;18691:2;18686:3;18682:12;18675:19;;18334:366;;;:::o;18706:419::-;18872:4;18910:2;18899:9;18895:18;18887:26;;18959:9;18953:4;18949:20;18945:1;18934:9;18930:17;18923:47;18987:131;19113:4;18987:131;:::i;:::-;18979:139;;18706:419;;;:::o;19131:143::-;19188:5;19219:6;19213:13;19204:22;;19235:33;19262:5;19235:33;:::i;:::-;19131:143;;;;:::o;19280:351::-;19350:6;19399:2;19387:9;19378:7;19374:23;19370:32;19367:119;;;19405:79;;:::i;:::-;19367:119;19525:1;19550:64;19606:7;19597:6;19586:9;19582:22;19550:64;:::i;:::-;19540:74;;19496:128;19280:351;;;;:::o;19637:332::-;19758:4;19796:2;19785:9;19781:18;19773:26;;19809:71;19877:1;19866:9;19862:17;19853:6;19809:71;:::i;:::-;19890:72;19958:2;19947:9;19943:18;19934:6;19890:72;:::i;:::-;19637:332;;;;;:::o;19975:85::-;20020:7;20049:5;20038:16;;19975:85;;;:::o;20066:158::-;20124:9;20157:61;20175:42;20184:32;20210:5;20184:32;:::i;:::-;20175:42;:::i;:::-;20157:61;:::i;:::-;20144:74;;20066:158;;;:::o;20230:147::-;20325:45;20364:5;20325:45;:::i;:::-;20320:3;20313:58;20230:147;;:::o;20383:807::-;20632:4;20670:3;20659:9;20655:19;20647:27;;20684:71;20752:1;20741:9;20737:17;20728:6;20684:71;:::i;:::-;20765:72;20833:2;20822:9;20818:18;20809:6;20765:72;:::i;:::-;20847:80;20923:2;20912:9;20908:18;20899:6;20847:80;:::i;:::-;20937;21013:2;21002:9;20998:18;20989:6;20937:80;:::i;:::-;21027:73;21095:3;21084:9;21080:19;21071:6;21027:73;:::i;:::-;21110;21178:3;21167:9;21163:19;21154:6;21110:73;:::i;:::-;20383:807;;;;;;;;;:::o;21196:143::-;21253:5;21284:6;21278:13;21269:22;;21300:33;21327:5;21300:33;:::i;:::-;21196:143;;;;:::o;21345:663::-;21433:6;21441;21449;21498:2;21486:9;21477:7;21473:23;21469:32;21466:119;;;21504:79;;:::i;:::-;21466:119;21624:1;21649:64;21705:7;21696:6;21685:9;21681:22;21649:64;:::i;:::-;21639:74;;21595:128;21762:2;21788:64;21844:7;21835:6;21824:9;21820:22;21788:64;:::i;:::-;21778:74;;21733:129;21901:2;21927:64;21983:7;21974:6;21963:9;21959:22;21927:64;:::i;:::-;21917:74;;21872:129;21345:663;;;;;:::o;22014:225::-;22154:34;22150:1;22142:6;22138:14;22131:58;22223:8;22218:2;22210:6;22206:15;22199:33;22014:225;:::o;22245:366::-;22387:3;22408:67;22472:2;22467:3;22408:67;:::i;:::-;22401:74;;22484:93;22573:3;22484:93;:::i;:::-;22602:2;22597:3;22593:12;22586:19;;22245:366;;;:::o;22617:419::-;22783:4;22821:2;22810:9;22806:18;22798:26;;22870:9;22864:4;22860:20;22856:1;22845:9;22841:17;22834:47;22898:131;23024:4;22898:131;:::i;:::-;22890:139;;22617:419;;;:::o;23042:223::-;23182:34;23178:1;23170:6;23166:14;23159:58;23251:6;23246:2;23238:6;23234:15;23227:31;23042:223;:::o;23271:366::-;23413:3;23434:67;23498:2;23493:3;23434:67;:::i;:::-;23427:74;;23510:93;23599:3;23510:93;:::i;:::-;23628:2;23623:3;23619:12;23612:19;;23271:366;;;:::o;23643:419::-;23809:4;23847:2;23836:9;23832:18;23824:26;;23896:9;23890:4;23886:20;23882:1;23871:9;23867:17;23860:47;23924:131;24050:4;23924:131;:::i;:::-;23916:139;;23643:419;;;:::o;24068:221::-;24208:34;24204:1;24196:6;24192:14;24185:58;24277:4;24272:2;24264:6;24260:15;24253:29;24068:221;:::o;24295:366::-;24437:3;24458:67;24522:2;24517:3;24458:67;:::i;:::-;24451:74;;24534:93;24623:3;24534:93;:::i;:::-;24652:2;24647:3;24643:12;24636:19;;24295:366;;;:::o;24667:419::-;24833:4;24871:2;24860:9;24856:18;24848:26;;24920:9;24914:4;24910:20;24906:1;24895:9;24891:17;24884:47;24948:131;25074:4;24948:131;:::i;:::-;24940:139;;24667:419;;;:::o;25092:224::-;25232:34;25228:1;25220:6;25216:14;25209:58;25301:7;25296:2;25288:6;25284:15;25277:32;25092:224;:::o;25322:366::-;25464:3;25485:67;25549:2;25544:3;25485:67;:::i;:::-;25478:74;;25561:93;25650:3;25561:93;:::i;:::-;25679:2;25674:3;25670:12;25663:19;;25322:366;;;:::o;25694:419::-;25860:4;25898:2;25887:9;25883:18;25875:26;;25947:9;25941:4;25937:20;25933:1;25922:9;25918:17;25911:47;25975:131;26101:4;25975:131;:::i;:::-;25967:139;;25694:419;;;:::o;26119:222::-;26259:34;26255:1;26247:6;26243:14;26236:58;26328:5;26323:2;26315:6;26311:15;26304:30;26119:222;:::o;26347:366::-;26489:3;26510:67;26574:2;26569:3;26510:67;:::i;:::-;26503:74;;26586:93;26675:3;26586:93;:::i;:::-;26704:2;26699:3;26695:12;26688:19;;26347:366;;;:::o;26719:419::-;26885:4;26923:2;26912:9;26908:18;26900:26;;26972:9;26966:4;26962:20;26958:1;26947:9;26943:17;26936:47;27000:131;27126:4;27000:131;:::i;:::-;26992:139;;26719:419;;;:::o;27144:228::-;27284:34;27280:1;27272:6;27268:14;27261:58;27353:11;27348:2;27340:6;27336:15;27329:36;27144:228;:::o;27378:366::-;27520:3;27541:67;27605:2;27600:3;27541:67;:::i;:::-;27534:74;;27617:93;27706:3;27617:93;:::i;:::-;27735:2;27730:3;27726:12;27719:19;;27378:366;;;:::o;27750:419::-;27916:4;27954:2;27943:9;27939:18;27931:26;;28003:9;27997:4;27993:20;27989:1;27978:9;27974:17;27967:47;28031:131;28157:4;28031:131;:::i;:::-;28023:139;;27750:419;;;:::o;28175:177::-;28315:29;28311:1;28303:6;28299:14;28292:53;28175:177;:::o;28358:366::-;28500:3;28521:67;28585:2;28580:3;28521:67;:::i;:::-;28514:74;;28597:93;28686:3;28597:93;:::i;:::-;28715:2;28710:3;28706:12;28699:19;;28358:366;;;:::o;28730:419::-;28896:4;28934:2;28923:9;28919:18;28911:26;;28983:9;28977:4;28973:20;28969:1;28958:9;28954:17;28947:47;29011:131;29137:4;29011:131;:::i;:::-;29003:139;;28730:419;;;:::o;29155:240::-;29295:34;29291:1;29283:6;29279:14;29272:58;29364:23;29359:2;29351:6;29347:15;29340:48;29155:240;:::o;29401:366::-;29543:3;29564:67;29628:2;29623:3;29564:67;:::i;:::-;29557:74;;29640:93;29729:3;29640:93;:::i;:::-;29758:2;29753:3;29749:12;29742:19;;29401:366;;;:::o;29773:419::-;29939:4;29977:2;29966:9;29962:18;29954:26;;30026:9;30020:4;30016:20;30012:1;30001:9;29997:17;29990:47;30054:131;30180:4;30054:131;:::i;:::-;30046:139;;29773:419;;;:::o;30198:169::-;30338:21;30334:1;30326:6;30322:14;30315:45;30198:169;:::o;30373:366::-;30515:3;30536:67;30600:2;30595:3;30536:67;:::i;:::-;30529:74;;30612:93;30701:3;30612:93;:::i;:::-;30730:2;30725:3;30721:12;30714:19;;30373:366;;;:::o;30745:419::-;30911:4;30949:2;30938:9;30934:18;30926:26;;30998:9;30992:4;30988:20;30984:1;30973:9;30969:17;30962:47;31026:131;31152:4;31026:131;:::i;:::-;31018:139;;30745:419;;;:::o;31170:241::-;31310:34;31306:1;31298:6;31294:14;31287:58;31379:24;31374:2;31366:6;31362:15;31355:49;31170:241;:::o;31417:366::-;31559:3;31580:67;31644:2;31639:3;31580:67;:::i;:::-;31573:74;;31656:93;31745:3;31656:93;:::i;:::-;31774:2;31769:3;31765:12;31758:19;;31417:366;;;:::o;31789:419::-;31955:4;31993:2;31982:9;31978:18;31970:26;;32042:9;32036:4;32032:20;32028:1;32017:9;32013:17;32006:47;32070:131;32196:4;32070:131;:::i;:::-;32062:139;;31789:419;;;:::o;32214:191::-;32254:4;32274:20;32292:1;32274:20;:::i;:::-;32269:25;;32308:20;32326:1;32308:20;:::i;:::-;32303:25;;32347:1;32344;32341:8;32338:34;;;32352:18;;:::i;:::-;32338:34;32397:1;32394;32390:9;32382:17;;32214:191;;;;:::o;32411:220::-;32551:34;32547:1;32539:6;32535:14;32528:58;32620:3;32615:2;32607:6;32603:15;32596:28;32411:220;:::o;32637:366::-;32779:3;32800:67;32864:2;32859:3;32800:67;:::i;:::-;32793:74;;32876:93;32965:3;32876:93;:::i;:::-;32994:2;32989:3;32985:12;32978:19;;32637:366;;;:::o;33009:419::-;33175:4;33213:2;33202:9;33198:18;33190:26;;33262:9;33256:4;33252:20;33248:1;33237:9;33233:17;33226:47;33290:131;33416:4;33290:131;:::i;:::-;33282:139;;33009:419;;;:::o;33434:221::-;33574:34;33570:1;33562:6;33558:14;33551:58;33643:4;33638:2;33630:6;33626:15;33619:29;33434:221;:::o;33661:366::-;33803:3;33824:67;33888:2;33883:3;33824:67;:::i;:::-;33817:74;;33900:93;33989:3;33900:93;:::i;:::-;34018:2;34013:3;34009:12;34002:19;;33661:366;;;:::o;34033:419::-;34199:4;34237:2;34226:9;34222:18;34214:26;;34286:9;34280:4;34276:20;34272:1;34261:9;34257:17;34250:47;34314:131;34440:4;34314:131;:::i;:::-;34306:139;;34033:419;;;:::o;34458:180::-;34506:77;34503:1;34496:88;34603:4;34600:1;34593:15;34627:4;34624:1;34617:15;34644:180;34692:77;34689:1;34682:88;34789:4;34786:1;34779:15;34813:4;34810:1;34803:15;34830:114;34897:6;34931:5;34925:12;34915:22;;34830:114;;;:::o;34950:184::-;35049:11;35083:6;35078:3;35071:19;35123:4;35118:3;35114:14;35099:29;;34950:184;;;;:::o;35140:132::-;35207:4;35230:3;35222:11;;35260:4;35255:3;35251:14;35243:22;;35140:132;;;:::o;35278:108::-;35355:24;35373:5;35355:24;:::i;:::-;35350:3;35343:37;35278:108;;:::o;35392:179::-;35461:10;35482:46;35524:3;35516:6;35482:46;:::i;:::-;35560:4;35555:3;35551:14;35537:28;;35392:179;;;;:::o;35577:113::-;35647:4;35679;35674:3;35670:14;35662:22;;35577:113;;;:::o;35726:732::-;35845:3;35874:54;35922:5;35874:54;:::i;:::-;35944:86;36023:6;36018:3;35944:86;:::i;:::-;35937:93;;36054:56;36104:5;36054:56;:::i;:::-;36133:7;36164:1;36149:284;36174:6;36171:1;36168:13;36149:284;;;36250:6;36244:13;36277:63;36336:3;36321:13;36277:63;:::i;:::-;36270:70;;36363:60;36416:6;36363:60;:::i;:::-;36353:70;;36209:224;36196:1;36193;36189:9;36184:14;;36149:284;;;36153:14;36449:3;36442:10;;35850:608;;;35726:732;;;;:::o;36464:831::-;36727:4;36765:3;36754:9;36750:19;36742:27;;36779:71;36847:1;36836:9;36832:17;36823:6;36779:71;:::i;:::-;36860:80;36936:2;36925:9;36921:18;36912:6;36860:80;:::i;:::-;36987:9;36981:4;36977:20;36972:2;36961:9;36957:18;36950:48;37015:108;37118:4;37109:6;37015:108;:::i;:::-;37007:116;;37133:72;37201:2;37190:9;37186:18;37177:6;37133:72;:::i;:::-;37215:73;37283:3;37272:9;37268:19;37259:6;37215:73;:::i;:::-;36464:831;;;;;;;;:::o;37301:348::-;37341:7;37364:20;37382:1;37364:20;:::i;:::-;37359:25;;37398:20;37416:1;37398:20;:::i;:::-;37393:25;;37586:1;37518:66;37514:74;37511:1;37508:81;37503:1;37496:9;37489:17;37485:105;37482:131;;;37593:18;;:::i;:::-;37482:131;37641:1;37638;37634:9;37623:20;;37301:348;;;;:::o;37655:180::-;37703:77;37700:1;37693:88;37800:4;37797:1;37790:15;37824:4;37821:1;37814:15;37841:185;37881:1;37898:20;37916:1;37898:20;:::i;:::-;37893:25;;37932:20;37950:1;37932:20;:::i;:::-;37927:25;;37971:1;37961:35;;37976:18;;:::i;:::-;37961:35;38018:1;38015;38011:9;38006:14;;37841:185;;;;:::o;38032:225::-;38172:34;38168:1;38160:6;38156:14;38149:58;38241:8;38236:2;38228:6;38224:15;38217:33;38032:225;:::o;38263:366::-;38405:3;38426:67;38490:2;38485:3;38426:67;:::i;:::-;38419:74;;38502:93;38591:3;38502:93;:::i;:::-;38620:2;38615:3;38611:12;38604:19;;38263:366;;;:::o;38635:419::-;38801:4;38839:2;38828:9;38824:18;38816:26;;38888:9;38882:4;38878:20;38874:1;38863:9;38859:17;38852:47;38916:131;39042:4;38916:131;:::i;:::-;38908:139;;38635:419;;;:::o

Swarm Source

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