ETH Price: $3,362.95 (+0.24%)
Gas: 7 Gwei

Token

B: $43,599.88 (B: $43,599.88)
 

Overview

Max Total Supply

1,000,000,000 B: $43,599.88

Holders

87

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
3,663,294.435907491045865399 B: $43,599.88

Value
$0.00
0x2ca28aecef7b1d1aa2b3152196fc48d868ffc2c8
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:
BTCPriceToken

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-12-05
*/

/**
// TG: https://t.me/Bitcoinpriceportal

*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;
pragma experimental ABIEncoderV2;

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

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

abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

interface IERC20 {
    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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

////// lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol
// OpenZeppelin Contracts v4.4.0 (token/ERC20/extensions/IERC20Metadata.sol)

/* pragma solidity ^0.8.0; */

/* import "../IERC20.sol"; */

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() 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;

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    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);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    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);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

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

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

    function WETH() external pure returns (address);

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

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

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

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

    bool private swapping;

    address public marketingWallet;
    address public devWallet;

    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    uint256 public percentForLPBurn = 25; // 25 = .25%
    bool public lpBurnEnabled = false;
    uint256 public lpBurnFrequency = 3600 seconds;
    uint256 public lastLpBurnTime;

    uint256 public manualBurnFrequency = 30 minutes;
    uint256 public lastManualLpBurnTime;

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

    // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = true;

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

    uint256 public sellTotalFees;
    uint256 public sellDevFee;

    uint256 public tokensForDev;

    address private USDC;

    /******************/

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

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping(address => bool) public automatedMarketMakerPairs;

    event UpdateUniswapV2Router(
        address indexed newAddress,
        address indexed oldAddress
    );

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    bytes16 private constant HEX_DIGITS = "0123456789abcdef";

    constructor(
        address _usdcAddress,
        address _routerAddress
    ) ERC20(unicode"", unicode"") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            _routerAddress
        );

        USDC = _usdcAddress;
        address weth = _uniswapV2Router.WETH();

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

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), weth);
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        uint256 _buyDevFee = 25;
        uint256 _sellDevFee = 30;

        uint256 totalSupply = 1_000_000_000 * 1e18;

        maxTransactionAmount = 20_000_000 * 1e18;
        maxWallet = 20_000_000 * 1e18; //
        swapTokensAtAmount = (totalSupply * 5) / 10000;

        buyDevFee = _buyDevFee;
        buyTotalFees = buyDevFee;

        sellDevFee = _sellDevFee;
        sellTotalFees = sellDevFee;

        marketingWallet = address(msg.sender); // set as marketing wallet
        devWallet = address(msg.sender); // set as dev wallet

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

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

        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    function toString(uint256 value) internal pure returns (string memory) {
        unchecked {
            uint256 length = log10(value) + 1;
            string memory buffer = new string(length);
            uint256 ptr;
            /// @solidity memory-safe-assembly
            assembly {
                ptr := add(buffer, add(32, length))
            }
            while (true) {
                ptr--;
                /// @solidity memory-safe-assembly
                assembly {
                    mstore8(ptr, byte(mod(value, 10), HEX_DIGITS))
                }
                value /= 10;
                if (value == 0) break;
            }
            return buffer;
        }
    }

    function log10(uint256 value) internal pure returns (uint256) {
        uint256 result = 0;
        unchecked {
            if (value >= 10 ** 64) {
                value /= 10 ** 64;
                result += 64;
            }
            if (value >= 10 ** 32) {
                value /= 10 ** 32;
                result += 32;
            }
            if (value >= 10 ** 16) {
                value /= 10 ** 16;
                result += 16;
            }
            if (value >= 10 ** 8) {
                value /= 10 ** 8;
                result += 8;
            }
            if (value >= 10 ** 4) {
                value /= 10 ** 4;
                result += 4;
            }
            if (value >= 10 ** 2) {
                value /= 10 ** 2;
                result += 2;
            }
            if (value >= 10 ** 1) {
                result += 1;
            }
        }
        return result;
    }

    function formatNumberWithCommas(
        string memory number
    ) internal pure returns (string memory) {
        // This function assumes `number` is a valid representation of a positive integer
        bytes memory numberBytes = bytes(number);
        uint len = numberBytes.length;

        // Calculate the length of the new string
        uint commas = (len - 1) / 3;
        bytes memory formatted = new bytes(len + commas);

        uint j = 1; // Counter for the new string
        for (uint i = 0; i < len; ++i) {
            // Copy the character from the original number
            formatted[len + commas - j] = numberBytes[len - i - 1];
            // Insert a comma every three characters, except at the end
            if (i % 3 == 2 && i != len - 1) {
                j++; // Skip the position for the comma
                formatted[len + commas - j] = bytes1(",");
                j++; // Increment for the next number character
            } else {
                j++; // Increment for the next number character
            }
        }

        return string(formatted);
    }

    function formatNumberWithCommasAndDecimals(
        string memory number
    ) internal pure returns (string memory) {
        bytes memory numberBytes = bytes(number);
        uint len = numberBytes.length;

        // Separate the last two digits
        string memory decimals = new string(2);
        bytes memory decimalsBytes = bytes(decimals);

        // Boundary check: Ensure there's enough length for the decimal part
        if (len > 2) {
            decimalsBytes[0] = numberBytes[len - 2];
            decimalsBytes[1] = numberBytes[len - 1];

            // Create a new string for the whole number part without the last two digits
            string memory wholeNumberPart = new string(len - 2);
            bytes memory wholeNumberBytes = bytes(wholeNumberPart);

            for (uint i = 0; i < len - 2; i++) {
                wholeNumberBytes[i] = numberBytes[i];
            }

            // Format the whole number part with commas
            wholeNumberPart = formatNumberWithCommas(string(wholeNumberBytes));

            // Concatenate the whole number part with the decimal part
            return string(abi.encodePacked(wholeNumberPart, ".", decimals));
        } else {
            // If the length is less or equal to 2, we don't have a whole number part
            // We assume the number is already in the format "0.xx" or "x.xx"
            return string(abi.encodePacked("0.", number));
        }
    }

    function getBtcPriceInWeth() public view returns (uint256) {
        address btcAddress = 0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599;

        address wethAddress = uniswapV2Router.WETH();
        address btcLpPair = IUniswapV2Factory(uniswapV2Router.factory())
            .getPair(btcAddress, wethAddress);
        
        (uint256 reserve0, uint256 reserve1, ) = IUniswapV2Pair(btcLpPair)
            .getReserves();
        //reserve 0 - btc, reserve 1 - eth

        uint256 priceBtcInEth = reserve1.div(reserve0);

        return priceBtcInEth.div(1e8);
    }

    function symbol() public view override returns (string memory) {
        uint256 usdcDecimals = IERC20Metadata(USDC).decimals();

        address wethAddress = uniswapV2Router.WETH();
        address ethLpPair = IUniswapV2Factory(uniswapV2Router.factory())
            .getPair(USDC, wethAddress);

        (uint256 reserve0, uint256 reserve1, ) = IUniswapV2Pair(ethLpPair)
            .getReserves();

        (uint256 reserveETH, uint256 reserveUSDC) = wethAddress < USDC
            ? (reserve0, reserve1)
            : (reserve1, reserve0);

        uint256 ethPrice = reserveUSDC.div(10 ** (usdcDecimals)).div(
            reserveETH.div(1e18)
        );

        uint256 btcPrice = getBtcPriceInWeth();

        string memory startString = "B: $";

        return
            string.concat(
                startString,
                formatNumberWithCommasAndDecimals(toString(ethPrice * btcPrice))
            );
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateMarketingWallet(
        address newMarketingWallet
    ) external onlyOwner {
        marketingWallet = newMarketingWallet;
    }

    function updateDevWallet(address newWallet) external onlyOwner {
        devWallet = newWallet;
    }

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

    event BoughtEarly(address indexed sniper);

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

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

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

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

                //when buy
                if (
                    automatedMarketMakerPairs[from] &&
                    !_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"
                    );
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

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

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

            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));
        uint256 totalTokensToSwap = tokensForDev;
        bool success;

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

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

        uint256 amountToSwapForETH = contractBalance;

        swapTokensForEth(amountToSwapForETH);

        tokensForDev = 0;

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


    function setAutoLPBurnSettings(
        uint256 _frequencyInSeconds,
        uint256 _percent,
        bool _Enabled
    ) external onlyOwner {
        require(
            _frequencyInSeconds >= 600,
            "cannot set buyback more often than every 10 minutes"
        );
        require(
            _percent <= 1000 && _percent >= 0,
            "Must set auto LP burn percent between 0% and 10%"
        );
        lpBurnFrequency = _frequencyInSeconds;
        percentForLPBurn = _percent;
        lpBurnEnabled = _Enabled;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_usdcAddress","type":"address"},{"internalType":"address","name":"_routerAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBtcPriceInWeth","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBurnFrequency","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":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_frequencyInSeconds","type":"uint256"},{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"bool","name":"_Enabled","type":"bool"}],"name":"setAutoLPBurnSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526019600b556000600c60006101000a81548160ff021916908315150217905550610e10600d55610708600f556001601160006101000a81548160ff0219169083151502179055506000601160016101000a81548160ff0219169083151502179055506000601160026101000a81548160ff0219169083151502179055506001601360006101000a81548160ff021916908315150217905550348015620000a957600080fd5b5060405162006e2738038062006e278339818101604052810190620000cf919062000baa565b604051806020016040528060008152506040518060200160405280600081525081600390805190602001906200010792919062000a90565b5080600490805190602001906200012092919062000a90565b50505062000143620001376200055160201b60201c565b6200055960201b60201c565b600081905082601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001d7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001fd919062000bf1565b9050620002128260016200061f60201b60201c565b8173ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000292573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b8919062000bf1565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630836040518363ffffffff1660e01b8152600401620002f492919062000c34565b6020604051808303816000875af115801562000314573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033a919062000bf1565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200038260a05160016200061f60201b60201c565b6200039760a05160016200070960201b60201c565b6000601990506000601e905060006b033b2e3c9fd0803ce800000090506a108b2a2c280290940000006008819055506a108b2a2c28029094000000600a81905550612710600582620003ea919062000c9a565b620003f6919062000d2a565b600981905550826017819055506017546014819055508160198190555060195460188190555033600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620004c0620004b2620007aa60201b60201c565b6001620007d460201b60201c565b620004d3306001620007d460201b60201c565b620004e861dead6001620007d460201b60201c565b6200050a620004fc620007aa60201b60201c565b60016200061f60201b60201c565b6200051d3060016200061f60201b60201c565b6200053261dead60016200061f60201b60201c565b6200054433826200090e60201b60201c565b5050505050505062000f80565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200062f6200055160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000655620007aa60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620006ae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006a59062000dc3565b60405180910390fd5b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620007e46200055160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200080a620007aa60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000863576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200085a9062000dc3565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000902919062000e02565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000980576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009779062000e6f565b60405180910390fd5b620009946000838362000a8660201b60201c565b8060026000828254620009a8919062000e91565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620009ff919062000e91565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a66919062000eff565b60405180910390a362000a826000838362000a8b60201b60201c565b5050565b505050565b505050565b82805462000a9e9062000f4b565b90600052602060002090601f01602090048101928262000ac2576000855562000b0e565b82601f1062000add57805160ff191683800117855562000b0e565b8280016001018555821562000b0e579182015b8281111562000b0d57825182559160200191906001019062000af0565b5b50905062000b1d919062000b21565b5090565b5b8082111562000b3c57600081600090555060010162000b22565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000b728262000b45565b9050919050565b62000b848162000b65565b811462000b9057600080fd5b50565b60008151905062000ba48162000b79565b92915050565b6000806040838503121562000bc45762000bc362000b40565b5b600062000bd48582860162000b93565b925050602062000be78582860162000b93565b9150509250929050565b60006020828403121562000c0a5762000c0962000b40565b5b600062000c1a8482850162000b93565b91505092915050565b62000c2e8162000b65565b82525050565b600060408201905062000c4b600083018562000c23565b62000c5a602083018462000c23565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000ca78262000c61565b915062000cb48362000c61565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000cf05762000cef62000c6b565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000d378262000c61565b915062000d448362000c61565b92508262000d575762000d5662000cfb565b5b828204905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000dab60208362000d62565b915062000db88262000d73565b602082019050919050565b6000602082019050818103600083015262000dde8162000d9c565b9050919050565b60008115159050919050565b62000dfc8162000de5565b82525050565b600060208201905062000e19600083018462000df1565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000e57601f8362000d62565b915062000e648262000e1f565b602082019050919050565b6000602082019050818103600083015262000e8a8162000e48565b9050919050565b600062000e9e8262000c61565b915062000eab8362000c61565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000ee35762000ee262000c6b565b5b828201905092915050565b62000ef98162000c61565b82525050565b600060208201905062000f16600083018462000eee565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000f6457607f821691505b60208210810362000f7a5762000f7962000f1c565b5b50919050565b60805160a051615e4262000fe5600039600081816111f90152611d82015260008181610e2401528181611967015281816119fa015281816122a10152818161233401528181612e9f015281816143690152818161444a01526144710152615e426000f3fe6080604052600436106103855760003560e01c80638da5cb5b116101d1578063bbc0c74211610102578063d85ba063116100a0578063eba4c3331161006f578063eba4c33314610d2d578063f11a24d314610d56578063f2fde38b14610d81578063f8b45b0514610daa5761038c565b8063d85ba06314610c6f578063dd62ed3e14610c9a578063e2f4560514610cd7578063e884f26014610d025761038c565b8063c876d0b9116100dc578063c876d0b914610bb1578063c8c8ebe414610bdc578063c9f7f7e614610c07578063d257b34f14610c325761038c565b8063bbc0c74214610b34578063c024666814610b5f578063c18bc19514610b885761038c565b80639fccce321161016f578063a4c82a0011610149578063a4c82a0014610a66578063a9059cbb14610a91578063aacebbe314610ace578063b62496f514610af75761038c565b80639fccce32146109d3578063a0d82dc5146109fe578063a457c2d714610a295761038c565b806395d89b41116101ab57806395d89b41146109295780639a7a23d6146109545780639c3b4fdc1461097d5780639ec22c0e146109a85761038c565b80638da5cb5b146108aa5780638ea5220f146108d5578063924de9b7146109005761038c565b806339509351116102b6578063715018a6116102545780637571336a116102235780637571336a1461081457806375f0a8741461083d5780637bce5a04146108685780638a8c523c146108935761038c565b8063715018a61461078057806371fc468814610797578063730c1888146107c0578063751039fc146107e95761038c565b80634fbee193116102905780634fbee193146106b05780636a486a8e146106ed5780636ddd17131461071857806370a08231146107435761038c565b8063395093511461061d57806349bd5a5e1461065a5780634a62bb65146106855761038c565b8063199ffc721161032357806327c8f835116102fd57806327c8f835146105715780632c3e486c1461059c5780632e82f1a0146105c7578063313ce567146105f25761038c565b8063199ffc72146104e0578063203e727e1461050b57806323b872dd146105345761038c565b80631694505e1161035f5780631694505e1461043657806318160ddd146104615780631816467f1461048c578063184c16c5146104b55761038c565b806306fdde0314610391578063095ea7b3146103bc57806310d5de53146103f95761038c565b3661038c57005b600080fd5b34801561039d57600080fd5b506103a6610dd5565b6040516103b391906145a0565b60405180910390f35b3480156103c857600080fd5b506103e360048036038101906103de919061465b565b610de4565b6040516103f091906146b6565b60405180910390f35b34801561040557600080fd5b50610420600480360381019061041b91906146d1565b610e02565b60405161042d91906146b6565b60405180910390f35b34801561044257600080fd5b5061044b610e22565b604051610458919061475d565b60405180910390f35b34801561046d57600080fd5b50610476610e46565b6040516104839190614787565b60405180910390f35b34801561049857600080fd5b506104b360048036038101906104ae91906146d1565b610e50565b005b3480156104c157600080fd5b506104ca610f10565b6040516104d79190614787565b60405180910390f35b3480156104ec57600080fd5b506104f5610f16565b6040516105029190614787565b60405180910390f35b34801561051757600080fd5b50610532600480360381019061052d91906147a2565b610f1c565b005b34801561054057600080fd5b5061055b600480360381019061055691906147cf565b61102b565b60405161056891906146b6565b60405180910390f35b34801561057d57600080fd5b50610586611123565b6040516105939190614831565b60405180910390f35b3480156105a857600080fd5b506105b1611129565b6040516105be9190614787565b60405180910390f35b3480156105d357600080fd5b506105dc61112f565b6040516105e991906146b6565b60405180910390f35b3480156105fe57600080fd5b50610607611142565b6040516106149190614868565b60405180910390f35b34801561062957600080fd5b50610644600480360381019061063f919061465b565b61114b565b60405161065191906146b6565b60405180910390f35b34801561066657600080fd5b5061066f6111f7565b60405161067c9190614831565b60405180910390f35b34801561069157600080fd5b5061069a61121b565b6040516106a791906146b6565b60405180910390f35b3480156106bc57600080fd5b506106d760048036038101906106d291906146d1565b61122e565b6040516106e491906146b6565b60405180910390f35b3480156106f957600080fd5b50610702611284565b60405161070f9190614787565b60405180910390f35b34801561072457600080fd5b5061072d61128a565b60405161073a91906146b6565b60405180910390f35b34801561074f57600080fd5b5061076a600480360381019061076591906146d1565b61129d565b6040516107779190614787565b60405180910390f35b34801561078c57600080fd5b506107956112e5565b005b3480156107a357600080fd5b506107be60048036038101906107b991906147a2565b61136d565b005b3480156107cc57600080fd5b506107e760048036038101906107e291906148af565b611442565b005b3480156107f557600080fd5b506107fe611582565b60405161080b91906146b6565b60405180910390f35b34801561082057600080fd5b5061083b60048036038101906108369190614902565b611622565b005b34801561084957600080fd5b506108526116f9565b60405161085f9190614831565b60405180910390f35b34801561087457600080fd5b5061087d61171f565b60405161088a9190614787565b60405180910390f35b34801561089f57600080fd5b506108a8611725565b005b3480156108b657600080fd5b506108bf6117e0565b6040516108cc9190614831565b60405180910390f35b3480156108e157600080fd5b506108ea61180a565b6040516108f79190614831565b60405180910390f35b34801561090c57600080fd5b5061092760048036038101906109229190614942565b611830565b005b34801561093557600080fd5b5061093e6118c9565b60405161094b91906145a0565b60405180910390f35b34801561096057600080fd5b5061097b60048036038101906109769190614902565b611d04565b005b34801561098957600080fd5b50610992611e1c565b60405161099f9190614787565b60405180910390f35b3480156109b457600080fd5b506109bd611e22565b6040516109ca9190614787565b60405180910390f35b3480156109df57600080fd5b506109e8611e28565b6040516109f59190614787565b60405180910390f35b348015610a0a57600080fd5b50610a13611e2e565b604051610a209190614787565b60405180910390f35b348015610a3557600080fd5b50610a506004803603810190610a4b919061465b565b611e34565b604051610a5d91906146b6565b60405180910390f35b348015610a7257600080fd5b50610a7b611f1f565b604051610a889190614787565b60405180910390f35b348015610a9d57600080fd5b50610ab86004803603810190610ab3919061465b565b611f25565b604051610ac591906146b6565b60405180910390f35b348015610ada57600080fd5b50610af56004803603810190610af091906146d1565b611f43565b005b348015610b0357600080fd5b50610b1e6004803603810190610b1991906146d1565b612003565b604051610b2b91906146b6565b60405180910390f35b348015610b4057600080fd5b50610b49612023565b604051610b5691906146b6565b60405180910390f35b348015610b6b57600080fd5b50610b866004803603810190610b819190614902565b612036565b005b348015610b9457600080fd5b50610baf6004803603810190610baa91906147a2565b61215b565b005b348015610bbd57600080fd5b50610bc661226a565b604051610bd391906146b6565b60405180910390f35b348015610be857600080fd5b50610bf161227d565b604051610bfe9190614787565b60405180910390f35b348015610c1357600080fd5b50610c1c612283565b604051610c299190614787565b60405180910390f35b348015610c3e57600080fd5b50610c596004803603810190610c5491906147a2565b61250e565b604051610c6691906146b6565b60405180910390f35b348015610c7b57600080fd5b50610c84612663565b604051610c919190614787565b60405180910390f35b348015610ca657600080fd5b50610cc16004803603810190610cbc919061496f565b612669565b604051610cce9190614787565b60405180910390f35b348015610ce357600080fd5b50610cec6126f0565b604051610cf99190614787565b60405180910390f35b348015610d0e57600080fd5b50610d176126f6565b604051610d2491906146b6565b60405180910390f35b348015610d3957600080fd5b50610d546004803603810190610d4f91906147a2565b612796565b005b348015610d6257600080fd5b50610d6b61286b565b604051610d789190614787565b60405180910390f35b348015610d8d57600080fd5b50610da86004803603810190610da391906146d1565b612871565b005b348015610db657600080fd5b50610dbf612968565b604051610dcc9190614787565b60405180910390f35b6060610ddf6118c9565b905090565b6000610df8610df161296e565b8484612976565b6001905092915050565b601d6020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610e5861296e565b73ffffffffffffffffffffffffffffffffffffffff16610e766117e0565b73ffffffffffffffffffffffffffffffffffffffff1614610ecc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec3906149fb565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b600b5481565b610f2461296e565b73ffffffffffffffffffffffffffffffffffffffff16610f426117e0565b73ffffffffffffffffffffffffffffffffffffffff1614610f98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8f906149fb565b60405180910390fd5b670de0b6b3a76400006103e86001610fae610e46565b610fb89190614a4a565b610fc29190614ad3565b610fcc9190614ad3565b81101561100e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100590614b76565b60405180910390fd5b670de0b6b3a7640000816110229190614a4a565b60088190555050565b6000611038848484612b3f565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061108361296e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611103576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fa90614c08565b60405180910390fd5b6111178561110f61296e565b858403612976565b60019150509392505050565b61dead81565b600d5481565b600c60009054906101000a900460ff1681565b60006012905090565b60006111ed61115861296e565b84846001600061116661296e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111e89190614c28565b612976565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601160009054906101000a900460ff1681565b6000601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60185481565b601160029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112ed61296e565b73ffffffffffffffffffffffffffffffffffffffff1661130b6117e0565b73ffffffffffffffffffffffffffffffffffffffff1614611361576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611358906149fb565b60405180910390fd5b61136b60006136d6565b565b61137561296e565b73ffffffffffffffffffffffffffffffffffffffff166113936117e0565b73ffffffffffffffffffffffffffffffffffffffff16146113e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e0906149fb565b60405180910390fd5b806017819055506017546014819055506063601454111561143f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143690614cca565b60405180910390fd5b50565b61144a61296e565b73ffffffffffffffffffffffffffffffffffffffff166114686117e0565b73ffffffffffffffffffffffffffffffffffffffff16146114be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b5906149fb565b60405180910390fd5b610258831015611503576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fa90614d5c565b60405180910390fd5b6103e88211158015611516575060008210155b611555576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154c90614dee565b60405180910390fd5b82600d8190555081600b8190555080600c60006101000a81548160ff021916908315150217905550505050565b600061158c61296e565b73ffffffffffffffffffffffffffffffffffffffff166115aa6117e0565b73ffffffffffffffffffffffffffffffffffffffff1614611600576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f7906149fb565b60405180910390fd5b6000601160006101000a81548160ff0219169083151502179055506001905090565b61162a61296e565b73ffffffffffffffffffffffffffffffffffffffff166116486117e0565b73ffffffffffffffffffffffffffffffffffffffff161461169e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611695906149fb565b60405180910390fd5b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b61172d61296e565b73ffffffffffffffffffffffffffffffffffffffff1661174b6117e0565b73ffffffffffffffffffffffffffffffffffffffff16146117a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611798906149fb565b60405180910390fd5b6001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff02191690831515021790555042600e81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61183861296e565b73ffffffffffffffffffffffffffffffffffffffff166118566117e0565b73ffffffffffffffffffffffffffffffffffffffff16146118ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a3906149fb565b60405180910390fd5b80601160026101000a81548160ff02191690831515021790555050565b60606000601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561193a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061195e9190614e3a565b60ff16905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119f49190614e7c565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a879190614e7c565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401611ae3929190614ea9565b602060405180830381865afa158015611b00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b249190614e7c565b90506000808273ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611b74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b989190614f54565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff169150600080601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1610611c1c578284611c1f565b83835b915091506000611c70611c43670de0b6b3a76400008561379c90919063ffffffff16565b611c628a600a611c5391906150da565b8561379c90919063ffffffff16565b61379c90919063ffffffff16565b90506000611c7c612283565b905060006040518060400160405280600481526020017f423a202400000000000000000000000000000000000000000000000000000000815250905080611cd5611cd08486611ccb9190614a4a565b6137b2565b613880565b604051602001611ce6929190615161565b6040516020818303038152906040529a505050505050505050505090565b611d0c61296e565b73ffffffffffffffffffffffffffffffffffffffff16611d2a6117e0565b73ffffffffffffffffffffffffffffffffffffffff1614611d80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d77906149fb565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e05906151f7565b60405180910390fd5b611e188282613b1a565b5050565b60175481565b60105481565b601a5481565b60195481565b60008060016000611e4361296e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611f00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef790615289565b60405180910390fd5b611f14611f0b61296e565b85858403612976565b600191505092915050565b600e5481565b6000611f39611f3261296e565b8484612b3f565b6001905092915050565b611f4b61296e565b73ffffffffffffffffffffffffffffffffffffffff16611f696117e0565b73ffffffffffffffffffffffffffffffffffffffff1614611fbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb6906149fb565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601e6020528060005260406000206000915054906101000a900460ff1681565b601160019054906101000a900460ff1681565b61203e61296e565b73ffffffffffffffffffffffffffffffffffffffff1661205c6117e0565b73ffffffffffffffffffffffffffffffffffffffff16146120b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a9906149fb565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161214f91906146b6565b60405180910390a25050565b61216361296e565b73ffffffffffffffffffffffffffffffffffffffff166121816117e0565b73ffffffffffffffffffffffffffffffffffffffff16146121d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ce906149fb565b60405180910390fd5b670de0b6b3a76400006103e860056121ed610e46565b6121f79190614a4a565b6122019190614ad3565b61220b9190614ad3565b81101561224d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122449061531b565b60405180910390fd5b670de0b6b3a7640000816122619190614a4a565b600a8190555050565b601360009054906101000a900460ff1681565b60085481565b600080732260fac5e5542a773aa44fbcfedf7c193bc2c599905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561230a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061232e9190614e7c565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561239d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123c19190614e7c565b73ffffffffffffffffffffffffffffffffffffffff1663e6a4390584846040518363ffffffff1660e01b81526004016123fb929190614ea9565b602060405180830381865afa158015612418573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061243c9190614e7c565b90506000808273ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa15801561248c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124b09190614f54565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff16915060006124ea838361379c90919063ffffffff16565b90506125036305f5e1008261379c90919063ffffffff16565b965050505050505090565b600061251861296e565b73ffffffffffffffffffffffffffffffffffffffff166125366117e0565b73ffffffffffffffffffffffffffffffffffffffff161461258c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612583906149fb565b60405180910390fd5b620186a0600161259a610e46565b6125a49190614a4a565b6125ae9190614ad3565b8210156125f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e7906153ad565b60405180910390fd5b6103e860056125fd610e46565b6126079190614a4a565b6126119190614ad3565b821115612653576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264a9061543f565b60405180910390fd5b8160098190555060019050919050565b60145481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b600061270061296e565b73ffffffffffffffffffffffffffffffffffffffff1661271e6117e0565b73ffffffffffffffffffffffffffffffffffffffff1614612774576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276b906149fb565b60405180910390fd5b6000601360006101000a81548160ff0219169083151502179055506001905090565b61279e61296e565b73ffffffffffffffffffffffffffffffffffffffff166127bc6117e0565b73ffffffffffffffffffffffffffffffffffffffff1614612812576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612809906149fb565b60405180910390fd5b8060198190555060195460188190555060636018541115612868576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285f90614cca565b60405180910390fd5b50565b60165481565b61287961296e565b73ffffffffffffffffffffffffffffffffffffffff166128976117e0565b73ffffffffffffffffffffffffffffffffffffffff16146128ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e4906149fb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361295c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612953906154d1565b60405180910390fd5b612965816136d6565b50565b600a5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036129e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129dc90615563565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4b906155f5565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612b329190614787565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612bae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ba590615687565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612c1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c1490615719565b60405180910390fd5b60008103612c3657612c3183836000613bbb565b6136d1565b601160009054906101000a900460ff16156132f957612c536117e0565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612cc15750612c916117e0565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612cfa5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d34575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d4d5750600560149054906101000a900460ff16155b156132f857601160019054906101000a900460ff16612e4757601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612e075750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612e46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3d90615785565b60405180910390fd5b5b601360009054906101000a900460ff168015612e965750612e666117e0565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612eee57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612f445750601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561300f5743601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612fca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fc19061583d565b60405180910390fd5b43601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130b25750601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613159576008548111156130fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130f3906158cf565b60405180910390fd5b600a546131088361129d565b826131139190614c28565b1115613154576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161314b9061593b565b60405180910390fd5b6132f7565b601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131fc5750601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561324b57600854811115613246576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161323d906159cd565b60405180910390fd5b6132f6565b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166132f557600a546132a88361129d565b826132b39190614c28565b11156132f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132eb9061593b565b60405180910390fd5b5b5b5b5b5b60006133043061129d565b9050600060095482101590508080156133295750601160029054906101000a900460ff165b80156133425750600560149054906101000a900460ff16155b80156133985750601e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133ee5750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156134445750601c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613488576001600560146101000a81548160ff02191690831515021790555061346c613e3a565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061353e5750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561354857600090505b600081156136c157601e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156135ab57506000601854115b156135f8576135d860646135ca60185488613f3e90919063ffffffff16565b61379c90919063ffffffff16565b905080601a60008282546135ec9190614c28565b9250508190555061369d565b601e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561365357506000601454115b1561369c57613680606461367260145488613f3e90919063ffffffff16565b61379c90919063ffffffff16565b905080601a60008282546136949190614c28565b925050819055505b5b60008111156136b2576136b1873083613bbb565b5b80856136be91906159ed565b94505b6136cc878787613bbb565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081836137aa9190614ad3565b905092915050565b6060600060016137c184613f54565b01905060008167ffffffffffffffff8111156137e0576137df615a21565b5b6040519080825280601f01601f1916602001820160405280156138125781602001600182028036833780820191505090505b509050600082602001820190505b600115613875578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161386957613868614aa4565b5b04945060008503613820575b819350505050919050565b606060008290506000815190506000600267ffffffffffffffff8111156138aa576138a9615a21565b5b6040519080825280601f01601f1916602001820160405280156138dc5781602001600182028036833780820191505090505b50905060008190506002831115613aee57836002846138fb91906159ed565b8151811061390c5761390b615a50565b5b602001015160f81c60f81b8160008151811061392b5761392a615a50565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508360018461396891906159ed565b8151811061397957613978615a50565b5b602001015160f81c60f81b8160018151811061399857613997615a50565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006002846139d691906159ed565b67ffffffffffffffff8111156139ef576139ee615a21565b5b6040519080825280601f01601f191660200182016040528015613a215781602001600182028036833780820191505090505b509050600081905060005b600286613a3991906159ed565b811015613ab357868181518110613a5357613a52615a50565b5b602001015160f81c60f81b828281518110613a7157613a70615a50565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080613aab90615a7f565b915050613a2c565b50613abd816140a7565b91508184604051602001613ad2929190615b13565b6040516020818303038152906040529650505050505050613b15565b85604051602001613aff9190615b8e565b6040516020818303038152906040529450505050505b919050565b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613c2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c2190615687565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613c99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c9090615719565b60405180910390fd5b613ca48383836142c0565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613d2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d2190615c22565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613dbd9190614c28565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613e219190614787565b60405180910390a3613e348484846142c5565b50505050565b6000613e453061129d565b90506000601a549050600080831480613e5e5750600082145b15613e6b57505050613f3c565b6014600954613e7a9190614a4a565b831115613e93576014600954613e909190614a4a565b92505b6000839050613ea1816142ca565b6000601a81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613eef90615c73565b60006040518083038185875af1925050503d8060008114613f2c576040519150601f19603f3d011682016040523d82523d6000602084013e613f31565b606091505b505080925050505050505b565b60008183613f4c9190614a4a565b905092915050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310613fb2577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381613fa857613fa7614aa4565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310613fef576d04ee2d6d415b85acef81000000008381613fe557613fe4614aa4565b5b0492506020810190505b662386f26fc10000831061401e57662386f26fc10000838161401457614013614aa4565b5b0492506010810190505b6305f5e1008310614047576305f5e100838161403d5761403c614aa4565b5b0492506008810190505b612710831061406c57612710838161406257614061614aa4565b5b0492506004810190505b6064831061408f576064838161408557614084614aa4565b5b0492506002810190505b600a831061409e576001810190505b80915050919050565b60606000829050600081519050600060036001836140c591906159ed565b6140cf9190614ad3565b9050600081836140df9190614c28565b67ffffffffffffffff8111156140f8576140f7615a21565b5b6040519080825280601f01601f19166020018201604052801561412a5781602001600182028036833780820191505090505b50905060006001905060005b848110156142b257856001828761414d91906159ed565b61415791906159ed565b8151811061416857614167615a50565b5b602001015160f81c60f81b838386886141819190614c28565b61418b91906159ed565b8151811061419c5761419b615a50565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060026003826141da9190615c88565b1480156141f357506001856141ef91906159ed565b8114155b1561429257818061420390615a7f565b9250507f2c00000000000000000000000000000000000000000000000000000000000000838386886142359190614c28565b61423f91906159ed565b815181106142505761424f615a50565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350818061428a90615a7f565b9250506142a1565b818061429d90615a7f565b9250505b806142ab90615a7f565b9050614136565b508195505050505050919050565b505050565b505050565b6000600267ffffffffffffffff8111156142e7576142e6615a21565b5b6040519080825280602002602001820160405280156143155781602001602082028036833780820191505090505b509050308160008151811061432d5761432c615a50565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156143d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143f69190614e7c565b8160018151811061440a57614409615a50565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061446f307f000000000000000000000000000000000000000000000000000000000000000084612976565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016144d1959493929190615db2565b600060405180830381600087803b1580156144eb57600080fd5b505af11580156144ff573d6000803e3d6000fd5b505050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614541578082015181840152602081019050614526565b83811115614550576000848401525b50505050565b6000601f19601f8301169050919050565b600061457282614507565b61457c8185614512565b935061458c818560208601614523565b61459581614556565b840191505092915050565b600060208201905081810360008301526145ba8184614567565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006145f2826145c7565b9050919050565b614602816145e7565b811461460d57600080fd5b50565b60008135905061461f816145f9565b92915050565b6000819050919050565b61463881614625565b811461464357600080fd5b50565b6000813590506146558161462f565b92915050565b60008060408385031215614672576146716145c2565b5b600061468085828601614610565b925050602061469185828601614646565b9150509250929050565b60008115159050919050565b6146b08161469b565b82525050565b60006020820190506146cb60008301846146a7565b92915050565b6000602082840312156146e7576146e66145c2565b5b60006146f584828501614610565b91505092915050565b6000819050919050565b600061472361471e614719846145c7565b6146fe565b6145c7565b9050919050565b600061473582614708565b9050919050565b60006147478261472a565b9050919050565b6147578161473c565b82525050565b6000602082019050614772600083018461474e565b92915050565b61478181614625565b82525050565b600060208201905061479c6000830184614778565b92915050565b6000602082840312156147b8576147b76145c2565b5b60006147c684828501614646565b91505092915050565b6000806000606084860312156147e8576147e76145c2565b5b60006147f686828701614610565b935050602061480786828701614610565b925050604061481886828701614646565b9150509250925092565b61482b816145e7565b82525050565b60006020820190506148466000830184614822565b92915050565b600060ff82169050919050565b6148628161484c565b82525050565b600060208201905061487d6000830184614859565b92915050565b61488c8161469b565b811461489757600080fd5b50565b6000813590506148a981614883565b92915050565b6000806000606084860312156148c8576148c76145c2565b5b60006148d686828701614646565b93505060206148e786828701614646565b92505060406148f88682870161489a565b9150509250925092565b60008060408385031215614919576149186145c2565b5b600061492785828601614610565b92505060206149388582860161489a565b9150509250929050565b600060208284031215614958576149576145c2565b5b60006149668482850161489a565b91505092915050565b60008060408385031215614986576149856145c2565b5b600061499485828601614610565b92505060206149a585828601614610565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006149e5602083614512565b91506149f0826149af565b602082019050919050565b60006020820190508181036000830152614a14816149d8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614a5582614625565b9150614a6083614625565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614a9957614a98614a1b565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614ade82614625565b9150614ae983614625565b925082614af957614af8614aa4565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614b60602f83614512565b9150614b6b82614b04565b604082019050919050565b60006020820190508181036000830152614b8f81614b53565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614bf2602883614512565b9150614bfd82614b96565b604082019050919050565b60006020820190508181036000830152614c2181614be5565b9050919050565b6000614c3382614625565b9150614c3e83614625565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614c7357614c72614a1b565b5b828201905092915050565b7f4d757374206b656570206665657320617420393925206f72206c657373000000600082015250565b6000614cb4601d83614512565b9150614cbf82614c7e565b602082019050919050565b60006020820190508181036000830152614ce381614ca7565b9050919050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b6000614d46603383614512565b9150614d5182614cea565b604082019050919050565b60006020820190508181036000830152614d7581614d39565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b6000614dd8603083614512565b9150614de382614d7c565b604082019050919050565b60006020820190508181036000830152614e0781614dcb565b9050919050565b614e178161484c565b8114614e2257600080fd5b50565b600081519050614e3481614e0e565b92915050565b600060208284031215614e5057614e4f6145c2565b5b6000614e5e84828501614e25565b91505092915050565b600081519050614e76816145f9565b92915050565b600060208284031215614e9257614e916145c2565b5b6000614ea084828501614e67565b91505092915050565b6000604082019050614ebe6000830185614822565b614ecb6020830184614822565b9392505050565b60006dffffffffffffffffffffffffffff82169050919050565b614ef581614ed2565b8114614f0057600080fd5b50565b600081519050614f1281614eec565b92915050565b600063ffffffff82169050919050565b614f3181614f18565b8114614f3c57600080fd5b50565b600081519050614f4e81614f28565b92915050565b600080600060608486031215614f6d57614f6c6145c2565b5b6000614f7b86828701614f03565b9350506020614f8c86828701614f03565b9250506040614f9d86828701614f3f565b9150509250925092565b60008160011c9050919050565b6000808291508390505b6001851115614ffe57808604811115614fda57614fd9614a1b565b5b6001851615614fe95780820291505b8081029050614ff785614fa7565b9450614fbe565b94509492505050565b60008261501757600190506150d3565b8161502557600090506150d3565b816001811461503b576002811461504557615074565b60019150506150d3565b60ff84111561505757615056614a1b565b5b8360020a91508482111561506e5761506d614a1b565b5b506150d3565b5060208310610133831016604e8410600b84101617156150a95782820a9050838111156150a4576150a3614a1b565b5b6150d3565b6150b68484846001614fb4565b925090508184048111156150cd576150cc614a1b565b5b81810290505b9392505050565b60006150e582614625565b91506150f083614625565b925061511d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484615007565b905092915050565b600081905092915050565b600061513b82614507565b6151458185615125565b9350615155818560208601614523565b80840191505092915050565b600061516d8285615130565b91506151798284615130565b91508190509392505050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006151e1603983614512565b91506151ec82615185565b604082019050919050565b60006020820190508181036000830152615210816151d4565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000615273602583614512565b915061527e82615217565b604082019050919050565b600060208201905081810360008301526152a281615266565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000615305602483614512565b9150615310826152a9565b604082019050919050565b60006020820190508181036000830152615334816152f8565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000615397603583614512565b91506153a28261533b565b604082019050919050565b600060208201905081810360008301526153c68161538a565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000615429603483614512565b9150615434826153cd565b604082019050919050565b600060208201905081810360008301526154588161541c565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006154bb602683614512565b91506154c68261545f565b604082019050919050565b600060208201905081810360008301526154ea816154ae565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061554d602483614512565b9150615558826154f1565b604082019050919050565b6000602082019050818103600083015261557c81615540565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006155df602283614512565b91506155ea82615583565b604082019050919050565b6000602082019050818103600083015261560e816155d2565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615671602583614512565b915061567c82615615565b604082019050919050565b600060208201905081810360008301526156a081615664565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000615703602383614512565b915061570e826156a7565b604082019050919050565b60006020820190508181036000830152615732816156f6565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061576f601683614512565b915061577a82615739565b602082019050919050565b6000602082019050818103600083015261579e81615762565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000615827604983614512565b9150615832826157a5565b606082019050919050565b600060208201905081810360008301526158568161581a565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006158b9603583614512565b91506158c48261585d565b604082019050919050565b600060208201905081810360008301526158e8816158ac565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000615925601383614512565b9150615930826158ef565b602082019050919050565b6000602082019050818103600083015261595481615918565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006159b7603683614512565b91506159c28261595b565b604082019050919050565b600060208201905081810360008301526159e6816159aa565b9050919050565b60006159f882614625565b9150615a0383614625565b925082821015615a1657615a15614a1b565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000615a8a82614625565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615abc57615abb614a1b565b5b600182019050919050565b7f2e00000000000000000000000000000000000000000000000000000000000000600082015250565b6000615afd600183615125565b9150615b0882615ac7565b600182019050919050565b6000615b1f8285615130565b9150615b2a82615af0565b9150615b368284615130565b91508190509392505050565b7f302e000000000000000000000000000000000000000000000000000000000000600082015250565b6000615b78600283615125565b9150615b8382615b42565b600282019050919050565b6000615b9982615b6b565b9150615ba58284615130565b915081905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000615c0c602683614512565b9150615c1782615bb0565b604082019050919050565b60006020820190508181036000830152615c3b81615bff565b9050919050565b600081905092915050565b50565b6000615c5d600083615c42565b9150615c6882615c4d565b600082019050919050565b6000615c7e82615c50565b9150819050919050565b6000615c9382614625565b9150615c9e83614625565b925082615cae57615cad614aa4565b5b828206905092915050565b6000819050919050565b6000615cde615cd9615cd484615cb9565b6146fe565b614625565b9050919050565b615cee81615cc3565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615d29816145e7565b82525050565b6000615d3b8383615d20565b60208301905092915050565b6000602082019050919050565b6000615d5f82615cf4565b615d698185615cff565b9350615d7483615d10565b8060005b83811015615da5578151615d8c8882615d2f565b9750615d9783615d47565b925050600181019050615d78565b5085935050505092915050565b600060a082019050615dc76000830188614778565b615dd46020830187615ce5565b8181036040830152615de68186615d54565b9050615df56060830185614822565b615e026080830184614778565b969550505050505056fea2646970667358221220537f80f49ef209c65cf86f45d3b0e8bd107a4416685d57f8fdbf566ca2b5c95264736f6c634300080d0033000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d

