ETH Price: $2,861.52 (-10.65%)
Gas: 15 Gwei

Token

XGF (XGF)
 

Overview

Max Total Supply

100,000,000 XGF

Holders

353

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.000000000031173451 XGF

Value
$0.00
0x38e7e3125cb9026744f8d3ea016b524add1b2719
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:
NeoBot

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-07-29
*/

//                       _____          _____  
// _____      _____  ___|\    \    ____|\    \ 
// \    \    /    / /    /\    \  |    | \    \
//  \    \  /    / |    |  |____| |    |______/
//   \____\/____/  |    |    ____ |    |----'\ 
//   /    /\    \  |    |   |    ||    |_____/ 
//  /    /  \    \ |    |   |_,  ||    |       
// /____/ /\ \____\|\ ___\___/  /||____|       
// |    |/  \|    || |   /____ / ||    |       
// |____|    |____| \|___|    | / |____|       
//   \(        )/     \( |____|/    )/         
//    '        '       '   )/       '          
//                         '                   

// > greedisgood

// File @openzeppelin/contracts/utils/[email protected]

// SPDX-License-Identifier: MIT
// 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/[email protected]


// OpenZeppelin Contracts (last updated v4.9.0) (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 Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

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

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

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

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


// File @openzeppelin/contracts/token/ERC20/[email protected]


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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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


// File @openzeppelin/contracts/token/ERC20/extensions/[email protected]


// 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/[email protected]


