ETH Price: $3,640.67 (+8.26%)

Token

BullRunV2 (BRLV2)
 

Overview

Max Total Supply

991,290.788694937849389363 BRLV2

Holders

266

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
31.8506620234473 BRLV2

Value
$0.00
0x2ee1aaaf962189b48a49824860a51bf559d2acdc
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:
BullRunV2

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-11-18
*/

// SPDX-License-Identifier: Unlicensed

// File: @uniswap/v2-core/contracts/interfaces/IUniswapV2Factory.sol

pragma solidity >=0.5.0;

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

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

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

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

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

// File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router01.sol

pragma solidity >=0.6.2;

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

// File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol

pragma solidity >=0.6.2;


interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

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

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;


/**
 * @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 Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

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

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

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

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

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol


// OpenZeppelin Contracts v4.4.0 (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

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

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

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

    /**
     * @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 `sender` to `recipient` 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 sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

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

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

// File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;


/**
 * @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);
}

// File: @openzeppelin/contracts/token/ERC20/ERC20.sol


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

pragma solidity ^0.8.0;




/**
 * @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.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * 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}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * 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 value {ERC20} uses, unless this function is
     * 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, _allowances[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 = _allowances[owner][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * 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), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
        }
        _balances[to] += amount;

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

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

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

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

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

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

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

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

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

    /**
     * @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 {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    /**
     * @dev Spend `amount` form the allowance of `owner` toward `spender`.
     *
     * 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, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

// File: BRLv2.sol



pragma solidity ^0.8.9;





contract BullRunFeeHandler is Ownable {

    IUniswapV2Router02 public immutable uniswapV2Router;
    IERC20 public usdc;
    IERC20 public brlToken;

    address public marketingWallet;
    address public opsWallet;

    uint256 residualTokens;

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

    constructor(address _brlToken, address _marketingWallet, address _opsWallet) {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

        uniswapV2Router = _uniswapV2Router;

        brlToken = IERC20(_brlToken);
        marketingWallet = _marketingWallet;
        opsWallet = _opsWallet;

        usdc = IERC20(0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48);
        IERC20(usdc).approve(address(_uniswapV2Router), type(uint256).max);

    }

    function processFees(uint256 liquidityTokens, uint256 opsTokens, uint256 marketingTokens) external onlyOwner {

        liquidityTokens += residualTokens;
        uint256 half = liquidityTokens / 2;
        uint256 otherHalf = liquidityTokens - half;

        uint256 total = half + opsTokens + marketingTokens;

        IERC20(brlToken).approve(address(uniswapV2Router), total + otherHalf);

        address[] memory path = new address[](2);
        path[0] = address(brlToken);
        path[1] = address(usdc);

        // make the swap
        uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            total,
            0, // accept any amount of USDC
            path,
            address(this),
            block.timestamp
        );

        uint256 usdcBalance = IERC20(usdc).balanceOf(address(this));
        uint256 liquidity = usdcBalance * half / total;
        uint256 marketing = usdcBalance * marketingTokens / total;
        uint256 ops = usdcBalance - liquidity - marketing;

        (uint256 amountA,,) = uniswapV2Router.addLiquidity(
            address(brlToken),
            address(usdc),
            otherHalf,
            liquidity,
            0,
            0,
            address(0xdead),
            block.timestamp
        );
        residualTokens += (otherHalf - amountA);

        emit SwapAndLiquify(half, liquidity, otherHalf);

        usdc.transfer(marketingWallet, marketing);
        usdc.transfer(opsWallet, ops);

    }

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

    function updateOpsWallet(address newWallet) external onlyOwner {
        opsWallet = newWallet;
    }

}

error InvalidTransfer(address from, address to);
error TransferDelayEnabled(uint256 currentBlock, uint256 enabledBlock);
error ExceedsMaxTxAmount(uint256 attempt, uint256 max);
error ExceedsMaxWalletAmount(uint256 attempt, uint256 max);
error InvalidConfiguration();
error TradingNotEnabled();

contract BullRunV2 is ERC20, Ownable {

    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;
    mapping (address => bool) public _isExcludedFromDelay;
    mapping (address => bool) public _isBlacklisted;
    mapping (address => uint256) private _holderLastTxBlock;

    IUniswapV2Router02 public uniswapV2Router;
    address public immutable uniswapV2Pair;

    BullRunFeeHandler public brlFeeHandler;

    bool private swapping;
    bool public swapEnabled = true;
    bool public isTradingEnabled;

    uint256 public burnBuyFee = 100;
    uint256 public liquidityBuyFee = 400;
    uint256 public opsBuyFee = 300;
    uint256 public marketingBuyFee = 200;
    uint256 public totalBuyFees = 1000;

    uint256 public burnSellFee = 100;
    uint256 public liquiditySellFee = 500;
    uint256 public opsSellFee = 300;
    uint256 public marketingSellFee = 300;
    uint256 public totalSellFees = 1200;

    uint256 public burnTokens;
    uint256 public liquidityTokens;
    uint256 public opsTokens;
    uint256 public marketingTokens;

    uint256 public maxTransactionAmount = 5000 * 10**18; //0.5% of total supply
    uint256 public swapTokensAtAmount = 500 * 10**18; //0.05% of total supply
    uint256 public maxWallet = 10000 * 10**18; //1% of total supply

    uint256 public buyDelay = 2;
    uint256 public sellDelay = 5;
    uint256 public transferDelay = 1;

    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event UpdateFeeHandler(address indexed newAddress, address indexed oldAddress);

    constructor(address _marketingWallet, address _opsWallet) ERC20("BullRunV2", "BRLV2") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

        uniswapV2Router = _uniswapV2Router;

        address usdc = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48;

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), usdc);

        brlFeeHandler = new BullRunFeeHandler(address(this), _marketingWallet, _opsWallet);

        _isBlacklisted[address(0)] = true;

        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[address(brlFeeHandler)] = true;
        _isExcludedFromFees[address(0xdead)] = true;

        _isExcludedMaxTransactionAmount[owner()] = true;
        _isExcludedMaxTransactionAmount[address(this)] = true;
        _isExcludedMaxTransactionAmount[address(brlFeeHandler)] = true;
        _isExcludedMaxTransactionAmount[address(0xdead)] = true;

        _isExcludedMaxTransactionAmount[address(_uniswapV2Router)] = true;
        _isExcludedMaxTransactionAmount[address(uniswapV2Pair)] = true;

        _mint(owner(), 10**6 * 10**18);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        if (_isBlacklisted[from] || _isBlacklisted[to]) {
            revert InvalidTransfer(from, to);
        }

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

        if (
            from != owner() &&
            to != owner() &&
            to != address(0) &&
            to != address(0xdead) &&
            !swapping
        ){

            if (!isTradingEnabled) {
               revert TradingNotEnabled();
            }

            uint256 delayedUntil = _holderLastTxBlock[tx.origin];
            if (from == uniswapV2Pair) {
                delayedUntil += buyDelay;
            } else if (to == uniswapV2Pair) {
                delayedUntil += sellDelay;
            } else if (!_isExcludedFromDelay[from] && !_isExcludedFromDelay[to]) {
                delayedUntil += transferDelay;
            }

            if (delayedUntil > block.number) {
                revert TransferDelayEnabled(block.number, delayedUntil);
            }
            _holderLastTxBlock[tx.origin] = block.number;

            if (from == uniswapV2Pair && !_isExcludedMaxTransactionAmount[to]) { //buys
                if (amount > maxTransactionAmount) {
                    revert ExceedsMaxTxAmount(amount, maxTransactionAmount);
                }
                uint256 potentialBalance = amount + balanceOf(to);
                if (potentialBalance > maxWallet) {
                    revert ExceedsMaxWalletAmount(potentialBalance, maxWallet);
                }

            } else if (to == uniswapV2Pair && !_isExcludedMaxTransactionAmount[from]) { //sells
                if (amount > maxTransactionAmount) {
                    revert ExceedsMaxTxAmount(amount, maxTransactionAmount);
                }
            } else if(!_isExcludedMaxTransactionAmount[to]){
                uint256 potentialBalance = amount + balanceOf(to);
                if (potentialBalance > maxWallet) {
                    revert ExceedsMaxWalletAmount(potentialBalance, maxWallet);
                }
            }
        }

		    bool canSwap = balanceOf(address(brlFeeHandler)) >= swapTokensAtAmount;

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

            uint256 total = liquidityTokens + opsTokens + marketingTokens;
            uint256 liqToSwap = swapTokensAtAmount * liquidityTokens / total;
            uint256 opsToSwap = swapTokensAtAmount * opsTokens / total;
            uint256 marToSwap = swapTokensAtAmount * marketingTokens / total;

            brlFeeHandler.processFees(liqToSwap, opsToSwap, marToSwap);

            liquidityTokens -= liqToSwap;
            marketingTokens -= marToSwap;
            opsTokens -= opsToSwap;

            swapping = false;
        }

        if(!swapping && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            uint256 fees;
            if (to == uniswapV2Pair && totalSellFees != 0) { //sell
                fees = amount * totalSellFees / 10000;
                burnTokens += fees * burnSellFee / totalSellFees;
                liquidityTokens += fees * liquiditySellFee / totalSellFees;
                opsTokens += fees * opsSellFee / totalSellFees;
                marketingTokens += fees * marketingSellFee / totalSellFees;
            } else if (from == uniswapV2Pair && totalBuyFees != 0) { //buy
                fees = amount * totalBuyFees / 10000;
                burnTokens += fees * burnBuyFee / totalBuyFees;
                liquidityTokens += fees * liquidityBuyFee / totalBuyFees;
                opsTokens += fees * opsBuyFee / totalBuyFees;
                marketingTokens += fees * marketingBuyFee / totalBuyFees;
            }
            if (fees > 0) {
                amount -= fees;
                super._transfer(from, address(brlFeeHandler), fees);
                super._burn(address(brlFeeHandler), burnTokens);
            }

        }

        super._transfer(from, to, amount);

    }

    function setBlacklist(address account, bool value) external onlyOwner {
        _isBlacklisted[account] = value;
    }

    function blacklistMany(address[] memory accounts) external onlyOwner {
        uint256 len = accounts.length;
        for (uint256 i = 0; i < len; i++) {
            _isBlacklisted[accounts[i]] = true;
        }
    }

    function updateDelayBlocks(uint256 _buy, uint256 _sell, uint256 _tx) external onlyOwner {
        buyDelay = _buy;
        sellDelay = _sell;
        transferDelay = _tx;
    }

    function setExcludedFromMaxTransaction(address account, bool value) public onlyOwner {
        _isExcludedMaxTransactionAmount[account] = value;
    }

    function excludeManyFromMaxTransaction(address[] memory accounts) public onlyOwner {
        uint256 len = accounts.length;
        for (uint256 i = 0; i < len; i++) {
            _isExcludedMaxTransactionAmount[accounts[i]] = true;
        }
    }

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

    function excludeManyFromFees(address[] memory accounts) public onlyOwner {
        uint256 len = accounts.length;
        for (uint256 i = 0; i < len; i++) {
            _isExcludedFromFees[accounts[i]] = true;
        }
    }

    function setExcludedFromDelay(address account, bool value) public onlyOwner {
        _isExcludedFromDelay[account] = value;
    }

    function setSellFees(uint256 burn, uint256 liquidity, uint256 ops, uint256 marketing) external onlyOwner {
        uint256 total = burn + liquidity + ops + marketing;
        if (total > 2500) {
            revert InvalidConfiguration();
        }
        burnSellFee = burn;
        liquiditySellFee = liquidity;
        opsSellFee = ops;
        marketingSellFee = marketing;
        totalSellFees = total;
    }

    function setBuyFees(uint256 burn, uint256 liquidity, uint256 ops, uint256 marketing) external onlyOwner {
        uint256 total = burn + liquidity + ops + marketing;
        if (total > 2500) {
            revert InvalidConfiguration();
        }
        burnBuyFee = burn;
        liquidityBuyFee = liquidity;
        opsBuyFee = ops;
        marketingBuyFee = marketing;
        totalBuyFees = total;
    }

    function airdrop(address[] memory _user, uint256[] memory _amount) external onlyOwner {
        uint256 len = _user.length;
        if (len != _amount.length) {
            revert InvalidConfiguration();
        }
        for (uint256 i = 0; i < len; i++) {
            super._transfer(_msgSender(), _user[i], _amount[i]);
        }
    }

    function setSwapAtAmount(uint256 amount) external onlyOwner {
        swapTokensAtAmount = amount;
    }

    function setMaxTxAmount(uint256 _maxTxAmt) external onlyOwner() {
        maxTransactionAmount = _maxTxAmt;
    }

    function setMaxWalletSize(uint256 _maxWalletSize) external onlyOwner() {
        maxWallet = _maxWalletSize;
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    function updateMarketingWallet(address newWallet) external onlyOwner {
        brlFeeHandler.updateMarketingWallet(newWallet);
    }

    function updateOpsWallet(address newWallet) external onlyOwner {
        brlFeeHandler.updateOpsWallet(newWallet);
    }

    function enableTrading() external onlyOwner {
        if (isTradingEnabled) {
            revert InvalidConfiguration();
        }
        isTradingEnabled = true;
    }

    function updateFeeHandler(address newAddress) public onlyOwner {
        if (newAddress == address(brlFeeHandler)) {
            revert InvalidConfiguration();
        }

        BullRunFeeHandler newFeeHandler = BullRunFeeHandler(newAddress);

        if (newFeeHandler.owner() != address(this)) {
            revert InvalidConfiguration();
        }

        setExcludedFromMaxTransaction(address(newFeeHandler), true);
        setExcludedFromFees(address(newFeeHandler), true);

        brlFeeHandler = newFeeHandler;

        emit UpdateFeeHandler(newAddress, address(brlFeeHandler));
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"},{"internalType":"address","name":"_opsWallet","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"attempt","type":"uint256"},{"internalType":"uint256","name":"max","type":"uint256"}],"name":"ExceedsMaxTxAmount","type":"error"},{"inputs":[{"internalType":"uint256","name":"attempt","type":"uint256"},{"internalType":"uint256","name":"max","type":"uint256"}],"name":"ExceedsMaxWalletAmount","type":"error"},{"inputs":[],"name":"InvalidConfiguration","type":"error"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"}],"name":"InvalidTransfer","type":"error"},{"inputs":[],"name":"TradingNotEnabled","type":"error"},{"inputs":[{"internalType":"uint256","name":"currentBlock","type":"uint256"},{"internalType":"uint256","name":"enabledBlock","type":"uint256"}],"name":"TransferDelayEnabled","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateFeeHandler","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_user","type":"address[]"},{"internalType":"uint256[]","name":"_amount","type":"uint256[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"blacklistMany","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"brlFeeHandler","outputs":[{"internalType":"contract BullRunFeeHandler","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"excludeManyFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"excludeManyFromMaxTransaction","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":[],"name":"isTradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquiditySellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"opsBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"opsSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"opsTokens","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":"sellDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"burn","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"ops","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setExcludedFromDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setExcludedFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTxAmt","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxWalletSize","type":"uint256"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"burn","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"ops","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSwapAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBuyFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSellFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"transferDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"_buy","type":"uint256"},{"internalType":"uint256","name":"_sell","type":"uint256"},{"internalType":"uint256","name":"_tx","type":"uint256"}],"name":"updateDelayBlocks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateFeeHandler","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateOpsWallet","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60a06040526001600c60156101000a81548160ff0219169083151502179055506064600d55610190600e5561012c600f5560c86010556103e860115560646012556101f460135561012c60145561012c6015556104b060165569010f0cf064dd59200000601b55681b1ae4d6e2ef500000601c5569021e19e0c9bab2400000601d556002601e556005601f5560016020553480156200009d57600080fd5b50604051620076b7380380620076b78339818101604052810190620000c3919062000bc2565b6040518060400160405280600981526020017f42756c6c52756e563200000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f42524c563200000000000000000000000000000000000000000000000000000081525081600390805190602001906200014792919062000a9a565b5080600490805190602001906200016092919062000a9a565b50505062000183620001776200081f60201b60201c565b6200082760201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d905080600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4890508173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200023d57600080fd5b505afa15801562000252573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000278919062000c09565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630836040518363ffffffff1660e01b8152600401620002b492919062000c4c565b602060405180830381600087803b158015620002cf57600080fd5b505af1158015620002e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200030a919062000c09565b73ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250503084846040516200034e9062000b2b565b6200035c9392919062000c79565b604051809103906000f08015801562000379573d6000803e3d6000fd5b50600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600960008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016006600062000428620008ed60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016006600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000620005bb620008ed60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600060805173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000815620007fe620008ed60201b60201c565b69d3c21bcecceda10000006200091760201b60201c565b5050505062000e62565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200098a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009819062000d17565b60405180910390fd5b6200099e6000838362000a9060201b60201c565b8060026000828254620009b2919062000d72565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000a09919062000d72565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a70919062000de0565b60405180910390a362000a8c6000838362000a9560201b60201c565b5050565b505050565b505050565b82805462000aa89062000e2c565b90600052602060002090601f01602090048101928262000acc576000855562000b18565b82601f1062000ae757805160ff191683800117855562000b18565b8280016001018555821562000b18579182015b8281111562000b1757825182559160200191906001019062000afa565b5b50905062000b27919062000b39565b5090565b611b7b8062005b3c83390190565b5b8082111562000b5457600081600090555060010162000b3a565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000b8a8262000b5d565b9050919050565b62000b9c8162000b7d565b811462000ba857600080fd5b50565b60008151905062000bbc8162000b91565b92915050565b6000806040838503121562000bdc5762000bdb62000b58565b5b600062000bec8582860162000bab565b925050602062000bff8582860162000bab565b9150509250929050565b60006020828403121562000c225762000c2162000b58565b5b600062000c328482850162000bab565b91505092915050565b62000c468162000b7d565b82525050565b600060408201905062000c63600083018562000c3b565b62000c72602083018462000c3b565b9392505050565b600060608201905062000c90600083018662000c3b565b62000c9f602083018562000c3b565b62000cae604083018462000c3b565b949350505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000cff601f8362000cb6565b915062000d0c8262000cc7565b602082019050919050565b6000602082019050818103600083015262000d328162000cf0565b9050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000d7f8262000d39565b915062000d8c8362000d39565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000dc45762000dc362000d43565b5b828201905092915050565b62000dda8162000d39565b82525050565b600060208201905062000df7600083018462000dcf565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000e4557607f821691505b6020821081141562000e5c5762000e5b62000dfd565b5b50919050565b608051614c8d62000eaf60003960008181611555015281816129e101528181612a4a01528181612bfa01528181612d5801528181612f79015281816132d401526134250152614c8d6000f3fe608060405234801561001057600080fd5b50600436106103af5760003560e01c80636c5b2855116101f4578063b9e937001161011a578063d0a39814116100ad578063ea1644d51161007c578063ea1644d514610ace578063ec28438a14610aea578063f2fde38b14610b06578063f8b45b0514610b22576103af565b8063d0a3981414610a44578063dd62ed3e14610a62578063e2f4560514610a92578063e7f444b314610ab0576103af565b8063c5e5d885116100e9578063c5e5d885146109ce578063c8c8ebe4146109ec578063c8f8d62c14610a0a578063ccb6135814610a26576103af565b8063b9e9370014610958578063bdc4d86314610976578063c2bd8f9b14610994578063c49b9a80146109b2576103af565b80638b27306d11610192578063a457c2d711610161578063a457c2d7146108be578063a9059cbb146108ee578063aacebbe31461091e578063ae2308781461093a576103af565b80638b27306d146108485780638c2c6909146108665780638da5cb5b1461088257806395d89b41146108a0576103af565b8063715018a6116101ce578063715018a6146107f85780637ae3ff47146108025780637e761377146108205780638a8c523c1461083e576103af565b80636c5b28551461078e5780636ddd1713146107aa57806370a08231146107c8576103af565b806323b872dd116102d957806349bd5a5e116102775780636402511e116102465780636402511e1461071c57806366650dae1461073857806367243482146107545780636807895214610770576103af565b806349bd5a5e146106a85780634b8ce602146106c6578063590ffdce146106e4578063611bfa3714610700576103af565b8063373bf3b1116102b3578063373bf3b11461060e57806337f2bc141461062a578063395093511461064857806343e968a314610678576103af565b806323b872dd146105a457806329988b04146105d4578063313ce567146105f0576103af565b8063121a6bcb1161035157806318160ddd1161032057806318160ddd1461051c5780631c3909e61461053a5780631cdd3be314610556578063234cee1e14610586576103af565b8063121a6bcb146104aa578063153b0d1e146104c65780631694505e146104e2578063178d9b8e14610500576103af565b8063095ea7b31161038d578063095ea7b31461040e578063099d0d301461043e5780630a702e8d1461045c57806310d5de531461047a576103af565b8063064a59d0146103b457806306fdde03146103d257806308003f78146103f0575b600080fd5b6103bc610b40565b6040516103c99190613b3b565b60405180910390f35b6103da610b53565b6040516103e79190613bef565b60405180910390f35b6103f8610be5565b6040516104059190613c2a565b60405180910390f35b61042860048036038101906104239190613ce3565b610beb565b6040516104359190613b3b565b60405180910390f35b610446610c0e565b6040516104539190613c2a565b60405180910390f35b610464610c14565b6040516104719190613c2a565b60405180910390f35b610494600480360381019061048f9190613d23565b610c1a565b6040516104a19190613b3b565b60405180910390f35b6104c460048036038101906104bf9190613d7c565b610c3a565b005b6104e060048036038101906104db9190613d7c565b610d11565b005b6104ea610de8565b6040516104f79190613e1b565b60405180910390f35b61051a60048036038101906105159190613e36565b610e0e565b005b610524610f16565b6040516105319190613c2a565b60405180910390f35b610554600480360381019061054f9190613d23565b610f20565b005b610570600480360381019061056b9190613d23565b61102c565b60405161057d9190613b3b565b60405180910390f35b61058e61104c565b60405161059b9190613ebe565b60405180910390f35b6105be60048036038101906105b99190613ed9565b611072565b6040516105cb9190613b3b565b60405180910390f35b6105ee60048036038101906105e99190613d23565b6110a1565b005b6105f8611363565b6040516106059190613f48565b60405180910390f35b610628600480360381019061062391906140ab565b61136c565b005b610632611483565b60405161063f9190613c2a565b60405180910390f35b610662600480360381019061065d9190613ce3565b611489565b60405161066f9190613b3b565b60405180910390f35b610692600480360381019061068d9190613d23565b611533565b60405161069f9190613b3b565b60405180910390f35b6106b0611553565b6040516106bd9190614103565b60405180910390f35b6106ce611577565b6040516106db9190613c2a565b60405180910390f35b6106fe60048036038101906106f99190613d7c565b61157d565b005b61071a600480360381019061071591906140ab565b611654565b005b6107366004803603810190610731919061411e565b61176b565b005b610752600480360381019061074d9190613d7c565b6117f1565b005b61076e6004803603810190610769919061420e565b6118c8565b005b6107786119ee565b6040516107859190613c2a565b60405180910390f35b6107a860048036038101906107a39190613e36565b6119f4565b005b6107b2611afc565b6040516107bf9190613b3b565b60405180910390f35b6107e260048036038101906107dd9190613d23565b611b0f565b6040516107ef9190613c2a565b60405180910390f35b610800611b57565b005b61080a611bdf565b6040516108179190613c2a565b60405180910390f35b610828611be5565b6040516108359190613c2a565b60405180910390f35b610846611beb565b005b610850611ccb565b60405161085d9190613c2a565b60405180910390f35b610880600480360381019061087b91906140ab565b611cd1565b005b61088a611de8565b6040516108979190614103565b60405180910390f35b6108a8611e12565b6040516108b59190613bef565b60405180910390f35b6108d860048036038101906108d39190613ce3565b611ea4565b6040516108e59190613b3b565b60405180910390f35b61090860048036038101906109039190613ce3565b611f8e565b6040516109159190613b3b565b60405180910390f35b61093860048036038101906109339190613d23565b611fb1565b005b6109426120bd565b60405161094f9190613c2a565b60405180910390f35b6109606120c3565b60405161096d9190613c2a565b60405180910390f35b61097e6120c9565b60405161098b9190613c2a565b60405180910390f35b61099c6120cf565b6040516109a99190613c2a565b60405180910390f35b6109cc60048036038101906109c79190614286565b6120d5565b005b6109d66121a5565b6040516109e39190613c2a565b60405180910390f35b6109f46121ab565b604051610a019190613c2a565b60405180910390f35b610a246004803603810190610a1f91906142b3565b6121b1565b005b610a2e612247565b604051610a3b9190613c2a565b60405180910390f35b610a4c61224d565b604051610a599190613c2a565b60405180910390f35b610a7c6004803603810190610a779190614306565b612253565b604051610a899190613c2a565b60405180910390f35b610a9a6122da565b604051610aa79190613c2a565b60405180910390f35b610ab86122e0565b604051610ac59190613c2a565b60405180910390f35b610ae86004803603810190610ae3919061411e565b6122e6565b005b610b046004803603810190610aff919061411e565b61236c565b005b610b206004803603810190610b1b9190613d23565b6123f2565b005b610b2a6124ea565b604051610b379190613c2a565b60405180910390f35b600c60169054906101000a900460ff1681565b606060038054610b6290614375565b80601f0160208091040260200160405190810160405280929190818152602001828054610b8e90614375565b8015610bdb5780601f10610bb057610100808354040283529160200191610bdb565b820191906000526020600020905b815481529060010190602001808311610bbe57829003601f168201915b5050505050905090565b60175481565b600080610bf66124f0565b9050610c038185856124f8565b600191505092915050565b60135481565b60205481565b60076020528060005260406000206000915054906101000a900460ff1681565b610c426124f0565b73ffffffffffffffffffffffffffffffffffffffff16610c60611de8565b73ffffffffffffffffffffffffffffffffffffffff1614610cb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cad906143f3565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b610d196124f0565b73ffffffffffffffffffffffffffffffffffffffff16610d37611de8565b73ffffffffffffffffffffffffffffffffffffffff1614610d8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d84906143f3565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e166124f0565b73ffffffffffffffffffffffffffffffffffffffff16610e34611de8565b73ffffffffffffffffffffffffffffffffffffffff1614610e8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e81906143f3565b60405180910390fd5b600081838587610e9a9190614442565b610ea49190614442565b610eae9190614442565b90506109c4811115610eec576040517fc52a9bd300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84600d8190555083600e8190555082600f8190555081601081905550806011819055505050505050565b6000600254905090565b610f286124f0565b73ffffffffffffffffffffffffffffffffffffffff16610f46611de8565b73ffffffffffffffffffffffffffffffffffffffff1614610f9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f93906143f3565b60405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631c3909e6826040518263ffffffff1660e01b8152600401610ff79190614103565b600060405180830381600087803b15801561101157600080fd5b505af1158015611025573d6000803e3d6000fd5b5050505050565b60096020528060005260406000206000915054906101000a900460ff1681565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008061107d6124f0565b905061108a8582856126c3565b61109585858561274f565b60019150509392505050565b6110a96124f0565b73ffffffffffffffffffffffffffffffffffffffff166110c7611de8565b73ffffffffffffffffffffffffffffffffffffffff161461111d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611114906143f3565b60405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156111a5576040517fc52a9bd300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008190503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561120757600080fd5b505afa15801561121b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123f91906144ad565b73ffffffffffffffffffffffffffffffffffffffff161461128c576040517fc52a9bd300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112978160016117f1565b6112a281600161157d565b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc6a663dfd3d64dce542f49c3119b9e2ded1311d56c163cc6da28cd0e72d9c24960405160405180910390a35050565b60006012905090565b6113746124f0565b73ffffffffffffffffffffffffffffffffffffffff16611392611de8565b73ffffffffffffffffffffffffffffffffffffffff16146113e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113df906143f3565b60405180910390fd5b60008151905060005b8181101561147e57600160066000858481518110611412576114116144da565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061147690614509565b9150506113f1565b505050565b60195481565b6000806114946124f0565b9050611528818585600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115239190614442565b6124f8565b600191505092915050565b60086020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b60185481565b6115856124f0565b73ffffffffffffffffffffffffffffffffffffffff166115a3611de8565b73ffffffffffffffffffffffffffffffffffffffff16146115f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f0906143f3565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61165c6124f0565b73ffffffffffffffffffffffffffffffffffffffff1661167a611de8565b73ffffffffffffffffffffffffffffffffffffffff16146116d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c7906143f3565b60405180910390fd5b60008151905060005b81811015611766576001600960008584815181106116fa576116f96144da565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061175e90614509565b9150506116d9565b505050565b6117736124f0565b73ffffffffffffffffffffffffffffffffffffffff16611791611de8565b73ffffffffffffffffffffffffffffffffffffffff16146117e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117de906143f3565b60405180910390fd5b80601c8190555050565b6117f96124f0565b73ffffffffffffffffffffffffffffffffffffffff16611817611de8565b73ffffffffffffffffffffffffffffffffffffffff161461186d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611864906143f3565b60405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6118d06124f0565b73ffffffffffffffffffffffffffffffffffffffff166118ee611de8565b73ffffffffffffffffffffffffffffffffffffffff1614611944576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193b906143f3565b60405180910390fd5b60008251905081518114611984576040517fc52a9bd300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156119e8576119d561199a6124f0565b8583815181106119ad576119ac6144da565b5b60200260200101518584815181106119c8576119c76144da565b5b60200260200101516135f8565b80806119e090614509565b915050611987565b50505050565b60105481565b6119fc6124f0565b73ffffffffffffffffffffffffffffffffffffffff16611a1a611de8565b73ffffffffffffffffffffffffffffffffffffffff1614611a70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a67906143f3565b60405180910390fd5b600081838587611a809190614442565b611a8a9190614442565b611a949190614442565b90506109c4811115611ad2576040517fc52a9bd300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84601281905550836013819055508260148190555081601581905550806016819055505050505050565b600c60159054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611b5f6124f0565b73ffffffffffffffffffffffffffffffffffffffff16611b7d611de8565b73ffffffffffffffffffffffffffffffffffffffff1614611bd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bca906143f3565b60405180910390fd5b611bdd6000613879565b565b600d5481565b60125481565b611bf36124f0565b73ffffffffffffffffffffffffffffffffffffffff16611c11611de8565b73ffffffffffffffffffffffffffffffffffffffff1614611c67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5e906143f3565b60405180910390fd5b600c60169054906101000a900460ff1615611cae576040517fc52a9bd300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600c60166101000a81548160ff021916908315150217905550565b601a5481565b611cd96124f0565b73ffffffffffffffffffffffffffffffffffffffff16611cf7611de8565b73ffffffffffffffffffffffffffffffffffffffff1614611d4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d44906143f3565b60405180910390fd5b60008151905060005b81811015611de357600160076000858481518110611d7757611d766144da565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611ddb90614509565b915050611d56565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611e2190614375565b80601f0160208091040260200160405190810160405280929190818152602001828054611e4d90614375565b8015611e9a5780601f10611e6f57610100808354040283529160200191611e9a565b820191906000526020600020905b815481529060010190602001808311611e7d57829003601f168201915b5050505050905090565b600080611eaf6124f0565b90506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611f75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6c906145c4565b60405180910390fd5b611f8282868684036124f8565b60019250505092915050565b600080611f996124f0565b9050611fa681858561274f565b600191505092915050565b611fb96124f0565b73ffffffffffffffffffffffffffffffffffffffff16611fd7611de8565b73ffffffffffffffffffffffffffffffffffffffff161461202d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612024906143f3565b60405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663aacebbe3826040518263ffffffff1660e01b81526004016120889190614103565b600060405180830381600087803b1580156120a257600080fd5b505af11580156120b6573d6000803e3d6000fd5b5050505050565b601f5481565b60115481565b600f5481565b601e5481565b6120dd6124f0565b73ffffffffffffffffffffffffffffffffffffffff166120fb611de8565b73ffffffffffffffffffffffffffffffffffffffff1614612151576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612148906143f3565b60405180910390fd5b80600c60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405161219a9190613b3b565b60405180910390a150565b60145481565b601b5481565b6121b96124f0565b73ffffffffffffffffffffffffffffffffffffffff166121d7611de8565b73ffffffffffffffffffffffffffffffffffffffff161461222d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612224906143f3565b60405180910390fd5b82601e8190555081601f8190555080602081905550505050565b600e5481565b60165481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b601c5481565b60155481565b6122ee6124f0565b73ffffffffffffffffffffffffffffffffffffffff1661230c611de8565b73ffffffffffffffffffffffffffffffffffffffff1614612362576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612359906143f3565b60405180910390fd5b80601d8190555050565b6123746124f0565b73ffffffffffffffffffffffffffffffffffffffff16612392611de8565b73ffffffffffffffffffffffffffffffffffffffff16146123e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123df906143f3565b60405180910390fd5b80601b8190555050565b6123fa6124f0565b73ffffffffffffffffffffffffffffffffffffffff16612418611de8565b73ffffffffffffffffffffffffffffffffffffffff161461246e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612465906143f3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156124de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d590614656565b60405180910390fd5b6124e781613879565b50565b601d5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612568576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255f906146e8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125cf9061477a565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516126b69190613c2a565b60405180910390a3505050565b60006126cf8484612253565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114612749578181101561273b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612732906147e6565b60405180910390fd5b61274884848484036124f8565b5b50505050565b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806127f05750600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156128345782826040517f709ac01700000000000000000000000000000000000000000000000000000000815260040161282b929190614806565b60405180910390fd5b600081141561284e57612849838360006135f8565b6135f3565b612856611de8565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156128c45750612894611de8565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128fd5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612937575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129505750600c60149054906101000a900460ff16155b15612f0a57600c60169054906101000a900460ff1661299b576040517f12f1f92300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600a60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612a4857601e5481612a419190614442565b9050612b6d565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612ab157601f5481612aaa9190614442565b9050612b6c565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612b555750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b6b5760205481612b689190614442565b90505b5b5b43811115612bb45743816040517f4a24f3d2000000000000000000000000000000000000000000000000000000008152600401612bab92919061482f565b60405180910390fd5b43600a60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015612c9d5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d5657601b54821115612ced5781601b546040517f22a8406a000000000000000000000000000000000000000000000000000000008152600401612ce492919061482f565b60405180910390fd5b6000612cf884611b0f565b83612d039190614442565b9050601d54811115612d505780601d546040517f2194bdde000000000000000000000000000000000000000000000000000000008152600401612d4792919061482f565b60405180910390fd5b50612f08565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015612dfb5750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e5057601b54821115612e4b5781601b546040517f22a8406a000000000000000000000000000000000000000000000000000000008152600401612e4292919061482f565b60405180910390fd5b612f07565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612f06576000612eac84611b0f565b83612eb79190614442565b9050601d54811115612f045780601d546040517f2194bdde000000000000000000000000000000000000000000000000000000008152600401612efb92919061482f565b60405180910390fd5b505b5b5b505b6000601c54612f3a600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611b0f565b10159050808015612f585750600c60149054906101000a900460ff16155b8015612f705750600c60159054906101000a900460ff165b8015612fc857507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b801561301e5750600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156130745750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561320e576001600c60146101000a81548160ff0219169083151502179055506000601a546019546018546130a99190614442565b6130b39190614442565b9050600081601854601c546130c89190614858565b6130d291906148e1565b9050600082601954601c546130e79190614858565b6130f191906148e1565b9050600083601a54601c546131069190614858565b61311091906148e1565b9050600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166394adc0d08484846040518463ffffffff1660e01b815260040161317193929190614912565b600060405180830381600087803b15801561318b57600080fd5b505af115801561319f573d6000803e3d6000fd5b5050505082601860008282546131b59190614949565b9250508190555080601a60008282546131ce9190614949565b9250508190555081601960008282546131e79190614949565b925050819055506000600c60146101000a81548160ff021916908315150217905550505050505b600c60149054906101000a900460ff161580156132755750600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132cb5750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156135e65760007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156133305750600060165414155b1561342357612710601654846133469190614858565b61335091906148e1565b9050601654601254826133639190614858565b61336d91906148e1565b6017600082825461337e9190614442565b92505081905550601654601354826133969190614858565b6133a091906148e1565b601860008282546133b19190614442565b92505081905550601654601454826133c99190614858565b6133d391906148e1565b601960008282546133e49190614442565b92505081905550601654601554826133fc9190614858565b61340691906148e1565b601a60008282546134179190614442565b92505081905550613571565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480156134815750600060115414155b1561357057612710601154846134979190614858565b6134a191906148e1565b9050601154600d54826134b49190614858565b6134be91906148e1565b601760008282546134cf9190614442565b92505081905550601154600e54826134e79190614858565b6134f191906148e1565b601860008282546135029190614442565b92505081905550601154600f548261351a9190614858565b61352491906148e1565b601960008282546135359190614442565b925050819055506011546010548261354d9190614858565b61355791906148e1565b601a60008282546135689190614442565b925050819055505b5b60008111156135e45780836135869190614949565b92506135b585600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836135f8565b6135e3600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660175461393f565b5b505b6135f18484846135f8565b505b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613668576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161365f906149ef565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156136d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136cf90614a81565b60405180910390fd5b6136e3838383613b16565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613769576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161376090614b13565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546137fc9190614442565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516138609190613c2a565b60405180910390a3613873848484613b1b565b50505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156139af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139a690614ba5565b60405180910390fd5b6139bb82600083613b16565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613a41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a3890614c37565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160026000828254613a989190614949565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613afd9190613c2a565b60405180910390a3613b1183600084613b1b565b505050565b505050565b505050565b60008115159050919050565b613b3581613b20565b82525050565b6000602082019050613b506000830184613b2c565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613b90578082015181840152602081019050613b75565b83811115613b9f576000848401525b50505050565b6000601f19601f8301169050919050565b6000613bc182613b56565b613bcb8185613b61565b9350613bdb818560208601613b72565b613be481613ba5565b840191505092915050565b60006020820190508181036000830152613c098184613bb6565b905092915050565b6000819050919050565b613c2481613c11565b82525050565b6000602082019050613c3f6000830184613c1b565b92915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613c8482613c59565b9050919050565b613c9481613c79565b8114613c9f57600080fd5b50565b600081359050613cb181613c8b565b92915050565b613cc081613c11565b8114613ccb57600080fd5b50565b600081359050613cdd81613cb7565b92915050565b60008060408385031215613cfa57613cf9613c4f565b5b6000613d0885828601613ca2565b9250506020613d1985828601613cce565b9150509250929050565b600060208284031215613d3957613d38613c4f565b5b6000613d4784828501613ca2565b91505092915050565b613d5981613b20565b8114613d6457600080fd5b50565b600081359050613d7681613d50565b92915050565b60008060408385031215613d9357613d92613c4f565b5b6000613da185828601613ca2565b9250506020613db285828601613d67565b9150509250929050565b6000819050919050565b6000613de1613ddc613dd784613c59565b613dbc565b613c59565b9050919050565b6000613df382613dc6565b9050919050565b6000613e0582613de8565b9050919050565b613e1581613dfa565b82525050565b6000602082019050613e306000830184613e0c565b92915050565b60008060008060808587031215613e5057613e4f613c4f565b5b6000613e5e87828801613cce565b9450506020613e6f87828801613cce565b9350506040613e8087828801613cce565b9250506060613e9187828801613cce565b91505092959194509250565b6000613ea882613de8565b9050919050565b613eb881613e9d565b82525050565b6000602082019050613ed36000830184613eaf565b92915050565b600080600060608486031215613ef257613ef1613c4f565b5b6000613f0086828701613ca2565b9350506020613f1186828701613ca2565b9250506040613f2286828701613cce565b9150509250925092565b600060ff82169050919050565b613f4281613f2c565b82525050565b6000602082019050613f5d6000830184613f39565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613fa082613ba5565b810181811067ffffffffffffffff82111715613fbf57613fbe613f68565b5b80604052505050565b6000613fd2613c45565b9050613fde8282613f97565b919050565b600067ffffffffffffffff821115613ffe57613ffd613f68565b5b602082029050602081019050919050565b600080fd5b600061402761402284613fe3565b613fc8565b9050808382526020820190506020840283018581111561404a5761404961400f565b5b835b81811015614073578061405f8882613ca2565b84526020840193505060208101905061404c565b5050509392505050565b600082601f83011261409257614091613f63565b5b81356140a2848260208601614014565b91505092915050565b6000602082840312156140c1576140c0613c4f565b5b600082013567ffffffffffffffff8111156140df576140de613c54565b5b6140eb8482850161407d565b91505092915050565b6140fd81613c79565b82525050565b600060208201905061411860008301846140f4565b92915050565b60006020828403121561413457614133613c4f565b5b600061414284828501613cce565b91505092915050565b600067ffffffffffffffff82111561416657614165613f68565b5b602082029050602081019050919050565b600061418a6141858461414b565b613fc8565b905080838252602082019050602084028301858111156141ad576141ac61400f565b5b835b818110156141d657806141c28882613cce565b8452602084019350506020810190506141af565b5050509392505050565b600082601f8301126141f5576141f4613f63565b5b8135614205848260208601614177565b91505092915050565b6000806040838503121561422557614224613c4f565b5b600083013567ffffffffffffffff81111561424357614242613c54565b5b61424f8582860161407d565b925050602083013567ffffffffffffffff8111156142705761426f613c54565b5b61427c858286016141e0565b9150509250929050565b60006020828403121561429c5761429b613c4f565b5b60006142aa84828501613d67565b91505092915050565b6000806000606084860312156142cc576142cb613c4f565b5b60006142da86828701613cce565b93505060206142eb86828701613cce565b92505060406142fc86828701613cce565b9150509250925092565b6000806040838503121561431d5761431c613c4f565b5b600061432b85828601613ca2565b925050602061433c85828601613ca2565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061438d57607f821691505b602082108114156143a1576143a0614346565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006143dd602083613b61565b91506143e8826143a7565b602082019050919050565b6000602082019050818103600083015261440c816143d0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061444d82613c11565b915061445883613c11565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561448d5761448c614413565b5b828201905092915050565b6000815190506144a781613c8b565b92915050565b6000602082840312156144c3576144c2613c4f565b5b60006144d184828501614498565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061451482613c11565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561454757614546614413565b5b600182019050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006145ae602583613b61565b91506145b982614552565b604082019050919050565b600060208201905081810360008301526145dd816145a1565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614640602683613b61565b915061464b826145e4565b604082019050919050565b6000602082019050818103600083015261466f81614633565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006146d2602483613b61565b91506146dd82614676565b604082019050919050565b60006020820190508181036000830152614701816146c5565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614764602283613b61565b915061476f82614708565b604082019050919050565b6000602082019050818103600083015261479381614757565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b60006147d0601d83613b61565b91506147db8261479a565b602082019050919050565b600060208201905081810360008301526147ff816147c3565b9050919050565b600060408201905061481b60008301856140f4565b61482860208301846140f4565b9392505050565b60006040820190506148446000830185613c1b565b6148516020830184613c1b565b9392505050565b600061486382613c11565b915061486e83613c11565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156148a7576148a6614413565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006148ec82613c11565b91506148f783613c11565b925082614907576149066148b2565b5b828204905092915050565b60006060820190506149276000830186613c1b565b6149346020830185613c1b565b6149416040830184613c1b565b949350505050565b600061495482613c11565b915061495f83613c11565b92508282101561497257614971614413565b5b828203905092915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006149d9602583613b61565b91506149e48261497d565b604082019050919050565b60006020820190508181036000830152614a08816149cc565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614a6b602383613b61565b9150614a7682614a0f565b604082019050919050565b60006020820190508181036000830152614a9a81614a5e565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614afd602683613b61565b9150614b0882614aa1565b604082019050919050565b60006020820190508181036000830152614b2c81614af0565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000614b8f602183613b61565b9150614b9a82614b33565b604082019050919050565b60006020820190508181036000830152614bbe81614b82565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000614c21602283613b61565b9150614c2c82614bc5565b604082019050919050565b60006020820190508181036000830152614c5081614c14565b905091905056fea26469706673582212200a58562ed952d10445f1473dba3d36ef7ccb75d00f3aefb8d6655fb810559c4764736f6c6343000809003360a06040523480156200001157600080fd5b5060405162001b7b38038062001b7b8339818101604052810190620000379190620003d2565b620000576200004b6200029c60201b60201c565b620002a460201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505083600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016200023b9291906200045a565b602060405180830381600087803b1580156200025657600080fd5b505af11580156200026b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002919190620004c4565b5050505050620004f6565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200039a826200036d565b9050919050565b620003ac816200038d565b8114620003b857600080fd5b50565b600081519050620003cc81620003a1565b92915050565b600080600060608486031215620003ee57620003ed62000368565b5b6000620003fe86828701620003bb565b93505060206200041186828701620003bb565b92505060406200042486828701620003bb565b9150509250925092565b62000439816200038d565b82525050565b6000819050919050565b62000454816200043f565b82525050565b60006040820190506200047160008301856200042e565b62000480602083018462000449565b9392505050565b60008115159050919050565b6200049e8162000487565b8114620004aa57600080fd5b50565b600081519050620004be8162000493565b92915050565b600060208284031215620004dd57620004dc62000368565b5b6000620004ed84828501620004ad565b91505092915050565b60805161165462000527600039600081816101de015281816104eb015281816106b8015261084e01526116546000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c806375f0a8741161007157806375f0a8741461012e5780638da5cb5b1461014c57806394adc0d01461016a578063a9545a1014610186578063aacebbe3146101a4578063f2fde38b146101c0576100a9565b80631694505e146100ae5780631c3909e6146100cc5780633e413bee146100e857806368db925a14610106578063715018a614610124575b600080fd5b6100b66101dc565b6040516100c39190610e8a565b60405180910390f35b6100e660048036038101906100e19190610ee8565b610200565b005b6100f06102c0565b6040516100fd9190610f36565b60405180910390f35b61010e6102e6565b60405161011b9190610f60565b60405180910390f35b61012c61030c565b005b610136610394565b6040516101439190610f60565b60405180910390f35b6101546103ba565b6040516101619190610f60565b60405180910390f35b610184600480360381019061017f9190610fb1565b6103e3565b005b61018e610b61565b60405161019b9190610f36565b60405180910390f35b6101be60048036038101906101b99190610ee8565b610b87565b005b6101da60048036038101906101d59190610ee8565b610c47565b005b7f000000000000000000000000000000000000000000000000000000000000000081565b610208610d3f565b73ffffffffffffffffffffffffffffffffffffffff166102266103ba565b73ffffffffffffffffffffffffffffffffffffffff161461027c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161027390611061565b60405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610314610d3f565b73ffffffffffffffffffffffffffffffffffffffff166103326103ba565b73ffffffffffffffffffffffffffffffffffffffff1614610388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161037f90611061565b60405180910390fd5b6103926000610d47565b565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6103eb610d3f565b73ffffffffffffffffffffffffffffffffffffffff166104096103ba565b73ffffffffffffffffffffffffffffffffffffffff161461045f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161045690611061565b60405180910390fd5b6005548361046d91906110b0565b9250600060028461047e9190611135565b90506000818561048e9190611166565b9050600083858461049f91906110b0565b6104a991906110b0565b9050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b37f0000000000000000000000000000000000000000000000000000000000000000848461051691906110b0565b6040518363ffffffff1660e01b81526004016105339291906111a9565b602060405180830381600087803b15801561054d57600080fd5b505af1158015610561573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610585919061120a565b506000600267ffffffffffffffff8111156105a3576105a2611237565b5b6040519080825280602002602001820160405280156105d15781602001602082028036833780820191505090505b509050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160008151811061060b5761060a611266565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160018151811061067c5761067b611266565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635c11d7958360008430426040518663ffffffff1660e01b815260040161071895949392919061138e565b600060405180830381600087803b15801561073257600080fd5b505af1158015610746573d6000803e3d6000fd5b505050506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016107a79190610f60565b60206040518083038186803b1580156107bf57600080fd5b505afa1580156107d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f791906113fd565b90506000838683610808919061142a565b6108129190611135565b90506000848884610823919061142a565b61082d9190611135565b9050600081838561083e9190611166565b6108489190611166565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e8e33700600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168b8860008061dead426040518963ffffffff1660e01b81526004016108fa989796959493929190611484565b606060405180830381600087803b15801561091457600080fd5b505af1158015610928573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094c9190611502565b50509050808861095c9190611166565b6005600082825461096d91906110b0565b925050819055507f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56189858a6040516109a793929190611555565b60405180910390a1600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856040518363ffffffff1660e01b8152600401610a2e9291906111a9565b602060405180830381600087803b158015610a4857600080fd5b505af1158015610a5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a80919061120a565b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401610b009291906111a9565b602060405180830381600087803b158015610b1a57600080fd5b505af1158015610b2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b52919061120a565b50505050505050505050505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610b8f610d3f565b73ffffffffffffffffffffffffffffffffffffffff16610bad6103ba565b73ffffffffffffffffffffffffffffffffffffffff1614610c03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfa90611061565b60405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610c4f610d3f565b73ffffffffffffffffffffffffffffffffffffffff16610c6d6103ba565b73ffffffffffffffffffffffffffffffffffffffff1614610cc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cba90611061565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2a906115fe565b60405180910390fd5b610d3c81610d47565b50565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000610e50610e4b610e4684610e0b565b610e2b565b610e0b565b9050919050565b6000610e6282610e35565b9050919050565b6000610e7482610e57565b9050919050565b610e8481610e69565b82525050565b6000602082019050610e9f6000830184610e7b565b92915050565b600080fd5b6000610eb582610e0b565b9050919050565b610ec581610eaa565b8114610ed057600080fd5b50565b600081359050610ee281610ebc565b92915050565b600060208284031215610efe57610efd610ea5565b5b6000610f0c84828501610ed3565b91505092915050565b6000610f2082610e57565b9050919050565b610f3081610f15565b82525050565b6000602082019050610f4b6000830184610f27565b92915050565b610f5a81610eaa565b82525050565b6000602082019050610f756000830184610f51565b92915050565b6000819050919050565b610f8e81610f7b565b8114610f9957600080fd5b50565b600081359050610fab81610f85565b92915050565b600080600060608486031215610fca57610fc9610ea5565b5b6000610fd886828701610f9c565b9350506020610fe986828701610f9c565b9250506040610ffa86828701610f9c565b9150509250925092565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061104b602083611004565b915061105682611015565b602082019050919050565b6000602082019050818103600083015261107a8161103e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006110bb82610f7b565b91506110c683610f7b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156110fb576110fa611081565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061114082610f7b565b915061114b83610f7b565b92508261115b5761115a611106565b5b828204905092915050565b600061117182610f7b565b915061117c83610f7b565b92508282101561118f5761118e611081565b5b828203905092915050565b6111a381610f7b565b82525050565b60006040820190506111be6000830185610f51565b6111cb602083018461119a565b9392505050565b60008115159050919050565b6111e7816111d2565b81146111f257600080fd5b50565b600081519050611204816111de565b92915050565b6000602082840312156112205761121f610ea5565b5b600061122e848285016111f5565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b60006112ba6112b56112b084611295565b610e2b565b610f7b565b9050919050565b6112ca8161129f565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61130581610eaa565b82525050565b600061131783836112fc565b60208301905092915050565b6000602082019050919050565b600061133b826112d0565b61134581856112db565b9350611350836112ec565b8060005b83811015611381578151611368888261130b565b975061137383611323565b925050600181019050611354565b5085935050505092915050565b600060a0820190506113a3600083018861119a565b6113b060208301876112c1565b81810360408301526113c28186611330565b90506113d16060830185610f51565b6113de608083018461119a565b9695505050505050565b6000815190506113f781610f85565b92915050565b60006020828403121561141357611412610ea5565b5b6000611421848285016113e8565b91505092915050565b600061143582610f7b565b915061144083610f7b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561147957611478611081565b5b828202905092915050565b60006101008201905061149a600083018b610f51565b6114a7602083018a610f51565b6114b4604083018961119a565b6114c1606083018861119a565b6114ce60808301876112c1565b6114db60a08301866112c1565b6114e860c0830185610f51565b6114f560e083018461119a565b9998505050505050505050565b60008060006060848603121561151b5761151a610ea5565b5b6000611529868287016113e8565b935050602061153a868287016113e8565b925050604061154b868287016113e8565b9150509250925092565b600060608201905061156a600083018661119a565b611577602083018561119a565b611584604083018461119a565b949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006115e8602683611004565b91506115f38261158c565b604082019050919050565b60006020820190508181036000830152611617816115db565b905091905056fea2646970667358221220b444e8a294d9c532c5eda33677b72013980cee6e6e5205fd0b7dc88d215a9e8d64736f6c63430008090033000000000000000000000000bc88b50f7230cdf2ee27b5d58b8255b7865e03b600000000000000000000000070d3687889b9844f42b97d8d45118dd3c042dadd

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106103af5760003560e01c80636c5b2855116101f4578063b9e937001161011a578063d0a39814116100ad578063ea1644d51161007c578063ea1644d514610ace578063ec28438a14610aea578063f2fde38b14610b06578063f8b45b0514610b22576103af565b8063d0a3981414610a44578063dd62ed3e14610a62578063e2f4560514610a92578063e7f444b314610ab0576103af565b8063c5e5d885116100e9578063c5e5d885146109ce578063c8c8ebe4146109ec578063c8f8d62c14610a0a578063ccb6135814610a26576103af565b8063b9e9370014610958578063bdc4d86314610976578063c2bd8f9b14610994578063c49b9a80146109b2576103af565b80638b27306d11610192578063a457c2d711610161578063a457c2d7146108be578063a9059cbb146108ee578063aacebbe31461091e578063ae2308781461093a576103af565b80638b27306d146108485780638c2c6909146108665780638da5cb5b1461088257806395d89b41146108a0576103af565b8063715018a6116101ce578063715018a6146107f85780637ae3ff47146108025780637e761377146108205780638a8c523c1461083e576103af565b80636c5b28551461078e5780636ddd1713146107aa57806370a08231146107c8576103af565b806323b872dd116102d957806349bd5a5e116102775780636402511e116102465780636402511e1461071c57806366650dae1461073857806367243482146107545780636807895214610770576103af565b806349bd5a5e146106a85780634b8ce602146106c6578063590ffdce146106e4578063611bfa3714610700576103af565b8063373bf3b1116102b3578063373bf3b11461060e57806337f2bc141461062a578063395093511461064857806343e968a314610678576103af565b806323b872dd146105a457806329988b04146105d4578063313ce567146105f0576103af565b8063121a6bcb1161035157806318160ddd1161032057806318160ddd1461051c5780631c3909e61461053a5780631cdd3be314610556578063234cee1e14610586576103af565b8063121a6bcb146104aa578063153b0d1e146104c65780631694505e146104e2578063178d9b8e14610500576103af565b8063095ea7b31161038d578063095ea7b31461040e578063099d0d301461043e5780630a702e8d1461045c57806310d5de531461047a576103af565b8063064a59d0146103b457806306fdde03146103d257806308003f78146103f0575b600080fd5b6103bc610b40565b6040516103c99190613b3b565b60405180910390f35b6103da610b53565b6040516103e79190613bef565b60405180910390f35b6103f8610be5565b6040516104059190613c2a565b60405180910390f35b61042860048036038101906104239190613ce3565b610beb565b6040516104359190613b3b565b60405180910390f35b610446610c0e565b6040516104539190613c2a565b60405180910390f35b610464610c14565b6040516104719190613c2a565b60405180910390f35b610494600480360381019061048f9190613d23565b610c1a565b6040516104a19190613b3b565b60405180910390f35b6104c460048036038101906104bf9190613d7c565b610c3a565b005b6104e060048036038101906104db9190613d7c565b610d11565b005b6104ea610de8565b6040516104f79190613e1b565b60405180910390f35b61051a60048036038101906105159190613e36565b610e0e565b005b610524610f16565b6040516105319190613c2a565b60405180910390f35b610554600480360381019061054f9190613d23565b610f20565b005b610570600480360381019061056b9190613d23565b61102c565b60405161057d9190613b3b565b60405180910390f35b61058e61104c565b60405161059b9190613ebe565b60405180910390f35b6105be60048036038101906105b99190613ed9565b611072565b6040516105cb9190613b3b565b60405180910390f35b6105ee60048036038101906105e99190613d23565b6110a1565b005b6105f8611363565b6040516106059190613f48565b60405180910390f35b610628600480360381019061062391906140ab565b61136c565b005b610632611483565b60405161063f9190613c2a565b60405180910390f35b610662600480360381019061065d9190613ce3565b611489565b60405161066f9190613b3b565b60405180910390f35b610692600480360381019061068d9190613d23565b611533565b60405161069f9190613b3b565b60405180910390f35b6106b0611553565b6040516106bd9190614103565b60405180910390f35b6106ce611577565b6040516106db9190613c2a565b60405180910390f35b6106fe60048036038101906106f99190613d7c565b61157d565b005b61071a600480360381019061071591906140ab565b611654565b005b6107366004803603810190610731919061411e565b61176b565b005b610752600480360381019061074d9190613d7c565b6117f1565b005b61076e6004803603810190610769919061420e565b6118c8565b005b6107786119ee565b6040516107859190613c2a565b60405180910390f35b6107a860048036038101906107a39190613e36565b6119f4565b005b6107b2611afc565b6040516107bf9190613b3b565b60405180910390f35b6107e260048036038101906107dd9190613d23565b611b0f565b6040516107ef9190613c2a565b60405180910390f35b610800611b57565b005b61080a611bdf565b6040516108179190613c2a565b60405180910390f35b610828611be5565b6040516108359190613c2a565b60405180910390f35b610846611beb565b005b610850611ccb565b60405161085d9190613c2a565b60405180910390f35b610880600480360381019061087b91906140ab565b611cd1565b005b61088a611de8565b6040516108979190614103565b60405180910390f35b6108a8611e12565b6040516108b59190613bef565b60405180910390f35b6108d860048036038101906108d39190613ce3565b611ea4565b6040516108e59190613b3b565b60405180910390f35b61090860048036038101906109039190613ce3565b611f8e565b6040516109159190613b3b565b60405180910390f35b61093860048036038101906109339190613d23565b611fb1565b005b6109426120bd565b60405161094f9190613c2a565b60405180910390f35b6109606120c3565b60405161096d9190613c2a565b60405180910390f35b61097e6120c9565b60405161098b9190613c2a565b60405180910390f35b61099c6120cf565b6040516109a99190613c2a565b60405180910390f35b6109cc60048036038101906109c79190614286565b6120d5565b005b6109d66121a5565b6040516109e39190613c2a565b60405180910390f35b6109f46121ab565b604051610a019190613c2a565b60405180910390f35b610a246004803603810190610a1f91906142b3565b6121b1565b005b610a2e612247565b604051610a3b9190613c2a565b60405180910390f35b610a4c61224d565b604051610a599190613c2a565b60405180910390f35b610a7c6004803603810190610a779190614306565b612253565b604051610a899190613c2a565b60405180910390f35b610a9a6122da565b604051610aa79190613c2a565b60405180910390f35b610ab86122e0565b604051610ac59190613c2a565b60405180910390f35b610ae86004803603810190610ae3919061411e565b6122e6565b005b610b046004803603810190610aff919061411e565b61236c565b005b610b206004803603810190610b1b9190613d23565b6123f2565b005b610b2a6124ea565b604051610b379190613c2a565b60405180910390f35b600c60169054906101000a900460ff1681565b606060038054610b6290614375565b80601f0160208091040260200160405190810160405280929190818152602001828054610b8e90614375565b8015610bdb5780601f10610bb057610100808354040283529160200191610bdb565b820191906000526020600020905b815481529060010190602001808311610bbe57829003601f168201915b5050505050905090565b60175481565b600080610bf66124f0565b9050610c038185856124f8565b600191505092915050565b60135481565b60205481565b60076020528060005260406000206000915054906101000a900460ff1681565b610c426124f0565b73ffffffffffffffffffffffffffffffffffffffff16610c60611de8565b73ffffffffffffffffffffffffffffffffffffffff1614610cb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cad906143f3565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b610d196124f0565b73ffffffffffffffffffffffffffffffffffffffff16610d37611de8565b73ffffffffffffffffffffffffffffffffffffffff1614610d8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d84906143f3565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e166124f0565b73ffffffffffffffffffffffffffffffffffffffff16610e34611de8565b73ffffffffffffffffffffffffffffffffffffffff1614610e8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e81906143f3565b60405180910390fd5b600081838587610e9a9190614442565b610ea49190614442565b610eae9190614442565b90506109c4811115610eec576040517fc52a9bd300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84600d8190555083600e8190555082600f8190555081601081905550806011819055505050505050565b6000600254905090565b610f286124f0565b73ffffffffffffffffffffffffffffffffffffffff16610f46611de8565b73ffffffffffffffffffffffffffffffffffffffff1614610f9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f93906143f3565b60405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631c3909e6826040518263ffffffff1660e01b8152600401610ff79190614103565b600060405180830381600087803b15801561101157600080fd5b505af1158015611025573d6000803e3d6000fd5b5050505050565b60096020528060005260406000206000915054906101000a900460ff1681565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008061107d6124f0565b905061108a8582856126c3565b61109585858561274f565b60019150509392505050565b6110a96124f0565b73ffffffffffffffffffffffffffffffffffffffff166110c7611de8565b73ffffffffffffffffffffffffffffffffffffffff161461111d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611114906143f3565b60405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156111a5576040517fc52a9bd300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008190503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561120757600080fd5b505afa15801561121b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123f91906144ad565b73ffffffffffffffffffffffffffffffffffffffff161461128c576040517fc52a9bd300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112978160016117f1565b6112a281600161157d565b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc6a663dfd3d64dce542f49c3119b9e2ded1311d56c163cc6da28cd0e72d9c24960405160405180910390a35050565b60006012905090565b6113746124f0565b73ffffffffffffffffffffffffffffffffffffffff16611392611de8565b73ffffffffffffffffffffffffffffffffffffffff16146113e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113df906143f3565b60405180910390fd5b60008151905060005b8181101561147e57600160066000858481518110611412576114116144da565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061147690614509565b9150506113f1565b505050565b60195481565b6000806114946124f0565b9050611528818585600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115239190614442565b6124f8565b600191505092915050565b60086020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000b3baddf5e7fcbee82bde7af36180c0696436bb2c81565b60185481565b6115856124f0565b73ffffffffffffffffffffffffffffffffffffffff166115a3611de8565b73ffffffffffffffffffffffffffffffffffffffff16146115f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f0906143f3565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61165c6124f0565b73ffffffffffffffffffffffffffffffffffffffff1661167a611de8565b73ffffffffffffffffffffffffffffffffffffffff16146116d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c7906143f3565b60405180910390fd5b60008151905060005b81811015611766576001600960008584815181106116fa576116f96144da565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061175e90614509565b9150506116d9565b505050565b6117736124f0565b73ffffffffffffffffffffffffffffffffffffffff16611791611de8565b73ffffffffffffffffffffffffffffffffffffffff16146117e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117de906143f3565b60405180910390fd5b80601c8190555050565b6117f96124f0565b73ffffffffffffffffffffffffffffffffffffffff16611817611de8565b73ffffffffffffffffffffffffffffffffffffffff161461186d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611864906143f3565b60405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6118d06124f0565b73ffffffffffffffffffffffffffffffffffffffff166118ee611de8565b73ffffffffffffffffffffffffffffffffffffffff1614611944576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193b906143f3565b60405180910390fd5b60008251905081518114611984576040517fc52a9bd300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156119e8576119d561199a6124f0565b8583815181106119ad576119ac6144da565b5b60200260200101518584815181106119c8576119c76144da565b5b60200260200101516135f8565b80806119e090614509565b915050611987565b50505050565b60105481565b6119fc6124f0565b73ffffffffffffffffffffffffffffffffffffffff16611a1a611de8565b73ffffffffffffffffffffffffffffffffffffffff1614611a70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a67906143f3565b60405180910390fd5b600081838587611a809190614442565b611a8a9190614442565b611a949190614442565b90506109c4811115611ad2576040517fc52a9bd300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84601281905550836013819055508260148190555081601581905550806016819055505050505050565b600c60159054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611b5f6124f0565b73ffffffffffffffffffffffffffffffffffffffff16611b7d611de8565b73ffffffffffffffffffffffffffffffffffffffff1614611bd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bca906143f3565b60405180910390fd5b611bdd6000613879565b565b600d5481565b60125481565b611bf36124f0565b73ffffffffffffffffffffffffffffffffffffffff16611c11611de8565b73ffffffffffffffffffffffffffffffffffffffff1614611c67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5e906143f3565b60405180910390fd5b600c60169054906101000a900460ff1615611cae576040517fc52a9bd300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600c60166101000a81548160ff021916908315150217905550565b601a5481565b611cd96124f0565b73ffffffffffffffffffffffffffffffffffffffff16611cf7611de8565b73ffffffffffffffffffffffffffffffffffffffff1614611d4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d44906143f3565b60405180910390fd5b60008151905060005b81811015611de357600160076000858481518110611d7757611d766144da565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611ddb90614509565b915050611d56565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611e2190614375565b80601f0160208091040260200160405190810160405280929190818152602001828054611e4d90614375565b8015611e9a5780601f10611e6f57610100808354040283529160200191611e9a565b820191906000526020600020905b815481529060010190602001808311611e7d57829003601f168201915b5050505050905090565b600080611eaf6124f0565b90506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611f75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6c906145c4565b60405180910390fd5b611f8282868684036124f8565b60019250505092915050565b600080611f996124f0565b9050611fa681858561274f565b600191505092915050565b611fb96124f0565b73ffffffffffffffffffffffffffffffffffffffff16611fd7611de8565b73ffffffffffffffffffffffffffffffffffffffff161461202d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612024906143f3565b60405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663aacebbe3826040518263ffffffff1660e01b81526004016120889190614103565b600060405180830381600087803b1580156120a257600080fd5b505af11580156120b6573d6000803e3d6000fd5b5050505050565b601f5481565b60115481565b600f5481565b601e5481565b6120dd6124f0565b73ffffffffffffffffffffffffffffffffffffffff166120fb611de8565b73ffffffffffffffffffffffffffffffffffffffff1614612151576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612148906143f3565b60405180910390fd5b80600c60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405161219a9190613b3b565b60405180910390a150565b60145481565b601b5481565b6121b96124f0565b73ffffffffffffffffffffffffffffffffffffffff166121d7611de8565b73ffffffffffffffffffffffffffffffffffffffff161461222d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612224906143f3565b60405180910390fd5b82601e8190555081601f8190555080602081905550505050565b600e5481565b60165481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b601c5481565b60155481565b6122ee6124f0565b73ffffffffffffffffffffffffffffffffffffffff1661230c611de8565b73ffffffffffffffffffffffffffffffffffffffff1614612362576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612359906143f3565b60405180910390fd5b80601d8190555050565b6123746124f0565b73ffffffffffffffffffffffffffffffffffffffff16612392611de8565b73ffffffffffffffffffffffffffffffffffffffff16146123e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123df906143f3565b60405180910390fd5b80601b8190555050565b6123fa6124f0565b73ffffffffffffffffffffffffffffffffffffffff16612418611de8565b73ffffffffffffffffffffffffffffffffffffffff161461246e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612465906143f3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156124de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d590614656565b60405180910390fd5b6124e781613879565b50565b601d5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612568576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255f906146e8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125cf9061477a565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516126b69190613c2a565b60405180910390a3505050565b60006126cf8484612253565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114612749578181101561273b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612732906147e6565b60405180910390fd5b61274884848484036124f8565b5b50505050565b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806127f05750600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156128345782826040517f709ac01700000000000000000000000000000000000000000000000000000000815260040161282b929190614806565b60405180910390fd5b600081141561284e57612849838360006135f8565b6135f3565b612856611de8565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156128c45750612894611de8565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128fd5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612937575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129505750600c60149054906101000a900460ff16155b15612f0a57600c60169054906101000a900460ff1661299b576040517f12f1f92300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600a60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490507f000000000000000000000000b3baddf5e7fcbee82bde7af36180c0696436bb2c73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612a4857601e5481612a419190614442565b9050612b6d565b7f000000000000000000000000b3baddf5e7fcbee82bde7af36180c0696436bb2c73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612ab157601f5481612aaa9190614442565b9050612b6c565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612b555750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b6b5760205481612b689190614442565b90505b5b5b43811115612bb45743816040517f4a24f3d2000000000000000000000000000000000000000000000000000000008152600401612bab92919061482f565b60405180910390fd5b43600a60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f000000000000000000000000b3baddf5e7fcbee82bde7af36180c0696436bb2c73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015612c9d5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d5657601b54821115612ced5781601b546040517f22a8406a000000000000000000000000000000000000000000000000000000008152600401612ce492919061482f565b60405180910390fd5b6000612cf884611b0f565b83612d039190614442565b9050601d54811115612d505780601d546040517f2194bdde000000000000000000000000000000000000000000000000000000008152600401612d4792919061482f565b60405180910390fd5b50612f08565b7f000000000000000000000000b3baddf5e7fcbee82bde7af36180c0696436bb2c73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015612dfb5750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e5057601b54821115612e4b5781601b546040517f22a8406a000000000000000000000000000000000000000000000000000000008152600401612e4292919061482f565b60405180910390fd5b612f07565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612f06576000612eac84611b0f565b83612eb79190614442565b9050601d54811115612f045780601d546040517f2194bdde000000000000000000000000000000000000000000000000000000008152600401612efb92919061482f565b60405180910390fd5b505b5b5b505b6000601c54612f3a600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611b0f565b10159050808015612f585750600c60149054906101000a900460ff16155b8015612f705750600c60159054906101000a900460ff165b8015612fc857507f000000000000000000000000b3baddf5e7fcbee82bde7af36180c0696436bb2c73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b801561301e5750600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156130745750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561320e576001600c60146101000a81548160ff0219169083151502179055506000601a546019546018546130a99190614442565b6130b39190614442565b9050600081601854601c546130c89190614858565b6130d291906148e1565b9050600082601954601c546130e79190614858565b6130f191906148e1565b9050600083601a54601c546131069190614858565b61311091906148e1565b9050600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166394adc0d08484846040518463ffffffff1660e01b815260040161317193929190614912565b600060405180830381600087803b15801561318b57600080fd5b505af115801561319f573d6000803e3d6000fd5b5050505082601860008282546131b59190614949565b9250508190555080601a60008282546131ce9190614949565b9250508190555081601960008282546131e79190614949565b925050819055506000600c60146101000a81548160ff021916908315150217905550505050505b600c60149054906101000a900460ff161580156132755750600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132cb5750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156135e65760007f000000000000000000000000b3baddf5e7fcbee82bde7af36180c0696436bb2c73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156133305750600060165414155b1561342357612710601654846133469190614858565b61335091906148e1565b9050601654601254826133639190614858565b61336d91906148e1565b6017600082825461337e9190614442565b92505081905550601654601354826133969190614858565b6133a091906148e1565b601860008282546133b19190614442565b92505081905550601654601454826133c99190614858565b6133d391906148e1565b601960008282546133e49190614442565b92505081905550601654601554826133fc9190614858565b61340691906148e1565b601a60008282546134179190614442565b92505081905550613571565b7f000000000000000000000000b3baddf5e7fcbee82bde7af36180c0696436bb2c73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480156134815750600060115414155b1561357057612710601154846134979190614858565b6134a191906148e1565b9050601154600d54826134b49190614858565b6134be91906148e1565b601760008282546134cf9190614442565b92505081905550601154600e54826134e79190614858565b6134f191906148e1565b601860008282546135029190614442565b92505081905550601154600f548261351a9190614858565b61352491906148e1565b601960008282546135359190614442565b925050819055506011546010548261354d9190614858565b61355791906148e1565b601a60008282546135689190614442565b925050819055505b5b60008111156135e45780836135869190614949565b92506135b585600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836135f8565b6135e3600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660175461393f565b5b505b6135f18484846135f8565b505b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613668576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161365f906149ef565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156136d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136cf90614a81565b60405180910390fd5b6136e3838383613b16565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613769576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161376090614b13565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546137fc9190614442565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516138609190613c2a565b60405180910390a3613873848484613b1b565b50505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156139af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139a690614ba5565b60405180910390fd5b6139bb82600083613b16565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613a41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a3890614c37565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160026000828254613a989190614949565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613afd9190613c2a565b60405180910390a3613b1183600084613b1b565b505050565b505050565b505050565b60008115159050919050565b613b3581613b20565b82525050565b6000602082019050613b506000830184613b2c565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613b90578082015181840152602081019050613b75565b83811115613b9f576000848401525b50505050565b6000601f19601f8301169050919050565b6000613bc182613b56565b613bcb8185613b61565b9350613bdb818560208601613b72565b613be481613ba5565b840191505092915050565b60006020820190508181036000830152613c098184613bb6565b905092915050565b6000819050919050565b613c2481613c11565b82525050565b6000602082019050613c3f6000830184613c1b565b92915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613c8482613c59565b9050919050565b613c9481613c79565b8114613c9f57600080fd5b50565b600081359050613cb181613c8b565b92915050565b613cc081613c11565b8114613ccb57600080fd5b50565b600081359050613cdd81613cb7565b92915050565b60008060408385031215613cfa57613cf9613c4f565b5b6000613d0885828601613ca2565b9250506020613d1985828601613cce565b9150509250929050565b600060208284031215613d3957613d38613c4f565b5b6000613d4784828501613ca2565b91505092915050565b613d5981613b20565b8114613d6457600080fd5b50565b600081359050613d7681613d50565b92915050565b60008060408385031215613d9357613d92613c4f565b5b6000613da185828601613ca2565b9250506020613db285828601613d67565b9150509250929050565b6000819050919050565b6000613de1613ddc613dd784613c59565b613dbc565b613c59565b9050919050565b6000613df382613dc6565b9050919050565b6000613e0582613de8565b9050919050565b613e1581613dfa565b82525050565b6000602082019050613e306000830184613e0c565b92915050565b60008060008060808587031215613e5057613e4f613c4f565b5b6000613e5e87828801613cce565b9450506020613e6f87828801613cce565b9350506040613e8087828801613cce565b9250506060613e9187828801613cce565b91505092959194509250565b6000613ea882613de8565b9050919050565b613eb881613e9d565b82525050565b6000602082019050613ed36000830184613eaf565b92915050565b600080600060608486031215613ef257613ef1613c4f565b5b6000613f0086828701613ca2565b9350506020613f1186828701613ca2565b9250506040613f2286828701613cce565b9150509250925092565b600060ff82169050919050565b613f4281613f2c565b82525050565b6000602082019050613f5d6000830184613f39565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613fa082613ba5565b810181811067ffffffffffffffff82111715613fbf57613fbe613f68565b5b80604052505050565b6000613fd2613c45565b9050613fde8282613f97565b919050565b600067ffffffffffffffff821115613ffe57613ffd613f68565b5b602082029050602081019050919050565b600080fd5b600061402761402284613fe3565b613fc8565b9050808382526020820190506020840283018581111561404a5761404961400f565b5b835b81811015614073578061405f8882613ca2565b84526020840193505060208101905061404c565b5050509392505050565b600082601f83011261409257614091613f63565b5b81356140a2848260208601614014565b91505092915050565b6000602082840312156140c1576140c0613c4f565b5b600082013567ffffffffffffffff8111156140df576140de613c54565b5b6140eb8482850161407d565b91505092915050565b6140fd81613c79565b82525050565b600060208201905061411860008301846140f4565b92915050565b60006020828403121561413457614133613c4f565b5b600061414284828501613cce565b91505092915050565b600067ffffffffffffffff82111561416657614165613f68565b5b602082029050602081019050919050565b600061418a6141858461414b565b613fc8565b905080838252602082019050602084028301858111156141ad576141ac61400f565b5b835b818110156141d657806141c28882613cce565b8452602084019350506020810190506141af565b5050509392505050565b600082601f8301126141f5576141f4613f63565b5b8135614205848260208601614177565b91505092915050565b6000806040838503121561422557614224613c4f565b5b600083013567ffffffffffffffff81111561424357614242613c54565b5b61424f8582860161407d565b925050602083013567ffffffffffffffff8111156142705761426f613c54565b5b61427c858286016141e0565b9150509250929050565b60006020828403121561429c5761429b613c4f565b5b60006142aa84828501613d67565b91505092915050565b6000806000606084860312156142cc576142cb613c4f565b5b60006142da86828701613cce565b93505060206142eb86828701613cce565b92505060406142fc86828701613cce565b9150509250925092565b6000806040838503121561431d5761431c613c4f565b5b600061432b85828601613ca2565b925050602061433c85828601613ca2565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061438d57607f821691505b602082108114156143a1576143a0614346565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006143dd602083613b61565b91506143e8826143a7565b602082019050919050565b6000602082019050818103600083015261440c816143d0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061444d82613c11565b915061445883613c11565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561448d5761448c614413565b5b828201905092915050565b6000815190506144a781613c8b565b92915050565b6000602082840312156144c3576144c2613c4f565b5b60006144d184828501614498565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061451482613c11565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561454757614546614413565b5b600182019050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006145ae602583613b61565b91506145b982614552565b604082019050919050565b600060208201905081810360008301526145dd816145a1565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614640602683613b61565b915061464b826145e4565b604082019050919050565b6000602082019050818103600083015261466f81614633565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006146d2602483613b61565b91506146dd82614676565b604082019050919050565b60006020820190508181036000830152614701816146c5565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614764602283613b61565b915061476f82614708565b604082019050919050565b6000602082019050818103600083015261479381614757565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b60006147d0601d83613b61565b91506147db8261479a565b602082019050919050565b600060208201905081810360008301526147ff816147c3565b9050919050565b600060408201905061481b60008301856140f4565b61482860208301846140f4565b9392505050565b60006040820190506148446000830185613c1b565b6148516020830184613c1b565b9392505050565b600061486382613c11565b915061486e83613c11565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156148a7576148a6614413565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006148ec82613c11565b91506148f783613c11565b925082614907576149066148b2565b5b828204905092915050565b60006060820190506149276000830186613c1b565b6149346020830185613c1b565b6149416040830184613c1b565b949350505050565b600061495482613c11565b915061495f83613c11565b92508282101561497257614971614413565b5b828203905092915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006149d9602583613b61565b91506149e48261497d565b604082019050919050565b60006020820190508181036000830152614a08816149cc565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614a6b602383613b61565b9150614a7682614a0f565b604082019050919050565b60006020820190508181036000830152614a9a81614a5e565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614afd602683613b61565b9150614b0882614aa1565b604082019050919050565b60006020820190508181036000830152614b2c81614af0565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000614b8f602183613b61565b9150614b9a82614b33565b604082019050919050565b60006020820190508181036000830152614bbe81614b82565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000614c21602283613b61565b9150614c2c82614bc5565b604082019050919050565b60006020820190508181036000830152614c5081614c14565b905091905056fea26469706673582212200a58562ed952d10445f1473dba3d36ef7ccb75d00f3aefb8d6655fb810559c4764736f6c63430008090033

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

000000000000000000000000bc88b50f7230cdf2ee27b5d58b8255b7865e03b600000000000000000000000070d3687889b9844f42b97d8d45118dd3c042dadd

-----Decoded View---------------
Arg [0] : _marketingWallet (address): 0xbc88b50F7230cDF2Ee27b5d58B8255b7865e03b6
Arg [1] : _opsWallet (address): 0x70D3687889B9844F42b97d8d45118dd3C042daDD

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000bc88b50f7230cdf2ee27b5d58b8255b7865e03b6
Arg [1] : 00000000000000000000000070d3687889b9844f42b97d8d45118dd3c042dadd


Deployed Bytecode Sourcemap

28879:11617:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29441:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15069:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29891:25;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17420:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29721:37;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30330:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28985:64;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37544:132;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36200:120;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29234:41;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38116:418;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16189:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39568:122;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29116:47;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29329:38;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18201:295;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39880:611;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16031:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37305:231;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29960:24;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18905:240;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29056:53;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29282:38;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29923:30;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37167:130;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36328:222;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38896:106;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36746:152;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38542:346;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29596:36;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37684:424;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29404:30;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16360:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8475:103;;;:::i;:::-;;29478:31;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29682:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39698:174;;;:::i;:::-;;29991:30;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36906:253;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7824:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15288:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19648:438;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16693:193;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39426:134;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30295:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29639:34;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29559:30;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30261:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39257:161;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29765:31;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30030:51;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36558:180;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29516:36;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29847:35;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16949:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30111:48;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29803:37;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39133:116;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39010:115;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8733:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30190:41;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29441:28;;;;;;;;;;;;;:::o;15069:100::-;15123:13;15156:5;15149:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15069:100;:::o;29891:25::-;;;;:::o;17420:201::-;17503:4;17520:13;17536:12;:10;:12::i;:::-;17520:28;;17559:32;17568:5;17575:7;17584:6;17559:8;:32::i;:::-;17609:4;17602:11;;;17420:201;;;;:::o;29721:37::-;;;;:::o;30330:32::-;;;;:::o;28985:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;37544:132::-;8055:12;:10;:12::i;:::-;8044:23;;:7;:5;:7::i;:::-;:23;;;8036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37663:5:::1;37631:20;:29;37652:7;37631:29;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;37544:132:::0;;:::o;36200:120::-;8055:12;:10;:12::i;:::-;8044:23;;:7;:5;:7::i;:::-;:23;;;8036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36307:5:::1;36281:14;:23;36296:7;36281:23;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;36200:120:::0;;:::o;29234:41::-;;;;;;;;;;;;;:::o;38116:418::-;8055:12;:10;:12::i;:::-;8044:23;;:7;:5;:7::i;:::-;:23;;;8036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38231:13:::1;38272:9;38266:3;38254:9;38247:4;:16;;;;:::i;:::-;:22;;;;:::i;:::-;:34;;;;:::i;:::-;38231:50;;38304:4;38296:5;:12;38292:74;;;38332:22;;;;;;;;;;;;;;38292:74;38389:4;38376:10;:17;;;;38422:9;38404:15;:27;;;;38454:3;38442:9;:15;;;;38486:9;38468:15;:27;;;;38521:5;38506:12;:20;;;;38220:314;38116:418:::0;;;;:::o;16189:108::-;16250:7;16277:12;;16270:19;;16189:108;:::o;39568:122::-;8055:12;:10;:12::i;:::-;8044:23;;:7;:5;:7::i;:::-;:23;;;8036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39642:13:::1;;;;;;;;;;;:29;;;39672:9;39642:40;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;39568:122:::0;:::o;29116:47::-;;;;;;;;;;;;;;;;;;;;;;:::o;29329:38::-;;;;;;;;;;;;;:::o;18201:295::-;18332:4;18349:15;18367:12;:10;:12::i;:::-;18349:30;;18390:38;18406:4;18412:7;18421:6;18390:15;:38::i;:::-;18439:27;18449:4;18455:2;18459:6;18439:9;:27::i;:::-;18484:4;18477:11;;;18201:295;;;;;:::o;39880:611::-;8055:12;:10;:12::i;:::-;8044:23;;:7;:5;:7::i;:::-;:23;;;8036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39980:13:::1;;;;;;;;;;;39958:36;;:10;:36;;;39954:98;;;40018:22;;;;;;;;;;;;;;39954:98;40064:31;40116:10;40064:63;;40177:4;40144:38;;:13;:19;;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:38;;;40140:100;;40206:22;;;;;;;;;;;;;;40140:100;40252:59;40290:13;40306:4;40252:29;:59::i;:::-;40322:49;40350:13;40366:4;40322:19;:49::i;:::-;40400:13;40384;;:29;;;;;;;;;;;;;;;;;;40468:13;;;;;;;;;;;40431:52;;40448:10;40431:52;;;;;;;;;;;;39943:548;39880:611:::0;:::o;16031:93::-;16089:5;16114:2;16107:9;;16031:93;:::o;37305:231::-;8055:12;:10;:12::i;:::-;8044:23;;:7;:5;:7::i;:::-;:23;;;8036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37389:11:::1;37403:8;:15;37389:29;;37434:9;37429:100;37453:3;37449:1;:7;37429:100;;;37513:4;37478:19;:32;37498:8;37507:1;37498:11;;;;;;;;:::i;:::-;;;;;;;;37478:32;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;37458:3;;;;;:::i;:::-;;;;37429:100;;;;37378:158;37305:231:::0;:::o;29960:24::-;;;;:::o;18905:240::-;18993:4;19010:13;19026:12;:10;:12::i;:::-;19010:28;;19049:66;19058:5;19065:7;19104:10;19074:11;:18;19086:5;19074:18;;;;;;;;;;;;;;;:27;19093:7;19074:27;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;19049:8;:66::i;:::-;19133:4;19126:11;;;18905:240;;;;:::o;29056:53::-;;;;;;;;;;;;;;;;;;;;;;:::o;29282:38::-;;;:::o;29923:30::-;;;;:::o;37167:130::-;8055:12;:10;:12::i;:::-;8044:23;;:7;:5;:7::i;:::-;:23;;;8036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37284:5:::1;37253:19;:28;37273:7;37253:28;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;37167:130:::0;;:::o;36328:222::-;8055:12;:10;:12::i;:::-;8044:23;;:7;:5;:7::i;:::-;:23;;;8036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36408:11:::1;36422:8;:15;36408:29;;36453:9;36448:95;36472:3;36468:1;:7;36448:95;;;36527:4;36497:14;:27;36512:8;36521:1;36512:11;;;;;;;;:::i;:::-;;;;;;;;36497:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;36477:3;;;;;:::i;:::-;;;;36448:95;;;;36397:153;36328:222:::0;:::o;38896:106::-;8055:12;:10;:12::i;:::-;8044:23;;:7;:5;:7::i;:::-;:23;;;8036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38988:6:::1;38967:18;:27;;;;38896:106:::0;:::o;36746:152::-;8055:12;:10;:12::i;:::-;8044:23;;:7;:5;:7::i;:::-;:23;;;8036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36885:5:::1;36842:31;:40;36874:7;36842:40;;;;;;;;;;;;;;;;:48;;;;;;;;;;;;;;;;;;36746:152:::0;;:::o;38542:346::-;8055:12;:10;:12::i;:::-;8044:23;;:7;:5;:7::i;:::-;:23;;;8036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38639:11:::1;38653:5;:12;38639:26;;38687:7;:14;38680:3;:21;38676:83;;38725:22;;;;;;;;;;;;;;38676:83;38774:9;38769:112;38793:3;38789:1;:7;38769:112;;;38818:51;38834:12;:10;:12::i;:::-;38848:5;38854:1;38848:8;;;;;;;;:::i;:::-;;;;;;;;38858:7;38866:1;38858:10;;;;;;;;:::i;:::-;;;;;;;;38818:15;:51::i;:::-;38798:3;;;;;:::i;:::-;;;;38769:112;;;;38628:260;38542:346:::0;;:::o;29596:36::-;;;;:::o;37684:424::-;8055:12;:10;:12::i;:::-;8044:23;;:7;:5;:7::i;:::-;:23;;;8036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37800:13:::1;37841:9;37835:3;37823:9;37816:4;:16;;;;:::i;:::-;:22;;;;:::i;:::-;:34;;;;:::i;:::-;37800:50;;37873:4;37865:5;:12;37861:74;;;37901:22;;;;;;;;;;;;;;37861:74;37959:4;37945:11;:18;;;;37993:9;37974:16;:28;;;;38026:3;38013:10;:16;;;;38059:9;38040:16;:28;;;;38095:5;38079:13;:21;;;;37789:319;37684:424:::0;;;;:::o;29404:30::-;;;;;;;;;;;;;:::o;16360:127::-;16434:7;16461:9;:18;16471:7;16461:18;;;;;;;;;;;;;;;;16454:25;;16360:127;;;:::o;8475:103::-;8055:12;:10;:12::i;:::-;8044:23;;:7;:5;:7::i;:::-;:23;;;8036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8540:30:::1;8567:1;8540:18;:30::i;:::-;8475:103::o:0;29478:31::-;;;;:::o;29682:32::-;;;;:::o;39698:174::-;8055:12;:10;:12::i;:::-;8044:23;;:7;:5;:7::i;:::-;:23;;;8036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39757:16:::1;;;;;;;;;;;39753:78;;;39797:22;;;;;;;;;;;;;;39753:78;39860:4;39841:16;;:23;;;;;;;;;;;;;;;;;;39698:174::o:0;29991:30::-;;;;:::o;36906:253::-;8055:12;:10;:12::i;:::-;8044:23;;:7;:5;:7::i;:::-;:23;;;8036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37000:11:::1;37014:8;:15;37000:29;;37045:9;37040:112;37064:3;37060:1;:7;37040:112;;;37136:4;37089:31;:44;37121:8;37130:1;37121:11;;;;;;;;:::i;:::-;;;;;;;;37089:44;;;;;;;;;;;;;;;;:51;;;;;;;;;;;;;;;;;;37069:3;;;;;:::i;:::-;;;;37040:112;;;;36989:170;36906:253:::0;:::o;7824:87::-;7870:7;7897:6;;;;;;;;;;;7890:13;;7824:87;:::o;15288:104::-;15344:13;15377:7;15370:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15288:104;:::o;19648:438::-;19741:4;19758:13;19774:12;:10;:12::i;:::-;19758:28;;19797:24;19824:11;:18;19836:5;19824:18;;;;;;;;;;;;;;;:27;19843:7;19824:27;;;;;;;;;;;;;;;;19797:54;;19890:15;19870:16;:35;;19862:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;19983:60;19992:5;19999:7;20027:15;20008:16;:34;19983:8;:60::i;:::-;20074:4;20067:11;;;;19648:438;;;;:::o;16693:193::-;16772:4;16789:13;16805:12;:10;:12::i;:::-;16789:28;;16828;16838:5;16845:2;16849:6;16828:9;:28::i;:::-;16874:4;16867:11;;;16693:193;;;;:::o;39426:134::-;8055:12;:10;:12::i;:::-;8044:23;;:7;:5;:7::i;:::-;:23;;;8036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39506:13:::1;;;;;;;;;;;:35;;;39542:9;39506:46;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;39426:134:::0;:::o;30295:28::-;;;;:::o;29639:34::-;;;;:::o;29559:30::-;;;;:::o;30261:27::-;;;;:::o;39257:161::-;8055:12;:10;:12::i;:::-;8044:23;;:7;:5;:7::i;:::-;:23;;;8036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39348:8:::1;39334:11;;:22;;;;;;;;;;;;;;;;;;39372:38;39401:8;39372:38;;;;;;:::i;:::-;;;;;;;;39257:161:::0;:::o;29765:31::-;;;;:::o;30030:51::-;;;;:::o;36558:180::-;8055:12;:10;:12::i;:::-;8044:23;;:7;:5;:7::i;:::-;:23;;;8036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36668:4:::1;36657:8;:15;;;;36695:5;36683:9;:17;;;;36727:3;36711:13;:19;;;;36558:180:::0;;;:::o;29516:36::-;;;;:::o;29847:35::-;;;;:::o;16949:151::-;17038:7;17065:11;:18;17077:5;17065:18;;;;;;;;;;;;;;;:27;17084:7;17065:27;;;;;;;;;;;;;;;;17058:34;;16949:151;;;;:::o;30111:48::-;;;;:::o;29803:37::-;;;;:::o;39133:116::-;8055:12;:10;:12::i;:::-;8044:23;;:7;:5;:7::i;:::-;:23;;;8036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39227:14:::1;39215:9;:26;;;;39133:116:::0;:::o;39010:115::-;8055:12;:10;:12::i;:::-;8044:23;;:7;:5;:7::i;:::-;:23;;;8036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39108:9:::1;39085:20;:32;;;;39010:115:::0;:::o;8733:201::-;8055:12;:10;:12::i;:::-;8044:23;;:7;:5;:7::i;:::-;:23;;;8036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8842:1:::1;8822:22;;:8;:22;;;;8814:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;8898:28;8917:8;8898:18;:28::i;:::-;8733:201:::0;:::o;30190:41::-;;;;:::o;6548:98::-;6601:7;6628:10;6621:17;;6548:98;:::o;23284:380::-;23437:1;23420:19;;:5;:19;;;;23412:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23518:1;23499:21;;:7;:21;;;;23491:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23602:6;23572:11;:18;23584:5;23572:18;;;;;;;;;;;;;;;:27;23591:7;23572:27;;;;;;;;;;;;;;;:36;;;;23640:7;23624:32;;23633:5;23624:32;;;23649:6;23624:32;;;;;;:::i;:::-;;;;;;;;23284:380;;;:::o;23951:453::-;24086:24;24113:25;24123:5;24130:7;24113:9;:25::i;:::-;24086:52;;24173:17;24153:16;:37;24149:248;;24235:6;24215:16;:26;;24207:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24319:51;24328:5;24335:7;24363:6;24344:16;:25;24319:8;:51::i;:::-;24149:248;24075:329;23951:453;;;:::o;31844:4348::-;31972:14;:20;31987:4;31972:20;;;;;;;;;;;;;;;;;;;;;;;;;:42;;;;31996:14;:18;32011:2;31996:18;;;;;;;;;;;;;;;;;;;;;;;;;31972:42;31968:107;;;32054:4;32060:2;32038:25;;;;;;;;;;;;:::i;:::-;;;;;;;;31968:107;32100:1;32090:6;:11;32087:92;;;32118:28;32134:4;32140:2;32144:1;32118:15;:28::i;:::-;32161:7;;32087:92;32217:7;:5;:7::i;:::-;32209:15;;:4;:15;;;;:45;;;;;32247:7;:5;:7::i;:::-;32241:13;;:2;:13;;;;32209:45;:78;;;;;32285:1;32271:16;;:2;:16;;;;32209:78;:116;;;;;32318:6;32304:21;;:2;:21;;;;32209:116;:142;;;;;32343:8;;;;;;;;;;;32342:9;32209:142;32191:1883;;;32384:16;;;;;;;;;;;32379:83;;32427:19;;;;;;;;;;;;;;32379:83;32478:20;32501:18;:29;32520:9;32501:29;;;;;;;;;;;;;;;;32478:52;;32557:13;32549:21;;:4;:21;;;32545:309;;;32607:8;;32591:24;;;;;:::i;:::-;;;32545:309;;;32647:13;32641:19;;:2;:19;;;32637:217;;;32697:9;;32681:25;;;;;:::i;:::-;;;32637:217;;;32733:20;:26;32754:4;32733:26;;;;;;;;;;;;;;;;;;;;;;;;;32732:27;:56;;;;;32764:20;:24;32785:2;32764:24;;;;;;;;;;;;;;;;;;;;;;;;;32763:25;32732:56;32728:126;;;32825:13;;32809:29;;;;;:::i;:::-;;;32728:126;32637:217;32545:309;32889:12;32874;:27;32870:123;;;32950:12;32964;32929:48;;;;;;;;;;;;:::i;:::-;;;;;;;;32870:123;33039:12;33007:18;:29;33026:9;33007:29;;;;;;;;;;;;;;;:44;;;;33080:13;33072:21;;:4;:21;;;:61;;;;;33098:31;:35;33130:2;33098:35;;;;;;;;;;;;;;;;;;;;;;;;;33097:36;33072:61;33068:995;;;33174:20;;33165:6;:29;33161:133;;;33245:6;33253:20;;33226:48;;;;;;;;;;;;:::i;:::-;;;;;;;;33161:133;33312:24;33348:13;33358:2;33348:9;:13::i;:::-;33339:6;:22;;;;:::i;:::-;33312:49;;33403:9;;33384:16;:28;33380:135;;;33467:16;33485:9;;33444:51;;;;;;;;;;;;:::i;:::-;;;;;;;;33380:135;33135:397;33068:995;;;33548:13;33542:19;;:2;:19;;;:61;;;;;33566:31;:37;33598:4;33566:37;;;;;;;;;;;;;;;;;;;;;;;;;33565:38;33542:61;33538:525;;;33645:20;;33636:6;:29;33632:133;;;33716:6;33724:20;;33697:48;;;;;;;;;;;;:::i;:::-;;;;;;;;33632:133;33538:525;;;33790:31;:35;33822:2;33790:35;;;;;;;;;;;;;;;;;;;;;;;;;33786:277;;33845:24;33881:13;33891:2;33881:9;:13::i;:::-;33872:6;:22;;;;:::i;:::-;33845:49;;33936:9;;33917:16;:28;33913:135;;;34000:16;34018:9;;33977:51;;;;;;;;;;;;:::i;:::-;;;;;;;;33913:135;33826:237;33786:277;33538:525;33068:995;32362:1712;32191:1883;34084:12;34136:18;;34099:33;34117:13;;;;;;;;;;;34099:9;:33::i;:::-;:55;;34084:70;;34185:7;:33;;;;;34210:8;;;;;;;;;;;34209:9;34185:33;:61;;;;;34235:11;;;;;;;;;;;34185:61;:99;;;;;34271:13;34263:21;;:4;:21;;;;34185:99;:142;;;;;34302:19;:25;34322:4;34302:25;;;;;;;;;;;;;;;;;;;;;;;;;34301:26;34185:142;:183;;;;;34345:19;:23;34365:2;34345:23;;;;;;;;;;;;;;;;;;;;;;;;;34344:24;34185:183;34167:797;;;34406:4;34395:8;;:15;;;;;;;;;;;;;;;;;;34427:13;34473:15;;34461:9;;34443:15;;:27;;;;:::i;:::-;:45;;;;:::i;:::-;34427:61;;34503:17;34562:5;34544:15;;34523:18;;:36;;;;:::i;:::-;:44;;;;:::i;:::-;34503:64;;34582:17;34635:5;34623:9;;34602:18;;:30;;;;:::i;:::-;:38;;;;:::i;:::-;34582:58;;34655:17;34714:5;34696:15;;34675:18;;:36;;;;:::i;:::-;:44;;;;:::i;:::-;34655:64;;34736:13;;;;;;;;;;;:25;;;34762:9;34773;34784;34736:58;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34830:9;34811:15;;:28;;;;;;;:::i;:::-;;;;;;;;34873:9;34854:15;;:28;;;;;;;:::i;:::-;;;;;;;;34910:9;34897;;:22;;;;;;;:::i;:::-;;;;;;;;34947:5;34936:8;;:16;;;;;;;;;;;;;;;;;;34380:584;;;;34167:797;34980:8;;;;;;;;;;;34979:9;:39;;;;;34993:19;:25;35013:4;34993:25;;;;;;;;;;;;;;;;;;;;;;;;;34992:26;34979:39;:67;;;;;35023:19;:23;35043:2;35023:23;;;;;;;;;;;;;;;;;;;;;;;;;35022:24;34979:67;34976:1161;;;35063:12;35100:13;35094:19;;:2;:19;;;:41;;;;;35134:1;35117:13;;:18;;35094:41;35090:821;;;35195:5;35179:13;;35170:6;:22;;;;:::i;:::-;:30;;;;:::i;:::-;35163:37;;35254:13;;35240:11;;35233:4;:18;;;;:::i;:::-;:34;;;;:::i;:::-;35219:10;;:48;;;;;;;:::i;:::-;;;;;;;;35331:13;;35312:16;;35305:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;35286:15;;:58;;;;;;;:::i;:::-;;;;;;;;35396:13;;35383:10;;35376:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;35363:9;;:46;;;;;;;:::i;:::-;;;;;;;;35473:13;;35454:16;;35447:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;35428:15;;:58;;;;;;;:::i;:::-;;;;;;;;35090:821;;;35520:13;35512:21;;:4;:21;;;:42;;;;;35553:1;35537:12;;:17;;35512:42;35508:403;;;35612:5;35597:12;;35588:6;:21;;;;:::i;:::-;:29;;;;:::i;:::-;35581:36;;35670:12;;35657:10;;35650:4;:17;;;;:::i;:::-;:32;;;;:::i;:::-;35636:10;;:46;;;;;;;:::i;:::-;;;;;;;;35745:12;;35727:15;;35720:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;35701:15;;:56;;;;;;;:::i;:::-;;;;;;;;35808:12;;35796:9;;35789:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;35776:9;;:44;;;;;;;:::i;:::-;;;;;;;;35883:12;;35865:15;;35858:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;35839:15;;:56;;;;;;;:::i;:::-;;;;;;;;35508:403;35090:821;35936:1;35929:4;:8;35925:199;;;35968:4;35958:14;;;;;:::i;:::-;;;35991:51;36007:4;36021:13;;;;;;;;;;;36037:4;35991:15;:51::i;:::-;36061:47;36081:13;;;;;;;;;;;36097:10;;36061:11;:47::i;:::-;35925:199;35048:1089;34976:1161;36149:33;36165:4;36171:2;36175:6;36149:15;:33::i;:::-;31957:4235;31844:4348;;;;:::o;20565:671::-;20712:1;20696:18;;:4;:18;;;;20688:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20789:1;20775:16;;:2;:16;;;;20767:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;20844:38;20865:4;20871:2;20875:6;20844:20;:38::i;:::-;20895:19;20917:9;:15;20927:4;20917:15;;;;;;;;;;;;;;;;20895:37;;20966:6;20951:11;:21;;20943:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;21083:6;21069:11;:20;21051:9;:15;21061:4;21051:15;;;;;;;;;;;;;;;:38;;;;21128:6;21111:9;:13;21121:2;21111:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;21167:2;21152:26;;21161:4;21152:26;;;21171:6;21152:26;;;;;;:::i;:::-;;;;;;;;21191:37;21211:4;21217:2;21221:6;21191:19;:37::i;:::-;20677:559;20565:671;;;:::o;9094:191::-;9168:16;9187:6;;;;;;;;;;;9168:25;;9213:8;9204:6;;:17;;;;;;;;;;;;;;;;;;9268:8;9237:40;;9258:8;9237:40;;;;;;;;;;;;9157:128;9094:191;:::o;22255:591::-;22358:1;22339:21;;:7;:21;;;;22331:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22411:49;22432:7;22449:1;22453:6;22411:20;:49::i;:::-;22473:22;22498:9;:18;22508:7;22498:18;;;;;;;;;;;;;;;;22473:43;;22553:6;22535:14;:24;;22527:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;22672:6;22655:14;:23;22634:9;:18;22644:7;22634:18;;;;;;;;;;;;;;;:44;;;;22716:6;22700:12;;:22;;;;;;;:::i;:::-;;;;;;;;22766:1;22740:37;;22749:7;22740:37;;;22770:6;22740:37;;;;;;:::i;:::-;;;;;;;;22790:48;22810:7;22827:1;22831:6;22790:19;:48::i;:::-;22320:526;22255:591;;:::o;25004:125::-;;;;:::o;25733:124::-;;;;:::o;7:90:1:-;41:7;84:5;77:13;70:21;59:32;;7:90;;;:::o;103:109::-;184:21;199:5;184:21;:::i;:::-;179:3;172:34;103:109;;:::o;218:210::-;305:4;343:2;332:9;328:18;320:26;;356:65;418:1;407:9;403:17;394:6;356:65;:::i;:::-;218:210;;;;:::o;434:99::-;486:6;520:5;514:12;504:22;;434:99;;;:::o;539:169::-;623:11;657:6;652:3;645:19;697:4;692:3;688:14;673:29;;539:169;;;;:::o;714:307::-;782:1;792:113;806:6;803:1;800:13;792:113;;;891:1;886:3;882:11;876:18;872:1;867:3;863:11;856:39;828:2;825:1;821:10;816:15;;792:113;;;923:6;920:1;917:13;914:101;;;1003:1;994:6;989:3;985:16;978:27;914:101;763:258;714:307;;;:::o;1027:102::-;1068:6;1119:2;1115:7;1110:2;1103:5;1099:14;1095:28;1085:38;;1027:102;;;:::o;1135:364::-;1223:3;1251:39;1284:5;1251:39;:::i;:::-;1306:71;1370:6;1365:3;1306:71;:::i;:::-;1299:78;;1386:52;1431:6;1426:3;1419:4;1412:5;1408:16;1386:52;:::i;:::-;1463:29;1485:6;1463:29;:::i;:::-;1458:3;1454:39;1447:46;;1227:272;1135:364;;;;:::o;1505:313::-;1618:4;1656:2;1645:9;1641:18;1633:26;;1705:9;1699:4;1695:20;1691:1;1680:9;1676:17;1669:47;1733:78;1806:4;1797:6;1733:78;:::i;:::-;1725:86;;1505:313;;;;:::o;1824:77::-;1861:7;1890:5;1879:16;;1824:77;;;:::o;1907:118::-;1994:24;2012:5;1994:24;:::i;:::-;1989:3;1982:37;1907:118;;:::o;2031:222::-;2124:4;2162:2;2151:9;2147:18;2139:26;;2175:71;2243:1;2232:9;2228:17;2219:6;2175:71;:::i;:::-;2031:222;;;;:::o;2259:75::-;2292:6;2325:2;2319:9;2309:19;;2259:75;:::o;2340:117::-;2449:1;2446;2439:12;2463:117;2572:1;2569;2562:12;2586:126;2623:7;2663:42;2656:5;2652:54;2641:65;;2586:126;;;:::o;2718:96::-;2755:7;2784:24;2802:5;2784:24;:::i;:::-;2773:35;;2718:96;;;:::o;2820:122::-;2893:24;2911:5;2893:24;:::i;:::-;2886:5;2883:35;2873:63;;2932:1;2929;2922:12;2873:63;2820:122;:::o;2948:139::-;2994:5;3032:6;3019:20;3010:29;;3048:33;3075:5;3048:33;:::i;:::-;2948:139;;;;:::o;3093:122::-;3166:24;3184:5;3166:24;:::i;:::-;3159:5;3156:35;3146:63;;3205:1;3202;3195:12;3146:63;3093:122;:::o;3221:139::-;3267:5;3305:6;3292:20;3283:29;;3321:33;3348:5;3321:33;:::i;:::-;3221:139;;;;:::o;3366:474::-;3434:6;3442;3491:2;3479:9;3470:7;3466:23;3462:32;3459:119;;;3497:79;;:::i;:::-;3459:119;3617:1;3642:53;3687:7;3678:6;3667:9;3663:22;3642:53;:::i;:::-;3632:63;;3588:117;3744:2;3770:53;3815:7;3806:6;3795:9;3791:22;3770:53;:::i;:::-;3760:63;;3715:118;3366:474;;;;;:::o;3846:329::-;3905:6;3954:2;3942:9;3933:7;3929:23;3925:32;3922:119;;;3960:79;;:::i;:::-;3922:119;4080:1;4105:53;4150:7;4141:6;4130:9;4126:22;4105:53;:::i;:::-;4095:63;;4051:117;3846:329;;;;:::o;4181:116::-;4251:21;4266:5;4251:21;:::i;:::-;4244:5;4241:32;4231:60;;4287:1;4284;4277:12;4231:60;4181:116;:::o;4303:133::-;4346:5;4384:6;4371:20;4362:29;;4400:30;4424:5;4400:30;:::i;:::-;4303:133;;;;:::o;4442:468::-;4507:6;4515;4564:2;4552:9;4543:7;4539:23;4535:32;4532:119;;;4570:79;;:::i;:::-;4532:119;4690:1;4715:53;4760:7;4751:6;4740:9;4736:22;4715:53;:::i;:::-;4705:63;;4661:117;4817:2;4843:50;4885:7;4876:6;4865:9;4861:22;4843:50;:::i;:::-;4833:60;;4788:115;4442:468;;;;;:::o;4916:60::-;4944:3;4965:5;4958:12;;4916:60;;;:::o;4982:142::-;5032:9;5065:53;5083:34;5092:24;5110:5;5092:24;:::i;:::-;5083:34;:::i;:::-;5065:53;:::i;:::-;5052:66;;4982:142;;;:::o;5130:126::-;5180:9;5213:37;5244:5;5213:37;:::i;:::-;5200:50;;5130:126;;;:::o;5262:152::-;5338:9;5371:37;5402:5;5371:37;:::i;:::-;5358:50;;5262:152;;;:::o;5420:183::-;5533:63;5590:5;5533:63;:::i;:::-;5528:3;5521:76;5420:183;;:::o;5609:274::-;5728:4;5766:2;5755:9;5751:18;5743:26;;5779:97;5873:1;5862:9;5858:17;5849:6;5779:97;:::i;:::-;5609:274;;;;:::o;5889:765::-;5975:6;5983;5991;5999;6048:3;6036:9;6027:7;6023:23;6019:33;6016:120;;;6055:79;;:::i;:::-;6016:120;6175:1;6200:53;6245:7;6236:6;6225:9;6221:22;6200:53;:::i;:::-;6190:63;;6146:117;6302:2;6328:53;6373:7;6364:6;6353:9;6349:22;6328:53;:::i;:::-;6318:63;;6273:118;6430:2;6456:53;6501:7;6492:6;6481:9;6477:22;6456:53;:::i;:::-;6446:63;;6401:118;6558:2;6584:53;6629:7;6620:6;6609:9;6605:22;6584:53;:::i;:::-;6574:63;;6529:118;5889:765;;;;;;;:::o;6660:152::-;6736:9;6769:37;6800:5;6769:37;:::i;:::-;6756:50;;6660:152;;;:::o;6818:183::-;6931:63;6988:5;6931:63;:::i;:::-;6926:3;6919:76;6818:183;;:::o;7007:274::-;7126:4;7164:2;7153:9;7149:18;7141:26;;7177:97;7271:1;7260:9;7256:17;7247:6;7177:97;:::i;:::-;7007:274;;;;:::o;7287:619::-;7364:6;7372;7380;7429:2;7417:9;7408:7;7404:23;7400:32;7397:119;;;7435:79;;:::i;:::-;7397:119;7555:1;7580:53;7625:7;7616:6;7605:9;7601:22;7580:53;:::i;:::-;7570:63;;7526:117;7682:2;7708:53;7753:7;7744:6;7733:9;7729:22;7708:53;:::i;:::-;7698:63;;7653:118;7810:2;7836:53;7881:7;7872:6;7861:9;7857:22;7836:53;:::i;:::-;7826:63;;7781:118;7287:619;;;;;:::o;7912:86::-;7947:7;7987:4;7980:5;7976:16;7965:27;;7912:86;;;:::o;8004:112::-;8087:22;8103:5;8087:22;:::i;:::-;8082:3;8075:35;8004:112;;:::o;8122:214::-;8211:4;8249:2;8238:9;8234:18;8226:26;;8262:67;8326:1;8315:9;8311:17;8302:6;8262:67;:::i;:::-;8122:214;;;;:::o;8342:117::-;8451:1;8448;8441:12;8465:180;8513:77;8510:1;8503:88;8610:4;8607:1;8600:15;8634:4;8631:1;8624:15;8651:281;8734:27;8756:4;8734:27;:::i;:::-;8726:6;8722:40;8864:6;8852:10;8849:22;8828:18;8816:10;8813:34;8810:62;8807:88;;;8875:18;;:::i;:::-;8807:88;8915:10;8911:2;8904:22;8694:238;8651:281;;:::o;8938:129::-;8972:6;8999:20;;:::i;:::-;8989:30;;9028:33;9056:4;9048:6;9028:33;:::i;:::-;8938:129;;;:::o;9073:311::-;9150:4;9240:18;9232:6;9229:30;9226:56;;;9262:18;;:::i;:::-;9226:56;9312:4;9304:6;9300:17;9292:25;;9372:4;9366;9362:15;9354:23;;9073:311;;;:::o;9390:117::-;9499:1;9496;9489:12;9530:710;9626:5;9651:81;9667:64;9724:6;9667:64;:::i;:::-;9651:81;:::i;:::-;9642:90;;9752:5;9781:6;9774:5;9767:21;9815:4;9808:5;9804:16;9797:23;;9868:4;9860:6;9856:17;9848:6;9844:30;9897:3;9889:6;9886:15;9883:122;;;9916:79;;:::i;:::-;9883:122;10031:6;10014:220;10048:6;10043:3;10040:15;10014:220;;;10123:3;10152:37;10185:3;10173:10;10152:37;:::i;:::-;10147:3;10140:50;10219:4;10214:3;10210:14;10203:21;;10090:144;10074:4;10069:3;10065:14;10058:21;;10014:220;;;10018:21;9632:608;;9530:710;;;;;:::o;10263:370::-;10334:5;10383:3;10376:4;10368:6;10364:17;10360:27;10350:122;;10391:79;;:::i;:::-;10350:122;10508:6;10495:20;10533:94;10623:3;10615:6;10608:4;10600:6;10596:17;10533:94;:::i;:::-;10524:103;;10340:293;10263:370;;;;:::o;10639:539::-;10723:6;10772:2;10760:9;10751:7;10747:23;10743:32;10740:119;;;10778:79;;:::i;:::-;10740:119;10926:1;10915:9;10911:17;10898:31;10956:18;10948:6;10945:30;10942:117;;;10978:79;;:::i;:::-;10942:117;11083:78;11153:7;11144:6;11133:9;11129:22;11083:78;:::i;:::-;11073:88;;10869:302;10639:539;;;;:::o;11184:118::-;11271:24;11289:5;11271:24;:::i;:::-;11266:3;11259:37;11184:118;;:::o;11308:222::-;11401:4;11439:2;11428:9;11424:18;11416:26;;11452:71;11520:1;11509:9;11505:17;11496:6;11452:71;:::i;:::-;11308:222;;;;:::o;11536:329::-;11595:6;11644:2;11632:9;11623:7;11619:23;11615:32;11612:119;;;11650:79;;:::i;:::-;11612:119;11770:1;11795:53;11840:7;11831:6;11820:9;11816:22;11795:53;:::i;:::-;11785:63;;11741:117;11536:329;;;;:::o;11871:311::-;11948:4;12038:18;12030:6;12027:30;12024:56;;;12060:18;;:::i;:::-;12024:56;12110:4;12102:6;12098:17;12090:25;;12170:4;12164;12160:15;12152:23;;11871:311;;;:::o;12205:710::-;12301:5;12326:81;12342:64;12399:6;12342:64;:::i;:::-;12326:81;:::i;:::-;12317:90;;12427:5;12456:6;12449:5;12442:21;12490:4;12483:5;12479:16;12472:23;;12543:4;12535:6;12531:17;12523:6;12519:30;12572:3;12564:6;12561:15;12558:122;;;12591:79;;:::i;:::-;12558:122;12706:6;12689:220;12723:6;12718:3;12715:15;12689:220;;;12798:3;12827:37;12860:3;12848:10;12827:37;:::i;:::-;12822:3;12815:50;12894:4;12889:3;12885:14;12878:21;;12765:144;12749:4;12744:3;12740:14;12733:21;;12689:220;;;12693:21;12307:608;;12205:710;;;;;:::o;12938:370::-;13009:5;13058:3;13051:4;13043:6;13039:17;13035:27;13025:122;;13066:79;;:::i;:::-;13025:122;13183:6;13170:20;13208:94;13298:3;13290:6;13283:4;13275:6;13271:17;13208:94;:::i;:::-;13199:103;;13015:293;12938:370;;;;:::o;13314:894::-;13432:6;13440;13489:2;13477:9;13468:7;13464:23;13460:32;13457:119;;;13495:79;;:::i;:::-;13457:119;13643:1;13632:9;13628:17;13615:31;13673:18;13665:6;13662:30;13659:117;;;13695:79;;:::i;:::-;13659:117;13800:78;13870:7;13861:6;13850:9;13846:22;13800:78;:::i;:::-;13790:88;;13586:302;13955:2;13944:9;13940:18;13927:32;13986:18;13978:6;13975:30;13972:117;;;14008:79;;:::i;:::-;13972:117;14113:78;14183:7;14174:6;14163:9;14159:22;14113:78;:::i;:::-;14103:88;;13898:303;13314:894;;;;;:::o;14214:323::-;14270:6;14319:2;14307:9;14298:7;14294:23;14290:32;14287:119;;;14325:79;;:::i;:::-;14287:119;14445:1;14470:50;14512:7;14503:6;14492:9;14488:22;14470:50;:::i;:::-;14460:60;;14416:114;14214:323;;;;:::o;14543:619::-;14620:6;14628;14636;14685:2;14673:9;14664:7;14660:23;14656:32;14653:119;;;14691:79;;:::i;:::-;14653:119;14811:1;14836:53;14881:7;14872:6;14861:9;14857:22;14836:53;:::i;:::-;14826:63;;14782:117;14938:2;14964:53;15009:7;15000:6;14989:9;14985:22;14964:53;:::i;:::-;14954:63;;14909:118;15066:2;15092:53;15137:7;15128:6;15117:9;15113:22;15092:53;:::i;:::-;15082:63;;15037:118;14543:619;;;;;:::o;15168:474::-;15236:6;15244;15293:2;15281:9;15272:7;15268:23;15264:32;15261:119;;;15299:79;;:::i;:::-;15261:119;15419:1;15444:53;15489:7;15480:6;15469:9;15465:22;15444:53;:::i;:::-;15434:63;;15390:117;15546:2;15572:53;15617:7;15608:6;15597:9;15593:22;15572:53;:::i;:::-;15562:63;;15517:118;15168:474;;;;;:::o;15648:180::-;15696:77;15693:1;15686:88;15793:4;15790:1;15783:15;15817:4;15814:1;15807:15;15834:320;15878:6;15915:1;15909:4;15905:12;15895:22;;15962:1;15956:4;15952:12;15983:18;15973:81;;16039:4;16031:6;16027:17;16017:27;;15973:81;16101:2;16093:6;16090:14;16070:18;16067:38;16064:84;;;16120:18;;:::i;:::-;16064:84;15885:269;15834:320;;;:::o;16160:182::-;16300:34;16296:1;16288:6;16284:14;16277:58;16160:182;:::o;16348:366::-;16490:3;16511:67;16575:2;16570:3;16511:67;:::i;:::-;16504:74;;16587:93;16676:3;16587:93;:::i;:::-;16705:2;16700:3;16696:12;16689:19;;16348:366;;;:::o;16720:419::-;16886:4;16924:2;16913:9;16909:18;16901:26;;16973:9;16967:4;16963:20;16959:1;16948:9;16944:17;16937:47;17001:131;17127:4;17001:131;:::i;:::-;16993:139;;16720:419;;;:::o;17145:180::-;17193:77;17190:1;17183:88;17290:4;17287:1;17280:15;17314:4;17311:1;17304:15;17331:305;17371:3;17390:20;17408:1;17390:20;:::i;:::-;17385:25;;17424:20;17442:1;17424:20;:::i;:::-;17419:25;;17578:1;17510:66;17506:74;17503:1;17500:81;17497:107;;;17584:18;;:::i;:::-;17497:107;17628:1;17625;17621:9;17614:16;;17331:305;;;;:::o;17642:143::-;17699:5;17730:6;17724:13;17715:22;;17746:33;17773:5;17746:33;:::i;:::-;17642:143;;;;:::o;17791:351::-;17861:6;17910:2;17898:9;17889:7;17885:23;17881:32;17878:119;;;17916:79;;:::i;:::-;17878:119;18036:1;18061:64;18117:7;18108:6;18097:9;18093:22;18061:64;:::i;:::-;18051:74;;18007:128;17791:351;;;;:::o;18148:180::-;18196:77;18193:1;18186:88;18293:4;18290:1;18283:15;18317:4;18314:1;18307:15;18334:233;18373:3;18396:24;18414:5;18396:24;:::i;:::-;18387:33;;18442:66;18435:5;18432:77;18429:103;;;18512:18;;:::i;:::-;18429:103;18559:1;18552:5;18548:13;18541:20;;18334:233;;;:::o;18573:224::-;18713:34;18709:1;18701:6;18697:14;18690:58;18782:7;18777:2;18769:6;18765:15;18758:32;18573:224;:::o;18803:366::-;18945:3;18966:67;19030:2;19025:3;18966:67;:::i;:::-;18959:74;;19042:93;19131:3;19042:93;:::i;:::-;19160:2;19155:3;19151:12;19144:19;;18803:366;;;:::o;19175:419::-;19341:4;19379:2;19368:9;19364:18;19356:26;;19428:9;19422:4;19418:20;19414:1;19403:9;19399:17;19392:47;19456:131;19582:4;19456:131;:::i;:::-;19448:139;;19175:419;;;:::o;19600:225::-;19740:34;19736:1;19728:6;19724:14;19717:58;19809:8;19804:2;19796:6;19792:15;19785:33;19600:225;:::o;19831:366::-;19973:3;19994:67;20058:2;20053:3;19994:67;:::i;:::-;19987:74;;20070:93;20159:3;20070:93;:::i;:::-;20188:2;20183:3;20179:12;20172:19;;19831:366;;;:::o;20203:419::-;20369:4;20407:2;20396:9;20392:18;20384:26;;20456:9;20450:4;20446:20;20442:1;20431:9;20427:17;20420:47;20484:131;20610:4;20484:131;:::i;:::-;20476:139;;20203:419;;;:::o;20628:223::-;20768:34;20764:1;20756:6;20752:14;20745:58;20837:6;20832:2;20824:6;20820:15;20813:31;20628:223;:::o;20857:366::-;20999:3;21020:67;21084:2;21079:3;21020:67;:::i;:::-;21013:74;;21096:93;21185:3;21096:93;:::i;:::-;21214:2;21209:3;21205:12;21198:19;;20857:366;;;:::o;21229:419::-;21395:4;21433:2;21422:9;21418:18;21410:26;;21482:9;21476:4;21472:20;21468:1;21457:9;21453:17;21446:47;21510:131;21636:4;21510:131;:::i;:::-;21502:139;;21229:419;;;:::o;21654:221::-;21794:34;21790:1;21782:6;21778:14;21771:58;21863:4;21858:2;21850:6;21846:15;21839:29;21654:221;:::o;21881:366::-;22023:3;22044:67;22108:2;22103:3;22044:67;:::i;:::-;22037:74;;22120:93;22209:3;22120:93;:::i;:::-;22238:2;22233:3;22229:12;22222:19;;21881:366;;;:::o;22253:419::-;22419:4;22457:2;22446:9;22442:18;22434:26;;22506:9;22500:4;22496:20;22492:1;22481:9;22477:17;22470:47;22534:131;22660:4;22534:131;:::i;:::-;22526:139;;22253:419;;;:::o;22678:179::-;22818:31;22814:1;22806:6;22802:14;22795:55;22678:179;:::o;22863:366::-;23005:3;23026:67;23090:2;23085:3;23026:67;:::i;:::-;23019:74;;23102:93;23191:3;23102:93;:::i;:::-;23220:2;23215:3;23211:12;23204:19;;22863:366;;;:::o;23235:419::-;23401:4;23439:2;23428:9;23424:18;23416:26;;23488:9;23482:4;23478:20;23474:1;23463:9;23459:17;23452:47;23516:131;23642:4;23516:131;:::i;:::-;23508:139;;23235:419;;;:::o;23660:332::-;23781:4;23819:2;23808:9;23804:18;23796:26;;23832:71;23900:1;23889:9;23885:17;23876:6;23832:71;:::i;:::-;23913:72;23981:2;23970:9;23966:18;23957:6;23913:72;:::i;:::-;23660:332;;;;;:::o;23998:::-;24119:4;24157:2;24146:9;24142:18;24134:26;;24170:71;24238:1;24227:9;24223:17;24214:6;24170:71;:::i;:::-;24251:72;24319:2;24308:9;24304:18;24295:6;24251:72;:::i;:::-;23998:332;;;;;:::o;24336:348::-;24376:7;24399:20;24417:1;24399:20;:::i;:::-;24394:25;;24433:20;24451:1;24433:20;:::i;:::-;24428:25;;24621:1;24553:66;24549:74;24546:1;24543:81;24538:1;24531:9;24524:17;24520:105;24517:131;;;24628:18;;:::i;:::-;24517:131;24676:1;24673;24669:9;24658:20;;24336:348;;;;:::o;24690:180::-;24738:77;24735:1;24728:88;24835:4;24832:1;24825:15;24859:4;24856:1;24849:15;24876:185;24916:1;24933:20;24951:1;24933:20;:::i;:::-;24928:25;;24967:20;24985:1;24967:20;:::i;:::-;24962:25;;25006:1;24996:35;;25011:18;;:::i;:::-;24996:35;25053:1;25050;25046:9;25041:14;;24876:185;;;;:::o;25067:442::-;25216:4;25254:2;25243:9;25239:18;25231:26;;25267:71;25335:1;25324:9;25320:17;25311:6;25267:71;:::i;:::-;25348:72;25416:2;25405:9;25401:18;25392:6;25348:72;:::i;:::-;25430;25498:2;25487:9;25483:18;25474:6;25430:72;:::i;:::-;25067:442;;;;;;:::o;25515:191::-;25555:4;25575:20;25593:1;25575:20;:::i;:::-;25570:25;;25609:20;25627:1;25609:20;:::i;:::-;25604:25;;25648:1;25645;25642:8;25639:34;;;25653:18;;:::i;:::-;25639:34;25698:1;25695;25691:9;25683:17;;25515:191;;;;:::o;25712:224::-;25852:34;25848:1;25840:6;25836:14;25829:58;25921:7;25916:2;25908:6;25904:15;25897:32;25712:224;:::o;25942:366::-;26084:3;26105:67;26169:2;26164:3;26105:67;:::i;:::-;26098:74;;26181:93;26270:3;26181:93;:::i;:::-;26299:2;26294:3;26290:12;26283:19;;25942:366;;;:::o;26314:419::-;26480:4;26518:2;26507:9;26503:18;26495:26;;26567:9;26561:4;26557:20;26553:1;26542:9;26538:17;26531:47;26595:131;26721:4;26595:131;:::i;:::-;26587:139;;26314:419;;;:::o;26739:222::-;26879:34;26875:1;26867:6;26863:14;26856:58;26948:5;26943:2;26935:6;26931:15;26924:30;26739:222;:::o;26967:366::-;27109:3;27130:67;27194:2;27189:3;27130:67;:::i;:::-;27123:74;;27206:93;27295:3;27206:93;:::i;:::-;27324:2;27319:3;27315:12;27308:19;;26967:366;;;:::o;27339:419::-;27505:4;27543:2;27532:9;27528:18;27520:26;;27592:9;27586:4;27582:20;27578:1;27567:9;27563:17;27556:47;27620:131;27746:4;27620:131;:::i;:::-;27612:139;;27339:419;;;:::o;27764:225::-;27904:34;27900:1;27892:6;27888:14;27881:58;27973:8;27968:2;27960:6;27956:15;27949:33;27764:225;:::o;27995:366::-;28137:3;28158:67;28222:2;28217:3;28158:67;:::i;:::-;28151:74;;28234:93;28323:3;28234:93;:::i;:::-;28352:2;28347:3;28343:12;28336:19;;27995:366;;;:::o;28367:419::-;28533:4;28571:2;28560:9;28556:18;28548:26;;28620:9;28614:4;28610:20;28606:1;28595:9;28591:17;28584:47;28648:131;28774:4;28648:131;:::i;:::-;28640:139;;28367:419;;;:::o;28792:220::-;28932:34;28928:1;28920:6;28916:14;28909:58;29001:3;28996:2;28988:6;28984:15;28977:28;28792:220;:::o;29018:366::-;29160:3;29181:67;29245:2;29240:3;29181:67;:::i;:::-;29174:74;;29257:93;29346:3;29257:93;:::i;:::-;29375:2;29370:3;29366:12;29359:19;;29018:366;;;:::o;29390:419::-;29556:4;29594:2;29583:9;29579:18;29571:26;;29643:9;29637:4;29633:20;29629:1;29618:9;29614:17;29607:47;29671:131;29797:4;29671:131;:::i;:::-;29663:139;;29390:419;;;:::o;29815:221::-;29955:34;29951:1;29943:6;29939:14;29932:58;30024:4;30019:2;30011:6;30007:15;30000:29;29815:221;:::o;30042:366::-;30184:3;30205:67;30269:2;30264:3;30205:67;:::i;:::-;30198:74;;30281:93;30370:3;30281:93;:::i;:::-;30399:2;30394:3;30390:12;30383:19;;30042:366;;;:::o;30414:419::-;30580:4;30618:2;30607:9;30603:18;30595:26;;30667:9;30661:4;30657:20;30653:1;30642:9;30638:17;30631:47;30695:131;30821:4;30695:131;:::i;:::-;30687:139;;30414:419;;;:::o

Swarm Source

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