ETH Price: $3,443.40 (+1.53%)
Gas: 4 Gwei

Token

Betted (BETS)
 

Overview

Max Total Supply

1,000,000,000 BETS

Holders

297

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
140,572.492230467188270949 BETS

Value
$0.00
0xcd080df823f1a9b5513cff7df93da55e49d4d3e2
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Betted token contract has migrated to 0xDA396B2eA32996F471e4434f2d7B8c3ABC352C62.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Betted

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-11-14
*/

// Sources flattened with hardhat v2.12.7 https://hardhat.org

// 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.7.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 anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

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

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


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

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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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


// 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.8.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].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

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

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

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

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

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

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

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

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, 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 @uniswap/v2-core/contracts/interfaces/[email protected]

pragma solidity >=0.5.0;

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

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

    function initialize(address, address) external;
}


// File contracts/TaxableToken.sol

pragma solidity ^0.8.9;
abstract contract TaxableToken is Ownable {

	event TaxEnabled();
	event TaxDisabled();
    event TaxRateUpdated(uint newMarketingTaxRate, uint newDevTaxRate);
	event MarketingAddressChanged(address marketingAddress);
	event DevAddressChanged(address devAddress);
    event ExcludedFromTaxStatusUpdated(address target, bool newStatus);
    event TradingPairStatusUpdated(address pair, bool newStatus);

	bool internal _isTaxEnabled;
    uint32 internal _balanceToSwapAt;

	uint8 internal _marketingTaxRate;
    uint8 internal _devTaxRate;

    uint8 internal immutable _initialMarketingTaxRate;
    uint8 internal immutable _initialDevTaxRate;
    
    address payable internal _marketingAddress;
    address payable internal _devAddress;

    mapping(address => bool) internal _excludedFromTax;

    address internal _baseTradingPair;
    mapping(address => bool) public automatedMarketMakerPairs;

	constructor(bool isTaxEnabled_, uint8 marketingTaxRate_, uint8 devTaxRate_, address marketingAddress_, address devAddress_) {
        _isTaxEnabled = isTaxEnabled_;
        _balanceToSwapAt = 0;

        _marketingTaxRate = marketingTaxRate_;
        _initialMarketingTaxRate = _marketingTaxRate;

        _devTaxRate = devTaxRate_;
        _initialDevTaxRate = _devTaxRate;

        _marketingAddress = payable(marketingAddress_);
        _devAddress = payable(devAddress_);

        _excludedFromTax[_msgSender()] = true;
        _excludedFromTax[_marketingAddress] = true;
        _excludedFromTax[_devAddress] = true;
        _excludedFromTax[address(0)] = true;
        _excludedFromTax[address(this)] = true;
    }

	modifier whenTaxDisabled() {
        _requireTaxDisabled();
        _;
    }

	modifier whenTaxEnabled() {
        _requireTaxEnabled();
        _;
    }

    function enableTax() public onlyOwner whenTaxDisabled {
        _enableTax();
    }

    function disableTax() public onlyOwner whenTaxEnabled {
        _disableTax();
    }

	function isTaxEnabled() public view returns (bool) {
        return _isTaxEnabled;
    }

    function getTotalTaxRate() public view returns (uint) {
        return _marketingTaxRate + _devTaxRate;
    }

    function updateTaxRate(uint8 newMarketingTaxRate, uint8 newDevTaxRate) public onlyOwner {
        require(newMarketingTaxRate <= _initialMarketingTaxRate, "TaxableToken: Cannot increase marketing tax rate above initial rate.");
        require(newDevTaxRate <= _initialDevTaxRate, "TaxableToken: Cannot increase dev tax rate above initial rate.");
        require((newMarketingTaxRate + newDevTaxRate) > 0, "TaxableToken: Cannot reduce taxes to/below 0. Disable taxes instead.");

        _updateTaxRate(newMarketingTaxRate, newDevTaxRate);
    }

    function getMarketingAddress() public view returns (address) {
        return _marketingAddress;
    }

    function getDevAddress() public view returns (address) {
        return _devAddress;
    }

    function updateMarketingAddress(address newMarketingAddress) public onlyOwner {
        require(newMarketingAddress != address(0), "TaxableToken: Cannot set marketing address to 0");
        require(newMarketingAddress != address(0xdead), "TaxableToken: Cannot set marketing address to dead address");
        require(newMarketingAddress != _devAddress, "TaxableToken: Marketing and dev address cannot be the same");

        _updateMarketingAddress(newMarketingAddress);
    }

    function updateDevAddress(address newDevAddress) public onlyOwner {
        require(newDevAddress != address(0), "TaxableToken: Cannot set dev address to 0");
        require(newDevAddress != address(0xdead), "TaxableToken: Cannot set dev address to dead address");
        require(newDevAddress != _marketingAddress, "TaxableToken: Marketing and dev address cannot be the same");

        _updateDevAddress(newDevAddress);
    }

    function updateTradingPairStatus(address pair, bool status) public onlyOwner {
        require(pair != _baseTradingPair, "TaxableToken: Cannot change status of base trading pair");

        _updateTradingPairStatus(pair, status);
    }

    function updateExcludedFromTax(address target, bool status) public onlyOwner {
        require(!automatedMarketMakerPairs[target], "TaxableToken: Cannot change excludedFromTax status of base trading pair");

        _updateExcludedFromTaxStatus(target, status);
    }

    function isExcludedFromTax(address target) public view returns (bool) {
        return _excludedFromTax[target];
    }

	function _requireTaxDisabled() internal view {
        require(!isTaxEnabled(), "TaxableToken: Tax must be disabled");
    }

	function _requireTaxEnabled() internal view {
        require(isTaxEnabled(), "TaxableToken: Tax must be enabled");
    }

	function _enableTax() internal whenTaxDisabled {
        _isTaxEnabled = true;
        emit TaxEnabled();
    }

	function _disableTax() internal whenTaxEnabled {
        _isTaxEnabled = false;
        emit TaxDisabled();
    }

    function _setSwapAtBalance(uint32 balanceToSwapAt) internal {
        require(balanceToSwapAt > 0, "TaxableToken: Balance to swap at must be more than zero");
        _balanceToSwapAt = balanceToSwapAt;
    }

    function _isBalanceEnoughToSwap(uint contractBalance) internal view returns (bool) {
        return contractBalance > _balanceToSwapAt;
    }

    function _updateTaxRate(uint8 newMarketingTaxRate, uint8 newDevTaxRate) internal {
        _marketingTaxRate = newMarketingTaxRate;
        _devTaxRate = newDevTaxRate;

        emit TaxRateUpdated(_marketingTaxRate, _devTaxRate);
    }

    function _updateMarketingAddress(address newMarketingAddress) internal {
        _marketingAddress = payable(newMarketingAddress);
        emit MarketingAddressChanged(newMarketingAddress);
    }

    function _updateDevAddress(address newDevAddress) internal {
        _devAddress = payable(newDevAddress);
        emit DevAddressChanged(_devAddress);
    }

    function _updateExcludedFromTaxStatus(address target, bool newStatus) internal {
        _excludedFromTax[target] = newStatus;
        emit ExcludedFromTaxStatusUpdated(target, newStatus);
    }

    function _updateTradingPairStatus(address pair, bool newStatus) internal {
        automatedMarketMakerPairs[pair] = newStatus;
        emit TradingPairStatusUpdated(pair, newStatus);
    }

    function _getMarketingTaxFee(uint amount) internal view returns (uint) {
        return (amount * _marketingTaxRate) / 1000;
    }

    function _getDevTaxFee(uint amount) internal view returns (uint) {
        return (amount * _devTaxRate) / 1000;
    }

    function _getMarketingTaxSplit(uint tokensToSplit) internal view returns (uint) {
        uint taxSplitParts = getTotalTaxRate();
        return (tokensToSplit * _marketingTaxRate) / taxSplitParts;
    }

    function _sendEthToTaxRecipients() internal {
        uint contractBalance = address(this).balance;
        bool success;

        if (contractBalance > 0) {
            uint ethForMarketing = _getMarketingTaxSplit(contractBalance);
            uint ethForDev = contractBalance - ethForMarketing;

            (success, ) = address(_marketingAddress).call{value: ethForMarketing}("");
            (success, ) = address(_devAddress).call{value: ethForDev}("");
        }
    }
}


// File contracts/Betted.sol