// OpenZeppelin Contracts (last updated v4.9.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.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * The default value of {decimals} is 18. To change this, you should override
 * this function so it returns a different value.
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `from` to `to`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(address from, address to, uint256 amount) internal virtual {
        require(from != address(0), "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;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);

        _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;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _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;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _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 Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "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 @uniswap/v2-periphery/contracts/interfaces/[email protected]

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/[email protected]

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 @uniswap/v2-core/contracts/interfaces/[email protected]

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 contracts/XGF.sol

pragma solidity ^0.8.18;
contract NeoBot is ERC20, Ownable {
    string private _name = "XGF";
    string private _symbol = "XGF";
    uint256 private _supply        = 100_000_000 ether;
    uint256 public maxTxAmount     = 2_000_000 ether;
    uint256 public maxWalletAmount = 2_000_000 ether;
    address public taxAddy = 0x7D959EDe08e31F01e4A8B122fF0B2431944ea2Ea;
    address public DEAD = 0x000000000000000000000000000000000000dEaD;

    mapping(address => bool) public _feeOn;
    mapping(address => bool) public wl;

    mapping(address => bool) public GreedIsGoodwallets;

    enum Phase {Phase1, Phase2, Phase3, Phase4}
    Phase public currentphase;

    bool progress_swap = false;

    uint256 public buyTaxGlobal = 10;
    uint256 public sellTaxGlobal = 50;
    uint256 private GreedIsGood = 50;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public uniswapV2Pair;

    uint256 public operationsFunds;

    
    modifier onlyOwnerOrOperations() {
        require(owner() == _msgSender() || taxAddy == _msgSender(), "Caller is not the owner or the specific wallet");
        _;
    }

    constructor() ERC20(_name, _symbol) {
        _mint(msg.sender, (_supply));

        currentphase = Phase.Phase1;
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
    
        wl[owner()] = true;
        wl[taxAddy] = true;
        wl[address(this)] = true;
        wl[0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D] = true;
        _feeOn[address(uniswapV2Router)] = true;
        _feeOn[msg.sender] = true;
        _feeOn[taxAddy] = true;
        _feeOn[address(this)] = true;
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {

        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        if (!wl[from] && !wl[to] ) {
            if (to != uniswapV2Pair) {
                require(amount <= maxTxAmount, "ERC20: transfer amount exceeds the max transaction amount bef");
                require(
                    (amount + balanceOf(to)) <= maxWalletAmount,
                    "ERC20: balance amount exceeded max wallet amount limit"
                );
            }
        }

        uint256 transferAmount = amount;
        if (!_feeOn[from] && !_feeOn[to]) {
            if ((from == uniswapV2Pair || to == uniswapV2Pair)) {
                require(amount <= maxTxAmount, "ERC20: transfer amount exceeds the max transaction amount");
 
                if (
                    buyTaxGlobal > 0 && 
                    uniswapV2Pair == from &&
                    !wl[to] &&
                    from != address(this)
                ) {

                    if (currentphase == Phase.Phase1) {
                        GreedIsGoodwallets[to] = true;
                    }

                    uint256 feeTokens = (amount * buyTaxGlobal) / 100;
                    super._transfer(from, address(this), feeTokens);
                    transferAmount = amount - feeTokens;
                }

                if (
                    uniswapV2Pair == to &&
                    !wl[from] &&
                    to != address(this) &&
                    !progress_swap
                ) {
                    
                    uint256 taxSell = sellTaxGlobal;
                    if (GreedIsGoodwallets[from] == true) {
                        taxSell = GreedIsGood;
                    }

                    progress_swap = true;
                    swapAndLiquify();
                    progress_swap = false;

                    uint256 feeTokens = (amount * taxSell) / 100;
                    super._transfer(from, address(this), feeTokens);
                    transferAmount = amount - feeTokens;
                }
            }
            else {
                if (
                    GreedIsGoodwallets[from] == true &&
                    uniswapV2Pair != to
                ) {
                    uint256 feeTokens = (amount * GreedIsGood) / 100;
                    super._transfer(from, address(this), feeTokens);
                    transferAmount = amount - feeTokens;
                }
            }
        }
        super._transfer(from, to, transferAmount);
    }

    function swapAndLiquify() internal {
        if (balanceOf(address(this)) == 0) {
            return;
        }
        uint256 receivedETH;
        {
            uint256 contractTokenBalance = balanceOf(address(this));
            uint256 beforeBalance = address(this).balance;

            if (contractTokenBalance > 0) {
                beforeBalance = address(this).balance;
                _swapTokensForEth(contractTokenBalance, 0);
                receivedETH = address(this).balance - beforeBalance;
                operationsFunds += receivedETH;
            }
        }
    }
 
    function getTax() external onlyOwnerOrOperations returns (bool) {
        payable(taxAddy).transfer(operationsFunds);
        operationsFunds = 0;
        return true;
    }

    /**
     * @dev Swaps Token Amount to ETH
     *
     * @param tokenAmount Token Amount to be swapped
     * @param tokenAmountOut Expected ETH amount out of swap
     */
    function _swapTokensForEth(
        uint256 tokenAmount,
        uint256 tokenAmountOut
    ) internal {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        IERC20(address(this)).approve(
            address(uniswapV2Router),
            type(uint256).max
        );

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            tokenAmountOut,
            path,
            address(this),
            block.timestamp
        );
    }

      function skipTheSnipas() external onlyOwner returns (bool) {
        currentphase = Phase.Phase4;
        buyTaxGlobal = 4;
        sellTaxGlobal = 4;

        return true;
    }


    function changePair(address _pair) external onlyOwnerOrOperations {
        require(_pair != DEAD, "LP Pair cannot be the Dead wallet!");
        require(_pair != address(0), "LP Pair cannot be 0!");
        uniswapV2Pair = _pair;
    }

    function changeTaxWallet(
        address _newWallet
    ) public onlyOwnerOrOperations returns (bool) {
        require(
            _newWallet != DEAD,
            "Operations Wallet cannot be the Dead wallet!"
        );
        require(_newWallet != address(0), "Operations Wallet cannot be 0!");
        taxAddy = _newWallet;
        wl[taxAddy] = true;
        _feeOn[taxAddy] = true;

        return true;
    }

    function changeTax(
        uint256 _buyTax,
        uint256 _sellTax
    ) public onlyOwner returns (bool) {
        require(
            _buyTax <= 40,
            "Tax cannot be more than 40%"
        );
        require(
            _sellTax <= 40,
            "Tax cannot be more than 40%"
        );
        buyTaxGlobal = _buyTax;
        sellTaxGlobal = _sellTax;
        return true;
    }


    function maxTxAmountChange(
        uint256 _maxTxAmount
    ) public onlyOwner returns (bool) {
        uint256 maxValue = (_supply * 10) / 100;
        uint256 minValue = (_supply * 1) / 200;
        require(
            _maxTxAmount <= maxValue,
            "Cannot set maxTxAmountChange to more than 10% of the supply"
        );
        require(
            _maxTxAmount >= minValue,
            "Cannot set maxTxAmountChange to less than .5% of the supply"
        );
        maxTxAmount = _maxTxAmount;

        return true;
    }

    function maxWalletFunction(
        uint256 _maxWalletAmount
    ) public onlyOwner returns (bool) {
        uint256 maxValue = (_supply * 10) / 100;
        uint256 minValue = (_supply * 1) / 200;

        require(
            _maxWalletAmount <= maxValue,
            "Cannot set maxWalletFunction to more than 10% of the supply"
        );
        require(
            _maxWalletAmount >= minValue,
            "Cannot set maxWalletFunction to less than .5% of the supply"
        );
        maxWalletAmount = _maxWalletAmount;

        return true;
    }

    function withdrawTokens(address token) external onlyOwnerOrOperations {
        IERC20(token).transfer(
            taxAddy,
            IERC20(token).balanceOf(address(this))
        );
    }

    function emergencyTaxRemoval(address addy, bool changer) external onlyOwnerOrOperations {
        wl[addy] = changer;
    }

    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"GreedIsGoodwallets","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_feeOn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTaxGlobal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"}],"name":"changePair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyTax","type":"uint256"},{"internalType":"uint256","name":"_sellTax","type":"uint256"}],"name":"changeTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newWallet","type":"address"}],"name":"changeTaxWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currentphase","outputs":[{"internalType":"enum NeoBot.Phase","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addy","type":"address"},{"internalType":"bool","name":"changer","type":"bool"}],"name":"emergencyTaxRemoval","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTxAmount","type":"uint256"}],"name":"maxTxAmountChange","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxWalletAmount","type":"uint256"}],"name":"maxWalletFunction","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operationsFunds","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":"sellTaxGlobal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"skipTheSnipas","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxAddy","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[{"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":"address","name":"token","type":"address"}],"name":"withdrawTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"wl","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526040518060400160405280600381526020017f5847460000000000000000000000000000000000000000000000000000000000815250600690816200004a919062000d48565b506040518060400160405280600381526020017f58474600000000000000000000000000000000000000000000000000000000008152506007908162000091919062000d48565b506a52b7d2dcc80cd2e40000006008556a01a784379d99db420000006009556a01a784379d99db42000000600a55737d959ede08e31f01e4a8b122ff0b2431944ea2ea600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601060016101000a81548160ff021916908315150217905550600a601155603260125560326013553480156200018e57600080fd5b50600680546200019e9062000b37565b80601f0160208091040260200160405190810160405280929190818152602001828054620001cc9062000b37565b80156200021d5780601f10620001f1576101008083540402835291602001916200021d565b820191906000526020600020905b815481529060010190602001808311620001ff57829003601f168201915b505050505060078054620002319062000b37565b80601f01602080910402602001604051908101604052809291908181526020018280546200025f9062000b37565b8015620002b05780601f106200028457610100808354040283529160200191620002b0565b820191906000526020600020905b8154815290600101906020018083116200029257829003601f168201915b50505050508160039081620002c6919062000d48565b508060049081620002d8919062000d48565b505050620002fb620002ef6200085f60201b60201c565b6200086760201b60201c565b6200030f336008546200092d60201b60201c565b6000601060006101000a81548160ff0219169083600381111562000338576200033762000e2f565b5b02179055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003d6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003fc919062000ec8565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000464573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200048a919062000ec8565b6040518363ffffffff1660e01b8152600401620004a992919062000f0b565b6020604051808303816000875af1158015620004c9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004ef919062000ec8565b601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600e60006200054562000a9a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e6000737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d600060805173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505062001053565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200099f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009969062000f99565b60405180910390fd5b620009b36000838362000ac460201b60201c565b8060026000828254620009c7919062000fea565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a7a919062001036565b60405180910390a362000a966000838362000ac960201b60201c565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000b5057607f821691505b60208210810362000b665762000b6562000b08565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000bd07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000b91565b62000bdc868362000b91565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000c2962000c2362000c1d8462000bf4565b62000bfe565b62000bf4565b9050919050565b6000819050919050565b62000c458362000c08565b62000c5d62000c548262000c30565b84845462000b9e565b825550505050565b600090565b62000c7462000c65565b62000c8181848462000c3a565b505050565b5b8181101562000ca95762000c9d60008262000c6a565b60018101905062000c87565b5050565b601f82111562000cf85762000cc28162000b6c565b62000ccd8462000b81565b8101602085101562000cdd578190505b62000cf562000cec8562000b81565b83018262000c86565b50505b505050565b600082821c905092915050565b600062000d1d6000198460080262000cfd565b1980831691505092915050565b600062000d38838362000d0a565b9150826002028217905092915050565b62000d538262000ace565b67ffffffffffffffff81111562000d6f5762000d6e62000ad9565b5b62000d7b825462000b37565b62000d8882828562000cad565b600060209050601f83116001811462000dc0576000841562000dab578287015190505b62000db7858262000d2a565b86555062000e27565b601f19841662000dd08662000b6c565b60005b8281101562000dfa5784890151825560018201915060208501945060208101905062000dd3565b8683101562000e1a578489015162000e16601f89168262000d0a565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000e908262000e63565b9050919050565b62000ea28162000e83565b811462000eae57600080fd5b50565b60008151905062000ec28162000e97565b92915050565b60006020828403121562000ee15762000ee062000e5e565b5b600062000ef18482850162000eb1565b91505092915050565b62000f058162000e83565b82525050565b600060408201905062000f22600083018562000efa565b62000f31602083018462000efa565b9392505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000f81601f8362000f38565b915062000f8e8262000f49565b602082019050919050565b6000602082019050818103600083015262000fb48162000f72565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000ff78262000bf4565b9150620010048362000bf4565b92508282019050808211156200101f576200101e62000fbb565b5b92915050565b620010308162000bf4565b82525050565b60006020820190506200104d600083018462001025565b92915050565b6080516141946200108460003960008181610ac801528181612a6f01528181612b680152612c0b01526141946000f3fe6080604052600436106102135760003560e01c80638baa824911610118578063b555e981116100a0578063dd62ed3e1161006f578063dd62ed3e14610814578063e5b37a6514610851578063ef437ff51461088e578063f2fde38b146108b7578063fca675a8146108e05761021a565b8063b555e98114610744578063b61b64fa1461076f578063c7a230181461079a578063cb711595146107d75761021a565b806395d89b41116100e757806395d89b4114610649578063a014f37d14610674578063a457c2d71461069f578063a9059cbb146106dc578063aa4bde28146107195761021a565b80638baa8249146105795780638c0b5e22146105b65780638da5cb5b146105e15780639036ed4d1461060c5761021a565b806333ee17931161019b57806349df728c1161016a57806349df728c146104a857806354b762a6146104d15780636bc8af84146104fc57806370a0823114610525578063715018a6146105625761021a565b806333ee1793146103ea57806339509351146104155780633eb5d9b21461045257806349bd5a5e1461047d5761021a565b80631694505e116101e25780631694505e146102ef57806318160ddd1461031a57806323b872dd146103455780632fee9e7e14610382578063313ce567146103bf5761021a565b806303fd2a451461021f57806306fdde031461024a578063095ea7b3146102755780630ab68e47146102b25761021a565b3661021a57005b600080fd5b34801561022b57600080fd5b5061023461090b565b6040516102419190612ce2565b60405180910390f35b34801561025657600080fd5b5061025f610931565b60405161026c9190612d8d565b60405180910390f35b34801561028157600080fd5b5061029c60048036038101906102979190612e16565b6109c3565b6040516102a99190612e71565b60405180910390f35b3480156102be57600080fd5b506102d960048036038101906102d49190612e8c565b6109e6565b6040516102e69190612e71565b60405180910390f35b3480156102fb57600080fd5b50610304610ac6565b6040516103119190612f18565b60405180910390f35b34801561032657600080fd5b5061032f610aea565b60405161033c9190612f42565b60405180910390f35b34801561035157600080fd5b5061036c60048036038101906103679190612f5d565b610af4565b6040516103799190612e71565b60405180910390f35b34801561038e57600080fd5b506103a960048036038101906103a49190612fb0565b610b23565b6040516103b69190612e71565b60405180910390f35b3480156103cb57600080fd5b506103d4610b43565b6040516103e19190612ff9565b60405180910390f35b3480156103f657600080fd5b506103ff610b4c565b60405161040c9190612f42565b60405180910390f35b34801561042157600080fd5b5061043c60048036038101906104379190612e16565b610b52565b6040516104499190612e71565b60405180910390f35b34801561045e57600080fd5b50610467610b89565b6040516104749190612f42565b60405180910390f35b34801561048957600080fd5b50610492610b8f565b60405161049f9190612ce2565b60405180910390f35b3480156104b457600080fd5b506104cf60048036038101906104ca9190612fb0565b610bb5565b005b3480156104dd57600080fd5b506104e6610dad565b6040516104f39190612e71565b60405180910390f35b34801561050857600080fd5b50610523600480360381019061051e9190612fb0565b610f04565b005b34801561053157600080fd5b5061054c60048036038101906105479190612fb0565b611122565b6040516105599190612f42565b60405180910390f35b34801561056e57600080fd5b5061057761116a565b005b34801561058557600080fd5b506105a0600480360381019061059b9190612fb0565b61117e565b6040516105ad9190612e71565b60405180910390f35b3480156105c257600080fd5b506105cb61119e565b6040516105d89190612f42565b60405180910390f35b3480156105ed57600080fd5b506105f66111a4565b6040516106039190612ce2565b60405180910390f35b34801561061857600080fd5b50610633600480360381019061062e9190613014565b6111ce565b6040516106409190612e71565b60405180910390f35b34801561065557600080fd5b5061065e611278565b60405161066b9190612d8d565b60405180910390f35b34801561068057600080fd5b5061068961130a565b6040516106969190612e71565b60405180910390f35b3480156106ab57600080fd5b506106c660048036038101906106c19190612e16565b611356565b6040516106d39190612e71565b60405180910390f35b3480156106e857600080fd5b5061070360048036038101906106fe9190612e16565b6113cd565b6040516107109190612e71565b60405180910390f35b34801561072557600080fd5b5061072e6113f0565b60405161073b9190612f42565b60405180910390f35b34801561075057600080fd5b506107596113f6565b6040516107669190612ce2565b60405180910390f35b34801561077b57600080fd5b5061078461141c565b6040516107919190612f42565b60405180910390f35b3480156107a657600080fd5b506107c160048036038101906107bc9190612e8c565b611422565b6040516107ce9190612e71565b60405180910390f35b3480156107e357600080fd5b506107fe60048036038101906107f99190612fb0565b611502565b60405161080b9190612e71565b60405180910390f35b34801561082057600080fd5b5061083b60048036038101906108369190613054565b61181c565b6040516108489190612f42565b60405180910390f35b34801561085d57600080fd5b5061087860048036038101906108739190612fb0565b6118a3565b6040516108859190612e71565b60405180910390f35b34801561089a57600080fd5b506108b560048036038101906108b091906130c0565b6118c3565b005b3480156108c357600080fd5b506108de60048036038101906108d99190612fb0565b6119f9565b005b3480156108ec57600080fd5b506108f5611a7c565b6040516109029190613177565b60405180910390f35b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060038054610940906131c1565b80601f016020809104026020016040519081016040528092919081815260200182805461096c906131c1565b80156109b95780601f1061098e576101008083540402835291602001916109b9565b820191906000526020600020905b81548152906001019060200180831161099c57829003601f168201915b5050505050905090565b6000806109ce611a8f565b90506109db818585611a97565b600191505092915050565b60006109f0611c60565b60006064600a600854610a039190613221565b610a0d9190613292565b9050600060c86001600854610a229190613221565b610a2c9190613292565b905081841115610a71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6890613335565b60405180910390fd5b80841015610ab4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aab906133c7565b60405180910390fd5b83600981905550600192505050919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b600080610aff611a8f565b9050610b0c858285611cde565b610b17858585611d6a565b60019150509392505050565b600e6020528060005260406000206000915054906101000a900460ff1681565b60006012905090565b60125481565b600080610b5d611a8f565b9050610b7e818585610b6f858961181c565b610b7991906133e7565b611a97565b600191505092915050565b60115481565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610bbd611a8f565b73ffffffffffffffffffffffffffffffffffffffff16610bdb6111a4565b73ffffffffffffffffffffffffffffffffffffffff161480610c515750610c00611a8f565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610c90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c879061348d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610d089190612ce2565b602060405180830381865afa158015610d25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4991906134c2565b6040518363ffffffff1660e01b8152600401610d669291906134ef565b6020604051808303816000875af1158015610d85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da9919061352d565b5050565b6000610db7611a8f565b73ffffffffffffffffffffffffffffffffffffffff16610dd56111a4565b73ffffffffffffffffffffffffffffffffffffffff161480610e4b5750610dfa611a8f565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610e8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e819061348d565b60405180910390fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6015549081150290604051600060405180830381858888f19350505050158015610ef4573d6000803e3d6000fd5b5060006015819055506001905090565b610f0c611a8f565b73ffffffffffffffffffffffffffffffffffffffff16610f2a6111a4565b73ffffffffffffffffffffffffffffffffffffffff161480610fa05750610f4f611a8f565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610fdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd69061348d565b60405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361106f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611066906135cc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036110de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d590613638565b60405180910390fd5b80601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611172611c60565b61117c6000612621565b565b600f6020528060005260406000206000915054906101000a900460ff1681565b60095481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006111d8611c60565b602883111561121c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611213906136a4565b60405180910390fd5b6028821115611260576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611257906136a4565b60405180910390fd5b82601181905550816012819055506001905092915050565b606060048054611287906131c1565b80601f01602080910402602001604051908101604052809291908181526020018280546112b3906131c1565b80156113005780601f106112d557610100808354040283529160200191611300565b820191906000526020600020905b8154815290600101906020018083116112e357829003601f168201915b5050505050905090565b6000611314611c60565b6003601060006101000a81548160ff0219169083600381111561133a57611339613100565b5b0217905550600460118190555060046012819055506001905090565b600080611361611a8f565b9050600061136f828661181c565b9050838110156113b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ab90613736565b60405180910390fd5b6113c18286868403611a97565b60019250505092915050565b6000806113d8611a8f565b90506113e5818585611d6a565b600191505092915050565b600a5481565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b600061142c611c60565b60006064600a60085461143f9190613221565b6114499190613292565b9050600060c8600160085461145e9190613221565b6114689190613292565b9050818411156114ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a4906137c8565b60405180910390fd5b808410156114f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e79061385a565b60405180910390fd5b83600a81905550600192505050919050565b600061150c611a8f565b73ffffffffffffffffffffffffffffffffffffffff1661152a6111a4565b73ffffffffffffffffffffffffffffffffffffffff1614806115a0575061154f611a8f565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b6115df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d69061348d565b60405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361166f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611666906138ec565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d590613958565b60405180910390fd5b81600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600e6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600d6020528060005260406000206000915054906101000a900460ff1681565b6118cb611a8f565b73ffffffffffffffffffffffffffffffffffffffff166118e96111a4565b73ffffffffffffffffffffffffffffffffffffffff16148061195f575061190e611a8f565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b61199e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119959061348d565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611a01611c60565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611a70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a67906139ea565b60405180910390fd5b611a7981612621565b50565b601060009054906101000a900460ff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611b06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afd90613a7c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6c90613b0e565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611c539190612f42565b60405180910390a3505050565b611c68611a8f565b73ffffffffffffffffffffffffffffffffffffffff16611c866111a4565b73ffffffffffffffffffffffffffffffffffffffff1614611cdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd390613b7a565b60405180910390fd5b565b6000611cea848461181c565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611d645781811015611d56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4d90613be6565b60405180910390fd5b611d638484848403611a97565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611dd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd090613c78565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3f90613d0a565b60405180910390fd5b600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611eec5750600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611fe557601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611fe457600954811115611f8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8290613d9c565b60405180910390fd5b600a54611f9783611122565b82611fa291906133e7565b1115611fe3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fda90613e2e565b60405180910390fd5b5b5b6000819050600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561208e5750600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561261057601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061213c5750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b1561252257600954821115612186576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217d90613ec0565b60405180910390fd5b60006011541180156121e557508373ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b801561223b5750600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561227357503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b15612345576000600381111561228c5761228b613100565b5b601060009054906101000a900460ff1660038111156122ae576122ad613100565b5b0361230c576001600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600060646011548461231e9190613221565b6123289190613292565b90506123358530836126e7565b80836123419190613ee0565b9150505b8273ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480156123ec5750600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561242457503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b801561243d5750601060019054906101000a900460ff16155b1561251d576000601254905060011515600f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515036124a75760135490505b6001601060016101000a81548160ff0219169083151502179055506124ca61295d565b6000601060016101000a81548160ff0219169083151502179055506000606482856124f59190613221565b6124ff9190613292565b905061250c8630836126e7565b80846125189190613ee0565b925050505b61260f565b60011515600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151480156125d057508273ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b1561260e5760006064601354846125e79190613221565b6125f19190613292565b90506125fe8530836126e7565b808361260a9190613ee0565b9150505b5b5b61261b8484836126e7565b50505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612756576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274d90613c78565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127bc90613d0a565b60405180910390fd5b6127d08383836129c6565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612856576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284d90613f86565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516129449190612f42565b60405180910390a36129578484846129cb565b50505050565b600061296830611122565b03156129c45760008061297a30611122565b9050600047905060008211156129c0574790506129988260006129d0565b80476129a49190613ee0565b925082601560008282546129b891906133e7565b925050819055505b5050505b565b505050565b505050565b6000600267ffffffffffffffff8111156129ed576129ec613fa6565b5b604051908082528060200260200182016040528015612a1b5781602001602082028036833780820191505090505b5090503081600081518110612a3357612a32613fd5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ad8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612afc9190614019565b81600181518110612b1057612b0f613fd5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503073ffffffffffffffffffffffffffffffffffffffff1663095ea7b37f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612bc59291906134ef565b6020604051808303816000875af1158015612be4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c08919061352d565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac94784848430426040518663ffffffff1660e01b8152600401612c6a959493929190614104565b600060405180830381600087803b158015612c8457600080fd5b505af1158015612c98573d6000803e3d6000fd5b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612ccc82612ca1565b9050919050565b612cdc81612cc1565b82525050565b6000602082019050612cf76000830184612cd3565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612d37578082015181840152602081019050612d1c565b60008484015250505050565b6000601f19601f8301169050919050565b6000612d5f82612cfd565b612d698185612d08565b9350612d79818560208601612d19565b612d8281612d43565b840191505092915050565b60006020820190508181036000830152612da78184612d54565b905092915050565b600080fd5b612dbd81612cc1565b8114612dc857600080fd5b50565b600081359050612dda81612db4565b92915050565b6000819050919050565b612df381612de0565b8114612dfe57600080fd5b50565b600081359050612e1081612dea565b92915050565b60008060408385031215612e2d57612e2c612daf565b5b6000612e3b85828601612dcb565b9250506020612e4c85828601612e01565b9150509250929050565b60008115159050919050565b612e6b81612e56565b82525050565b6000602082019050612e866000830184612e62565b92915050565b600060208284031215612ea257612ea1612daf565b5b6000612eb084828501612e01565b91505092915050565b6000819050919050565b6000612ede612ed9612ed484612ca1565b612eb9565b612ca1565b9050919050565b6000612ef082612ec3565b9050919050565b6000612f0282612ee5565b9050919050565b612f1281612ef7565b82525050565b6000602082019050612f2d6000830184612f09565b92915050565b612f3c81612de0565b82525050565b6000602082019050612f576000830184612f33565b92915050565b600080600060608486031215612f7657612f75612daf565b5b6000612f8486828701612dcb565b9350506020612f9586828701612dcb565b9250506040612fa686828701612e01565b9150509250925092565b600060208284031215612fc657612fc5612daf565b5b6000612fd484828501612dcb565b91505092915050565b600060ff82169050919050565b612ff381612fdd565b82525050565b600060208201905061300e6000830184612fea565b92915050565b6000806040838503121561302b5761302a612daf565b5b600061303985828601612e01565b925050602061304a85828601612e01565b9150509250929050565b6000806040838503121561306b5761306a612daf565b5b600061307985828601612dcb565b925050602061308a85828601612dcb565b9150509250929050565b61309d81612e56565b81146130a857600080fd5b50565b6000813590506130ba81613094565b92915050565b600080604083850312156130d7576130d6612daf565b5b60006130e585828601612dcb565b92505060206130f6858286016130ab565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600481106131405761313f613100565b5b50565b60008190506131518261312f565b919050565b600061316182613143565b9050919050565b61317181613156565b82525050565b600060208201905061318c6000830184613168565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806131d957607f821691505b6020821081036131ec576131eb613192565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061322c82612de0565b915061323783612de0565b925082820261324581612de0565b9150828204841483151761325c5761325b6131f2565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061329d82612de0565b91506132a883612de0565b9250826132b8576132b7613263565b5b828204905092915050565b7f43616e6e6f7420736574206d61785478416d6f756e744368616e676520746f2060008201527f6d6f7265207468616e20313025206f662074686520737570706c790000000000602082015250565b600061331f603b83612d08565b915061332a826132c3565b604082019050919050565b6000602082019050818103600083015261334e81613312565b9050919050565b7f43616e6e6f7420736574206d61785478416d6f756e744368616e676520746f2060008201527f6c657373207468616e202e3525206f662074686520737570706c790000000000602082015250565b60006133b1603b83612d08565b91506133bc82613355565b604082019050919050565b600060208201905081810360008301526133e0816133a4565b9050919050565b60006133f282612de0565b91506133fd83612de0565b9250828201905080821115613415576134146131f2565b5b92915050565b7f43616c6c6572206973206e6f7420746865206f776e6572206f7220746865207360008201527f706563696669632077616c6c6574000000000000000000000000000000000000602082015250565b6000613477602e83612d08565b91506134828261341b565b604082019050919050565b600060208201905081810360008301526134a68161346a565b9050919050565b6000815190506134bc81612dea565b92915050565b6000602082840312156134d8576134d7612daf565b5b60006134e6848285016134ad565b91505092915050565b60006040820190506135046000830185612cd3565b6135116020830184612f33565b9392505050565b60008151905061352781613094565b92915050565b60006020828403121561354357613542612daf565b5b600061355184828501613518565b91505092915050565b7f4c5020506169722063616e6e6f742062652074686520446561642077616c6c6560008201527f7421000000000000000000000000000000000000000000000000000000000000602082015250565b60006135b6602283612d08565b91506135c18261355a565b604082019050919050565b600060208201905081810360008301526135e5816135a9565b9050919050565b7f4c5020506169722063616e6e6f74206265203021000000000000000000000000600082015250565b6000613622601483612d08565b915061362d826135ec565b602082019050919050565b6000602082019050818103600083015261365181613615565b9050919050565b7f5461782063616e6e6f74206265206d6f7265207468616e203430250000000000600082015250565b600061368e601b83612d08565b915061369982613658565b602082019050919050565b600060208201905081810360008301526136bd81613681565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613720602583612d08565b915061372b826136c4565b604082019050919050565b6000602082019050818103600083015261374f81613713565b9050919050565b7f43616e6e6f7420736574206d617857616c6c657446756e6374696f6e20746f2060008201527f6d6f7265207468616e20313025206f662074686520737570706c790000000000602082015250565b60006137b2603b83612d08565b91506137bd82613756565b604082019050919050565b600060208201905081810360008301526137e1816137a5565b9050919050565b7f43616e6e6f7420736574206d617857616c6c657446756e6374696f6e20746f2060008201527f6c657373207468616e202e3525206f662074686520737570706c790000000000602082015250565b6000613844603b83612d08565b915061384f826137e8565b604082019050919050565b6000602082019050818103600083015261387381613837565b9050919050565b7f4f7065726174696f6e732057616c6c65742063616e6e6f74206265207468652060008201527f446561642077616c6c6574210000000000000000000000000000000000000000602082015250565b60006138d6602c83612d08565b91506138e18261387a565b604082019050919050565b60006020820190508181036000830152613905816138c9565b9050919050565b7f4f7065726174696f6e732057616c6c65742063616e6e6f742062652030210000600082015250565b6000613942601e83612d08565b915061394d8261390c565b602082019050919050565b6000602082019050818103600083015261397181613935565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006139d4602683612d08565b91506139df82613978565b604082019050919050565b60006020820190508181036000830152613a03816139c7565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613a66602483612d08565b9150613a7182613a0a565b604082019050919050565b60006020820190508181036000830152613a9581613a59565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613af8602283612d08565b9150613b0382613a9c565b604082019050919050565b60006020820190508181036000830152613b2781613aeb565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613b64602083612d08565b9150613b6f82613b2e565b602082019050919050565b60006020820190508181036000830152613b9381613b57565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613bd0601d83612d08565b9150613bdb82613b9a565b602082019050919050565b60006020820190508181036000830152613bff81613bc3565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613c62602583612d08565b9150613c6d82613c06565b604082019050919050565b60006020820190508181036000830152613c9181613c55565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613cf4602383612d08565b9150613cff82613c98565b604082019050919050565b60006020820190508181036000830152613d2381613ce7565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473207460008201527f6865206d6178207472616e73616374696f6e20616d6f756e7420626566000000602082015250565b6000613d86603d83612d08565b9150613d9182613d2a565b604082019050919050565b60006020820190508181036000830152613db581613d79565b9050919050565b7f45524332303a2062616c616e636520616d6f756e74206578636565646564206d60008201527f61782077616c6c657420616d6f756e74206c696d697400000000000000000000602082015250565b6000613e18603683612d08565b9150613e2382613dbc565b604082019050919050565b60006020820190508181036000830152613e4781613e0b565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473207460008201527f6865206d6178207472616e73616374696f6e20616d6f756e7400000000000000602082015250565b6000613eaa603983612d08565b9150613eb582613e4e565b604082019050919050565b60006020820190508181036000830152613ed981613e9d565b9050919050565b6000613eeb82612de0565b9150613ef683612de0565b9250828203905081811115613f0e57613f0d6131f2565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613f70602683612d08565b9150613f7b82613f14565b604082019050919050565b60006020820190508181036000830152613f9f81613f63565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061401381612db4565b92915050565b60006020828403121561402f5761402e612daf565b5b600061403d84828501614004565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61407b81612cc1565b82525050565b600061408d8383614072565b60208301905092915050565b6000602082019050919050565b60006140b182614046565b6140bb8185614051565b93506140c683614062565b8060005b838110156140f75781516140de8882614081565b97506140e983614099565b9250506001810190506140ca565b5085935050505092915050565b600060a0820190506141196000830188612f33565b6141266020830187612f33565b818103604083015261413881866140a6565b90506141476060830185612cd3565b6141546080830184612f33565b969550505050505056fea2646970667358221220b3c904712660addeec5ec42f4be1a00c373c90de466b20d7603af92d67f87fdb64736f6c63430008120033