Deployed Bytecode

0x6080604052600436106103855760003560e01c80638da5cb5b116101d1578063bbc0c74211610102578063d85ba063116100a0578063eba4c3331161006f578063eba4c33314610d2d578063f11a24d314610d56578063f2fde38b14610d81578063f8b45b0514610daa5761038c565b8063d85ba06314610c6f578063dd62ed3e14610c9a578063e2f4560514610cd7578063e884f26014610d025761038c565b8063c876d0b9116100dc578063c876d0b914610bb1578063c8c8ebe414610bdc578063c9f7f7e614610c07578063d257b34f14610c325761038c565b8063bbc0c74214610b34578063c024666814610b5f578063c18bc19514610b885761038c565b80639fccce321161016f578063a4c82a0011610149578063a4c82a0014610a66578063a9059cbb14610a91578063aacebbe314610ace578063b62496f514610af75761038c565b80639fccce32146109d3578063a0d82dc5146109fe578063a457c2d714610a295761038c565b806395d89b41116101ab57806395d89b41146109295780639a7a23d6146109545780639c3b4fdc1461097d5780639ec22c0e146109a85761038c565b80638da5cb5b146108aa5780638ea5220f146108d5578063924de9b7146109005761038c565b806339509351116102b6578063715018a6116102545780637571336a116102235780637571336a1461081457806375f0a8741461083d5780637bce5a04146108685780638a8c523c146108935761038c565b8063715018a61461078057806371fc468814610797578063730c1888146107c0578063751039fc146107e95761038c565b80634fbee193116102905780634fbee193146106b05780636a486a8e146106ed5780636ddd17131461071857806370a08231146107435761038c565b8063395093511461061d57806349bd5a5e1461065a5780634a62bb65146106855761038c565b8063199ffc721161032357806327c8f835116102fd57806327c8f835146105715780632c3e486c1461059c5780632e82f1a0146105c7578063313ce567146105f25761038c565b8063199ffc72146104e0578063203e727e1461050b57806323b872dd146105345761038c565b80631694505e1161035f5780631694505e1461043657806318160ddd146104615780631816467f1461048c578063184c16c5146104b55761038c565b806306fdde0314610391578063095ea7b3146103bc57806310d5de53146103f95761038c565b3661038c57005b600080fd5b34801561039d57600080fd5b506103a6610dd5565b6040516103b391906145a0565b60405180910390f35b3480156103c857600080fd5b506103e360048036038101906103de919061465b565b610de4565b6040516103f091906146b6565b60405180910390f35b34801561040557600080fd5b50610420600480360381019061041b91906146d1565b610e02565b60405161042d91906146b6565b60405180910390f35b34801561044257600080fd5b5061044b610e22565b604051610458919061475d565b60405180910390f35b34801561046d57600080fd5b50610476610e46565b6040516104839190614787565b60405180910390f35b34801561049857600080fd5b506104b360048036038101906104ae91906146d1565b610e50565b005b3480156104c157600080fd5b506104ca610f10565b6040516104d79190614787565b60405180910390f35b3480156104ec57600080fd5b506104f5610f16565b6040516105029190614787565b60405180910390f35b34801561051757600080fd5b50610532600480360381019061052d91906147a2565b610f1c565b005b34801561054057600080fd5b5061055b600480360381019061055691906147cf565b61102b565b60405161056891906146b6565b60405180910390f35b34801561057d57600080fd5b50610586611123565b6040516105939190614831565b60405180910390f35b3480156105a857600080fd5b506105b1611129565b6040516105be9190614787565b60405180910390f35b3480156105d357600080fd5b506105dc61112f565b6040516105e991906146b6565b60405180910390f35b3480156105fe57600080fd5b50610607611142565b6040516106149190614868565b60405180910390f35b34801561062957600080fd5b50610644600480360381019061063f919061465b565b61114b565b60405161065191906146b6565b60405180910390f35b34801561066657600080fd5b5061066f6111f7565b60405161067c9190614831565b60405180910390f35b34801561069157600080fd5b5061069a61121b565b6040516106a791906146b6565b60405180910390f35b3480156106bc57600080fd5b506106d760048036038101906106d291906146d1565b61122e565b6040516106e491906146b6565b60405180910390f35b3480156106f957600080fd5b50610702611284565b60405161070f9190614787565b60405180910390f35b34801561072457600080fd5b5061072d61128a565b60405161073a91906146b6565b60405180910390f35b34801561074f57600080fd5b5061076a600480360381019061076591906146d1565b61129d565b6040516107779190614787565b60405180910390f35b34801561078c57600080fd5b506107956112e5565b005b3480156107a357600080fd5b506107be60048036038101906107b991906147a2565b61136d565b005b3480156107cc57600080fd5b506107e760048036038101906107e291906148af565b611442565b005b3480156107f557600080fd5b506107fe611582565b60405161080b91906146b6565b60405180910390f35b34801561082057600080fd5b5061083b60048036038101906108369190614902565b611622565b005b34801561084957600080fd5b506108526116f9565b60405161085f9190614831565b60405180910390f35b34801561087457600080fd5b5061087d61171f565b60405161088a9190614787565b60405180910390f35b34801561089f57600080fd5b506108a8611725565b005b3480156108b657600080fd5b506108bf6117e0565b6040516108cc9190614831565b60405180910390f35b3480156108e157600080fd5b506108ea61180a565b6040516108f79190614831565b60405180910390f35b34801561090c57600080fd5b5061092760048036038101906109229190614942565b611830565b005b34801561093557600080fd5b5061093e6118c9565b60405161094b91906145a0565b60405180910390f35b34801561096057600080fd5b5061097b60048036038101906109769190614902565b611d04565b005b34801561098957600080fd5b50610992611e1c565b60405161099f9190614787565b60405180910390f35b3480156109b457600080fd5b506109bd611e22565b6040516109ca9190614787565b60405180910390f35b3480156109df57600080fd5b506109e8611e28565b6040516109f59190614787565b60405180910390f35b348015610a0a57600080fd5b50610a13611e2e565b604051610a209190614787565b60405180910390f35b348015610a3557600080fd5b50610a506004803603810190610a4b919061465b565b611e34565b604051610a5d91906146b6565b60405180910390f35b348015610a7257600080fd5b50610a7b611f1f565b604051610a889190614787565b60405180910390f35b348015610a9d57600080fd5b50610ab86004803603810190610ab3919061465b565b611f25565b604051610ac591906146b6565b60405180910390f35b348015610ada57600080fd5b50610af56004803603810190610af091906146d1565b611f43565b005b348015610b0357600080fd5b50610b1e6004803603810190610b1991906146d1565b612003565b604051610b2b91906146b6565b60405180910390f35b348015610b4057600080fd5b50610b49612023565b604051610b5691906146b6565b60405180910390f35b348015610b6b57600080fd5b50610b866004803603810190610b819190614902565b612036565b005b348015610b9457600080fd5b50610baf6004803603810190610baa91906147a2565b61215b565b005b348015610bbd57600080fd5b50610bc661226a565b604051610bd391906146b6565b60405180910390f35b348015610be857600080fd5b50610bf161227d565b604051610bfe9190614787565b60405180910390f35b348015610c1357600080fd5b50610c1c612283565b604051610c299190614787565b60405180910390f35b348015610c3e57600080fd5b50610c596004803603810190610c5491906147a2565b61250e565b604051610c6691906146b6565b60405180910390f35b348015610c7b57600080fd5b50610c84612663565b604051610c919190614787565b60405180910390f35b348015610ca657600080fd5b50610cc16004803603810190610cbc919061496f565b612669565b604051610cce9190614787565b60405180910390f35b348015610ce357600080fd5b50610cec6126f0565b604051610cf99190614787565b60405180910390f35b348015610d0e57600080fd5b50610d176126f6565b604051610d2491906146b6565b60405180910390f35b348015610d3957600080fd5b50610d546004803603810190610d4f91906147a2565b612796565b005b348015610d6257600080fd5b50610d6b61286b565b604051610d789190614787565b60405180910390f35b348015610d8d57600080fd5b50610da86004803603810190610da391906146d1565b612871565b005b348015610db657600080fd5b50610dbf612968565b604051610dcc9190614787565b60405180910390f35b6060610ddf6118c9565b905090565b6000610df8610df161296e565b8484612976565b6001905092915050565b601d6020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610e5861296e565b73ffffffffffffffffffffffffffffffffffffffff16610e766117e0565b73ffffffffffffffffffffffffffffffffffffffff1614610ecc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec3906149fb565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b600b5481565b610f2461296e565b73ffffffffffffffffffffffffffffffffffffffff16610f426117e0565b73ffffffffffffffffffffffffffffffffffffffff1614610f98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8f906149fb565b60405180910390fd5b670de0b6b3a76400006103e86001610fae610e46565b610fb89190614a4a565b610fc29190614ad3565b610fcc9190614ad3565b81101561100e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100590614b76565b60405180910390fd5b670de0b6b3a7640000816110229190614a4a565b60088190555050565b6000611038848484612b3f565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061108361296e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611103576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fa90614c08565b60405180910390fd5b6111178561110f61296e565b858403612976565b60019150509392505050565b61dead81565b600d5481565b600c60009054906101000a900460ff1681565b60006012905090565b60006111ed61115861296e565b84846001600061116661296e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111e89190614c28565b612976565b6001905092915050565b7f0000000000000000000000005763caf9ef1358ff1049dee07e901e381fb8576681565b601160009054906101000a900460ff1681565b6000601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60185481565b601160029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112ed61296e565b73ffffffffffffffffffffffffffffffffffffffff1661130b6117e0565b73ffffffffffffffffffffffffffffffffffffffff1614611361576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611358906149fb565b60405180910390fd5b61136b60006136d6565b565b61137561296e565b73ffffffffffffffffffffffffffffffffffffffff166113936117e0565b73ffffffffffffffffffffffffffffffffffffffff16146113e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e0906149fb565b60405180910390fd5b806017819055506017546014819055506063601454111561143f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143690614cca565b60405180910390fd5b50565b61144a61296e565b73ffffffffffffffffffffffffffffffffffffffff166114686117e0565b73ffffffffffffffffffffffffffffffffffffffff16146114be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b5906149fb565b60405180910390fd5b610258831015611503576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fa90614d5c565b60405180910390fd5b6103e88211158015611516575060008210155b611555576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154c90614dee565b60405180910390fd5b82600d8190555081600b8190555080600c60006101000a81548160ff021916908315150217905550505050565b600061158c61296e565b73ffffffffffffffffffffffffffffffffffffffff166115aa6117e0565b73ffffffffffffffffffffffffffffffffffffffff1614611600576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f7906149fb565b60405180910390fd5b6000601160006101000a81548160ff0219169083151502179055506001905090565b61162a61296e565b73ffffffffffffffffffffffffffffffffffffffff166116486117e0565b73ffffffffffffffffffffffffffffffffffffffff161461169e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611695906149fb565b60405180910390fd5b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b61172d61296e565b73ffffffffffffffffffffffffffffffffffffffff1661174b6117e0565b73ffffffffffffffffffffffffffffffffffffffff16146117a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611798906149fb565b60405180910390fd5b6001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff02191690831515021790555042600e81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61183861296e565b73ffffffffffffffffffffffffffffffffffffffff166118566117e0565b73ffffffffffffffffffffffffffffffffffffffff16146118ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a3906149fb565b60405180910390fd5b80601160026101000a81548160ff02191690831515021790555050565b60606000601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561193a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061195e9190614e3a565b60ff16905060007f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119f49190614e7c565b905060007f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a879190614e7c565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401611ae3929190614ea9565b602060405180830381865afa158015611b00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b249190614e7c565b90506000808273ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611b74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b989190614f54565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff169150600080601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1610611c1c578284611c1f565b83835b915091506000611c70611c43670de0b6b3a76400008561379c90919063ffffffff16565b611c628a600a611c5391906150da565b8561379c90919063ffffffff16565b61379c90919063ffffffff16565b90506000611c7c612283565b905060006040518060400160405280600481526020017f423a202400000000000000000000000000000000000000000000000000000000815250905080611cd5611cd08486611ccb9190614a4a565b6137b2565b613880565b604051602001611ce6929190615161565b6040516020818303038152906040529a505050505050505050505090565b611d0c61296e565b73ffffffffffffffffffffffffffffffffffffffff16611d2a6117e0565b73ffffffffffffffffffffffffffffffffffffffff1614611d80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d77906149fb565b60405180910390fd5b7f0000000000000000000000005763caf9ef1358ff1049dee07e901e381fb8576673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e05906151f7565b60405180910390fd5b611e188282613b1a565b5050565b60175481565b60105481565b601a5481565b60195481565b60008060016000611e4361296e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611f00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef790615289565b60405180910390fd5b611f14611f0b61296e565b85858403612976565b600191505092915050565b600e5481565b6000611f39611f3261296e565b8484612b3f565b6001905092915050565b611f4b61296e565b73ffffffffffffffffffffffffffffffffffffffff16611f696117e0565b73ffffffffffffffffffffffffffffffffffffffff1614611fbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb6906149fb565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601e6020528060005260406000206000915054906101000a900460ff1681565b601160019054906101000a900460ff1681565b61203e61296e565b73ffffffffffffffffffffffffffffffffffffffff1661205c6117e0565b73ffffffffffffffffffffffffffffffffffffffff16146120b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a9906149fb565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161214f91906146b6565b60405180910390a25050565b61216361296e565b73ffffffffffffffffffffffffffffffffffffffff166121816117e0565b73ffffffffffffffffffffffffffffffffffffffff16146121d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ce906149fb565b60405180910390fd5b670de0b6b3a76400006103e860056121ed610e46565b6121f79190614a4a565b6122019190614ad3565b61220b9190614ad3565b81101561224d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122449061531b565b60405180910390fd5b670de0b6b3a7640000816122619190614a4a565b600a8190555050565b601360009054906101000a900460ff1681565b60085481565b600080732260fac5e5542a773aa44fbcfedf7c193bc2c599905060007f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561230a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061232e9190614e7c565b905060007f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561239d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123c19190614e7c565b73ffffffffffffffffffffffffffffffffffffffff1663e6a4390584846040518363ffffffff1660e01b81526004016123fb929190614ea9565b602060405180830381865afa158015612418573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061243c9190614e7c565b90506000808273ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa15801561248c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124b09190614f54565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff16915060006124ea838361379c90919063ffffffff16565b90506125036305f5e1008261379c90919063ffffffff16565b965050505050505090565b600061251861296e565b73ffffffffffffffffffffffffffffffffffffffff166125366117e0565b73ffffffffffffffffffffffffffffffffffffffff161461258c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612583906149fb565b60405180910390fd5b620186a0600161259a610e46565b6125a49190614a4a565b6125ae9190614ad3565b8210156125f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e7906153ad565b60405180910390fd5b6103e860056125fd610e46565b6126079190614a4a565b6126119190614ad3565b821115612653576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264a9061543f565b60405180910390fd5b8160098190555060019050919050565b60145481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b600061270061296e565b73ffffffffffffffffffffffffffffffffffffffff1661271e6117e0565b73ffffffffffffffffffffffffffffffffffffffff1614612774576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276b906149fb565b60405180910390fd5b6000601360006101000a81548160ff0219169083151502179055506001905090565b61279e61296e565b73ffffffffffffffffffffffffffffffffffffffff166127bc6117e0565b73ffffffffffffffffffffffffffffffffffffffff1614612812576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612809906149fb565b60405180910390fd5b8060198190555060195460188190555060636018541115612868576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285f90614cca565b60405180910390fd5b50565b60165481565b61287961296e565b73ffffffffffffffffffffffffffffffffffffffff166128976117e0565b73ffffffffffffffffffffffffffffffffffffffff16146128ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e4906149fb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361295c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612953906154d1565b60405180910390fd5b612965816136d6565b50565b600a5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036129e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129dc90615563565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4b906155f5565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612b329190614787565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612bae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ba590615687565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612c1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c1490615719565b60405180910390fd5b60008103612c3657612c3183836000613bbb565b6136d1565b601160009054906101000a900460ff16156132f957612c536117e0565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612cc15750612c916117e0565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612cfa5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d34575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d4d5750600560149054906101000a900460ff16155b156132f857601160019054906101000a900460ff16612e4757601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612e075750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612e46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3d90615785565b60405180910390fd5b5b601360009054906101000a900460ff168015612e965750612e666117e0565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612eee57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612f445750601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561300f5743601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612fca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fc19061583d565b60405180910390fd5b43601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130b25750601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613159576008548111156130fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130f3906158cf565b60405180910390fd5b600a546131088361129d565b826131139190614c28565b1115613154576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161314b9061593b565b60405180910390fd5b6132f7565b601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131fc5750601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561324b57600854811115613246576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161323d906159cd565b60405180910390fd5b6132f6565b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166132f557600a546132a88361129d565b826132b39190614c28565b11156132f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132eb9061593b565b60405180910390fd5b5b5b5b5b5b60006133043061129d565b9050600060095482101590508080156133295750601160029054906101000a900460ff165b80156133425750600560149054906101000a900460ff16155b80156133985750601e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133ee5750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156134445750601c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613488576001600560146101000a81548160ff02191690831515021790555061346c613e3a565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061353e5750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561354857600090505b600081156136c157601e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156135ab57506000601854115b156135f8576135d860646135ca60185488613f3e90919063ffffffff16565b61379c90919063ffffffff16565b905080601a60008282546135ec9190614c28565b9250508190555061369d565b601e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561365357506000601454115b1561369c57613680606461367260145488613f3e90919063ffffffff16565b61379c90919063ffffffff16565b905080601a60008282546136949190614c28565b925050819055505b5b60008111156136b2576136b1873083613bbb565b5b80856136be91906159ed565b94505b6136cc878787613bbb565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081836137aa9190614ad3565b905092915050565b6060600060016137c184613f54565b01905060008167ffffffffffffffff8111156137e0576137df615a21565b5b6040519080825280601f01601f1916602001820160405280156138125781602001600182028036833780820191505090505b509050600082602001820190505b600115613875578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161386957613868614aa4565b5b04945060008503613820575b819350505050919050565b606060008290506000815190506000600267ffffffffffffffff8111156138aa576138a9615a21565b5b6040519080825280601f01601f1916602001820160405280156138dc5781602001600182028036833780820191505090505b50905060008190506002831115613aee57836002846138fb91906159ed565b8151811061390c5761390b615a50565b5b602001015160f81c60f81b8160008151811061392b5761392a615a50565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508360018461396891906159ed565b8151811061397957613978615a50565b5b602001015160f81c60f81b8160018151811061399857613997615a50565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006002846139d691906159ed565b67ffffffffffffffff8111156139ef576139ee615a21565b5b6040519080825280601f01601f191660200182016040528015613a215781602001600182028036833780820191505090505b509050600081905060005b600286613a3991906159ed565b811015613ab357868181518110613a5357613a52615a50565b5b602001015160f81c60f81b828281518110613a7157613a70615a50565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080613aab90615a7f565b915050613a2c565b50613abd816140a7565b91508184604051602001613ad2929190615b13565b6040516020818303038152906040529650505050505050613b15565b85604051602001613aff9190615b8e565b6040516020818303038152906040529450505050505b919050565b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613c2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c2190615687565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613c99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c9090615719565b60405180910390fd5b613ca48383836142c0565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613d2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d2190615c22565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613dbd9190614c28565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613e219190614787565b60405180910390a3613e348484846142c5565b50505050565b6000613e453061129d565b90506000601a549050600080831480613e5e5750600082145b15613e6b57505050613f3c565b6014600954613e7a9190614a4a565b831115613e93576014600954613e909190614a4a565b92505b6000839050613ea1816142ca565b6000601a81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613eef90615c73565b60006040518083038185875af1925050503d8060008114613f2c576040519150601f19603f3d011682016040523d82523d6000602084013e613f31565b606091505b505080925050505050505b565b60008183613f4c9190614a4a565b905092915050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310613fb2577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381613fa857613fa7614aa4565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310613fef576d04ee2d6d415b85acef81000000008381613fe557613fe4614aa4565b5b0492506020810190505b662386f26fc10000831061401e57662386f26fc10000838161401457614013614aa4565b5b0492506010810190505b6305f5e1008310614047576305f5e100838161403d5761403c614aa4565b5b0492506008810190505b612710831061406c57612710838161406257614061614aa4565b5b0492506004810190505b6064831061408f576064838161408557614084614aa4565b5b0492506002810190505b600a831061409e576001810190505b80915050919050565b60606000829050600081519050600060036001836140c591906159ed565b6140cf9190614ad3565b9050600081836140df9190614c28565b67ffffffffffffffff8111156140f8576140f7615a21565b5b6040519080825280601f01601f19166020018201604052801561412a5781602001600182028036833780820191505090505b50905060006001905060005b848110156142b257856001828761414d91906159ed565b61415791906159ed565b8151811061416857614167615a50565b5b602001015160f81c60f81b838386886141819190614c28565b61418b91906159ed565b8151811061419c5761419b615a50565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060026003826141da9190615c88565b1480156141f357506001856141ef91906159ed565b8114155b1561429257818061420390615a7f565b9250507f2c00000000000000000000000000000000000000000000000000000000000000838386886142359190614c28565b61423f91906159ed565b815181106142505761424f615a50565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350818061428a90615a7f565b9250506142a1565b818061429d90615a7f565b9250505b806142ab90615a7f565b9050614136565b508195505050505050919050565b505050565b505050565b6000600267ffffffffffffffff8111156142e7576142e6615a21565b5b6040519080825280602002602001820160405280156143155781602001602082028036833780820191505090505b509050308160008151811061432d5761432c615a50565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156143d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143f69190614e7c565b8160018151811061440a57614409615a50565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061446f307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612976565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016144d1959493929190615db2565b600060405180830381600087803b1580156144eb57600080fd5b505af11580156144ff573d6000803e3d6000fd5b505050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614541578082015181840152602081019050614526565b83811115614550576000848401525b50505050565b6000601f19601f8301169050919050565b600061457282614507565b61457c8185614512565b935061458c818560208601614523565b61459581614556565b840191505092915050565b600060208201905081810360008301526145ba8184614567565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006145f2826145c7565b9050919050565b614602816145e7565b811461460d57600080fd5b50565b60008135905061461f816145f9565b92915050565b6000819050919050565b61463881614625565b811461464357600080fd5b50565b6000813590506146558161462f565b92915050565b60008060408385031215614672576146716145c2565b5b600061468085828601614610565b925050602061469185828601614646565b9150509250929050565b60008115159050919050565b6146b08161469b565b82525050565b60006020820190506146cb60008301846146a7565b92915050565b6000602082840312156146e7576146e66145c2565b5b60006146f584828501614610565b91505092915050565b6000819050919050565b600061472361471e614719846145c7565b6146fe565b6145c7565b9050919050565b600061473582614708565b9050919050565b60006147478261472a565b9050919050565b6147578161473c565b82525050565b6000602082019050614772600083018461474e565b92915050565b61478181614625565b82525050565b600060208201905061479c6000830184614778565b92915050565b6000602082840312156147b8576147b76145c2565b5b60006147c684828501614646565b91505092915050565b6000806000606084860312156147e8576147e76145c2565b5b60006147f686828701614610565b935050602061480786828701614610565b925050604061481886828701614646565b9150509250925092565b61482b816145e7565b82525050565b60006020820190506148466000830184614822565b92915050565b600060ff82169050919050565b6148628161484c565b82525050565b600060208201905061487d6000830184614859565b92915050565b61488c8161469b565b811461489757600080fd5b50565b6000813590506148a981614883565b92915050565b6000806000606084860312156148c8576148c76145c2565b5b60006148d686828701614646565b93505060206148e786828701614646565b92505060406148f88682870161489a565b9150509250925092565b60008060408385031215614919576149186145c2565b5b600061492785828601614610565b92505060206149388582860161489a565b9150509250929050565b600060208284031215614958576149576145c2565b5b60006149668482850161489a565b91505092915050565b60008060408385031215614986576149856145c2565b5b600061499485828601614610565b92505060206149a585828601614610565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006149e5602083614512565b91506149f0826149af565b602082019050919050565b60006020820190508181036000830152614a14816149d8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614a5582614625565b9150614a6083614625565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614a9957614a98614a1b565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614ade82614625565b9150614ae983614625565b925082614af957614af8614aa4565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614b60602f83614512565b9150614b6b82614b04565b604082019050919050565b60006020820190508181036000830152614b8f81614b53565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614bf2602883614512565b9150614bfd82614b96565b604082019050919050565b60006020820190508181036000830152614c2181614be5565b9050919050565b6000614c3382614625565b9150614c3e83614625565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614c7357614c72614a1b565b5b828201905092915050565b7f4d757374206b656570206665657320617420393925206f72206c657373000000600082015250565b6000614cb4601d83614512565b9150614cbf82614c7e565b602082019050919050565b60006020820190508181036000830152614ce381614ca7565b9050919050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b6000614d46603383614512565b9150614d5182614cea565b604082019050919050565b60006020820190508181036000830152614d7581614d39565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b6000614dd8603083614512565b9150614de382614d7c565b604082019050919050565b60006020820190508181036000830152614e0781614dcb565b9050919050565b614e178161484c565b8114614e2257600080fd5b50565b600081519050614e3481614e0e565b92915050565b600060208284031215614e5057614e4f6145c2565b5b6000614e5e84828501614e25565b91505092915050565b600081519050614e76816145f9565b92915050565b600060208284031215614e9257614e916145c2565b5b6000614ea084828501614e67565b91505092915050565b6000604082019050614ebe6000830185614822565b614ecb6020830184614822565b9392505050565b60006dffffffffffffffffffffffffffff82169050919050565b614ef581614ed2565b8114614f0057600080fd5b50565b600081519050614f1281614eec565b92915050565b600063ffffffff82169050919050565b614f3181614f18565b8114614f3c57600080fd5b50565b600081519050614f4e81614f28565b92915050565b600080600060608486031215614f6d57614f6c6145c2565b5b6000614f7b86828701614f03565b9350506020614f8c86828701614f03565b9250506040614f9d86828701614f3f565b9150509250925092565b60008160011c9050919050565b6000808291508390505b6001851115614ffe57808604811115614fda57614fd9614a1b565b5b6001851615614fe95780820291505b8081029050614ff785614fa7565b9450614fbe565b94509492505050565b60008261501757600190506150d3565b8161502557600090506150d3565b816001811461503b576002811461504557615074565b60019150506150d3565b60ff84111561505757615056614a1b565b5b8360020a91508482111561506e5761506d614a1b565b5b506150d3565b5060208310610133831016604e8410600b84101617156150a95782820a9050838111156150a4576150a3614a1b565b5b6150d3565b6150b68484846001614fb4565b925090508184048111156150cd576150cc614a1b565b5b81810290505b9392505050565b60006150e582614625565b91506150f083614625565b925061511d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484615007565b905092915050565b600081905092915050565b600061513b82614507565b6151458185615125565b9350615155818560208601614523565b80840191505092915050565b600061516d8285615130565b91506151798284615130565b91508190509392505050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006151e1603983614512565b91506151ec82615185565b604082019050919050565b60006020820190508181036000830152615210816151d4565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000615273602583614512565b915061527e82615217565b604082019050919050565b600060208201905081810360008301526152a281615266565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000615305602483614512565b9150615310826152a9565b604082019050919050565b60006020820190508181036000830152615334816152f8565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000615397603583614512565b91506153a28261533b565b604082019050919050565b600060208201905081810360008301526153c68161538a565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000615429603483614512565b9150615434826153cd565b604082019050919050565b600060208201905081810360008301526154588161541c565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006154bb602683614512565b91506154c68261545f565b604082019050919050565b600060208201905081810360008301526154ea816154ae565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061554d602483614512565b9150615558826154f1565b604082019050919050565b6000602082019050818103600083015261557c81615540565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006155df602283614512565b91506155ea82615583565b604082019050919050565b6000602082019050818103600083015261560e816155d2565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615671602583614512565b915061567c82615615565b604082019050919050565b600060208201905081810360008301526156a081615664565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000615703602383614512565b915061570e826156a7565b604082019050919050565b60006020820190508181036000830152615732816156f6565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061576f601683614512565b915061577a82615739565b602082019050919050565b6000602082019050818103600083015261579e81615762565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000615827604983614512565b9150615832826157a5565b606082019050919050565b600060208201905081810360008301526158568161581a565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006158b9603583614512565b91506158c48261585d565b604082019050919050565b600060208201905081810360008301526158e8816158ac565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000615925601383614512565b9150615930826158ef565b602082019050919050565b6000602082019050818103600083015261595481615918565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006159b7603683614512565b91506159c28261595b565b604082019050919050565b600060208201905081810360008301526159e6816159aa565b9050919050565b60006159f882614625565b9150615a0383614625565b925082821015615a1657615a15614a1b565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000615a8a82614625565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615abc57615abb614a1b565b5b600182019050919050565b7f2e00000000000000000000000000000000000000000000000000000000000000600082015250565b6000615afd600183615125565b9150615b0882615ac7565b600182019050919050565b6000615b1f8285615130565b9150615b2a82615af0565b9150615b368284615130565b91508190509392505050565b7f302e000000000000000000000000000000000000000000000000000000000000600082015250565b6000615b78600283615125565b9150615b8382615b42565b600282019050919050565b6000615b9982615b6b565b9150615ba58284615130565b915081905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000615c0c602683614512565b9150615c1782615bb0565b604082019050919050565b60006020820190508181036000830152615c3b81615bff565b9050919050565b600081905092915050565b50565b6000615c5d600083615c42565b9150615c6882615c4d565b600082019050919050565b6000615c7e82615c50565b9150819050919050565b6000615c9382614625565b9150615c9e83614625565b925082615cae57615cad614aa4565b5b828206905092915050565b6000819050919050565b6000615cde615cd9615cd484615cb9565b6146fe565b614625565b9050919050565b615cee81615cc3565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615d29816145e7565b82525050565b6000615d3b8383615d20565b60208301905092915050565b6000602082019050919050565b6000615d5f82615cf4565b615d698185615cff565b9350615d7483615d10565b8060005b83811015615da5578151615d8c8882615d2f565b9750615d9783615d47565b925050600181019050615d78565b5085935050505092915050565b600060a082019050615dc76000830188614778565b615dd46020830187615ce5565b8181036040830152615de68186615d54565b9050615df56060830185614822565b615e026080830184614778565b969550505050505056fea2646970667358221220537f80f49ef209c65cf86f45d3b0e8bd107a4416685d57f8fdbf566ca2b5c95264736f6c634300080d0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d

