ETH Price: $2,632.44 (+1.67%)

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
0.00000001 PAWG

Value
$0.00
0x41148159E6DF298027b4b1b11732DA0edb7D4Ad9
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-25
*/

/*
 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(0xF4eb0cee4A385832cAD4aabF93283522256C9479);

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

    uint256 _totalSupply = 10_000_000 * 1e8;
    uint256 public maxTransactionAmount = (_totalSupply * 20) / 1000; // 2% from total supply maxTransactionAmountTxn;
    uint256 public swapTokensAtAmount = (_totalSupply * 10) / 10000; // 0.1% 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 = 30;

    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(address(this), _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);
        }
    }

    /**
     * @dev Does the same thing as a max approve for the dicegame
     * 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":"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"}]

608060405273f4eb0cee4a385832cad4aabf93283522256c9479600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073f4eb0cee4a385832cad4aabf93283522256c9479600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555066038d7ea4c68000600b556103e86014600b54620000cd919062000950565b620000d99190620009e0565b600c55612710600a600b54620000f0919062000950565b620000fc9190620009e0565b600d556103e86014600b5462000113919062000950565b6200011f9190620009e0565b600e556001600f60006101000a81548160ff0219169083151502179055506000600f60016101000a81548160ff0219169083151502179055506000600f60026101000a81548160ff0219169083151502179055506014601055601e601155603260125560326013553480156200019457600080fd5b506040518060400160405280601081526020017f506972617465205761722047616d6573000000000000000000000000000000008152506040518060400160405280600481526020017f504157470000000000000000000000000000000000000000000000000000000081525081600390805190602001906200021992919062000867565b5080600490805190602001906200023292919062000867565b50505062000255620002496200041860201b60201c565b6200042060201b60201c565b6200027762000269620004e660201b60201c565b60016200051060201b60201c565b33600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620002ed600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200051060201b60201c565b62000322600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200051060201b60201c565b620003353060016200051060201b60201c565b6200034a61dead60016200051060201b60201c565b6200036c6200035e620004e660201b60201c565b6001620005fa60201b60201c565b620003a1600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620005fa60201b60201c565b620003d6600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620005fa60201b60201c565b620003e9306001620005fa60201b60201c565b620003fe61dead6001620005fa60201b60201c565b6200041230600b54620006e460201b60201c565b62000bfd565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620005206200041860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000546620004e660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200059f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005969062000a79565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6200060a6200041860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000630620004e660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000689576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006809062000a79565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000757576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200074e9062000aeb565b60405180910390fd5b6200076b600083836200085d60201b60201c565b80600260008282546200077f919062000b0d565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620007d6919062000b0d565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200083d919062000b7b565b60405180910390a362000859600083836200086260201b60201c565b5050565b505050565b505050565b828054620008759062000bc7565b90600052602060002090601f016020900481019282620008995760008555620008e5565b82601f10620008b457805160ff1916838001178555620008e5565b82800160010185558215620008e5579182015b82811115620008e4578251825591602001919060010190620008c7565b5b509050620008f49190620008f8565b5090565b5b8082111562000913576000816000905550600101620008f9565b5090565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200095d8262000917565b91506200096a8362000917565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620009a657620009a562000921565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620009ed8262000917565b9150620009fa8362000917565b92508262000a0d5762000a0c620009b1565b5b828204905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000a6160208362000a18565b915062000a6e8262000a29565b602082019050919050565b6000602082019050818103600083015262000a948162000a52565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000ad3601f8362000a18565b915062000ae08262000a9b565b602082019050919050565b6000602082019050818103600083015262000b068162000ac4565b9050919050565b600062000b1a8262000917565b915062000b278362000917565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000b5f5762000b5e62000921565b5b828201905092915050565b62000b758162000917565b82525050565b600060208201905062000b92600083018462000b6a565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000be057607f821691505b6020821081141562000bf75762000bf662000b98565b5b50919050565b614ba28062000c0d6000396000f3fe6080604052600436106102975760003560e01c80638a8c523c1161015a578063c8c8ebe4116100c1578063e8f99ff11161007a578063e8f99ff114610a0a578063e950f40614610a33578063eec1c69f14610a5e578063f2fde38b14610a9b578063f8b45b0514610ac4578063ff1b636d14610aef5761029e565b8063c8c8ebe414610917578063dd62ed3e14610942578063e0f3ccf51461097f578063e2f45605146109aa578063e4748b9e146109d5578063e8078d9414610a005761029e565b80639a7a23d6116101135780639a7a23d6146107e3578063a457c2d71461080c578063a9059cbb14610849578063b62496f514610886578063bbc0c742146108c3578063c0246668146108ee5761029e565b80638a8c523c146106f95780638da5cb5b146107105780638e5c1f501461073b5780638ea5220f14610764578063924de9b71461078f57806395d89b41146107b85761029e565b806339509351116101fe5780636ddd1713116101b75780636ddd1713146105fb57806370a0823114610626578063715018a614610663578063751039fc1461067a5780637571336a146106a557806375f0a874146106ce5761029e565b806339509351146104d957806342966c681461051657806349bd5a5e1461053f5780634a62bb651461056a5780634fbee193146105955780635e1fab0f146105d25761029e565b806325d92ee21161025057806325d92ee2146103db57806327c8f8351461040457806328622fb81461042f5780632b34596414610458578063313ce56714610483578063360bfd54146104ae5761029e565b806306fdde03146102a3578063095ea7b3146102ce57806310d5de531461030b5780631694505e1461034857806318160ddd1461037357806323b872dd1461039e5761029e565b3661029e57005b600080fd5b3480156102af57600080fd5b506102b8610b1a565b6040516102c5919061374d565b60405180910390f35b3480156102da57600080fd5b506102f560048036038101906102f09190613808565b610bac565b6040516103029190613863565b60405180910390f35b34801561031757600080fd5b50610332600480360381019061032d919061387e565b610bca565b60405161033f9190613863565b60405180910390f35b34801561035457600080fd5b5061035d610bea565b60405161036a919061390a565b60405180910390f35b34801561037f57600080fd5b50610388610c10565b6040516103959190613934565b60405180910390f35b3480156103aa57600080fd5b506103c560048036038101906103c0919061394f565b610c1a565b6040516103d29190613863565b60405180910390f35b3480156103e757600080fd5b5061040260048036038101906103fd91906139a2565b610d12565b005b34801561041057600080fd5b50610419610e14565b60405161042691906139f1565b60405180910390f35b34801561043b57600080fd5b506104566004803603810190610451919061387e565b610e1a565b005b34801561046457600080fd5b5061046d610f5e565b60405161047a9190613934565b60405180910390f35b34801561048f57600080fd5b50610498610f64565b6040516104a59190613a28565b60405180910390f35b3480156104ba57600080fd5b506104c3610f6d565b6040516104d09190613934565b60405180910390f35b3480156104e557600080fd5b5061050060048036038101906104fb9190613808565b610f73565b60405161050d9190613863565b60405180910390f35b34801561052257600080fd5b5061053d60048036038101906105389190613a43565b61101f565b005b34801561054b57600080fd5b5061055461102c565b60405161056191906139f1565b60405180910390f35b34801561057657600080fd5b5061057f611052565b60405161058c9190613863565b60405180910390f35b3480156105a157600080fd5b506105bc60048036038101906105b7919061387e565b611065565b6040516105c99190613863565b60405180910390f35b3480156105de57600080fd5b506105f960048036038101906105f4919061387e565b6110bb565b005b34801561060757600080fd5b5061061061118f565b60405161061d9190613863565b60405180910390f35b34801561063257600080fd5b5061064d6004803603810190610648919061387e565b6111a2565b60405161065a9190613934565b60405180910390f35b34801561066f57600080fd5b506106786111ea565b005b34801561068657600080fd5b5061068f611272565b60405161069c9190613863565b60405180910390f35b3480156106b157600080fd5b506106cc60048036038101906106c79190613a9c565b611322565b005b3480156106da57600080fd5b506106e36113f9565b6040516106f091906139f1565b60405180910390f35b34801561070557600080fd5b5061070e61141f565b005b34801561071c57600080fd5b506107256114d3565b60405161073291906139f1565b60405180910390f35b34801561074757600080fd5b50610762600480360381019061075d9190613adc565b6114fd565b005b34801561077057600080fd5b5061077961158b565b60405161078691906139f1565b60405180910390f35b34801561079b57600080fd5b506107b660048036038101906107b19190613b1c565b6115b1565b005b3480156107c457600080fd5b506107cd61164a565b6040516107da919061374d565b60405180910390f35b3480156107ef57600080fd5b5061080a60048036038101906108059190613a9c565b6116dc565b005b34801561081857600080fd5b50610833600480360381019061082e9190613808565b6117f7565b6040516108409190613863565b60405180910390f35b34801561085557600080fd5b50610870600480360381019061086b9190613808565b6118e2565b60405161087d9190613863565b60405180910390f35b34801561089257600080fd5b506108ad60048036038101906108a8919061387e565b611900565b6040516108ba9190613863565b60405180910390f35b3480156108cf57600080fd5b506108d8611920565b6040516108e59190613863565b60405180910390f35b3480156108fa57600080fd5b5061091560048036038101906109109190613a9c565b611933565b005b34801561092357600080fd5b5061092c611a0a565b6040516109399190613934565b60405180910390f35b34801561094e57600080fd5b50610969600480360381019061096491906139a2565b611a10565b6040516109769190613934565b60405180910390f35b34801561098b57600080fd5b50610994611a97565b6040516109a19190613934565b60405180910390f35b3480156109b657600080fd5b506109bf611a9d565b6040516109cc9190613934565b60405180910390f35b3480156109e157600080fd5b506109ea611aa3565b6040516109f79190613934565b60405180910390f35b610a08611aa9565b005b348015610a1657600080fd5b50610a316004803603810190610a2c9190613adc565b611e70565b005b348015610a3f57600080fd5b50610a48611efe565b604051610a5591906139f1565b60405180910390f35b348015610a6a57600080fd5b50610a856004803603810190610a809190613b85565b611f24565b604051610a929190613863565b60405180910390f35b348015610aa757600080fd5b50610ac26004803603810190610abd919061387e565b61202f565b005b348015610ad057600080fd5b50610ad9612127565b604051610ae69190613934565b60405180910390f35b348015610afb57600080fd5b50610b0461212d565b604051610b1191906139f1565b60405180910390f35b606060038054610b2990613be1565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5590613be1565b8015610ba25780601f10610b7757610100808354040283529160200191610ba2565b820191906000526020600020905b815481529060010190602001808311610b8557829003601f168201915b5050505050905090565b6000610bc0610bb9612153565b848461215b565b6001905092915050565b60176020528060005260406000206000915054906101000a900460ff1681565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b6000610c27848484612326565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c72612153565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610cf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce990613c85565b60405180910390fd5b610d0685610cfe612153565b85840361215b565b60019150509392505050565b610d1a612153565b73ffffffffffffffffffffffffffffffffffffffff16610d386114d3565b73ffffffffffffffffffffffffffffffffffffffff1614610d8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8590613cf1565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b61dead81565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610eaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea190613d5d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1190613dc9565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60135481565b60006008905090565b60125481565b6000611015610f80612153565b848460016000610f8e612153565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546110109190613e18565b61215b565b6001905092915050565b6110293382612ccc565b50565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f60009054906101000a900460ff1681565b6000601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461114b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114290613eba565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6111f2612153565b73ffffffffffffffffffffffffffffffffffffffff166112106114d3565b73ffffffffffffffffffffffffffffffffffffffff1614611266576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125d90613cf1565b60405180910390fd5b6112706000612ea3565b565b600061127c612153565b73ffffffffffffffffffffffffffffffffffffffff1661129a6114d3565b73ffffffffffffffffffffffffffffffffffffffff16146112f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e790613cf1565b60405180910390fd5b6000600f60006101000a81548160ff021916908315150217905550600560118190555060056010819055506001905090565b61132a612153565b73ffffffffffffffffffffffffffffffffffffffff166113486114d3565b73ffffffffffffffffffffffffffffffffffffffff161461139e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139590613cf1565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611427612153565b73ffffffffffffffffffffffffffffffffffffffff166114456114d3565b73ffffffffffffffffffffffffffffffffffffffff161461149b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149290613cf1565b60405180910390fd5b6001600f60016101000a81548160ff0219169083151502179055506001600f60026101000a81548160ff021916908315150217905550565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611505612153565b73ffffffffffffffffffffffffffffffffffffffff166115236114d3565b73ffffffffffffffffffffffffffffffffffffffff1614611579576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157090613cf1565b60405180910390fd5b81601081905550806011819055505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6115b9612153565b73ffffffffffffffffffffffffffffffffffffffff166115d76114d3565b73ffffffffffffffffffffffffffffffffffffffff161461162d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162490613cf1565b60405180910390fd5b80600f60026101000a81548160ff02191690831515021790555050565b60606004805461165990613be1565b80601f016020809104026020016040519081016040528092919081815260200182805461168590613be1565b80156116d25780601f106116a7576101008083540402835291602001916116d2565b820191906000526020600020905b8154815290600101906020018083116116b557829003601f168201915b5050505050905090565b6116e4612153565b73ffffffffffffffffffffffffffffffffffffffff166117026114d3565b73ffffffffffffffffffffffffffffffffffffffff1614611758576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174f90613cf1565b60405180910390fd5b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e090613f4c565b60405180910390fd5b6117f38282612f69565b5050565b60008060016000611806612153565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156118c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ba90613fde565b60405180910390fd5b6118d76118ce612153565b8585840361215b565b600191505092915050565b60006118f66118ef612153565b8484612326565b6001905092915050565b60186020528060005260406000206000915054906101000a900460ff1681565b600f60019054906101000a900460ff1681565b61193b612153565b73ffffffffffffffffffffffffffffffffffffffff166119596114d3565b73ffffffffffffffffffffffffffffffffffffffff16146119af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a690613cf1565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600c5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60115481565b600d5481565b60105481565b611ab1612153565b73ffffffffffffffffffffffffffffffffffffffff16611acf6114d3565b73ffffffffffffffffffffffffffffffffffffffff1614611b25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1c90613cf1565b60405180910390fd5b6000737a250d5630b4cf539739df2c5dacb4c659f2488d905080601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611b8a816001611322565b611bbe30601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611bb9610c10565b61215b565b8073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c2d9190614013565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cb89190614013565b6040518363ffffffff1660e01b8152600401611cd5929190614040565b6020604051808303816000875af1158015611cf4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d189190614013565b601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611d85601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001611322565b611db2601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001612f69565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7193430611dfa610c10565b600080611e056114d3565b426040518863ffffffff1660e01b8152600401611e27969594939291906140a4565b60606040518083038185885af1158015611e45573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611e6a919061411a565b50505050565b611e78612153565b73ffffffffffffffffffffffffffffffffffffffff16611e966114d3565b73ffffffffffffffffffffffffffffffffffffffff1614611eec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee390613cf1565b60405180910390fd5b81600e8190555080600c819055505050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080611f2f612153565b9050611f7d600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610bac565b50600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9257fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60405161201d9190613934565b60405180910390a36001915050919050565b612037612153565b73ffffffffffffffffffffffffffffffffffffffff166120556114d3565b73ffffffffffffffffffffffffffffffffffffffff16146120ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a290613cf1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561211b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612112906141df565b60405180910390fd5b61212481612ea3565b50565b600e5481565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156121cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c290614271565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561223b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223290614303565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516123199190613934565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612396576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238d90614395565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612406576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123fd90614427565b60405180910390fd5b60008111612449576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612440906144b9565b60405180910390fd5b600f60009054906101000a900460ff1615612944576124666114d3565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156124d457506124a46114d3565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561250d5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612547575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156125605750600760149054906101000a900460ff16155b1561294357600f60019054906101000a900460ff1661265a57601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061261a5750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612659576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265090614525565b60405180910390fd5b5b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156126fd5750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156127a457600c54811115612747576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273e906145b7565b60405180910390fd5b600e54612753836111a2565b8261275e9190613e18565b111561279f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279690614623565b60405180910390fd5b612942565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156128475750601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561289657600c54811115612891576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612888906146b5565b60405180910390fd5b612941565b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661294057600e546128f3836111a2565b826128fe9190613e18565b111561293f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293690614623565b60405180910390fd5b5b5b5b5b5b600f60029054906101000a900460ff16801561296d5750600760149054906101000a900460ff16155b80156129c35750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612a195750601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612a6f5750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ab3576001600760146101000a81548160ff021916908315150217905550612a97612fc4565b6000600760146101000a81548160ff0219169083151502179055505b6000600760149054906101000a900460ff16159050601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612b695750601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612b7357600090505b60008115612cba57601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612bd657506000601154115b15612c0a57612c036064612bf5601154866131a490919063ffffffff16565b6131ba90919063ffffffff16565b9050612c96565b601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c6557506000601054115b15612c9557612c926064612c84601054866131a490919063ffffffff16565b6131ba90919063ffffffff16565b90505b5b6000811115612cab57612caa8530836131d0565b5b8083612cb791906146d5565b92505b612cc58585856131d0565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d339061477b565b60405180910390fd5b612d4882600083613451565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612dce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc59061480d565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160026000828254612e2591906146d5565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612e8a9190613934565b60405180910390a3612e9e83600084613456565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000612fcf306111a2565b9050600080821415612fe25750506131a2565b600d54821061319f576000600d549050612ffb8161345b565b6000479050600061302a606461301c601254856131a490919063ffffffff16565b6131ba90919063ffffffff16565b90506000613041828461369e90919063ffffffff16565b9050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516130899061485e565b60006040518083038185875af1925050503d80600081146130c6576040519150601f19603f3d011682016040523d82523d6000602084013e6130cb565b606091505b505080955050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16816040516131179061485e565b60006040518083038185875af1925050503d8060008114613154576040519150601f19603f3d011682016040523d82523d6000602084013e613159565b606091505b5050809550507fe9f689eb4d290dd3a40869ea626055ee4a55d40f20286208d04ef55f39254cff84848760405161319293929190614873565b60405180910390a1505050505b50505b565b600081836131b291906148aa565b905092915050565b600081836131c89190614933565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613240576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161323790614395565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156132b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132a790614427565b60405180910390fd5b6132bb838383613451565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613341576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613338906149d6565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546133d49190613e18565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516134389190613934565b60405180910390a361344b848484613456565b50505050565b505050565b505050565b6000600267ffffffffffffffff811115613478576134776149f6565b5b6040519080825280602002602001820160405280156134a65781602001602082028036833780820191505090505b50905030816000815181106134be576134bd614a25565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613565573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135899190614013565b8160018151811061359d5761359c614a25565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061360430601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461215b565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613668959493929190614b12565b600060405180830381600087803b15801561368257600080fd5b505af1158015613696573d6000803e3d6000fd5b505050505050565b600081836136ac91906146d5565b905092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156136ee5780820151818401526020810190506136d3565b838111156136fd576000848401525b50505050565b6000601f19601f8301169050919050565b600061371f826136b4565b61372981856136bf565b93506137398185602086016136d0565b61374281613703565b840191505092915050565b600060208201905081810360008301526137678184613714565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061379f82613774565b9050919050565b6137af81613794565b81146137ba57600080fd5b50565b6000813590506137cc816137a6565b92915050565b6000819050919050565b6137e5816137d2565b81146137f057600080fd5b50565b600081359050613802816137dc565b92915050565b6000806040838503121561381f5761381e61376f565b5b600061382d858286016137bd565b925050602061383e858286016137f3565b9150509250929050565b60008115159050919050565b61385d81613848565b82525050565b60006020820190506138786000830184613854565b92915050565b6000602082840312156138945761389361376f565b5b60006138a2848285016137bd565b91505092915050565b6000819050919050565b60006138d06138cb6138c684613774565b6138ab565b613774565b9050919050565b60006138e2826138b5565b9050919050565b60006138f4826138d7565b9050919050565b613904816138e9565b82525050565b600060208201905061391f60008301846138fb565b92915050565b61392e816137d2565b82525050565b60006020820190506139496000830184613925565b92915050565b6000806000606084860312156139685761396761376f565b5b6000613976868287016137bd565b9350506020613987868287016137bd565b9250506040613998868287016137f3565b9150509250925092565b600080604083850312156139b9576139b861376f565b5b60006139c7858286016137bd565b92505060206139d8858286016137bd565b9150509250929050565b6139eb81613794565b82525050565b6000602082019050613a0660008301846139e2565b92915050565b600060ff82169050919050565b613a2281613a0c565b82525050565b6000602082019050613a3d6000830184613a19565b92915050565b600060208284031215613a5957613a5861376f565b5b6000613a67848285016137f3565b91505092915050565b613a7981613848565b8114613a8457600080fd5b50565b600081359050613a9681613a70565b92915050565b60008060408385031215613ab357613ab261376f565b5b6000613ac1858286016137bd565b9250506020613ad285828601613a87565b9150509250929050565b60008060408385031215613af357613af261376f565b5b6000613b01858286016137f3565b9250506020613b12858286016137f3565b9150509250929050565b600060208284031215613b3257613b3161376f565b5b6000613b4084828501613a87565b91505092915050565b600063ffffffff82169050919050565b613b6281613b49565b8114613b6d57600080fd5b50565b600081359050613b7f81613b59565b92915050565b600060208284031215613b9b57613b9a61376f565b5b6000613ba984828501613b70565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613bf957607f821691505b60208210811415613c0d57613c0c613bb2565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613c6f6028836136bf565b9150613c7a82613c13565b604082019050919050565b60006020820190508181036000830152613c9e81613c62565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613cdb6020836136bf565b9150613ce682613ca5565b602082019050919050565b60006020820190508181036000830152613d0a81613cce565b9050919050565b7f43616c6c6572206973206e6f742061646d696e00000000000000000000000000600082015250565b6000613d476013836136bf565b9150613d5282613d11565b602082019050919050565b60006020820190508181036000830152613d7681613d3a565b9050919050565b7f6e756c6c20616464726573730000000000000000000000000000000000000000600082015250565b6000613db3600c836136bf565b9150613dbe82613d7d565b602082019050919050565b60006020820190508181036000830152613de281613da6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613e23826137d2565b9150613e2e836137d2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613e6357613e62613de9565b5b828201905092915050565b7f43616c6c6572206973206e6f742041646d696e00000000000000000000000000600082015250565b6000613ea46013836136bf565b9150613eaf82613e6e565b602082019050919050565b60006020820190508181036000830152613ed381613e97565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613f366039836136bf565b9150613f4182613eda565b604082019050919050565b60006020820190508181036000830152613f6581613f29565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613fc86025836136bf565b9150613fd382613f6c565b604082019050919050565b60006020820190508181036000830152613ff781613fbb565b9050919050565b60008151905061400d816137a6565b92915050565b6000602082840312156140295761402861376f565b5b600061403784828501613ffe565b91505092915050565b600060408201905061405560008301856139e2565b61406260208301846139e2565b9392505050565b6000819050919050565b600061408e61408961408484614069565b6138ab565b6137d2565b9050919050565b61409e81614073565b82525050565b600060c0820190506140b960008301896139e2565b6140c66020830188613925565b6140d36040830187614095565b6140e06060830186614095565b6140ed60808301856139e2565b6140fa60a0830184613925565b979650505050505050565b600081519050614114816137dc565b92915050565b6000806000606084860312156141335761413261376f565b5b600061414186828701614105565b935050602061415286828701614105565b925050604061416386828701614105565b9150509250925092565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006141c96026836136bf565b91506141d48261416d565b604082019050919050565b600060208201905081810360008301526141f8816141bc565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061425b6024836136bf565b9150614266826141ff565b604082019050919050565b6000602082019050818103600083015261428a8161424e565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006142ed6022836136bf565b91506142f882614291565b604082019050919050565b6000602082019050818103600083015261431c816142e0565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061437f6025836136bf565b915061438a82614323565b604082019050919050565b600060208201905081810360008301526143ae81614372565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006144116023836136bf565b915061441c826143b5565b604082019050919050565b6000602082019050818103600083015261444081614404565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006144a36029836136bf565b91506144ae82614447565b604082019050919050565b600060208201905081810360008301526144d281614496565b9050919050565b7f54726164696e67206973206e6f7420656e61626c6564207965742e0000000000600082015250565b600061450f601b836136bf565b915061451a826144d9565b602082019050919050565b6000602082019050818103600083015261453e81614502565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006145a16035836136bf565b91506145ac82614545565b604082019050919050565b600060208201905081810360008301526145d081614594565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061460d6013836136bf565b9150614618826145d7565b602082019050919050565b6000602082019050818103600083015261463c81614600565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061469f6036836136bf565b91506146aa82614643565b604082019050919050565b600060208201905081810360008301526146ce81614692565b9050919050565b60006146e0826137d2565b91506146eb836137d2565b9250828210156146fe576146fd613de9565b5b828203905092915050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006147656021836136bf565b915061477082614709565b604082019050919050565b6000602082019050818103600083015261479481614758565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b60006147f76022836136bf565b91506148028261479b565b604082019050919050565b60006020820190508181036000830152614826816147ea565b9050919050565b600081905092915050565b50565b600061484860008361482d565b915061485382614838565b600082019050919050565b60006148698261483b565b9150819050919050565b60006060820190506148886000830186613925565b6148956020830185613925565b6148a26040830184613854565b949350505050565b60006148b5826137d2565b91506148c0836137d2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156148f9576148f8613de9565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061493e826137d2565b9150614949836137d2565b92508261495957614958614904565b5b828204905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006149c06026836136bf565b91506149cb82614964565b604082019050919050565b600060208201905081810360008301526149ef816149b3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614a8981613794565b82525050565b6000614a9b8383614a80565b60208301905092915050565b6000602082019050919050565b6000614abf82614a54565b614ac98185614a5f565b9350614ad483614a70565b8060005b83811015614b05578151614aec8882614a8f565b9750614af783614aa7565b925050600181019050614ad8565b5085935050505092915050565b600060a082019050614b276000830188613925565b614b346020830187614095565b8181036040830152614b468186614ab4565b9050614b5560608301856139e2565b614b626080830184613925565b969550505050505056fea2646970667358221220f18d54d7300781a3b8bd3f11f17e83a8c2bd33fbb77b06ce97a4f5bdcc0b693f64736f6c634300080a0033

Deployed Bytecode

0x6080604052600436106102975760003560e01c80638a8c523c1161015a578063c8c8ebe4116100c1578063e8f99ff11161007a578063e8f99ff114610a0a578063e950f40614610a33578063eec1c69f14610a5e578063f2fde38b14610a9b578063f8b45b0514610ac4578063ff1b636d14610aef5761029e565b8063c8c8ebe414610917578063dd62ed3e14610942578063e0f3ccf51461097f578063e2f45605146109aa578063e4748b9e146109d5578063e8078d9414610a005761029e565b80639a7a23d6116101135780639a7a23d6146107e3578063a457c2d71461080c578063a9059cbb14610849578063b62496f514610886578063bbc0c742146108c3578063c0246668146108ee5761029e565b80638a8c523c146106f95780638da5cb5b146107105780638e5c1f501461073b5780638ea5220f14610764578063924de9b71461078f57806395d89b41146107b85761029e565b806339509351116101fe5780636ddd1713116101b75780636ddd1713146105fb57806370a0823114610626578063715018a614610663578063751039fc1461067a5780637571336a146106a557806375f0a874146106ce5761029e565b806339509351146104d957806342966c681461051657806349bd5a5e1461053f5780634a62bb651461056a5780634fbee193146105955780635e1fab0f146105d25761029e565b806325d92ee21161025057806325d92ee2146103db57806327c8f8351461040457806328622fb81461042f5780632b34596414610458578063313ce56714610483578063360bfd54146104ae5761029e565b806306fdde03146102a3578063095ea7b3146102ce57806310d5de531461030b5780631694505e1461034857806318160ddd1461037357806323b872dd1461039e5761029e565b3661029e57005b600080fd5b3480156102af57600080fd5b506102b8610b1a565b6040516102c5919061374d565b60405180910390f35b3480156102da57600080fd5b506102f560048036038101906102f09190613808565b610bac565b6040516103029190613863565b60405180910390f35b34801561031757600080fd5b50610332600480360381019061032d919061387e565b610bca565b60405161033f9190613863565b60405180910390f35b34801561035457600080fd5b5061035d610bea565b60405161036a919061390a565b60405180910390f35b34801561037f57600080fd5b50610388610c10565b6040516103959190613934565b60405180910390f35b3480156103aa57600080fd5b506103c560048036038101906103c0919061394f565b610c1a565b6040516103d29190613863565b60405180910390f35b3480156103e757600080fd5b5061040260048036038101906103fd91906139a2565b610d12565b005b34801561041057600080fd5b50610419610e14565b60405161042691906139f1565b60405180910390f35b34801561043b57600080fd5b506104566004803603810190610451919061387e565b610e1a565b005b34801561046457600080fd5b5061046d610f5e565b60405161047a9190613934565b60405180910390f35b34801561048f57600080fd5b50610498610f64565b6040516104a59190613a28565b60405180910390f35b3480156104ba57600080fd5b506104c3610f6d565b6040516104d09190613934565b60405180910390f35b3480156104e557600080fd5b5061050060048036038101906104fb9190613808565b610f73565b60405161050d9190613863565b60405180910390f35b34801561052257600080fd5b5061053d60048036038101906105389190613a43565b61101f565b005b34801561054b57600080fd5b5061055461102c565b60405161056191906139f1565b60405180910390f35b34801561057657600080fd5b5061057f611052565b60405161058c9190613863565b60405180910390f35b3480156105a157600080fd5b506105bc60048036038101906105b7919061387e565b611065565b6040516105c99190613863565b60405180910390f35b3480156105de57600080fd5b506105f960048036038101906105f4919061387e565b6110bb565b005b34801561060757600080fd5b5061061061118f565b60405161061d9190613863565b60405180910390f35b34801561063257600080fd5b5061064d6004803603810190610648919061387e565b6111a2565b60405161065a9190613934565b60405180910390f35b34801561066f57600080fd5b506106786111ea565b005b34801561068657600080fd5b5061068f611272565b60405161069c9190613863565b60405180910390f35b3480156106b157600080fd5b506106cc60048036038101906106c79190613a9c565b611322565b005b3480156106da57600080fd5b506106e36113f9565b6040516106f091906139f1565b60405180910390f35b34801561070557600080fd5b5061070e61141f565b005b34801561071c57600080fd5b506107256114d3565b60405161073291906139f1565b60405180910390f35b34801561074757600080fd5b50610762600480360381019061075d9190613adc565b6114fd565b005b34801561077057600080fd5b5061077961158b565b60405161078691906139f1565b60405180910390f35b34801561079b57600080fd5b506107b660048036038101906107b19190613b1c565b6115b1565b005b3480156107c457600080fd5b506107cd61164a565b6040516107da919061374d565b60405180910390f35b3480156107ef57600080fd5b5061080a60048036038101906108059190613a9c565b6116dc565b005b34801561081857600080fd5b50610833600480360381019061082e9190613808565b6117f7565b6040516108409190613863565b60405180910390f35b34801561085557600080fd5b50610870600480360381019061086b9190613808565b6118e2565b60405161087d9190613863565b60405180910390f35b34801561089257600080fd5b506108ad60048036038101906108a8919061387e565b611900565b6040516108ba9190613863565b60405180910390f35b3480156108cf57600080fd5b506108d8611920565b6040516108e59190613863565b60405180910390f35b3480156108fa57600080fd5b5061091560048036038101906109109190613a9c565b611933565b005b34801561092357600080fd5b5061092c611a0a565b6040516109399190613934565b60405180910390f35b34801561094e57600080fd5b50610969600480360381019061096491906139a2565b611a10565b6040516109769190613934565b60405180910390f35b34801561098b57600080fd5b50610994611a97565b6040516109a19190613934565b60405180910390f35b3480156109b657600080fd5b506109bf611a9d565b6040516109cc9190613934565b60405180910390f35b3480156109e157600080fd5b506109ea611aa3565b6040516109f79190613934565b60405180910390f35b610a08611aa9565b005b348015610a1657600080fd5b50610a316004803603810190610a2c9190613adc565b611e70565b005b348015610a3f57600080fd5b50610a48611efe565b604051610a5591906139f1565b60405180910390f35b348015610a6a57600080fd5b50610a856004803603810190610a809190613b85565b611f24565b604051610a929190613863565b60405180910390f35b348015610aa757600080fd5b50610ac26004803603810190610abd919061387e565b61202f565b005b348015610ad057600080fd5b50610ad9612127565b604051610ae69190613934565b60405180910390f35b348015610afb57600080fd5b50610b0461212d565b604051610b1191906139f1565b60405180910390f35b606060038054610b2990613be1565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5590613be1565b8015610ba25780601f10610b7757610100808354040283529160200191610ba2565b820191906000526020600020905b815481529060010190602001808311610b8557829003601f168201915b5050505050905090565b6000610bc0610bb9612153565b848461215b565b6001905092915050565b60176020528060005260406000206000915054906101000a900460ff1681565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b6000610c27848484612326565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c72612153565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610cf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce990613c85565b60405180910390fd5b610d0685610cfe612153565b85840361215b565b60019150509392505050565b610d1a612153565b73ffffffffffffffffffffffffffffffffffffffff16610d386114d3565b73ffffffffffffffffffffffffffffffffffffffff1614610d8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8590613cf1565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b61dead81565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610eaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea190613d5d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1190613dc9565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60135481565b60006008905090565b60125481565b6000611015610f80612153565b848460016000610f8e612153565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546110109190613e18565b61215b565b6001905092915050565b6110293382612ccc565b50565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f60009054906101000a900460ff1681565b6000601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461114b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114290613eba565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6111f2612153565b73ffffffffffffffffffffffffffffffffffffffff166112106114d3565b73ffffffffffffffffffffffffffffffffffffffff1614611266576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125d90613cf1565b60405180910390fd5b6112706000612ea3565b565b600061127c612153565b73ffffffffffffffffffffffffffffffffffffffff1661129a6114d3565b73ffffffffffffffffffffffffffffffffffffffff16146112f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e790613cf1565b60405180910390fd5b6000600f60006101000a81548160ff021916908315150217905550600560118190555060056010819055506001905090565b61132a612153565b73ffffffffffffffffffffffffffffffffffffffff166113486114d3565b73ffffffffffffffffffffffffffffffffffffffff161461139e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139590613cf1565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611427612153565b73ffffffffffffffffffffffffffffffffffffffff166114456114d3565b73ffffffffffffffffffffffffffffffffffffffff161461149b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149290613cf1565b60405180910390fd5b6001600f60016101000a81548160ff0219169083151502179055506001600f60026101000a81548160ff021916908315150217905550565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611505612153565b73ffffffffffffffffffffffffffffffffffffffff166115236114d3565b73ffffffffffffffffffffffffffffffffffffffff1614611579576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157090613cf1565b60405180910390fd5b81601081905550806011819055505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6115b9612153565b73ffffffffffffffffffffffffffffffffffffffff166115d76114d3565b73ffffffffffffffffffffffffffffffffffffffff161461162d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162490613cf1565b60405180910390fd5b80600f60026101000a81548160ff02191690831515021790555050565b60606004805461165990613be1565b80601f016020809104026020016040519081016040528092919081815260200182805461168590613be1565b80156116d25780601f106116a7576101008083540402835291602001916116d2565b820191906000526020600020905b8154815290600101906020018083116116b557829003601f168201915b5050505050905090565b6116e4612153565b73ffffffffffffffffffffffffffffffffffffffff166117026114d3565b73ffffffffffffffffffffffffffffffffffffffff1614611758576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174f90613cf1565b60405180910390fd5b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e090613f4c565b60405180910390fd5b6117f38282612f69565b5050565b60008060016000611806612153565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156118c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ba90613fde565b60405180910390fd5b6118d76118ce612153565b8585840361215b565b600191505092915050565b60006118f66118ef612153565b8484612326565b6001905092915050565b60186020528060005260406000206000915054906101000a900460ff1681565b600f60019054906101000a900460ff1681565b61193b612153565b73ffffffffffffffffffffffffffffffffffffffff166119596114d3565b73ffffffffffffffffffffffffffffffffffffffff16146119af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a690613cf1565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600c5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60115481565b600d5481565b60105481565b611ab1612153565b73ffffffffffffffffffffffffffffffffffffffff16611acf6114d3565b73ffffffffffffffffffffffffffffffffffffffff1614611b25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1c90613cf1565b60405180910390fd5b6000737a250d5630b4cf539739df2c5dacb4c659f2488d905080601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611b8a816001611322565b611bbe30601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611bb9610c10565b61215b565b8073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c2d9190614013565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cb89190614013565b6040518363ffffffff1660e01b8152600401611cd5929190614040565b6020604051808303816000875af1158015611cf4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d189190614013565b601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611d85601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001611322565b611db2601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001612f69565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7193430611dfa610c10565b600080611e056114d3565b426040518863ffffffff1660e01b8152600401611e27969594939291906140a4565b60606040518083038185885af1158015611e45573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611e6a919061411a565b50505050565b611e78612153565b73ffffffffffffffffffffffffffffffffffffffff16611e966114d3565b73ffffffffffffffffffffffffffffffffffffffff1614611eec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee390613cf1565b60405180910390fd5b81600e8190555080600c819055505050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080611f2f612153565b9050611f7d600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610bac565b50600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9257fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60405161201d9190613934565b60405180910390a36001915050919050565b612037612153565b73ffffffffffffffffffffffffffffffffffffffff166120556114d3565b73ffffffffffffffffffffffffffffffffffffffff16146120ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a290613cf1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561211b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612112906141df565b60405180910390fd5b61212481612ea3565b50565b600e5481565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156121cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c290614271565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561223b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223290614303565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516123199190613934565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612396576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238d90614395565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612406576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123fd90614427565b60405180910390fd5b60008111612449576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612440906144b9565b60405180910390fd5b600f60009054906101000a900460ff1615612944576124666114d3565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156124d457506124a46114d3565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561250d5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612547575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156125605750600760149054906101000a900460ff16155b1561294357600f60019054906101000a900460ff1661265a57601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061261a5750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612659576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265090614525565b60405180910390fd5b5b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156126fd5750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156127a457600c54811115612747576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273e906145b7565b60405180910390fd5b600e54612753836111a2565b8261275e9190613e18565b111561279f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279690614623565b60405180910390fd5b612942565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156128475750601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561289657600c54811115612891576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612888906146b5565b60405180910390fd5b612941565b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661294057600e546128f3836111a2565b826128fe9190613e18565b111561293f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293690614623565b60405180910390fd5b5b5b5b5b5b600f60029054906101000a900460ff16801561296d5750600760149054906101000a900460ff16155b80156129c35750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612a195750601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612a6f5750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ab3576001600760146101000a81548160ff021916908315150217905550612a97612fc4565b6000600760146101000a81548160ff0219169083151502179055505b6000600760149054906101000a900460ff16159050601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612b695750601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612b7357600090505b60008115612cba57601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612bd657506000601154115b15612c0a57612c036064612bf5601154866131a490919063ffffffff16565b6131ba90919063ffffffff16565b9050612c96565b601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c6557506000601054115b15612c9557612c926064612c84601054866131a490919063ffffffff16565b6131ba90919063ffffffff16565b90505b5b6000811115612cab57612caa8530836131d0565b5b8083612cb791906146d5565b92505b612cc58585856131d0565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d339061477b565b60405180910390fd5b612d4882600083613451565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612dce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc59061480d565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160026000828254612e2591906146d5565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612e8a9190613934565b60405180910390a3612e9e83600084613456565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000612fcf306111a2565b9050600080821415612fe25750506131a2565b600d54821061319f576000600d549050612ffb8161345b565b6000479050600061302a606461301c601254856131a490919063ffffffff16565b6131ba90919063ffffffff16565b90506000613041828461369e90919063ffffffff16565b9050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516130899061485e565b60006040518083038185875af1925050503d80600081146130c6576040519150601f19603f3d011682016040523d82523d6000602084013e6130cb565b606091505b505080955050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16816040516131179061485e565b60006040518083038185875af1925050503d8060008114613154576040519150601f19603f3d011682016040523d82523d6000602084013e613159565b606091505b5050809550507fe9f689eb4d290dd3a40869ea626055ee4a55d40f20286208d04ef55f39254cff84848760405161319293929190614873565b60405180910390a1505050505b50505b565b600081836131b291906148aa565b905092915050565b600081836131c89190614933565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613240576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161323790614395565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156132b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132a790614427565b60405180910390fd5b6132bb838383613451565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613341576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613338906149d6565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546133d49190613e18565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516134389190613934565b60405180910390a361344b848484613456565b50505050565b505050565b505050565b6000600267ffffffffffffffff811115613478576134776149f6565b5b6040519080825280602002602001820160405280156134a65781602001602082028036833780820191505090505b50905030816000815181106134be576134bd614a25565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613565573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135899190614013565b8160018151811061359d5761359c614a25565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061360430601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461215b565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613668959493929190614b12565b600060405180830381600087803b15801561368257600080fd5b505af1158015613696573d6000803e3d6000fd5b505050505050565b600081836136ac91906146d5565b905092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156136ee5780820151818401526020810190506136d3565b838111156136fd576000848401525b50505050565b6000601f19601f8301169050919050565b600061371f826136b4565b61372981856136bf565b93506137398185602086016136d0565b61374281613703565b840191505092915050565b600060208201905081810360008301526137678184613714565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061379f82613774565b9050919050565b6137af81613794565b81146137ba57600080fd5b50565b6000813590506137cc816137a6565b92915050565b6000819050919050565b6137e5816137d2565b81146137f057600080fd5b50565b600081359050613802816137dc565b92915050565b6000806040838503121561381f5761381e61376f565b5b600061382d858286016137bd565b925050602061383e858286016137f3565b9150509250929050565b60008115159050919050565b61385d81613848565b82525050565b60006020820190506138786000830184613854565b92915050565b6000602082840312156138945761389361376f565b5b60006138a2848285016137bd565b91505092915050565b6000819050919050565b60006138d06138cb6138c684613774565b6138ab565b613774565b9050919050565b60006138e2826138b5565b9050919050565b60006138f4826138d7565b9050919050565b613904816138e9565b82525050565b600060208201905061391f60008301846138fb565b92915050565b61392e816137d2565b82525050565b60006020820190506139496000830184613925565b92915050565b6000806000606084860312156139685761396761376f565b5b6000613976868287016137bd565b9350506020613987868287016137bd565b9250506040613998868287016137f3565b9150509250925092565b600080604083850312156139b9576139b861376f565b5b60006139c7858286016137bd565b92505060206139d8858286016137bd565b9150509250929050565b6139eb81613794565b82525050565b6000602082019050613a0660008301846139e2565b92915050565b600060ff82169050919050565b613a2281613a0c565b82525050565b6000602082019050613a3d6000830184613a19565b92915050565b600060208284031215613a5957613a5861376f565b5b6000613a67848285016137f3565b91505092915050565b613a7981613848565b8114613a8457600080fd5b50565b600081359050613a9681613a70565b92915050565b60008060408385031215613ab357613ab261376f565b5b6000613ac1858286016137bd565b9250506020613ad285828601613a87565b9150509250929050565b60008060408385031215613af357613af261376f565b5b6000613b01858286016137f3565b9250506020613b12858286016137f3565b9150509250929050565b600060208284031215613b3257613b3161376f565b5b6000613b4084828501613a87565b91505092915050565b600063ffffffff82169050919050565b613b6281613b49565b8114613b6d57600080fd5b50565b600081359050613b7f81613b59565b92915050565b600060208284031215613b9b57613b9a61376f565b5b6000613ba984828501613b70565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613bf957607f821691505b60208210811415613c0d57613c0c613bb2565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613c6f6028836136bf565b9150613c7a82613c13565b604082019050919050565b60006020820190508181036000830152613c9e81613c62565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613cdb6020836136bf565b9150613ce682613ca5565b602082019050919050565b60006020820190508181036000830152613d0a81613cce565b9050919050565b7f43616c6c6572206973206e6f742061646d696e00000000000000000000000000600082015250565b6000613d476013836136bf565b9150613d5282613d11565b602082019050919050565b60006020820190508181036000830152613d7681613d3a565b9050919050565b7f6e756c6c20616464726573730000000000000000000000000000000000000000600082015250565b6000613db3600c836136bf565b9150613dbe82613d7d565b602082019050919050565b60006020820190508181036000830152613de281613da6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613e23826137d2565b9150613e2e836137d2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613e6357613e62613de9565b5b828201905092915050565b7f43616c6c6572206973206e6f742041646d696e00000000000000000000000000600082015250565b6000613ea46013836136bf565b9150613eaf82613e6e565b602082019050919050565b60006020820190508181036000830152613ed381613e97565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613f366039836136bf565b9150613f4182613eda565b604082019050919050565b60006020820190508181036000830152613f6581613f29565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613fc86025836136bf565b9150613fd382613f6c565b604082019050919050565b60006020820190508181036000830152613ff781613fbb565b9050919050565b60008151905061400d816137a6565b92915050565b6000602082840312156140295761402861376f565b5b600061403784828501613ffe565b91505092915050565b600060408201905061405560008301856139e2565b61406260208301846139e2565b9392505050565b6000819050919050565b600061408e61408961408484614069565b6138ab565b6137d2565b9050919050565b61409e81614073565b82525050565b600060c0820190506140b960008301896139e2565b6140c66020830188613925565b6140d36040830187614095565b6140e06060830186614095565b6140ed60808301856139e2565b6140fa60a0830184613925565b979650505050505050565b600081519050614114816137dc565b92915050565b6000806000606084860312156141335761413261376f565b5b600061414186828701614105565b935050602061415286828701614105565b925050604061416386828701614105565b9150509250925092565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006141c96026836136bf565b91506141d48261416d565b604082019050919050565b600060208201905081810360008301526141f8816141bc565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061425b6024836136bf565b9150614266826141ff565b604082019050919050565b6000602082019050818103600083015261428a8161424e565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006142ed6022836136bf565b91506142f882614291565b604082019050919050565b6000602082019050818103600083015261431c816142e0565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061437f6025836136bf565b915061438a82614323565b604082019050919050565b600060208201905081810360008301526143ae81614372565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006144116023836136bf565b915061441c826143b5565b604082019050919050565b6000602082019050818103600083015261444081614404565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006144a36029836136bf565b91506144ae82614447565b604082019050919050565b600060208201905081810360008301526144d281614496565b9050919050565b7f54726164696e67206973206e6f7420656e61626c6564207965742e0000000000600082015250565b600061450f601b836136bf565b915061451a826144d9565b602082019050919050565b6000602082019050818103600083015261453e81614502565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006145a16035836136bf565b91506145ac82614545565b604082019050919050565b600060208201905081810360008301526145d081614594565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061460d6013836136bf565b9150614618826145d7565b602082019050919050565b6000602082019050818103600083015261463c81614600565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061469f6036836136bf565b91506146aa82614643565b604082019050919050565b600060208201905081810360008301526146ce81614692565b9050919050565b60006146e0826137d2565b91506146eb836137d2565b9250828210156146fe576146fd613de9565b5b828203905092915050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006147656021836136bf565b915061477082614709565b604082019050919050565b6000602082019050818103600083015261479481614758565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b60006147f76022836136bf565b91506148028261479b565b604082019050919050565b60006020820190508181036000830152614826816147ea565b9050919050565b600081905092915050565b50565b600061484860008361482d565b915061485382614838565b600082019050919050565b60006148698261483b565b9150819050919050565b60006060820190506148886000830186613925565b6148956020830185613925565b6148a26040830184613854565b949350505050565b60006148b5826137d2565b91506148c0836137d2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156148f9576148f8613de9565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061493e826137d2565b9150614949836137d2565b92508261495957614958614904565b5b828204905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006149c06026836136bf565b91506149cb82614964565b604082019050919050565b600060208201905081810360008301526149ef816149b3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614a8981613794565b82525050565b6000614a9b8383614a80565b60208301905092915050565b6000602082019050919050565b6000614abf82614a54565b614ac98185614a5f565b9350614ad483614a70565b8060005b83811015614b05578151614aec8882614a8f565b9750614af783614aa7565b925050600181019050614ad8565b5085935050505092915050565b600060a082019050614b276000830188613925565b614b346020830187614095565b8181036040830152614b468186614ab4565b9050614b5560608301856139e2565b614b626080830184613925565b969550505050505056fea2646970667358221220f18d54d7300781a3b8bd3f11f17e83a8c2bd33fbb77b06ce97a4f5bdcc0b693f64736f6c634300080a0033

Deployed Bytecode Sourcemap

18452:11427: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;:::-;;;;;;;;23579:199;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19703:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29645:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19544:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5155:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19499:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7164:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20932:83;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19668:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19308:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23786:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29492:145;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19388:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5483:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1536:103;;;;;;;;;;;;;:::i;:::-;;21090:166;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21264:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18648:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20812:112;;;;;;;;;;;;;:::i;:::-;;885:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23920:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18750:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21561:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5043:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21809:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7462:475;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5839:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19947:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19348:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21669:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18919:64;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6102:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19462:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19039:63;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19428:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22341:1092;;;:::i;:::-;;22121:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4600:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29228: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;23579:199::-;1116:12;:10;:12::i;:::-;1105:23;;:7;:5;:7::i;:::-;:23;;;1097:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23715:10:::1;23703:9;;:22;;;;;;;;;;;;;;;;;;23754:16;23736:15;;:34;;;;;;;;;;;;;;;;;;23579:199:::0;;:::o;19703:53::-;19749:6;19703:53;:::o;29645:231::-;29735:5;;;;;;;;;;;29721:19;;:10;:19;;;29713:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;29808:1;29783:27;;:13;:27;;;;29775:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;29855:13;29838:14;;:30;;;;;;;;;;;;;;;;;;29645: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;20932:83::-;20982:25;20988:10;21000:6;20982:5;:25::i;:::-;20932:83;:::o;19668:28::-;;;;;;;;;;;;;:::o;19308:33::-;;;;;;;;;;;;;:::o;23786:126::-;23852:4;23876:19;:28;23896:7;23876:28;;;;;;;;;;;;;;;;;;;;;;;;;23869:35;;23786:126;;;:::o;29492:145::-;29573:5;;;;;;;;;;;29559:19;;:10;:19;;;29551:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;29621:8;29613:5;;:16;;;;;;;;;;;;;;;;;;29492:145;:::o;19388:31::-;;;;;;;;;;;;;:::o;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;21090:166::-;21142:4;1116:12;:10;:12::i;:::-;1105:23;;:7;:5;:7::i;:::-;:23;;;1097:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21176:5:::1;21159:14;;:22;;;;;;;;;;;;;;;;;;21203:1;21192:8;:12;;;;21225:1;21215:7;:11;;;;21244:4;21237:11;;21090:166:::0;:::o;21264:201::-;1116:12;:10;:12::i;:::-;1105:23;;:7;:5;:7::i;:::-;:23;;;1097:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21447:10:::1;21395:31;:49;21427:16;21395:49;;;;;;;;;;;;;;;;:62;;;;;;;;;;;;;;;;;;21264:201:::0;;:::o;18648:93::-;;;;;;;;;;;;;:::o;20812:112::-;1116:12;:10;:12::i;:::-;1105:23;;:7;:5;:7::i;:::-;:23;;;1097:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20883:4:::1;20867:13;;:20;;;;;;;;;;;;;;;;;;20912:4;20898:11;;:18;;;;;;;;;;;;;;;;;;20812:112::o:0;885:87::-;931:7;958:6;;;;;;;;;;;951:13;;885:87;:::o;23920:169::-;1116:12;:10;:12::i;:::-;1105:23;;:7;:5;:7::i;:::-;:23;;;1097:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24044:7:::1;24034;:17;;;;24073:8;24062;:19;;;;23920:169:::0;;:::o;18750:87::-;;;;;;;;;;;;;:::o;21561:100::-;1116:12;:10;:12::i;:::-;1105:23;;:7;:5;:7::i;:::-;:23;;;1097:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21646:7:::1;21632:11;;:21;;;;;;;;;;;;;;;;;;21561:100:::0;:::o;5043:104::-;5099:13;5132:7;5125:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5043:104;:::o;21809:304::-;1116:12;:10;:12::i;:::-;1105:23;;:7;:5;:7::i;:::-;:23;;;1097:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21955:13:::1;;;;;;;;;;;21947:21;;:4;:21;;;;21925:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;22064:41;22093:4;22099:5;22064:28;:41::i;:::-;21809: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;21669:132::-;1116:12;:10;:12::i;:::-;1105:23;;:7;:5;:7::i;:::-;:23;;;1097:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21785:8:::1;21754:19;:28;21774:7;21754:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;21669: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;22341:1092::-;1116:12;:10;:12::i;:::-;1105:23;;:7;:5;:7::i;:::-;:23;;;1097:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22470:35:::1;22541:42;22470:124;;22625:16;22607:15;;:34;;;;;;;;;;;;;;;;;;22652:58;22686:16;22705:4;22652:25;:58::i;:::-;22721:64;22738:4;22753:15;;;;;;;;;;;22771:13;:11;:13::i;:::-;22721:8;:64::i;:::-;22860:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22842:70;;;22921:4;22928:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22842:110;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22826:13;;:126;;;;;;;;;;;;;;;;;;22963:55;22997:13;;;;;;;;;;;23013:4;22963:25;:55::i;:::-;23029:58;23066:13;;;;;;;;;;;23082:4;23029:28;:58::i;:::-;23100:15;;;;;;;;;;;:31;;;23139:9;23172:4;23208:13;:11;:13::i;:::-;23256:1;23299::::0;23342:7:::1;:5;:7::i;:::-;23399:15;23100:325;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;22392:1041;22341:1092::o:0;22121:212::-;1116:12;:10;:12::i;:::-;1105:23;;:7;:5;:7::i;:::-;:23;;;1097:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22260:10:::1;22248:9;:22;;;;22304:21;22281:20;:44;;;;22121:212:::0;;:::o;4600:29::-;;;;;;;;;;;;;:::o;29228:256::-;29288:4;29305:13;29321:12;:10;:12::i;:::-;29305:28;;29344:42;29352:14;;;;;;;;;;;29368:17;29344:7;:42::i;:::-;;29418:14;;;;;;;;;;;29402:50;;29411:5;29402:50;;;29434:17;29402:50;;;;;;:::i;:::-;;;;;;;;29472:4;29465:11;;;29228: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;24097:3339::-;24245:1;24229:18;;:4;:18;;;;24221:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24322:1;24308:16;;:2;:16;;;;24300:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;24392:1;24383:6;:10;24375:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;24454:14;;;;;;;;;;;24450:1699;;;24515:7;:5;:7::i;:::-;24507:15;;:4;:15;;;;:49;;;;;24549:7;:5;:7::i;:::-;24543:13;;:2;:13;;;;24507:49;:86;;;;;24591:1;24577:16;;:2;:16;;;;24507:86;:128;;;;;24628:6;24614:21;;:2;:21;;;;24507:128;:158;;;;;24657:8;;;;;;;;;;;24656:9;24507:158;24485:1653;;;24705:13;;;;;;;;;;;24700:228;;24777:19;:25;24797:4;24777:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;24806:19;:23;24826:2;24806:23;;;;;;;;;;;;;;;;;;;;;;;;;24777:52;24743:165;;;;;;;;;;;;:::i;:::-;;;;;;;;;24700:228;25002:25;:31;25028:4;25002:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;25059:31;:35;25091:2;25059:35;;;;;;;;;;;;;;;;;;;;;;;;;25058:36;25002:92;24976:1147;;;25181:20;;25171:6;:30;;25137:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;25389:9;;25372:13;25382:2;25372:9;:13::i;:::-;25363:6;:22;;;;:::i;:::-;:35;;25329:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;24976:1147;;;25567:25;:29;25593:2;25567:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;25622:31;:37;25654:4;25622:37;;;;;;;;;;;;;;;;;;;;;;;;;25621:38;25567:92;25541:582;;;25746:20;;25736:6;:30;;25702:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;25541:582;;;25903:31;:35;25935:2;25903:35;;;;;;;;;;;;;;;;;;;;;;;;;25898:225;;26023:9;;26006:13;26016:2;26006:9;:13::i;:::-;25997:6;:22;;;;:::i;:::-;:35;;25963:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;25898:225;25541:582;24976:1147;24485:1653;24450:1699;26179:11;;;;;;;;;;;:55;;;;;26226:8;;;;;;;;;;;26225:9;26179:55;:123;;;;;26271:25;:31;26297:4;26271:31;;;;;;;;;;;;;;;;;;;;;;;;;26270:32;26179:123;:185;;;;;26339:19;:25;26359:4;26339:25;;;;;;;;;;;;;;;;;;;;;;;;;26338:26;26179:185;:245;;;;;26401:19;:23;26421:2;26401:23;;;;;;;;;;;;;;;;;;;;;;;;;26400:24;26179:245;26161:392;;;26481:4;26470:8;;:15;;;;;;;;;;;;;;;;;;26500:10;:8;:10::i;:::-;26536:5;26525:8;;:16;;;;;;;;;;;;;;;;;;26161:392;26565:12;26581:8;;;;;;;;;;;26580:9;26565:24;;26691:19;:25;26711:4;26691:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;26720:19;:23;26740:2;26720:23;;;;;;;;;;;;;;;;;;;;;;;;;26691:52;26687:100;;;26770:5;26760:15;;26687:100;26799:12;26904:7;26900:485;;;26956:25;:29;26982:2;26956:29;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;27000:1;26989:8;;:12;26956:45;26952:286;;;27029:29;27054:3;27029:20;27040:8;;27029:6;:10;;:20;;;;:::i;:::-;:24;;:29;;;;:::i;:::-;27022:36;;26952:286;;;27120:25;:31;27146:4;27120:31;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;27165:1;27155:7;;:11;27120:46;27116:122;;;27194:28;27218:3;27194:19;27205:7;;27194:6;:10;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;27187:35;;27116:122;26952:286;27265:1;27258:4;:8;27254:91;;;27287:42;27303:4;27317;27324;27287:15;:42::i;:::-;27254:91;27369:4;27359:14;;;;;:::i;:::-;;;26900:485;27395:33;27411:4;27417:2;27421:6;27395:15;:33::i;:::-;24210:3226;;24097: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;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;23441:130::-;23558:5;23524:25;:31;23550:4;23524:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;23441:130;;:::o;28037:905::-;28076:23;28102:24;28120:4;28102:9;:24::i;:::-;28076:50;;28137:12;28183:1;28164:15;:20;28160:59;;;28201:7;;;;28160:59;28252:18;;28233:15;:37;28229:706;;28287:26;28316:18;;28287:47;;28349:36;28366:18;28349:16;:36::i;:::-;28400:23;28426:21;28400:47;;28462:25;28490:81;28567:3;28490:54;28528:15;;28490;:37;;:54;;;;:::i;:::-;:76;;:81;;;;:::i;:::-;28462:109;;28586:19;28608:38;28628:17;28608:15;:19;;:38;;;;:::i;:::-;28586:60;;28683:15;;;;;;;;;;;28675:29;;28730:17;28675:91;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28661:105;;;;;28803:9;;;;;;;;;;;28795:23;;28826:11;28795:47;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28781:61;;;;;28862;28878:18;28898:15;28915:7;28862:61;;;;;;;;:::i;:::-;;;;;;;;28272:663;;;;28229:706;28065:877;;28037:905;:::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;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;27444:585::-;27570:21;27608:1;27594:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27570:40;;27639:4;27621;27626:1;27621:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;27665:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27655:4;27660:1;27655:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;27698:62;27715:4;27730:15;;;;;;;;;;;27748:11;27698:8;:62::i;:::-;27797:15;;;;;;;;;;;:66;;;27878:11;27904:1;27948:4;27975;27995:15;27797:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27499:530;27444:585;:::o;11985:98::-;12043:7;12074:1;12070;:5;;;;:::i;:::-;12063:12;;11985:98;;;;:::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:244::-;15699:34;15695:1;15687:6;15683:14;15676:58;15768:27;15763:2;15755:6;15751:15;15744:52;15559:244;:::o;15809:366::-;15951:3;15972:67;16036:2;16031:3;15972:67;:::i;:::-;15965:74;;16048:93;16137:3;16048:93;:::i;:::-;16166:2;16161:3;16157:12;16150:19;;15809:366;;;:::o;16181:419::-;16347:4;16385:2;16374:9;16370:18;16362:26;;16434:9;16428:4;16424:20;16420:1;16409:9;16405:17;16398:47;16462:131;16588:4;16462:131;:::i;:::-;16454:139;;16181:419;;;:::o;16606:224::-;16746:34;16742:1;16734:6;16730:14;16723:58;16815:7;16810:2;16802:6;16798:15;16791:32;16606:224;:::o;16836:366::-;16978:3;16999:67;17063:2;17058:3;16999:67;:::i;:::-;16992:74;;17075:93;17164:3;17075:93;:::i;:::-;17193:2;17188:3;17184:12;17177:19;;16836:366;;;:::o;17208:419::-;17374:4;17412:2;17401:9;17397:18;17389:26;;17461:9;17455:4;17451:20;17447:1;17436:9;17432:17;17425:47;17489:131;17615:4;17489:131;:::i;:::-;17481:139;;17208:419;;;:::o;17633:143::-;17690:5;17721:6;17715:13;17706:22;;17737:33;17764:5;17737:33;:::i;:::-;17633:143;;;;:::o;17782:351::-;17852:6;17901:2;17889:9;17880:7;17876:23;17872:32;17869:119;;;17907:79;;:::i;:::-;17869:119;18027:1;18052:64;18108:7;18099:6;18088:9;18084:22;18052:64;:::i;:::-;18042:74;;17998:128;17782:351;;;;:::o;18139:332::-;18260:4;18298:2;18287:9;18283:18;18275:26;;18311:71;18379:1;18368:9;18364:17;18355:6;18311:71;:::i;:::-;18392:72;18460:2;18449:9;18445:18;18436:6;18392:72;:::i;:::-;18139:332;;;;;:::o;18477:85::-;18522:7;18551:5;18540:16;;18477:85;;;:::o;18568:158::-;18626:9;18659:61;18677:42;18686:32;18712:5;18686:32;:::i;:::-;18677:42;:::i;:::-;18659:61;:::i;:::-;18646:74;;18568:158;;;:::o;18732:147::-;18827:45;18866:5;18827:45;:::i;:::-;18822:3;18815:58;18732:147;;:::o;18885:807::-;19134:4;19172:3;19161:9;19157:19;19149:27;;19186:71;19254:1;19243:9;19239:17;19230:6;19186:71;:::i;:::-;19267:72;19335:2;19324:9;19320:18;19311:6;19267:72;:::i;:::-;19349:80;19425:2;19414:9;19410:18;19401:6;19349:80;:::i;:::-;19439;19515:2;19504:9;19500:18;19491:6;19439:80;:::i;:::-;19529:73;19597:3;19586:9;19582:19;19573:6;19529:73;:::i;:::-;19612;19680:3;19669:9;19665:19;19656:6;19612:73;:::i;:::-;18885:807;;;;;;;;;:::o;19698:143::-;19755:5;19786:6;19780:13;19771:22;;19802:33;19829:5;19802:33;:::i;:::-;19698:143;;;;:::o;19847:663::-;19935:6;19943;19951;20000:2;19988:9;19979:7;19975:23;19971:32;19968:119;;;20006:79;;:::i;:::-;19968:119;20126:1;20151:64;20207:7;20198:6;20187:9;20183:22;20151:64;:::i;:::-;20141:74;;20097:128;20264:2;20290:64;20346:7;20337:6;20326:9;20322:22;20290:64;:::i;:::-;20280:74;;20235:129;20403:2;20429:64;20485:7;20476:6;20465:9;20461:22;20429:64;:::i;:::-;20419:74;;20374:129;19847:663;;;;;:::o;20516:225::-;20656:34;20652:1;20644:6;20640:14;20633:58;20725:8;20720:2;20712:6;20708:15;20701:33;20516:225;:::o;20747:366::-;20889:3;20910:67;20974:2;20969:3;20910:67;:::i;:::-;20903:74;;20986:93;21075:3;20986:93;:::i;:::-;21104:2;21099:3;21095:12;21088:19;;20747:366;;;:::o;21119:419::-;21285:4;21323:2;21312:9;21308:18;21300:26;;21372:9;21366:4;21362:20;21358:1;21347:9;21343:17;21336:47;21400:131;21526:4;21400:131;:::i;:::-;21392:139;;21119:419;;;:::o;21544:223::-;21684:34;21680:1;21672:6;21668:14;21661:58;21753:6;21748:2;21740:6;21736:15;21729:31;21544:223;:::o;21773:366::-;21915:3;21936:67;22000:2;21995:3;21936:67;:::i;:::-;21929:74;;22012:93;22101:3;22012:93;:::i;:::-;22130:2;22125:3;22121:12;22114:19;;21773:366;;;:::o;22145:419::-;22311:4;22349:2;22338:9;22334:18;22326:26;;22398:9;22392:4;22388:20;22384:1;22373:9;22369:17;22362:47;22426:131;22552:4;22426:131;:::i;:::-;22418:139;;22145:419;;;:::o;22570:221::-;22710:34;22706:1;22698:6;22694:14;22687:58;22779:4;22774:2;22766:6;22762:15;22755:29;22570:221;:::o;22797:366::-;22939:3;22960:67;23024:2;23019:3;22960:67;:::i;:::-;22953:74;;23036:93;23125:3;23036:93;:::i;:::-;23154:2;23149:3;23145:12;23138:19;;22797:366;;;:::o;23169:419::-;23335:4;23373:2;23362:9;23358:18;23350:26;;23422:9;23416:4;23412:20;23408:1;23397:9;23393:17;23386:47;23450:131;23576:4;23450:131;:::i;:::-;23442:139;;23169:419;;;:::o;23594:224::-;23734:34;23730:1;23722:6;23718:14;23711:58;23803:7;23798:2;23790:6;23786:15;23779:32;23594:224;:::o;23824:366::-;23966:3;23987:67;24051:2;24046:3;23987:67;:::i;:::-;23980:74;;24063:93;24152:3;24063:93;:::i;:::-;24181:2;24176:3;24172:12;24165:19;;23824:366;;;:::o;24196:419::-;24362:4;24400:2;24389:9;24385:18;24377:26;;24449:9;24443:4;24439:20;24435:1;24424:9;24420:17;24413:47;24477:131;24603:4;24477:131;:::i;:::-;24469:139;;24196:419;;;:::o;24621:222::-;24761:34;24757:1;24749:6;24745:14;24738:58;24830:5;24825:2;24817:6;24813:15;24806:30;24621:222;:::o;24849:366::-;24991:3;25012:67;25076:2;25071:3;25012:67;:::i;:::-;25005:74;;25088:93;25177:3;25088:93;:::i;:::-;25206:2;25201:3;25197:12;25190:19;;24849:366;;;:::o;25221:419::-;25387:4;25425:2;25414:9;25410:18;25402:26;;25474:9;25468:4;25464:20;25460:1;25449:9;25445:17;25438:47;25502:131;25628:4;25502:131;:::i;:::-;25494:139;;25221:419;;;:::o;25646:228::-;25786:34;25782:1;25774:6;25770:14;25763:58;25855:11;25850:2;25842:6;25838:15;25831:36;25646:228;:::o;25880:366::-;26022:3;26043:67;26107:2;26102:3;26043:67;:::i;:::-;26036:74;;26119:93;26208:3;26119:93;:::i;:::-;26237:2;26232:3;26228:12;26221:19;;25880:366;;;:::o;26252:419::-;26418:4;26456:2;26445:9;26441:18;26433:26;;26505:9;26499:4;26495:20;26491:1;26480:9;26476:17;26469:47;26533:131;26659:4;26533:131;:::i;:::-;26525:139;;26252:419;;;:::o;26677:177::-;26817:29;26813:1;26805:6;26801:14;26794:53;26677:177;:::o;26860:366::-;27002:3;27023:67;27087:2;27082:3;27023:67;:::i;:::-;27016:74;;27099:93;27188:3;27099:93;:::i;:::-;27217:2;27212:3;27208:12;27201:19;;26860:366;;;:::o;27232:419::-;27398:4;27436:2;27425:9;27421:18;27413:26;;27485:9;27479:4;27475:20;27471:1;27460:9;27456:17;27449:47;27513:131;27639:4;27513:131;:::i;:::-;27505:139;;27232:419;;;:::o;27657:240::-;27797:34;27793:1;27785:6;27781:14;27774:58;27866:23;27861:2;27853:6;27849:15;27842:48;27657:240;:::o;27903:366::-;28045:3;28066:67;28130:2;28125:3;28066:67;:::i;:::-;28059:74;;28142:93;28231:3;28142:93;:::i;:::-;28260:2;28255:3;28251:12;28244:19;;27903:366;;;:::o;28275:419::-;28441:4;28479:2;28468:9;28464:18;28456:26;;28528:9;28522:4;28518:20;28514:1;28503:9;28499:17;28492:47;28556:131;28682:4;28556:131;:::i;:::-;28548:139;;28275:419;;;:::o;28700:169::-;28840:21;28836:1;28828:6;28824:14;28817:45;28700:169;:::o;28875:366::-;29017:3;29038:67;29102:2;29097:3;29038:67;:::i;:::-;29031:74;;29114:93;29203:3;29114:93;:::i;:::-;29232:2;29227:3;29223:12;29216:19;;28875:366;;;:::o;29247:419::-;29413:4;29451:2;29440:9;29436:18;29428:26;;29500:9;29494:4;29490:20;29486:1;29475:9;29471:17;29464:47;29528:131;29654:4;29528:131;:::i;:::-;29520:139;;29247:419;;;:::o;29672:241::-;29812:34;29808:1;29800:6;29796:14;29789:58;29881:24;29876:2;29868:6;29864:15;29857:49;29672:241;:::o;29919:366::-;30061:3;30082:67;30146:2;30141:3;30082:67;:::i;:::-;30075:74;;30158:93;30247:3;30158:93;:::i;:::-;30276:2;30271:3;30267:12;30260:19;;29919:366;;;:::o;30291:419::-;30457:4;30495:2;30484:9;30480:18;30472:26;;30544:9;30538:4;30534:20;30530:1;30519:9;30515:17;30508:47;30572:131;30698:4;30572:131;:::i;:::-;30564:139;;30291:419;;;:::o;30716:191::-;30756:4;30776:20;30794:1;30776:20;:::i;:::-;30771:25;;30810:20;30828:1;30810:20;:::i;:::-;30805:25;;30849:1;30846;30843:8;30840:34;;;30854:18;;:::i;:::-;30840:34;30899:1;30896;30892:9;30884:17;;30716:191;;;;:::o;30913:220::-;31053:34;31049:1;31041:6;31037:14;31030:58;31122:3;31117:2;31109:6;31105:15;31098:28;30913:220;:::o;31139:366::-;31281:3;31302:67;31366:2;31361:3;31302:67;:::i;:::-;31295:74;;31378:93;31467:3;31378:93;:::i;:::-;31496:2;31491:3;31487:12;31480:19;;31139:366;;;:::o;31511:419::-;31677:4;31715:2;31704:9;31700:18;31692:26;;31764:9;31758:4;31754:20;31750:1;31739:9;31735:17;31728:47;31792:131;31918:4;31792:131;:::i;:::-;31784:139;;31511:419;;;:::o;31936:221::-;32076:34;32072:1;32064:6;32060:14;32053:58;32145:4;32140:2;32132:6;32128:15;32121:29;31936:221;:::o;32163:366::-;32305:3;32326:67;32390:2;32385:3;32326:67;:::i;:::-;32319:74;;32402:93;32491:3;32402:93;:::i;:::-;32520:2;32515:3;32511:12;32504:19;;32163:366;;;:::o;32535:419::-;32701:4;32739:2;32728:9;32724:18;32716:26;;32788:9;32782:4;32778:20;32774:1;32763:9;32759:17;32752:47;32816:131;32942:4;32816:131;:::i;:::-;32808:139;;32535:419;;;:::o;32960:147::-;33061:11;33098:3;33083:18;;32960:147;;;;:::o;33113:114::-;;:::o;33233:398::-;33392:3;33413:83;33494:1;33489:3;33413:83;:::i;:::-;33406:90;;33505:93;33594:3;33505:93;:::i;:::-;33623:1;33618:3;33614:11;33607:18;;33233:398;;;:::o;33637:379::-;33821:3;33843:147;33986:3;33843:147;:::i;:::-;33836:154;;34007:3;34000:10;;33637:379;;;:::o;34022:430::-;34165:4;34203:2;34192:9;34188:18;34180:26;;34216:71;34284:1;34273:9;34269:17;34260:6;34216:71;:::i;:::-;34297:72;34365:2;34354:9;34350:18;34341:6;34297:72;:::i;:::-;34379:66;34441:2;34430:9;34426:18;34417:6;34379:66;:::i;:::-;34022:430;;;;;;:::o;34458:348::-;34498:7;34521:20;34539:1;34521:20;:::i;:::-;34516:25;;34555:20;34573:1;34555:20;:::i;:::-;34550:25;;34743:1;34675:66;34671:74;34668:1;34665:81;34660:1;34653:9;34646:17;34642:105;34639:131;;;34750:18;;:::i;:::-;34639:131;34798:1;34795;34791:9;34780:20;;34458:348;;;;:::o;34812:180::-;34860:77;34857:1;34850:88;34957:4;34954:1;34947:15;34981:4;34978:1;34971:15;34998:185;35038:1;35055:20;35073:1;35055:20;:::i;:::-;35050:25;;35089:20;35107:1;35089:20;:::i;:::-;35084:25;;35128:1;35118:35;;35133:18;;:::i;:::-;35118:35;35175:1;35172;35168:9;35163:14;;34998:185;;;;:::o;35189:225::-;35329:34;35325:1;35317:6;35313:14;35306:58;35398:8;35393:2;35385:6;35381:15;35374:33;35189:225;:::o;35420:366::-;35562:3;35583:67;35647:2;35642:3;35583:67;:::i;:::-;35576:74;;35659:93;35748:3;35659:93;:::i;:::-;35777:2;35772:3;35768:12;35761:19;;35420:366;;;:::o;35792:419::-;35958:4;35996:2;35985:9;35981:18;35973:26;;36045:9;36039:4;36035:20;36031:1;36020:9;36016:17;36009:47;36073:131;36199:4;36073:131;:::i;:::-;36065:139;;35792:419;;;:::o;36217:180::-;36265:77;36262:1;36255:88;36362:4;36359:1;36352:15;36386:4;36383:1;36376:15;36403:180;36451:77;36448:1;36441:88;36548:4;36545:1;36538:15;36572:4;36569:1;36562:15;36589:114;36656:6;36690:5;36684:12;36674:22;;36589:114;;;:::o;36709:184::-;36808:11;36842:6;36837:3;36830:19;36882:4;36877:3;36873:14;36858:29;;36709:184;;;;:::o;36899:132::-;36966:4;36989:3;36981:11;;37019:4;37014:3;37010:14;37002:22;;36899:132;;;:::o;37037:108::-;37114:24;37132:5;37114:24;:::i;:::-;37109:3;37102:37;37037:108;;:::o;37151:179::-;37220:10;37241:46;37283:3;37275:6;37241:46;:::i;:::-;37319:4;37314:3;37310:14;37296:28;;37151:179;;;;:::o;37336:113::-;37406:4;37438;37433:3;37429:14;37421:22;;37336:113;;;:::o;37485:732::-;37604:3;37633:54;37681:5;37633:54;:::i;:::-;37703:86;37782:6;37777:3;37703:86;:::i;:::-;37696:93;;37813:56;37863:5;37813:56;:::i;:::-;37892:7;37923:1;37908:284;37933:6;37930:1;37927:13;37908:284;;;38009:6;38003:13;38036:63;38095:3;38080:13;38036:63;:::i;:::-;38029:70;;38122:60;38175:6;38122:60;:::i;:::-;38112:70;;37968:224;37955:1;37952;37948:9;37943:14;;37908:284;;;37912:14;38208:3;38201:10;;37609:608;;;37485:732;;;;:::o;38223:831::-;38486:4;38524:3;38513:9;38509:19;38501:27;;38538:71;38606:1;38595:9;38591:17;38582:6;38538:71;:::i;:::-;38619:80;38695:2;38684:9;38680:18;38671:6;38619:80;:::i;:::-;38746:9;38740:4;38736:20;38731:2;38720:9;38716:18;38709:48;38774:108;38877:4;38868:6;38774:108;:::i;:::-;38766:116;;38892:72;38960:2;38949:9;38945:18;38936:6;38892:72;:::i;:::-;38974:73;39042:3;39031:9;39027:19;39018:6;38974:73;:::i;:::-;38223:831;;;;;;;;:::o

Swarm Source

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