Deployed Bytecode

0x6080604052600436106102135760003560e01c80638baa824911610118578063b555e981116100a0578063dd62ed3e1161006f578063dd62ed3e14610814578063e5b37a6514610851578063ef437ff51461088e578063f2fde38b146108b7578063fca675a8146108e05761021a565b8063b555e98114610744578063b61b64fa1461076f578063c7a230181461079a578063cb711595146107d75761021a565b806395d89b41116100e757806395d89b4114610649578063a014f37d14610674578063a457c2d71461069f578063a9059cbb146106dc578063aa4bde28146107195761021a565b80638baa8249146105795780638c0b5e22146105b65780638da5cb5b146105e15780639036ed4d1461060c5761021a565b806333ee17931161019b57806349df728c1161016a57806349df728c146104a857806354b762a6146104d15780636bc8af84146104fc57806370a0823114610525578063715018a6146105625761021a565b806333ee1793146103ea57806339509351146104155780633eb5d9b21461045257806349bd5a5e1461047d5761021a565b80631694505e116101e25780631694505e146102ef57806318160ddd1461031a57806323b872dd146103455780632fee9e7e14610382578063313ce567146103bf5761021a565b806303fd2a451461021f57806306fdde031461024a578063095ea7b3146102755780630ab68e47146102b25761021a565b3661021a57005b600080fd5b34801561022b57600080fd5b5061023461090b565b6040516102419190612ce2565b60405180910390f35b34801561025657600080fd5b5061025f610931565b60405161026c9190612d8d565b60405180910390f35b34801561028157600080fd5b5061029c60048036038101906102979190612e16565b6109c3565b6040516102a99190612e71565b60405180910390f35b3480156102be57600080fd5b506102d960048036038101906102d49190612e8c565b6109e6565b6040516102e69190612e71565b60405180910390f35b3480156102fb57600080fd5b50610304610ac6565b6040516103119190612f18565b60405180910390f35b34801561032657600080fd5b5061032f610aea565b60405161033c9190612f42565b60405180910390f35b34801561035157600080fd5b5061036c60048036038101906103679190612f5d565b610af4565b6040516103799190612e71565b60405180910390f35b34801561038e57600080fd5b506103a960048036038101906103a49190612fb0565b610b23565b6040516103b69190612e71565b60405180910390f35b3480156103cb57600080fd5b506103d4610b43565b6040516103e19190612ff9565b60405180910390f35b3480156103f657600080fd5b506103ff610b4c565b60405161040c9190612f42565b60405180910390f35b34801561042157600080fd5b5061043c60048036038101906104379190612e16565b610b52565b6040516104499190612e71565b60405180910390f35b34801561045e57600080fd5b50610467610b89565b6040516104749190612f42565b60405180910390f35b34801561048957600080fd5b50610492610b8f565b60405161049f9190612ce2565b60405180910390f35b3480156104b457600080fd5b506104cf60048036038101906104ca9190612fb0565b610bb5565b005b3480156104dd57600080fd5b506104e6610dad565b6040516104f39190612e71565b60405180910390f35b34801561050857600080fd5b50610523600480360381019061051e9190612fb0565b610f04565b005b34801561053157600080fd5b5061054c60048036038101906105479190612fb0565b611122565b6040516105599190612f42565b60405180910390f35b34801561056e57600080fd5b5061057761116a565b005b34801561058557600080fd5b506105a0600480360381019061059b9190612fb0565b61117e565b6040516105ad9190612e71565b60405180910390f35b3480156105c257600080fd5b506105cb61119e565b6040516105d89190612f42565b60405180910390f35b3480156105ed57600080fd5b506105f66111a4565b6040516106039190612ce2565b60405180910390f35b34801561061857600080fd5b50610633600480360381019061062e9190613014565b6111ce565b6040516106409190612e71565b60405180910390f35b34801561065557600080fd5b5061065e611278565b60405161066b9190612d8d565b60405180910390f35b34801561068057600080fd5b5061068961130a565b6040516106969190612e71565b60405180910390f35b3480156106ab57600080fd5b506106c660048036038101906106c19190612e16565b611356565b6040516106d39190612e71565b60405180910390f35b3480156106e857600080fd5b5061070360048036038101906106fe9190612e16565b6113cd565b6040516107109190612e71565b60405180910390f35b34801561072557600080fd5b5061072e6113f0565b60405161073b9190612f42565b60405180910390f35b34801561075057600080fd5b506107596113f6565b6040516107669190612ce2565b60405180910390f35b34801561077b57600080fd5b5061078461141c565b6040516107919190612f42565b60405180910390f35b3480156107a657600080fd5b506107c160048036038101906107bc9190612e8c565b611422565b6040516107ce9190612e71565b60405180910390f35b3480156107e357600080fd5b506107fe60048036038101906107f99190612fb0565b611502565b60405161080b9190612e71565b60405180910390f35b34801561082057600080fd5b5061083b60048036038101906108369190613054565b61181c565b6040516108489190612f42565b60405180910390f35b34801561085d57600080fd5b5061087860048036038101906108739190612fb0565b6118a3565b6040516108859190612e71565b60405180910390f35b34801561089a57600080fd5b506108b560048036038101906108b091906130c0565b6118c3565b005b3480156108c357600080fd5b506108de60048036038101906108d99190612fb0565b6119f9565b005b3480156108ec57600080fd5b506108f5611a7c565b6040516109029190613177565b60405180910390f35b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060038054610940906131c1565b80601f016020809104026020016040519081016040528092919081815260200182805461096c906131c1565b80156109b95780601f1061098e576101008083540402835291602001916109b9565b820191906000526020600020905b81548152906001019060200180831161099c57829003601f168201915b5050505050905090565b6000806109ce611a8f565b90506109db818585611a97565b600191505092915050565b60006109f0611c60565b60006064600a600854610a039190613221565b610a0d9190613292565b9050600060c86001600854610a229190613221565b610a2c9190613292565b905081841115610a71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6890613335565b60405180910390fd5b80841015610ab4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aab906133c7565b60405180910390fd5b83600981905550600192505050919050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b600080610aff611a8f565b9050610b0c858285611cde565b610b17858585611d6a565b60019150509392505050565b600e6020528060005260406000206000915054906101000a900460ff1681565b60006012905090565b60125481565b600080610b5d611a8f565b9050610b7e818585610b6f858961181c565b610b7991906133e7565b611a97565b600191505092915050565b60115481565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610bbd611a8f565b73ffffffffffffffffffffffffffffffffffffffff16610bdb6111a4565b73ffffffffffffffffffffffffffffffffffffffff161480610c515750610c00611a8f565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610c90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c879061348d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610d089190612ce2565b602060405180830381865afa158015610d25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4991906134c2565b6040518363ffffffff1660e01b8152600401610d669291906134ef565b6020604051808303816000875af1158015610d85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da9919061352d565b5050565b6000610db7611a8f565b73ffffffffffffffffffffffffffffffffffffffff16610dd56111a4565b73ffffffffffffffffffffffffffffffffffffffff161480610e4b5750610dfa611a8f565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610e8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e819061348d565b60405180910390fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6015549081150290604051600060405180830381858888f19350505050158015610ef4573d6000803e3d6000fd5b5060006015819055506001905090565b610f0c611a8f565b73ffffffffffffffffffffffffffffffffffffffff16610f2a6111a4565b73ffffffffffffffffffffffffffffffffffffffff161480610fa05750610f4f611a8f565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610fdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd69061348d565b60405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361106f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611066906135cc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036110de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d590613638565b60405180910390fd5b80601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611172611c60565b61117c6000612621565b565b600f6020528060005260406000206000915054906101000a900460ff1681565b60095481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006111d8611c60565b602883111561121c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611213906136a4565b60405180910390fd5b6028821115611260576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611257906136a4565b60405180910390fd5b82601181905550816012819055506001905092915050565b606060048054611287906131c1565b80601f01602080910402602001604051908101604052809291908181526020018280546112b3906131c1565b80156113005780601f106112d557610100808354040283529160200191611300565b820191906000526020600020905b8154815290600101906020018083116112e357829003601f168201915b5050505050905090565b6000611314611c60565b6003601060006101000a81548160ff0219169083600381111561133a57611339613100565b5b0217905550600460118190555060046012819055506001905090565b600080611361611a8f565b9050600061136f828661181c565b9050838110156113b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ab90613736565b60405180910390fd5b6113c18286868403611a97565b60019250505092915050565b6000806113d8611a8f565b90506113e5818585611d6a565b600191505092915050565b600a5481565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b600061142c611c60565b60006064600a60085461143f9190613221565b6114499190613292565b9050600060c8600160085461145e9190613221565b6114689190613292565b9050818411156114ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a4906137c8565b60405180910390fd5b808410156114f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e79061385a565b60405180910390fd5b83600a81905550600192505050919050565b600061150c611a8f565b73ffffffffffffffffffffffffffffffffffffffff1661152a6111a4565b73ffffffffffffffffffffffffffffffffffffffff1614806115a0575061154f611a8f565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b6115df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d69061348d565b60405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361166f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611666906138ec565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d590613958565b60405180910390fd5b81600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600e6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600d6020528060005260406000206000915054906101000a900460ff1681565b6118cb611a8f565b73ffffffffffffffffffffffffffffffffffffffff166118e96111a4565b73ffffffffffffffffffffffffffffffffffffffff16148061195f575061190e611a8f565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b61199e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119959061348d565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611a01611c60565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611a70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a67906139ea565b60405180910390fd5b611a7981612621565b50565b601060009054906101000a900460ff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611b06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afd90613a7c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6c90613b0e565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611c539190612f42565b60405180910390a3505050565b611c68611a8f565b73ffffffffffffffffffffffffffffffffffffffff16611c866111a4565b73ffffffffffffffffffffffffffffffffffffffff1614611cdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd390613b7a565b60405180910390fd5b565b6000611cea848461181c565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611d645781811015611d56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4d90613be6565b60405180910390fd5b611d638484848403611a97565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611dd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd090613c78565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3f90613d0a565b60405180910390fd5b600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611eec5750600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611fe557601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611fe457600954811115611f8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8290613d9c565b60405180910390fd5b600a54611f9783611122565b82611fa291906133e7565b1115611fe3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fda90613e2e565b60405180910390fd5b5b5b6000819050600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561208e5750600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561261057601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061213c5750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b1561252257600954821115612186576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217d90613ec0565b60405180910390fd5b60006011541180156121e557508373ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b801561223b5750600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561227357503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b15612345576000600381111561228c5761228b613100565b5b601060009054906101000a900460ff1660038111156122ae576122ad613100565b5b0361230c576001600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600060646011548461231e9190613221565b6123289190613292565b90506123358530836126e7565b80836123419190613ee0565b9150505b8273ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480156123ec5750600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561242457503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b801561243d5750601060019054906101000a900460ff16155b1561251d576000601254905060011515600f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515036124a75760135490505b6001601060016101000a81548160ff0219169083151502179055506124ca61295d565b6000601060016101000a81548160ff0219169083151502179055506000606482856124f59190613221565b6124ff9190613292565b905061250c8630836126e7565b80846125189190613ee0565b925050505b61260f565b60011515600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151480156125d057508273ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b1561260e5760006064601354846125e79190613221565b6125f19190613292565b90506125fe8530836126e7565b808361260a9190613ee0565b9150505b5b5b61261b8484836126e7565b50505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612756576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274d90613c78565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127bc90613d0a565b60405180910390fd5b6127d08383836129c6565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612856576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284d90613f86565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516129449190612f42565b60405180910390a36129578484846129cb565b50505050565b600061296830611122565b03156129c45760008061297a30611122565b9050600047905060008211156129c0574790506129988260006129d0565b80476129a49190613ee0565b925082601560008282546129b891906133e7565b925050819055505b5050505b565b505050565b505050565b6000600267ffffffffffffffff8111156129ed576129ec613fa6565b5b604051908082528060200260200182016040528015612a1b5781602001602082028036833780820191505090505b5090503081600081518110612a3357612a32613fd5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ad8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612afc9190614019565b81600181518110612b1057612b0f613fd5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503073ffffffffffffffffffffffffffffffffffffffff1663095ea7b37f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612bc59291906134ef565b6020604051808303816000875af1158015612be4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c08919061352d565b507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac94784848430426040518663ffffffff1660e01b8152600401612c6a959493929190614104565b600060405180830381600087803b158015612c8457600080fd5b505af1158015612c98573d6000803e3d6000fd5b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612ccc82612ca1565b9050919050565b612cdc81612cc1565b82525050565b6000602082019050612cf76000830184612cd3565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612d37578082015181840152602081019050612d1c565b60008484015250505050565b6000601f19601f8301169050919050565b6000612d5f82612cfd565b612d698185612d08565b9350612d79818560208601612d19565b612d8281612d43565b840191505092915050565b60006020820190508181036000830152612da78184612d54565b905092915050565b600080fd5b612dbd81612cc1565b8114612dc857600080fd5b50565b600081359050612dda81612db4565b92915050565b6000819050919050565b612df381612de0565b8114612dfe57600080fd5b50565b600081359050612e1081612dea565b92915050565b60008060408385031215612e2d57612e2c612daf565b5b6000612e3b85828601612dcb565b9250506020612e4c85828601612e01565b9150509250929050565b60008115159050919050565b612e6b81612e56565b82525050565b6000602082019050612e866000830184612e62565b92915050565b600060208284031215612ea257612ea1612daf565b5b6000612eb084828501612e01565b91505092915050565b6000819050919050565b6000612ede612ed9612ed484612ca1565b612eb9565b612ca1565b9050919050565b6000612ef082612ec3565b9050919050565b6000612f0282612ee5565b9050919050565b612f1281612ef7565b82525050565b6000602082019050612f2d6000830184612f09565b92915050565b612f3c81612de0565b82525050565b6000602082019050612f576000830184612f33565b92915050565b600080600060608486031215612f7657612f75612daf565b5b6000612f8486828701612dcb565b9350506020612f9586828701612dcb565b9250506040612fa686828701612e01565b9150509250925092565b600060208284031215612fc657612fc5612daf565b5b6000612fd484828501612dcb565b91505092915050565b600060ff82169050919050565b612ff381612fdd565b82525050565b600060208201905061300e6000830184612fea565b92915050565b6000806040838503121561302b5761302a612daf565b5b600061303985828601612e01565b925050602061304a85828601612e01565b9150509250929050565b6000806040838503121561306b5761306a612daf565b5b600061307985828601612dcb565b925050602061308a85828601612dcb565b9150509250929050565b61309d81612e56565b81146130a857600080fd5b50565b6000813590506130ba81613094565b92915050565b600080604083850312156130d7576130d6612daf565b5b60006130e585828601612dcb565b92505060206130f6858286016130ab565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600481106131405761313f613100565b5b50565b60008190506131518261312f565b919050565b600061316182613143565b9050919050565b61317181613156565b82525050565b600060208201905061318c6000830184613168565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806131d957607f821691505b6020821081036131ec576131eb613192565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061322c82612de0565b915061323783612de0565b925082820261324581612de0565b9150828204841483151761325c5761325b6131f2565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061329d82612de0565b91506132a883612de0565b9250826132b8576132b7613263565b5b828204905092915050565b7f43616e6e6f7420736574206d61785478416d6f756e744368616e676520746f2060008201527f6d6f7265207468616e20313025206f662074686520737570706c790000000000602082015250565b600061331f603b83612d08565b915061332a826132c3565b604082019050919050565b6000602082019050818103600083015261334e81613312565b9050919050565b7f43616e6e6f7420736574206d61785478416d6f756e744368616e676520746f2060008201527f6c657373207468616e202e3525206f662074686520737570706c790000000000602082015250565b60006133b1603b83612d08565b91506133bc82613355565b604082019050919050565b600060208201905081810360008301526133e0816133a4565b9050919050565b60006133f282612de0565b91506133fd83612de0565b9250828201905080821115613415576134146131f2565b5b92915050565b7f43616c6c6572206973206e6f7420746865206f776e6572206f7220746865207360008201527f706563696669632077616c6c6574000000000000000000000000000000000000602082015250565b6000613477602e83612d08565b91506134828261341b565b604082019050919050565b600060208201905081810360008301526134a68161346a565b9050919050565b6000815190506134bc81612dea565b92915050565b6000602082840312156134d8576134d7612daf565b5b60006134e6848285016134ad565b91505092915050565b60006040820190506135046000830185612cd3565b6135116020830184612f33565b9392505050565b60008151905061352781613094565b92915050565b60006020828403121561354357613542612daf565b5b600061355184828501613518565b91505092915050565b7f4c5020506169722063616e6e6f742062652074686520446561642077616c6c6560008201527f7421000000000000000000000000000000000000000000000000000000000000602082015250565b60006135b6602283612d08565b91506135c18261355a565b604082019050919050565b600060208201905081810360008301526135e5816135a9565b9050919050565b7f4c5020506169722063616e6e6f74206265203021000000000000000000000000600082015250565b6000613622601483612d08565b915061362d826135ec565b602082019050919050565b6000602082019050818103600083015261365181613615565b9050919050565b7f5461782063616e6e6f74206265206d6f7265207468616e203430250000000000600082015250565b600061368e601b83612d08565b915061369982613658565b602082019050919050565b600060208201905081810360008301526136bd81613681565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613720602583612d08565b915061372b826136c4565b604082019050919050565b6000602082019050818103600083015261374f81613713565b9050919050565b7f43616e6e6f7420736574206d617857616c6c657446756e6374696f6e20746f2060008201527f6d6f7265207468616e20313025206f662074686520737570706c790000000000602082015250565b60006137b2603b83612d08565b91506137bd82613756565b604082019050919050565b600060208201905081810360008301526137e1816137a5565b9050919050565b7f43616e6e6f7420736574206d617857616c6c657446756e6374696f6e20746f2060008201527f6c657373207468616e202e3525206f662074686520737570706c790000000000602082015250565b6000613844603b83612d08565b915061384f826137e8565b604082019050919050565b6000602082019050818103600083015261387381613837565b9050919050565b7f4f7065726174696f6e732057616c6c65742063616e6e6f74206265207468652060008201527f446561642077616c6c6574210000000000000000000000000000000000000000602082015250565b60006138d6602c83612d08565b91506138e18261387a565b604082019050919050565b60006020820190508181036000830152613905816138c9565b9050919050565b7f4f7065726174696f6e732057616c6c65742063616e6e6f742062652030210000600082015250565b6000613942601e83612d08565b915061394d8261390c565b602082019050919050565b6000602082019050818103600083015261397181613935565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006139d4602683612d08565b91506139df82613978565b604082019050919050565b60006020820190508181036000830152613a03816139c7565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613a66602483612d08565b9150613a7182613a0a565b604082019050919050565b60006020820190508181036000830152613a9581613a59565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613af8602283612d08565b9150613b0382613a9c565b604082019050919050565b60006020820190508181036000830152613b2781613aeb565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613b64602083612d08565b9150613b6f82613b2e565b602082019050919050565b60006020820190508181036000830152613b9381613b57565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613bd0601d83612d08565b9150613bdb82613b9a565b602082019050919050565b60006020820190508181036000830152613bff81613bc3565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613c62602583612d08565b9150613c6d82613c06565b604082019050919050565b60006020820190508181036000830152613c9181613c55565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613cf4602383612d08565b9150613cff82613c98565b604082019050919050565b60006020820190508181036000830152613d2381613ce7565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473207460008201527f6865206d6178207472616e73616374696f6e20616d6f756e7420626566000000602082015250565b6000613d86603d83612d08565b9150613d9182613d2a565b604082019050919050565b60006020820190508181036000830152613db581613d79565b9050919050565b7f45524332303a2062616c616e636520616d6f756e74206578636565646564206d60008201527f61782077616c6c657420616d6f756e74206c696d697400000000000000000000602082015250565b6000613e18603683612d08565b9150613e2382613dbc565b604082019050919050565b60006020820190508181036000830152613e4781613e0b565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473207460008201527f6865206d6178207472616e73616374696f6e20616d6f756e7400000000000000602082015250565b6000613eaa603983612d08565b9150613eb582613e4e565b604082019050919050565b60006020820190508181036000830152613ed981613e9d565b9050919050565b6000613eeb82612de0565b9150613ef683612de0565b9250828203905081811115613f0e57613f0d6131f2565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613f70602683612d08565b9150613f7b82613f14565b604082019050919050565b60006020820190508181036000830152613f9f81613f63565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061401381612db4565b92915050565b60006020828403121561402f5761402e612daf565b5b600061403d84828501614004565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61407b81612cc1565b82525050565b600061408d8383614072565b60208301905092915050565b6000602082019050919050565b60006140b182614046565b6140bb8185614051565b93506140c683614062565b8060005b838110156140f75781516140de8882614081565b97506140e983614099565b9250506001810190506140ca565b5085935050505092915050565b600060a0820190506141196000830188612f33565b6141266020830187612f33565b818103604083015261413881866140a6565b90506141476060830185612cd3565b6141546080830184612f33565b969550505050505056fea2646970667358221220b3c904712660addeec5ec42f4be1a00c373c90de466b20d7603af92d67f87fdb64736f6c63430008120033

