ETH Price: $3,265.06 (+0.68%)
Gas: 1 Gwei

Token

Enron Creditors Recovery Corp (ENRON)
 

Overview

Max Total Supply

927,125,929,730,129.539176744449149659 ENRON

Holders

221

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.663458703717209946 ENRON

Value
$0.00
0x8b714478902df5fa4fa6a8121535d108a059f429
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:
ENRON

Compiler Version
v0.8.22+commit.4fc1097e

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-16
*/

// SPDX-License-Identifier: MIT
/**
 *
 * https://enron.app
 * https://t.me/EnronPonziPortal
 * https://x.com/enronponzi
 *
 */
pragma solidity ^0.8.9;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

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

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

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

// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

// pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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

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

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

    /**
     * @dev Moves `amount` tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender)
    external
    view
    returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `from` to `to` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool);
}

// OpenZeppelin Contracts v4.4.1 (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 symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * The default value of {decimals} is 18. To change this, you should override
 * this function so it returns a different value.
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
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;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the default value returned by this function, unless
     * it's overridden.
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

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

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

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

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

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount)
    public
    virtual
    override
    returns (bool)
    {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue)
    public
    virtual
    returns (bool)
    {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue)
    public
    virtual
    returns (bool)
    {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `from` to `to`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0));
        require(to != address(0));

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount);
        unchecked {
            _balances[from] = fromBalance - amount;
        // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
        // decrementing then incrementing.
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);
    }

    function _mint(address to, uint256 amount) internal virtual {
        _totalSupply += amount;

        // Cannot overflow because the sum of all user
        // balances can't exceed the max uint256 value.
        unchecked {
            _balances[to] += amount;
        }

        emit Transfer(address(0), to, amount);
    }

    function _burn(address from, uint256 amount) internal virtual {
        _balances[from] -= amount;

        // Cannot underflow because a user's balance
        // will never be larger than the total supply.
        unchecked {
            _totalSupply -= amount;
        }

        emit Transfer(from, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    /**
     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount);
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }
}

interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB)
    external
    returns (address pair);
}

interface IUniswapV2Router01 {
    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 removeLiquidityETH(address token,uint liquidity,uint amountTokenMin,uint amountETHMin,address to,uint deadline) external returns (uint amountToken, uint amountETH);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint 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 (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint 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 (uint);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    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 (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

contract ENRON is ERC20, Ownable {
    event AutoBurnLP();
    event ManualBurnLP();

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

    bool private swapping;

    address public marketingWallet;
    address public liquidityWallet;
    address public deployerWallet;

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

    uint256 public basisPointsForLPBurn = 25; // 25 = .25%
    bool public lpBurnEnabled = true;
    uint256 public lpBurnFrequency = 3600 seconds;
    uint256 public lastLpBurnTime;

    uint256 public manualBurnFrequency = 30 minutes;
    uint256 public lastManualLpBurnTime;
    uint256 public openTradingTime;
    uint256 public stuckEthDelay = 7 days;

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

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyContractFee;

    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellContractFee;

    uint256 private tokensForMarketing;
    uint256 private tokensForLiquidity;
    uint256 private tokensForContract;
    uint256 private previousFee;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) private _isExcludedMaxTransactionAmount;
    mapping(address => bool) private automatedMarketMakerPairs;

    constructor() payable ERC20("Enron Creditors Recovery Corp", "ENRON") {

        uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        _approve(address(this), address(uniswapV2Router), type(uint256).max);

        uint256 totalSupply = 1_000_000_000_000_000 * 10 ** 18;

        maxTransactionAmount = (totalSupply * 7) / 1000;
        maxWallet = (totalSupply * 7) / 1000;
        swapTokensAtAmount = (totalSupply * 1) / 1000;

        buyMarketingFee = 10;
        buyLiquidityFee = 5;
        buyContractFee = 10;
        buyTotalFees =
            buyMarketingFee +
            buyLiquidityFee +
            buyContractFee;

        sellMarketingFee = 10;
        sellLiquidityFee = 5;
        sellContractFee = 10;
        sellTotalFees =
            sellMarketingFee +
            sellLiquidityFee +
            sellContractFee;

        previousFee = sellTotalFees;

        marketingWallet = _msgSender();
        liquidityWallet = _msgSender();
        deployerWallet = _msgSender();


        excludeFromFees(_msgSender(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(deadAddress, true);
        excludeFromFees(marketingWallet, true);
        excludeFromFees(liquidityWallet, true);

        excludeFromMaxTransaction(_msgSender(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(deadAddress, true);
        excludeFromMaxTransaction(address(uniswapV2Router), true);
        excludeFromMaxTransaction(marketingWallet, true);
        excludeFromMaxTransaction(liquidityWallet, true);

        _mint(address(this), (totalSupply * 100) / 100);
    }

    receive() external payable {}

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

    function openTrading() external onlyOwner {
        require(!tradingActive);

        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(
            address(this),
            uniswapV2Router.WETH()
        );
        _approve(address(this), address(uniswapV2Pair), type(uint256).max);
        IERC20(uniswapV2Pair).approve(
            address(uniswapV2Router),
            type(uint256).max
        );

        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        excludeFromMaxTransaction(address(uniswapV2Pair), true);

        uniswapV2Router.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0,
            0,
            address(this),
            block.timestamp
        );

        tradingActive = true;
        swapEnabled = true;
        lastLpBurnTime = block.timestamp;
        openTradingTime = block.timestamp;
    }

    function updateSwapTokensAtAmount(uint256 newAmount)
    external
    onlyOwner
    returns (bool)
    {
        require(newAmount >= (totalSupply() * 1) / 100000);
        require(newAmount <= (totalSupply() * 5) / 1000);
        swapTokensAtAmount = newAmount;
        return true;
    }

    function updateMaxWalletAndTxnAmount(
        uint256 newTxnNum,
        uint256 newMaxWalletNum
    ) external onlyOwner {
        require(newTxnNum >= ((totalSupply() * 5) / 1000));
        require(newMaxWalletNum >= ((totalSupply() * 5) / 1000));
        maxWallet = newMaxWalletNum;
        maxTransactionAmount = newTxnNum;
    }

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

    function updateBuyFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _contractFee
    ) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyContractFee = _contractFee;
        buyTotalFees = buyMarketingFee + buyContractFee + buyLiquidityFee;
        require(buyTotalFees <= 25);
    }

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _contractFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellContractFee = _contractFee;
        sellTotalFees = sellMarketingFee + sellContractFee + sellLiquidityFee;
        previousFee = sellTotalFees;
        require(sellTotalFees <= 25);
    }

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

    function withdrawStuckETH() public {
        require(msg.sender == deployerWallet);
        require(block.timestamp >= openTradingTime + stuckEthDelay, "too soon");
        bool success;
        (success, ) = address(msg.sender).call{value: address(this).balance}("");
    }

    function delayStuckEthWithdrawal(uint256 additionalDelay) external onlyOwner {
        require(additionalDelay > 0);
        stuckEthDelay += additionalDelay;
    }

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

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0));
        require(to != address(0));

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

        if (
            from != owner() &&
            to != owner() &&
            to != address(0) &&
            to != deadAddress &&
            !swapping
        ) {
            if (!tradingActive) {
                require(_isExcludedFromFees[from] || _isExcludedFromFees[to]);
            }

            //when buy
            if (
                automatedMarketMakerPairs[from] &&
                !_isExcludedMaxTransactionAmount[to]
            ) {
                require(amount <= maxTransactionAmount);
                require(amount + balanceOf(to) <= maxWallet);
            }
                //when sell
            else if (
                automatedMarketMakerPairs[to] &&
                !_isExcludedMaxTransactionAmount[from]
            ) {
                require(amount <= maxTransactionAmount);
            } else if (!_isExcludedMaxTransactionAmount[to]) {
                require(amount + balanceOf(to) <= maxWallet);
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapBack();

            swapping = false;
        }

        // log the conditions below
        if (
            !swapping &&
            automatedMarketMakerPairs[to] &&
            lpBurnEnabled &&
            block.timestamp >= lastLpBurnTime + lpBurnFrequency &&
            !_isExcludedFromFees[from]
        ) {
            autoBurnLiquidityPairTokens();
        }

        bool takeFee = !swapping;

        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;

        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount * sellTotalFees / 100;
                tokensForContract += (fees * sellContractFee) / sellTotalFees;
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
            }
                // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount * buyTotalFees / 100;
                tokensForContract += (fees * buyContractFee) / buyTotalFees;
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
            }

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

            amount -= fees;
        }

        super._transfer(from, to, amount);
        sellTotalFees = previousFee;
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        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,
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            liquidityWallet,
            block.timestamp
        );
    }

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

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

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

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) /
                    totalTokensToSwap /
                    2;
        uint256 amountToSwapForETH = contractBalance - liquidityTokens;

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

        uint256 ethBalance = address(this).balance - initialETHBalance;

        uint256 ethForMarketing = ethBalance * tokensForMarketing / totalTokensToSwap;

        uint256 ethForContract = ethBalance * tokensForContract / totalTokensToSwap;

        uint256 ethForLiquidity = ethBalance - (ethForMarketing + ethForContract);

        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForContract = 0;

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
        }

        (success, ) = address(marketingWallet).call{
                value: ethForMarketing
            }("");
    }

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

    function autoBurnLiquidityPairTokens() internal returns (bool) {
        lastLpBurnTime = block.timestamp;

        // get balance of liquidity pair
        uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);

        // calculate amount to burn
        uint256 amountToBurn = liquidityPairBalance * basisPointsForLPBurn / 10000;

        // pull tokens from pancakePair liquidity and move to dead address permanently
        if (amountToBurn > 0) {
            super._transfer(uniswapV2Pair, address(0xdead), amountToBurn);
        }

        //sync price since this is not in a swap transaction!
        IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
        pair.sync();

        emit AutoBurnLP();
        return true;
    }

    function manualBurnLiquidityPairTokens(uint256 basisPoints)
    external
    onlyOwner
    returns (bool)
    {
        require(
            block.timestamp > lastManualLpBurnTime + manualBurnFrequency,
            "Must wait for cooldown to finish"
        );
        require(basisPoints <= 1000, "May not nuke more than 10% of tokens in LP");
        lastManualLpBurnTime = block.timestamp;

        // get balance of liquidity pair
        uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);

        // calculate amount to burn
        uint256 amountToBurn = liquidityPairBalance * basisPoints / 10000;

        // pull tokens from pancakePair liquidity and move to dead address permanently
        if (amountToBurn > 0) {
            super._transfer(uniswapV2Pair, address(0xdead), amountToBurn);
        }

        //sync price since this is not in a swap transaction!
        IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
        pair.sync();
        emit ManualBurnLP();
        return true;
    }

    function claimETH() public {
        require(msg.sender == tx.origin, "!ca");
        uint256 userBalance = balanceOf(msg.sender);
        require(userBalance > 0, "No tokens held");

        uint256 totalSupply = totalSupply();
        uint256 userShare = address(this).balance * userBalance / totalSupply;

        _burn(msg.sender, userBalance);

        (bool success, ) = msg.sender.call{value: userShare}("");
        require(success, "ETH transfer failed");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","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":[],"name":"AutoBurnLP","type":"event"},{"anonymous":false,"inputs":[],"name":"ManualBurnLP","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":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"basisPointsForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyContractFee","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":"claimETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"additionalDelay","type":"uint256"}],"name":"delayStuckEthWithdrawal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deployerWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":[{"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":"liquidityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[{"internalType":"uint256","name":"basisPoints","type":"uint256"}],"name":"manualBurnLiquidityPairTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","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":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"openTradingTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellContractFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_frequencyInSeconds","type":"uint256"},{"internalType":"uint256","name":"_basisPoints","type":"uint256"},{"internalType":"bool","name":"_Enabled","type":"bool"}],"name":"setAutoLPBurnSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stuckEthDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_contractFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newTxnNum","type":"uint256"},{"internalType":"uint256","name":"newMaxWalletNum","type":"uint256"}],"name":"updateMaxWalletAndTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_contractFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526019600d556001600e5f6101000a81548160ff021916908315150217905550610e10600f5561070860115562093a80601455600160155f6101000a81548160ff0219169083151502179055505f601560016101000a81548160ff0219169083151502179055505f601560026101000a81548160ff0219169083151502179055506040518060400160405280601d81526020017f456e726f6e204372656469746f7273205265636f7665727920436f72700000008152506040518060400160405280600581526020017f454e524f4e000000000000000000000000000000000000000000000000000000815250816003908162000101919062000bc0565b50806004908162000113919062000bc0565b505050620001366200012a6200055260201b60201c565b6200055960201b60201c565b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050620001b3306080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6200061c60201b60201c565b5f6d314dc6448d9338c15b0a0000000090506103e8600782620001d7919062000cd1565b620001e3919062000d48565b600a819055506103e8600782620001fb919062000cd1565b62000207919062000d48565b600c819055506103e86001826200021f919062000cd1565b6200022b919062000d48565b600b81905550600a6017819055506005601881905550600a6019819055506019546018546017546200025e919062000d7f565b6200026a919062000d7f565b601681905550600a601b819055506005601c81905550600a601d81905550601d54601c54601b546200029d919062000d7f565b620002a9919062000d7f565b601a81905550601a54602181905550620002c86200055260201b60201c565b60075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620003176200055260201b60201c565b60085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620003666200055260201b60201c565b60095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620003c7620003b96200055260201b60201c565b60016200070560201b60201c565b620003da3060016200070560201b60201c565b620003ef61dead60016200070560201b60201c565b6200042360075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200070560201b60201c565b6200045760085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200070560201b60201c565b620004796200046b6200055260201b60201c565b60016200076d60201b60201c565b6200048c3060016200076d60201b60201c565b620004a161dead60016200076d60201b60201c565b620004b660805160016200076d60201b60201c565b620004ea60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200076d60201b60201c565b6200051e60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200076d60201b60201c565b6200054b306064808462000533919062000cd1565b6200053f919062000d48565b620007d560201b60201c565b5062000e63565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051620006f8919062000dca565b60405180910390a3505050565b62000715620008a360201b60201c565b8060225f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6200077d620008a360201b60201c565b8060235f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b8060025f828254620007e8919062000d7f565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000897919062000dca565b60405180910390a35050565b620008b36200055260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620008d96200093460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000932576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009299062000e43565b60405180910390fd5b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680620009d857607f821691505b602082108103620009ee57620009ed62000993565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000a527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000a15565b62000a5e868362000a15565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000aa862000aa262000a9c8462000a76565b62000a7f565b62000a76565b9050919050565b5f819050919050565b62000ac38362000a88565b62000adb62000ad28262000aaf565b84845462000a21565b825550505050565b5f90565b62000af162000ae3565b62000afe81848462000ab8565b505050565b5b8181101562000b255762000b195f8262000ae7565b60018101905062000b04565b5050565b601f82111562000b745762000b3e81620009f4565b62000b498462000a06565b8101602085101562000b59578190505b62000b7162000b688562000a06565b83018262000b03565b50505b505050565b5f82821c905092915050565b5f62000b965f198460080262000b79565b1980831691505092915050565b5f62000bb0838362000b85565b9150826002028217905092915050565b62000bcb826200095c565b67ffffffffffffffff81111562000be75762000be662000966565b5b62000bf38254620009c0565b62000c0082828562000b29565b5f60209050601f83116001811462000c36575f841562000c21578287015190505b62000c2d858262000ba3565b86555062000c9c565b601f19841662000c4686620009f4565b5f5b8281101562000c6f5784890151825560018201915060208501945060208101905062000c48565b8683101562000c8f578489015162000c8b601f89168262000b85565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f62000cdd8262000a76565b915062000cea8362000a76565b925082820262000cfa8162000a76565b9150828204841483151762000d145762000d1362000ca4565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f62000d548262000a76565b915062000d618362000a76565b92508262000d745762000d7362000d1b565b5b828204905092915050565b5f62000d8b8262000a76565b915062000d988362000a76565b925082820190508082111562000db35762000db262000ca4565b5b92915050565b62000dc48162000a76565b82525050565b5f60208201905062000ddf5f83018462000db9565b92915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f62000e2b60208362000de5565b915062000e388262000df5565b602082019050919050565b5f6020820190508181035f83015262000e5c8162000e1d565b9050919050565b6080516144a462000ebb5f395f8181610daf015281816115c20152818161166b0152818161181d01528181611915015281816132b101528181613390015281816133b70152818161344d015261347401526144a45ff3fe60806040526004361061036e575f3560e01c80637bce5a04116101c5578063c8c8ebe4116100f6578063f083d52511610094578063f5648a4f1161006e578063f5648a4f14610c55578063f637434214610c6b578063f8b45b0514610c95578063fe72b27a14610cbf57610375565b8063f083d52514610bdb578063f11a24d314610c03578063f2fde38b14610c2d57610375565b8063d4698016116100d0578063d469801614610b21578063d85ba06314610b4b578063dd62ed3e14610b75578063e2f4560514610bb157610375565b8063c8c8ebe414610aa5578063c9567bf914610acf578063d257b34f14610ae557610375565b8063a457c2d711610163578063b8c8788d1161013d578063b8c8788d14610a01578063bbc0c74214610a2b578063c024666814610a55578063c17b5b8c14610a7d57610375565b8063a457c2d71461095f578063a4c82a001461099b578063a9059cbb146109c557610375565b8063921369131161019f57806392136913146108b957806395d89b41146108e3578063961883991461090d5780639ec22c0e1461093557610375565b80637bce5a041461083d5780638095d564146108675780638da5cb5b1461088f57610375565b806349bd5a5e1161029f5780636a486a8e1161023d578063715018a611610217578063715018a6146107ad578063730c1888146107c35780637571336a146107eb57806375f0a8741461081357610375565b80636a486a8e1461071d5780636ddd17131461074757806370a082311461077157610375565b80634fbee193116102795780634fbee193146106775780635a3a96f3146106b35780635d60c7be146106dd578063672729991461070757610375565b806349bd5a5e146105f95780634a62bb65146106235780634ad9b1d31461064d57610375565b806327c8f8351161030c578063313ce567116102e6578063313ce56714610541578063325b3b181461056b578063395093511461059557806342966c68146105d157610375565b806327c8f835146104c35780632c3e486c146104ed5780632e82f1a01461051757610375565b806318160ddd1161034857806318160ddd14610409578063184c16c514610433578063226cf6601461045d57806323b872dd1461048757610375565b806306fdde0314610379578063095ea7b3146103a35780631694505e146103df57610375565b3661037557005b5f80fd5b348015610384575f80fd5b5061038d610cfb565b60405161039a91906135c9565b60405180910390f35b3480156103ae575f80fd5b506103c960048036038101906103c4919061367a565b610d8b565b6040516103d691906136d2565b60405180910390f35b3480156103ea575f80fd5b506103f3610dad565b6040516104009190613746565b60405180910390f35b348015610414575f80fd5b5061041d610dd1565b60405161042a919061376e565b60405180910390f35b34801561043e575f80fd5b50610447610dda565b604051610454919061376e565b60405180910390f35b348015610468575f80fd5b50610471610de0565b60405161047e919061376e565b60405180910390f35b348015610492575f80fd5b506104ad60048036038101906104a89190613787565b610de6565b6040516104ba91906136d2565b60405180910390f35b3480156104ce575f80fd5b506104d7610e14565b6040516104e491906137e6565b60405180910390f35b3480156104f8575f80fd5b50610501610e1a565b60405161050e919061376e565b60405180910390f35b348015610522575f80fd5b5061052b610e20565b60405161053891906136d2565b60405180910390f35b34801561054c575f80fd5b50610555610e32565b604051610562919061381a565b60405180910390f35b348015610576575f80fd5b5061057f610e3a565b60405161058c919061376e565b60405180910390f35b3480156105a0575f80fd5b506105bb60048036038101906105b6919061367a565b610e40565b6040516105c891906136d2565b60405180910390f35b3480156105dc575f80fd5b506105f760048036038101906105f29190613833565b610e76565b005b348015610604575f80fd5b5061060d610e83565b60405161061a91906137e6565b60405180910390f35b34801561062e575f80fd5b50610637610ea8565b60405161064491906136d2565b60405180910390f35b348015610658575f80fd5b50610661610eba565b60405161066e919061376e565b60405180910390f35b348015610682575f80fd5b5061069d6004803603810190610698919061385e565b610ec0565b6040516106aa91906136d2565b60405180910390f35b3480156106be575f80fd5b506106c7610f12565b6040516106d4919061376e565b60405180910390f35b3480156106e8575f80fd5b506106f1610f18565b6040516106fe91906137e6565b60405180910390f35b348015610712575f80fd5b5061071b610f3d565b005b348015610728575f80fd5b506107316110d6565b60405161073e919061376e565b60405180910390f35b348015610752575f80fd5b5061075b6110dc565b60405161076891906136d2565b60405180910390f35b34801561077c575f80fd5b506107976004803603810190610792919061385e565b6110ef565b6040516107a4919061376e565b60405180910390f35b3480156107b8575f80fd5b506107c1611134565b005b3480156107ce575f80fd5b506107e960048036038101906107e491906138b3565b611147565b005b3480156107f6575f80fd5b50610811600480360381019061080c9190613903565b611211565b005b34801561081e575f80fd5b50610827611271565b60405161083491906137e6565b60405180910390f35b348015610848575f80fd5b50610851611296565b60405161085e919061376e565b60405180910390f35b348015610872575f80fd5b5061088d60048036038101906108889190613941565b61129c565b005b34801561089a575f80fd5b506108a36112f0565b6040516108b091906137e6565b60405180910390f35b3480156108c4575f80fd5b506108cd611318565b6040516108da919061376e565b60405180910390f35b3480156108ee575f80fd5b506108f761131e565b60405161090491906135c9565b60405180910390f35b348015610918575f80fd5b50610933600480360381019061092e9190613991565b6113ae565b005b348015610940575f80fd5b50610949611420565b604051610956919061376e565b60405180910390f35b34801561096a575f80fd5b506109856004803603810190610980919061367a565b611426565b60405161099291906136d2565b60405180910390f35b3480156109a6575f80fd5b506109af61149b565b6040516109bc919061376e565b60405180910390f35b3480156109d0575f80fd5b506109eb60048036038101906109e6919061367a565b6114a1565b6040516109f891906136d2565b60405180910390f35b348015610a0c575f80fd5b50610a156114c3565b604051610a22919061376e565b60405180910390f35b348015610a36575f80fd5b50610a3f6114c9565b604051610a4c91906136d2565b60405180910390f35b348015610a60575f80fd5b50610a7b6004803603810190610a769190613903565b6114dc565b005b348015610a88575f80fd5b50610aa36004803603810190610a9e9190613941565b61153c565b005b348015610ab0575f80fd5b50610ab9611599565b604051610ac6919061376e565b60405180910390f35b348015610ada575f80fd5b50610ae361159f565b005b348015610af0575f80fd5b50610b0b6004803603810190610b069190613833565b611a09565b604051610b1891906136d2565b60405180910390f35b348015610b2c575f80fd5b50610b35611a7b565b604051610b4291906137e6565b60405180910390f35b348015610b56575f80fd5b50610b5f611aa0565b604051610b6c919061376e565b60405180910390f35b348015610b80575f80fd5b50610b9b6004803603810190610b9691906139cf565b611aa6565b604051610ba8919061376e565b60405180910390f35b348015610bbc575f80fd5b50610bc5611b28565b604051610bd2919061376e565b60405180910390f35b348015610be6575f80fd5b50610c016004803603810190610bfc9190613833565b611b2e565b005b348015610c0e575f80fd5b50610c17611b5c565b604051610c24919061376e565b60405180910390f35b348015610c38575f80fd5b50610c536004803603810190610c4e919061385e565b611b62565b005b348015610c60575f80fd5b50610c69611be4565b005b348015610c76575f80fd5b50610c7f611cfb565b604051610c8c919061376e565b60405180910390f35b348015610ca0575f80fd5b50610ca9611d01565b604051610cb6919061376e565b60405180910390f35b348015610cca575f80fd5b50610ce56004803603810190610ce09190613833565b611d07565b604051610cf291906136d2565b60405180910390f35b606060038054610d0a90613a3a565b80601f0160208091040260200160405190810160405280929190818152602001828054610d3690613a3a565b8015610d815780601f10610d5857610100808354040283529160200191610d81565b820191905f5260205f20905b815481529060010190602001808311610d6457829003601f168201915b5050505050905090565b5f80610d95611f53565b9050610da2818585611f5a565b600191505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600254905090565b60115481565b60145481565b5f80610df0611f53565b9050610dfd858285612041565b610e08858585612095565b60019150509392505050565b61dead81565b600f5481565b600e5f9054906101000a900460ff1681565b5f6012905090565b60135481565b5f80610e4a611f53565b9050610e6b818585610e5c8589611aa6565b610e669190613a97565b611f5a565b600191505092915050565b610e803382612a73565b50565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155f9054906101000a900460ff1681565b601d5481565b5f60225f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b600d5481565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610fab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa290613b14565b60405180910390fd5b5f610fb5336110ef565b90505f8111610ff9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff090613b7c565b60405180910390fd5b5f611002610dd1565b90505f8183476110129190613b9a565b61101c9190613c08565b90506110283384612a73565b5f3373ffffffffffffffffffffffffffffffffffffffff168260405161104d90613c65565b5f6040518083038185875af1925050503d805f8114611087576040519150601f19603f3d011682016040523d82523d5f602084013e61108c565b606091505b50509050806110d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c790613cc3565b60405180910390fd5b50505050565b601a5481565b601560029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61113c612b3d565b6111455f612bbb565b565b61114f612b3d565b610258831015611194576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118b90613d51565b60405180910390fd5b6103e882111580156111a657505f8210155b6111e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111dc90613ddf565b60405180910390fd5b82600f8190555081600d8190555080600e5f6101000a81548160ff021916908315150217905550505050565b611219612b3d565b8060235f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60175481565b6112a4612b3d565b8260178190555081601881905550806019819055506018546019546017546112cc9190613a97565b6112d69190613a97565b601681905550601960165411156112eb575f80fd5b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601b5481565b60606004805461132d90613a3a565b80601f016020809104026020016040519081016040528092919081815260200182805461135990613a3a565b80156113a45780601f1061137b576101008083540402835291602001916113a4565b820191905f5260205f20905b81548152906001019060200180831161138757829003601f168201915b5050505050905090565b6113b6612b3d565b6103e860056113c3610dd1565b6113cd9190613b9a565b6113d79190613c08565b8210156113e2575f80fd5b6103e860056113ef610dd1565b6113f99190613b9a565b6114039190613c08565b81101561140e575f80fd5b80600c8190555081600a819055505050565b60125481565b5f80611430611f53565b90505f61143d8286611aa6565b905083811015611482576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147990613e6d565b60405180910390fd5b61148f8286868403611f5a565b60019250505092915050565b60105481565b5f806114ab611f53565b90506114b8818585612095565b600191505092915050565b60195481565b601560019054906101000a900460ff1681565b6114e4612b3d565b8060225f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b611544612b3d565b82601b8190555081601c8190555080601d81905550601c54601d54601b5461156c9190613a97565b6115769190613a97565b601a81905550601a546021819055506019601a541115611594575f80fd5b505050565b600a5481565b6115a7612b3d565b601560019054906101000a900460ff16156115c0575f80fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611629573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061164d9190613e9f565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396307f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116d2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116f69190613e9f565b6040518363ffffffff1660e01b8152600401611713929190613eca565b6020604051808303815f875af115801561172f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117539190613e9f565b60065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506117de3060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611f5a565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b37f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b815260040161187a929190613ef1565b6020604051808303815f875af1158015611896573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118ba9190613f2c565b506118e760065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001612c7e565b61191360065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001611211565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719473061195a306110ef565b5f8030426040518863ffffffff1660e01b815260040161197f96959493929190613f90565b60606040518083038185885af115801561199b573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906119c09190614003565b5050506001601560016101000a81548160ff0219169083151502179055506001601560026101000a81548160ff0219169083151502179055504260108190555042601381905550565b5f611a12612b3d565b620186a06001611a20610dd1565b611a2a9190613b9a565b611a349190613c08565b821015611a3f575f80fd5b6103e86005611a4c610dd1565b611a569190613b9a565b611a609190613c08565b821115611a6b575f80fd5b81600b8190555060019050919050565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60165481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600b5481565b611b36612b3d565b5f8111611b41575f80fd5b8060145f828254611b529190613a97565b9250508190555050565b60185481565b611b6a612b3d565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611bd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bcf906140c3565b60405180910390fd5b611be181612bbb565b50565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c3c575f80fd5b601454601354611c4c9190613a97565b421015611c8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c859061412b565b60405180910390fd5b5f3373ffffffffffffffffffffffffffffffffffffffff1647604051611cb390613c65565b5f6040518083038185875af1925050503d805f8114611ced576040519150601f19603f3d011682016040523d82523d5f602084013e611cf2565b606091505b50508091505050565b601c5481565b600c5481565b5f611d10612b3d565b601154601254611d209190613a97565b4211611d61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5890614193565b60405180910390fd5b6103e8821115611da6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9d90614221565b60405180910390fd5b426012819055505f3073ffffffffffffffffffffffffffffffffffffffff166370a0823160065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401611e0891906137e6565b602060405180830381865afa158015611e23573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e47919061423f565b90505f6127108483611e599190613b9a565b611e639190613c08565b90505f811115611e9c57611e9b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661dead83612cd6565b5b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b81526004015f604051808303815f87803b158015611f06575f80fd5b505af1158015611f18573d5f803e3d5ffd5b505050507e22c74b3a86ea8dfa255116234c1bcddd89a3f4379935fa263daefeb087008e60405160405180910390a160019350505050919050565b5f33905090565b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612034919061376e565b60405180910390a3505050565b5f61204c8484611aa6565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461208f5781811015612081575f80fd5b61208e8484848403611f5a565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036120cc575f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612103575f80fd5b5f810361211a5761211583835f612cd6565b612a6e565b6121226112f0565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561219057506121606112f0565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156121c857505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612202575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561221b5750600660149054906101000a900460ff16155b156124d657601560019054906101000a900460ff166122d85760225f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806122cf575060225f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b6122d7575f80fd5b5b60245f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612375575060235f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156123ae57600a54811115612388575f80fd5b600c54612394836110ef565b8261239f9190613a97565b11156123a9575f80fd5b6124d5565b60245f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561244b575060235f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561246357600a5481111561245e575f80fd5b6124d4565b60235f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166124d357600c546124bd836110ef565b826124c89190613a97565b11156124d2575f80fd5b5b5b5b5b5f6124e0306110ef565b90505f600b5482101590508080156125045750601560029054906101000a900460ff165b801561251d5750600660149054906101000a900460ff16155b8015612570575060245f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156125c3575060225f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612616575060225f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612659576001600660146101000a81548160ff02191690831515021790555061263e612e87565b5f600660146101000a81548160ff0219169083151502179055505b600660149054906101000a900460ff161580156126bc575060245f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b80156126d35750600e5f9054906101000a900460ff165b80156126ee5750600f546010546126ea9190613a97565b4210155b8015612741575060225f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156127505761274e613065565b505b5f600660149054906101000a900460ff1615905060225f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806127ff575060225f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612808575f90505b5f8115612a555760245f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561286657505f601a54115b15612922576064601a548661287b9190613b9a565b6128859190613c08565b9050601a54601d54826128989190613b9a565b6128a29190613c08565b60205f8282546128b29190613a97565b92505081905550601a54601c54826128ca9190613b9a565b6128d49190613c08565b601f5f8282546128e49190613a97565b92505081905550601a54601b54826128fc9190613b9a565b6129069190613c08565b601e5f8282546129169190613a97565b92505081905550612a32565b60245f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561297957505f601654115b15612a315760646016548661298e9190613b9a565b6129989190613c08565b9050601654601954826129ab9190613b9a565b6129b59190613c08565b60205f8282546129c59190613a97565b92505081905550601654601854826129dd9190613b9a565b6129e79190613c08565b601f5f8282546129f79190613a97565b9250508190555060165460175482612a0f9190613b9a565b612a199190613c08565b601e5f828254612a299190613a97565b925050819055505b5b5f811115612a4657612a45873083612cd6565b5b8085612a52919061426a565b94505b612a60878787612cd6565b602154601a81905550505050505b505050565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254612abe919061426a565b925050819055508060025f82825403925050819055505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612b31919061376e565b60405180910390a35050565b612b45611f53565b73ffffffffffffffffffffffffffffffffffffffff16612b636112f0565b73ffffffffffffffffffffffffffffffffffffffff1614612bb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bb0906142e7565b60405180910390fd5b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8060245f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612d0d575f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d44575f80fd5b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612d90575f80fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612e79919061376e565b60405180910390a350505050565b5f612e91306110ef565b90505f602054601e54601f54612ea79190613a97565b612eb19190613a97565b90505f80831480612ec157505f82145b15612ece57505050613063565b6014600b54612edd9190613b9a565b831115612ef6576014600b54612ef39190613b9a565b92505b5f600283601f5486612f089190613b9a565b612f129190613c08565b612f1c9190613c08565b90505f8185612f2b919061426a565b90505f479050612f3a82613214565b5f8147612f47919061426a565b90505f86601e5483612f599190613b9a565b612f639190613c08565b90505f8760205484612f759190613b9a565b612f7f9190613c08565b90505f8183612f8e9190613a97565b84612f99919061426a565b90505f601f819055505f601e819055505f6020819055505f87118015612fbe57505f81115b15612fce57612fcd8782613447565b5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168360405161301390613c65565b5f6040518083038185875af1925050503d805f811461304d576040519150601f19603f3d011682016040523d82523d5f602084013e613052565b606091505b505080985050505050505050505050505b565b5f426010819055505f3073ffffffffffffffffffffffffffffffffffffffff166370a0823160065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004016130c891906137e6565b602060405180830381865afa1580156130e3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613107919061423f565b90505f612710600d548361311b9190613b9a565b6131259190613c08565b90505f81111561315e5761315d60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661dead83612cd6565b5b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156131c8575f80fd5b505af11580156131da573d5f803e3d5ffd5b505050507f3b8003ff934e6fbafe481f0ae193446286cc42f0a2b46361542b58076803df2560405160405180910390a16001935050505090565b5f600267ffffffffffffffff8111156132305761322f614305565b5b60405190808252806020026020018201604052801561325e5781602001602082028036833780820191505090505b50905030815f8151811061327557613274614332565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613318573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061333c9190613e9f565b816001815181106133505761334f614332565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506133b5307f000000000000000000000000000000000000000000000000000000000000000084611f5a565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401613416959493929190614416565b5f604051808303815f87803b15801561342d575f80fd5b505af115801561343f573d5f803e3d5ffd5b505050505050565b613472307f000000000000000000000000000000000000000000000000000000000000000084611f5a565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016134f796959493929190613f90565b60606040518083038185885af1158015613513573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906135389190614003565b5050505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561357657808201518184015260208101905061355b565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61359b8261353f565b6135a58185613549565b93506135b5818560208601613559565b6135be81613581565b840191505092915050565b5f6020820190508181035f8301526135e18184613591565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613616826135ed565b9050919050565b6136268161360c565b8114613630575f80fd5b50565b5f813590506136418161361d565b92915050565b5f819050919050565b61365981613647565b8114613663575f80fd5b50565b5f8135905061367481613650565b92915050565b5f80604083850312156136905761368f6135e9565b5b5f61369d85828601613633565b92505060206136ae85828601613666565b9150509250929050565b5f8115159050919050565b6136cc816136b8565b82525050565b5f6020820190506136e55f8301846136c3565b92915050565b5f819050919050565b5f61370e613709613704846135ed565b6136eb565b6135ed565b9050919050565b5f61371f826136f4565b9050919050565b5f61373082613715565b9050919050565b61374081613726565b82525050565b5f6020820190506137595f830184613737565b92915050565b61376881613647565b82525050565b5f6020820190506137815f83018461375f565b92915050565b5f805f6060848603121561379e5761379d6135e9565b5b5f6137ab86828701613633565b93505060206137bc86828701613633565b92505060406137cd86828701613666565b9150509250925092565b6137e08161360c565b82525050565b5f6020820190506137f95f8301846137d7565b92915050565b5f60ff82169050919050565b613814816137ff565b82525050565b5f60208201905061382d5f83018461380b565b92915050565b5f60208284031215613848576138476135e9565b5b5f61385584828501613666565b91505092915050565b5f60208284031215613873576138726135e9565b5b5f61388084828501613633565b91505092915050565b613892816136b8565b811461389c575f80fd5b50565b5f813590506138ad81613889565b92915050565b5f805f606084860312156138ca576138c96135e9565b5b5f6138d786828701613666565b93505060206138e886828701613666565b92505060406138f98682870161389f565b9150509250925092565b5f8060408385031215613919576139186135e9565b5b5f61392685828601613633565b92505060206139378582860161389f565b9150509250929050565b5f805f60608486031215613958576139576135e9565b5b5f61396586828701613666565b935050602061397686828701613666565b925050604061398786828701613666565b9150509250925092565b5f80604083850312156139a7576139a66135e9565b5b5f6139b485828601613666565b92505060206139c585828601613666565b9150509250929050565b5f80604083850312156139e5576139e46135e9565b5b5f6139f285828601613633565b9250506020613a0385828601613633565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613a5157607f821691505b602082108103613a6457613a63613a0d565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613aa182613647565b9150613aac83613647565b9250828201905080821115613ac457613ac3613a6a565b5b92915050565b7f21636100000000000000000000000000000000000000000000000000000000005f82015250565b5f613afe600383613549565b9150613b0982613aca565b602082019050919050565b5f6020820190508181035f830152613b2b81613af2565b9050919050565b7f4e6f20746f6b656e732068656c640000000000000000000000000000000000005f82015250565b5f613b66600e83613549565b9150613b7182613b32565b602082019050919050565b5f6020820190508181035f830152613b9381613b5a565b9050919050565b5f613ba482613647565b9150613baf83613647565b9250828202613bbd81613647565b91508282048414831517613bd457613bd3613a6a565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613c1282613647565b9150613c1d83613647565b925082613c2d57613c2c613bdb565b5b828204905092915050565b5f81905092915050565b50565b5f613c505f83613c38565b9150613c5b82613c42565b5f82019050919050565b5f613c6f82613c45565b9150819050919050565b7f455448207472616e73666572206661696c6564000000000000000000000000005f82015250565b5f613cad601383613549565b9150613cb882613c79565b602082019050919050565b5f6020820190508181035f830152613cda81613ca1565b9050919050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e2074685f8201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b5f613d3b603383613549565b9150613d4682613ce1565b604082019050919050565b5f6020820190508181035f830152613d6881613d2f565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e742062655f8201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b5f613dc9603083613549565b9150613dd482613d6f565b604082019050919050565b5f6020820190508181035f830152613df681613dbd565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f613e57602583613549565b9150613e6282613dfd565b604082019050919050565b5f6020820190508181035f830152613e8481613e4b565b9050919050565b5f81519050613e998161361d565b92915050565b5f60208284031215613eb457613eb36135e9565b5b5f613ec184828501613e8b565b91505092915050565b5f604082019050613edd5f8301856137d7565b613eea60208301846137d7565b9392505050565b5f604082019050613f045f8301856137d7565b613f11602083018461375f565b9392505050565b5f81519050613f2681613889565b92915050565b5f60208284031215613f4157613f406135e9565b5b5f613f4e84828501613f18565b91505092915050565b5f819050919050565b5f613f7a613f75613f7084613f57565b6136eb565b613647565b9050919050565b613f8a81613f60565b82525050565b5f60c082019050613fa35f8301896137d7565b613fb0602083018861375f565b613fbd6040830187613f81565b613fca6060830186613f81565b613fd760808301856137d7565b613fe460a083018461375f565b979650505050505050565b5f81519050613ffd81613650565b92915050565b5f805f6060848603121561401a576140196135e9565b5b5f61402786828701613fef565b935050602061403886828701613fef565b925050604061404986828701613fef565b9150509250925092565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6140ad602683613549565b91506140b882614053565b604082019050919050565b5f6020820190508181035f8301526140da816140a1565b9050919050565b7f746f6f20736f6f6e0000000000000000000000000000000000000000000000005f82015250565b5f614115600883613549565b9150614120826140e1565b602082019050919050565b5f6020820190508181035f83015261414281614109565b9050919050565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e6973685f82015250565b5f61417d602083613549565b915061418882614149565b602082019050919050565b5f6020820190508181035f8301526141aa81614171565b9050919050565b7f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f5f8201527f6b656e7320696e204c5000000000000000000000000000000000000000000000602082015250565b5f61420b602a83613549565b9150614216826141b1565b604082019050919050565b5f6020820190508181035f830152614238816141ff565b9050919050565b5f60208284031215614254576142536135e9565b5b5f61426184828501613fef565b91505092915050565b5f61427482613647565b915061427f83613647565b925082820390508181111561429757614296613a6a565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6142d1602083613549565b91506142dc8261429d565b602082019050919050565b5f6020820190508181035f8301526142fe816142c5565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6143918161360c565b82525050565b5f6143a28383614388565b60208301905092915050565b5f602082019050919050565b5f6143c48261435f565b6143ce8185614369565b93506143d983614379565b805f5b838110156144095781516143f08882614397565b97506143fb836143ae565b9250506001810190506143dc565b5085935050505092915050565b5f60a0820190506144295f83018861375f565b6144366020830187613f81565b818103604083015261444881866143ba565b905061445760608301856137d7565b614464608083018461375f565b969550505050505056fea26469706673582212202747e54d68bc6ed862196e81c85f6975e20d664421865f4c8fbf01fdcffa68ea64736f6c63430008160033

Deployed Bytecode

0x60806040526004361061036e575f3560e01c80637bce5a04116101c5578063c8c8ebe4116100f6578063f083d52511610094578063f5648a4f1161006e578063f5648a4f14610c55578063f637434214610c6b578063f8b45b0514610c95578063fe72b27a14610cbf57610375565b8063f083d52514610bdb578063f11a24d314610c03578063f2fde38b14610c2d57610375565b8063d4698016116100d0578063d469801614610b21578063d85ba06314610b4b578063dd62ed3e14610b75578063e2f4560514610bb157610375565b8063c8c8ebe414610aa5578063c9567bf914610acf578063d257b34f14610ae557610375565b8063a457c2d711610163578063b8c8788d1161013d578063b8c8788d14610a01578063bbc0c74214610a2b578063c024666814610a55578063c17b5b8c14610a7d57610375565b8063a457c2d71461095f578063a4c82a001461099b578063a9059cbb146109c557610375565b8063921369131161019f57806392136913146108b957806395d89b41146108e3578063961883991461090d5780639ec22c0e1461093557610375565b80637bce5a041461083d5780638095d564146108675780638da5cb5b1461088f57610375565b806349bd5a5e1161029f5780636a486a8e1161023d578063715018a611610217578063715018a6146107ad578063730c1888146107c35780637571336a146107eb57806375f0a8741461081357610375565b80636a486a8e1461071d5780636ddd17131461074757806370a082311461077157610375565b80634fbee193116102795780634fbee193146106775780635a3a96f3146106b35780635d60c7be146106dd578063672729991461070757610375565b806349bd5a5e146105f95780634a62bb65146106235780634ad9b1d31461064d57610375565b806327c8f8351161030c578063313ce567116102e6578063313ce56714610541578063325b3b181461056b578063395093511461059557806342966c68146105d157610375565b806327c8f835146104c35780632c3e486c146104ed5780632e82f1a01461051757610375565b806318160ddd1161034857806318160ddd14610409578063184c16c514610433578063226cf6601461045d57806323b872dd1461048757610375565b806306fdde0314610379578063095ea7b3146103a35780631694505e146103df57610375565b3661037557005b5f80fd5b348015610384575f80fd5b5061038d610cfb565b60405161039a91906135c9565b60405180910390f35b3480156103ae575f80fd5b506103c960048036038101906103c4919061367a565b610d8b565b6040516103d691906136d2565b60405180910390f35b3480156103ea575f80fd5b506103f3610dad565b6040516104009190613746565b60405180910390f35b348015610414575f80fd5b5061041d610dd1565b60405161042a919061376e565b60405180910390f35b34801561043e575f80fd5b50610447610dda565b604051610454919061376e565b60405180910390f35b348015610468575f80fd5b50610471610de0565b60405161047e919061376e565b60405180910390f35b348015610492575f80fd5b506104ad60048036038101906104a89190613787565b610de6565b6040516104ba91906136d2565b60405180910390f35b3480156104ce575f80fd5b506104d7610e14565b6040516104e491906137e6565b60405180910390f35b3480156104f8575f80fd5b50610501610e1a565b60405161050e919061376e565b60405180910390f35b348015610522575f80fd5b5061052b610e20565b60405161053891906136d2565b60405180910390f35b34801561054c575f80fd5b50610555610e32565b604051610562919061381a565b60405180910390f35b348015610576575f80fd5b5061057f610e3a565b60405161058c919061376e565b60405180910390f35b3480156105a0575f80fd5b506105bb60048036038101906105b6919061367a565b610e40565b6040516105c891906136d2565b60405180910390f35b3480156105dc575f80fd5b506105f760048036038101906105f29190613833565b610e76565b005b348015610604575f80fd5b5061060d610e83565b60405161061a91906137e6565b60405180910390f35b34801561062e575f80fd5b50610637610ea8565b60405161064491906136d2565b60405180910390f35b348015610658575f80fd5b50610661610eba565b60405161066e919061376e565b60405180910390f35b348015610682575f80fd5b5061069d6004803603810190610698919061385e565b610ec0565b6040516106aa91906136d2565b60405180910390f35b3480156106be575f80fd5b506106c7610f12565b6040516106d4919061376e565b60405180910390f35b3480156106e8575f80fd5b506106f1610f18565b6040516106fe91906137e6565b60405180910390f35b348015610712575f80fd5b5061071b610f3d565b005b348015610728575f80fd5b506107316110d6565b60405161073e919061376e565b60405180910390f35b348015610752575f80fd5b5061075b6110dc565b60405161076891906136d2565b60405180910390f35b34801561077c575f80fd5b506107976004803603810190610792919061385e565b6110ef565b6040516107a4919061376e565b60405180910390f35b3480156107b8575f80fd5b506107c1611134565b005b3480156107ce575f80fd5b506107e960048036038101906107e491906138b3565b611147565b005b3480156107f6575f80fd5b50610811600480360381019061080c9190613903565b611211565b005b34801561081e575f80fd5b50610827611271565b60405161083491906137e6565b60405180910390f35b348015610848575f80fd5b50610851611296565b60405161085e919061376e565b60405180910390f35b348015610872575f80fd5b5061088d60048036038101906108889190613941565b61129c565b005b34801561089a575f80fd5b506108a36112f0565b6040516108b091906137e6565b60405180910390f35b3480156108c4575f80fd5b506108cd611318565b6040516108da919061376e565b60405180910390f35b3480156108ee575f80fd5b506108f761131e565b60405161090491906135c9565b60405180910390f35b348015610918575f80fd5b50610933600480360381019061092e9190613991565b6113ae565b005b348015610940575f80fd5b50610949611420565b604051610956919061376e565b60405180910390f35b34801561096a575f80fd5b506109856004803603810190610980919061367a565b611426565b60405161099291906136d2565b60405180910390f35b3480156109a6575f80fd5b506109af61149b565b6040516109bc919061376e565b60405180910390f35b3480156109d0575f80fd5b506109eb60048036038101906109e6919061367a565b6114a1565b6040516109f891906136d2565b60405180910390f35b348015610a0c575f80fd5b50610a156114c3565b604051610a22919061376e565b60405180910390f35b348015610a36575f80fd5b50610a3f6114c9565b604051610a4c91906136d2565b60405180910390f35b348015610a60575f80fd5b50610a7b6004803603810190610a769190613903565b6114dc565b005b348015610a88575f80fd5b50610aa36004803603810190610a9e9190613941565b61153c565b005b348015610ab0575f80fd5b50610ab9611599565b604051610ac6919061376e565b60405180910390f35b348015610ada575f80fd5b50610ae361159f565b005b348015610af0575f80fd5b50610b0b6004803603810190610b069190613833565b611a09565b604051610b1891906136d2565b60405180910390f35b348015610b2c575f80fd5b50610b35611a7b565b604051610b4291906137e6565b60405180910390f35b348015610b56575f80fd5b50610b5f611aa0565b604051610b6c919061376e565b60405180910390f35b348015610b80575f80fd5b50610b9b6004803603810190610b9691906139cf565b611aa6565b604051610ba8919061376e565b60405180910390f35b348015610bbc575f80fd5b50610bc5611b28565b604051610bd2919061376e565b60405180910390f35b348015610be6575f80fd5b50610c016004803603810190610bfc9190613833565b611b2e565b005b348015610c0e575f80fd5b50610c17611b5c565b604051610c24919061376e565b60405180910390f35b348015610c38575f80fd5b50610c536004803603810190610c4e919061385e565b611b62565b005b348015610c60575f80fd5b50610c69611be4565b005b348015610c76575f80fd5b50610c7f611cfb565b604051610c8c919061376e565b60405180910390f35b348015610ca0575f80fd5b50610ca9611d01565b604051610cb6919061376e565b60405180910390f35b348015610cca575f80fd5b50610ce56004803603810190610ce09190613833565b611d07565b604051610cf291906136d2565b60405180910390f35b606060038054610d0a90613a3a565b80601f0160208091040260200160405190810160405280929190818152602001828054610d3690613a3a565b8015610d815780601f10610d5857610100808354040283529160200191610d81565b820191905f5260205f20905b815481529060010190602001808311610d6457829003601f168201915b5050505050905090565b5f80610d95611f53565b9050610da2818585611f5a565b600191505092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600254905090565b60115481565b60145481565b5f80610df0611f53565b9050610dfd858285612041565b610e08858585612095565b60019150509392505050565b61dead81565b600f5481565b600e5f9054906101000a900460ff1681565b5f6012905090565b60135481565b5f80610e4a611f53565b9050610e6b818585610e5c8589611aa6565b610e669190613a97565b611f5a565b600191505092915050565b610e803382612a73565b50565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155f9054906101000a900460ff1681565b601d5481565b5f60225f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b600d5481565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610fab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa290613b14565b60405180910390fd5b5f610fb5336110ef565b90505f8111610ff9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff090613b7c565b60405180910390fd5b5f611002610dd1565b90505f8183476110129190613b9a565b61101c9190613c08565b90506110283384612a73565b5f3373ffffffffffffffffffffffffffffffffffffffff168260405161104d90613c65565b5f6040518083038185875af1925050503d805f8114611087576040519150601f19603f3d011682016040523d82523d5f602084013e61108c565b606091505b50509050806110d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c790613cc3565b60405180910390fd5b50505050565b601a5481565b601560029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61113c612b3d565b6111455f612bbb565b565b61114f612b3d565b610258831015611194576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118b90613d51565b60405180910390fd5b6103e882111580156111a657505f8210155b6111e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111dc90613ddf565b60405180910390fd5b82600f8190555081600d8190555080600e5f6101000a81548160ff021916908315150217905550505050565b611219612b3d565b8060235f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60175481565b6112a4612b3d565b8260178190555081601881905550806019819055506018546019546017546112cc9190613a97565b6112d69190613a97565b601681905550601960165411156112eb575f80fd5b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601b5481565b60606004805461132d90613a3a565b80601f016020809104026020016040519081016040528092919081815260200182805461135990613a3a565b80156113a45780601f1061137b576101008083540402835291602001916113a4565b820191905f5260205f20905b81548152906001019060200180831161138757829003601f168201915b5050505050905090565b6113b6612b3d565b6103e860056113c3610dd1565b6113cd9190613b9a565b6113d79190613c08565b8210156113e2575f80fd5b6103e860056113ef610dd1565b6113f99190613b9a565b6114039190613c08565b81101561140e575f80fd5b80600c8190555081600a819055505050565b60125481565b5f80611430611f53565b90505f61143d8286611aa6565b905083811015611482576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147990613e6d565b60405180910390fd5b61148f8286868403611f5a565b60019250505092915050565b60105481565b5f806114ab611f53565b90506114b8818585612095565b600191505092915050565b60195481565b601560019054906101000a900460ff1681565b6114e4612b3d565b8060225f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b611544612b3d565b82601b8190555081601c8190555080601d81905550601c54601d54601b5461156c9190613a97565b6115769190613a97565b601a81905550601a546021819055506019601a541115611594575f80fd5b505050565b600a5481565b6115a7612b3d565b601560019054906101000a900460ff16156115c0575f80fd5b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611629573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061164d9190613e9f565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116d2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116f69190613e9f565b6040518363ffffffff1660e01b8152600401611713929190613eca565b6020604051808303815f875af115801561172f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117539190613e9f565b60065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506117de3060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611f5a565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b37f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b815260040161187a929190613ef1565b6020604051808303815f875af1158015611896573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118ba9190613f2c565b506118e760065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001612c7e565b61191360065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001611211565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719473061195a306110ef565b5f8030426040518863ffffffff1660e01b815260040161197f96959493929190613f90565b60606040518083038185885af115801561199b573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906119c09190614003565b5050506001601560016101000a81548160ff0219169083151502179055506001601560026101000a81548160ff0219169083151502179055504260108190555042601381905550565b5f611a12612b3d565b620186a06001611a20610dd1565b611a2a9190613b9a565b611a349190613c08565b821015611a3f575f80fd5b6103e86005611a4c610dd1565b611a569190613b9a565b611a609190613c08565b821115611a6b575f80fd5b81600b8190555060019050919050565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60165481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600b5481565b611b36612b3d565b5f8111611b41575f80fd5b8060145f828254611b529190613a97565b9250508190555050565b60185481565b611b6a612b3d565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611bd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bcf906140c3565b60405180910390fd5b611be181612bbb565b50565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c3c575f80fd5b601454601354611c4c9190613a97565b421015611c8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c859061412b565b60405180910390fd5b5f3373ffffffffffffffffffffffffffffffffffffffff1647604051611cb390613c65565b5f6040518083038185875af1925050503d805f8114611ced576040519150601f19603f3d011682016040523d82523d5f602084013e611cf2565b606091505b50508091505050565b601c5481565b600c5481565b5f611d10612b3d565b601154601254611d209190613a97565b4211611d61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5890614193565b60405180910390fd5b6103e8821115611da6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9d90614221565b60405180910390fd5b426012819055505f3073ffffffffffffffffffffffffffffffffffffffff166370a0823160065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401611e0891906137e6565b602060405180830381865afa158015611e23573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e47919061423f565b90505f6127108483611e599190613b9a565b611e639190613c08565b90505f811115611e9c57611e9b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661dead83612cd6565b5b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b81526004015f604051808303815f87803b158015611f06575f80fd5b505af1158015611f18573d5f803e3d5ffd5b505050507e22c74b3a86ea8dfa255116234c1bcddd89a3f4379935fa263daefeb087008e60405160405180910390a160019350505050919050565b5f33905090565b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612034919061376e565b60405180910390a3505050565b5f61204c8484611aa6565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461208f5781811015612081575f80fd5b61208e8484848403611f5a565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036120cc575f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612103575f80fd5b5f810361211a5761211583835f612cd6565b612a6e565b6121226112f0565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561219057506121606112f0565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156121c857505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612202575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561221b5750600660149054906101000a900460ff16155b156124d657601560019054906101000a900460ff166122d85760225f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806122cf575060225f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b6122d7575f80fd5b5b60245f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612375575060235f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156123ae57600a54811115612388575f80fd5b600c54612394836110ef565b8261239f9190613a97565b11156123a9575f80fd5b6124d5565b60245f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561244b575060235f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561246357600a5481111561245e575f80fd5b6124d4565b60235f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166124d357600c546124bd836110ef565b826124c89190613a97565b11156124d2575f80fd5b5b5b5b5b5f6124e0306110ef565b90505f600b5482101590508080156125045750601560029054906101000a900460ff165b801561251d5750600660149054906101000a900460ff16155b8015612570575060245f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156125c3575060225f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612616575060225f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612659576001600660146101000a81548160ff02191690831515021790555061263e612e87565b5f600660146101000a81548160ff0219169083151502179055505b600660149054906101000a900460ff161580156126bc575060245f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b80156126d35750600e5f9054906101000a900460ff165b80156126ee5750600f546010546126ea9190613a97565b4210155b8015612741575060225f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156127505761274e613065565b505b5f600660149054906101000a900460ff1615905060225f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806127ff575060225f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612808575f90505b5f8115612a555760245f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561286657505f601a54115b15612922576064601a548661287b9190613b9a565b6128859190613c08565b9050601a54601d54826128989190613b9a565b6128a29190613c08565b60205f8282546128b29190613a97565b92505081905550601a54601c54826128ca9190613b9a565b6128d49190613c08565b601f5f8282546128e49190613a97565b92505081905550601a54601b54826128fc9190613b9a565b6129069190613c08565b601e5f8282546129169190613a97565b92505081905550612a32565b60245f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561297957505f601654115b15612a315760646016548661298e9190613b9a565b6129989190613c08565b9050601654601954826129ab9190613b9a565b6129b59190613c08565b60205f8282546129c59190613a97565b92505081905550601654601854826129dd9190613b9a565b6129e79190613c08565b601f5f8282546129f79190613a97565b9250508190555060165460175482612a0f9190613b9a565b612a199190613c08565b601e5f828254612a299190613a97565b925050819055505b5b5f811115612a4657612a45873083612cd6565b5b8085612a52919061426a565b94505b612a60878787612cd6565b602154601a81905550505050505b505050565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254612abe919061426a565b925050819055508060025f82825403925050819055505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612b31919061376e565b60405180910390a35050565b612b45611f53565b73ffffffffffffffffffffffffffffffffffffffff16612b636112f0565b73ffffffffffffffffffffffffffffffffffffffff1614612bb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bb0906142e7565b60405180910390fd5b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8060245f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612d0d575f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d44575f80fd5b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612d90575f80fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612e79919061376e565b60405180910390a350505050565b5f612e91306110ef565b90505f602054601e54601f54612ea79190613a97565b612eb19190613a97565b90505f80831480612ec157505f82145b15612ece57505050613063565b6014600b54612edd9190613b9a565b831115612ef6576014600b54612ef39190613b9a565b92505b5f600283601f5486612f089190613b9a565b612f129190613c08565b612f1c9190613c08565b90505f8185612f2b919061426a565b90505f479050612f3a82613214565b5f8147612f47919061426a565b90505f86601e5483612f599190613b9a565b612f639190613c08565b90505f8760205484612f759190613b9a565b612f7f9190613c08565b90505f8183612f8e9190613a97565b84612f99919061426a565b90505f601f819055505f601e819055505f6020819055505f87118015612fbe57505f81115b15612fce57612fcd8782613447565b5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168360405161301390613c65565b5f6040518083038185875af1925050503d805f811461304d576040519150601f19603f3d011682016040523d82523d5f602084013e613052565b606091505b505080985050505050505050505050505b565b5f426010819055505f3073ffffffffffffffffffffffffffffffffffffffff166370a0823160065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004016130c891906137e6565b602060405180830381865afa1580156130e3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613107919061423f565b90505f612710600d548361311b9190613b9a565b6131259190613c08565b90505f81111561315e5761315d60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661dead83612cd6565b5b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156131c8575f80fd5b505af11580156131da573d5f803e3d5ffd5b505050507f3b8003ff934e6fbafe481f0ae193446286cc42f0a2b46361542b58076803df2560405160405180910390a16001935050505090565b5f600267ffffffffffffffff8111156132305761322f614305565b5b60405190808252806020026020018201604052801561325e5781602001602082028036833780820191505090505b50905030815f8151811061327557613274614332565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613318573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061333c9190613e9f565b816001815181106133505761334f614332565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506133b5307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611f5a565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401613416959493929190614416565b5f604051808303815f87803b15801561342d575f80fd5b505af115801561343f573d5f803e3d5ffd5b505050505050565b613472307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611f5a565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016134f796959493929190613f90565b60606040518083038185885af1158015613513573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906135389190614003565b5050505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561357657808201518184015260208101905061355b565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61359b8261353f565b6135a58185613549565b93506135b5818560208601613559565b6135be81613581565b840191505092915050565b5f6020820190508181035f8301526135e18184613591565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613616826135ed565b9050919050565b6136268161360c565b8114613630575f80fd5b50565b5f813590506136418161361d565b92915050565b5f819050919050565b61365981613647565b8114613663575f80fd5b50565b5f8135905061367481613650565b92915050565b5f80604083850312156136905761368f6135e9565b5b5f61369d85828601613633565b92505060206136ae85828601613666565b9150509250929050565b5f8115159050919050565b6136cc816136b8565b82525050565b5f6020820190506136e55f8301846136c3565b92915050565b5f819050919050565b5f61370e613709613704846135ed565b6136eb565b6135ed565b9050919050565b5f61371f826136f4565b9050919050565b5f61373082613715565b9050919050565b61374081613726565b82525050565b5f6020820190506137595f830184613737565b92915050565b61376881613647565b82525050565b5f6020820190506137815f83018461375f565b92915050565b5f805f6060848603121561379e5761379d6135e9565b5b5f6137ab86828701613633565b93505060206137bc86828701613633565b92505060406137cd86828701613666565b9150509250925092565b6137e08161360c565b82525050565b5f6020820190506137f95f8301846137d7565b92915050565b5f60ff82169050919050565b613814816137ff565b82525050565b5f60208201905061382d5f83018461380b565b92915050565b5f60208284031215613848576138476135e9565b5b5f61385584828501613666565b91505092915050565b5f60208284031215613873576138726135e9565b5b5f61388084828501613633565b91505092915050565b613892816136b8565b811461389c575f80fd5b50565b5f813590506138ad81613889565b92915050565b5f805f606084860312156138ca576138c96135e9565b5b5f6138d786828701613666565b93505060206138e886828701613666565b92505060406138f98682870161389f565b9150509250925092565b5f8060408385031215613919576139186135e9565b5b5f61392685828601613633565b92505060206139378582860161389f565b9150509250929050565b5f805f60608486031215613958576139576135e9565b5b5f61396586828701613666565b935050602061397686828701613666565b925050604061398786828701613666565b9150509250925092565b5f80604083850312156139a7576139a66135e9565b5b5f6139b485828601613666565b92505060206139c585828601613666565b9150509250929050565b5f80604083850312156139e5576139e46135e9565b5b5f6139f285828601613633565b9250506020613a0385828601613633565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613a5157607f821691505b602082108103613a6457613a63613a0d565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613aa182613647565b9150613aac83613647565b9250828201905080821115613ac457613ac3613a6a565b5b92915050565b7f21636100000000000000000000000000000000000000000000000000000000005f82015250565b5f613afe600383613549565b9150613b0982613aca565b602082019050919050565b5f6020820190508181035f830152613b2b81613af2565b9050919050565b7f4e6f20746f6b656e732068656c640000000000000000000000000000000000005f82015250565b5f613b66600e83613549565b9150613b7182613b32565b602082019050919050565b5f6020820190508181035f830152613b9381613b5a565b9050919050565b5f613ba482613647565b9150613baf83613647565b9250828202613bbd81613647565b91508282048414831517613bd457613bd3613a6a565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613c1282613647565b9150613c1d83613647565b925082613c2d57613c2c613bdb565b5b828204905092915050565b5f81905092915050565b50565b5f613c505f83613c38565b9150613c5b82613c42565b5f82019050919050565b5f613c6f82613c45565b9150819050919050565b7f455448207472616e73666572206661696c6564000000000000000000000000005f82015250565b5f613cad601383613549565b9150613cb882613c79565b602082019050919050565b5f6020820190508181035f830152613cda81613ca1565b9050919050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e2074685f8201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b5f613d3b603383613549565b9150613d4682613ce1565b604082019050919050565b5f6020820190508181035f830152613d6881613d2f565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e742062655f8201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b5f613dc9603083613549565b9150613dd482613d6f565b604082019050919050565b5f6020820190508181035f830152613df681613dbd565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f613e57602583613549565b9150613e6282613dfd565b604082019050919050565b5f6020820190508181035f830152613e8481613e4b565b9050919050565b5f81519050613e998161361d565b92915050565b5f60208284031215613eb457613eb36135e9565b5b5f613ec184828501613e8b565b91505092915050565b5f604082019050613edd5f8301856137d7565b613eea60208301846137d7565b9392505050565b5f604082019050613f045f8301856137d7565b613f11602083018461375f565b9392505050565b5f81519050613f2681613889565b92915050565b5f60208284031215613f4157613f406135e9565b5b5f613f4e84828501613f18565b91505092915050565b5f819050919050565b5f613f7a613f75613f7084613f57565b6136eb565b613647565b9050919050565b613f8a81613f60565b82525050565b5f60c082019050613fa35f8301896137d7565b613fb0602083018861375f565b613fbd6040830187613f81565b613fca6060830186613f81565b613fd760808301856137d7565b613fe460a083018461375f565b979650505050505050565b5f81519050613ffd81613650565b92915050565b5f805f6060848603121561401a576140196135e9565b5b5f61402786828701613fef565b935050602061403886828701613fef565b925050604061404986828701613fef565b9150509250925092565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6140ad602683613549565b91506140b882614053565b604082019050919050565b5f6020820190508181035f8301526140da816140a1565b9050919050565b7f746f6f20736f6f6e0000000000000000000000000000000000000000000000005f82015250565b5f614115600883613549565b9150614120826140e1565b602082019050919050565b5f6020820190508181035f83015261414281614109565b9050919050565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e6973685f82015250565b5f61417d602083613549565b915061418882614149565b602082019050919050565b5f6020820190508181035f8301526141aa81614171565b9050919050565b7f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f5f8201527f6b656e7320696e204c5000000000000000000000000000000000000000000000602082015250565b5f61420b602a83613549565b9150614216826141b1565b604082019050919050565b5f6020820190508181035f830152614238816141ff565b9050919050565b5f60208284031215614254576142536135e9565b5b5f61426184828501613fef565b91505092915050565b5f61427482613647565b915061427f83613647565b925082820390508181111561429757614296613a6a565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6142d1602083613549565b91506142dc8261429d565b602082019050919050565b5f6020820190508181035f8301526142fe816142c5565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6143918161360c565b82525050565b5f6143a28383614388565b60208301905092915050565b5f602082019050919050565b5f6143c48261435f565b6143ce8185614369565b93506143d983614379565b805f5b838110156144095781516143f08882614397565b97506143fb836143ae565b9250506001810190506143dc565b5085935050505092915050565b5f60a0820190506144295f83018861375f565b6144366020830187613f81565b818103604083015261444881866143ba565b905061445760608301856137d7565b614464608083018461375f565b969550505050505056fea26469706673582212202747e54d68bc6ed862196e81c85f6975e20d664421865f4c8fbf01fdcffa68ea64736f6c63430008160033

Deployed Bytecode Sourcemap

20827:15703:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9050:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11495:226;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20921:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10179:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21522:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21655:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12301:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21014:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21432:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21393:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10021:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21618:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13005:258;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24240:83;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20979:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21701:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22078:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27706:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21333:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21180:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36045:482;;;;;;;;;;;;;:::i;:::-;;21967:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21781:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10350:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2660:103;;;;;;;;;;;;;:::i;:::-;;33632:575;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25966:149;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21106:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21855;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26123:390;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2019:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22002:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9269:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25616:342;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21576:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13766:493;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21484:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10713:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21929:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21741:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26966:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26521:437;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21218:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24331:971;;;;;;;;;;;;;:::i;:::-;;25310:298;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21143:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21821:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10994:181;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21260:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27393:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21892:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2918:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27106:279;;;;;;;;;;;;;:::i;:::-;;22040:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21300:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34987:1050;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9050:100;9104:13;9137:5;9130:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9050:100;:::o;11495:226::-;11598:4;11620:13;11636:12;:10;:12::i;:::-;11620:28;;11659:32;11668:5;11675:7;11684:6;11659:8;:32::i;:::-;11709:4;11702:11;;;11495:226;;;;:::o;20921:51::-;;;:::o;10179:108::-;10240:7;10267:12;;10260:19;;10179:108;:::o;21522:47::-;;;;:::o;21655:37::-;;;;:::o;12301:295::-;12432:4;12449:15;12467:12;:10;:12::i;:::-;12449:30;;12490:38;12506:4;12512:7;12521:6;12490:15;:38::i;:::-;12539:27;12549:4;12555:2;12559:6;12539:9;:27::i;:::-;12584:4;12577:11;;;12301:295;;;;;:::o;21014:53::-;21060:6;21014:53;:::o;21432:45::-;;;;:::o;21393:32::-;;;;;;;;;;;;;:::o;10021:93::-;10079:5;10104:2;10097:9;;10021:93;:::o;21618:30::-;;;;:::o;13005:258::-;13108:4;13130:13;13146:12;:10;:12::i;:::-;13130:28;;13169:64;13178:5;13185:7;13222:10;13194:25;13204:5;13211:7;13194:9;:25::i;:::-;:38;;;;:::i;:::-;13169:8;:64::i;:::-;13251:4;13244:11;;;13005:258;;;;:::o;24240:83::-;24290:25;24296:10;24308:6;24290:5;:25::i;:::-;24240:83;:::o;20979:28::-;;;;;;;;;;;;;:::o;21701:33::-;;;;;;;;;;;;;:::o;22078:30::-;;;;:::o;27706:126::-;27772:4;27796:19;:28;27816:7;27796:28;;;;;;;;;;;;;;;;;;;;;;;;;27789:35;;27706:126;;;:::o;21333:40::-;;;;:::o;21180:29::-;;;;;;;;;;;;;:::o;36045:482::-;36105:9;36091:23;;:10;:23;;;36083:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;36133:19;36155:21;36165:10;36155:9;:21::i;:::-;36133:43;;36209:1;36195:11;:15;36187:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;36242:19;36264:13;:11;:13::i;:::-;36242:35;;36288:17;36346:11;36332;36308:21;:35;;;;:::i;:::-;:49;;;;:::i;:::-;36288:69;;36370:30;36376:10;36388:11;36370:5;:30::i;:::-;36414:12;36432:10;:15;;36455:9;36432:37;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36413:56;;;36488:7;36480:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;36072:455;;;;36045:482::o;21967:28::-;;;;:::o;21781:31::-;;;;;;;;;;;;;:::o;10350:157::-;10449:7;10481:9;:18;10491:7;10481:18;;;;;;;;;;;;;;;;10474:25;;10350:157;;;:::o;2660:103::-;1905:13;:11;:13::i;:::-;2725:30:::1;2752:1;2725:18;:30::i;:::-;2660:103::o:0;33632:575::-;1905:13;:11;:13::i;:::-;33838:3:::1;33815:19;:26;;33793:127;;;;;;;;;;;;:::i;:::-;;;;;;;;;33969:4;33953:12;:20;;:41;;;;;33993:1;33977:12;:17;;33953:41;33931:139;;;;;;;;;;;;:::i;:::-;;;;;;;;;34099:19;34081:15;:37;;;;34152:12;34129:20;:35;;;;34191:8;34175:13;;:24;;;;;;;;;;;;;;;;;;33632:575:::0;;;:::o;25966:149::-;1905:13;:11;:13::i;:::-;26103:4:::1;26061:31;:39;26093:6;26061:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;25966:149:::0;;:::o;21106:30::-;;;;;;;;;;;;;:::o;21855:::-;;;;:::o;26123:390::-;1905:13;:11;:13::i;:::-;26296::::1;26278:15;:31;;;;26338:13;26320:15;:31;;;;26379:12;26362:14;:29;;;;26452:15;;26435:14;;26417:15;;:32;;;;:::i;:::-;:50;;;;:::i;:::-;26402:12;:65;;;;26502:2;26486:12;;:18;;26478:27;;;::::0;::::1;;26123:390:::0;;;:::o;2019:87::-;2065:7;2092:6;;;;;;;;;;;2085:13;;2019:87;:::o;22002:31::-;;;;:::o;9269:104::-;9325:13;9358:7;9351:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9269:104;:::o;25616:342::-;1905:13;:11;:13::i;:::-;25796:4:::1;25791:1;25775:13;:11;:13::i;:::-;:17;;;;:::i;:::-;25774:26;;;;:::i;:::-;25760:9;:41;;25752:50;;;::::0;::::1;;25863:4;25858:1;25842:13;:11;:13::i;:::-;:17;;;;:::i;:::-;25841:26;;;;:::i;:::-;25821:15;:47;;25813:56;;;::::0;::::1;;25892:15;25880:9;:27;;;;25941:9;25918:20;:32;;;;25616:342:::0;;:::o;21576:35::-;;;;:::o;13766:493::-;13874:4;13896:13;13912:12;:10;:12::i;:::-;13896:28;;13935:24;13962:25;13972:5;13979:7;13962:9;:25::i;:::-;13935:52;;14040:15;14020:16;:35;;13998:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;14156:60;14165:5;14172:7;14200:15;14181:16;:34;14156:8;:60::i;:::-;14247:4;14240:11;;;;13766:493;;;;:::o;21484:29::-;;;;:::o;10713:218::-;10812:4;10834:13;10850:12;:10;:12::i;:::-;10834:28;;10873;10883:5;10890:2;10894:6;10873:9;:28::i;:::-;10919:4;10912:11;;;10713:218;;;;:::o;21929:29::-;;;;:::o;21741:33::-;;;;;;;;;;;;;:::o;26966:132::-;1905:13;:11;:13::i;:::-;27082:8:::1;27051:19;:28;27071:7;27051:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;26966:132:::0;;:::o;26521:437::-;1905:13;:11;:13::i;:::-;26696::::1;26677:16;:32;;;;26739:13;26720:16;:32;;;;26781:12;26763:15;:30;;;;26857:16;;26839:15;;26820:16;;:34;;;;:::i;:::-;:53;;;;:::i;:::-;26804:13;:69;;;;26898:13;;26884:11;:27;;;;26947:2;26930:13;;:19;;26922:28;;;::::0;::::1;;26521:437:::0;;;:::o;21218:35::-;;;;:::o;24331:971::-;1905:13;:11;:13::i;:::-;24393::::1;;;;;;;;;;;24392:14;24384:23;;;::::0;::::1;;24454:15;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24436:55;;;24514:4;24534:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24436:131;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24420:13;;:147;;;;;;;;;;;;;;;;;;24578:66;24595:4;24610:13;;;;;;;;;;;24626:17;24578:8;:66::i;:::-;24662:13;;;;;;;;;;;24655:29;;;24707:15;24738:17;24655:111;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24779:58;24816:13;;;;;;;;;;;24832:4;24779:28;:58::i;:::-;24848:55;24882:13;;;;;;;;;;;24898:4;24848:25;:55::i;:::-;24916:15;:31;;;24955:21;25000:4;25020:24;25038:4;25020:9;:24::i;:::-;25059:1;25075::::0;25099:4:::1;25119:15;24916:229;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;25174:4;25158:13;;:20;;;;;;;;;;;;;;;;;;25203:4;25189:11;;:18;;;;;;;;;;;;;;;;;;25235:15;25218:14;:32;;;;25279:15;25261;:33;;;;24331:971::o:0;25310:298::-;25406:4;1905:13;:11;:13::i;:::-;25471:6:::1;25466:1;25450:13;:11;:13::i;:::-;:17;;;;:::i;:::-;25449:28;;;;:::i;:::-;25436:9;:41;;25428:50;;;::::0;::::1;;25532:4;25527:1;25511:13;:11;:13::i;:::-;:17;;;;:::i;:::-;25510:26;;;;:::i;:::-;25497:9;:39;;25489:48;;;::::0;::::1;;25569:9;25548:18;:30;;;;25596:4;25589:11;;25310:298:::0;;;:::o;21143:30::-;;;;;;;;;;;;;:::o;21821:27::-;;;;:::o;10994:181::-;11108:7;11140:11;:18;11152:5;11140:18;;;;;;;;;;;;;;;:27;11159:7;11140:27;;;;;;;;;;;;;;;;11133:34;;10994:181;;;;:::o;21260:33::-;;;;:::o;27393:167::-;1905:13;:11;:13::i;:::-;27507:1:::1;27489:15;:19;27481:28;;;::::0;::::1;;27537:15;27520:13;;:32;;;;;;;:::i;:::-;;;;;;;;27393:167:::0;:::o;21892:30::-;;;;:::o;2918:238::-;1905:13;:11;:13::i;:::-;3041:1:::1;3021:22;;:8;:22;;::::0;2999:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3120:28;3139:8;3120:18;:28::i;:::-;2918:238:::0;:::o;27106:279::-;27174:14;;;;;;;;;;;27160:28;;:10;:28;;;27152:37;;;;;;27245:13;;27227:15;;:31;;;;:::i;:::-;27208:15;:50;;27200:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;27282:12;27327:10;27319:24;;27351:21;27319:58;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27305:72;;;;;27141:244;27106:279::o;22040:31::-;;;;:::o;21300:24::-;;;;:::o;34987:1050::-;35090:4;1905:13;:11;:13::i;:::-;35175:19:::1;;35152:20;;:42;;;;:::i;:::-;35134:15;:60;35112:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;35288:4;35273:11;:19;;35265:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;35373:15;35350:20;:38;;;;35443:28;35474:4;:14;;;35489:13;;;;;;;;;;;35474:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35443:60;;35553:20;35613:5;35599:11;35576:20;:34;;;;:::i;:::-;:42;;;;:::i;:::-;35553:65;;35738:1;35723:12;:16;35719:110;;;35756:61;35772:13;;;;;;;;;;;35795:6;35804:12;35756:15;:61::i;:::-;35719:110;35904:19;35941:13;;;;;;;;;;;35904:51;;35966:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;35993:14;;;;;;;;;;36025:4;36018:11;;;;;34987:1050:::0;;;:::o;703:98::-;756:7;783:10;776:17;;703:98;:::o;16467:220::-;16625:6;16595:11;:18;16607:5;16595:18;;;;;;;;;;;;;;;:27;16614:7;16595:27;;;;;;;;;;;;;;;:36;;;;16663:7;16647:32;;16656:5;16647:32;;;16672:6;16647:32;;;;;;:::i;:::-;;;;;;;;16467:220;;;:::o;16978:420::-;17113:24;17140:25;17150:5;17157:7;17140:9;:25::i;:::-;17113:52;;17200:17;17180:16;:37;17176:215;;17262:6;17242:16;:26;;17234:35;;;;;;17313:51;17322:5;17329:7;17357:6;17338:16;:25;17313:8;:51::i;:::-;17176:215;17102:296;16978:420;;;:::o;27840:3362::-;27988:1;27972:18;;:4;:18;;;27964:27;;;;;;28024:1;28010:16;;:2;:16;;;28002:25;;;;;;28054:1;28044:6;:11;28040:93;;28072:28;28088:4;28094:2;28098:1;28072:15;:28::i;:::-;28115:7;;28040:93;28171:7;:5;:7::i;:::-;28163:15;;:4;:15;;;;:45;;;;;28201:7;:5;:7::i;:::-;28195:13;;:2;:13;;;;28163:45;:78;;;;;28239:1;28225:16;;:2;:16;;;;28163:78;:112;;;;;21060:6;28258:17;;:2;:17;;;;28163:112;:138;;;;;28293:8;;;;;;;;;;;28292:9;28163:138;28145:988;;;28333:13;;;;;;;;;;;28328:116;;28375:19;:25;28395:4;28375:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;28404:19;:23;28424:2;28404:23;;;;;;;;;;;;;;;;;;;;;;;;;28375:52;28367:61;;;;;;28328:116;28506:25;:31;28532:4;28506:31;;;;;;;;;;;;;;;;;;;;;;;;;:88;;;;;28559:31;:35;28591:2;28559:35;;;;;;;;;;;;;;;;;;;;;;;;;28558:36;28506:88;28484:638;;;28647:20;;28637:6;:30;;28629:39;;;;;;28721:9;;28704:13;28714:2;28704:9;:13::i;:::-;28695:6;:22;;;;:::i;:::-;:35;;28687:44;;;;;;28484:638;;;28817:25;:29;28843:2;28817:29;;;;;;;;;;;;;;;;;;;;;;;;;:88;;;;;28868:31;:37;28900:4;28868:37;;;;;;;;;;;;;;;;;;;;;;;;;28867:38;28817:88;28795:327;;;28958:20;;28948:6;:30;;28940:39;;;;;;28795:327;;;29006:31;:35;29038:2;29006:35;;;;;;;;;;;;;;;;;;;;;;;;;29001:121;;29096:9;;29079:13;29089:2;29079:9;:13::i;:::-;29070:6;:22;;;;:::i;:::-;:35;;29062:44;;;;;;29001:121;28795:327;28484:638;28145:988;29145:28;29176:24;29194:4;29176:9;:24::i;:::-;29145:55;;29213:12;29252:18;;29228:20;:42;;29213:57;;29301:7;:35;;;;;29325:11;;;;;;;;;;;29301:35;:61;;;;;29354:8;;;;;;;;;;;29353:9;29301:61;:110;;;;;29380:25;:31;29406:4;29380:31;;;;;;;;;;;;;;;;;;;;;;;;;29379:32;29301:110;:153;;;;;29429:19;:25;29449:4;29429:25;;;;;;;;;;;;;;;;;;;;;;;;;29428:26;29301:153;:194;;;;;29472:19;:23;29492:2;29472:23;;;;;;;;;;;;;;;;;;;;;;;;;29471:24;29301:194;29283:326;;;29533:4;29522:8;;:15;;;;;;;;;;;;;;;;;;29554:10;:8;:10::i;:::-;29592:5;29581:8;;:16;;;;;;;;;;;;;;;;;;29283:326;29677:8;;;;;;;;;;;29676:9;:55;;;;;29702:25;:29;29728:2;29702:29;;;;;;;;;;;;;;;;;;;;;;;;;29676:55;:85;;;;;29748:13;;;;;;;;;;;29676:85;:153;;;;;29814:15;;29797:14;;:32;;;;:::i;:::-;29778:15;:51;;29676:153;:196;;;;;29847:19;:25;29867:4;29847:25;;;;;;;;;;;;;;;;;;;;;;;;;29846:26;29676:196;29658:282;;;29899:29;:27;:29::i;:::-;;29658:282;29952:12;29968:8;;;;;;;;;;;29967:9;29952:24;;29993:19;:25;30013:4;29993:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;30022:19;:23;30042:2;30022:23;;;;;;;;;;;;;;;;;;;;;;;;;29993:52;29989:100;;;30072:5;30062:15;;29989:100;30101:12;30134:7;30130:981;;;30186:25;:29;30212:2;30186:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;30235:1;30219:13;;:17;30186:50;30182:780;;;30289:3;30273:13;;30264:6;:22;;;;:::i;:::-;:28;;;;:::i;:::-;30257:35;;30359:13;;30340:15;;30333:4;:22;;;;:::i;:::-;30332:40;;;;:::i;:::-;30311:17;;:61;;;;;;;:::i;:::-;;;;;;;;30441:13;;30421:16;;30414:4;:23;;;;:::i;:::-;30413:41;;;;:::i;:::-;30391:18;;:63;;;;;;;:::i;:::-;;;;;;;;30523:13;;30503:16;;30496:4;:23;;;;:::i;:::-;30495:41;;;;:::i;:::-;30473:18;;:63;;;;;;;:::i;:::-;;;;;;;;30182:780;;;30602:25;:31;30628:4;30602:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;30652:1;30637:12;;:16;30602:51;30598:364;;;30705:3;30690:12;;30681:6;:21;;;;:::i;:::-;:27;;;;:::i;:::-;30674:34;;30774:12;;30756:14;;30749:4;:21;;;;:::i;:::-;30748:38;;;;:::i;:::-;30727:17;;:59;;;;;;;:::i;:::-;;;;;;;;30854:12;;30835:15;;30828:4;:22;;;;:::i;:::-;30827:39;;;;:::i;:::-;30805:18;;:61;;;;;;;:::i;:::-;;;;;;;;30934:12;;30915:15;;30908:4;:22;;;;:::i;:::-;30907:39;;;;:::i;:::-;30885:18;;:61;;;;;;;:::i;:::-;;;;;;;;30598:364;30182:780;30989:1;30982:4;:8;30978:91;;;31011:42;31027:4;31041;31048;31011:15;:42::i;:::-;30978:91;31095:4;31085:14;;;;;:::i;:::-;;;30130:981;31123:33;31139:4;31145:2;31149:6;31123:15;:33::i;:::-;31183:11;;31167:13;:27;;;;27953:3249;;;;27840:3362;;;;:::o;15690:339::-;15782:6;15763:9;:15;15773:4;15763:15;;;;;;;;;;;;;;;;:25;;;;;;;:::i;:::-;;;;;;;;15952:6;15936:12;;:22;;;;;;;;;;;16010:1;15987:34;;15996:4;15987:34;;;16014:6;15987:34;;;;;;:::i;:::-;;;;;;;;15690:339;;:::o;2184:132::-;2259:12;:10;:12::i;:::-;2248:23;;:7;:5;:7::i;:::-;:23;;;2240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2184:132::o;3316:191::-;3390:16;3409:6;;;;;;;;;;;3390:25;;3435:8;3426:6;;:17;;;;;;;;;;;;;;;;;;3490:8;3459:40;;3480:8;3459:40;;;;;;;;;;;;3379:128;3316:191;:::o;27568:130::-;27685:5;27651:25;:31;27677:4;27651:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;27568:130;;:::o;14729:609::-;14876:1;14860:18;;:4;:18;;;14852:27;;;;;;14912:1;14898:16;;:2;:16;;;14890:25;;;;;;14928:19;14950:9;:15;14960:4;14950:15;;;;;;;;;;;;;;;;14928:37;;14999:6;14984:11;:21;;14976:30;;;;;;15074:6;15060:11;:20;15042:9;:15;15052:4;15042:15;;;;;;;;;;;;;;;:38;;;;15269:6;15252:9;:13;15262:2;15252:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;15319:2;15304:26;;15313:4;15304:26;;;15323:6;15304:26;;;;;;:::i;:::-;;;;;;;;14841:497;14729:609;;;:::o;32097:1527::-;32136:23;32162:24;32180:4;32162:9;:24::i;:::-;32136:50;;32197:25;32288:17;;32267:18;;32225;;:60;;;;:::i;:::-;:80;;;;:::i;:::-;32197:108;;32316:12;32364:1;32345:15;:20;:46;;;;32390:1;32369:17;:22;32345:46;32341:85;;;32408:7;;;;;32341:85;32481:2;32460:18;;:23;;;;:::i;:::-;32442:15;:41;32438:115;;;32539:2;32518:18;;:23;;;;:::i;:::-;32500:41;;32438:115;32614:23;32743:1;32702:17;32659:18;;32641:15;:36;;;;:::i;:::-;32640:79;;;;:::i;:::-;:104;;;;:::i;:::-;32614:130;;32755:26;32802:15;32784;:33;;;;:::i;:::-;32755:62;;32830:25;32858:21;32830:49;;32892:36;32909:18;32892:16;:36::i;:::-;32941:18;32986:17;32962:21;:41;;;;:::i;:::-;32941:62;;33016:23;33076:17;33055:18;;33042:10;:31;;;;:::i;:::-;:51;;;;:::i;:::-;33016:77;;33106:22;33164:17;33144;;33131:10;:30;;;;:::i;:::-;:50;;;;:::i;:::-;33106:75;;33194:23;33252:14;33234:15;:32;;;;:::i;:::-;33220:10;:47;;;;:::i;:::-;33194:73;;33301:1;33280:18;:22;;;;33334:1;33313:18;:22;;;;33366:1;33346:17;:21;;;;33402:1;33384:15;:19;:42;;;;;33425:1;33407:15;:19;33384:42;33380:121;;;33443:46;33456:15;33473;33443:12;:46::i;:::-;33380:121;33535:15;;;;;;;;;;;33527:29;;33582:15;33527:89;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33513:103;;;;;32125:1499;;;;;;;;;;32097:1527;:::o;34215:764::-;34272:4;34306:15;34289:14;:32;;;;34376:28;34407:4;:14;;;34422:13;;;;;;;;;;;34407:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34376:60;;34486:20;34555:5;34532:20;;34509;:43;;;;:::i;:::-;:51;;;;:::i;:::-;34486:74;;34680:1;34665:12;:16;34661:110;;;34698:61;34714:13;;;;;;;;;;;34737:6;34746:12;34698:15;:61::i;:::-;34661:110;34846:19;34883:13;;;;;;;;;;;34846:51;;34908:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34937:12;;;;;;;;;;34967:4;34960:11;;;;;34215:764;:::o;31210:501::-;31276:21;31314:1;31300:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31276:40;;31345:4;31327;31332:1;31327:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;31371:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31361:4;31366:1;31361:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;31406:62;31423:4;31438:15;31456:11;31406:8;:62::i;:::-;31507:15;:66;;;31588:11;31614:1;31630:4;31657;31677:15;31507:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31265:446;31210:501;:::o;31719:370::-;31800:62;31817:4;31832:15;31850:11;31800:8;:62::i;:::-;31875:15;:31;;;31914:9;31947:4;31967:11;31993:1;32009;32025:15;;;;;;;;;;;32055;31875:206;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;31719:370;;:::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:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:60::-;3474:3;3495:5;3488:12;;3446:60;;;:::o;3512:142::-;3562:9;3595:53;3613:34;3622:24;3640:5;3622:24;:::i;:::-;3613:34;:::i;:::-;3595:53;:::i;:::-;3582:66;;3512:142;;;:::o;3660:126::-;3710:9;3743:37;3774:5;3743:37;:::i;:::-;3730:50;;3660:126;;;:::o;3792:152::-;3868:9;3901:37;3932:5;3901:37;:::i;:::-;3888:50;;3792:152;;;:::o;3950:183::-;4063:63;4120:5;4063:63;:::i;:::-;4058:3;4051:76;3950:183;;:::o;4139:274::-;4258:4;4296:2;4285:9;4281:18;4273:26;;4309:97;4403:1;4392:9;4388:17;4379:6;4309:97;:::i;:::-;4139:274;;;;:::o;4419:118::-;4506:24;4524:5;4506:24;:::i;:::-;4501:3;4494:37;4419:118;;:::o;4543:222::-;4636:4;4674:2;4663:9;4659:18;4651:26;;4687:71;4755:1;4744:9;4740:17;4731:6;4687:71;:::i;:::-;4543:222;;;;:::o;4771:619::-;4848:6;4856;4864;4913:2;4901:9;4892:7;4888:23;4884:32;4881:119;;;4919:79;;:::i;:::-;4881:119;5039:1;5064:53;5109:7;5100:6;5089:9;5085:22;5064:53;:::i;:::-;5054:63;;5010:117;5166:2;5192:53;5237:7;5228:6;5217:9;5213:22;5192:53;:::i;:::-;5182:63;;5137:118;5294:2;5320:53;5365:7;5356:6;5345:9;5341:22;5320:53;:::i;:::-;5310:63;;5265:118;4771:619;;;;;:::o;5396:118::-;5483:24;5501:5;5483:24;:::i;:::-;5478:3;5471:37;5396:118;;:::o;5520:222::-;5613:4;5651:2;5640:9;5636:18;5628:26;;5664:71;5732:1;5721:9;5717:17;5708:6;5664:71;:::i;:::-;5520:222;;;;:::o;5748:86::-;5783:7;5823:4;5816:5;5812:16;5801:27;;5748:86;;;:::o;5840:112::-;5923:22;5939:5;5923:22;:::i;:::-;5918:3;5911:35;5840:112;;:::o;5958:214::-;6047:4;6085:2;6074:9;6070:18;6062:26;;6098:67;6162:1;6151:9;6147:17;6138:6;6098:67;:::i;:::-;5958:214;;;;:::o;6178:329::-;6237:6;6286:2;6274:9;6265:7;6261:23;6257:32;6254:119;;;6292:79;;:::i;:::-;6254:119;6412:1;6437:53;6482:7;6473:6;6462:9;6458:22;6437:53;:::i;:::-;6427:63;;6383:117;6178:329;;;;:::o;6513:::-;6572:6;6621:2;6609:9;6600:7;6596:23;6592:32;6589:119;;;6627:79;;:::i;:::-;6589:119;6747:1;6772:53;6817:7;6808:6;6797:9;6793:22;6772:53;:::i;:::-;6762:63;;6718:117;6513:329;;;;:::o;6848:116::-;6918:21;6933:5;6918:21;:::i;:::-;6911:5;6908:32;6898:60;;6954:1;6951;6944:12;6898:60;6848:116;:::o;6970:133::-;7013:5;7051:6;7038:20;7029:29;;7067:30;7091:5;7067:30;:::i;:::-;6970:133;;;;:::o;7109:613::-;7183:6;7191;7199;7248:2;7236:9;7227:7;7223:23;7219:32;7216:119;;;7254:79;;:::i;:::-;7216:119;7374:1;7399:53;7444:7;7435:6;7424:9;7420:22;7399:53;:::i;:::-;7389:63;;7345:117;7501:2;7527:53;7572:7;7563:6;7552:9;7548:22;7527:53;:::i;:::-;7517:63;;7472:118;7629:2;7655:50;7697:7;7688:6;7677:9;7673:22;7655:50;:::i;:::-;7645:60;;7600:115;7109:613;;;;;:::o;7728:468::-;7793:6;7801;7850:2;7838:9;7829:7;7825:23;7821:32;7818:119;;;7856:79;;:::i;:::-;7818:119;7976:1;8001:53;8046:7;8037:6;8026:9;8022:22;8001:53;:::i;:::-;7991:63;;7947:117;8103:2;8129:50;8171:7;8162:6;8151:9;8147:22;8129:50;:::i;:::-;8119:60;;8074:115;7728:468;;;;;:::o;8202:619::-;8279:6;8287;8295;8344:2;8332:9;8323:7;8319:23;8315:32;8312:119;;;8350:79;;:::i;:::-;8312:119;8470:1;8495:53;8540:7;8531:6;8520:9;8516:22;8495:53;:::i;:::-;8485:63;;8441:117;8597:2;8623:53;8668:7;8659:6;8648:9;8644:22;8623:53;:::i;:::-;8613:63;;8568:118;8725:2;8751:53;8796:7;8787:6;8776:9;8772:22;8751:53;:::i;:::-;8741:63;;8696:118;8202:619;;;;;:::o;8827:474::-;8895:6;8903;8952:2;8940:9;8931:7;8927:23;8923:32;8920:119;;;8958:79;;:::i;:::-;8920:119;9078:1;9103:53;9148:7;9139:6;9128:9;9124:22;9103:53;:::i;:::-;9093:63;;9049:117;9205:2;9231:53;9276:7;9267:6;9256:9;9252:22;9231:53;:::i;:::-;9221:63;;9176:118;8827:474;;;;;:::o;9307:::-;9375:6;9383;9432:2;9420:9;9411:7;9407:23;9403:32;9400:119;;;9438:79;;:::i;:::-;9400:119;9558:1;9583:53;9628:7;9619:6;9608:9;9604:22;9583:53;:::i;:::-;9573:63;;9529:117;9685:2;9711:53;9756:7;9747:6;9736:9;9732:22;9711:53;:::i;:::-;9701:63;;9656:118;9307:474;;;;;:::o;9787:180::-;9835:77;9832:1;9825:88;9932:4;9929:1;9922:15;9956:4;9953:1;9946:15;9973:320;10017:6;10054:1;10048:4;10044:12;10034:22;;10101:1;10095:4;10091:12;10122:18;10112:81;;10178:4;10170:6;10166:17;10156:27;;10112:81;10240:2;10232:6;10229:14;10209:18;10206:38;10203:84;;10259:18;;:::i;:::-;10203:84;10024:269;9973:320;;;:::o;10299:180::-;10347:77;10344:1;10337:88;10444:4;10441:1;10434:15;10468:4;10465:1;10458:15;10485:191;10525:3;10544:20;10562:1;10544:20;:::i;:::-;10539:25;;10578:20;10596:1;10578:20;:::i;:::-;10573:25;;10621:1;10618;10614:9;10607:16;;10642:3;10639:1;10636:10;10633:36;;;10649:18;;:::i;:::-;10633:36;10485:191;;;;:::o;10682:153::-;10822:5;10818:1;10810:6;10806:14;10799:29;10682:153;:::o;10841:365::-;10983:3;11004:66;11068:1;11063:3;11004:66;:::i;:::-;10997:73;;11079:93;11168:3;11079:93;:::i;:::-;11197:2;11192:3;11188:12;11181:19;;10841:365;;;:::o;11212:419::-;11378:4;11416:2;11405:9;11401:18;11393:26;;11465:9;11459:4;11455:20;11451:1;11440:9;11436:17;11429:47;11493:131;11619:4;11493:131;:::i;:::-;11485:139;;11212:419;;;:::o;11637:164::-;11777:16;11773:1;11765:6;11761:14;11754:40;11637:164;:::o;11807:366::-;11949:3;11970:67;12034:2;12029:3;11970:67;:::i;:::-;11963:74;;12046:93;12135:3;12046:93;:::i;:::-;12164:2;12159:3;12155:12;12148:19;;11807:366;;;:::o;12179:419::-;12345:4;12383:2;12372:9;12368:18;12360:26;;12432:9;12426:4;12422:20;12418:1;12407:9;12403:17;12396:47;12460:131;12586:4;12460:131;:::i;:::-;12452:139;;12179:419;;;:::o;12604:410::-;12644:7;12667:20;12685:1;12667:20;:::i;:::-;12662:25;;12701:20;12719:1;12701:20;:::i;:::-;12696:25;;12756:1;12753;12749:9;12778:30;12796:11;12778:30;:::i;:::-;12767:41;;12957:1;12948:7;12944:15;12941:1;12938:22;12918:1;12911:9;12891:83;12868:139;;12987:18;;:::i;:::-;12868:139;12652:362;12604:410;;;;:::o;13020:180::-;13068:77;13065:1;13058:88;13165:4;13162:1;13155:15;13189:4;13186:1;13179:15;13206:185;13246:1;13263:20;13281:1;13263:20;:::i;:::-;13258:25;;13297:20;13315:1;13297:20;:::i;:::-;13292:25;;13336:1;13326:35;;13341:18;;:::i;:::-;13326:35;13383:1;13380;13376:9;13371:14;;13206:185;;;;:::o;13397:147::-;13498:11;13535:3;13520:18;;13397:147;;;;:::o;13550:114::-;;:::o;13670:398::-;13829:3;13850:83;13931:1;13926:3;13850:83;:::i;:::-;13843:90;;13942:93;14031:3;13942:93;:::i;:::-;14060:1;14055:3;14051:11;14044:18;;13670:398;;;:::o;14074:379::-;14258:3;14280:147;14423:3;14280:147;:::i;:::-;14273:154;;14444:3;14437:10;;14074:379;;;:::o;14459:169::-;14599:21;14595:1;14587:6;14583:14;14576:45;14459:169;:::o;14634:366::-;14776:3;14797:67;14861:2;14856:3;14797:67;:::i;:::-;14790:74;;14873:93;14962:3;14873:93;:::i;:::-;14991:2;14986:3;14982:12;14975:19;;14634:366;;;:::o;15006:419::-;15172:4;15210:2;15199:9;15195:18;15187:26;;15259:9;15253:4;15249:20;15245:1;15234:9;15230:17;15223:47;15287:131;15413:4;15287:131;:::i;:::-;15279:139;;15006:419;;;:::o;15431:238::-;15571:34;15567:1;15559:6;15555:14;15548:58;15640:21;15635:2;15627:6;15623:15;15616:46;15431:238;:::o;15675:366::-;15817:3;15838:67;15902:2;15897:3;15838:67;:::i;:::-;15831:74;;15914:93;16003:3;15914:93;:::i;:::-;16032:2;16027:3;16023:12;16016:19;;15675:366;;;:::o;16047:419::-;16213:4;16251:2;16240:9;16236:18;16228:26;;16300:9;16294:4;16290:20;16286:1;16275:9;16271:17;16264:47;16328:131;16454:4;16328:131;:::i;:::-;16320:139;;16047:419;;;:::o;16472:235::-;16612:34;16608:1;16600:6;16596:14;16589:58;16681:18;16676:2;16668:6;16664:15;16657:43;16472:235;:::o;16713:366::-;16855:3;16876:67;16940:2;16935:3;16876:67;:::i;:::-;16869:74;;16952:93;17041:3;16952:93;:::i;:::-;17070:2;17065:3;17061:12;17054:19;;16713:366;;;:::o;17085:419::-;17251:4;17289:2;17278:9;17274:18;17266:26;;17338:9;17332:4;17328:20;17324:1;17313:9;17309:17;17302:47;17366:131;17492:4;17366:131;:::i;:::-;17358:139;;17085:419;;;:::o;17510:224::-;17650:34;17646:1;17638:6;17634:14;17627:58;17719:7;17714:2;17706:6;17702:15;17695:32;17510:224;:::o;17740:366::-;17882:3;17903:67;17967:2;17962:3;17903:67;:::i;:::-;17896:74;;17979:93;18068:3;17979:93;:::i;:::-;18097:2;18092:3;18088:12;18081:19;;17740:366;;;:::o;18112:419::-;18278:4;18316:2;18305:9;18301:18;18293:26;;18365:9;18359:4;18355:20;18351:1;18340:9;18336:17;18329:47;18393:131;18519:4;18393:131;:::i;:::-;18385:139;;18112:419;;;:::o;18537:143::-;18594:5;18625:6;18619:13;18610:22;;18641:33;18668:5;18641:33;:::i;:::-;18537:143;;;;:::o;18686:351::-;18756:6;18805:2;18793:9;18784:7;18780:23;18776:32;18773:119;;;18811:79;;:::i;:::-;18773:119;18931:1;18956:64;19012:7;19003:6;18992:9;18988:22;18956:64;:::i;:::-;18946:74;;18902:128;18686:351;;;;:::o;19043:332::-;19164:4;19202:2;19191:9;19187:18;19179:26;;19215:71;19283:1;19272:9;19268:17;19259:6;19215:71;:::i;:::-;19296:72;19364:2;19353:9;19349:18;19340:6;19296:72;:::i;:::-;19043:332;;;;;:::o;19381:::-;19502:4;19540:2;19529:9;19525:18;19517:26;;19553:71;19621:1;19610:9;19606:17;19597:6;19553:71;:::i;:::-;19634:72;19702:2;19691:9;19687:18;19678:6;19634:72;:::i;:::-;19381:332;;;;;:::o;19719:137::-;19773:5;19804:6;19798:13;19789:22;;19820:30;19844:5;19820:30;:::i;:::-;19719:137;;;;:::o;19862:345::-;19929:6;19978:2;19966:9;19957:7;19953:23;19949:32;19946:119;;;19984:79;;:::i;:::-;19946:119;20104:1;20129:61;20182:7;20173:6;20162:9;20158:22;20129:61;:::i;:::-;20119:71;;20075:125;19862:345;;;;:::o;20213:85::-;20258:7;20287:5;20276:16;;20213:85;;;:::o;20304:158::-;20362:9;20395:61;20413:42;20422:32;20448:5;20422:32;:::i;:::-;20413:42;:::i;:::-;20395:61;:::i;:::-;20382:74;;20304:158;;;:::o;20468:147::-;20563:45;20602:5;20563:45;:::i;:::-;20558:3;20551:58;20468:147;;:::o;20621:807::-;20870:4;20908:3;20897:9;20893:19;20885:27;;20922:71;20990:1;20979:9;20975:17;20966:6;20922:71;:::i;:::-;21003:72;21071:2;21060:9;21056:18;21047:6;21003:72;:::i;:::-;21085:80;21161:2;21150:9;21146:18;21137:6;21085:80;:::i;:::-;21175;21251:2;21240:9;21236:18;21227:6;21175:80;:::i;:::-;21265:73;21333:3;21322:9;21318:19;21309:6;21265:73;:::i;:::-;21348;21416:3;21405:9;21401:19;21392:6;21348:73;:::i;:::-;20621:807;;;;;;;;;:::o;21434:143::-;21491:5;21522:6;21516:13;21507:22;;21538:33;21565:5;21538:33;:::i;:::-;21434:143;;;;:::o;21583:663::-;21671:6;21679;21687;21736:2;21724:9;21715:7;21711:23;21707:32;21704:119;;;21742:79;;:::i;:::-;21704:119;21862:1;21887:64;21943:7;21934:6;21923:9;21919:22;21887:64;:::i;:::-;21877:74;;21833:128;22000:2;22026:64;22082:7;22073:6;22062:9;22058:22;22026:64;:::i;:::-;22016:74;;21971:129;22139:2;22165:64;22221:7;22212:6;22201:9;22197:22;22165:64;:::i;:::-;22155:74;;22110:129;21583:663;;;;;:::o;22252:225::-;22392:34;22388:1;22380:6;22376:14;22369:58;22461:8;22456:2;22448:6;22444:15;22437:33;22252:225;:::o;22483:366::-;22625:3;22646:67;22710:2;22705:3;22646:67;:::i;:::-;22639:74;;22722:93;22811:3;22722:93;:::i;:::-;22840:2;22835:3;22831:12;22824:19;;22483:366;;;:::o;22855:419::-;23021:4;23059:2;23048:9;23044:18;23036:26;;23108:9;23102:4;23098:20;23094:1;23083:9;23079:17;23072:47;23136:131;23262:4;23136:131;:::i;:::-;23128:139;;22855:419;;;:::o;23280:158::-;23420:10;23416:1;23408:6;23404:14;23397:34;23280:158;:::o;23444:365::-;23586:3;23607:66;23671:1;23666:3;23607:66;:::i;:::-;23600:73;;23682:93;23771:3;23682:93;:::i;:::-;23800:2;23795:3;23791:12;23784:19;;23444:365;;;:::o;23815:419::-;23981:4;24019:2;24008:9;24004:18;23996:26;;24068:9;24062:4;24058:20;24054:1;24043:9;24039:17;24032:47;24096:131;24222:4;24096:131;:::i;:::-;24088:139;;23815:419;;;:::o;24240:182::-;24380:34;24376:1;24368:6;24364:14;24357:58;24240:182;:::o;24428:366::-;24570:3;24591:67;24655:2;24650:3;24591:67;:::i;:::-;24584:74;;24667:93;24756:3;24667:93;:::i;:::-;24785:2;24780:3;24776:12;24769:19;;24428:366;;;:::o;24800:419::-;24966:4;25004:2;24993:9;24989:18;24981:26;;25053:9;25047:4;25043:20;25039:1;25028:9;25024:17;25017:47;25081:131;25207:4;25081:131;:::i;:::-;25073:139;;24800:419;;;:::o;25225:229::-;25365:34;25361:1;25353:6;25349:14;25342:58;25434:12;25429:2;25421:6;25417:15;25410:37;25225:229;:::o;25460:366::-;25602:3;25623:67;25687:2;25682:3;25623:67;:::i;:::-;25616:74;;25699:93;25788:3;25699:93;:::i;:::-;25817:2;25812:3;25808:12;25801:19;;25460:366;;;:::o;25832:419::-;25998:4;26036:2;26025:9;26021:18;26013:26;;26085:9;26079:4;26075:20;26071:1;26060:9;26056:17;26049:47;26113:131;26239:4;26113:131;:::i;:::-;26105:139;;25832:419;;;:::o;26257:351::-;26327:6;26376:2;26364:9;26355:7;26351:23;26347:32;26344:119;;;26382:79;;:::i;:::-;26344:119;26502:1;26527:64;26583:7;26574:6;26563:9;26559:22;26527:64;:::i;:::-;26517:74;;26473:128;26257:351;;;;:::o;26614:194::-;26654:4;26674:20;26692:1;26674:20;:::i;:::-;26669:25;;26708:20;26726:1;26708:20;:::i;:::-;26703:25;;26752:1;26749;26745:9;26737:17;;26776:1;26770:4;26767:11;26764:37;;;26781:18;;:::i;:::-;26764:37;26614:194;;;;:::o;26814:182::-;26954:34;26950:1;26942:6;26938:14;26931:58;26814:182;:::o;27002:366::-;27144:3;27165:67;27229:2;27224:3;27165:67;:::i;:::-;27158:74;;27241:93;27330:3;27241:93;:::i;:::-;27359:2;27354:3;27350:12;27343:19;;27002:366;;;:::o;27374:419::-;27540:4;27578:2;27567:9;27563:18;27555:26;;27627:9;27621:4;27617:20;27613:1;27602:9;27598:17;27591:47;27655:131;27781:4;27655:131;:::i;:::-;27647:139;;27374:419;;;:::o;27799:180::-;27847:77;27844:1;27837:88;27944:4;27941:1;27934:15;27968:4;27965:1;27958:15;27985:180;28033:77;28030:1;28023:88;28130:4;28127:1;28120:15;28154:4;28151:1;28144:15;28171:114;28238:6;28272:5;28266:12;28256:22;;28171:114;;;:::o;28291:184::-;28390:11;28424:6;28419:3;28412:19;28464:4;28459:3;28455:14;28440:29;;28291:184;;;;:::o;28481:132::-;28548:4;28571:3;28563:11;;28601:4;28596:3;28592:14;28584:22;;28481:132;;;:::o;28619:108::-;28696:24;28714:5;28696:24;:::i;:::-;28691:3;28684:37;28619:108;;:::o;28733:179::-;28802:10;28823:46;28865:3;28857:6;28823:46;:::i;:::-;28901:4;28896:3;28892:14;28878:28;;28733:179;;;;:::o;28918:113::-;28988:4;29020;29015:3;29011:14;29003:22;;28918:113;;;:::o;29067:732::-;29186:3;29215:54;29263:5;29215:54;:::i;:::-;29285:86;29364:6;29359:3;29285:86;:::i;:::-;29278:93;;29395:56;29445:5;29395:56;:::i;:::-;29474:7;29505:1;29490:284;29515:6;29512:1;29509:13;29490:284;;;29591:6;29585:13;29618:63;29677:3;29662:13;29618:63;:::i;:::-;29611:70;;29704:60;29757:6;29704:60;:::i;:::-;29694:70;;29550:224;29537:1;29534;29530:9;29525:14;;29490:284;;;29494:14;29790:3;29783:10;;29191:608;;;29067:732;;;;:::o;29805:831::-;30068:4;30106:3;30095:9;30091:19;30083:27;;30120:71;30188:1;30177:9;30173:17;30164:6;30120:71;:::i;:::-;30201:80;30277:2;30266:9;30262:18;30253:6;30201:80;:::i;:::-;30328:9;30322:4;30318:20;30313:2;30302:9;30298:18;30291:48;30356:108;30459:4;30450:6;30356:108;:::i;:::-;30348:116;;30474:72;30542:2;30531:9;30527:18;30518:6;30474:72;:::i;:::-;30556:73;30624:3;30613:9;30609:19;30600:6;30556:73;:::i;:::-;29805:831;;;;;;;;:::o

Swarm Source

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