-----Decoded View---------------
Arg [0] : _usdcAddress (address): 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48
Arg [1] : _routerAddress (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
Arg [1] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d


Deployed Bytecode Sourcemap

19476:19507:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29222:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4338:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20984:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19559:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3679:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32662:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20125:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19939:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30454:277;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4540:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19662:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20035:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19995:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3578:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5077:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19617:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20223:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32773:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20710:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20303:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3795:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;884:103;;;;;;;;;;;;;:::i;:::-;;31378:203;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38425:555;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29578:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31005:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19754:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20603;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29371:155;;;;;;;;;;;;;:::i;:::-;;661:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19791:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31270:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28260:954;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31995:306;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20677:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20179:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20779:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20745:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5375:475;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20087:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3946:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32505:149;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21205:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20263:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31805:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30739:258;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20521:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19824:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27672:580;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29965:481;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20569:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4154:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19866:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29760:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31589:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20640:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;995:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19906:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29222:95;29268:13;29301:8;:6;:8::i;:::-;29294:15;;29222:95;:::o;4338:194::-;4446:4;4463:39;4472:12;:10;:12::i;:::-;4486:7;4495:6;4463:8;:39::i;:::-;4520:4;4513:11;;4338:194;;;;:::o;20984:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;19559:51::-;;;:::o;3679:108::-;3740:7;3767:12;;3760:19;;3679:108;:::o;32662:103::-;807:12;:10;:12::i;:::-;796:23;;:7;:5;:7::i;:::-;:23;;;788:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32748:9:::1;32736;;:21;;;;;;;;;;;;;;;;;;32662:103:::0;:::o;20125:47::-;;;;:::o;19939:36::-;;;;:::o;30454:277::-;807:12;:10;:12::i;:::-;796:23;;:7;:5;:7::i;:::-;:23;;;788:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30591:4:::1;30583;30578:1;30562:13;:11;:13::i;:::-;:17;;;;:::i;:::-;30561:26;;;;:::i;:::-;30560:35;;;;:::i;:::-;30550:6;:45;;30528:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;30714:8;30704:6;:19;;;;:::i;:::-;30681:20;:42;;;;30454:277:::0;:::o;4540:529::-;4680:4;4697:36;4707:6;4715:9;4726:6;4697:9;:36::i;:::-;4746:24;4773:11;:19;4785:6;4773:19;;;;;;;;;;;;;;;:33;4793:12;:10;:12::i;:::-;4773:33;;;;;;;;;;;;;;;;4746:60;;4859:6;4839:16;:26;;4817:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;4969:57;4978:6;4986:12;:10;:12::i;:::-;5019:6;5000:16;:25;4969:8;:57::i;:::-;5057:4;5050:11;;;4540:529;;;;;:::o;19662:53::-;19708:6;19662:53;:::o;20035:45::-;;;;:::o;19995:33::-;;;;;;;;;;;;;:::o;3578:93::-;3636:5;3661:2;3654:9;;3578:93;:::o;5077:290::-;5190:4;5207:130;5230:12;:10;:12::i;:::-;5257:7;5316:10;5279:11;:25;5291:12;:10;:12::i;:::-;5279:25;;;;;;;;;;;;;;;:34;5305:7;5279:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;5207:8;:130::i;:::-;5355:4;5348:11;;5077:290;;;;:::o;19617:38::-;;;:::o;20223:33::-;;;;;;;;;;;;;:::o;32773:126::-;32839:4;32863:19;:28;32883:7;32863:28;;;;;;;;;;;;;;;;;;;;;;;;;32856:35;;32773:126;;;:::o;20710:28::-;;;;:::o;20303:31::-;;;;;;;;;;;;;:::o;3795:143::-;3885:7;3912:9;:18;3922:7;3912:18;;;;;;;;;;;;;;;;3905:25;;3795:143;;;:::o;884:103::-;807:12;:10;:12::i;:::-;796:23;;:7;:5;:7::i;:::-;:23;;;788:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;949:30:::1;976:1;949:18;:30::i;:::-;884:103::o:0;31378:203::-;807:12;:10;:12::i;:::-;796:23;;:7;:5;:7::i;:::-;:23;;;788:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31460:7:::1;31448:9;:19;;;;31493:9;;31478:12;:24;;;;31537:2;31521:12;;:18;;31513:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;31378:203:::0;:::o;38425:555::-;807:12;:10;:12::i;:::-;796:23;;:7;:5;:7::i;:::-;:23;;;788:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38627:3:::1;38604:19;:26;;38582:127;;;;;;;;;;;;:::i;:::-;;;;;;;;;38754:4;38742:8;:16;;:33;;;;;38774:1;38762:8;:13;;38742:33;38720:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;38880:19;38862:15;:37;;;;38929:8;38910:16;:27;;;;38964:8;38948:13;;:24;;;;;;;;;;;;;;;;;;38425:555:::0;;;:::o;29578:121::-;29630:4;807:12;:10;:12::i;:::-;796:23;;:7;:5;:7::i;:::-;:23;;;788:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29664:5:::1;29647:14;;:22;;;;;;;;;;;;;;;;;;29687:4;29680:11;;29578:121:::0;:::o;31005:169::-;807:12;:10;:12::i;:::-;796:23;;:7;:5;:7::i;:::-;:23;;;788:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31162:4:::1;31120:31;:39;31152:6;31120:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;31005:169:::0;;:::o;19754:30::-;;;;;;;;;;;;;:::o;20603:::-;;;;:::o;29371:155::-;807:12;:10;:12::i;:::-;796:23;;:7;:5;:7::i;:::-;:23;;;788:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29442:4:::1;29426:13;;:20;;;;;;;;;;;;;;;;;;29471:4;29457:11;;:18;;;;;;;;;;;;;;;;;;29503:15;29486:14;:32;;;;29371:155::o:0;661:87::-;707:7;734:6;;;;;;;;;;;727:13;;661:87;:::o;19791:24::-;;;;;;;;;;;;;:::o;31270:100::-;807:12;:10;:12::i;:::-;796:23;;:7;:5;:7::i;:::-;:23;;;788:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31355:7:::1;31341:11;;:21;;;;;;;;;;;;;;;;;;31270:100:::0;:::o;28260:954::-;28308:13;28334:20;28372:4;;;;;;;;;;;28357:29;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28334:54;;;;28401:19;28423:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28401:44;;28456:17;28494:15;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28476:66;;;28543:4;;;;;;;;;;;28549:11;28476:85;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28456:105;;28575:16;28593;28630:9;28615:51;;;:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28574:94;;;;;;;;;28682:18;28702:19;28739:4;;;;;;;;;;;28725:18;;:11;:18;;;:90;;28796:8;28806;28725:90;;;28760:8;28770;28725:90;28681:134;;;;28828:16;28847:87;28903:20;28918:4;28903:10;:14;;:20;;;;:::i;:::-;28847:37;28870:12;28863:2;:20;;;;:::i;:::-;28847:11;:15;;:37;;;;:::i;:::-;:41;;:87;;;;:::i;:::-;28828:106;;28947:16;28966:19;:17;:19::i;:::-;28947:38;;28998:25;:34;;;;;;;;;;;;;;;;;;;29097:11;29127:64;29161:29;29181:8;29170;:19;;;;:::i;:::-;29161:8;:29::i;:::-;29127:33;:64::i;:::-;29065:141;;;;;;;;;:::i;:::-;;;;;;;;;;;;;29045:161;;;;;;;;;;;;28260:954;:::o;31995:306::-;807:12;:10;:12::i;:::-;796:23;;:7;:5;:7::i;:::-;:23;;;788:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32141:13:::1;32133:21;;:4;:21;;::::0;32111:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;32252:41;32281:4;32287:5;32252:28;:41::i;:::-;31995:306:::0;;:::o;20677:24::-;;;;:::o;20179:35::-;;;;:::o;20779:27::-;;;;:::o;20745:25::-;;;;:::o;5375:475::-;5493:4;5510:24;5537:11;:25;5549:12;:10;:12::i;:::-;5537:25;;;;;;;;;;;;;;;:34;5563:7;5537:34;;;;;;;;;;;;;;;;5510:61;;5624:15;5604:16;:35;;5582:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;5740:67;5749:12;:10;:12::i;:::-;5763:7;5791:15;5772:16;:34;5740:8;:67::i;:::-;5838:4;5831:11;;;5375:475;;;;:::o;20087:29::-;;;;:::o;3946:200::-;4057:4;4074:42;4084:12;:10;:12::i;:::-;4098:9;4109:6;4074:9;:42::i;:::-;4134:4;4127:11;;3946:200;;;;:::o;32505:149::-;807:12;:10;:12::i;:::-;796:23;;:7;:5;:7::i;:::-;:23;;;788:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32628:18:::1;32610:15;;:36;;;;;;;;;;;;;;;;;;32505:149:::0;:::o;21205:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;20263:33::-;;;;;;;;;;;;;:::o;31805:182::-;807:12;:10;:12::i;:::-;796:23;;:7;:5;:7::i;:::-;:23;;;788:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31921:8:::1;31890:19;:28;31910:7;31890:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;31961:7;31945:34;;;31970:8;31945:34;;;;;;:::i;:::-;;;;;;;;31805:182:::0;;:::o;30739:258::-;807:12;:10;:12::i;:::-;796:23;;:7;:5;:7::i;:::-;:23;;;788:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30879:4:::1;30871;30866:1;30850:13;:11;:13::i;:::-;:17;;;;:::i;:::-;30849:26;;;;:::i;:::-;30848:35;;;;:::i;:::-;30838:6;:45;;30816:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;30980:8;30970:6;:19;;;;:::i;:::-;30958:9;:31;;;;30739:258:::0;:::o;20521:39::-;;;;;;;;;;;;;:::o;19824:35::-;;;;:::o;27672:580::-;27722:7;27742:18;27763:42;27742:63;;27818:19;27840:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27818:44;;27873:17;27911:15;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27893:66;;;27960:10;27972:11;27893:91;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27873:111;;28006:16;28024;28061:9;28046:51;;;:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28005:94;;;;;;;;;28156:21;28180:22;28193:8;28180;:12;;:22;;;;:::i;:::-;28156:46;;28222:22;28240:3;28222:13;:17;;:22;;;;:::i;:::-;28215:29;;;;;;;;27672:580;:::o;29965:481::-;30062:4;807:12;:10;:12::i;:::-;796:23;;:7;:5;:7::i;:::-;:23;;;788:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30136:6:::1;30131:1;30115:13;:11;:13::i;:::-;:17;;;;:::i;:::-;30114:28;;;;:::i;:::-;30101:9;:41;;30079:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;30291:4;30286:1;30270:13;:11;:13::i;:::-;:17;;;;:::i;:::-;30269:26;;;;:::i;:::-;30256:9;:39;;30234:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;30407:9;30386:18;:30;;;;30434:4;30427:11;;29965:481:::0;;;:::o;20569:27::-;;;;:::o;4154:176::-;4268:7;4295:11;:18;4307:5;4295:18;;;;;;;;;;;;;;;:27;4314:7;4295:27;;;;;;;;;;;;;;;;4288:34;;4154:176;;;;:::o;19866:33::-;;;;:::o;29760:135::-;29820:4;807:12;:10;:12::i;:::-;796:23;;:7;:5;:7::i;:::-;:23;;;788:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29860:5:::1;29837:20;;:28;;;;;;;;;;;;;;;;;;29883:4;29876:11;;29760:135:::0;:::o;31589:208::-;807:12;:10;:12::i;:::-;796:23;;:7;:5;:7::i;:::-;:23;;;788:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31673:7:::1;31660:10;:20;;;;31707:10;;31691:13;:26;;;;31753:2;31736:13;;:19;;31728:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;31589:208:::0;:::o;20640:30::-;;;;:::o;995:238::-;807:12;:10;:12::i;:::-;796:23;;:7;:5;:7::i;:::-;:23;;;788:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1118:1:::1;1098:22;;:8;:22;;::::0;1076:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1197:28;1216:8;1197:18;:28::i;:::-;995:238:::0;:::o;19906:24::-;;;;:::o;182:98::-;235:7;262:10;255:17;;182:98;:::o;7642:380::-;7795:1;7778:19;;:5;:19;;;7770:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7876:1;7857:21;;:7;:21;;;7849:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7960:6;7930:11;:18;7942:5;7930:18;;;;;;;;;;;;;;;:27;7949:7;7930:27;;;;;;;;;;;;;;;:36;;;;7998:7;7982:32;;7991:5;7982:32;;;8007:6;7982:32;;;;;;:::i;:::-;;;;;;;;7642:380;;;:::o;32957:4239::-;33105:1;33089:18;;:4;:18;;;33081:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33182:1;33168:16;;:2;:16;;;33160:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;33251:1;33241:6;:11;33237:93;;33269:28;33285:4;33291:2;33295:1;33269:15;:28::i;:::-;33312:7;;33237:93;33346:14;;;;;;;;;;;33342:2393;;;33407:7;:5;:7::i;:::-;33399:15;;:4;:15;;;;:49;;;;;33441:7;:5;:7::i;:::-;33435:13;;:2;:13;;;;33399:49;:86;;;;;33483:1;33469:16;;:2;:16;;;;33399:86;:128;;;;;33520:6;33506:21;;:2;:21;;;;33399:128;:158;;;;;33549:8;;;;;;;;;;;33548:9;33399:158;33377:2347;;;33597:13;;;;;;;;;;;33592:223;;33669:19;:25;33689:4;33669:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;33698:19;:23;33718:2;33698:23;;;;;;;;;;;;;;;;;;;;;;;;;33669:52;33635:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;33592:223;33993:20;;;;;;;;;;;:58;;;;;34044:7;:5;:7::i;:::-;34038:13;;:2;:13;;;;33993:58;:113;;;;;34090:15;34076:30;;:2;:30;;;;33993:113;:168;;;;;34132:25;:29;34158:2;34132:29;;;;;;;;;;;;;;;;;;;;;;;;;34131:30;33993:168;33967:547;;;34280:12;34238:28;:39;34267:9;34238:39;;;;;;;;;;;;;;;;:54;34204:213;;;;;;;;;;;;:::i;:::-;;;;;;;;;34482:12;34440:28;:39;34469:9;34440:39;;;;;;;;;;;;;;;:54;;;;33967:547;34588:25;:31;34614:4;34588:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;34645:31;:35;34677:2;34645:35;;;;;;;;;;;;;;;;;;;;;;;;;34644:36;34588:92;34562:1147;;;34767:20;;34757:6;:30;;34723:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;34975:9;;34958:13;34968:2;34958:9;:13::i;:::-;34949:6;:22;;;;:::i;:::-;:35;;34915:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;34562:1147;;;35153:25;:29;35179:2;35153:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;35208:31;:37;35240:4;35208:37;;;;;;;;;;;;;;;;;;;;;;;;;35207:38;35153:92;35127:582;;;35332:20;;35322:6;:30;;35288:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;35127:582;;;35489:31;:35;35521:2;35489:35;;;;;;;;;;;;;;;;;;;;;;;;;35484:225;;35609:9;;35592:13;35602:2;35592:9;:13::i;:::-;35583:6;:22;;;;:::i;:::-;:35;;35549:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;35484:225;35127:582;34562:1147;33377:2347;33342:2393;35747:28;35778:24;35796:4;35778:9;:24::i;:::-;35747:55;;35815:12;35854:18;;35830:20;:42;;35815:57;;35903:7;:35;;;;;35927:11;;;;;;;;;;;35903:35;:61;;;;;35956:8;;;;;;;;;;;35955:9;35903:61;:110;;;;;35982:25;:31;36008:4;35982:31;;;;;;;;;;;;;;;;;;;;;;;;;35981:32;35903:110;:153;;;;;36031:19;:25;36051:4;36031:25;;;;;;;;;;;;;;;;;;;;;;;;;36030:26;35903:153;:194;;;;;36074:19;:23;36094:2;36074:23;;;;;;;;;;;;;;;;;;;;;;;;;36073:24;35903:194;35885:326;;;36135:4;36124:8;;:15;;;;;;;;;;;;;;;;;;36156:10;:8;:10::i;:::-;36194:5;36183:8;;:16;;;;;;;;;;;;;;;;;;35885:326;36223:12;36239:8;;;;;;;;;;;36238:9;36223:24;;36349:19;:25;36369:4;36349:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;36378:19;:23;36398:2;36378:23;;;;;;;;;;;;;;;;;;;;;;;;;36349:52;36345:100;;;36428:5;36418:15;;36345:100;36457:12;36562:7;36558:585;;;36614:25;:29;36640:2;36614:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;36663:1;36647:13;;:17;36614:50;36610:384;;;36692:34;36722:3;36692:25;36703:13;;36692:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;36685:41;;36761:4;36745:12;;:20;;;;;;;:::i;:::-;;;;;;;;36610:384;;;36827:25;:31;36853:4;36827:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;36877:1;36862:12;;:16;36827:51;36823:171;;;36906:33;36935:3;36906:24;36917:12;;36906:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;36899:40;;36974:4;36958:12;;:20;;;;;;;:::i;:::-;;;;;;;;36823:171;36610:384;37021:1;37014:4;:8;37010:91;;;37043:42;37059:4;37073;37080;37043:15;:42::i;:::-;37010:91;37127:4;37117:14;;;;;:::i;:::-;;;36558:585;37155:33;37171:4;37177:2;37181:6;37155:15;:33::i;:::-;33070:4126;;;;32957:4239;;;;:::o;1241:191::-;1315:16;1334:6;;;;;;;;;;;1315:25;;1360:8;1351:6;;:17;;;;;;;;;;;;;;;;;;1415:8;1384:40;;1405:8;1384:40;;;;;;;;;;;;1304:128;1241:191;:::o;11907:98::-;11965:7;11996:1;11992;:5;;;;:::i;:::-;11985:12;;11907:98;;;;:::o;23382:713::-;23438:13;23489:14;23521:1;23506:12;23512:5;23506;:12::i;:::-;:16;23489:33;;23537:20;23571:6;23560:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23537:41;;23593:11;23722:6;23718:2;23714:15;23706:6;23702:28;23695:35;;23759:290;23766:4;23759:290;;;23791:5;;;;;;;;23933:10;23928:2;23921:5;23917:14;23912:32;23907:3;23899:46;23991:2;23982:11;;;;;;:::i;:::-;;;;;24025:1;24016:5;:10;23759:290;24012:21;23759:290;24070:6;24063:13;;;;;23382:713;;;:::o;26191:1473::-;26295:13;26321:24;26354:6;26321:40;;26372:8;26383:11;:18;26372:29;;26455:22;26491:1;26480:13;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26455:38;;26504:26;26539:8;26504:44;;26649:1;26643:3;:7;26639:1018;;;26686:11;26704:1;26698:3;:7;;;;:::i;:::-;26686:20;;;;;;;;:::i;:::-;;;;;;;;;;26667:13;26681:1;26667:16;;;;;;;;:::i;:::-;;;;;:39;;;;;;;;;;;26740:11;26758:1;26752:3;:7;;;;:::i;:::-;26740:20;;;;;;;;:::i;:::-;;;;;;;;;;26721:13;26735:1;26721:16;;;;;;;;:::i;:::-;;;;;:39;;;;;;;;;;;26867:29;26916:1;26910:3;:7;;;;:::i;:::-;26899:19;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26867:51;;26933:29;26971:15;26933:54;;27009:6;27004:106;27031:1;27025:3;:7;;;;:::i;:::-;27021:1;:11;27004:106;;;27080:11;27092:1;27080:14;;;;;;;;:::i;:::-;;;;;;;;;;27058:16;27075:1;27058:19;;;;;;;;:::i;:::-;;;;;:36;;;;;;;;;;;27034:3;;;;;:::i;:::-;;;;27004:106;;;;27201:48;27231:16;27201:22;:48::i;:::-;27183:66;;27369:15;27391:8;27352:48;;;;;;;;;:::i;:::-;;;;;;;;;;;;;27338:63;;;;;;;;;;26639:1018;27637:6;27614:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;27600:45;;;;;;26191:1473;;;;:::o;32309:188::-;32426:5;32392:25;:31;32418:4;32392:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;32483:5;32449:40;;32477:4;32449:40;;;;;;;;;;;;32309:188;;:::o;5858:770::-;6016:1;5998:20;;:6;:20;;;5990:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;6100:1;6079:23;;:9;:23;;;6071:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;6155:47;6176:6;6184:9;6195:6;6155:20;:47::i;:::-;6215:21;6239:9;:17;6249:6;6239:17;;;;;;;;;;;;;;;;6215:41;;6306:6;6289:13;:23;;6267:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;6450:6;6434:13;:22;6414:9;:17;6424:6;6414:17;;;;;;;;;;;;;;;:42;;;;6502:6;6478:9;:20;6488:9;6478:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;6543:9;6526:35;;6535:6;6526:35;;;6554:6;6526:35;;;;;;:::i;:::-;;;;;;;;6574:46;6594:6;6602:9;6613:6;6574:19;:46::i;:::-;5979:649;5858:770;;;:::o;37801:614::-;37840:23;37866:24;37884:4;37866:9;:24::i;:::-;37840:50;;37901:25;37929:12;;37901:40;;37952:12;38000:1;37981:15;:20;:46;;;;38026:1;38005:17;:22;37981:46;37977:85;;;38044:7;;;;;37977:85;38117:2;38096:18;;:23;;;;:::i;:::-;38078:15;:41;38074:115;;;38175:2;38154:18;;:23;;;;:::i;:::-;38136:41;;38074:115;38201:26;38230:15;38201:44;;38258:36;38275:18;38258:16;:36::i;:::-;38322:1;38307:12;:16;;;;38358:9;;;;;;;;;;;38350:23;;38381:21;38350:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38336:71;;;;;37829:586;;;;37801:614;:::o;11508:98::-;11566:7;11597:1;11593;:5;;;;:::i;:::-;11586:12;;11508:98;;;;:::o;24103:948::-;24156:7;24176:14;24193:1;24176:18;;24243:8;24234:5;:17;24230:106;;24281:8;24272:17;;;;;;:::i;:::-;;;;;24318:2;24308:12;;;;24230:106;24363:8;24354:5;:17;24350:106;;24401:8;24392:17;;;;;;:::i;:::-;;;;;24438:2;24428:12;;;;24350:106;24483:8;24474:5;:17;24470:106;;24521:8;24512:17;;;;;;:::i;:::-;;;;;24558:2;24548:12;;;;24470:106;24603:7;24594:5;:16;24590:103;;24640:7;24631:16;;;;;;:::i;:::-;;;;;24676:1;24666:11;;;;24590:103;24720:7;24711:5;:16;24707:103;;24757:7;24748:16;;;;;;:::i;:::-;;;;;24793:1;24783:11;;;;24707:103;24837:7;24828:5;:16;24824:103;;24874:7;24865:16;;;;;;:::i;:::-;;;;;24910:1;24900:11;;;;24824:103;24954:7;24945:5;:16;24941:68;;24992:1;24982:11;;;;24941:68;25037:6;25030:13;;;24103:948;;;:::o;25059:1124::-;25152:13;25269:24;25302:6;25269:40;;25320:8;25331:11;:18;25320:29;;25413:11;25439:1;25434;25428:3;:7;;;;:::i;:::-;25427:13;;;;:::i;:::-;25413:27;;25451:22;25492:6;25486:3;:12;;;;:::i;:::-;25476:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25451:48;;25512:6;25521:1;25512:10;;25568:6;25563:576;25584:3;25580:1;:7;25563:576;;;25699:11;25721:1;25717;25711:3;:7;;;;:::i;:::-;:11;;;;:::i;:::-;25699:24;;;;;;;;:::i;:::-;;;;;;;;;;25669:9;25694:1;25685:6;25679:3;:12;;;;:::i;:::-;:16;;;;:::i;:::-;25669:27;;;;;;;;:::i;:::-;;;;;:54;;;;;;;;;;;25824:1;25819;25815;:5;;;;:::i;:::-;:10;:26;;;;;25840:1;25834:3;:7;;;;:::i;:::-;25829:1;:12;;25815:26;25811:317;;;25862:3;;;;;:::i;:::-;;;;25949:11;25919:9;25944:1;25935:6;25929:3;:12;;;;:::i;:::-;:16;;;;:::i;:::-;25919:27;;;;;;;;:::i;:::-;;;;;:41;;;;;;;;;;;25979:3;;;;;:::i;:::-;;;;25811:317;;;26066:3;;;;;:::i;:::-;;;;25811:317;25589:3;;;;:::i;:::-;;;25563:576;;;;26165:9;26151:24;;;;;;;25059:1124;;;:::o;8030:125::-;;;;:::o;8163:124::-;;;;:::o;37204:589::-;37330:21;37368:1;37354:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37330:40;;37399:4;37381;37386:1;37381:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;37425:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37415:4;37420:1;37415:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;37460:62;37477:4;37492:15;37510:11;37460:8;:62::i;:::-;37561:15;:66;;;37642:11;37668:1;37712:4;37739;37759:15;37561:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37259:534;37204:589;:::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:329::-;5218:6;5267:2;5255:9;5246:7;5242:23;5238:32;5235:119;;;5273:79;;:::i;:::-;5235:119;5393:1;5418:53;5463:7;5454:6;5443:9;5439:22;5418:53;:::i;:::-;5408:63;;5364:117;5159:329;;;;:::o;5494:619::-;5571:6;5579;5587;5636:2;5624:9;5615:7;5611:23;5607:32;5604:119;;;5642:79;;:::i;:::-;5604:119;5762:1;5787:53;5832:7;5823:6;5812:9;5808:22;5787:53;:::i;:::-;5777:63;;5733:117;5889:2;5915:53;5960:7;5951:6;5940:9;5936:22;5915:53;:::i;:::-;5905:63;;5860:118;6017:2;6043:53;6088:7;6079:6;6068:9;6064:22;6043:53;:::i;:::-;6033:63;;5988:118;5494:619;;;;;:::o;6119:118::-;6206:24;6224:5;6206:24;:::i;:::-;6201:3;6194:37;6119:118;;:::o;6243:222::-;6336:4;6374:2;6363:9;6359:18;6351:26;;6387:71;6455:1;6444:9;6440:17;6431:6;6387:71;:::i;:::-;6243:222;;;;:::o;6471:86::-;6506:7;6546:4;6539:5;6535:16;6524:27;;6471:86;;;:::o;6563:112::-;6646:22;6662:5;6646:22;:::i;:::-;6641:3;6634:35;6563:112;;:::o;6681:214::-;6770:4;6808:2;6797:9;6793:18;6785:26;;6821:67;6885:1;6874:9;6870:17;6861:6;6821:67;:::i;:::-;6681:214;;;;:::o;6901:116::-;6971:21;6986:5;6971:21;:::i;:::-;6964:5;6961:32;6951:60;;7007:1;7004;6997:12;6951:60;6901:116;:::o;7023:133::-;7066:5;7104:6;7091:20;7082:29;;7120:30;7144:5;7120:30;:::i;:::-;7023:133;;;;:::o;7162:613::-;7236:6;7244;7252;7301:2;7289:9;7280:7;7276:23;7272:32;7269:119;;;7307:79;;:::i;:::-;7269:119;7427:1;7452:53;7497:7;7488:6;7477:9;7473:22;7452:53;:::i;:::-;7442:63;;7398:117;7554:2;7580:53;7625:7;7616:6;7605:9;7601:22;7580:53;:::i;:::-;7570:63;;7525:118;7682:2;7708:50;7750:7;7741:6;7730:9;7726:22;7708:50;:::i;:::-;7698:60;;7653:115;7162:613;;;;;:::o;7781:468::-;7846:6;7854;7903:2;7891:9;7882:7;7878:23;7874:32;7871:119;;;7909:79;;:::i;:::-;7871:119;8029:1;8054:53;8099:7;8090:6;8079:9;8075:22;8054:53;:::i;:::-;8044:63;;8000:117;8156:2;8182:50;8224:7;8215:6;8204:9;8200:22;8182:50;:::i;:::-;8172:60;;8127:115;7781:468;;;;;:::o;8255:323::-;8311:6;8360:2;8348:9;8339:7;8335:23;8331:32;8328:119;;;8366:79;;:::i;:::-;8328:119;8486:1;8511:50;8553:7;8544:6;8533:9;8529:22;8511:50;:::i;:::-;8501:60;;8457:114;8255:323;;;;:::o;8584:474::-;8652:6;8660;8709:2;8697:9;8688:7;8684:23;8680:32;8677:119;;;8715:79;;:::i;:::-;8677:119;8835:1;8860:53;8905:7;8896:6;8885:9;8881:22;8860:53;:::i;:::-;8850:63;;8806:117;8962:2;8988:53;9033:7;9024:6;9013:9;9009:22;8988:53;:::i;:::-;8978:63;;8933:118;8584:474;;;;;:::o;9064:182::-;9204:34;9200:1;9192:6;9188:14;9181:58;9064:182;:::o;9252:366::-;9394:3;9415:67;9479:2;9474:3;9415:67;:::i;:::-;9408:74;;9491:93;9580:3;9491:93;:::i;:::-;9609:2;9604:3;9600:12;9593:19;;9252:366;;;:::o;9624:419::-;9790:4;9828:2;9817:9;9813:18;9805:26;;9877:9;9871:4;9867:20;9863:1;9852:9;9848:17;9841:47;9905:131;10031:4;9905:131;:::i;:::-;9897:139;;9624:419;;;:::o;10049:180::-;10097:77;10094:1;10087:88;10194:4;10191:1;10184:15;10218:4;10215:1;10208:15;10235:348;10275:7;10298:20;10316:1;10298:20;:::i;:::-;10293:25;;10332:20;10350:1;10332:20;:::i;:::-;10327:25;;10520:1;10452:66;10448:74;10445:1;10442:81;10437:1;10430:9;10423:17;10419:105;10416:131;;;10527:18;;:::i;:::-;10416:131;10575:1;10572;10568:9;10557:20;;10235:348;;;;:::o;10589:180::-;10637:77;10634:1;10627:88;10734:4;10731:1;10724:15;10758:4;10755:1;10748:15;10775:185;10815:1;10832:20;10850:1;10832:20;:::i;:::-;10827:25;;10866:20;10884:1;10866:20;:::i;:::-;10861:25;;10905:1;10895:35;;10910:18;;:::i;:::-;10895:35;10952:1;10949;10945:9;10940:14;;10775:185;;;;:::o;10966:234::-;11106:34;11102:1;11094:6;11090:14;11083:58;11175:17;11170:2;11162:6;11158:15;11151:42;10966:234;:::o;11206:366::-;11348:3;11369:67;11433:2;11428:3;11369:67;:::i;:::-;11362:74;;11445:93;11534:3;11445:93;:::i;:::-;11563:2;11558:3;11554:12;11547:19;;11206:366;;;:::o;11578:419::-;11744:4;11782:2;11771:9;11767:18;11759:26;;11831:9;11825:4;11821:20;11817:1;11806:9;11802:17;11795:47;11859:131;11985:4;11859:131;:::i;:::-;11851:139;;11578:419;;;:::o;12003:227::-;12143:34;12139:1;12131:6;12127:14;12120:58;12212:10;12207:2;12199:6;12195:15;12188:35;12003:227;:::o;12236:366::-;12378:3;12399:67;12463:2;12458:3;12399:67;:::i;:::-;12392:74;;12475:93;12564:3;12475:93;:::i;:::-;12593:2;12588:3;12584:12;12577:19;;12236:366;;;:::o;12608:419::-;12774:4;12812:2;12801:9;12797:18;12789:26;;12861:9;12855:4;12851:20;12847:1;12836:9;12832:17;12825:47;12889:131;13015:4;12889:131;:::i;:::-;12881:139;;12608:419;;;:::o;13033:305::-;13073:3;13092:20;13110:1;13092:20;:::i;:::-;13087:25;;13126:20;13144:1;13126:20;:::i;:::-;13121:25;;13280:1;13212:66;13208:74;13205:1;13202:81;13199:107;;;13286:18;;:::i;:::-;13199:107;13330:1;13327;13323:9;13316:16;;13033:305;;;;:::o;13344:179::-;13484:31;13480:1;13472:6;13468:14;13461:55;13344:179;:::o;13529:366::-;13671:3;13692:67;13756:2;13751:3;13692:67;:::i;:::-;13685:74;;13768:93;13857:3;13768:93;:::i;:::-;13886:2;13881:3;13877:12;13870:19;;13529:366;;;:::o;13901:419::-;14067:4;14105:2;14094:9;14090:18;14082:26;;14154:9;14148:4;14144:20;14140:1;14129:9;14125:17;14118:47;14182:131;14308:4;14182:131;:::i;:::-;14174:139;;13901:419;;;:::o;14326:238::-;14466:34;14462:1;14454:6;14450:14;14443:58;14535:21;14530:2;14522:6;14518:15;14511:46;14326:238;:::o;14570:366::-;14712:3;14733:67;14797:2;14792:3;14733:67;:::i;:::-;14726:74;;14809:93;14898:3;14809:93;:::i;:::-;14927:2;14922:3;14918:12;14911:19;;14570:366;;;:::o;14942:419::-;15108:4;15146:2;15135:9;15131:18;15123:26;;15195:9;15189:4;15185:20;15181:1;15170:9;15166:17;15159:47;15223:131;15349:4;15223:131;:::i;:::-;15215:139;;14942:419;;;:::o;15367:235::-;15507:34;15503:1;15495:6;15491:14;15484:58;15576:18;15571:2;15563:6;15559:15;15552:43;15367:235;:::o;15608:366::-;15750:3;15771:67;15835:2;15830:3;15771:67;:::i;:::-;15764:74;;15847:93;15936:3;15847:93;:::i;:::-;15965:2;15960:3;15956:12;15949:19;;15608:366;;;:::o;15980:419::-;16146:4;16184:2;16173:9;16169:18;16161:26;;16233:9;16227:4;16223:20;16219:1;16208:9;16204:17;16197:47;16261:131;16387:4;16261:131;:::i;:::-;16253:139;;15980:419;;;:::o;16405:118::-;16476:22;16492:5;16476:22;:::i;:::-;16469:5;16466:33;16456:61;;16513:1;16510;16503:12;16456:61;16405:118;:::o;16529:139::-;16584:5;16615:6;16609:13;16600:22;;16631:31;16656:5;16631:31;:::i;:::-;16529:139;;;;:::o;16674:347::-;16742:6;16791:2;16779:9;16770:7;16766:23;16762:32;16759:119;;;16797:79;;:::i;:::-;16759:119;16917:1;16942:62;16996:7;16987:6;16976:9;16972:22;16942:62;:::i;:::-;16932:72;;16888:126;16674:347;;;;:::o;17027:143::-;17084:5;17115:6;17109:13;17100:22;;17131:33;17158:5;17131:33;:::i;:::-;17027:143;;;;:::o;17176:351::-;17246:6;17295:2;17283:9;17274:7;17270:23;17266:32;17263:119;;;17301:79;;:::i;:::-;17263:119;17421:1;17446:64;17502:7;17493:6;17482:9;17478:22;17446:64;:::i;:::-;17436:74;;17392:128;17176:351;;;;:::o;17533:332::-;17654:4;17692:2;17681:9;17677:18;17669:26;;17705:71;17773:1;17762:9;17758:17;17749:6;17705:71;:::i;:::-;17786:72;17854:2;17843:9;17839:18;17830:6;17786:72;:::i;:::-;17533:332;;;;;:::o;17871:114::-;17908:7;17948:30;17941:5;17937:42;17926:53;;17871:114;;;:::o;17991:122::-;18064:24;18082:5;18064:24;:::i;:::-;18057:5;18054:35;18044:63;;18103:1;18100;18093:12;18044:63;17991:122;:::o;18119:143::-;18176:5;18207:6;18201:13;18192:22;;18223:33;18250:5;18223:33;:::i;:::-;18119:143;;;;:::o;18268:93::-;18304:7;18344:10;18337:5;18333:22;18322:33;;18268:93;;;:::o;18367:120::-;18439:23;18456:5;18439:23;:::i;:::-;18432:5;18429:34;18419:62;;18477:1;18474;18467:12;18419:62;18367:120;:::o;18493:141::-;18549:5;18580:6;18574:13;18565:22;;18596:32;18622:5;18596:32;:::i;:::-;18493:141;;;;:::o;18640:661::-;18727:6;18735;18743;18792:2;18780:9;18771:7;18767:23;18763:32;18760:119;;;18798:79;;:::i;:::-;18760:119;18918:1;18943:64;18999:7;18990:6;18979:9;18975:22;18943:64;:::i;:::-;18933:74;;18889:128;19056:2;19082:64;19138:7;19129:6;19118:9;19114:22;19082:64;:::i;:::-;19072:74;;19027:129;19195:2;19221:63;19276:7;19267:6;19256:9;19252:22;19221:63;:::i;:::-;19211:73;;19166:128;18640:661;;;;;:::o;19307:102::-;19349:8;19396:5;19393:1;19389:13;19368:34;;19307:102;;;:::o;19415:848::-;19476:5;19483:4;19507:6;19498:15;;19531:5;19522:14;;19545:712;19566:1;19556:8;19553:15;19545:712;;;19661:4;19656:3;19652:14;19646:4;19643:24;19640:50;;;19670:18;;:::i;:::-;19640:50;19720:1;19710:8;19706:16;19703:451;;;20135:4;20128:5;20124:16;20115:25;;19703:451;20185:4;20179;20175:15;20167:23;;20215:32;20238:8;20215:32;:::i;:::-;20203:44;;19545:712;;;19415:848;;;;;;;:::o;20269:1073::-;20323:5;20514:8;20504:40;;20535:1;20526:10;;20537:5;;20504:40;20563:4;20553:36;;20580:1;20571:10;;20582:5;;20553:36;20649:4;20697:1;20692:27;;;;20733:1;20728:191;;;;20642:277;;20692:27;20710:1;20701:10;;20712:5;;;20728:191;20773:3;20763:8;20760:17;20757:43;;;20780:18;;:::i;:::-;20757:43;20829:8;20826:1;20822:16;20813:25;;20864:3;20857:5;20854:14;20851:40;;;20871:18;;:::i;:::-;20851:40;20904:5;;;20642:277;;21028:2;21018:8;21015:16;21009:3;21003:4;21000:13;20996:36;20978:2;20968:8;20965:16;20960:2;20954:4;20951:12;20947:35;20931:111;20928:246;;;21084:8;21078:4;21074:19;21065:28;;21119:3;21112:5;21109:14;21106:40;;;21126:18;;:::i;:::-;21106:40;21159:5;;20928:246;21199:42;21237:3;21227:8;21221:4;21218:1;21199:42;:::i;:::-;21184:57;;;;21273:4;21268:3;21264:14;21257:5;21254:25;21251:51;;;21282:18;;:::i;:::-;21251:51;21331:4;21324:5;21320:16;21311:25;;20269:1073;;;;;;:::o;21348:285::-;21408:5;21432:23;21450:4;21432:23;:::i;:::-;21424:31;;21476:27;21494:8;21476:27;:::i;:::-;21464:39;;21522:104;21559:66;21549:8;21543:4;21522:104;:::i;:::-;21513:113;;21348:285;;;;:::o;21639:148::-;21741:11;21778:3;21763:18;;21639:148;;;;:::o;21793:377::-;21899:3;21927:39;21960:5;21927:39;:::i;:::-;21982:89;22064:6;22059:3;21982:89;:::i;:::-;21975:96;;22080:52;22125:6;22120:3;22113:4;22106:5;22102:16;22080:52;:::i;:::-;22157:6;22152:3;22148:16;22141:23;;21903:267;21793:377;;;;:::o;22176:435::-;22356:3;22378:95;22469:3;22460:6;22378:95;:::i;:::-;22371:102;;22490:95;22581:3;22572:6;22490:95;:::i;:::-;22483:102;;22602:3;22595:10;;22176:435;;;;;:::o;22617:244::-;22757:34;22753:1;22745:6;22741:14;22734:58;22826:27;22821:2;22813:6;22809:15;22802:52;22617:244;:::o;22867:366::-;23009:3;23030:67;23094:2;23089:3;23030:67;:::i;:::-;23023:74;;23106:93;23195:3;23106:93;:::i;:::-;23224:2;23219:3;23215:12;23208:19;;22867:366;;;:::o;23239:419::-;23405:4;23443:2;23432:9;23428:18;23420:26;;23492:9;23486:4;23482:20;23478:1;23467:9;23463:17;23456:47;23520:131;23646:4;23520:131;:::i;:::-;23512:139;;23239:419;;;:::o;23664:224::-;23804:34;23800:1;23792:6;23788:14;23781:58;23873:7;23868:2;23860:6;23856:15;23849:32;23664:224;:::o;23894:366::-;24036:3;24057:67;24121:2;24116:3;24057:67;:::i;:::-;24050:74;;24133:93;24222:3;24133:93;:::i;:::-;24251:2;24246:3;24242:12;24235:19;;23894:366;;;:::o;24266:419::-;24432:4;24470:2;24459:9;24455:18;24447:26;;24519:9;24513:4;24509:20;24505:1;24494:9;24490:17;24483:47;24547:131;24673:4;24547:131;:::i;:::-;24539:139;;24266:419;;;:::o;24691:223::-;24831:34;24827:1;24819:6;24815:14;24808:58;24900:6;24895:2;24887:6;24883:15;24876:31;24691:223;:::o;24920:366::-;25062:3;25083:67;25147:2;25142:3;25083:67;:::i;:::-;25076:74;;25159:93;25248:3;25159:93;:::i;:::-;25277:2;25272:3;25268:12;25261:19;;24920:366;;;:::o;25292:419::-;25458:4;25496:2;25485:9;25481:18;25473:26;;25545:9;25539:4;25535:20;25531:1;25520:9;25516:17;25509:47;25573:131;25699:4;25573:131;:::i;:::-;25565:139;;25292:419;;;:::o;25717:240::-;25857:34;25853:1;25845:6;25841:14;25834:58;25926:23;25921:2;25913:6;25909:15;25902:48;25717:240;:::o;25963:366::-;26105:3;26126:67;26190:2;26185:3;26126:67;:::i;:::-;26119:74;;26202:93;26291:3;26202:93;:::i;:::-;26320:2;26315:3;26311:12;26304:19;;25963:366;;;:::o;26335:419::-;26501:4;26539:2;26528:9;26524:18;26516:26;;26588:9;26582:4;26578:20;26574:1;26563:9;26559:17;26552:47;26616:131;26742:4;26616:131;:::i;:::-;26608:139;;26335:419;;;:::o;26760:239::-;26900:34;26896:1;26888:6;26884:14;26877:58;26969:22;26964:2;26956:6;26952:15;26945:47;26760:239;:::o;27005:366::-;27147:3;27168:67;27232:2;27227:3;27168:67;:::i;:::-;27161:74;;27244:93;27333:3;27244:93;:::i;:::-;27362:2;27357:3;27353:12;27346:19;;27005:366;;;:::o;27377:419::-;27543:4;27581:2;27570:9;27566:18;27558:26;;27630:9;27624:4;27620:20;27616:1;27605:9;27601:17;27594:47;27658:131;27784:4;27658:131;:::i;:::-;27650:139;;27377:419;;;:::o;27802:225::-;27942:34;27938:1;27930:6;27926:14;27919:58;28011:8;28006:2;27998:6;27994:15;27987:33;27802:225;:::o;28033:366::-;28175:3;28196:67;28260:2;28255:3;28196:67;:::i;:::-;28189:74;;28272:93;28361:3;28272:93;:::i;:::-;28390:2;28385:3;28381:12;28374:19;;28033:366;;;:::o;28405:419::-;28571:4;28609:2;28598:9;28594:18;28586:26;;28658:9;28652:4;28648:20;28644:1;28633:9;28629:17;28622:47;28686:131;28812:4;28686:131;:::i;:::-;28678:139;;28405:419;;;:::o;28830:223::-;28970:34;28966:1;28958:6;28954:14;28947:58;29039:6;29034:2;29026:6;29022:15;29015:31;28830:223;:::o;29059:366::-;29201:3;29222:67;29286:2;29281:3;29222:67;:::i;:::-;29215:74;;29298:93;29387:3;29298:93;:::i;:::-;29416:2;29411:3;29407:12;29400:19;;29059:366;;;:::o;29431:419::-;29597:4;29635:2;29624:9;29620:18;29612:26;;29684:9;29678:4;29674:20;29670:1;29659:9;29655:17;29648:47;29712:131;29838:4;29712:131;:::i;:::-;29704:139;;29431:419;;;:::o;29856:221::-;29996:34;29992:1;29984:6;29980:14;29973:58;30065:4;30060:2;30052:6;30048:15;30041:29;29856:221;:::o;30083:366::-;30225:3;30246:67;30310:2;30305:3;30246:67;:::i;:::-;30239:74;;30322:93;30411:3;30322:93;:::i;:::-;30440:2;30435:3;30431:12;30424:19;;30083:366;;;:::o;30455:419::-;30621:4;30659:2;30648:9;30644:18;30636:26;;30708:9;30702:4;30698:20;30694:1;30683:9;30679:17;30672:47;30736:131;30862:4;30736:131;:::i;:::-;30728:139;;30455:419;;;:::o;30880:224::-;31020:34;31016:1;31008:6;31004:14;30997:58;31089:7;31084:2;31076:6;31072:15;31065:32;30880:224;:::o;31110:366::-;31252:3;31273:67;31337:2;31332:3;31273:67;:::i;:::-;31266:74;;31349:93;31438:3;31349:93;:::i;:::-;31467:2;31462:3;31458:12;31451:19;;31110:366;;;:::o;31482:419::-;31648:4;31686:2;31675:9;31671:18;31663:26;;31735:9;31729:4;31725:20;31721:1;31710:9;31706:17;31699:47;31763:131;31889:4;31763:131;:::i;:::-;31755:139;;31482:419;;;:::o;31907:222::-;32047:34;32043:1;32035:6;32031:14;32024:58;32116:5;32111:2;32103:6;32099:15;32092:30;31907:222;:::o;32135:366::-;32277:3;32298:67;32362:2;32357:3;32298:67;:::i;:::-;32291:74;;32374:93;32463:3;32374:93;:::i;:::-;32492:2;32487:3;32483:12;32476:19;;32135:366;;;:::o;32507:419::-;32673:4;32711:2;32700:9;32696:18;32688:26;;32760:9;32754:4;32750:20;32746:1;32735:9;32731:17;32724:47;32788:131;32914:4;32788:131;:::i;:::-;32780:139;;32507:419;;;:::o;32932:172::-;33072:24;33068:1;33060:6;33056:14;33049:48;32932:172;:::o;33110:366::-;33252:3;33273:67;33337:2;33332:3;33273:67;:::i;:::-;33266:74;;33349:93;33438:3;33349:93;:::i;:::-;33467:2;33462:3;33458:12;33451:19;;33110:366;;;:::o;33482:419::-;33648:4;33686:2;33675:9;33671:18;33663:26;;33735:9;33729:4;33725:20;33721:1;33710:9;33706:17;33699:47;33763:131;33889:4;33763:131;:::i;:::-;33755:139;;33482:419;;;:::o;33907:297::-;34047:34;34043:1;34035:6;34031:14;34024:58;34116:34;34111:2;34103:6;34099:15;34092:59;34185:11;34180:2;34172:6;34168:15;34161:36;33907:297;:::o;34210:366::-;34352:3;34373:67;34437:2;34432:3;34373:67;:::i;:::-;34366:74;;34449:93;34538:3;34449:93;:::i;:::-;34567:2;34562:3;34558:12;34551:19;;34210:366;;;:::o;34582:419::-;34748:4;34786:2;34775:9;34771:18;34763:26;;34835:9;34829:4;34825:20;34821:1;34810:9;34806:17;34799:47;34863:131;34989:4;34863:131;:::i;:::-;34855:139;;34582:419;;;:::o;35007:240::-;35147:34;35143:1;35135:6;35131:14;35124:58;35216:23;35211:2;35203:6;35199:15;35192:48;35007:240;:::o;35253:366::-;35395:3;35416:67;35480:2;35475:3;35416:67;:::i;:::-;35409:74;;35492:93;35581:3;35492:93;:::i;:::-;35610:2;35605:3;35601:12;35594:19;;35253:366;;;:::o;35625:419::-;35791:4;35829:2;35818:9;35814:18;35806:26;;35878:9;35872:4;35868:20;35864:1;35853:9;35849:17;35842:47;35906:131;36032:4;35906:131;:::i;:::-;35898:139;;35625:419;;;:::o;36050:169::-;36190:21;36186:1;36178:6;36174:14;36167:45;36050:169;:::o;36225:366::-;36367:3;36388:67;36452:2;36447:3;36388:67;:::i;:::-;36381:74;;36464:93;36553:3;36464:93;:::i;:::-;36582:2;36577:3;36573:12;36566:19;;36225:366;;;:::o;36597:419::-;36763:4;36801:2;36790:9;36786:18;36778:26;;36850:9;36844:4;36840:20;36836:1;36825:9;36821:17;36814:47;36878:131;37004:4;36878:131;:::i;:::-;36870:139;;36597:419;;;:::o;37022:241::-;37162:34;37158:1;37150:6;37146:14;37139:58;37231:24;37226:2;37218:6;37214:15;37207:49;37022:241;:::o;37269:366::-;37411:3;37432:67;37496:2;37491:3;37432:67;:::i;:::-;37425:74;;37508:93;37597:3;37508:93;:::i;:::-;37626:2;37621:3;37617:12;37610:19;;37269:366;;;:::o;37641:419::-;37807:4;37845:2;37834:9;37830:18;37822:26;;37894:9;37888:4;37884:20;37880:1;37869:9;37865:17;37858:47;37922:131;38048:4;37922:131;:::i;:::-;37914:139;;37641:419;;;:::o;38066:191::-;38106:4;38126:20;38144:1;38126:20;:::i;:::-;38121:25;;38160:20;38178:1;38160:20;:::i;:::-;38155:25;;38199:1;38196;38193:8;38190:34;;;38204:18;;:::i;:::-;38190:34;38249:1;38246;38242:9;38234:17;;38066:191;;;;:::o;38263:180::-;38311:77;38308:1;38301:88;38408:4;38405:1;38398:15;38432:4;38429:1;38422:15;38449:180;38497:77;38494:1;38487:88;38594:4;38591:1;38584:15;38618:4;38615:1;38608:15;38635:233;38674:3;38697:24;38715:5;38697:24;:::i;:::-;38688:33;;38743:66;38736:5;38733:77;38730:103;;38813:18;;:::i;:::-;38730:103;38860:1;38853:5;38849:13;38842:20;;38635:233;;;:::o;38874:151::-;39014:3;39010:1;39002:6;38998:14;38991:27;38874:151;:::o;39031:400::-;39191:3;39212:84;39294:1;39289:3;39212:84;:::i;:::-;39205:91;;39305:93;39394:3;39305:93;:::i;:::-;39423:1;39418:3;39414:11;39407:18;;39031:400;;;:::o;39437:701::-;39718:3;39740:95;39831:3;39822:6;39740:95;:::i;:::-;39733:102;;39852:148;39996:3;39852:148;:::i;:::-;39845:155;;40017:95;40108:3;40099:6;40017:95;:::i;:::-;40010:102;;40129:3;40122:10;;39437:701;;;;;:::o;40144:152::-;40284:4;40280:1;40272:6;40268:14;40261:28;40144:152;:::o;40302:400::-;40462:3;40483:84;40565:1;40560:3;40483:84;:::i;:::-;40476:91;;40576:93;40665:3;40576:93;:::i;:::-;40694:1;40689:3;40685:11;40678:18;;40302:400;;;:::o;40708:541::-;40941:3;40963:148;41107:3;40963:148;:::i;:::-;40956:155;;41128:95;41219:3;41210:6;41128:95;:::i;:::-;41121:102;;41240:3;41233:10;;40708:541;;;;:::o;41255:225::-;41395:34;41391:1;41383:6;41379:14;41372:58;41464:8;41459:2;41451:6;41447:15;41440:33;41255:225;:::o;41486:366::-;41628:3;41649:67;41713:2;41708:3;41649:67;:::i;:::-;41642:74;;41725:93;41814:3;41725:93;:::i;:::-;41843:2;41838:3;41834:12;41827:19;;41486:366;;;:::o;41858:419::-;42024:4;42062:2;42051:9;42047:18;42039:26;;42111:9;42105:4;42101:20;42097:1;42086:9;42082:17;42075:47;42139:131;42265:4;42139:131;:::i;:::-;42131:139;;41858:419;;;:::o;42283:147::-;42384:11;42421:3;42406:18;;42283:147;;;;:::o;42436:114::-;;:::o;42556:398::-;42715:3;42736:83;42817:1;42812:3;42736:83;:::i;:::-;42729:90;;42828:93;42917:3;42828:93;:::i;:::-;42946:1;42941:3;42937:11;42930:18;;42556:398;;;:::o;42960:379::-;43144:3;43166:147;43309:3;43166:147;:::i;:::-;43159:154;;43330:3;43323:10;;42960:379;;;:::o;43345:176::-;43377:1;43394:20;43412:1;43394:20;:::i;:::-;43389:25;;43428:20;43446:1;43428:20;:::i;:::-;43423:25;;43467:1;43457:35;;43472:18;;:::i;:::-;43457:35;43513:1;43510;43506:9;43501:14;;43345:176;;;;:::o;43527:85::-;43572:7;43601:5;43590:16;;43527:85;;;:::o;43618:158::-;43676:9;43709:61;43727:42;43736:32;43762:5;43736:32;:::i;:::-;43727:42;:::i;:::-;43709:61;:::i;:::-;43696:74;;43618:158;;;:::o;43782:147::-;43877:45;43916:5;43877:45;:::i;:::-;43872:3;43865:58;43782:147;;:::o;43935:114::-;44002:6;44036:5;44030:12;44020:22;;43935:114;;;:::o;44055:184::-;44154:11;44188:6;44183:3;44176:19;44228:4;44223:3;44219:14;44204:29;;44055:184;;;;:::o;44245:132::-;44312:4;44335:3;44327:11;;44365:4;44360:3;44356:14;44348:22;;44245:132;;;:::o;44383:108::-;44460:24;44478:5;44460:24;:::i;:::-;44455:3;44448:37;44383:108;;:::o;44497:179::-;44566:10;44587:46;44629:3;44621:6;44587:46;:::i;:::-;44665:4;44660:3;44656:14;44642:28;;44497:179;;;;:::o;44682:113::-;44752:4;44784;44779:3;44775:14;44767:22;;44682:113;;;:::o;44831:732::-;44950:3;44979:54;45027:5;44979:54;:::i;:::-;45049:86;45128:6;45123:3;45049:86;:::i;:::-;45042:93;;45159:56;45209:5;45159:56;:::i;:::-;45238:7;45269:1;45254:284;45279:6;45276:1;45273:13;45254:284;;;45355:6;45349:13;45382:63;45441:3;45426:13;45382:63;:::i;:::-;45375:70;;45468:60;45521:6;45468:60;:::i;:::-;45458:70;;45314:224;45301:1;45298;45294:9;45289:14;;45254:284;;;45258:14;45554:3;45547:10;;44955:608;;;44831:732;;;;:::o;45569:831::-;45832:4;45870:3;45859:9;45855:19;45847:27;;45884:71;45952:1;45941:9;45937:17;45928:6;45884:71;:::i;:::-;45965:80;46041:2;46030:9;46026:18;46017:6;45965:80;:::i;:::-;46092:9;46086:4;46082:20;46077:2;46066:9;46062:18;46055:48;46120:108;46223:4;46214:6;46120:108;:::i;:::-;46112:116;;46238:72;46306:2;46295:9;46291:18;46282:6;46238:72;:::i;:::-;46320:73;46388:3;46377:9;46373:19;46364:6;46320:73;:::i;:::-;45569:831;;;;;;;;:::o

Swarm Source

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