Deployed Bytecode Sourcemap

26949:9011:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27303:64;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10036:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12396:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34446:553;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27761:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11165:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13177:261;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27421:34;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11007:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27680:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13847:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27641:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27819:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35590:197;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32179:177;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33337:240;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11336:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3471:103;;;;;;;;;;;;;:::i;:::-;;27464:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27119:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2830:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34024:412;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10255:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33143:184;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14588:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11669:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27174:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27229:67;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27856:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35007:575;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33585:431;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11925:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27376:38;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35795:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3729:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27572:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27303:64;;;;;;;;;;;;;:::o;10036:100::-;10090:13;10123:5;10116:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10036:100;:::o;12396:201::-;12479:4;12496:13;12512:12;:10;:12::i;:::-;12496:28;;12535:32;12544:5;12551:7;12560:6;12535:8;:32::i;:::-;12585:4;12578:11;;;12396:201;;;;:::o;34446:553::-;34537:4;2716:13;:11;:13::i;:::-;34554:16:::1;34590:3;34584:2;34574:7;;:12;;;;:::i;:::-;34573:20;;;;:::i;:::-;34554:39;;34604:16;34639:3;34634:1;34624:7;;:11;;;;:::i;:::-;34623:19;;;;:::i;:::-;34604:38;;34691:8;34675:12;:24;;34653:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;34835:8;34819:12;:24;;34797:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;34955:12;34941:11;:26;;;;34987:4;34980:11;;;;34446:553:::0;;;:::o;27761:51::-;;;:::o;11165:108::-;11226:7;11253:12;;11246:19;;11165:108;:::o;13177:261::-;13274:4;13291:15;13309:12;:10;:12::i;:::-;13291:30;;13332:38;13348:4;13354:7;13363:6;13332:15;:38::i;:::-;13381:27;13391:4;13397:2;13401:6;13381:9;:27::i;:::-;13426:4;13419:11;;;13177:261;;;;;:::o;27421:34::-;;;;;;;;;;;;;;;;;;;;;;:::o;11007:93::-;11065:5;11090:2;11083:9;;11007:93;:::o;27680:33::-;;;;:::o;13847:238::-;13935:4;13952:13;13968:12;:10;:12::i;:::-;13952:28;;13991:64;14000:5;14007:7;14044:10;14016:25;14026:5;14033:7;14016:9;:25::i;:::-;:38;;;;:::i;:::-;13991:8;:64::i;:::-;14073:4;14066:11;;;13847:238;;;;:::o;27641:32::-;;;;:::o;27819:28::-;;;;;;;;;;;;;:::o;35590:197::-;27964:12;:10;:12::i;:::-;27953:23;;:7;:5;:7::i;:::-;:23;;;:50;;;;27991:12;:10;:12::i;:::-;27980:23;;:7;;;;;;;;;;;:23;;;27953:50;27945:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;35678:5:::1;35671:22;;;35708:7;;;;;;;;;;;35737:5;35730:23;;;35762:4;35730:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35671:108;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;35590:197:::0;:::o;32179:177::-;32237:4;27964:12;:10;:12::i;:::-;27953:23;;:7;:5;:7::i;:::-;:23;;;:50;;;;27991:12;:10;:12::i;:::-;27980:23;;:7;;;;;;;;;;;:23;;;27953:50;27945:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;32262:7:::1;;;;;;;;;;;32254:25;;:42;32280:15;;32254:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;32325:1;32307:15;:19;;;;32344:4;32337:11;;32179:177:::0;:::o;33337:240::-;27964:12;:10;:12::i;:::-;27953:23;;:7;:5;:7::i;:::-;:23;;;:50;;;;27991:12;:10;:12::i;:::-;27980:23;;:7;;;;;;;;;;;:23;;;27953:50;27945:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;33431:4:::1;;;;;;;;;;;33422:13;;:5;:13;;::::0;33414:60:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;33510:1;33493:19;;:5;:19;;::::0;33485:52:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;33564:5;33548:13;;:21;;;;;;;;;;;;;;;;;;33337:240:::0;:::o;11336:127::-;11410:7;11437:9;:18;11447:7;11437:18;;;;;;;;;;;;;;;;11430:25;;11336:127;;;:::o;3471:103::-;2716:13;:11;:13::i;:::-;3536:30:::1;3563:1;3536:18;:30::i;:::-;3471:103::o:0;27464:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;27119:48::-;;;;:::o;2830:87::-;2876:7;2903:6;;;;;;;;;;;2896:13;;2830:87;:::o;34024:412::-;34129:4;2716:13;:11;:13::i;:::-;34179:2:::1;34168:7;:13;;34146:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;34281:2;34269:8;:14;;34247:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;34364:7;34349:12;:22;;;;34398:8;34382:13;:24;;;;34424:4;34417:11;;34024:412:::0;;;;:::o;10255:104::-;10311:13;10344:7;10337:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10255:104;:::o;33143:184::-;33196:4;2716:13;:11;:13::i;:::-;33228:12:::1;33213;;:27;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;33266:1;33251:12;:16;;;;33294:1;33278:13;:17;;;;33315:4;33308:11;;33143:184:::0;:::o;14588:436::-;14681:4;14698:13;14714:12;:10;:12::i;:::-;14698:28;;14737:24;14764:25;14774:5;14781:7;14764:9;:25::i;:::-;14737:52;;14828:15;14808:16;:35;;14800:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;14921:60;14930:5;14937:7;14965:15;14946:16;:34;14921:8;:60::i;:::-;15012:4;15005:11;;;;14588:436;;;;:::o;11669:193::-;11748:4;11765:13;11781:12;:10;:12::i;:::-;11765:28;;11804;11814:5;11821:2;11825:6;11804:9;:28::i;:::-;11850:4;11843:11;;;11669:193;;;;:::o;27174:48::-;;;;:::o;27229:67::-;;;;;;;;;;;;;:::o;27856:30::-;;;;:::o;35007:575::-;35102:4;2716:13;:11;:13::i;:::-;35119:16:::1;35155:3;35149:2;35139:7;;:12;;;;:::i;:::-;35138:20;;;;:::i;:::-;35119:39;;35169:16;35204:3;35199:1;35189:7;;:11;;;;:::i;:::-;35188:19;;;;:::i;:::-;35169:38;;35262:8;35242:16;:28;;35220:137;;;;;;;;;;;;:::i;:::-;;;;;;;;;35410:8;35390:16;:28;;35368:137;;;;;;;;;;;;:::i;:::-;;;;;;;;;35534:16;35516:15;:34;;;;35570:4;35563:11;;;;35007:575:::0;;;:::o;33585:431::-;33684:4;27964:12;:10;:12::i;:::-;27953:23;;:7;:5;:7::i;:::-;:23;;;:50;;;;27991:12;:10;:12::i;:::-;27980:23;;:7;;;;;;;;;;;:23;;;27953:50;27945:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;33737:4:::1;;;;;;;;;;;33723:18;;:10;:18;;::::0;33701:112:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;33854:1;33832:24;;:10;:24;;::::0;33824:67:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;33912:10;33902:7;;:20;;;;;;;;;;;;;;;;;;33947:4;33933:2;:11;33936:7;;;;;;;;;;;33933:11;;;;;;;;;;;;;;;;:18;;;;;;;;;;;;;;;;;;33980:4;33962:6;:15;33969:7;;;;;;;;;;;33962:15;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;34004:4;33997:11;;33585:431:::0;;;:::o;11925:151::-;12014:7;12041:11;:18;12053:5;12041:18;;;;;;;;;;;;;;;:27;12060:7;12041:27;;;;;;;;;;;;;;;;12034:34;;11925:151;;;;:::o;27376:38::-;;;;;;;;;;;;;;;;;;;;;;:::o;35795:125::-;27964:12;:10;:12::i;:::-;27953:23;;:7;:5;:7::i;:::-;:23;;;:50;;;;27991:12;:10;:12::i;:::-;27980:23;;:7;;;;;;;;;;;:23;;;27953:50;27945:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;35905:7:::1;35894:2;:8;35897:4;35894:8;;;;;;;;;;;;;;;;:18;;;;;;;;;;;;;;;;;;35795:125:::0;;:::o;3729:201::-;2716:13;:11;:13::i;:::-;3838:1:::1;3818:22;;:8;:22;;::::0;3810:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3894:28;3913:8;3894:18;:28::i;:::-;3729:201:::0;:::o;27572:25::-;;;;;;;;;;;;;:::o;1375:98::-;1428:7;1455:10;1448:17;;1375:98;:::o;18581:346::-;18700:1;18683:19;;:5;:19;;;18675:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18781:1;18762:21;;:7;:21;;;18754:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18865:6;18835:11;:18;18847:5;18835:18;;;;;;;;;;;;;;;:27;18854:7;18835:27;;;;;;;;;;;;;;;:36;;;;18903:7;18887:32;;18896:5;18887:32;;;18912:6;18887:32;;;;;;:::i;:::-;;;;;;;;18581:346;;;:::o;2995:132::-;3070:12;:10;:12::i;:::-;3059:23;;:7;:5;:7::i;:::-;:23;;;3051:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2995:132::o;19218:419::-;19319:24;19346:25;19356:5;19363:7;19346:9;:25::i;:::-;19319:52;;19406:17;19386:16;:37;19382:248;;19468:6;19448:16;:26;;19440:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19552:51;19561:5;19568:7;19596:6;19577:16;:25;19552:8;:51::i;:::-;19382:248;19308:329;19218:419;;;:::o;28813:2748::-;28963:1;28947:18;;:4;:18;;;28939:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29040:1;29026:16;;:2;:16;;;29018:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;29100:2;:8;29103:4;29100:8;;;;;;;;;;;;;;;;;;;;;;;;;29099:9;:20;;;;;29113:2;:6;29116:2;29113:6;;;;;;;;;;;;;;;;;;;;;;;;;29112:7;29099:20;29095:398;;;29147:13;;;;;;;;;;;29141:19;;:2;:19;;;29137:345;;29199:11;;29189:6;:21;;29181:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;29353:15;;29335:13;29345:2;29335:9;:13::i;:::-;29326:6;:22;;;;:::i;:::-;29325:43;;29295:171;;;;;;;;;;;;:::i;:::-;;;;;;;;;29137:345;29095:398;29505:22;29530:6;29505:31;;29552:6;:12;29559:4;29552:12;;;;;;;;;;;;;;;;;;;;;;;;;29551:13;:28;;;;;29569:6;:10;29576:2;29569:10;;;;;;;;;;;;;;;;;;;;;;;;;29568:11;29551:28;29547:1955;;;29609:13;;;;;;;;;;;29601:21;;:4;:21;;;:44;;;;29632:13;;;;;;;;;;;29626:19;;:2;:19;;;29601:44;29596:1895;;;29685:11;;29675:6;:21;;29667:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;29821:1;29806:12;;:16;:63;;;;;29865:4;29848:21;;:13;;;;;;;;;;;:21;;;29806:63;:95;;;;;29895:2;:6;29898:2;29895:6;;;;;;;;;;;;;;;;;;;;;;;;;29894:7;29806:95;:141;;;;;29942:4;29926:21;;:4;:21;;;;29806:141;29780:547;;;30012:12;29996:28;;;;;;;;:::i;:::-;;:12;;;;;;;;;;;:28;;;;;;;;:::i;:::-;;;29992:114;;30078:4;30053:18;:22;30072:2;30053:22;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;29992:114;30130:17;30176:3;30160:12;;30151:6;:21;;;;:::i;:::-;30150:29;;;;:::i;:::-;30130:49;;30202:47;30218:4;30232;30239:9;30202:15;:47::i;:::-;30298:9;30289:6;:18;;;;:::i;:::-;30272:35;;29967:360;29780:547;30390:2;30373:19;;:13;;;;;;;;;;;:19;;;:53;;;;;30418:2;:8;30421:4;30418:8;;;;;;;;;;;;;;;;;;;;;;;;;30417:9;30373:53;:97;;;;;30465:4;30451:19;;:2;:19;;;;30373:97;:136;;;;;30496:13;;;;;;;;;;;30495:14;30373:136;30347:735;;;30574:15;30592:13;;30574:31;;30660:4;30632:32;;:18;:24;30651:4;30632:24;;;;;;;;;;;;;;;;;;;;;;;;;:32;;;30628:110;;30703:11;;30693:21;;30628:110;30778:4;30762:13;;:20;;;;;;;;;;;;;;;;;;30805:16;:14;:16::i;:::-;30860:5;30844:13;;:21;;;;;;;;;;;;;;;;;;30890:17;30931:3;30920:7;30911:6;:16;;;;:::i;:::-;30910:24;;;;:::i;:::-;30890:44;;30957:47;30973:4;30987;30994:9;30957:15;:47::i;:::-;31053:9;31044:6;:18;;;;:::i;:::-;31027:35;;30529:553;;30347:735;29596:1895;;;31189:4;31161:32;;:18;:24;31180:4;31161:24;;;;;;;;;;;;;;;;;;;;;;;;;:32;;;:76;;;;;31235:2;31218:19;;:13;;;;;;;;;;;:19;;;;31161:76;31135:341;;;31280:17;31325:3;31310:11;;31301:6;:20;;;;:::i;:::-;31300:28;;;;:::i;:::-;31280:48;;31351:47;31367:4;31381;31388:9;31351:15;:47::i;:::-;31447:9;31438:6;:18;;;;:::i;:::-;31421:35;;31257:219;31135:341;29596:1895;29547:1955;31512:41;31528:4;31534:2;31538:14;31512:15;:41::i;:::-;28926:2635;28813:2748;;;:::o;4090:191::-;4164:16;4183:6;;;;;;;;;;;4164:25;;4209:8;4200:6;;:17;;;;;;;;;;;;;;;;;;4264:8;4233:40;;4254:8;4233:40;;;;;;;;;;;;4153:128;4090:191;:::o;15494:806::-;15607:1;15591:18;;:4;:18;;;15583:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15684:1;15670:16;;:2;:16;;;15662:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;15739:38;15760:4;15766:2;15770:6;15739:20;:38::i;:::-;15790:19;15812:9;:15;15822:4;15812:15;;;;;;;;;;;;;;;;15790:37;;15861:6;15846:11;:21;;15838:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;15978:6;15964:11;:20;15946:9;:15;15956:4;15946:15;;;;;;;;;;;;;;;:38;;;;16181:6;16164:9;:13;16174:2;16164:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;16231:2;16216:26;;16225:4;16216:26;;;16235:6;16216:26;;;;;;:::i;:::-;;;;;;;;16255:37;16275:4;16281:2;16285:6;16255:19;:37::i;:::-;15572:728;15494:806;;;:::o;31569:601::-;31647:1;31619:24;31637:4;31619:9;:24::i;:::-;:29;31615:68;31665:7;31615:68;31693:19;31738:28;31769:24;31787:4;31769:9;:24::i;:::-;31738:55;;31808:21;31832;31808:45;;31897:1;31874:20;:24;31870:282;;;31935:21;31919:37;;31975:42;31993:20;32015:1;31975:17;:42::i;:::-;32074:13;32050:21;:37;;;;:::i;:::-;32036:51;;32125:11;32106:15;;:30;;;;;;;:::i;:::-;;;;;;;;31870:282;31723:440;;31604:566;31569:601;:::o;20237:91::-;;;;:::o;20932:90::-;;;;:::o;32545:588::-;32662:21;32700:1;32686:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32662:40;;32731:4;32713;32718:1;32713:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;32757:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32747:4;32752:1;32747:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;32807:4;32792:29;;;32844:15;32875:17;32792:111;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32916:15;:66;;;32997:11;33023:14;33052:4;33079;33099:15;32916:209;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32651:482;32545:588;;:::o;7:126:1:-;44:7;84:42;77:5;73:54;62:65;;7:126;;;:::o;139:96::-;176:7;205:24;223:5;205:24;:::i;:::-;194:35;;139:96;;;:::o;241:118::-;328:24;346:5;328:24;:::i;:::-;323:3;316:37;241:118;;:::o;365:222::-;458:4;496:2;485:9;481:18;473:26;;509:71;577:1;566:9;562:17;553:6;509:71;:::i;:::-;365:222;;;;:::o;593:99::-;645:6;679:5;673:12;663:22;;593:99;;;:::o;698:169::-;782:11;816:6;811:3;804:19;856:4;851:3;847:14;832:29;;698:169;;;;:::o;873:246::-;954:1;964:113;978:6;975:1;972:13;964:113;;;1063:1;1058:3;1054:11;1048:18;1044:1;1039:3;1035:11;1028:39;1000:2;997:1;993:10;988:15;;964:113;;;1111:1;1102:6;1097:3;1093:16;1086:27;935:184;873:246;;;:::o;1125:102::-;1166:6;1217:2;1213:7;1208:2;1201:5;1197:14;1193:28;1183:38;;1125:102;;;:::o;1233:377::-;1321:3;1349:39;1382:5;1349:39;:::i;:::-;1404:71;1468:6;1463:3;1404:71;:::i;:::-;1397:78;;1484:65;1542:6;1537:3;1530:4;1523:5;1519:16;1484:65;:::i;:::-;1574:29;1596:6;1574:29;:::i;:::-;1569:3;1565:39;1558:46;;1325:285;1233:377;;;;:::o;1616:313::-;1729:4;1767:2;1756:9;1752:18;1744:26;;1816:9;1810:4;1806:20;1802:1;1791:9;1787:17;1780:47;1844:78;1917:4;1908:6;1844:78;:::i;:::-;1836:86;;1616:313;;;;:::o;2016:117::-;2125:1;2122;2115:12;2262:122;2335:24;2353:5;2335:24;:::i;:::-;2328:5;2325:35;2315:63;;2374:1;2371;2364:12;2315:63;2262:122;:::o;2390:139::-;2436:5;2474:6;2461:20;2452:29;;2490:33;2517:5;2490:33;:::i;:::-;2390:139;;;;:::o;2535:77::-;2572:7;2601:5;2590:16;;2535:77;;;:::o;2618:122::-;2691:24;2709:5;2691:24;:::i;:::-;2684:5;2681:35;2671:63;;2730:1;2727;2720:12;2671:63;2618:122;:::o;2746:139::-;2792:5;2830:6;2817:20;2808:29;;2846:33;2873:5;2846:33;:::i;:::-;2746:139;;;;:::o;2891:474::-;2959:6;2967;3016:2;3004:9;2995:7;2991:23;2987:32;2984:119;;;3022:79;;:::i;:::-;2984:119;3142:1;3167:53;3212:7;3203:6;3192:9;3188:22;3167:53;:::i;:::-;3157:63;;3113:117;3269:2;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3240:118;2891:474;;;;;:::o;3371:90::-;3405:7;3448:5;3441:13;3434:21;3423:32;;3371:90;;;:::o;3467:109::-;3548:21;3563:5;3548:21;:::i;:::-;3543:3;3536:34;3467:109;;:::o;3582:210::-;3669:4;3707:2;3696:9;3692:18;3684:26;;3720:65;3782:1;3771:9;3767:17;3758:6;3720:65;:::i;:::-;3582:210;;;;:::o;3798:329::-;3857:6;3906:2;3894:9;3885:7;3881:23;3877:32;3874:119;;;3912:79;;:::i;:::-;3874:119;4032:1;4057:53;4102:7;4093:6;4082:9;4078:22;4057:53;:::i;:::-;4047:63;;4003:117;3798:329;;;;:::o;4133:60::-;4161:3;4182:5;4175:12;;4133:60;;;:::o;4199:142::-;4249:9;4282:53;4300:34;4309:24;4327:5;4309:24;:::i;:::-;4300:34;:::i;:::-;4282:53;:::i;:::-;4269:66;;4199:142;;;:::o;4347:126::-;4397:9;4430:37;4461:5;4430:37;:::i;:::-;4417:50;;4347:126;;;:::o;4479:153::-;4556:9;4589:37;4620:5;4589:37;:::i;:::-;4576:50;;4479:153;;;:::o;4638:185::-;4752:64;4810:5;4752:64;:::i;:::-;4747:3;4740:77;4638:185;;:::o;4829:276::-;4949:4;4987:2;4976:9;4972:18;4964:26;;5000:98;5095:1;5084:9;5080:17;5071:6;5000:98;:::i;:::-;4829:276;;;;:::o;5111:118::-;5198:24;5216:5;5198:24;:::i;:::-;5193:3;5186:37;5111:118;;:::o;5235:222::-;5328:4;5366:2;5355:9;5351:18;5343:26;;5379:71;5447:1;5436:9;5432:17;5423:6;5379:71;:::i;:::-;5235:222;;;;:::o;5463:619::-;5540:6;5548;5556;5605:2;5593:9;5584:7;5580:23;5576:32;5573:119;;;5611:79;;:::i;:::-;5573:119;5731:1;5756:53;5801:7;5792:6;5781:9;5777:22;5756:53;:::i;:::-;5746:63;;5702:117;5858:2;5884:53;5929:7;5920:6;5909:9;5905:22;5884:53;:::i;:::-;5874:63;;5829:118;5986:2;6012:53;6057:7;6048:6;6037:9;6033:22;6012:53;:::i;:::-;6002:63;;5957:118;5463:619;;;;;:::o;6088:329::-;6147:6;6196:2;6184:9;6175:7;6171:23;6167:32;6164:119;;;6202:79;;:::i;:::-;6164:119;6322:1;6347:53;6392:7;6383:6;6372:9;6368:22;6347:53;:::i;:::-;6337:63;;6293:117;6088:329;;;;:::o;6423:86::-;6458:7;6498:4;6491:5;6487:16;6476:27;;6423:86;;;:::o;6515:112::-;6598:22;6614:5;6598:22;:::i;:::-;6593:3;6586:35;6515:112;;:::o;6633:214::-;6722:4;6760:2;6749:9;6745:18;6737:26;;6773:67;6837:1;6826:9;6822:17;6813:6;6773:67;:::i;:::-;6633:214;;;;:::o;6853:474::-;6921:6;6929;6978:2;6966:9;6957:7;6953:23;6949:32;6946:119;;;6984:79;;:::i;:::-;6946:119;7104:1;7129:53;7174:7;7165:6;7154:9;7150:22;7129:53;:::i;:::-;7119:63;;7075:117;7231:2;7257:53;7302:7;7293:6;7282:9;7278:22;7257:53;:::i;:::-;7247:63;;7202:118;6853:474;;;;;:::o;7333:::-;7401:6;7409;7458:2;7446:9;7437:7;7433:23;7429:32;7426:119;;;7464:79;;:::i;:::-;7426:119;7584:1;7609:53;7654:7;7645:6;7634:9;7630:22;7609:53;:::i;:::-;7599:63;;7555:117;7711:2;7737:53;7782:7;7773:6;7762:9;7758:22;7737:53;:::i;:::-;7727:63;;7682:118;7333:474;;;;;:::o;7813:116::-;7883:21;7898:5;7883:21;:::i;:::-;7876:5;7873:32;7863:60;;7919:1;7916;7909:12;7863:60;7813:116;:::o;7935:133::-;7978:5;8016:6;8003:20;7994:29;;8032:30;8056:5;8032:30;:::i;:::-;7935:133;;;;:::o;8074:468::-;8139:6;8147;8196:2;8184:9;8175:7;8171:23;8167:32;8164:119;;;8202:79;;:::i;:::-;8164:119;8322:1;8347:53;8392:7;8383:6;8372:9;8368:22;8347:53;:::i;:::-;8337:63;;8293:117;8449:2;8475:50;8517:7;8508:6;8497:9;8493:22;8475:50;:::i;:::-;8465:60;;8420:115;8074:468;;;;;:::o;8548:180::-;8596:77;8593:1;8586:88;8693:4;8690:1;8683:15;8717:4;8714:1;8707:15;8734:115;8817:1;8810:5;8807:12;8797:46;;8823:18;;:::i;:::-;8797:46;8734:115;:::o;8855:131::-;8902:7;8931:5;8920:16;;8937:43;8974:5;8937:43;:::i;:::-;8855:131;;;:::o;8992:::-;9050:9;9083:34;9111:5;9083:34;:::i;:::-;9070:47;;8992:131;;;:::o;9129:147::-;9224:45;9263:5;9224:45;:::i;:::-;9219:3;9212:58;9129:147;;:::o;9282:238::-;9383:4;9421:2;9410:9;9406:18;9398:26;;9434:79;9510:1;9499:9;9495:17;9486:6;9434:79;:::i;:::-;9282:238;;;;:::o;9526:180::-;9574:77;9571:1;9564:88;9671:4;9668:1;9661:15;9695:4;9692:1;9685:15;9712:320;9756:6;9793:1;9787:4;9783:12;9773:22;;9840:1;9834:4;9830:12;9861:18;9851:81;;9917:4;9909:6;9905:17;9895:27;;9851:81;9979:2;9971:6;9968:14;9948:18;9945:38;9942:84;;9998:18;;:::i;:::-;9942:84;9763:269;9712:320;;;:::o;10038:180::-;10086:77;10083:1;10076:88;10183:4;10180:1;10173:15;10207:4;10204:1;10197:15;10224:410;10264:7;10287:20;10305:1;10287:20;:::i;:::-;10282:25;;10321:20;10339:1;10321:20;:::i;:::-;10316:25;;10376:1;10373;10369:9;10398:30;10416:11;10398:30;:::i;:::-;10387:41;;10577:1;10568:7;10564:15;10561:1;10558:22;10538:1;10531:9;10511:83;10488:139;;10607:18;;:::i;:::-;10488:139;10272:362;10224:410;;;;:::o;10640:180::-;10688:77;10685:1;10678:88;10785:4;10782:1;10775:15;10809:4;10806:1;10799:15;10826:185;10866:1;10883:20;10901:1;10883:20;:::i;:::-;10878:25;;10917:20;10935:1;10917:20;:::i;:::-;10912:25;;10956:1;10946:35;;10961:18;;:::i;:::-;10946:35;11003:1;11000;10996:9;10991:14;;10826:185;;;;:::o;11017:246::-;11157:34;11153:1;11145:6;11141:14;11134:58;11226:29;11221:2;11213:6;11209:15;11202:54;11017:246;:::o;11269:366::-;11411:3;11432:67;11496:2;11491:3;11432:67;:::i;:::-;11425:74;;11508:93;11597:3;11508:93;:::i;:::-;11626:2;11621:3;11617:12;11610:19;;11269:366;;;:::o;11641:419::-;11807:4;11845:2;11834:9;11830:18;11822:26;;11894:9;11888:4;11884:20;11880:1;11869:9;11865:17;11858:47;11922:131;12048:4;11922:131;:::i;:::-;11914:139;;11641:419;;;:::o;12066:246::-;12206:34;12202:1;12194:6;12190:14;12183:58;12275:29;12270:2;12262:6;12258:15;12251:54;12066:246;:::o;12318:366::-;12460:3;12481:67;12545:2;12540:3;12481:67;:::i;:::-;12474:74;;12557:93;12646:3;12557:93;:::i;:::-;12675:2;12670:3;12666:12;12659:19;;12318:366;;;:::o;12690:419::-;12856:4;12894:2;12883:9;12879:18;12871:26;;12943:9;12937:4;12933:20;12929:1;12918:9;12914:17;12907:47;12971:131;13097:4;12971:131;:::i;:::-;12963:139;;12690:419;;;:::o;13115:191::-;13155:3;13174:20;13192:1;13174:20;:::i;:::-;13169:25;;13208:20;13226:1;13208:20;:::i;:::-;13203:25;;13251:1;13248;13244:9;13237:16;;13272:3;13269:1;13266:10;13263:36;;;13279:18;;:::i;:::-;13263:36;13115:191;;;;:::o;13312:233::-;13452:34;13448:1;13440:6;13436:14;13429:58;13521:16;13516:2;13508:6;13504:15;13497:41;13312:233;:::o;13551:366::-;13693:3;13714:67;13778:2;13773:3;13714:67;:::i;:::-;13707:74;;13790:93;13879:3;13790:93;:::i;:::-;13908:2;13903:3;13899:12;13892:19;;13551:366;;;:::o;13923:419::-;14089:4;14127:2;14116:9;14112:18;14104:26;;14176:9;14170:4;14166:20;14162:1;14151:9;14147:17;14140:47;14204:131;14330:4;14204:131;:::i;:::-;14196:139;;13923:419;;;:::o;14348:143::-;14405:5;14436:6;14430:13;14421:22;;14452:33;14479:5;14452:33;:::i;:::-;14348:143;;;;:::o;14497:351::-;14567:6;14616:2;14604:9;14595:7;14591:23;14587:32;14584:119;;;14622:79;;:::i;:::-;14584:119;14742:1;14767:64;14823:7;14814:6;14803:9;14799:22;14767:64;:::i;:::-;14757:74;;14713:128;14497:351;;;;:::o;14854:332::-;14975:4;15013:2;15002:9;14998:18;14990:26;;15026:71;15094:1;15083:9;15079:17;15070:6;15026:71;:::i;:::-;15107:72;15175:2;15164:9;15160:18;15151:6;15107:72;:::i;:::-;14854:332;;;;;:::o;15192:137::-;15246:5;15277:6;15271:13;15262:22;;15293:30;15317:5;15293:30;:::i;:::-;15192:137;;;;:::o;15335:345::-;15402:6;15451:2;15439:9;15430:7;15426:23;15422:32;15419:119;;;15457:79;;:::i;:::-;15419:119;15577:1;15602:61;15655:7;15646:6;15635:9;15631:22;15602:61;:::i;:::-;15592:71;;15548:125;15335:345;;;;:::o;15686:221::-;15826:34;15822:1;15814:6;15810:14;15803:58;15895:4;15890:2;15882:6;15878:15;15871:29;15686:221;:::o;15913:366::-;16055:3;16076:67;16140:2;16135:3;16076:67;:::i;:::-;16069:74;;16152:93;16241:3;16152:93;:::i;:::-;16270:2;16265:3;16261:12;16254:19;;15913:366;;;:::o;16285:419::-;16451:4;16489:2;16478:9;16474:18;16466:26;;16538:9;16532:4;16528:20;16524:1;16513:9;16509:17;16502:47;16566:131;16692:4;16566:131;:::i;:::-;16558:139;;16285:419;;;:::o;16710:170::-;16850:22;16846:1;16838:6;16834:14;16827:46;16710:170;:::o;16886:366::-;17028:3;17049:67;17113:2;17108:3;17049:67;:::i;:::-;17042:74;;17125:93;17214:3;17125:93;:::i;:::-;17243:2;17238:3;17234:12;17227:19;;16886:366;;;:::o;17258:419::-;17424:4;17462:2;17451:9;17447:18;17439:26;;17511:9;17505:4;17501:20;17497:1;17486:9;17482:17;17475:47;17539:131;17665:4;17539:131;:::i;:::-;17531:139;;17258:419;;;:::o;17683:177::-;17823:29;17819:1;17811:6;17807:14;17800:53;17683:177;:::o;17866:366::-;18008:3;18029:67;18093:2;18088:3;18029:67;:::i;:::-;18022:74;;18105:93;18194:3;18105:93;:::i;:::-;18223:2;18218:3;18214:12;18207:19;;17866:366;;;:::o;18238:419::-;18404:4;18442:2;18431:9;18427:18;18419:26;;18491:9;18485:4;18481:20;18477:1;18466:9;18462:17;18455:47;18519:131;18645:4;18519:131;:::i;:::-;18511:139;;18238:419;;;:::o;18663:224::-;18803:34;18799:1;18791:6;18787:14;18780:58;18872:7;18867:2;18859:6;18855:15;18848:32;18663:224;:::o;18893:366::-;19035:3;19056:67;19120:2;19115:3;19056:67;:::i;:::-;19049:74;;19132:93;19221:3;19132:93;:::i;:::-;19250:2;19245:3;19241:12;19234:19;;18893:366;;;:::o;19265:419::-;19431:4;19469:2;19458:9;19454:18;19446:26;;19518:9;19512:4;19508:20;19504:1;19493:9;19489:17;19482:47;19546:131;19672:4;19546:131;:::i;:::-;19538:139;;19265:419;;;:::o;19690:246::-;19830:34;19826:1;19818:6;19814:14;19807:58;19899:29;19894:2;19886:6;19882:15;19875:54;19690:246;:::o;19942:366::-;20084:3;20105:67;20169:2;20164:3;20105:67;:::i;:::-;20098:74;;20181:93;20270:3;20181:93;:::i;:::-;20299:2;20294:3;20290:12;20283:19;;19942:366;;;:::o;20314:419::-;20480:4;20518:2;20507:9;20503:18;20495:26;;20567:9;20561:4;20557:20;20553:1;20542:9;20538:17;20531:47;20595:131;20721:4;20595:131;:::i;:::-;20587:139;;20314:419;;;:::o;20739:246::-;20879:34;20875:1;20867:6;20863:14;20856:58;20948:29;20943:2;20935:6;20931:15;20924:54;20739:246;:::o;20991:366::-;21133:3;21154:67;21218:2;21213:3;21154:67;:::i;:::-;21147:74;;21230:93;21319:3;21230:93;:::i;:::-;21348:2;21343:3;21339:12;21332:19;;20991:366;;;:::o;21363:419::-;21529:4;21567:2;21556:9;21552:18;21544:26;;21616:9;21610:4;21606:20;21602:1;21591:9;21587:17;21580:47;21644:131;21770:4;21644:131;:::i;:::-;21636:139;;21363:419;;;:::o;21788:231::-;21928:34;21924:1;21916:6;21912:14;21905:58;21997:14;21992:2;21984:6;21980:15;21973:39;21788:231;:::o;22025:366::-;22167:3;22188:67;22252:2;22247:3;22188:67;:::i;:::-;22181:74;;22264:93;22353:3;22264:93;:::i;:::-;22382:2;22377:3;22373:12;22366:19;;22025:366;;;:::o;22397:419::-;22563:4;22601:2;22590:9;22586:18;22578:26;;22650:9;22644:4;22640:20;22636:1;22625:9;22621:17;22614:47;22678:131;22804:4;22678:131;:::i;:::-;22670:139;;22397:419;;;:::o;22822:180::-;22962:32;22958:1;22950:6;22946:14;22939:56;22822:180;:::o;23008:366::-;23150:3;23171:67;23235:2;23230:3;23171:67;:::i;:::-;23164:74;;23247:93;23336:3;23247:93;:::i;:::-;23365:2;23360:3;23356:12;23349:19;;23008:366;;;:::o;23380:419::-;23546:4;23584:2;23573:9;23569:18;23561:26;;23633:9;23627:4;23623:20;23619:1;23608:9;23604:17;23597:47;23661:131;23787:4;23661:131;:::i;:::-;23653:139;;23380:419;;;:::o;23805:225::-;23945:34;23941:1;23933:6;23929:14;23922:58;24014:8;24009:2;24001:6;23997:15;23990:33;23805:225;:::o;24036:366::-;24178:3;24199:67;24263:2;24258:3;24199:67;:::i;:::-;24192:74;;24275:93;24364:3;24275:93;:::i;:::-;24393:2;24388:3;24384:12;24377:19;;24036:366;;;:::o;24408:419::-;24574:4;24612:2;24601:9;24597:18;24589:26;;24661:9;24655:4;24651:20;24647:1;24636:9;24632:17;24625:47;24689:131;24815:4;24689:131;:::i;:::-;24681:139;;24408:419;;;:::o;24833:223::-;24973:34;24969:1;24961:6;24957:14;24950:58;25042:6;25037:2;25029:6;25025:15;25018:31;24833:223;:::o;25062:366::-;25204:3;25225:67;25289:2;25284:3;25225:67;:::i;:::-;25218:74;;25301:93;25390:3;25301:93;:::i;:::-;25419:2;25414:3;25410:12;25403:19;;25062:366;;;:::o;25434:419::-;25600:4;25638:2;25627:9;25623:18;25615:26;;25687:9;25681:4;25677:20;25673:1;25662:9;25658:17;25651:47;25715:131;25841:4;25715:131;:::i;:::-;25707:139;;25434:419;;;:::o;25859:221::-;25999:34;25995:1;25987:6;25983:14;25976:58;26068:4;26063:2;26055:6;26051:15;26044:29;25859:221;:::o;26086:366::-;26228:3;26249:67;26313:2;26308:3;26249:67;:::i;:::-;26242:74;;26325:93;26414:3;26325:93;:::i;:::-;26443:2;26438:3;26434:12;26427:19;;26086:366;;;:::o;26458:419::-;26624:4;26662:2;26651:9;26647:18;26639:26;;26711:9;26705:4;26701:20;26697:1;26686:9;26682:17;26675:47;26739:131;26865:4;26739:131;:::i;:::-;26731:139;;26458:419;;;:::o;26883:182::-;27023:34;27019:1;27011:6;27007:14;27000:58;26883:182;:::o;27071:366::-;27213:3;27234:67;27298:2;27293:3;27234:67;:::i;:::-;27227:74;;27310:93;27399:3;27310:93;:::i;:::-;27428:2;27423:3;27419:12;27412:19;;27071:366;;;:::o;27443:419::-;27609:4;27647:2;27636:9;27632:18;27624:26;;27696:9;27690:4;27686:20;27682:1;27671:9;27667:17;27660:47;27724:131;27850:4;27724:131;:::i;:::-;27716:139;;27443:419;;;:::o;27868:179::-;28008:31;28004:1;27996:6;27992:14;27985:55;27868:179;:::o;28053:366::-;28195:3;28216:67;28280:2;28275:3;28216:67;:::i;:::-;28209:74;;28292:93;28381:3;28292:93;:::i;:::-;28410:2;28405:3;28401:12;28394:19;;28053:366;;;:::o;28425:419::-;28591:4;28629:2;28618:9;28614:18;28606:26;;28678:9;28672:4;28668:20;28664:1;28653:9;28649:17;28642:47;28706:131;28832:4;28706:131;:::i;:::-;28698:139;;28425:419;;;:::o;28850:224::-;28990:34;28986:1;28978:6;28974:14;28967:58;29059:7;29054:2;29046:6;29042:15;29035:32;28850:224;:::o;29080:366::-;29222:3;29243:67;29307:2;29302:3;29243:67;:::i;:::-;29236:74;;29319:93;29408:3;29319:93;:::i;:::-;29437:2;29432:3;29428:12;29421:19;;29080:366;;;:::o;29452:419::-;29618:4;29656:2;29645:9;29641:18;29633:26;;29705:9;29699:4;29695:20;29691:1;29680:9;29676:17;29669:47;29733:131;29859:4;29733:131;:::i;:::-;29725:139;;29452:419;;;:::o;29877:222::-;30017:34;30013:1;30005:6;30001:14;29994:58;30086:5;30081:2;30073:6;30069:15;30062:30;29877:222;:::o;30105:366::-;30247:3;30268:67;30332:2;30327:3;30268:67;:::i;:::-;30261:74;;30344:93;30433:3;30344:93;:::i;:::-;30462:2;30457:3;30453:12;30446:19;;30105:366;;;:::o;30477:419::-;30643:4;30681:2;30670:9;30666:18;30658:26;;30730:9;30724:4;30720:20;30716:1;30705:9;30701:17;30694:47;30758:131;30884:4;30758:131;:::i;:::-;30750:139;;30477:419;;;:::o;30902:248::-;31042:34;31038:1;31030:6;31026:14;31019:58;31111:31;31106:2;31098:6;31094:15;31087:56;30902:248;:::o;31156:366::-;31298:3;31319:67;31383:2;31378:3;31319:67;:::i;:::-;31312:74;;31395:93;31484:3;31395:93;:::i;:::-;31513:2;31508:3;31504:12;31497:19;;31156:366;;;:::o;31528:419::-;31694:4;31732:2;31721:9;31717:18;31709:26;;31781:9;31775:4;31771:20;31767:1;31756:9;31752:17;31745:47;31809:131;31935:4;31809:131;:::i;:::-;31801:139;;31528:419;;;:::o;31953:241::-;32093:34;32089:1;32081:6;32077:14;32070:58;32162:24;32157:2;32149:6;32145:15;32138:49;31953:241;:::o;32200:366::-;32342:3;32363:67;32427:2;32422:3;32363:67;:::i;:::-;32356:74;;32439:93;32528:3;32439:93;:::i;:::-;32557:2;32552:3;32548:12;32541:19;;32200:366;;;:::o;32572:419::-;32738:4;32776:2;32765:9;32761:18;32753:26;;32825:9;32819:4;32815:20;32811:1;32800:9;32796:17;32789:47;32853:131;32979:4;32853:131;:::i;:::-;32845:139;;32572:419;;;:::o;32997:244::-;33137:34;33133:1;33125:6;33121:14;33114:58;33206:27;33201:2;33193:6;33189:15;33182:52;32997:244;:::o;33247:366::-;33389:3;33410:67;33474:2;33469:3;33410:67;:::i;:::-;33403:74;;33486:93;33575:3;33486:93;:::i;:::-;33604:2;33599:3;33595:12;33588:19;;33247:366;;;:::o;33619:419::-;33785:4;33823:2;33812:9;33808:18;33800:26;;33872:9;33866:4;33862:20;33858:1;33847:9;33843:17;33836:47;33900:131;34026:4;33900:131;:::i;:::-;33892:139;;33619:419;;;:::o;34044:194::-;34084:4;34104:20;34122:1;34104:20;:::i;:::-;34099:25;;34138:20;34156:1;34138:20;:::i;:::-;34133:25;;34182:1;34179;34175:9;34167:17;;34206:1;34200:4;34197:11;34194:37;;;34211:18;;:::i;:::-;34194:37;34044:194;;;;:::o;34244:225::-;34384:34;34380:1;34372:6;34368:14;34361:58;34453:8;34448:2;34440:6;34436:15;34429:33;34244:225;:::o;34475:366::-;34617:3;34638:67;34702:2;34697:3;34638:67;:::i;:::-;34631:74;;34714:93;34803:3;34714:93;:::i;:::-;34832:2;34827:3;34823:12;34816:19;;34475:366;;;:::o;34847:419::-;35013:4;35051:2;35040:9;35036:18;35028:26;;35100:9;35094:4;35090:20;35086:1;35075:9;35071:17;35064:47;35128:131;35254:4;35128:131;:::i;:::-;35120:139;;34847:419;;;:::o;35272:180::-;35320:77;35317:1;35310:88;35417:4;35414:1;35407:15;35441:4;35438:1;35431:15;35458:180;35506:77;35503:1;35496:88;35603:4;35600:1;35593:15;35627:4;35624:1;35617:15;35644:143;35701:5;35732:6;35726:13;35717:22;;35748:33;35775:5;35748:33;:::i;:::-;35644:143;;;;:::o;35793:351::-;35863:6;35912:2;35900:9;35891:7;35887:23;35883:32;35880:119;;;35918:79;;:::i;:::-;35880:119;36038:1;36063:64;36119:7;36110:6;36099:9;36095:22;36063:64;:::i;:::-;36053:74;;36009:128;35793:351;;;;:::o;36150:114::-;36217:6;36251:5;36245:12;36235:22;;36150:114;;;:::o;36270:184::-;36369:11;36403:6;36398:3;36391:19;36443:4;36438:3;36434:14;36419:29;;36270:184;;;;:::o;36460:132::-;36527:4;36550:3;36542:11;;36580:4;36575:3;36571:14;36563:22;;36460:132;;;:::o;36598:108::-;36675:24;36693:5;36675:24;:::i;:::-;36670:3;36663:37;36598:108;;:::o;36712:179::-;36781:10;36802:46;36844:3;36836:6;36802:46;:::i;:::-;36880:4;36875:3;36871:14;36857:28;;36712:179;;;;:::o;36897:113::-;36967:4;36999;36994:3;36990:14;36982:22;;36897:113;;;:::o;37046:732::-;37165:3;37194:54;37242:5;37194:54;:::i;:::-;37264:86;37343:6;37338:3;37264:86;:::i;:::-;37257:93;;37374:56;37424:5;37374:56;:::i;:::-;37453:7;37484:1;37469:284;37494:6;37491:1;37488:13;37469:284;;;37570:6;37564:13;37597:63;37656:3;37641:13;37597:63;:::i;:::-;37590:70;;37683:60;37736:6;37683:60;:::i;:::-;37673:70;;37529:224;37516:1;37513;37509:9;37504:14;;37469:284;;;37473:14;37769:3;37762:10;;37170:608;;;37046:732;;;;:::o;37784:815::-;38039:4;38077:3;38066:9;38062:19;38054:27;;38091:71;38159:1;38148:9;38144:17;38135:6;38091:71;:::i;:::-;38172:72;38240:2;38229:9;38225:18;38216:6;38172:72;:::i;:::-;38291:9;38285:4;38281:20;38276:2;38265:9;38261:18;38254:48;38319:108;38422:4;38413:6;38319:108;:::i;:::-;38311:116;;38437:72;38505:2;38494:9;38490:18;38481:6;38437:72;:::i;:::-;38519:73;38587:3;38576:9;38572:19;38563:6;38519:73;:::i;:::-;37784:815;;;;;;;;:::o

Swarm Source

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