pragma solidity ^0.8.9;
contract Betted is ERC20, TaxableToken {
    IUniswapV2Router02 private immutable _uniswapV2Router;
    IUniswapV2Factory private immutable _uniswapV2Factory;
    IUniswapV2Pair private immutable _uniswapV2WethPair;

    mapping(address => uint) private _lastTransactionBlockNumber;
    mapping(address => bool) private _blacklistedAddresses;
    mapping(address => bool) private _excludedFromBlacklisting;
    mapping(address => bool) private _excludedFromMaxWallet;

    bool private _isTransferringTax;

    uint private immutable _maxSupply;
    
    constructor()
        ERC20("Betted", "BETS")
        TaxableToken(true, 245, 5, 0x61E87D52d5a358eE83043a6d918A2E867e44bD2f, 0x5d7379995772b2eb7f617A524C49D170De4632DB) {

        _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        _uniswapV2Factory = IUniswapV2Factory(_uniswapV2Router.factory());
        _uniswapV2WethPair = IUniswapV2Pair(_uniswapV2Factory.createPair(address(this), _uniswapV2Router.WETH()));

        _baseTradingPair = address(_uniswapV2WethPair);
        automatedMarketMakerPairs[_baseTradingPair] = true;

        _excludedFromBlacklisting[_msgSender()] = true;
        _excludedFromBlacklisting[_baseTradingPair] = true;
        _excludedFromBlacklisting[_marketingAddress] = true;
        _excludedFromBlacklisting[_devAddress] = true;
        _excludedFromBlacklisting[address(0)] = true;
        _excludedFromBlacklisting[address(this)] = true;

        _maxSupply = 1_000_000_000 * (10 ** decimals());

        _mint(_msgSender(), _maxSupply);
        _setSwapAtBalance(uint32(500_000 * (10 ** decimals())));
    }

    function isAddressBlacklistedFromBuying(address target) public view returns (bool) {
        return _blacklistedAddresses[target];
    }

    function removeAddressFromBlacklist(address target) public onlyOwner {
        _removeAddressFromBlacklist(target);
    }

    function isAddressExcludedFromBlacklisting(address target) public view returns (bool) {
        return _excludedFromBlacklisting[target];
    }

    function excludeFromBlacklisting(address target) public onlyOwner {
        _excludedFromBlacklisting[target] = true;
    }

    function getLastTransactionBlockNumber(address target) public view returns (uint) {
        return _lastTransactionBlockNumber[target];
    }

    function claimTaxes() public onlyOwner {
        _isTransferringTax = true;
        _swapAndClaimTaxes();
        _isTransferringTax = false;
    }

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

        excludeFromBlacklisting(newOwner);
        updateExcludedFromTax(newOwner, true);

        _transferOwnership(newOwner);
    }
    
    function _removeAddressFromBlacklist(address target) private onlyOwner {
        _blacklistedAddresses[target] = false;
    }

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

        if (!_isTransferringTax && _isBalanceEnoughToSwap(balanceOf(address(this))) && automatedMarketMakerPairs[to]) {
            _isTransferringTax = true;
            _swapAndClaimTaxes();
            _isTransferringTax = false;
        }

        uint amountToTransfer = amount;

        if (!_isTransferringTax) {
            if (automatedMarketMakerPairs[from]) {
                require(!_blacklistedAddresses[to], "BETS: This address is blacklisted from buying. You can always sell any tokens you own");
                
                if (!_excludedFromBlacklisting[to]) {
                    if (_lastTransactionBlockNumber[to] == block.number) {
                        _blacklistedAddresses[to] = true;
                    }
                }

                _lastTransactionBlockNumber[to] = block.number;
            }

            if (automatedMarketMakerPairs[to]) {
                if (!_excludedFromBlacklisting[from]) {
                    if (_lastTransactionBlockNumber[from] == block.number) {
                        _blacklistedAddresses[from] = true;
                    }
                }

                _lastTransactionBlockNumber[from] = block.number;
            }

            if (automatedMarketMakerPairs[from] || automatedMarketMakerPairs[to]) {
                if (isTaxEnabled() && !_excludedFromTax[from] && !_excludedFromTax[to]) {
                    uint marketingTaxFee = _getMarketingTaxFee(amountToTransfer);
                    uint devTaxFee = _getDevTaxFee(amountToTransfer);
                    amountToTransfer = amount - marketingTaxFee - devTaxFee;

                    if ((marketingTaxFee + devTaxFee) > 0) {
                        super._transfer(from, address(this), marketingTaxFee + devTaxFee);
                    }
                }
            }
        }

        super._transfer(from, to, amountToTransfer);
    }

    function _swapAndClaimTaxes() private {
        uint tokensToSwap = balanceOf(address(this));
        uint maxTokensToSwap = uint(_balanceToSwapAt) * 5;
        if (tokensToSwap > maxTokensToSwap) {
            tokensToSwap = maxTokensToSwap;
        }

        _swapTokensForEth(tokensToSwap);
        _sendEthToTaxRecipients();
    }

    function _swapTokensForEth(uint256 amount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = _uniswapV2Router.WETH();

        _approve(address(this), address(_uniswapV2Router), amount);
        _uniswapV2Router.swapExactTokensForETH(amount, 0, path, address(this), block.timestamp);
    }

    receive() external payable {}
    fallback() 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":false,"internalType":"address","name":"devAddress","type":"address"}],"name":"DevAddressChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"bool","name":"newStatus","type":"bool"}],"name":"ExcludedFromTaxStatusUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"marketingAddress","type":"address"}],"name":"MarketingAddressChanged","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":[],"name":"TaxDisabled","type":"event"},{"anonymous":false,"inputs":[],"name":"TaxEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMarketingTaxRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newDevTaxRate","type":"uint256"}],"name":"TaxRateUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"pair","type":"address"},{"indexed":false,"internalType":"bool","name":"newStatus","type":"bool"}],"name":"TradingPairStatusUpdated","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"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"excludeFromBlacklisting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getDevAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"getLastTransactionBlockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMarketingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalTaxRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"isAddressBlacklistedFromBuying","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"isAddressExcludedFromBlacklisting","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"isExcludedFromTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTaxEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"removeAddressFromBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":[{"internalType":"address","name":"newDevAddress","type":"address"}],"name":"updateDevAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"updateExcludedFromTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingAddress","type":"address"}],"name":"updateMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"newMarketingTaxRate","type":"uint8"},{"internalType":"uint8","name":"newDevTaxRate","type":"uint8"}],"name":"updateTaxRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"updateTradingPairStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6101406040523480156200001257600080fd5b50600160f560057361e87d52d5a358ee83043a6d918a2e867e44bd2f735d7379995772b2eb7f617a524c49d170de4632db6040518060400160405280600681526020017f42657474656400000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f42455453000000000000000000000000000000000000000000000000000000008152508160039080519060200190620000c792919062000d2d565b508060049080519060200190620000e092919062000d2d565b50505062000103620000f762000a6e60201b60201c565b62000a7660201b60201c565b84600560146101000a81548160ff0219169083151502179055506000600560156101000a81548163ffffffff021916908363ffffffff16021790555083600560196101000a81548160ff021916908360ff160217905550600560199054906101000a900460ff1660ff1660808160ff1681525050826005601a6101000a81548160ff021916908360ff1602179055506005601a9054906101000a900460ff1660ff1660a08160ff168152505081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600860006200024762000a6e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050505050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff168152505060c05173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620004d257600080fd5b505afa158015620004e7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200050d919062000e47565b73ffffffffffffffffffffffffffffffffffffffff1660e08173ffffffffffffffffffffffffffffffffffffffff168152505060e05173ffffffffffffffffffffffffffffffffffffffff1663c9c653963060c05173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620005a857600080fd5b505afa158015620005bd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005e3919062000e47565b6040518363ffffffff1660e01b81526004016200060292919062000e8a565b602060405180830381600087803b1580156200061d57600080fd5b505af115801562000632573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000658919062000e47565b73ffffffffffffffffffffffffffffffffffffffff166101008173ffffffffffffffffffffffffffffffffffffffff168152505061010051600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600a6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d60006200076062000a6e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d60008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620009df62000b3c60201b60201c565b600a620009ed919062001051565b633b9aca00620009fe9190620010a2565b610120818152505062000a2a62000a1a62000a6e60201b60201c565b6101205162000b4560201b60201c565b62000a6862000a3e62000b3c60201b60201c565b600a62000a4c919062001051565b6207a12062000a5c9190620010a2565b62000cb360201b60201c565b6200130e565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006012905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000bb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000baf9062001164565b60405180910390fd5b62000bcc6000838362000d2360201b60201c565b806002600082825462000be0919062001186565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000c939190620011f4565b60405180910390a362000caf6000838362000d2860201b60201c565b5050565b60008163ffffffff161162000cff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000cf69062001287565b60405180910390fd5b80600560156101000a81548163ffffffff021916908363ffffffff16021790555050565b505050565b505050565b82805462000d3b90620012d8565b90600052602060002090601f01602090048101928262000d5f576000855562000dab565b82601f1062000d7a57805160ff191683800117855562000dab565b8280016001018555821562000dab579182015b8281111562000daa57825182559160200191906001019062000d8d565b5b50905062000dba919062000dbe565b5090565b5b8082111562000dd957600081600090555060010162000dbf565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000e0f8262000de2565b9050919050565b62000e218162000e02565b811462000e2d57600080fd5b50565b60008151905062000e418162000e16565b92915050565b60006020828403121562000e605762000e5f62000ddd565b5b600062000e708482850162000e30565b91505092915050565b62000e848162000e02565b82525050565b600060408201905062000ea1600083018562000e79565b62000eb0602083018462000e79565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000f455780860481111562000f1d5762000f1c62000eb7565b5b600185161562000f2d5780820291505b808102905062000f3d8562000ee6565b945062000efd565b94509492505050565b60008262000f60576001905062001033565b8162000f70576000905062001033565b816001811462000f89576002811462000f945762000fca565b600191505062001033565b60ff84111562000fa95762000fa862000eb7565b5b8360020a91508482111562000fc35762000fc262000eb7565b5b5062001033565b5060208310610133831016604e8410600b8410161715620010045782820a90508381111562000ffe5762000ffd62000eb7565b5b62001033565b62001013848484600162000ef3565b925090508184048111156200102d576200102c62000eb7565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b60006200105e826200103a565b91506200106b8362001044565b92506200109a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000f4e565b905092915050565b6000620010af826200103a565b9150620010bc836200103a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620010f857620010f762000eb7565b5b828202905092915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006200114c601f8362001103565b9150620011598262001114565b602082019050919050565b600060208201905081810360008301526200117f816200113d565b9050919050565b600062001193826200103a565b9150620011a0836200103a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620011d857620011d762000eb7565b5b828201905092915050565b620011ee816200103a565b82525050565b60006020820190506200120b6000830184620011e3565b92915050565b7f54617861626c65546f6b656e3a2042616c616e636520746f207377617020617460008201527f206d757374206265206d6f7265207468616e207a65726f000000000000000000602082015250565b60006200126f60378362001103565b91506200127c8262001211565b604082019050919050565b60006020820190508181036000830152620012a28162001260565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620012f157607f821691505b60208210811415620013085762001307620012a9565b5b50919050565b60805160a05160c05160e05161010051610120516143df620013636000396000505060005050600050506000818161278f0152818161287f01526128a601526000610b8f01526000610b2601526143df6000f3fe6080604052600436106101f25760003560e01c8063850337621161010d578063b374df5c116100a0578063dd62ed3e1161006f578063dd62ed3e14610719578063e34d99bf14610756578063e6c1909b14610781578063e7b25bf2146107ac578063f2fde38b146107d5576101f9565b8063b374df5c14610671578063b62496f514610688578063cb4ca631146106c5578063ced695a414610702576101f9565b806395d89b41116100dc57806395d89b41146105a1578063a457c2d7146105cc578063a9059cbb14610609578063ae6753fd14610646576101f9565b806385033762146104e55780638da5cb5b1461050e5780639183faaa146105395780639332028c14610564576101f9565b806339509351116101855780635c896210116101545780635c8962101461042b57806370a0823114610468578063715018a6146104a55780637b9bae54146104bc576101f9565b806339509351146103855780634082671d146103c25780634cba54f2146103eb57806353eb3bcf14610414576101f9565b806323b872dd116101c157806323b872dd146102b757806329693fd8146102f4578063313ce5671461033157806335e82f3a1461035c576101f9565b806306fdde03146101fb578063095ea7b31461022657806318160ddd146102635780632369bf831461028e576101f9565b366101f957005b005b34801561020757600080fd5b506102106107fe565b60405161021d9190612b92565b60405180910390f35b34801561023257600080fd5b5061024d60048036038101906102489190612c5c565b610890565b60405161025a9190612cb7565b60405180910390f35b34801561026f57600080fd5b506102786108b3565b6040516102859190612ce1565b60405180910390f35b34801561029a57600080fd5b506102b560048036038101906102b09190612cfc565b6108bd565b005b3480156102c357600080fd5b506102de60048036038101906102d99190612d29565b610a43565b6040516102eb9190612cb7565b60405180910390f35b34801561030057600080fd5b5061031b60048036038101906103169190612cfc565b610a72565b6040516103289190612cb7565b60405180910390f35b34801561033d57600080fd5b50610346610ac8565b6040516103539190612d98565b60405180910390f35b34801561036857600080fd5b50610383600480360381019061037e9190612cfc565b610ad1565b005b34801561039157600080fd5b506103ac60048036038101906103a79190612c5c565b610ae5565b6040516103b99190612cb7565b60405180910390f35b3480156103ce57600080fd5b506103e960048036038101906103e49190612ddf565b610b1c565b005b3480156103f757600080fd5b50610412600480360381019061040d9190612cfc565b610c55565b005b34801561042057600080fd5b50610429610cb8565b005b34801561043757600080fd5b50610452600480360381019061044d9190612cfc565b610cd2565b60405161045f9190612ce1565b60405180910390f35b34801561047457600080fd5b5061048f600480360381019061048a9190612cfc565b610d1b565b60405161049c9190612ce1565b60405180910390f35b3480156104b157600080fd5b506104ba610d63565b005b3480156104c857600080fd5b506104e360048036038101906104de9190612e4b565b610d77565b005b3480156104f157600080fd5b5061050c60048036038101906105079190612cfc565b610e1e565b005b34801561051a57600080fd5b50610523610fa4565b6040516105309190612e9a565b60405180910390f35b34801561054557600080fd5b5061054e610fce565b60405161055b9190612e9a565b60405180910390f35b34801561057057600080fd5b5061058b60048036038101906105869190612cfc565b610ff8565b6040516105989190612cb7565b60405180910390f35b3480156105ad57600080fd5b506105b661104e565b6040516105c39190612b92565b60405180910390f35b3480156105d857600080fd5b506105f360048036038101906105ee9190612c5c565b6110e0565b6040516106009190612cb7565b60405180910390f35b34801561061557600080fd5b50610630600480360381019061062b9190612c5c565b611157565b60405161063d9190612cb7565b60405180910390f35b34801561065257600080fd5b5061065b61117a565b6040516106689190612ce1565b60405180910390f35b34801561067d57600080fd5b506106866111ae565b005b34801561069457600080fd5b506106af60048036038101906106aa9190612cfc565b6111f6565b6040516106bc9190612cb7565b60405180910390f35b3480156106d157600080fd5b506106ec60048036038101906106e79190612cfc565b611216565b6040516106f99190612cb7565b60405180910390f35b34801561070e57600080fd5b5061071761126c565b005b34801561072557600080fd5b50610740600480360381019061073b9190612eb5565b611286565b60405161074d9190612ce1565b60405180910390f35b34801561076257600080fd5b5061076b61130d565b6040516107789190612e9a565b60405180910390f35b34801561078d57600080fd5b50610796611337565b6040516107a39190612cb7565b60405180910390f35b3480156107b857600080fd5b506107d360048036038101906107ce9190612e4b565b61134e565b005b3480156107e157600080fd5b506107fc60048036038101906107f79190612cfc565b6113f1565b005b60606003805461080d90612f24565b80601f016020809104026020016040519081016040528092919081815260200182805461083990612f24565b80156108865780601f1061085b57610100808354040283529160200191610886565b820191906000526020600020905b81548152906001019060200180831161086957829003601f168201915b5050505050905090565b60008061089b611489565b90506108a8818585611491565b600191505092915050565b6000600254905090565b6108c561165c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610935576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092c90612fc8565b60405180910390fd5b61dead73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156109a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099d9061305a565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2e906130ec565b60405180910390fd5b610a40816116da565b50565b600080610a4e611489565b9050610a5b858285611755565b610a668585856117e1565b60019150509392505050565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60006012905090565b610ad961165c565b610ae281611ee2565b50565b600080610af0611489565b9050610b11818585610b028589611286565b610b0c919061313b565b611491565b600191505092915050565b610b2461165c565b7f000000000000000000000000000000000000000000000000000000000000000060ff168260ff161115610b8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8490613229565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000060ff168160ff161115610bf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bed906132bb565b60405180910390fd5b60008183610c0491906132db565b60ff1611610c47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3e906133aa565b60405180910390fd5b610c518282611f45565b5050565b610c5d61165c565b6001600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610cc061165c565b610cc8611fd6565b610cd0612020565b565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610d6b61165c565b610d756000612071565b565b610d7f61165c565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e079061343c565b60405180910390fd5b610e1a8282612137565b5050565b610e2661165c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8d906134ce565b60405180910390fd5b61dead73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efe90613560565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8f906130ec565b60405180910390fd5b610fa1816121cb565b50565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60606004805461105d90612f24565b80601f016020809104026020016040519081016040528092919081815260200182805461108990612f24565b80156110d65780601f106110ab576101008083540402835291602001916110d6565b820191906000526020600020905b8154815290600101906020018083116110b957829003601f168201915b5050505050905090565b6000806110eb611489565b905060006110f98286611286565b90508381101561113e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611135906135f2565b60405180910390fd5b61114b8286868403611491565b60019250505092915050565b600080611162611489565b905061116f8185856117e1565b600191505092915050565b60006005601a9054906101000a900460ff16600560199054906101000a900460ff166111a691906132db565b60ff16905090565b6111b661165c565b6001600f60006101000a81548160ff0219169083151502179055506111d9612268565b6000600f60006101000a81548160ff021916908315150217905550565b600a6020528060005260406000206000915054906101000a900460ff1681565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61127461165c565b61127c6122be565b611284612307565b565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600560149054906101000a900460ff16905090565b61135661165c565b600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156113e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113da906136aa565b60405180910390fd5b6113ed8282612358565b5050565b6113f961165c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611469576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114609061373c565b60405180910390fd5b61147281610c55565b61147d81600161134e565b61148681612071565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611501576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f8906137ce565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611571576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156890613860565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161164f9190612ce1565b60405180910390a3505050565b611664611489565b73ffffffffffffffffffffffffffffffffffffffff16611682610fa4565b73ffffffffffffffffffffffffffffffffffffffff16146116d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116cf906138cc565b60405180910390fd5b565b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f70f1e4f570b51e464910762fee3d96ad08b99a90ce9c27a6036b0f4627aeda2d8160405161174a9190612e9a565b60405180910390a150565b60006117618484611286565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146117db57818110156117cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c490613938565b60405180910390fd5b6117da8484848403611491565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611851576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611848906139ca565b60405180910390fd5b60008111611894576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188b90613a5c565b60405180910390fd5b600f60009054906101000a900460ff161580156118be57506118bd6118b830610d1b565b6123ec565b5b80156119135750600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611957576001600f60006101000a81548160ff02191690831515021790555061193b612268565b6000600f60006101000a81548160ff0219169083151502179055505b6000819050600f60009054906101000a900460ff16611ed157600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611b8657600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611a4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4690613b14565b60405180910390fd5b600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611b415743600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415611b40576001600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5b43600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611d0f57600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611cca5743600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415611cc9576001600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5b43600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611db05750600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611ed057611dbd611337565b8015611e135750600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611e695750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611ecf576000611e7982612410565b90506000611e8683612444565b9050808285611e959190613b34565b611e9f9190613b34565b925060008183611eaf919061313b565b1115611ecc57611ecb86308385611ec6919061313b565b612478565b5b50505b5b5b611edc848483612478565b50505050565b611eea61165c565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b81600560196101000a81548160ff021916908360ff160217905550806005601a6101000a81548160ff021916908360ff1602179055507fa8ee157eb2a9aa895d74df4d2d3bc0ad165ff3162f8ec46a4ecf602dd5c48fda600560199054906101000a900460ff166005601a9054906101000a900460ff16604051611fca929190613ba3565b60405180910390a15050565b611fde611337565b1561201e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201590613c3e565b60405180910390fd5b565b612028611fd6565b6001600560146101000a81548160ff0219169083151502179055507fd2e80fb3f28dfb650beb9c059dadd2a8936a8bdc1abd1563608cd49227a0902160405160405180910390a1565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f2df49817e5aafe4d3dd7d0c8192865b7034d8870ed49ac24a9520f3057bb5f2482826040516121bf929190613c5e565b60405180910390a15050565b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f292c0d8d8c63a0a0a42cc1103baf921b3f13ea455e3298dbcf67e3edba8a6a38600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660405161225d9190613cdc565b60405180910390a150565b600061227330610d1b565b9050600060058060159054906101000a900463ffffffff1663ffffffff1661229b9190613cf7565b9050808211156122a9578091505b6122b2826126f0565b6122ba612962565b5050565b6122c6611337565b612305576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122fc90613dc3565b60405180910390fd5b565b61230f6122be565b6000600560146101000a81548160ff0219169083151502179055507f7a14a3188411c2f406ce4721233750b4b11e612569f9fa80a35b1cb91bb2e49e60405160405180910390a1565b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507ff14bd650485d6a031eba0f22da79fbebf9dc98a771adcbde6b4abe2ba590afdb82826040516123e0929190613c5e565b60405180910390a15050565b6000600560159054906101000a900463ffffffff1663ffffffff1682119050919050565b60006103e8600560199054906101000a900460ff1660ff16836124339190613cf7565b61243d9190613e12565b9050919050565b60006103e86005601a9054906101000a900460ff1660ff16836124679190613cf7565b6124719190613e12565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156124e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124df90613eb5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612558576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254f90613f47565b60405180910390fd5b612563838383612ab1565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156125e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e090613fd9565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516126d79190612ce1565b60405180910390a36126ea848484612ab6565b50505050565b6000600267ffffffffffffffff81111561270d5761270c613ff9565b5b60405190808252806020026020018201604052801561273b5781602001602082028036833780820191505090505b509050308160008151811061275357612752614028565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156127f357600080fd5b505afa158015612807573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061282b919061406c565b8160018151811061283f5761283e614028565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506128a4307f000000000000000000000000000000000000000000000000000000000000000084611491565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318cbafe58360008430426040518663ffffffff1660e01b8152600401612906959493929190614192565b600060405180830381600087803b15801561292057600080fd5b505af1158015612934573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061295d919061431a565b505050565b6000479050600080821115612aad57600061297c83612abb565b90506000818461298c9190613b34565b9050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516129d490614394565b60006040518083038185875af1925050503d8060008114612a11576040519150601f19603f3d011682016040523d82523d6000602084013e612a16565b606091505b505080935050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051612a6290614394565b60006040518083038185875af1925050503d8060008114612a9f576040519150601f19603f3d011682016040523d82523d6000602084013e612aa4565b606091505b50508093505050505b5050565b505050565b505050565b600080612ac661117a565b905080600560199054906101000a900460ff1660ff1684612ae79190613cf7565b612af19190613e12565b915050919050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612b33578082015181840152602081019050612b18565b83811115612b42576000848401525b50505050565b6000601f19601f8301169050919050565b6000612b6482612af9565b612b6e8185612b04565b9350612b7e818560208601612b15565b612b8781612b48565b840191505092915050565b60006020820190508181036000830152612bac8184612b59565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612bf382612bc8565b9050919050565b612c0381612be8565b8114612c0e57600080fd5b50565b600081359050612c2081612bfa565b92915050565b6000819050919050565b612c3981612c26565b8114612c4457600080fd5b50565b600081359050612c5681612c30565b92915050565b60008060408385031215612c7357612c72612bbe565b5b6000612c8185828601612c11565b9250506020612c9285828601612c47565b9150509250929050565b60008115159050919050565b612cb181612c9c565b82525050565b6000602082019050612ccc6000830184612ca8565b92915050565b612cdb81612c26565b82525050565b6000602082019050612cf66000830184612cd2565b92915050565b600060208284031215612d1257612d11612bbe565b5b6000612d2084828501612c11565b91505092915050565b600080600060608486031215612d4257612d41612bbe565b5b6000612d5086828701612c11565b9350506020612d6186828701612c11565b9250506040612d7286828701612c47565b9150509250925092565b600060ff82169050919050565b612d9281612d7c565b82525050565b6000602082019050612dad6000830184612d89565b92915050565b612dbc81612d7c565b8114612dc757600080fd5b50565b600081359050612dd981612db3565b92915050565b60008060408385031215612df657612df5612bbe565b5b6000612e0485828601612dca565b9250506020612e1585828601612dca565b9150509250929050565b612e2881612c9c565b8114612e3357600080fd5b50565b600081359050612e4581612e1f565b92915050565b60008060408385031215612e6257612e61612bbe565b5b6000612e7085828601612c11565b9250506020612e8185828601612e36565b9150509250929050565b612e9481612be8565b82525050565b6000602082019050612eaf6000830184612e8b565b92915050565b60008060408385031215612ecc57612ecb612bbe565b5b6000612eda85828601612c11565b9250506020612eeb85828601612c11565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612f3c57607f821691505b60208210811415612f5057612f4f612ef5565b5b50919050565b7f54617861626c65546f6b656e3a2043616e6e6f7420736574206d61726b65746960008201527f6e67206164647265737320746f20300000000000000000000000000000000000602082015250565b6000612fb2602f83612b04565b9150612fbd82612f56565b604082019050919050565b60006020820190508181036000830152612fe181612fa5565b9050919050565b7f54617861626c65546f6b656e3a2043616e6e6f7420736574206d61726b65746960008201527f6e67206164647265737320746f20646561642061646472657373000000000000602082015250565b6000613044603a83612b04565b915061304f82612fe8565b604082019050919050565b6000602082019050818103600083015261307381613037565b9050919050565b7f54617861626c65546f6b656e3a204d61726b6574696e6720616e64206465762060008201527f616464726573732063616e6e6f74206265207468652073616d65000000000000602082015250565b60006130d6603a83612b04565b91506130e18261307a565b604082019050919050565b60006020820190508181036000830152613105816130c9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061314682612c26565b915061315183612c26565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156131865761318561310c565b5b828201905092915050565b7f54617861626c65546f6b656e3a2043616e6e6f7420696e637265617365206d6160008201527f726b6574696e672074617820726174652061626f766520696e697469616c207260208201527f6174652e00000000000000000000000000000000000000000000000000000000604082015250565b6000613213604483612b04565b915061321e82613191565b606082019050919050565b6000602082019050818103600083015261324281613206565b9050919050565b7f54617861626c65546f6b656e3a2043616e6e6f7420696e63726561736520646560008201527f762074617820726174652061626f766520696e697469616c20726174652e0000602082015250565b60006132a5603e83612b04565b91506132b082613249565b604082019050919050565b600060208201905081810360008301526132d481613298565b9050919050565b60006132e682612d7c565b91506132f183612d7c565b92508260ff038211156133075761330661310c565b5b828201905092915050565b7f54617861626c65546f6b656e3a2043616e6e6f7420726564756365207461786560008201527f7320746f2f62656c6f7720302e2044697361626c6520746178657320696e737460208201527f6561642e00000000000000000000000000000000000000000000000000000000604082015250565b6000613394604483612b04565b915061339f82613312565b606082019050919050565b600060208201905081810360008301526133c381613387565b9050919050565b7f54617861626c65546f6b656e3a2043616e6e6f74206368616e6765207374617460008201527f7573206f6620626173652074726164696e672070616972000000000000000000602082015250565b6000613426603783612b04565b9150613431826133ca565b604082019050919050565b6000602082019050818103600083015261345581613419565b9050919050565b7f54617861626c65546f6b656e3a2043616e6e6f7420736574206465762061646460008201527f7265737320746f20300000000000000000000000000000000000000000000000602082015250565b60006134b8602983612b04565b91506134c38261345c565b604082019050919050565b600060208201905081810360008301526134e7816134ab565b9050919050565b7f54617861626c65546f6b656e3a2043616e6e6f7420736574206465762061646460008201527f7265737320746f20646561642061646472657373000000000000000000000000602082015250565b600061354a603483612b04565b9150613555826134ee565b604082019050919050565b600060208201905081810360008301526135798161353d565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006135dc602583612b04565b91506135e782613580565b604082019050919050565b6000602082019050818103600083015261360b816135cf565b9050919050565b7f54617861626c65546f6b656e3a2043616e6e6f74206368616e6765206578636c60008201527f7564656446726f6d54617820737461747573206f66206261736520747261646960208201527f6e67207061697200000000000000000000000000000000000000000000000000604082015250565b6000613694604783612b04565b915061369f82613612565b606082019050919050565b600060208201905081810360008301526136c381613687565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613726602683612b04565b9150613731826136ca565b604082019050919050565b6000602082019050818103600083015261375581613719565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006137b8602483612b04565b91506137c38261375c565b604082019050919050565b600060208201905081810360008301526137e7816137ab565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061384a602283612b04565b9150613855826137ee565b604082019050919050565b600060208201905081810360008301526138798161383d565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006138b6602083612b04565b91506138c182613880565b602082019050919050565b600060208201905081810360008301526138e5816138a9565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613922601d83612b04565b915061392d826138ec565b602082019050919050565b6000602082019050818103600083015261395181613915565b9050919050565b7f45524332303a2043616e6e6f74207472616e736665722066726f6d207468652060008201527f7a65726f20616464726573730000000000000000000000000000000000000000602082015250565b60006139b4602c83612b04565b91506139bf82613958565b604082019050919050565b600060208201905081810360008301526139e3816139a7565b9050919050565b7f45524332303a204d757374207472616e73666572206d6f7265207468616e207a60008201527f65726f0000000000000000000000000000000000000000000000000000000000602082015250565b6000613a46602383612b04565b9150613a51826139ea565b604082019050919050565b60006020820190508181036000830152613a7581613a39565b9050919050565b7f424554533a2054686973206164647265737320697320626c61636b6c6973746560008201527f642066726f6d20627579696e672e20596f752063616e20616c7761797320736560208201527f6c6c20616e7920746f6b656e7320796f75206f776e0000000000000000000000604082015250565b6000613afe605583612b04565b9150613b0982613a7c565b606082019050919050565b60006020820190508181036000830152613b2d81613af1565b9050919050565b6000613b3f82612c26565b9150613b4a83612c26565b925082821015613b5d57613b5c61310c565b5b828203905092915050565b6000819050919050565b6000613b8d613b88613b8384612d7c565b613b68565b612c26565b9050919050565b613b9d81613b72565b82525050565b6000604082019050613bb86000830185613b94565b613bc56020830184613b94565b9392505050565b7f54617861626c65546f6b656e3a20546178206d7573742062652064697361626c60008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b6000613c28602283612b04565b9150613c3382613bcc565b604082019050919050565b60006020820190508181036000830152613c5781613c1b565b9050919050565b6000604082019050613c736000830185612e8b565b613c806020830184612ca8565b9392505050565b6000613ca2613c9d613c9884612bc8565b613b68565b612bc8565b9050919050565b6000613cb482613c87565b9050919050565b6000613cc682613ca9565b9050919050565b613cd681613cbb565b82525050565b6000602082019050613cf16000830184613ccd565b92915050565b6000613d0282612c26565b9150613d0d83612c26565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613d4657613d4561310c565b5b828202905092915050565b7f54617861626c65546f6b656e3a20546178206d75737420626520656e61626c6560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b6000613dad602183612b04565b9150613db882613d51565b604082019050919050565b60006020820190508181036000830152613ddc81613da0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613e1d82612c26565b9150613e2883612c26565b925082613e3857613e37613de3565b5b828204905092915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613e9f602583612b04565b9150613eaa82613e43565b604082019050919050565b60006020820190508181036000830152613ece81613e92565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613f31602383612b04565b9150613f3c82613ed5565b604082019050919050565b60006020820190508181036000830152613f6081613f24565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613fc3602683612b04565b9150613fce82613f67565b604082019050919050565b60006020820190508181036000830152613ff281613fb6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061406681612bfa565b92915050565b60006020828403121561408257614081612bbe565b5b600061409084828501614057565b91505092915050565b6000819050919050565b60006140be6140b96140b484614099565b613b68565b612c26565b9050919050565b6140ce816140a3565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61410981612be8565b82525050565b600061411b8383614100565b60208301905092915050565b6000602082019050919050565b600061413f826140d4565b61414981856140df565b9350614154836140f0565b8060005b8381101561418557815161416c888261410f565b975061417783614127565b925050600181019050614158565b5085935050505092915050565b600060a0820190506141a76000830188612cd2565b6141b460208301876140c5565b81810360408301526141c68186614134565b90506141d56060830185612e8b565b6141e26080830184612cd2565b9695505050505050565b600080fd5b6141fa82612b48565b810181811067ffffffffffffffff8211171561421957614218613ff9565b5b80604052505050565b600061422c612bb4565b905061423882826141f1565b919050565b600067ffffffffffffffff82111561425857614257613ff9565b5b602082029050602081019050919050565b600080fd5b60008151905061427d81612c30565b92915050565b60006142966142918461423d565b614222565b905080838252602082019050602084028301858111156142b9576142b8614269565b5b835b818110156142e257806142ce888261426e565b8452602084019350506020810190506142bb565b5050509392505050565b600082601f830112614301576143006141ec565b5b8151614311848260208601614283565b91505092915050565b6000602082840312156143305761432f612bbe565b5b600082015167ffffffffffffffff81111561434e5761434d612bc3565b5b61435a848285016142ec565b91505092915050565b600081905092915050565b50565b600061437e600083614363565b91506143898261436e565b600082019050919050565b600061439f82614371565b915081905091905056fea264697066735822122033cc888cf0ef343eec16a314650eb59ef5a93782421d4c218a76c9f0343ac62564736f6c63430008090033

Deployed Bytecode

0x6080604052600436106101f25760003560e01c8063850337621161010d578063b374df5c116100a0578063dd62ed3e1161006f578063dd62ed3e14610719578063e34d99bf14610756578063e6c1909b14610781578063e7b25bf2146107ac578063f2fde38b146107d5576101f9565b8063b374df5c14610671578063b62496f514610688578063cb4ca631146106c5578063ced695a414610702576101f9565b806395d89b41116100dc57806395d89b41146105a1578063a457c2d7146105cc578063a9059cbb14610609578063ae6753fd14610646576101f9565b806385033762146104e55780638da5cb5b1461050e5780639183faaa146105395780639332028c14610564576101f9565b806339509351116101855780635c896210116101545780635c8962101461042b57806370a0823114610468578063715018a6146104a55780637b9bae54146104bc576101f9565b806339509351146103855780634082671d146103c25780634cba54f2146103eb57806353eb3bcf14610414576101f9565b806323b872dd116101c157806323b872dd146102b757806329693fd8146102f4578063313ce5671461033157806335e82f3a1461035c576101f9565b806306fdde03146101fb578063095ea7b31461022657806318160ddd146102635780632369bf831461028e576101f9565b366101f957005b005b34801561020757600080fd5b506102106107fe565b60405161021d9190612b92565b60405180910390f35b34801561023257600080fd5b5061024d60048036038101906102489190612c5c565b610890565b60405161025a9190612cb7565b60405180910390f35b34801561026f57600080fd5b506102786108b3565b6040516102859190612ce1565b60405180910390f35b34801561029a57600080fd5b506102b560048036038101906102b09190612cfc565b6108bd565b005b3480156102c357600080fd5b506102de60048036038101906102d99190612d29565b610a43565b6040516102eb9190612cb7565b60405180910390f35b34801561030057600080fd5b5061031b60048036038101906103169190612cfc565b610a72565b6040516103289190612cb7565b60405180910390f35b34801561033d57600080fd5b50610346610ac8565b6040516103539190612d98565b60405180910390f35b34801561036857600080fd5b50610383600480360381019061037e9190612cfc565b610ad1565b005b34801561039157600080fd5b506103ac60048036038101906103a79190612c5c565b610ae5565b6040516103b99190612cb7565b60405180910390f35b3480156103ce57600080fd5b506103e960048036038101906103e49190612ddf565b610b1c565b005b3480156103f757600080fd5b50610412600480360381019061040d9190612cfc565b610c55565b005b34801561042057600080fd5b50610429610cb8565b005b34801561043757600080fd5b50610452600480360381019061044d9190612cfc565b610cd2565b60405161045f9190612ce1565b60405180910390f35b34801561047457600080fd5b5061048f600480360381019061048a9190612cfc565b610d1b565b60405161049c9190612ce1565b60405180910390f35b3480156104b157600080fd5b506104ba610d63565b005b3480156104c857600080fd5b506104e360048036038101906104de9190612e4b565b610d77565b005b3480156104f157600080fd5b5061050c60048036038101906105079190612cfc565b610e1e565b005b34801561051a57600080fd5b50610523610fa4565b6040516105309190612e9a565b60405180910390f35b34801561054557600080fd5b5061054e610fce565b60405161055b9190612e9a565b60405180910390f35b34801561057057600080fd5b5061058b60048036038101906105869190612cfc565b610ff8565b6040516105989190612cb7565b60405180910390f35b3480156105ad57600080fd5b506105b661104e565b6040516105c39190612b92565b60405180910390f35b3480156105d857600080fd5b506105f360048036038101906105ee9190612c5c565b6110e0565b6040516106009190612cb7565b60405180910390f35b34801561061557600080fd5b50610630600480360381019061062b9190612c5c565b611157565b60405161063d9190612cb7565b60405180910390f35b34801561065257600080fd5b5061065b61117a565b6040516106689190612ce1565b60405180910390f35b34801561067d57600080fd5b506106866111ae565b005b34801561069457600080fd5b506106af60048036038101906106aa9190612cfc565b6111f6565b6040516106bc9190612cb7565b60405180910390f35b3480156106d157600080fd5b506106ec60048036038101906106e79190612cfc565b611216565b6040516106f99190612cb7565b60405180910390f35b34801561070e57600080fd5b5061071761126c565b005b34801561072557600080fd5b50610740600480360381019061073b9190612eb5565b611286565b60405161074d9190612ce1565b60405180910390f35b34801561076257600080fd5b5061076b61130d565b6040516107789190612e9a565b60405180910390f35b34801561078d57600080fd5b50610796611337565b6040516107a39190612cb7565b60405180910390f35b3480156107b857600080fd5b506107d360048036038101906107ce9190612e4b565b61134e565b005b3480156107e157600080fd5b506107fc60048036038101906107f79190612cfc565b6113f1565b005b60606003805461080d90612f24565b80601f016020809104026020016040519081016040528092919081815260200182805461083990612f24565b80156108865780601f1061085b57610100808354040283529160200191610886565b820191906000526020600020905b81548152906001019060200180831161086957829003601f168201915b5050505050905090565b60008061089b611489565b90506108a8818585611491565b600191505092915050565b6000600254905090565b6108c561165c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610935576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092c90612fc8565b60405180910390fd5b61dead73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156109a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099d9061305a565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2e906130ec565b60405180910390fd5b610a40816116da565b50565b600080610a4e611489565b9050610a5b858285611755565b610a668585856117e1565b60019150509392505050565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60006012905090565b610ad961165c565b610ae281611ee2565b50565b600080610af0611489565b9050610b11818585610b028589611286565b610b0c919061313b565b611491565b600191505092915050565b610b2461165c565b7f00000000000000000000000000000000000000000000000000000000000000f560ff168260ff161115610b8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8490613229565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000560ff168160ff161115610bf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bed906132bb565b60405180910390fd5b60008183610c0491906132db565b60ff1611610c47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3e906133aa565b60405180910390fd5b610c518282611f45565b5050565b610c5d61165c565b6001600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610cc061165c565b610cc8611fd6565b610cd0612020565b565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610d6b61165c565b610d756000612071565b565b610d7f61165c565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e079061343c565b60405180910390fd5b610e1a8282612137565b5050565b610e2661165c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8d906134ce565b60405180910390fd5b61dead73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efe90613560565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8f906130ec565b60405180910390fd5b610fa1816121cb565b50565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60606004805461105d90612f24565b80601f016020809104026020016040519081016040528092919081815260200182805461108990612f24565b80156110d65780601f106110ab576101008083540402835291602001916110d6565b820191906000526020600020905b8154815290600101906020018083116110b957829003601f168201915b5050505050905090565b6000806110eb611489565b905060006110f98286611286565b90508381101561113e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611135906135f2565b60405180910390fd5b61114b8286868403611491565b60019250505092915050565b600080611162611489565b905061116f8185856117e1565b600191505092915050565b60006005601a9054906101000a900460ff16600560199054906101000a900460ff166111a691906132db565b60ff16905090565b6111b661165c565b6001600f60006101000a81548160ff0219169083151502179055506111d9612268565b6000600f60006101000a81548160ff021916908315150217905550565b600a6020528060005260406000206000915054906101000a900460ff1681565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61127461165c565b61127c6122be565b611284612307565b565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600560149054906101000a900460ff16905090565b61135661165c565b600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156113e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113da906136aa565b60405180910390fd5b6113ed8282612358565b5050565b6113f961165c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611469576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114609061373c565b60405180910390fd5b61147281610c55565b61147d81600161134e565b61148681612071565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611501576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f8906137ce565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611571576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156890613860565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161164f9190612ce1565b60405180910390a3505050565b611664611489565b73ffffffffffffffffffffffffffffffffffffffff16611682610fa4565b73ffffffffffffffffffffffffffffffffffffffff16146116d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116cf906138cc565b60405180910390fd5b565b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f70f1e4f570b51e464910762fee3d96ad08b99a90ce9c27a6036b0f4627aeda2d8160405161174a9190612e9a565b60405180910390a150565b60006117618484611286565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146117db57818110156117cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c490613938565b60405180910390fd5b6117da8484848403611491565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611851576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611848906139ca565b60405180910390fd5b60008111611894576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188b90613a5c565b60405180910390fd5b600f60009054906101000a900460ff161580156118be57506118bd6118b830610d1b565b6123ec565b5b80156119135750600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611957576001600f60006101000a81548160ff02191690831515021790555061193b612268565b6000600f60006101000a81548160ff0219169083151502179055505b6000819050600f60009054906101000a900460ff16611ed157600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611b8657600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611a4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4690613b14565b60405180910390fd5b600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611b415743600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415611b40576001600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5b43600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611d0f57600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611cca5743600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415611cc9576001600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5b43600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611db05750600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611ed057611dbd611337565b8015611e135750600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611e695750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611ecf576000611e7982612410565b90506000611e8683612444565b9050808285611e959190613b34565b611e9f9190613b34565b925060008183611eaf919061313b565b1115611ecc57611ecb86308385611ec6919061313b565b612478565b5b50505b5b5b611edc848483612478565b50505050565b611eea61165c565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b81600560196101000a81548160ff021916908360ff160217905550806005601a6101000a81548160ff021916908360ff1602179055507fa8ee157eb2a9aa895d74df4d2d3bc0ad165ff3162f8ec46a4ecf602dd5c48fda600560199054906101000a900460ff166005601a9054906101000a900460ff16604051611fca929190613ba3565b60405180910390a15050565b611fde611337565b1561201e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201590613c3e565b60405180910390fd5b565b612028611fd6565b6001600560146101000a81548160ff0219169083151502179055507fd2e80fb3f28dfb650beb9c059dadd2a8936a8bdc1abd1563608cd49227a0902160405160405180910390a1565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f2df49817e5aafe4d3dd7d0c8192865b7034d8870ed49ac24a9520f3057bb5f2482826040516121bf929190613c5e565b60405180910390a15050565b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f292c0d8d8c63a0a0a42cc1103baf921b3f13ea455e3298dbcf67e3edba8a6a38600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660405161225d9190613cdc565b60405180910390a150565b600061227330610d1b565b9050600060058060159054906101000a900463ffffffff1663ffffffff1661229b9190613cf7565b9050808211156122a9578091505b6122b2826126f0565b6122ba612962565b5050565b6122c6611337565b612305576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122fc90613dc3565b60405180910390fd5b565b61230f6122be565b6000600560146101000a81548160ff0219169083151502179055507f7a14a3188411c2f406ce4721233750b4b11e612569f9fa80a35b1cb91bb2e49e60405160405180910390a1565b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507ff14bd650485d6a031eba0f22da79fbebf9dc98a771adcbde6b4abe2ba590afdb82826040516123e0929190613c5e565b60405180910390a15050565b6000600560159054906101000a900463ffffffff1663ffffffff1682119050919050565b60006103e8600560199054906101000a900460ff1660ff16836124339190613cf7565b61243d9190613e12565b9050919050565b60006103e86005601a9054906101000a900460ff1660ff16836124679190613cf7565b6124719190613e12565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156124e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124df90613eb5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612558576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254f90613f47565b60405180910390fd5b612563838383612ab1565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156125e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e090613fd9565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516126d79190612ce1565b60405180910390a36126ea848484612ab6565b50505050565b6000600267ffffffffffffffff81111561270d5761270c613ff9565b5b60405190808252806020026020018201604052801561273b5781602001602082028036833780820191505090505b509050308160008151811061275357612752614028565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156127f357600080fd5b505afa158015612807573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061282b919061406c565b8160018151811061283f5761283e614028565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506128a4307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611491565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff166318cbafe58360008430426040518663ffffffff1660e01b8152600401612906959493929190614192565b600060405180830381600087803b15801561292057600080fd5b505af1158015612934573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061295d919061431a565b505050565b6000479050600080821115612aad57600061297c83612abb565b90506000818461298c9190613b34565b9050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516129d490614394565b60006040518083038185875af1925050503d8060008114612a11576040519150601f19603f3d011682016040523d82523d6000602084013e612a16565b606091505b505080935050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051612a6290614394565b60006040518083038185875af1925050503d8060008114612a9f576040519150601f19603f3d011682016040523d82523d6000602084013e612aa4565b606091505b50508093505050505b5050565b505050565b505050565b600080612ac661117a565b905080600560199054906101000a900460ff1660ff1684612ae79190613cf7565b612af19190613e12565b915050919050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612b33578082015181840152602081019050612b18565b83811115612b42576000848401525b50505050565b6000601f19601f8301169050919050565b6000612b6482612af9565b612b6e8185612b04565b9350612b7e818560208601612b15565b612b8781612b48565b840191505092915050565b60006020820190508181036000830152612bac8184612b59565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612bf382612bc8565b9050919050565b612c0381612be8565b8114612c0e57600080fd5b50565b600081359050612c2081612bfa565b92915050565b6000819050919050565b612c3981612c26565b8114612c4457600080fd5b50565b600081359050612c5681612c30565b92915050565b60008060408385031215612c7357612c72612bbe565b5b6000612c8185828601612c11565b9250506020612c9285828601612c47565b9150509250929050565b60008115159050919050565b612cb181612c9c565b82525050565b6000602082019050612ccc6000830184612ca8565b92915050565b612cdb81612c26565b82525050565b6000602082019050612cf66000830184612cd2565b92915050565b600060208284031215612d1257612d11612bbe565b5b6000612d2084828501612c11565b91505092915050565b600080600060608486031215612d4257612d41612bbe565b5b6000612d5086828701612c11565b9350506020612d6186828701612c11565b9250506040612d7286828701612c47565b9150509250925092565b600060ff82169050919050565b612d9281612d7c565b82525050565b6000602082019050612dad6000830184612d89565b92915050565b612dbc81612d7c565b8114612dc757600080fd5b50565b600081359050612dd981612db3565b92915050565b60008060408385031215612df657612df5612bbe565b5b6000612e0485828601612dca565b9250506020612e1585828601612dca565b9150509250929050565b612e2881612c9c565b8114612e3357600080fd5b50565b600081359050612e4581612e1f565b92915050565b60008060408385031215612e6257612e61612bbe565b5b6000612e7085828601612c11565b9250506020612e8185828601612e36565b9150509250929050565b612e9481612be8565b82525050565b6000602082019050612eaf6000830184612e8b565b92915050565b60008060408385031215612ecc57612ecb612bbe565b5b6000612eda85828601612c11565b9250506020612eeb85828601612c11565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612f3c57607f821691505b60208210811415612f5057612f4f612ef5565b5b50919050565b7f54617861626c65546f6b656e3a2043616e6e6f7420736574206d61726b65746960008201527f6e67206164647265737320746f20300000000000000000000000000000000000602082015250565b6000612fb2602f83612b04565b9150612fbd82612f56565b604082019050919050565b60006020820190508181036000830152612fe181612fa5565b9050919050565b7f54617861626c65546f6b656e3a2043616e6e6f7420736574206d61726b65746960008201527f6e67206164647265737320746f20646561642061646472657373000000000000602082015250565b6000613044603a83612b04565b915061304f82612fe8565b604082019050919050565b6000602082019050818103600083015261307381613037565b9050919050565b7f54617861626c65546f6b656e3a204d61726b6574696e6720616e64206465762060008201527f616464726573732063616e6e6f74206265207468652073616d65000000000000602082015250565b60006130d6603a83612b04565b91506130e18261307a565b604082019050919050565b60006020820190508181036000830152613105816130c9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061314682612c26565b915061315183612c26565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156131865761318561310c565b5b828201905092915050565b7f54617861626c65546f6b656e3a2043616e6e6f7420696e637265617365206d6160008201527f726b6574696e672074617820726174652061626f766520696e697469616c207260208201527f6174652e00000000000000000000000000000000000000000000000000000000604082015250565b6000613213604483612b04565b915061321e82613191565b606082019050919050565b6000602082019050818103600083015261324281613206565b9050919050565b7f54617861626c65546f6b656e3a2043616e6e6f7420696e63726561736520646560008201527f762074617820726174652061626f766520696e697469616c20726174652e0000602082015250565b60006132a5603e83612b04565b91506132b082613249565b604082019050919050565b600060208201905081810360008301526132d481613298565b9050919050565b60006132e682612d7c565b91506132f183612d7c565b92508260ff038211156133075761330661310c565b5b828201905092915050565b7f54617861626c65546f6b656e3a2043616e6e6f7420726564756365207461786560008201527f7320746f2f62656c6f7720302e2044697361626c6520746178657320696e737460208201527f6561642e00000000000000000000000000000000000000000000000000000000604082015250565b6000613394604483612b04565b915061339f82613312565b606082019050919050565b600060208201905081810360008301526133c381613387565b9050919050565b7f54617861626c65546f6b656e3a2043616e6e6f74206368616e6765207374617460008201527f7573206f6620626173652074726164696e672070616972000000000000000000602082015250565b6000613426603783612b04565b9150613431826133ca565b604082019050919050565b6000602082019050818103600083015261345581613419565b9050919050565b7f54617861626c65546f6b656e3a2043616e6e6f7420736574206465762061646460008201527f7265737320746f20300000000000000000000000000000000000000000000000602082015250565b60006134b8602983612b04565b91506134c38261345c565b604082019050919050565b600060208201905081810360008301526134e7816134ab565b9050919050565b7f54617861626c65546f6b656e3a2043616e6e6f7420736574206465762061646460008201527f7265737320746f20646561642061646472657373000000000000000000000000602082015250565b600061354a603483612b04565b9150613555826134ee565b604082019050919050565b600060208201905081810360008301526135798161353d565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006135dc602583612b04565b91506135e782613580565b604082019050919050565b6000602082019050818103600083015261360b816135cf565b9050919050565b7f54617861626c65546f6b656e3a2043616e6e6f74206368616e6765206578636c60008201527f7564656446726f6d54617820737461747573206f66206261736520747261646960208201527f6e67207061697200000000000000000000000000000000000000000000000000604082015250565b6000613694604783612b04565b915061369f82613612565b606082019050919050565b600060208201905081810360008301526136c381613687565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613726602683612b04565b9150613731826136ca565b604082019050919050565b6000602082019050818103600083015261375581613719565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006137b8602483612b04565b91506137c38261375c565b604082019050919050565b600060208201905081810360008301526137e7816137ab565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061384a602283612b04565b9150613855826137ee565b604082019050919050565b600060208201905081810360008301526138798161383d565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006138b6602083612b04565b91506138c182613880565b602082019050919050565b600060208201905081810360008301526138e5816138a9565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613922601d83612b04565b915061392d826138ec565b602082019050919050565b6000602082019050818103600083015261395181613915565b9050919050565b7f45524332303a2043616e6e6f74207472616e736665722066726f6d207468652060008201527f7a65726f20616464726573730000000000000000000000000000000000000000602082015250565b60006139b4602c83612b04565b91506139bf82613958565b604082019050919050565b600060208201905081810360008301526139e3816139a7565b9050919050565b7f45524332303a204d757374207472616e73666572206d6f7265207468616e207a60008201527f65726f0000000000000000000000000000000000000000000000000000000000602082015250565b6000613a46602383612b04565b9150613a51826139ea565b604082019050919050565b60006020820190508181036000830152613a7581613a39565b9050919050565b7f424554533a2054686973206164647265737320697320626c61636b6c6973746560008201527f642066726f6d20627579696e672e20596f752063616e20616c7761797320736560208201527f6c6c20616e7920746f6b656e7320796f75206f776e0000000000000000000000604082015250565b6000613afe605583612b04565b9150613b0982613a7c565b606082019050919050565b60006020820190508181036000830152613b2d81613af1565b9050919050565b6000613b3f82612c26565b9150613b4a83612c26565b925082821015613b5d57613b5c61310c565b5b828203905092915050565b6000819050919050565b6000613b8d613b88613b8384612d7c565b613b68565b612c26565b9050919050565b613b9d81613b72565b82525050565b6000604082019050613bb86000830185613b94565b613bc56020830184613b94565b9392505050565b7f54617861626c65546f6b656e3a20546178206d7573742062652064697361626c60008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b6000613c28602283612b04565b9150613c3382613bcc565b604082019050919050565b60006020820190508181036000830152613c5781613c1b565b9050919050565b6000604082019050613c736000830185612e8b565b613c806020830184612ca8565b9392505050565b6000613ca2613c9d613c9884612bc8565b613b68565b612bc8565b9050919050565b6000613cb482613c87565b9050919050565b6000613cc682613ca9565b9050919050565b613cd681613cbb565b82525050565b6000602082019050613cf16000830184613ccd565b92915050565b6000613d0282612c26565b9150613d0d83612c26565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613d4657613d4561310c565b5b828202905092915050565b7f54617861626c65546f6b656e3a20546178206d75737420626520656e61626c6560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b6000613dad602183612b04565b9150613db882613d51565b604082019050919050565b60006020820190508181036000830152613ddc81613da0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613e1d82612c26565b9150613e2883612c26565b925082613e3857613e37613de3565b5b828204905092915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613e9f602583612b04565b9150613eaa82613e43565b604082019050919050565b60006020820190508181036000830152613ece81613e92565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613f31602383612b04565b9150613f3c82613ed5565b604082019050919050565b60006020820190508181036000830152613f6081613f24565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613fc3602683612b04565b9150613fce82613f67565b604082019050919050565b60006020820190508181036000830152613ff281613fb6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061406681612bfa565b92915050565b60006020828403121561408257614081612bbe565b5b600061409084828501614057565b91505092915050565b6000819050919050565b60006140be6140b96140b484614099565b613b68565b612c26565b9050919050565b6140ce816140a3565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61410981612be8565b82525050565b600061411b8383614100565b60208301905092915050565b6000602082019050919050565b600061413f826140d4565b61414981856140df565b9350614154836140f0565b8060005b8381101561418557815161416c888261410f565b975061417783614127565b925050600181019050614158565b5085935050505092915050565b600060a0820190506141a76000830188612cd2565b6141b460208301876140c5565b81810360408301526141c68186614134565b90506141d56060830185612e8b565b6141e26080830184612cd2565b9695505050505050565b600080fd5b6141fa82612b48565b810181811067ffffffffffffffff8211171561421957614218613ff9565b5b80604052505050565b600061422c612bb4565b905061423882826141f1565b919050565b600067ffffffffffffffff82111561425857614257613ff9565b5b602082029050602081019050919050565b600080fd5b60008151905061427d81612c30565b92915050565b60006142966142918461423d565b614222565b905080838252602082019050602084028301858111156142b9576142b8614269565b5b835b818110156142e257806142ce888261426e565b8452602084019350506020810190506142bb565b5050509392505050565b600082601f830112614301576143006141ec565b5b8151614311848260208601614283565b91505092915050565b6000602082840312156143305761432f612bbe565b5b600082015167ffffffffffffffff81111561434e5761434d612bc3565b5b61435a848285016142ec565b91505092915050565b600081905092915050565b50565b600061437e600083614363565b91506143898261436e565b600082019050919050565b600061439f82614371565b915081905091905056fea264697066735822122033cc888cf0ef343eec16a314650eb59ef5a93782421d4c218a76c9f0343ac62564736f6c63430008090033

Deployed Bytecode Sourcemap

36674:5958:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9471:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11822:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10591:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32155:483;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12603:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38357:138;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10433:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38503:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13307:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31383:552;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38787:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30982:85;;;;;;;;;;;;;:::i;:::-;;38920:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10762:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2882:103;;;;;;;;;;;;;:::i;:::-;;33089:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32646:435;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2234:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31943:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38634:145;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9690:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14048:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11095:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31264:111;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39071:151;;;;;;;;;;;;;:::i;:::-;;30007:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33615:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31075:86;;;;;;;;;;;;;:::i;:::-;;11351:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32055:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31166:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33336:271;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39230:298;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9471:100;9525:13;9558:5;9551:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9471:100;:::o;11822:201::-;11905:4;11922:13;11938:12;:10;:12::i;:::-;11922:28;;11961:32;11970:5;11977:7;11986:6;11961:8;:32::i;:::-;12011:4;12004:11;;;11822:201;;;;:::o;10591:108::-;10652:7;10679:12;;10672:19;;10591:108;:::o;32155:483::-;2120:13;:11;:13::i;:::-;32283:1:::1;32252:33;;:19;:33;;;;32244:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;32387:6;32356:38;;:19;:38;;;;32348:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;32499:11;;;;;;;;;;;32476:34;;:19;:34;;;;32468:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;32586:44;32610:19;32586:23;:44::i;:::-;32155:483:::0;:::o;12603:295::-;12734:4;12751:15;12769:12;:10;:12::i;:::-;12751:30;;12792:38;12808:4;12814:7;12823:6;12792:15;:38::i;:::-;12841:27;12851:4;12857:2;12861:6;12841:9;:27::i;:::-;12886:4;12879:11;;;12603:295;;;;;:::o;38357:138::-;38434:4;38458:21;:29;38480:6;38458:29;;;;;;;;;;;;;;;;;;;;;;;;;38451:36;;38357:138;;;:::o;10433:93::-;10491:5;10516:2;10509:9;;10433:93;:::o;38503:123::-;2120:13;:11;:13::i;:::-;38583:35:::1;38611:6;38583:27;:35::i;:::-;38503:123:::0;:::o;13307:238::-;13395:4;13412:13;13428:12;:10;:12::i;:::-;13412:28;;13451:64;13460:5;13467:7;13504:10;13476:25;13486:5;13493:7;13476:9;:25::i;:::-;:38;;;;:::i;:::-;13451:8;:64::i;:::-;13533:4;13526:11;;;13307:238;;;;:::o;31383:552::-;2120:13;:11;:13::i;:::-;31513:24:::1;31490:47;;:19;:47;;;;31482:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;31646:18;31629:35;;:13;:35;;;;31621:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;31790:1;31773:13;31751:19;:35;;;;:::i;:::-;31750:41;;;31742:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;31877:50;31892:19;31913:13;31877:14;:50::i;:::-;31383:552:::0;;:::o;38787:125::-;2120:13;:11;:13::i;:::-;38900:4:::1;38864:25;:33;38890:6;38864:33;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;38787:125:::0;:::o;30982:85::-;2120:13;:11;:13::i;:::-;30851:21:::1;:19;:21::i;:::-;31047:12:::2;:10;:12::i;:::-;30982:85::o:0;38920:143::-;38996:4;39020:27;:35;39048:6;39020:35;;;;;;;;;;;;;;;;39013:42;;38920:143;;;:::o;10762:127::-;10836:7;10863:9;:18;10873:7;10863:18;;;;;;;;;;;;;;;;10856:25;;10762:127;;;:::o;2882:103::-;2120:13;:11;:13::i;:::-;2947:30:::1;2974:1;2947:18;:30::i;:::-;2882:103::o:0;33089:239::-;2120:13;:11;:13::i;:::-;33193:16:::1;;;;;;;;;;;33185:24;;:4;:24;;;;33177:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;33282:38;33307:4;33313:6;33282:24;:38::i;:::-;33089:239:::0;;:::o;32646:435::-;2120:13;:11;:13::i;:::-;32756:1:::1;32731:27;;:13;:27;;;;32723:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;32848:6;32823:32;;:13;:32;;;;32815:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;32948:17;;;;;;;;;;;32931:34;;:13;:34;;;;32923:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;33041:32;33059:13;33041:17;:32::i;:::-;32646:435:::0;:::o;2234:87::-;2280:7;2307:6;;;;;;;;;;;2300:13;;2234:87;:::o;31943:104::-;31995:7;32022:17;;;;;;;;;;;32015:24;;31943:104;:::o;38634:145::-;38714:4;38738:25;:33;38764:6;38738:33;;;;;;;;;;;;;;;;;;;;;;;;;38731:40;;38634:145;;;:::o;9690:104::-;9746:13;9779:7;9772:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9690:104;:::o;14048:436::-;14141:4;14158:13;14174:12;:10;:12::i;:::-;14158:28;;14197:24;14224:25;14234:5;14241:7;14224:9;:25::i;:::-;14197:52;;14288:15;14268:16;:35;;14260:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;14381:60;14390:5;14397:7;14425:15;14406:16;:34;14381:8;:60::i;:::-;14472:4;14465:11;;;;14048:436;;;;:::o;11095:193::-;11174:4;11191:13;11207:12;:10;:12::i;:::-;11191:28;;11230;11240:5;11247:2;11251:6;11230:9;:28::i;:::-;11276:4;11269:11;;;11095:193;;;;:::o;31264:111::-;31312:4;31356:11;;;;;;;;;;;31336:17;;;;;;;;;;;:31;;;;:::i;:::-;31329:38;;;;31264:111;:::o;39071:151::-;2120:13;:11;:13::i;:::-;39142:4:::1;39121:18;;:25;;;;;;;;;;;;;;;;;;39157:20;:18;:20::i;:::-;39209:5;39188:18;;:26;;;;;;;;;;;;;;;;;;39071:151::o:0;30007:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;33615:120::-;33679:4;33703:16;:24;33720:6;33703:24;;;;;;;;;;;;;;;;;;;;;;;;;33696:31;;33615:120;;;:::o;31075:86::-;2120:13;:11;:13::i;:::-;30934:20:::1;:18;:20::i;:::-;31140:13:::2;:11;:13::i;:::-;31075:86::o:0;11351:151::-;11440:7;11467:11;:18;11479:5;11467:18;;;;;;;;;;;;;;;:27;11486:7;11467:27;;;;;;;;;;;;;;;;11460:34;;11351:151;;;;:::o;32055:92::-;32101:7;32128:11;;;;;;;;;;;32121:18;;32055:92;:::o;31166:90::-;31211:4;31235:13;;;;;;;;;;;31228:20;;31166:90;:::o;33336:271::-;2120:13;:11;:13::i;:::-;33433:25:::1;:33;33459:6;33433:33;;;;;;;;;;;;;;;;;;;;;;;;;33432:34;33424:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;33555:44;33584:6;33592;33555:28;:44::i;:::-;33336:271:::0;;:::o;39230:298::-;2120:13;:11;:13::i;:::-;39340:1:::1;39320:22;;:8;:22;;;;39312:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;39398:33;39422:8;39398:23;:33::i;:::-;39442:37;39464:8;39474:4;39442:21;:37::i;:::-;39492:28;39511:8;39492:18;:28::i;:::-;39230:298:::0;:::o;781:98::-;834:7;861:10;854:17;;781:98;:::o;18075:380::-;18228:1;18211:19;;:5;:19;;;;18203:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18309:1;18290:21;;:7;:21;;;;18282:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18393:6;18363:11;:18;18375:5;18363:18;;;;;;;;;;;;;;;:27;18382:7;18363:27;;;;;;;;;;;;;;;:36;;;;18431:7;18415:32;;18424:5;18415:32;;;18440:6;18415:32;;;;;;:::i;:::-;;;;;;;;18075:380;;;:::o;2399:132::-;2474:12;:10;:12::i;:::-;2463:23;;:7;:5;:7::i;:::-;:23;;;2455:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2399:132::o;34861:198::-;34971:19;34943:17;;:48;;;;;;;;;;;;;;;;;;35007:44;35031:19;35007:44;;;;;;:::i;:::-;;;;;;;;34861:198;:::o;18746:453::-;18881:24;18908:25;18918:5;18925:7;18908:9;:25::i;:::-;18881:52;;18968:17;18948:16;:37;18944:248;;19030:6;19010:16;:26;;19002:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19114:51;19123:5;19130:7;19158:6;19139:16;:25;19114:8;:51::i;:::-;18944:248;18870:329;18746:453;;;:::o;39675:2164::-;39789:1;39773:18;;:4;:18;;;;39765:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;39868:1;39859:6;:10;39851:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;39927:18;;;;;;;;;;;39926:19;:71;;;;;39949:48;39972:24;39990:4;39972:9;:24::i;:::-;39949:22;:48::i;:::-;39926:71;:104;;;;;40001:25;:29;40027:2;40001:29;;;;;;;;;;;;;;;;;;;;;;;;;39926:104;39922:238;;;40068:4;40047:18;;:25;;;;;;;;;;;;;;;;;;40087:20;:18;:20::i;:::-;40143:5;40122:18;;:26;;;;;;;;;;;;;;;;;;39922:238;40172:21;40196:6;40172:30;;40220:18;;;;;;;;;;;40215:1561;;40259:25;:31;40285:4;40259:31;;;;;;;;;;;;;;;;;;;;;;;;;40255:513;;;40320:21;:25;40342:2;40320:25;;;;;;;;;;;;;;;;;;;;;;;;;40319:26;40311:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;40477:25;:29;40503:2;40477:29;;;;;;;;;;;;;;;;;;;;;;;;;40472:214;;40570:12;40535:27;:31;40563:2;40535:31;;;;;;;;;;;;;;;;:47;40531:136;;;40639:4;40611:21;:25;40633:2;40611:25;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;40531:136;40472:214;40740:12;40706:27;:31;40734:2;40706:31;;;;;;;;;;;;;;;:46;;;;40255:513;40788:25;:29;40814:2;40788:29;;;;;;;;;;;;;;;;;;;;;;;;;40784:358;;;40843:25;:31;40869:4;40843:31;;;;;;;;;;;;;;;;;;;;;;;;;40838:220;;40940:12;40903:27;:33;40931:4;40903:33;;;;;;;;;;;;;;;;:49;40899:140;;;41011:4;40981:21;:27;41003:4;40981:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;40899:140;40838:220;41114:12;41078:27;:33;41106:4;41078:33;;;;;;;;;;;;;;;:48;;;;40784:358;41162:25;:31;41188:4;41162:31;;;;;;;;;;;;;;;;;;;;;;;;;:64;;;;41197:25;:29;41223:2;41197:29;;;;;;;;;;;;;;;;;;;;;;;;;41162:64;41158:607;;;41251:14;:12;:14::i;:::-;:41;;;;;41270:16;:22;41287:4;41270:22;;;;;;;;;;;;;;;;;;;;;;;;;41269:23;41251:41;:66;;;;;41297:16;:20;41314:2;41297:20;;;;;;;;;;;;;;;;;;;;;;;;;41296:21;41251:66;41247:503;;;41342:20;41365:37;41385:16;41365:19;:37::i;:::-;41342:60;;41425:14;41442:31;41456:16;41442:13;:31::i;:::-;41425:48;;41542:9;41524:15;41515:6;:24;;;;:::i;:::-;:36;;;;:::i;:::-;41496:55;;41612:1;41599:9;41581:15;:27;;;;:::i;:::-;41580:33;41576:155;;;41642:65;41658:4;41672;41697:9;41679:15;:27;;;;:::i;:::-;41642:15;:65::i;:::-;41576:155;41319:431;;41247:503;41158:607;40215:1561;41788:43;41804:4;41810:2;41814:16;41788:15;:43::i;:::-;39754:2085;39675:2164;;;:::o;39540:127::-;2120:13;:11;:13::i;:::-;39654:5:::1;39622:21;:29;39644:6;39622:29;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;39540:127:::0;:::o;34612:241::-;34724:19;34704:17;;:39;;;;;;;;;;;;;;;;;;34768:13;34754:11;;:27;;;;;;;;;;;;;;;;;;34799:46;34814:17;;;;;;;;;;;34833:11;;;;;;;;;;;34799:46;;;;;;;:::i;:::-;;;;;;;;34612:241;;:::o;33740:126::-;33805:14;:12;:14::i;:::-;33804:15;33796:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;33740:126::o;33999:114::-;30851:21;:19;:21::i;:::-;34073:4:::1;34057:13;;:20;;;;;;;;;;;;;;;;;;34093:12;;;;;;;;;;33999:114::o:0;3501:191::-;3575:16;3594:6;;;;;;;;;;;3575:25;;3620:8;3611:6;;:17;;;;;;;;;;;;;;;;;;3675:8;3644:40;;3665:8;3644:40;;;;;;;;;;;;3564:128;3501:191;:::o;35440:192::-;35558:9;35524:25;:31;35550:4;35524:31;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;35583:41;35608:4;35614:9;35583:41;;;;;;;:::i;:::-;;;;;;;;35440:192;;:::o;35067:160::-;35159:13;35137:11;;:36;;;;;;;;;;;;;;;;;;35189:30;35207:11;;;;;;;;;;;35189:30;;;;;;:::i;:::-;;;;;;;;35067:160;:::o;41847:344::-;41896:17;41916:24;41934:4;41916:9;:24::i;:::-;41896:44;;41951:20;41999:1;41979:16;;;;;;;;;;;41974:22;;:26;;;;:::i;:::-;41951:49;;42030:15;42015:12;:30;42011:93;;;42077:15;42062:30;;42011:93;42116:31;42134:12;42116:17;:31::i;:::-;42158:25;:23;:25::i;:::-;41885:306;;41847:344::o;33871:123::-;33934:14;:12;:14::i;:::-;33926:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;33871:123::o;34118:116::-;30934:20;:18;:20::i;:::-;34192:5:::1;34176:13;;:21;;;;;;;;;;;;;;;;;;34213:13;;;;;;;;;;34118:116::o:0;35235:197::-;35352:9;35325:16;:24;35342:6;35325:24;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;35377:47;35406:6;35414:9;35377:47;;;;;;;:::i;:::-;;;;;;;;35235:197;;:::o;34461:143::-;34538:4;34580:16;;;;;;;;;;;34562:34;;:15;:34;34555:41;;34461:143;;;:::o;35640:132::-;35705:4;35760;35739:17;;;;;;;;;;;35730:26;;:6;:26;;;;:::i;:::-;35729:35;;;;:::i;:::-;35722:42;;35640:132;;;:::o;35780:120::-;35839:4;35888;35873:11;;;;;;;;;;;35864:20;;:6;:20;;;;:::i;:::-;35863:29;;;;:::i;:::-;35856:36;;35780:120;;;:::o;14954:840::-;15101:1;15085:18;;:4;:18;;;;15077:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15178:1;15164:16;;:2;:16;;;;15156:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;15233:38;15254:4;15260:2;15264:6;15233:20;:38::i;:::-;15284:19;15306:9;:15;15316:4;15306:15;;;;;;;;;;;;;;;;15284:37;;15355:6;15340:11;:21;;15332:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;15472:6;15458:11;:20;15440:9;:15;15450:4;15440:15;;;;;;;;;;;;;;;:38;;;;15675:6;15658:9;:13;15668:2;15658:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;15725:2;15710:26;;15719:4;15710:26;;;15729:6;15710:26;;;;;;:::i;:::-;;;;;;;;15749:37;15769:4;15775:2;15779:6;15749:19;:37::i;:::-;15066:728;14954:840;;;:::o;42199:357::-;42261:21;42299:1;42285:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42261:40;;42330:4;42312;42317:1;42312:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;42356:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42346:4;42351:1;42346:7;;;;;;;;:::i;:::-;;;;;;;:33;;;;;;;;;;;42392:58;42409:4;42424:16;42443:6;42392:8;:58::i;:::-;42461:16;:38;;;42500:6;42508:1;42511:4;42525;42532:15;42461:87;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;42250:306;42199:357;:::o;36122:486::-;36177:20;36200:21;36177:44;;36232:12;36279:1;36261:15;:19;36257:344;;;36297:20;36320:38;36342:15;36320:21;:38::i;:::-;36297:61;;36373:14;36408:15;36390;:33;;;;:::i;:::-;36373:50;;36462:17;;;;;;;;;;;36454:31;;36493:15;36454:59;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36440:73;;;;;36550:11;;;;;;;;;;;36542:25;;36575:9;36542:47;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36528:61;;;;;36282:319;;36257:344;36166:442;;36122:486::o;19799:125::-;;;;:::o;20528:124::-;;;;:::o;35908:206::-;35982:4;35999:18;36020:17;:15;:17::i;:::-;35999:38;;36093:13;36072:17;;;;;;;;;;;36056:33;;:13;:33;;;;:::i;:::-;36055:51;;;;:::i;:::-;36048:58;;;35908:206;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1397:75::-;1430:6;1463:2;1457:9;1447:19;;1397:75;:::o;1478:117::-;1587:1;1584;1577:12;1601:117;1710:1;1707;1700:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:118::-;3581:24;3599:5;3581:24;:::i;:::-;3576:3;3569:37;3494:118;;:::o;3618:222::-;3711:4;3749:2;3738:9;3734:18;3726:26;;3762:71;3830:1;3819:9;3815:17;3806:6;3762:71;:::i;:::-;3618:222;;;;:::o;3846:329::-;3905:6;3954:2;3942:9;3933:7;3929:23;3925:32;3922:119;;;3960:79;;:::i;:::-;3922:119;4080:1;4105:53;4150:7;4141:6;4130:9;4126:22;4105:53;:::i;:::-;4095:63;;4051:117;3846:329;;;;:::o;4181:619::-;4258:6;4266;4274;4323:2;4311:9;4302:7;4298:23;4294:32;4291:119;;;4329:79;;:::i;:::-;4291:119;4449:1;4474:53;4519:7;4510:6;4499:9;4495:22;4474:53;:::i;:::-;4464:63;;4420:117;4576:2;4602:53;4647:7;4638:6;4627:9;4623:22;4602:53;:::i;:::-;4592:63;;4547:118;4704:2;4730:53;4775:7;4766:6;4755:9;4751:22;4730:53;:::i;:::-;4720:63;;4675:118;4181:619;;;;;:::o;4806:86::-;4841:7;4881:4;4874:5;4870:16;4859:27;;4806:86;;;:::o;4898:112::-;4981:22;4997:5;4981:22;:::i;:::-;4976:3;4969:35;4898:112;;:::o;5016:214::-;5105:4;5143:2;5132:9;5128:18;5120:26;;5156:67;5220:1;5209:9;5205:17;5196:6;5156:67;:::i;:::-;5016:214;;;;:::o;5236:118::-;5307:22;5323:5;5307:22;:::i;:::-;5300:5;5297:33;5287:61;;5344:1;5341;5334:12;5287:61;5236:118;:::o;5360:135::-;5404:5;5442:6;5429:20;5420:29;;5458:31;5483:5;5458:31;:::i;:::-;5360:135;;;;:::o;5501:466::-;5565:6;5573;5622:2;5610:9;5601:7;5597:23;5593:32;5590:119;;;5628:79;;:::i;:::-;5590:119;5748:1;5773:51;5816:7;5807:6;5796:9;5792:22;5773:51;:::i;:::-;5763:61;;5719:115;5873:2;5899:51;5942:7;5933:6;5922:9;5918:22;5899:51;:::i;:::-;5889:61;;5844:116;5501:466;;;;;:::o;5973:116::-;6043:21;6058:5;6043:21;:::i;:::-;6036:5;6033:32;6023:60;;6079:1;6076;6069:12;6023:60;5973:116;:::o;6095:133::-;6138:5;6176:6;6163:20;6154:29;;6192:30;6216:5;6192:30;:::i;:::-;6095:133;;;;:::o;6234:468::-;6299:6;6307;6356:2;6344:9;6335:7;6331:23;6327:32;6324:119;;;6362:79;;:::i;:::-;6324:119;6482:1;6507:53;6552:7;6543:6;6532:9;6528:22;6507:53;:::i;:::-;6497:63;;6453:117;6609:2;6635:50;6677:7;6668:6;6657:9;6653:22;6635:50;:::i;:::-;6625:60;;6580:115;6234:468;;;;;:::o;6708:118::-;6795:24;6813:5;6795:24;:::i;:::-;6790:3;6783:37;6708:118;;:::o;6832:222::-;6925:4;6963:2;6952:9;6948:18;6940:26;;6976:71;7044:1;7033:9;7029:17;7020:6;6976:71;:::i;:::-;6832:222;;;;:::o;7060:474::-;7128:6;7136;7185:2;7173:9;7164:7;7160:23;7156:32;7153:119;;;7191:79;;:::i;:::-;7153:119;7311:1;7336:53;7381:7;7372:6;7361:9;7357:22;7336:53;:::i;:::-;7326:63;;7282:117;7438:2;7464:53;7509:7;7500:6;7489:9;7485:22;7464:53;:::i;:::-;7454:63;;7409:118;7060:474;;;;;:::o;7540:180::-;7588:77;7585:1;7578:88;7685:4;7682:1;7675:15;7709:4;7706:1;7699:15;7726:320;7770:6;7807:1;7801:4;7797:12;7787:22;;7854:1;7848:4;7844:12;7875:18;7865:81;;7931:4;7923:6;7919:17;7909:27;;7865:81;7993:2;7985:6;7982:14;7962:18;7959:38;7956:84;;;8012:18;;:::i;:::-;7956:84;7777:269;7726:320;;;:::o;8052:234::-;8192:34;8188:1;8180:6;8176:14;8169:58;8261:17;8256:2;8248:6;8244:15;8237:42;8052:234;:::o;8292:366::-;8434:3;8455:67;8519:2;8514:3;8455:67;:::i;:::-;8448:74;;8531:93;8620:3;8531:93;:::i;:::-;8649:2;8644:3;8640:12;8633:19;;8292:366;;;:::o;8664:419::-;8830:4;8868:2;8857:9;8853:18;8845:26;;8917:9;8911:4;8907:20;8903:1;8892:9;8888:17;8881:47;8945:131;9071:4;8945:131;:::i;:::-;8937:139;;8664:419;;;:::o;9089:245::-;9229:34;9225:1;9217:6;9213:14;9206:58;9298:28;9293:2;9285:6;9281:15;9274:53;9089:245;:::o;9340:366::-;9482:3;9503:67;9567:2;9562:3;9503:67;:::i;:::-;9496:74;;9579:93;9668:3;9579:93;:::i;:::-;9697:2;9692:3;9688:12;9681:19;;9340:366;;;:::o;9712:419::-;9878:4;9916:2;9905:9;9901:18;9893:26;;9965:9;9959:4;9955:20;9951:1;9940:9;9936:17;9929:47;9993:131;10119:4;9993:131;:::i;:::-;9985:139;;9712:419;;;:::o;10137:245::-;10277:34;10273:1;10265:6;10261:14;10254:58;10346:28;10341:2;10333:6;10329:15;10322:53;10137:245;:::o;10388:366::-;10530:3;10551:67;10615:2;10610:3;10551:67;:::i;:::-;10544:74;;10627:93;10716:3;10627:93;:::i;:::-;10745:2;10740:3;10736:12;10729:19;;10388:366;;;:::o;10760:419::-;10926:4;10964:2;10953:9;10949:18;10941:26;;11013:9;11007:4;11003:20;10999:1;10988:9;10984:17;10977:47;11041:131;11167:4;11041:131;:::i;:::-;11033:139;;10760:419;;;:::o;11185:180::-;11233:77;11230:1;11223:88;11330:4;11327:1;11320:15;11354:4;11351:1;11344:15;11371:305;11411:3;11430:20;11448:1;11430:20;:::i;:::-;11425:25;;11464:20;11482:1;11464:20;:::i;:::-;11459:25;;11618:1;11550:66;11546:74;11543:1;11540:81;11537:107;;;11624:18;;:::i;:::-;11537:107;11668:1;11665;11661:9;11654:16;;11371:305;;;;:::o;11682:292::-;11822:34;11818:1;11810:6;11806:14;11799:58;11891:34;11886:2;11878:6;11874:15;11867:59;11960:6;11955:2;11947:6;11943:15;11936:31;11682:292;:::o;11980:366::-;12122:3;12143:67;12207:2;12202:3;12143:67;:::i;:::-;12136:74;;12219:93;12308:3;12219:93;:::i;:::-;12337:2;12332:3;12328:12;12321:19;;11980:366;;;:::o;12352:419::-;12518:4;12556:2;12545:9;12541:18;12533:26;;12605:9;12599:4;12595:20;12591:1;12580:9;12576:17;12569:47;12633:131;12759:4;12633:131;:::i;:::-;12625:139;;12352:419;;;:::o;12777:249::-;12917:34;12913:1;12905:6;12901:14;12894:58;12986:32;12981:2;12973:6;12969:15;12962:57;12777:249;:::o;13032:366::-;13174:3;13195:67;13259:2;13254:3;13195:67;:::i;:::-;13188:74;;13271:93;13360:3;13271:93;:::i;:::-;13389:2;13384:3;13380:12;13373:19;;13032:366;;;:::o;13404:419::-;13570:4;13608:2;13597:9;13593:18;13585:26;;13657:9;13651:4;13647:20;13643:1;13632:9;13628:17;13621:47;13685:131;13811:4;13685:131;:::i;:::-;13677:139;;13404:419;;;:::o;13829:237::-;13867:3;13886:18;13902:1;13886:18;:::i;:::-;13881:23;;13918:18;13934:1;13918:18;:::i;:::-;13913:23;;14008:1;14002:4;13998:12;13995:1;13992:19;13989:45;;;14014:18;;:::i;:::-;13989:45;14058:1;14055;14051:9;14044:16;;13829:237;;;;:::o;14072:292::-;14212:34;14208:1;14200:6;14196:14;14189:58;14281:34;14276:2;14268:6;14264:15;14257:59;14350:6;14345:2;14337:6;14333:15;14326:31;14072:292;:::o;14370:366::-;14512:3;14533:67;14597:2;14592:3;14533:67;:::i;:::-;14526:74;;14609:93;14698:3;14609:93;:::i;:::-;14727:2;14722:3;14718:12;14711:19;;14370:366;;;:::o;14742:419::-;14908:4;14946:2;14935:9;14931:18;14923:26;;14995:9;14989:4;14985:20;14981:1;14970:9;14966:17;14959:47;15023:131;15149:4;15023:131;:::i;:::-;15015:139;;14742:419;;;:::o;15167:242::-;15307:34;15303:1;15295:6;15291:14;15284:58;15376:25;15371:2;15363:6;15359:15;15352:50;15167:242;:::o;15415:366::-;15557:3;15578:67;15642:2;15637:3;15578:67;:::i;:::-;15571:74;;15654:93;15743:3;15654:93;:::i;:::-;15772:2;15767:3;15763:12;15756:19;;15415:366;;;:::o;15787:419::-;15953:4;15991:2;15980:9;15976:18;15968:26;;16040:9;16034:4;16030:20;16026:1;16015:9;16011:17;16004:47;16068:131;16194:4;16068:131;:::i;:::-;16060:139;;15787:419;;;:::o;16212:228::-;16352:34;16348:1;16340:6;16336:14;16329:58;16421:11;16416:2;16408:6;16404:15;16397:36;16212:228;:::o;16446:366::-;16588:3;16609:67;16673:2;16668:3;16609:67;:::i;:::-;16602:74;;16685:93;16774:3;16685:93;:::i;:::-;16803:2;16798:3;16794:12;16787:19;;16446:366;;;:::o;16818:419::-;16984:4;17022:2;17011:9;17007:18;16999:26;;17071:9;17065:4;17061:20;17057:1;17046:9;17042:17;17035:47;17099:131;17225:4;17099:131;:::i;:::-;17091:139;;16818:419;;;:::o;17243:239::-;17383:34;17379:1;17371:6;17367:14;17360:58;17452:22;17447:2;17439:6;17435:15;17428:47;17243:239;:::o;17488:366::-;17630:3;17651:67;17715:2;17710:3;17651:67;:::i;:::-;17644:74;;17727:93;17816:3;17727:93;:::i;:::-;17845:2;17840:3;17836:12;17829:19;;17488:366;;;:::o;17860:419::-;18026:4;18064:2;18053:9;18049:18;18041:26;;18113:9;18107:4;18103:20;18099:1;18088:9;18084:17;18077:47;18141:131;18267:4;18141:131;:::i;:::-;18133:139;;17860:419;;;:::o;18285:224::-;18425:34;18421:1;18413:6;18409:14;18402:58;18494:7;18489:2;18481:6;18477:15;18470:32;18285:224;:::o;18515:366::-;18657:3;18678:67;18742:2;18737:3;18678:67;:::i;:::-;18671:74;;18754:93;18843:3;18754:93;:::i;:::-;18872:2;18867:3;18863:12;18856:19;;18515:366;;;:::o;18887:419::-;19053:4;19091:2;19080:9;19076:18;19068:26;;19140:9;19134:4;19130:20;19126:1;19115:9;19111:17;19104:47;19168:131;19294:4;19168:131;:::i;:::-;19160:139;;18887:419;;;:::o;19312:295::-;19452:34;19448:1;19440:6;19436:14;19429:58;19521:34;19516:2;19508:6;19504:15;19497:59;19590:9;19585:2;19577:6;19573:15;19566:34;19312:295;:::o;19613:366::-;19755:3;19776:67;19840:2;19835:3;19776:67;:::i;:::-;19769:74;;19852:93;19941:3;19852:93;:::i;:::-;19970:2;19965:3;19961:12;19954:19;;19613:366;;;:::o;19985:419::-;20151:4;20189:2;20178:9;20174:18;20166:26;;20238:9;20232:4;20228:20;20224:1;20213:9;20209:17;20202:47;20266:131;20392:4;20266:131;:::i;:::-;20258:139;;19985:419;;;:::o;20410:225::-;20550:34;20546:1;20538:6;20534:14;20527:58;20619:8;20614:2;20606:6;20602:15;20595:33;20410:225;:::o;20641:366::-;20783:3;20804:67;20868:2;20863:3;20804:67;:::i;:::-;20797:74;;20880:93;20969:3;20880:93;:::i;:::-;20998:2;20993:3;20989:12;20982:19;;20641:366;;;:::o;21013:419::-;21179:4;21217:2;21206:9;21202:18;21194:26;;21266:9;21260:4;21256:20;21252:1;21241:9;21237:17;21230:47;21294:131;21420:4;21294:131;:::i;:::-;21286:139;;21013:419;;;:::o;21438:223::-;21578:34;21574:1;21566:6;21562:14;21555:58;21647:6;21642:2;21634:6;21630:15;21623:31;21438:223;:::o;21667:366::-;21809:3;21830:67;21894:2;21889:3;21830:67;:::i;:::-;21823:74;;21906:93;21995:3;21906:93;:::i;:::-;22024:2;22019:3;22015:12;22008:19;;21667:366;;;:::o;22039:419::-;22205:4;22243:2;22232:9;22228:18;22220:26;;22292:9;22286:4;22282:20;22278:1;22267:9;22263:17;22256:47;22320:131;22446:4;22320:131;:::i;:::-;22312:139;;22039:419;;;:::o;22464:221::-;22604:34;22600:1;22592:6;22588:14;22581:58;22673:4;22668:2;22660:6;22656:15;22649:29;22464:221;:::o;22691:366::-;22833:3;22854:67;22918:2;22913:3;22854:67;:::i;:::-;22847:74;;22930:93;23019:3;22930:93;:::i;:::-;23048:2;23043:3;23039:12;23032:19;;22691:366;;;:::o;23063:419::-;23229:4;23267:2;23256:9;23252:18;23244:26;;23316:9;23310:4;23306:20;23302:1;23291:9;23287:17;23280:47;23344:131;23470:4;23344:131;:::i;:::-;23336:139;;23063:419;;;:::o;23488:182::-;23628:34;23624:1;23616:6;23612:14;23605:58;23488:182;:::o;23676:366::-;23818:3;23839:67;23903:2;23898:3;23839:67;:::i;:::-;23832:74;;23915:93;24004:3;23915:93;:::i;:::-;24033:2;24028:3;24024:12;24017:19;;23676:366;;;:::o;24048:419::-;24214:4;24252:2;24241:9;24237:18;24229:26;;24301:9;24295:4;24291:20;24287:1;24276:9;24272:17;24265:47;24329:131;24455:4;24329:131;:::i;:::-;24321:139;;24048:419;;;:::o;24473:179::-;24613:31;24609:1;24601:6;24597:14;24590:55;24473:179;:::o;24658:366::-;24800:3;24821:67;24885:2;24880:3;24821:67;:::i;:::-;24814:74;;24897:93;24986:3;24897:93;:::i;:::-;25015:2;25010:3;25006:12;24999:19;;24658:366;;;:::o;25030:419::-;25196:4;25234:2;25223:9;25219:18;25211:26;;25283:9;25277:4;25273:20;25269:1;25258:9;25254:17;25247:47;25311:131;25437:4;25311:131;:::i;:::-;25303:139;;25030:419;;;:::o;25455:231::-;25595:34;25591:1;25583:6;25579:14;25572:58;25664:14;25659:2;25651:6;25647:15;25640:39;25455:231;:::o;25692:366::-;25834:3;25855:67;25919:2;25914:3;25855:67;:::i;:::-;25848:74;;25931:93;26020:3;25931:93;:::i;:::-;26049:2;26044:3;26040:12;26033:19;;25692:366;;;:::o;26064:419::-;26230:4;26268:2;26257:9;26253:18;26245:26;;26317:9;26311:4;26307:20;26303:1;26292:9;26288:17;26281:47;26345:131;26471:4;26345:131;:::i;:::-;26337:139;;26064:419;;;:::o;26489:222::-;26629:34;26625:1;26617:6;26613:14;26606:58;26698:5;26693:2;26685:6;26681:15;26674:30;26489:222;:::o;26717:366::-;26859:3;26880:67;26944:2;26939:3;26880:67;:::i;:::-;26873:74;;26956:93;27045:3;26956:93;:::i;:::-;27074:2;27069:3;27065:12;27058:19;;26717:366;;;:::o;27089:419::-;27255:4;27293:2;27282:9;27278:18;27270:26;;27342:9;27336:4;27332:20;27328:1;27317:9;27313:17;27306:47;27370:131;27496:4;27370:131;:::i;:::-;27362:139;;27089:419;;;:::o;27514:309::-;27654:34;27650:1;27642:6;27638:14;27631:58;27723:34;27718:2;27710:6;27706:15;27699:59;27792:23;27787:2;27779:6;27775:15;27768:48;27514:309;:::o;27829:366::-;27971:3;27992:67;28056:2;28051:3;27992:67;:::i;:::-;27985:74;;28068:93;28157:3;28068:93;:::i;:::-;28186:2;28181:3;28177:12;28170:19;;27829:366;;;:::o;28201:419::-;28367:4;28405:2;28394:9;28390:18;28382:26;;28454:9;28448:4;28444:20;28440:1;28429:9;28425:17;28418:47;28482:131;28608:4;28482:131;:::i;:::-;28474:139;;28201:419;;;:::o;28626:191::-;28666:4;28686:20;28704:1;28686:20;:::i;:::-;28681:25;;28720:20;28738:1;28720:20;:::i;:::-;28715:25;;28759:1;28756;28753:8;28750:34;;;28764:18;;:::i;:::-;28750:34;28809:1;28806;28802:9;28794:17;;28626:191;;;;:::o;28823:60::-;28851:3;28872:5;28865:12;;28823:60;;;:::o;28889:138::-;28937:9;28970:51;28988:32;28997:22;29013:5;28997:22;:::i;:::-;28988:32;:::i;:::-;28970:51;:::i;:::-;28957:64;;28889:138;;;:::o;29033:127::-;29118:35;29147:5;29118:35;:::i;:::-;29113:3;29106:48;29033:127;;:::o;29166:324::-;29283:4;29321:2;29310:9;29306:18;29298:26;;29334:69;29400:1;29389:9;29385:17;29376:6;29334:69;:::i;:::-;29413:70;29479:2;29468:9;29464:18;29455:6;29413:70;:::i;:::-;29166:324;;;;;:::o;29496:221::-;29636:34;29632:1;29624:6;29620:14;29613:58;29705:4;29700:2;29692:6;29688:15;29681:29;29496:221;:::o;29723:366::-;29865:3;29886:67;29950:2;29945:3;29886:67;:::i;:::-;29879:74;;29962:93;30051:3;29962:93;:::i;:::-;30080:2;30075:3;30071:12;30064:19;;29723:366;;;:::o;30095:419::-;30261:4;30299:2;30288:9;30284:18;30276:26;;30348:9;30342:4;30338:20;30334:1;30323:9;30319:17;30312:47;30376:131;30502:4;30376:131;:::i;:::-;30368:139;;30095:419;;;:::o;30520:320::-;30635:4;30673:2;30662:9;30658:18;30650:26;;30686:71;30754:1;30743:9;30739:17;30730:6;30686:71;:::i;:::-;30767:66;30829:2;30818:9;30814:18;30805:6;30767:66;:::i;:::-;30520:320;;;;;:::o;30846:142::-;30896:9;30929:53;30947:34;30956:24;30974:5;30956:24;:::i;:::-;30947:34;:::i;:::-;30929:53;:::i;:::-;30916:66;;30846:142;;;:::o;30994:126::-;31044:9;31077:37;31108:5;31077:37;:::i;:::-;31064:50;;30994:126;;;:::o;31126:134::-;31184:9;31217:37;31248:5;31217:37;:::i;:::-;31204:50;;31126:134;;;:::o;31266:147::-;31361:45;31400:5;31361:45;:::i;:::-;31356:3;31349:58;31266:147;;:::o;31419:238::-;31520:4;31558:2;31547:9;31543:18;31535:26;;31571:79;31647:1;31636:9;31632:17;31623:6;31571:79;:::i;:::-;31419:238;;;;:::o;31663:348::-;31703:7;31726:20;31744:1;31726:20;:::i;:::-;31721:25;;31760:20;31778:1;31760:20;:::i;:::-;31755:25;;31948:1;31880:66;31876:74;31873:1;31870:81;31865:1;31858:9;31851:17;31847:105;31844:131;;;31955:18;;:::i;:::-;31844:131;32003:1;32000;31996:9;31985:20;;31663:348;;;;:::o;32017:220::-;32157:34;32153:1;32145:6;32141:14;32134:58;32226:3;32221:2;32213:6;32209:15;32202:28;32017:220;:::o;32243:366::-;32385:3;32406:67;32470:2;32465:3;32406:67;:::i;:::-;32399:74;;32482:93;32571:3;32482:93;:::i;:::-;32600:2;32595:3;32591:12;32584:19;;32243:366;;;:::o;32615:419::-;32781:4;32819:2;32808:9;32804:18;32796:26;;32868:9;32862:4;32858:20;32854:1;32843:9;32839:17;32832:47;32896:131;33022:4;32896:131;:::i;:::-;32888:139;;32615:419;;;:::o;33040:180::-;33088:77;33085:1;33078:88;33185:4;33182:1;33175:15;33209:4;33206:1;33199:15;33226:185;33266:1;33283:20;33301:1;33283:20;:::i;:::-;33278:25;;33317:20;33335:1;33317:20;:::i;:::-;33312:25;;33356:1;33346:35;;33361:18;;:::i;:::-;33346:35;33403:1;33400;33396:9;33391:14;;33226:185;;;;:::o;33417:224::-;33557:34;33553:1;33545:6;33541:14;33534:58;33626:7;33621:2;33613:6;33609:15;33602:32;33417:224;:::o;33647:366::-;33789:3;33810:67;33874:2;33869:3;33810:67;:::i;:::-;33803:74;;33886:93;33975:3;33886:93;:::i;:::-;34004:2;33999:3;33995:12;33988:19;;33647:366;;;:::o;34019:419::-;34185:4;34223:2;34212:9;34208:18;34200:26;;34272:9;34266:4;34262:20;34258:1;34247:9;34243:17;34236:47;34300:131;34426:4;34300:131;:::i;:::-;34292:139;;34019:419;;;:::o;34444:222::-;34584:34;34580:1;34572:6;34568:14;34561:58;34653:5;34648:2;34640:6;34636:15;34629:30;34444:222;:::o;34672:366::-;34814:3;34835:67;34899:2;34894:3;34835:67;:::i;:::-;34828:74;;34911:93;35000:3;34911:93;:::i;:::-;35029:2;35024:3;35020:12;35013:19;;34672:366;;;:::o;35044:419::-;35210:4;35248:2;35237:9;35233:18;35225:26;;35297:9;35291:4;35287:20;35283:1;35272:9;35268:17;35261:47;35325:131;35451:4;35325:131;:::i;:::-;35317:139;;35044:419;;;:::o;35469:225::-;35609:34;35605:1;35597:6;35593:14;35586:58;35678:8;35673:2;35665:6;35661:15;35654:33;35469:225;:::o;35700:366::-;35842:3;35863:67;35927:2;35922:3;35863:67;:::i;:::-;35856:74;;35939:93;36028:3;35939:93;:::i;:::-;36057:2;36052:3;36048:12;36041:19;;35700:366;;;:::o;36072:419::-;36238:4;36276:2;36265:9;36261:18;36253:26;;36325:9;36319:4;36315:20;36311:1;36300:9;36296:17;36289:47;36353:131;36479:4;36353:131;:::i;:::-;36345:139;;36072:419;;;:::o;36497:180::-;36545:77;36542:1;36535:88;36642:4;36639:1;36632:15;36666:4;36663:1;36656:15;36683:180;36731:77;36728:1;36721:88;36828:4;36825:1;36818:15;36852:4;36849:1;36842:15;36869:143;36926:5;36957:6;36951:13;36942:22;;36973:33;37000:5;36973:33;:::i;:::-;36869:143;;;;:::o;37018:351::-;37088:6;37137:2;37125:9;37116:7;37112:23;37108:32;37105:119;;;37143:79;;:::i;:::-;37105:119;37263:1;37288:64;37344:7;37335:6;37324:9;37320:22;37288:64;:::i;:::-;37278:74;;37234:128;37018:351;;;;:::o;37375:85::-;37420:7;37449:5;37438:16;;37375:85;;;:::o;37466:158::-;37524:9;37557:61;37575:42;37584:32;37610:5;37584:32;:::i;:::-;37575:42;:::i;:::-;37557:61;:::i;:::-;37544:74;;37466:158;;;:::o;37630:147::-;37725:45;37764:5;37725:45;:::i;:::-;37720:3;37713:58;37630:147;;:::o;37783:114::-;37850:6;37884:5;37878:12;37868:22;;37783:114;;;:::o;37903:184::-;38002:11;38036:6;38031:3;38024:19;38076:4;38071:3;38067:14;38052:29;;37903:184;;;;:::o;38093:132::-;38160:4;38183:3;38175:11;;38213:4;38208:3;38204:14;38196:22;;38093:132;;;:::o;38231:108::-;38308:24;38326:5;38308:24;:::i;:::-;38303:3;38296:37;38231:108;;:::o;38345:179::-;38414:10;38435:46;38477:3;38469:6;38435:46;:::i;:::-;38513:4;38508:3;38504:14;38490:28;;38345:179;;;;:::o;38530:113::-;38600:4;38632;38627:3;38623:14;38615:22;;38530:113;;;:::o;38679:732::-;38798:3;38827:54;38875:5;38827:54;:::i;:::-;38897:86;38976:6;38971:3;38897:86;:::i;:::-;38890:93;;39007:56;39057:5;39007:56;:::i;:::-;39086:7;39117:1;39102:284;39127:6;39124:1;39121:13;39102:284;;;39203:6;39197:13;39230:63;39289:3;39274:13;39230:63;:::i;:::-;39223:70;;39316:60;39369:6;39316:60;:::i;:::-;39306:70;;39162:224;39149:1;39146;39142:9;39137:14;;39102:284;;;39106:14;39402:3;39395:10;;38803:608;;;38679:732;;;;:::o;39417:831::-;39680:4;39718:3;39707:9;39703:19;39695:27;;39732:71;39800:1;39789:9;39785:17;39776:6;39732:71;:::i;:::-;39813:80;39889:2;39878:9;39874:18;39865:6;39813:80;:::i;:::-;39940:9;39934:4;39930:20;39925:2;39914:9;39910:18;39903:48;39968:108;40071:4;40062:6;39968:108;:::i;:::-;39960:116;;40086:72;40154:2;40143:9;40139:18;40130:6;40086:72;:::i;:::-;40168:73;40236:3;40225:9;40221:19;40212:6;40168:73;:::i;:::-;39417:831;;;;;;;;:::o;40254:117::-;40363:1;40360;40353:12;40377:281;40460:27;40482:4;40460:27;:::i;:::-;40452:6;40448:40;40590:6;40578:10;40575:22;40554:18;40542:10;40539:34;40536:62;40533:88;;;40601:18;;:::i;:::-;40533:88;40641:10;40637:2;40630:22;40420:238;40377:281;;:::o;40664:129::-;40698:6;40725:20;;:::i;:::-;40715:30;;40754:33;40782:4;40774:6;40754:33;:::i;:::-;40664:129;;;:::o;40799:311::-;40876:4;40966:18;40958:6;40955:30;40952:56;;;40988:18;;:::i;:::-;40952:56;41038:4;41030:6;41026:17;41018:25;;41098:4;41092;41088:15;41080:23;;40799:311;;;:::o;41116:117::-;41225:1;41222;41215:12;41239:143;41296:5;41327:6;41321:13;41312:22;;41343:33;41370:5;41343:33;:::i;:::-;41239:143;;;;:::o;41405:732::-;41512:5;41537:81;41553:64;41610:6;41553:64;:::i;:::-;41537:81;:::i;:::-;41528:90;;41638:5;41667:6;41660:5;41653:21;41701:4;41694:5;41690:16;41683:23;;41754:4;41746:6;41742:17;41734:6;41730:30;41783:3;41775:6;41772:15;41769:122;;;41802:79;;:::i;:::-;41769:122;41917:6;41900:231;41934:6;41929:3;41926:15;41900:231;;;42009:3;42038:48;42082:3;42070:10;42038:48;:::i;:::-;42033:3;42026:61;42116:4;42111:3;42107:14;42100:21;;41976:155;41960:4;41955:3;41951:14;41944:21;;41900:231;;;41904:21;41518:619;;41405:732;;;;;:::o;42160:385::-;42242:5;42291:3;42284:4;42276:6;42272:17;42268:27;42258:122;;42299:79;;:::i;:::-;42258:122;42409:6;42403:13;42434:105;42535:3;42527:6;42520:4;42512:6;42508:17;42434:105;:::i;:::-;42425:114;;42248:297;42160:385;;;;:::o;42551:554::-;42646:6;42695:2;42683:9;42674:7;42670:23;42666:32;42663:119;;;42701:79;;:::i;:::-;42663:119;42842:1;42831:9;42827:17;42821:24;42872:18;42864:6;42861:30;42858:117;;;42894:79;;:::i;:::-;42858:117;42999:89;43080:7;43071:6;43060:9;43056:22;42999:89;:::i;:::-;42989:99;;42792:306;42551:554;;;;:::o;43111:147::-;43212:11;43249:3;43234:18;;43111:147;;;;:::o;43264:114::-;;:::o;43384:398::-;43543:3;43564:83;43645:1;43640:3;43564:83;:::i;:::-;43557:90;;43656:93;43745:3;43656:93;:::i;:::-;43774:1;43769:3;43765:11;43758:18;;43384:398;;;:::o;43788:379::-;43972:3;43994:147;44137:3;43994:147;:::i;:::-;43987:154;;44158:3;44151:10;;43788:379;;;:::o

Swarm Source

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