ETH Price: $2,524.65 (+0.23%)

Token

WhackAMofo ($WHACK)
 

Overview

Max Total Supply

900,000 $WHACK

Holders

98

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.9638671875 $WHACK

Value
$0.00
0x38d671409156608fE1Dd66C2D1AC9936FF973Ef3
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
WhackAMofo

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-08-17
*/

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

// SPDX-License-Identifier: MIT

pragma solidity 0.8.18;

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

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

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

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

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

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

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

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

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

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

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

/* pragma solidity ^0.8.0; */

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

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

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

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

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

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

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

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

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

/* pragma solidity ^0.8.0; */

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

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

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

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, 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}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(
        address spender,
        uint256 amount
    ) public virtual override returns (bool) {
        _approve(_msgSender(), 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}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

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

        return true;
    }

    /**
     * @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) {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][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) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

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

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

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

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

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

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

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

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

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

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

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

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

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

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

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint256);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

    function burn(
        address to
    ) external returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB, uint256 liquidity);

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

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

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

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

contract WhackAMofo is ERC20, Ownable {
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    bool private swapping;

    address public immutable revShareWallet;

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

    bool public tradingActive = false;
    bool public swapEnabled = false;

    // Anti-bot and anti-whale mappings and variables
    mapping(address => bool) blacklisted;

    uint256 public buyTotalFees;
    uint256 public buyRevShareFee;
    uint256 public buyLiquidityFee;

    uint256 public sellTotalFees;
    uint256 public sellRevShareFee;
    uint256 public sellLiquidityFee;

    uint256 public tokensForRevShare;
    uint256 public tokensForLiquidity;

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

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

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

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

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

    constructor(address _revShareWallet) ERC20("WhackAMofo", "$WHACK") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D //Uniswap V2 Router
        );

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

        // Creates the Uniswap Pair
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        uint256 _buyRevShareFee = 30; // Lowered to 4% after launch
        uint256 _buyLiquidityFee = 5; // Lowered to 1% after launch

        uint256 _sellRevShareFee = 30; // Lowered to 4% after launch
        uint256 _sellLiquidityFee = 5; // Lowered to 1% after launch

        uint256 totalSupply = 1_000_000 * 1e18; // 1 Million

        maxTransactionAmount = 5_000 * 1e18; // 0.25%
        maxWallet = 5_000 * 1e18; // 0.25%
        swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05%

        buyRevShareFee = _buyRevShareFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyTotalFees = buyRevShareFee + buyLiquidityFee;

        sellRevShareFee = _sellRevShareFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellTotalFees = sellRevShareFee + sellLiquidityFee;

        revShareWallet = _revShareWallet; // Set as revShare wallet - Helper Contract

        // Exclude from paying fees or having max transaction amount if; is owner, is deployer, is dead address.
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

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

        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, (totalSupply * 80) / 100);
        _mint(_revShareWallet, (totalSupply * 10) / 100); //marketing wallet
    }

    receive() external payable {}

    // Will enable trading, once this is toggeled, it will not be able to be turned off.
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
    }

    // Trigger this post launch once price is more stable. Made to avoid whales and snipers hogging supply.
    function updateLimitsAndFees() external onlyOwner {
        maxTransactionAmount = 10_000 * (10 ** 18); // 1%
        maxWallet = 25_000 * (10 ** 18); // 2.5%

        buyRevShareFee = 4; // 4%
        buyLiquidityFee = 1; // 1%
        buyTotalFees = 5;

        sellRevShareFee = 4; // 4%
        sellLiquidityFee = 1; // 1%
        sellTotalFees = 5;
    }

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

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

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

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

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

    function isBlacklisted(address account) public view returns (bool) {
        return blacklisted[account];
    }

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

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

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

            // Buying
            if (
                automatedMarketMakerPairs[from] &&
                !_isExcludedMaxTransactionAmount[to]
            ) {
                require(
                    amount <= maxTransactionAmount,
                    "Buy transfer amount exceeds the maxTransactionAmount."
                );
                require(
                    amount + balanceOf(to) <= maxWallet,
                    "Max wallet exceeded"
                );
            }
            // Selling
            else if (
                automatedMarketMakerPairs[to] &&
                !_isExcludedMaxTransactionAmount[from]
            ) {
                require(
                    amount <= maxTransactionAmount,
                    "Sell transfer amount exceeds the maxTransactionAmount."
                );
            } else if (!_isExcludedMaxTransactionAmount[to]) {
                require(
                    amount + balanceOf(to) <= maxWallet,
                    "Max wallet exceeded"
                );
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

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

        uint256 fees = 0;
        // Only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // Sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = (amount * sellTotalFees) / 100;
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForRevShare += (fees * sellRevShareFee) / sellTotalFees;
            }
            // Buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = (amount * buyTotalFees) / 100;
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForRevShare += (fees * buyRevShareFee) / buyTotalFees;
            }

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

            amount -= fees;
        }

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

    function swapTokensForEth(uint256 tokenAmount) private {
        // Generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // Make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // Accept any amount of ETH; ignore slippage
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // Slippage is unavoidable
            0, // Slippage is unavoidable
            owner(),
            block.timestamp
        );
    }

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

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

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

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

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

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

        uint256 ethForRevShare = (ethBalance * tokensForRevShare) /
            (totalTokensToSwap - (tokensForLiquidity / 2));

        uint256 ethForLiquidity = ethBalance - ethForRevShare;

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(
                amountToSwapForETH,
                ethForLiquidity,
                tokensForLiquidity
            );
        }

        tokensForLiquidity = 0;
        tokensForRevShare = 0;

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

    // The helper contract will also be used to be able to call the 5 functions below.
    // Any functions that have to do with ETH or Tokens will be sent directly to the helper contract.
    // This means that the split of 80% to the team, and 20% to the holders is intact.
    modifier onlyHelper() {
        require(
            revShareWallet == _msgSender(),
            "Token: caller is not the Helper"
        );
        _;
    }

    // @Helper - Callable by Helper contract in-case tokens get's stuck in the token contract.
    function withdrawStuckToken(
        address _token,
        address _to
    ) external onlyHelper {
        require(_token != address(0), "_token address cannot be 0");
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        IERC20(_token).transfer(_to, _contractBalance);
    }

    // @Helper - Callable by Helper contract in-case ETH get's stuck in the token contract.
    function withdrawStuckEth(address toAddr) external onlyHelper {
        (bool success, ) = toAddr.call{value: address(this).balance}("");
        require(success);
    }

    // @Helper - Blacklist v3 pools; can unblacklist() down the road to suit project and community
    function blacklistLiquidityPool(address lpAddress) public onlyHelper {
        require(
            lpAddress != address(uniswapV2Pair) &&
                lpAddress !=
                address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D),
            "Cannot blacklist token's v2 router or v2 pool."
        );
        blacklisted[lpAddress] = true;
    }

    // @Helper - Unblacklist address; not affected by blacklistRenounced incase team wants to unblacklist v3 pools down the road
    function unblacklist(address _addr) public onlyHelper {
        blacklisted[_addr] = false;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_revShareWallet","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"lpAddress","type":"address"}],"name":"blacklistLiquidityPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyRevShareFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revShareWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellRevShareFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForRevShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"unblacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"updateLimitsAndFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"toAddr","type":"address"}],"name":"withdrawStuckEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"withdrawStuckToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6101006040526000600860006101000a81548160ff0219169083151502179055506000600860016101000a81548160ff0219169083151502179055503480156200004857600080fd5b50604051620058923803806200589283398181016040528101906200006e919062000ad6565b6040518060400160405280600a81526020017f576861636b414d6f666f000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f24574841434b00000000000000000000000000000000000000000000000000008152508160039081620000eb919062000d82565b508060049081620000fd919062000d82565b50505062000120620001146200052d60201b60201c565b6200053560201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90506200014c816001620005fb60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001cc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001f2919062000ad6565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200025a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000280919062000ad6565b6040518363ffffffff1660e01b81526004016200029f92919062000e7a565b6020604051808303816000875af1158015620002bf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e5919062000ad6565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200032d60a0516001620005fb60201b60201c565b6200034260a0516001620006e560201b60201c565b6000601e90506000600590506000601e9050600060059050600069d3c21bcecceda1000000905069010f0cf064dd5920000060068190555069010f0cf064dd592000006007819055506127106005826200039d919062000ed6565b620003a9919062000f50565b60e0818152505084600b8190555083600c81905550600c54600b54620003d0919062000f88565b600a8190555082600e8190555081600f81905550600f54600e54620003f6919062000f88565b600d819055508673ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff168152505062000452620004446200078660201b60201c565b6001620007b060201b60201c565b62000465306001620007b060201b60201c565b6200047a61dead6001620007b060201b60201c565b6200049c6200048e6200078660201b60201c565b6001620005fb60201b60201c565b620004af306001620005fb60201b60201c565b620004c461dead6001620005fb60201b60201c565b620004f2336064605084620004da919062000ed6565b620004e6919062000f50565b620008ea60201b60201c565b62000520876064600a8462000508919062000ed6565b62000514919062000f50565b620008ea60201b60201c565b5050505050505062001120565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200060b6200052d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620006316200078660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200068a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006819062001024565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620007c06200052d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620007e66200078660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200083f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008369062001024565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620008de919062001063565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200095c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200095390620010d0565b60405180910390fd5b620009706000838362000a6260201b60201c565b806002600082825462000984919062000f88565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620009db919062000f88565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a42919062001103565b60405180910390a362000a5e6000838362000a6760201b60201c565b5050565b505050565b505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000a9e8262000a71565b9050919050565b62000ab08162000a91565b811462000abc57600080fd5b50565b60008151905062000ad08162000aa5565b92915050565b60006020828403121562000aef5762000aee62000a6c565b5b600062000aff8482850162000abf565b91505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000b8a57607f821691505b60208210810362000ba05762000b9f62000b42565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000c0a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000bcb565b62000c16868362000bcb565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000c6362000c5d62000c578462000c2e565b62000c38565b62000c2e565b9050919050565b6000819050919050565b62000c7f8362000c42565b62000c9762000c8e8262000c6a565b84845462000bd8565b825550505050565b600090565b62000cae62000c9f565b62000cbb81848462000c74565b505050565b5b8181101562000ce35762000cd760008262000ca4565b60018101905062000cc1565b5050565b601f82111562000d325762000cfc8162000ba6565b62000d078462000bbb565b8101602085101562000d17578190505b62000d2f62000d268562000bbb565b83018262000cc0565b50505b505050565b600082821c905092915050565b600062000d576000198460080262000d37565b1980831691505092915050565b600062000d72838362000d44565b9150826002028217905092915050565b62000d8d8262000b08565b67ffffffffffffffff81111562000da95762000da862000b13565b5b62000db5825462000b71565b62000dc282828562000ce7565b600060209050601f83116001811462000dfa576000841562000de5578287015190505b62000df1858262000d64565b86555062000e61565b601f19841662000e0a8662000ba6565b60005b8281101562000e345784890151825560018201915060208501945060208101905062000e0d565b8683101562000e54578489015162000e50601f89168262000d44565b8355505b6001600288020188555050505b505050505050565b62000e748162000a91565b82525050565b600060408201905062000e91600083018562000e69565b62000ea0602083018462000e69565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000ee38262000c2e565b915062000ef08362000c2e565b925082820262000f008162000c2e565b9150828204841483151762000f1a5762000f1962000ea7565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000f5d8262000c2e565b915062000f6a8362000c2e565b92508262000f7d5762000f7c62000f21565b5b828204905092915050565b600062000f958262000c2e565b915062000fa28362000c2e565b925082820190508082111562000fbd5762000fbc62000ea7565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200100c60208362000fc3565b9150620010198262000fd4565b602082019050919050565b600060208201905081810360008301526200103f8162000ffd565b9050919050565b60008115159050919050565b6200105d8162001046565b82525050565b60006020820190506200107a600083018462001052565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620010b8601f8362000fc3565b9150620010c58262001080565b602082019050919050565b60006020820190508181036000830152620010eb81620010a9565b9050919050565b620010fd8162000c2e565b82525050565b60006020820190506200111a6000830184620010f2565b92915050565b60805160a05160c05160e0516146cf620011c360003960008181611b5e015281816125b701528181612e470152612e7b015260008181610f3c0152818161100e01528181611050015281816115f3015281816119b10152612fb3015260008181610ce40152818161132d0152611a28015260008181610af7015281816130f2015281816131d3015281816131fa0152818161329601526132bd01526146cf6000f3fe6080604052600436106102605760003560e01c80637ca8448a11610144578063c0246668116100b6578063e2f456051161007a578063e2f456051461090d578063f11a24d314610938578063f2fde38b14610963578063f63743421461098c578063f8b45b05146109b7578063fe575a87146109e257610267565b8063c024666814610828578063c8c8ebe414610851578063d85ba0631461087c578063dd62ed3e146108a7578063e19b2823146108e457610267565b80639c6868af116101085780639c6868af14610706578063a457c2d71461071d578063a9059cbb1461075a578063b62496f514610797578063bbc0c742146107d4578063bc205ad3146107ff57610267565b80637ca8448a146106475780638a8c523c146106705780638da5cb5b1461068757806395d89b41146106b25780639a7a23d6146106dd57610267565b8063313ce567116101dd5780636ddd1713116101a15780636ddd17131461054b57806370a0823114610576578063715018a6146105b35780637571336a146105ca57806375e3661e146105f3578063782c4e991461061c57610267565b8063313ce56714610450578063395093511461047b57806349bd5a5e146104b85780634fbee193146104e35780636a486a8e1461052057610267565b806318160ddd1161022457806318160ddd1461036757806319eab042146103925780631a8145bb146103bd57806323b872dd146103e857806324b9f3c11461042557610267565b806306fdde031461026c578063095ea7b31461029757806310d5de53146102d4578063156c2f35146103115780631694505e1461033c57610267565b3661026757005b600080fd5b34801561027857600080fd5b50610281610a1f565b60405161028e9190613401565b60405180910390f35b3480156102a357600080fd5b506102be60048036038101906102b991906134bc565b610ab1565b6040516102cb9190613517565b60405180910390f35b3480156102e057600080fd5b506102fb60048036038101906102f69190613532565b610acf565b6040516103089190613517565b60405180910390f35b34801561031d57600080fd5b50610326610aef565b604051610333919061356e565b60405180910390f35b34801561034857600080fd5b50610351610af5565b60405161035e91906135e8565b60405180910390f35b34801561037357600080fd5b5061037c610b19565b604051610389919061356e565b60405180910390f35b34801561039e57600080fd5b506103a7610b23565b6040516103b4919061356e565b60405180910390f35b3480156103c957600080fd5b506103d2610b29565b6040516103df919061356e565b60405180910390f35b3480156103f457600080fd5b5061040f600480360381019061040a9190613603565b610b2f565b60405161041c9190613517565b60405180910390f35b34801561043157600080fd5b5061043a610c27565b604051610447919061356e565b60405180910390f35b34801561045c57600080fd5b50610465610c2d565b6040516104729190613672565b60405180910390f35b34801561048757600080fd5b506104a2600480360381019061049d91906134bc565b610c36565b6040516104af9190613517565b60405180910390f35b3480156104c457600080fd5b506104cd610ce2565b6040516104da919061369c565b60405180910390f35b3480156104ef57600080fd5b5061050a60048036038101906105059190613532565b610d06565b6040516105179190613517565b60405180910390f35b34801561052c57600080fd5b50610535610d5c565b604051610542919061356e565b60405180910390f35b34801561055757600080fd5b50610560610d62565b60405161056d9190613517565b60405180910390f35b34801561058257600080fd5b5061059d60048036038101906105989190613532565b610d75565b6040516105aa919061356e565b60405180910390f35b3480156105bf57600080fd5b506105c8610dbd565b005b3480156105d657600080fd5b506105f160048036038101906105ec91906136e3565b610e45565b005b3480156105ff57600080fd5b5061061a60048036038101906106159190613532565b610f1c565b005b34801561062857600080fd5b5061063161100c565b60405161063e919061369c565b60405180910390f35b34801561065357600080fd5b5061066e60048036038101906106699190613532565b611030565b005b34801561067c57600080fd5b5061068561113f565b005b34801561069357600080fd5b5061069c6111f3565b6040516106a9919061369c565b60405180910390f35b3480156106be57600080fd5b506106c761121d565b6040516106d49190613401565b60405180910390f35b3480156106e957600080fd5b5061070460048036038101906106ff91906136e3565b6112af565b005b34801561071257600080fd5b5061071b6113c7565b005b34801561072957600080fd5b50610744600480360381019061073f91906134bc565b611497565b6040516107519190613517565b60405180910390f35b34801561076657600080fd5b50610781600480360381019061077c91906134bc565b611582565b60405161078e9190613517565b60405180910390f35b3480156107a357600080fd5b506107be60048036038101906107b99190613532565b6115a0565b6040516107cb9190613517565b60405180910390f35b3480156107e057600080fd5b506107e96115c0565b6040516107f69190613517565b60405180910390f35b34801561080b57600080fd5b5061082660048036038101906108219190613723565b6115d3565b005b34801561083457600080fd5b5061084f600480360381019061084a91906136e3565b6117d9565b005b34801561085d57600080fd5b506108666118fe565b604051610873919061356e565b60405180910390f35b34801561088857600080fd5b50610891611904565b60405161089e919061356e565b60405180910390f35b3480156108b357600080fd5b506108ce60048036038101906108c99190613723565b61190a565b6040516108db919061356e565b60405180910390f35b3480156108f057600080fd5b5061090b60048036038101906109069190613532565b611991565b005b34801561091957600080fd5b50610922611b5c565b60405161092f919061356e565b60405180910390f35b34801561094457600080fd5b5061094d611b80565b60405161095a919061356e565b60405180910390f35b34801561096f57600080fd5b5061098a60048036038101906109859190613532565b611b86565b005b34801561099857600080fd5b506109a1611c7d565b6040516109ae919061356e565b60405180910390f35b3480156109c357600080fd5b506109cc611c83565b6040516109d9919061356e565b60405180910390f35b3480156109ee57600080fd5b50610a096004803603810190610a049190613532565b611c89565b604051610a169190613517565b60405180910390f35b606060038054610a2e90613792565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5a90613792565b8015610aa75780601f10610a7c57610100808354040283529160200191610aa7565b820191906000526020600020905b815481529060010190602001808311610a8a57829003601f168201915b5050505050905090565b6000610ac5610abe611cdf565b8484611ce7565b6001905092915050565b60136020528060005260406000206000915054906101000a900460ff1681565b600b5481565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b600e5481565b60115481565b6000610b3c848484611eb0565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610b87611cdf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610c07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfe90613835565b60405180910390fd5b610c1b85610c13611cdf565b858403611ce7565b60019150509392505050565b60105481565b60006012905090565b6000610cd8610c43611cdf565b848460016000610c51611cdf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610cd39190613884565b611ce7565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600d5481565b600860019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610dc5611cdf565b73ffffffffffffffffffffffffffffffffffffffff16610de36111f3565b73ffffffffffffffffffffffffffffffffffffffff1614610e39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3090613904565b60405180910390fd5b610e436000612a1f565b565b610e4d611cdf565b73ffffffffffffffffffffffffffffffffffffffff16610e6b6111f3565b73ffffffffffffffffffffffffffffffffffffffff1614610ec1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb890613904565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b610f24611cdf565b73ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610fb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa890613970565b60405180910390fd5b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b611038611cdf565b73ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16146110c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110bc90613970565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff16476040516110eb906139c1565b60006040518083038185875af1925050503d8060008114611128576040519150601f19603f3d011682016040523d82523d6000602084013e61112d565b606091505b505090508061113b57600080fd5b5050565b611147611cdf565b73ffffffffffffffffffffffffffffffffffffffff166111656111f3565b73ffffffffffffffffffffffffffffffffffffffff16146111bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b290613904565b60405180910390fd5b6001600860006101000a81548160ff0219169083151502179055506001600860016101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461122c90613792565b80601f016020809104026020016040519081016040528092919081815260200182805461125890613792565b80156112a55780601f1061127a576101008083540402835291602001916112a5565b820191906000526020600020905b81548152906001019060200180831161128857829003601f168201915b5050505050905090565b6112b7611cdf565b73ffffffffffffffffffffffffffffffffffffffff166112d56111f3565b73ffffffffffffffffffffffffffffffffffffffff161461132b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132290613904565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036113b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b090613a48565b60405180910390fd5b6113c38282612ae5565b5050565b6113cf611cdf565b73ffffffffffffffffffffffffffffffffffffffff166113ed6111f3565b73ffffffffffffffffffffffffffffffffffffffff1614611443576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143a90613904565b60405180910390fd5b69021e19e0c9bab240000060068190555069054b40b1f852bda000006007819055506004600b819055506001600c819055506005600a819055506004600e819055506001600f819055506005600d81905550565b600080600160006114a6611cdf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611563576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155a90613ada565b60405180910390fd5b61157761156e611cdf565b85858403611ce7565b600191505092915050565b600061159661158f611cdf565b8484611eb0565b6001905092915050565b60146020528060005260406000206000915054906101000a900460ff1681565b600860009054906101000a900460ff1681565b6115db611cdf565b73ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614611668576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165f90613970565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ce90613b46565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611712919061369c565b602060405180830381865afa15801561172f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117539190613b7b565b90508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401611790929190613ba8565b6020604051808303816000875af11580156117af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d39190613be6565b50505050565b6117e1611cdf565b73ffffffffffffffffffffffffffffffffffffffff166117ff6111f3565b73ffffffffffffffffffffffffffffffffffffffff1614611855576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184c90613904565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516118f29190613517565b60405180910390a25050565b60065481565b600a5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611999611cdf565b73ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614611a26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1d90613970565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015611ac25750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b611b01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af890613c85565b60405180910390fd5b6001600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600c5481565b611b8e611cdf565b73ffffffffffffffffffffffffffffffffffffffff16611bac6111f3565b73ffffffffffffffffffffffffffffffffffffffff1614611c02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf990613904565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6890613d17565b60405180910390fd5b611c7a81612a1f565b50565b600f5481565b60075481565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4d90613da9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbc90613e3b565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611ea3919061356e565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1690613ecd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8590613f5f565b60405180910390fd5b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561201b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201290613fcb565b60405180910390fd5b600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156120a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209f90614037565b60405180910390fd5b600081036120c1576120bc83836000612b86565b612a1a565b6120c96111f3565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561213757506121076111f3565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156121705750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156121aa575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156121c35750600560149054906101000a900460ff16155b156125a657600860009054906101000a900460ff166122bd57601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061227d5750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6122bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b3906140a3565b60405180910390fd5b5b601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156123605750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612407576006548111156123aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a190614135565b60405180910390fd5b6007546123b683610d75565b826123c19190613884565b1115612402576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f9906141a1565b60405180910390fd5b6125a5565b601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156124aa5750601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156124f9576006548111156124f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124eb90614233565b60405180910390fd5b6125a4565b601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166125a35760075461255683610d75565b826125619190613884565b11156125a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612599906141a1565b60405180910390fd5b5b5b5b5b60006125b130610d75565b905060007f000000000000000000000000000000000000000000000000000000000000000082101590508080156125f45750600860019054906101000a900460ff165b801561260d5750600560149054906101000a900460ff16155b80156126635750601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156126b95750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561270f5750601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612753576001600560146101000a81548160ff021916908315150217905550612737612e05565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806128095750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561281357600090505b60008115612a0a57601460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561287657506000600d54115b15612902576064600d548661288b9190614253565b61289591906142c4565b9050600d54600f54826128a89190614253565b6128b291906142c4565b601160008282546128c39190613884565b92505081905550600d54600e54826128db9190614253565b6128e591906142c4565b601060008282546128f69190613884565b925050819055506129e6565b601460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561295d57506000600a54115b156129e5576064600a54866129729190614253565b61297c91906142c4565b9050600a54600c548261298f9190614253565b61299991906142c4565b601160008282546129aa9190613884565b92505081905550600a54600b54826129c29190614253565b6129cc91906142c4565b601060008282546129dd9190613884565b925050819055505b5b60008111156129fb576129fa873083612b86565b5b8085612a0791906142f5565b94505b612a15878787612b86565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612bf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bec90613ecd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612c64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c5b90613f5f565b60405180910390fd5b612c6f838383613049565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612cf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cec9061439b565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612d889190613884565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612dec919061356e565b60405180910390a3612dff84848461304e565b50505050565b6000612e1030610d75565b90506000601054601154612e249190613884565b9050600080831480612e365750600082145b15612e4357505050613047565b60147f0000000000000000000000000000000000000000000000000000000000000000612e709190614253565b831115612ea75760147f0000000000000000000000000000000000000000000000000000000000000000612ea49190614253565b92505b600060028360115486612eba9190614253565b612ec491906142c4565b612ece91906142c4565b905060008185612ede91906142f5565b90506000479050612eee82613053565b60008147612efc91906142f5565b905060006002601154612f0f91906142c4565b87612f1a91906142f5565b60105483612f289190614253565b612f3291906142c4565b905060008183612f4291906142f5565b9050600086118015612f545750600081115b15612fa157612f638682613290565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618582601154604051612f98939291906143bb565b60405180910390a15b600060118190555060006010819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1647604051612ff5906139c1565b60006040518083038185875af1925050503d8060008114613032576040519150601f19603f3d011682016040523d82523d6000602084013e613037565b606091505b5050809750505050505050505050505b565b505050565b505050565b6000600267ffffffffffffffff8111156130705761306f6143f2565b5b60405190808252806020026020018201604052801561309e5781602001602082028036833780820191505090505b50905030816000815181106130b6576130b5614421565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561315b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061317f9190614465565b8160018151811061319357613192614421565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506131f8307f000000000000000000000000000000000000000000000000000000000000000084611ce7565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161325a95949392919061458b565b600060405180830381600087803b15801561327457600080fd5b505af1158015613288573d6000803e3d6000fd5b505050505050565b6132bb307f000000000000000000000000000000000000000000000000000000000000000084611ce7565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806133056111f3565b426040518863ffffffff1660e01b8152600401613327969594939291906145e5565b60606040518083038185885af1158015613345573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061336a9190614646565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156133ab578082015181840152602081019050613390565b60008484015250505050565b6000601f19601f8301169050919050565b60006133d382613371565b6133dd818561337c565b93506133ed81856020860161338d565b6133f6816133b7565b840191505092915050565b6000602082019050818103600083015261341b81846133c8565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061345382613428565b9050919050565b61346381613448565b811461346e57600080fd5b50565b6000813590506134808161345a565b92915050565b6000819050919050565b61349981613486565b81146134a457600080fd5b50565b6000813590506134b681613490565b92915050565b600080604083850312156134d3576134d2613423565b5b60006134e185828601613471565b92505060206134f2858286016134a7565b9150509250929050565b60008115159050919050565b613511816134fc565b82525050565b600060208201905061352c6000830184613508565b92915050565b60006020828403121561354857613547613423565b5b600061355684828501613471565b91505092915050565b61356881613486565b82525050565b6000602082019050613583600083018461355f565b92915050565b6000819050919050565b60006135ae6135a96135a484613428565b613589565b613428565b9050919050565b60006135c082613593565b9050919050565b60006135d2826135b5565b9050919050565b6135e2816135c7565b82525050565b60006020820190506135fd60008301846135d9565b92915050565b60008060006060848603121561361c5761361b613423565b5b600061362a86828701613471565b935050602061363b86828701613471565b925050604061364c868287016134a7565b9150509250925092565b600060ff82169050919050565b61366c81613656565b82525050565b60006020820190506136876000830184613663565b92915050565b61369681613448565b82525050565b60006020820190506136b1600083018461368d565b92915050565b6136c0816134fc565b81146136cb57600080fd5b50565b6000813590506136dd816136b7565b92915050565b600080604083850312156136fa576136f9613423565b5b600061370885828601613471565b9250506020613719858286016136ce565b9150509250929050565b6000806040838503121561373a57613739613423565b5b600061374885828601613471565b925050602061375985828601613471565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806137aa57607f821691505b6020821081036137bd576137bc613763565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b600061381f60288361337c565b915061382a826137c3565b604082019050919050565b6000602082019050818103600083015261384e81613812565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061388f82613486565b915061389a83613486565b92508282019050808211156138b2576138b1613855565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006138ee60208361337c565b91506138f9826138b8565b602082019050919050565b6000602082019050818103600083015261391d816138e1565b9050919050565b7f546f6b656e3a2063616c6c6572206973206e6f74207468652048656c70657200600082015250565b600061395a601f8361337c565b915061396582613924565b602082019050919050565b600060208201905081810360008301526139898161394d565b9050919050565b600081905092915050565b50565b60006139ab600083613990565b91506139b68261399b565b600082019050919050565b60006139cc8261399e565b9150819050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613a3260398361337c565b9150613a3d826139d6565b604082019050919050565b60006020820190508181036000830152613a6181613a25565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613ac460258361337c565b9150613acf82613a68565b604082019050919050565b60006020820190508181036000830152613af381613ab7565b9050919050565b7f5f746f6b656e20616464726573732063616e6e6f742062652030000000000000600082015250565b6000613b30601a8361337c565b9150613b3b82613afa565b602082019050919050565b60006020820190508181036000830152613b5f81613b23565b9050919050565b600081519050613b7581613490565b92915050565b600060208284031215613b9157613b90613423565b5b6000613b9f84828501613b66565b91505092915050565b6000604082019050613bbd600083018561368d565b613bca602083018461355f565b9392505050565b600081519050613be0816136b7565b92915050565b600060208284031215613bfc57613bfb613423565b5b6000613c0a84828501613bd1565b91505092915050565b7f43616e6e6f7420626c61636b6c69737420746f6b656e277320763220726f757460008201527f6572206f7220763220706f6f6c2e000000000000000000000000000000000000602082015250565b6000613c6f602e8361337c565b9150613c7a82613c13565b604082019050919050565b60006020820190508181036000830152613c9e81613c62565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613d0160268361337c565b9150613d0c82613ca5565b604082019050919050565b60006020820190508181036000830152613d3081613cf4565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613d9360248361337c565b9150613d9e82613d37565b604082019050919050565b60006020820190508181036000830152613dc281613d86565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613e2560228361337c565b9150613e3082613dc9565b604082019050919050565b60006020820190508181036000830152613e5481613e18565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613eb760258361337c565b9150613ec282613e5b565b604082019050919050565b60006020820190508181036000830152613ee681613eaa565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613f4960238361337c565b9150613f5482613eed565b604082019050919050565b60006020820190508181036000830152613f7881613f3c565b9050919050565b7f53656e64657220626c61636b6c69737465640000000000000000000000000000600082015250565b6000613fb560128361337c565b9150613fc082613f7f565b602082019050919050565b60006020820190508181036000830152613fe481613fa8565b9050919050565b7f526563656976657220626c61636b6c6973746564000000000000000000000000600082015250565b600061402160148361337c565b915061402c82613feb565b602082019050919050565b6000602082019050818103600083015261405081614014565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061408d60168361337c565b915061409882614057565b602082019050919050565b600060208201905081810360008301526140bc81614080565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061411f60358361337c565b915061412a826140c3565b604082019050919050565b6000602082019050818103600083015261414e81614112565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061418b60138361337c565b915061419682614155565b602082019050919050565b600060208201905081810360008301526141ba8161417e565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061421d60368361337c565b9150614228826141c1565b604082019050919050565b6000602082019050818103600083015261424c81614210565b9050919050565b600061425e82613486565b915061426983613486565b925082820261427781613486565b9150828204841483151761428e5761428d613855565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006142cf82613486565b91506142da83613486565b9250826142ea576142e9614295565b5b828204905092915050565b600061430082613486565b915061430b83613486565b925082820390508181111561432357614322613855565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061438560268361337c565b915061439082614329565b604082019050919050565b600060208201905081810360008301526143b481614378565b9050919050565b60006060820190506143d0600083018661355f565b6143dd602083018561355f565b6143ea604083018461355f565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061445f8161345a565b92915050565b60006020828403121561447b5761447a613423565b5b600061448984828501614450565b91505092915050565b6000819050919050565b60006144b76144b26144ad84614492565b613589565b613486565b9050919050565b6144c78161449c565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61450281613448565b82525050565b600061451483836144f9565b60208301905092915050565b6000602082019050919050565b6000614538826144cd565b61454281856144d8565b935061454d836144e9565b8060005b8381101561457e5781516145658882614508565b975061457083614520565b925050600181019050614551565b5085935050505092915050565b600060a0820190506145a0600083018861355f565b6145ad60208301876144be565b81810360408301526145bf818661452d565b90506145ce606083018561368d565b6145db608083018461355f565b9695505050505050565b600060c0820190506145fa600083018961368d565b614607602083018861355f565b61461460408301876144be565b61462160608301866144be565b61462e608083018561368d565b61463b60a083018461355f565b979650505050505050565b60008060006060848603121561465f5761465e613423565b5b600061466d86828701613b66565b935050602061467e86828701613b66565b925050604061468f86828701613b66565b915050925092509256fea2646970667358221220e947e3a7930b62bf4587e327ededa5998eb5060280ecd173fc597b4d4a8be6e064736f6c63430008120033000000000000000000000000776d0b03c9ee3a137874fd2a3c6b39e3a454adfe

Deployed Bytecode

0x6080604052600436106102605760003560e01c80637ca8448a11610144578063c0246668116100b6578063e2f456051161007a578063e2f456051461090d578063f11a24d314610938578063f2fde38b14610963578063f63743421461098c578063f8b45b05146109b7578063fe575a87146109e257610267565b8063c024666814610828578063c8c8ebe414610851578063d85ba0631461087c578063dd62ed3e146108a7578063e19b2823146108e457610267565b80639c6868af116101085780639c6868af14610706578063a457c2d71461071d578063a9059cbb1461075a578063b62496f514610797578063bbc0c742146107d4578063bc205ad3146107ff57610267565b80637ca8448a146106475780638a8c523c146106705780638da5cb5b1461068757806395d89b41146106b25780639a7a23d6146106dd57610267565b8063313ce567116101dd5780636ddd1713116101a15780636ddd17131461054b57806370a0823114610576578063715018a6146105b35780637571336a146105ca57806375e3661e146105f3578063782c4e991461061c57610267565b8063313ce56714610450578063395093511461047b57806349bd5a5e146104b85780634fbee193146104e35780636a486a8e1461052057610267565b806318160ddd1161022457806318160ddd1461036757806319eab042146103925780631a8145bb146103bd57806323b872dd146103e857806324b9f3c11461042557610267565b806306fdde031461026c578063095ea7b31461029757806310d5de53146102d4578063156c2f35146103115780631694505e1461033c57610267565b3661026757005b600080fd5b34801561027857600080fd5b50610281610a1f565b60405161028e9190613401565b60405180910390f35b3480156102a357600080fd5b506102be60048036038101906102b991906134bc565b610ab1565b6040516102cb9190613517565b60405180910390f35b3480156102e057600080fd5b506102fb60048036038101906102f69190613532565b610acf565b6040516103089190613517565b60405180910390f35b34801561031d57600080fd5b50610326610aef565b604051610333919061356e565b60405180910390f35b34801561034857600080fd5b50610351610af5565b60405161035e91906135e8565b60405180910390f35b34801561037357600080fd5b5061037c610b19565b604051610389919061356e565b60405180910390f35b34801561039e57600080fd5b506103a7610b23565b6040516103b4919061356e565b60405180910390f35b3480156103c957600080fd5b506103d2610b29565b6040516103df919061356e565b60405180910390f35b3480156103f457600080fd5b5061040f600480360381019061040a9190613603565b610b2f565b60405161041c9190613517565b60405180910390f35b34801561043157600080fd5b5061043a610c27565b604051610447919061356e565b60405180910390f35b34801561045c57600080fd5b50610465610c2d565b6040516104729190613672565b60405180910390f35b34801561048757600080fd5b506104a2600480360381019061049d91906134bc565b610c36565b6040516104af9190613517565b60405180910390f35b3480156104c457600080fd5b506104cd610ce2565b6040516104da919061369c565b60405180910390f35b3480156104ef57600080fd5b5061050a60048036038101906105059190613532565b610d06565b6040516105179190613517565b60405180910390f35b34801561052c57600080fd5b50610535610d5c565b604051610542919061356e565b60405180910390f35b34801561055757600080fd5b50610560610d62565b60405161056d9190613517565b60405180910390f35b34801561058257600080fd5b5061059d60048036038101906105989190613532565b610d75565b6040516105aa919061356e565b60405180910390f35b3480156105bf57600080fd5b506105c8610dbd565b005b3480156105d657600080fd5b506105f160048036038101906105ec91906136e3565b610e45565b005b3480156105ff57600080fd5b5061061a60048036038101906106159190613532565b610f1c565b005b34801561062857600080fd5b5061063161100c565b60405161063e919061369c565b60405180910390f35b34801561065357600080fd5b5061066e60048036038101906106699190613532565b611030565b005b34801561067c57600080fd5b5061068561113f565b005b34801561069357600080fd5b5061069c6111f3565b6040516106a9919061369c565b60405180910390f35b3480156106be57600080fd5b506106c761121d565b6040516106d49190613401565b60405180910390f35b3480156106e957600080fd5b5061070460048036038101906106ff91906136e3565b6112af565b005b34801561071257600080fd5b5061071b6113c7565b005b34801561072957600080fd5b50610744600480360381019061073f91906134bc565b611497565b6040516107519190613517565b60405180910390f35b34801561076657600080fd5b50610781600480360381019061077c91906134bc565b611582565b60405161078e9190613517565b60405180910390f35b3480156107a357600080fd5b506107be60048036038101906107b99190613532565b6115a0565b6040516107cb9190613517565b60405180910390f35b3480156107e057600080fd5b506107e96115c0565b6040516107f69190613517565b60405180910390f35b34801561080b57600080fd5b5061082660048036038101906108219190613723565b6115d3565b005b34801561083457600080fd5b5061084f600480360381019061084a91906136e3565b6117d9565b005b34801561085d57600080fd5b506108666118fe565b604051610873919061356e565b60405180910390f35b34801561088857600080fd5b50610891611904565b60405161089e919061356e565b60405180910390f35b3480156108b357600080fd5b506108ce60048036038101906108c99190613723565b61190a565b6040516108db919061356e565b60405180910390f35b3480156108f057600080fd5b5061090b60048036038101906109069190613532565b611991565b005b34801561091957600080fd5b50610922611b5c565b60405161092f919061356e565b60405180910390f35b34801561094457600080fd5b5061094d611b80565b60405161095a919061356e565b60405180910390f35b34801561096f57600080fd5b5061098a60048036038101906109859190613532565b611b86565b005b34801561099857600080fd5b506109a1611c7d565b6040516109ae919061356e565b60405180910390f35b3480156109c357600080fd5b506109cc611c83565b6040516109d9919061356e565b60405180910390f35b3480156109ee57600080fd5b50610a096004803603810190610a049190613532565b611c89565b604051610a169190613517565b60405180910390f35b606060038054610a2e90613792565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5a90613792565b8015610aa75780601f10610a7c57610100808354040283529160200191610aa7565b820191906000526020600020905b815481529060010190602001808311610a8a57829003601f168201915b5050505050905090565b6000610ac5610abe611cdf565b8484611ce7565b6001905092915050565b60136020528060005260406000206000915054906101000a900460ff1681565b600b5481565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b600e5481565b60115481565b6000610b3c848484611eb0565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610b87611cdf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610c07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfe90613835565b60405180910390fd5b610c1b85610c13611cdf565b858403611ce7565b60019150509392505050565b60105481565b60006012905090565b6000610cd8610c43611cdf565b848460016000610c51611cdf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610cd39190613884565b611ce7565b6001905092915050565b7f000000000000000000000000fe04eaad3c60c296af8df8321a8598dc7ec940e181565b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600d5481565b600860019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610dc5611cdf565b73ffffffffffffffffffffffffffffffffffffffff16610de36111f3565b73ffffffffffffffffffffffffffffffffffffffff1614610e39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3090613904565b60405180910390fd5b610e436000612a1f565b565b610e4d611cdf565b73ffffffffffffffffffffffffffffffffffffffff16610e6b6111f3565b73ffffffffffffffffffffffffffffffffffffffff1614610ec1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb890613904565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b610f24611cdf565b73ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000776d0b03c9ee3a137874fd2a3c6b39e3a454adfe73ffffffffffffffffffffffffffffffffffffffff1614610fb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa890613970565b60405180910390fd5b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b7f000000000000000000000000776d0b03c9ee3a137874fd2a3c6b39e3a454adfe81565b611038611cdf565b73ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000776d0b03c9ee3a137874fd2a3c6b39e3a454adfe73ffffffffffffffffffffffffffffffffffffffff16146110c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110bc90613970565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff16476040516110eb906139c1565b60006040518083038185875af1925050503d8060008114611128576040519150601f19603f3d011682016040523d82523d6000602084013e61112d565b606091505b505090508061113b57600080fd5b5050565b611147611cdf565b73ffffffffffffffffffffffffffffffffffffffff166111656111f3565b73ffffffffffffffffffffffffffffffffffffffff16146111bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b290613904565b60405180910390fd5b6001600860006101000a81548160ff0219169083151502179055506001600860016101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461122c90613792565b80601f016020809104026020016040519081016040528092919081815260200182805461125890613792565b80156112a55780601f1061127a576101008083540402835291602001916112a5565b820191906000526020600020905b81548152906001019060200180831161128857829003601f168201915b5050505050905090565b6112b7611cdf565b73ffffffffffffffffffffffffffffffffffffffff166112d56111f3565b73ffffffffffffffffffffffffffffffffffffffff161461132b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132290613904565b60405180910390fd5b7f000000000000000000000000fe04eaad3c60c296af8df8321a8598dc7ec940e173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036113b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b090613a48565b60405180910390fd5b6113c38282612ae5565b5050565b6113cf611cdf565b73ffffffffffffffffffffffffffffffffffffffff166113ed6111f3565b73ffffffffffffffffffffffffffffffffffffffff1614611443576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143a90613904565b60405180910390fd5b69021e19e0c9bab240000060068190555069054b40b1f852bda000006007819055506004600b819055506001600c819055506005600a819055506004600e819055506001600f819055506005600d81905550565b600080600160006114a6611cdf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611563576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155a90613ada565b60405180910390fd5b61157761156e611cdf565b85858403611ce7565b600191505092915050565b600061159661158f611cdf565b8484611eb0565b6001905092915050565b60146020528060005260406000206000915054906101000a900460ff1681565b600860009054906101000a900460ff1681565b6115db611cdf565b73ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000776d0b03c9ee3a137874fd2a3c6b39e3a454adfe73ffffffffffffffffffffffffffffffffffffffff1614611668576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165f90613970565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ce90613b46565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611712919061369c565b602060405180830381865afa15801561172f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117539190613b7b565b90508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401611790929190613ba8565b6020604051808303816000875af11580156117af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d39190613be6565b50505050565b6117e1611cdf565b73ffffffffffffffffffffffffffffffffffffffff166117ff6111f3565b73ffffffffffffffffffffffffffffffffffffffff1614611855576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184c90613904565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516118f29190613517565b60405180910390a25050565b60065481565b600a5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611999611cdf565b73ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000776d0b03c9ee3a137874fd2a3c6b39e3a454adfe73ffffffffffffffffffffffffffffffffffffffff1614611a26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1d90613970565b60405180910390fd5b7f000000000000000000000000fe04eaad3c60c296af8df8321a8598dc7ec940e173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015611ac25750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b611b01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af890613c85565b60405180910390fd5b6001600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b7f00000000000000000000000000000000000000000000001b1ae4d6e2ef50000081565b600c5481565b611b8e611cdf565b73ffffffffffffffffffffffffffffffffffffffff16611bac6111f3565b73ffffffffffffffffffffffffffffffffffffffff1614611c02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf990613904565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6890613d17565b60405180910390fd5b611c7a81612a1f565b50565b600f5481565b60075481565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4d90613da9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbc90613e3b565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611ea3919061356e565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1690613ecd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8590613f5f565b60405180910390fd5b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561201b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201290613fcb565b60405180910390fd5b600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156120a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209f90614037565b60405180910390fd5b600081036120c1576120bc83836000612b86565b612a1a565b6120c96111f3565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561213757506121076111f3565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156121705750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156121aa575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156121c35750600560149054906101000a900460ff16155b156125a657600860009054906101000a900460ff166122bd57601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061227d5750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6122bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b3906140a3565b60405180910390fd5b5b601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156123605750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612407576006548111156123aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a190614135565b60405180910390fd5b6007546123b683610d75565b826123c19190613884565b1115612402576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f9906141a1565b60405180910390fd5b6125a5565b601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156124aa5750601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156124f9576006548111156124f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124eb90614233565b60405180910390fd5b6125a4565b601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166125a35760075461255683610d75565b826125619190613884565b11156125a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612599906141a1565b60405180910390fd5b5b5b5b5b60006125b130610d75565b905060007f00000000000000000000000000000000000000000000001b1ae4d6e2ef50000082101590508080156125f45750600860019054906101000a900460ff165b801561260d5750600560149054906101000a900460ff16155b80156126635750601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156126b95750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561270f5750601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612753576001600560146101000a81548160ff021916908315150217905550612737612e05565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806128095750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561281357600090505b60008115612a0a57601460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561287657506000600d54115b15612902576064600d548661288b9190614253565b61289591906142c4565b9050600d54600f54826128a89190614253565b6128b291906142c4565b601160008282546128c39190613884565b92505081905550600d54600e54826128db9190614253565b6128e591906142c4565b601060008282546128f69190613884565b925050819055506129e6565b601460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561295d57506000600a54115b156129e5576064600a54866129729190614253565b61297c91906142c4565b9050600a54600c548261298f9190614253565b61299991906142c4565b601160008282546129aa9190613884565b92505081905550600a54600b54826129c29190614253565b6129cc91906142c4565b601060008282546129dd9190613884565b925050819055505b5b60008111156129fb576129fa873083612b86565b5b8085612a0791906142f5565b94505b612a15878787612b86565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612bf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bec90613ecd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612c64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c5b90613f5f565b60405180910390fd5b612c6f838383613049565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612cf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cec9061439b565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612d889190613884565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612dec919061356e565b60405180910390a3612dff84848461304e565b50505050565b6000612e1030610d75565b90506000601054601154612e249190613884565b9050600080831480612e365750600082145b15612e4357505050613047565b60147f00000000000000000000000000000000000000000000001b1ae4d6e2ef500000612e709190614253565b831115612ea75760147f00000000000000000000000000000000000000000000001b1ae4d6e2ef500000612ea49190614253565b92505b600060028360115486612eba9190614253565b612ec491906142c4565b612ece91906142c4565b905060008185612ede91906142f5565b90506000479050612eee82613053565b60008147612efc91906142f5565b905060006002601154612f0f91906142c4565b87612f1a91906142f5565b60105483612f289190614253565b612f3291906142c4565b905060008183612f4291906142f5565b9050600086118015612f545750600081115b15612fa157612f638682613290565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618582601154604051612f98939291906143bb565b60405180910390a15b600060118190555060006010819055507f000000000000000000000000776d0b03c9ee3a137874fd2a3c6b39e3a454adfe73ffffffffffffffffffffffffffffffffffffffff1647604051612ff5906139c1565b60006040518083038185875af1925050503d8060008114613032576040519150601f19603f3d011682016040523d82523d6000602084013e613037565b606091505b5050809750505050505050505050505b565b505050565b505050565b6000600267ffffffffffffffff8111156130705761306f6143f2565b5b60405190808252806020026020018201604052801561309e5781602001602082028036833780820191505090505b50905030816000815181106130b6576130b5614421565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561315b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061317f9190614465565b8160018151811061319357613192614421565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506131f8307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611ce7565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161325a95949392919061458b565b600060405180830381600087803b15801561327457600080fd5b505af1158015613288573d6000803e3d6000fd5b505050505050565b6132bb307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611ce7565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806133056111f3565b426040518863ffffffff1660e01b8152600401613327969594939291906145e5565b60606040518083038185885af1158015613345573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061336a9190614646565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156133ab578082015181840152602081019050613390565b60008484015250505050565b6000601f19601f8301169050919050565b60006133d382613371565b6133dd818561337c565b93506133ed81856020860161338d565b6133f6816133b7565b840191505092915050565b6000602082019050818103600083015261341b81846133c8565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061345382613428565b9050919050565b61346381613448565b811461346e57600080fd5b50565b6000813590506134808161345a565b92915050565b6000819050919050565b61349981613486565b81146134a457600080fd5b50565b6000813590506134b681613490565b92915050565b600080604083850312156134d3576134d2613423565b5b60006134e185828601613471565b92505060206134f2858286016134a7565b9150509250929050565b60008115159050919050565b613511816134fc565b82525050565b600060208201905061352c6000830184613508565b92915050565b60006020828403121561354857613547613423565b5b600061355684828501613471565b91505092915050565b61356881613486565b82525050565b6000602082019050613583600083018461355f565b92915050565b6000819050919050565b60006135ae6135a96135a484613428565b613589565b613428565b9050919050565b60006135c082613593565b9050919050565b60006135d2826135b5565b9050919050565b6135e2816135c7565b82525050565b60006020820190506135fd60008301846135d9565b92915050565b60008060006060848603121561361c5761361b613423565b5b600061362a86828701613471565b935050602061363b86828701613471565b925050604061364c868287016134a7565b9150509250925092565b600060ff82169050919050565b61366c81613656565b82525050565b60006020820190506136876000830184613663565b92915050565b61369681613448565b82525050565b60006020820190506136b1600083018461368d565b92915050565b6136c0816134fc565b81146136cb57600080fd5b50565b6000813590506136dd816136b7565b92915050565b600080604083850312156136fa576136f9613423565b5b600061370885828601613471565b9250506020613719858286016136ce565b9150509250929050565b6000806040838503121561373a57613739613423565b5b600061374885828601613471565b925050602061375985828601613471565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806137aa57607f821691505b6020821081036137bd576137bc613763565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b600061381f60288361337c565b915061382a826137c3565b604082019050919050565b6000602082019050818103600083015261384e81613812565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061388f82613486565b915061389a83613486565b92508282019050808211156138b2576138b1613855565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006138ee60208361337c565b91506138f9826138b8565b602082019050919050565b6000602082019050818103600083015261391d816138e1565b9050919050565b7f546f6b656e3a2063616c6c6572206973206e6f74207468652048656c70657200600082015250565b600061395a601f8361337c565b915061396582613924565b602082019050919050565b600060208201905081810360008301526139898161394d565b9050919050565b600081905092915050565b50565b60006139ab600083613990565b91506139b68261399b565b600082019050919050565b60006139cc8261399e565b9150819050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613a3260398361337c565b9150613a3d826139d6565b604082019050919050565b60006020820190508181036000830152613a6181613a25565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613ac460258361337c565b9150613acf82613a68565b604082019050919050565b60006020820190508181036000830152613af381613ab7565b9050919050565b7f5f746f6b656e20616464726573732063616e6e6f742062652030000000000000600082015250565b6000613b30601a8361337c565b9150613b3b82613afa565b602082019050919050565b60006020820190508181036000830152613b5f81613b23565b9050919050565b600081519050613b7581613490565b92915050565b600060208284031215613b9157613b90613423565b5b6000613b9f84828501613b66565b91505092915050565b6000604082019050613bbd600083018561368d565b613bca602083018461355f565b9392505050565b600081519050613be0816136b7565b92915050565b600060208284031215613bfc57613bfb613423565b5b6000613c0a84828501613bd1565b91505092915050565b7f43616e6e6f7420626c61636b6c69737420746f6b656e277320763220726f757460008201527f6572206f7220763220706f6f6c2e000000000000000000000000000000000000602082015250565b6000613c6f602e8361337c565b9150613c7a82613c13565b604082019050919050565b60006020820190508181036000830152613c9e81613c62565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613d0160268361337c565b9150613d0c82613ca5565b604082019050919050565b60006020820190508181036000830152613d3081613cf4565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613d9360248361337c565b9150613d9e82613d37565b604082019050919050565b60006020820190508181036000830152613dc281613d86565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613e2560228361337c565b9150613e3082613dc9565b604082019050919050565b60006020820190508181036000830152613e5481613e18565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613eb760258361337c565b9150613ec282613e5b565b604082019050919050565b60006020820190508181036000830152613ee681613eaa565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613f4960238361337c565b9150613f5482613eed565b604082019050919050565b60006020820190508181036000830152613f7881613f3c565b9050919050565b7f53656e64657220626c61636b6c69737465640000000000000000000000000000600082015250565b6000613fb560128361337c565b9150613fc082613f7f565b602082019050919050565b60006020820190508181036000830152613fe481613fa8565b9050919050565b7f526563656976657220626c61636b6c6973746564000000000000000000000000600082015250565b600061402160148361337c565b915061402c82613feb565b602082019050919050565b6000602082019050818103600083015261405081614014565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061408d60168361337c565b915061409882614057565b602082019050919050565b600060208201905081810360008301526140bc81614080565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061411f60358361337c565b915061412a826140c3565b604082019050919050565b6000602082019050818103600083015261414e81614112565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061418b60138361337c565b915061419682614155565b602082019050919050565b600060208201905081810360008301526141ba8161417e565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061421d60368361337c565b9150614228826141c1565b604082019050919050565b6000602082019050818103600083015261424c81614210565b9050919050565b600061425e82613486565b915061426983613486565b925082820261427781613486565b9150828204841483151761428e5761428d613855565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006142cf82613486565b91506142da83613486565b9250826142ea576142e9614295565b5b828204905092915050565b600061430082613486565b915061430b83613486565b925082820390508181111561432357614322613855565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061438560268361337c565b915061439082614329565b604082019050919050565b600060208201905081810360008301526143b481614378565b9050919050565b60006060820190506143d0600083018661355f565b6143dd602083018561355f565b6143ea604083018461355f565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061445f8161345a565b92915050565b60006020828403121561447b5761447a613423565b5b600061448984828501614450565b91505092915050565b6000819050919050565b60006144b76144b26144ad84614492565b613589565b613486565b9050919050565b6144c78161449c565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61450281613448565b82525050565b600061451483836144f9565b60208301905092915050565b6000602082019050919050565b6000614538826144cd565b61454281856144d8565b935061454d836144e9565b8060005b8381101561457e5781516145658882614508565b975061457083614520565b925050600181019050614551565b5085935050505092915050565b600060a0820190506145a0600083018861355f565b6145ad60208301876144be565b81810360408301526145bf818661452d565b90506145ce606083018561368d565b6145db608083018461355f565b9695505050505050565b600060c0820190506145fa600083018961368d565b614607602083018861355f565b61461460408301876144be565b61462160608301866144be565b61462e608083018561368d565b61463b60a083018461355f565b979650505050505050565b60008060006060848603121561465f5761465e613423565b5b600061466d86828701613b66565b935050602061467e86828701613b66565b925050604061468f86828701613b66565b915050925092509256fea2646970667358221220e947e3a7930b62bf4587e327ededa5998eb5060280ecd173fc597b4d4a8be6e064736f6c63430008120033

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

000000000000000000000000776d0b03c9ee3a137874fd2a3c6b39e3a454adfe

-----Decoded View---------------
Arg [0] : _revShareWallet (address): 0x776d0B03c9eE3a137874Fd2A3c6b39e3a454Adfe

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000776d0b03c9ee3a137874fd2a3c6b39e3a454adfe


Deployed Bytecode Sourcemap

31388:13974:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9087:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11320:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32333:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31953:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31433:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10207:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32063:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32179:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11996:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32140:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10049:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12934:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31491:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36917:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32028:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31779:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10378:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2483:103;;;;;;;;;;;;;:::i;:::-;;36040:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45260:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31566:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44481:172;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35433:112;;;;;;;;;;;;;:::i;:::-;;1832:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9306:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36407:306;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35662:370;;;;;;;;;;;;;:::i;:::-;;13727:475;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10734:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32554:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31739:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44066:314;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36217:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31614:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31919:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10997:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44761:361;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31656:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31989:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2741:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32100:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31706:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37051:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9087:100;9141:13;9174:5;9167:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9087:100;:::o;11320:194::-;11428:4;11445:39;11454:12;:10;:12::i;:::-;11468:7;11477:6;11445:8;:39::i;:::-;11502:4;11495:11;;11320:194;;;;:::o;32333:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;31953:29::-;;;;:::o;31433:51::-;;;:::o;10207:108::-;10268:7;10295:12;;10288:19;;10207:108;:::o;32063:30::-;;;;:::o;32179:33::-;;;;:::o;11996:529::-;12136:4;12153:36;12163:6;12171:9;12182:6;12153:9;:36::i;:::-;12202:24;12229:11;:19;12241:6;12229:19;;;;;;;;;;;;;;;:33;12249:12;:10;:12::i;:::-;12229:33;;;;;;;;;;;;;;;;12202:60;;12315:6;12295:16;:26;;12273:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;12425:57;12434:6;12442:12;:10;:12::i;:::-;12475:6;12456:16;:25;12425:8;:57::i;:::-;12513:4;12506:11;;;11996:529;;;;;:::o;32140:32::-;;;;:::o;10049:93::-;10107:5;10132:2;10125:9;;10049:93;:::o;12934:290::-;13047:4;13064:130;13087:12;:10;:12::i;:::-;13114:7;13173:10;13136:11;:25;13148:12;:10;:12::i;:::-;13136:25;;;;;;;;;;;;;;;:34;13162:7;13136:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;13064:8;:130::i;:::-;13212:4;13205:11;;12934:290;;;;:::o;31491:38::-;;;:::o;36917:126::-;36983:4;37007:19;:28;37027:7;37007:28;;;;;;;;;;;;;;;;;;;;;;;;;37000:35;;36917:126;;;:::o;32028:28::-;;;;:::o;31779:31::-;;;;;;;;;;;;;:::o;10378:143::-;10468:7;10495:9;:18;10505:7;10495:18;;;;;;;;;;;;;;;;10488:25;;10378:143;;;:::o;2483:103::-;2063:12;:10;:12::i;:::-;2052:23;;:7;:5;:7::i;:::-;:23;;;2044:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2548:30:::1;2575:1;2548:18;:30::i;:::-;2483:103::o:0;36040:169::-;2063:12;:10;:12::i;:::-;2052:23;;:7;:5;:7::i;:::-;:23;;;2044:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36197:4:::1;36155:31;:39;36187:6;36155:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;36040:169:::0;;:::o;45260:99::-;43871:12;:10;:12::i;:::-;43853:30;;:14;:30;;;43831:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;45346:5:::1;45325:11;:18;45337:5;45325:18;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;45260:99:::0;:::o;31566:39::-;;;:::o;44481:172::-;43871:12;:10;:12::i;:::-;43853:30;;:14;:30;;;43831:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;44555:12:::1;44573:6;:11;;44592:21;44573:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44554:64;;;44637:7;44629:16;;;::::0;::::1;;44543:110;44481:172:::0;:::o;35433:112::-;2063:12;:10;:12::i;:::-;2052:23;;:7;:5;:7::i;:::-;:23;;;2044:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35504:4:::1;35488:13;;:20;;;;;;;;;;;;;;;;;;35533:4;35519:11;;:18;;;;;;;;;;;;;;;;;;35433:112::o:0;1832:87::-;1878:7;1905:6;;;;;;;;;;;1898:13;;1832:87;:::o;9306:104::-;9362:13;9395:7;9388:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9306:104;:::o;36407:306::-;2063:12;:10;:12::i;:::-;2052:23;;:7;:5;:7::i;:::-;:23;;;2044:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36553:13:::1;36545:21;;:4;:21;;::::0;36523:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;36664:41;36693:4;36699:5;36664:28;:41::i;:::-;36407:306:::0;;:::o;35662:370::-;2063:12;:10;:12::i;:::-;2052:23;;:7;:5;:7::i;:::-;:23;;;2044:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35746:19:::1;35723:20;:42;;;;35794:19;35782:9;:31;;;;35851:1;35834:14;:18;;;;35887:1;35869:15;:19;;;;35920:1;35905:12;:16;;;;35952:1;35934:15;:19;;;;35989:1;35970:16;:20;;;;36023:1;36007:13;:17;;;;35662:370::o:0;13727:475::-;13845:4;13862:24;13889:11;:25;13901:12;:10;:12::i;:::-;13889:25;;;;;;;;;;;;;;;:34;13915:7;13889:34;;;;;;;;;;;;;;;;13862:61;;13976:15;13956:16;:35;;13934:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;14092:67;14101:12;:10;:12::i;:::-;14115:7;14143:15;14124:16;:34;14092:8;:67::i;:::-;14190:4;14183:11;;;13727:475;;;;:::o;10734:200::-;10845:4;10862:42;10872:12;:10;:12::i;:::-;10886:9;10897:6;10862:9;:42::i;:::-;10922:4;10915:11;;10734:200;;;;:::o;32554:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;31739:33::-;;;;;;;;;;;;;:::o;44066:314::-;43871:12;:10;:12::i;:::-;43853:30;;:14;:30;;;43831:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;44205:1:::1;44187:20;;:6;:20;;::::0;44179:59:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;44249:24;44283:6;44276:24;;;44309:4;44276:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44249:66;;44333:6;44326:23;;;44350:3;44355:16;44326:46;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;44168:212;44066:314:::0;;:::o;36217:182::-;2063:12;:10;:12::i;:::-;2052:23;;:7;:5;:7::i;:::-;:23;;;2044:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36333:8:::1;36302:19;:28;36322:7;36302:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;36373:7;36357:34;;;36382:8;36357:34;;;;;;:::i;:::-;;;;;;;;36217:182:::0;;:::o;31614:35::-;;;;:::o;31919:27::-;;;;:::o;10997:176::-;11111:7;11138:11;:18;11150:5;11138:18;;;;;;;;;;;;;;;:27;11157:7;11138:27;;;;;;;;;;;;;;;;11131:34;;10997:176;;;;:::o;44761:361::-;43871:12;:10;:12::i;:::-;43853:30;;:14;:30;;;43831:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;44884:13:::1;44863:35;;:9;:35;;;;:137;;;;;44957:42;44919:81;;:9;:81;;;;44863:137;44841:233;;;;;;;;;;;;:::i;:::-;;;;;;;;;45110:4;45085:11;:22;45097:9;45085:22;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;44761:361:::0;:::o;31656:43::-;;;:::o;31989:30::-;;;;:::o;2741:238::-;2063:12;:10;:12::i;:::-;2052:23;;:7;:5;:7::i;:::-;:23;;;2044:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2864:1:::1;2844:22;;:8;:22;;::::0;2822:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;2943:28;2962:8;2943:18;:28::i;:::-;2741:238:::0;:::o;32100:31::-;;;;:::o;31706:24::-;;;;:::o;37051:113::-;37112:4;37136:11;:20;37148:7;37136:20;;;;;;;;;;;;;;;;;;;;;;;;;37129:27;;37051:113;;;:::o;674:98::-;727:7;754:10;747:17;;674:98;:::o;17510:380::-;17663:1;17646:19;;:5;:19;;;17638:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17744:1;17725:21;;:7;:21;;;17717:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17828:6;17798:11;:18;17810:5;17798:18;;;;;;;;;;;;;;;:27;17817:7;17798:27;;;;;;;;;;;;;;;:36;;;;17866:7;17850:32;;17859:5;17850:32;;;17875:6;17850:32;;;;;;:::i;:::-;;;;;;;;17510:380;;;:::o;37172:3672::-;37320:1;37304:18;;:4;:18;;;37296:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37397:1;37383:16;;:2;:16;;;37375:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;37459:11;:17;37471:4;37459:17;;;;;;;;;;;;;;;;;;;;;;;;;37458:18;37450:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;37519:11;:15;37531:2;37519:15;;;;;;;;;;;;;;;;;;;;;;;;;37518:16;37510:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;37586:1;37576:6;:11;37572:93;;37604:28;37620:4;37626:2;37630:1;37604:15;:28::i;:::-;37647:7;;37572:93;37703:7;:5;:7::i;:::-;37695:15;;:4;:15;;;;:45;;;;;37733:7;:5;:7::i;:::-;37727:13;;:2;:13;;;;37695:45;:78;;;;;37771:1;37757:16;;:2;:16;;;;37695:78;:116;;;;;37804:6;37790:21;;:2;:21;;;;37695:116;:142;;;;;37829:8;;;;;;;;;;;37828:9;37695:142;37677:1478;;;37869:13;;;;;;;;;;;37864:203;;37933:19;:25;37953:4;37933:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;37962:19;:23;37982:2;37962:23;;;;;;;;;;;;;;;;;;;;;;;;;37933:52;37903:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;37864:203;38128:25;:31;38154:4;38128:31;;;;;;;;;;;;;;;;;;;;;;;;;:88;;;;;38181:31;:35;38213:2;38181:35;;;;;;;;;;;;;;;;;;;;;;;;;38180:36;38128:88;38106:1038;;;38291:20;;38281:6;:30;;38251:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;38483:9;;38466:13;38476:2;38466:9;:13::i;:::-;38457:6;:22;;;;:::i;:::-;:35;;38427:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;38106:1038;;;38636:25;:29;38662:2;38636:29;;;;;;;;;;;;;;;;;;;;;;;;;:88;;;;;38687:31;:37;38719:4;38687:37;;;;;;;;;;;;;;;;;;;;;;;;;38686:38;38636:88;38614:530;;;38799:20;;38789:6;:30;;38759:158;;;;;;;;;;;;:::i;:::-;;;;;;;;;38614:530;;;38944:31;:35;38976:2;38944:35;;;;;;;;;;;;;;;;;;;;;;;;;38939:205;;39056:9;;39039:13;39049:2;39039:9;:13::i;:::-;39030:6;:22;;;;:::i;:::-;:35;;39000:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;38939:205;38614:530;38106:1038;37677:1478;39167:28;39198:24;39216:4;39198:9;:24::i;:::-;39167:55;;39235:12;39274:18;39250:20;:42;;39235:57;;39323:7;:35;;;;;39347:11;;;;;;;;;;;39323:35;:61;;;;;39376:8;;;;;;;;;;;39375:9;39323:61;:110;;;;;39402:25;:31;39428:4;39402:31;;;;;;;;;;;;;;;;;;;;;;;;;39401:32;39323:110;:153;;;;;39451:19;:25;39471:4;39451:25;;;;;;;;;;;;;;;;;;;;;;;;;39450:26;39323:153;:194;;;;;39494:19;:23;39514:2;39494:23;;;;;;;;;;;;;;;;;;;;;;;;;39493:24;39323:194;39305:326;;;39555:4;39544:8;;:15;;;;;;;;;;;;;;;;;;39576:10;:8;:10::i;:::-;39614:5;39603:8;;:16;;;;;;;;;;;;;;;;;;39305:326;39643:12;39659:8;;;;;;;;;;;39658:9;39643:24;;39769:19;:25;39789:4;39769:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;39798:19;:23;39818:2;39798:23;;;;;;;;;;;;;;;;;;;;;;;;;39769:52;39765:100;;;39848:5;39838:15;;39765:100;39877:12;39982:7;39978:813;;;40031:25;:29;40057:2;40031:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;40080:1;40064:13;;:17;40031:50;40027:615;;;40136:3;40119:13;;40110:6;:22;;;;:::i;:::-;40109:30;;;;:::i;:::-;40102:37;;40208:13;;40188:16;;40181:4;:23;;;;:::i;:::-;40180:41;;;;:::i;:::-;40158:18;;:63;;;;;;;:::i;:::-;;;;;;;;40288:13;;40269:15;;40262:4;:22;;;;:::i;:::-;40261:40;;;;:::i;:::-;40240:17;;:61;;;;;;;:::i;:::-;;;;;;;;40027:615;;;40360:25;:31;40386:4;40360:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;40410:1;40395:12;;:16;40360:51;40356:286;;;40465:3;40449:12;;40440:6;:21;;;;:::i;:::-;40439:29;;;;:::i;:::-;40432:36;;40536:12;;40517:15;;40510:4;:22;;;;:::i;:::-;40509:39;;;;:::i;:::-;40487:18;;:61;;;;;;;:::i;:::-;;;;;;;;40614:12;;40596:14;;40589:4;:21;;;;:::i;:::-;40588:38;;;;:::i;:::-;40567:17;;:59;;;;;;;:::i;:::-;;;;;;;;40356:286;40027:615;40669:1;40662:4;:8;40658:91;;;40691:42;40707:4;40721;40728;40691:15;:42::i;:::-;40658:91;40775:4;40765:14;;;;;:::i;:::-;;;39978:813;40803:33;40819:4;40825:2;40829:6;40803:15;:33::i;:::-;37285:3559;;;;37172:3672;;;;:::o;3139:191::-;3213:16;3232:6;;;;;;;;;;;3213:25;;3258:8;3249:6;;:17;;;;;;;;;;;;;;;;;;3313:8;3282:40;;3303:8;3282:40;;;;;;;;;;;;3202:128;3139:191;:::o;36721:188::-;36838:5;36804:25;:31;36830:4;36804:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;36895:5;36861:40;;36889:4;36861:40;;;;;;;;;;;;36721:188;;:::o;14692:770::-;14850:1;14832:20;;:6;:20;;;14824:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;14934:1;14913:23;;:9;:23;;;14905:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;14989:47;15010:6;15018:9;15029:6;14989:20;:47::i;:::-;15049:21;15073:9;:17;15083:6;15073:17;;;;;;;;;;;;;;;;15049:41;;15140:6;15123:13;:23;;15101:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;15284:6;15268:13;:22;15248:9;:17;15258:6;15248:17;;;;;;;;;;;;;;;:42;;;;15336:6;15312:9;:20;15322:9;15312:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;15377:9;15360:35;;15369:6;15360:35;;;15388:6;15360:35;;;;;;:::i;:::-;;;;;;;;15408:46;15428:6;15436:9;15447:6;15408:19;:46::i;:::-;14813:649;14692:770;;;:::o;41987:1524::-;42026:23;42052:24;42070:4;42052:9;:24::i;:::-;42026:50;;42087:25;42136:17;;42115:18;;:38;;;;:::i;:::-;42087:66;;42164:12;42212:1;42193:15;:20;:46;;;;42238:1;42217:17;:22;42193:46;42189:85;;;42256:7;;;;;42189:85;42329:2;42308:18;:23;;;;:::i;:::-;42290:15;:41;42286:115;;;42387:2;42366:18;:23;;;;:::i;:::-;42348:41;;42286:115;42462:23;42575:1;42542:17;42507:18;;42489:15;:36;;;;:::i;:::-;42488:71;;;;:::i;:::-;:88;;;;:::i;:::-;42462:114;;42587:26;42634:15;42616;:33;;;;:::i;:::-;42587:62;;42662:25;42690:21;42662:49;;42724:36;42741:18;42724:16;:36::i;:::-;42773:18;42818:17;42794:21;:41;;;;:::i;:::-;42773:62;;42848:22;42964:1;42943:18;;:22;;;;:::i;:::-;42922:17;:44;;;;:::i;:::-;42887:17;;42874:10;:30;;;;:::i;:::-;42873:94;;;;:::i;:::-;42848:119;;42980:23;43019:14;43006:10;:27;;;;:::i;:::-;42980:53;;43068:1;43050:15;:19;:42;;;;;43091:1;43073:15;:19;43050:42;43046:278;;;43109:46;43122:15;43139;43109:12;:46::i;:::-;43175:137;43208:18;43245:15;43279:18;;43175:137;;;;;;;;:::i;:::-;;;;;;;;43046:278;43357:1;43336:18;:22;;;;43389:1;43369:17;:21;;;;43425:14;43417:28;;43467:21;43417:86;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43403:100;;;;;42015:1496;;;;;;;;;41987:1524;:::o;18490:125::-;;;;:::o;19219:124::-;;;;:::o;40852:606::-;40978:21;41016:1;41002:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40978:40;;41047:4;41029;41034:1;41029:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;41073:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41063:4;41068:1;41063:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;41108:62;41125:4;41140:15;41158:11;41108:8;:62::i;:::-;41209:15;:66;;;41290:11;41316:1;41377:4;41404;41424:15;41209:241;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40907:551;40852:606;:::o;41466:513::-;41614:62;41631:4;41646:15;41664:11;41614:8;:62::i;:::-;41719:15;:31;;;41758:9;41791:4;41811:11;41837:1;41880;41923:7;:5;:7::i;:::-;41945:15;41719:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;41466:513;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:118::-;3868:24;3886:5;3868:24;:::i;:::-;3863:3;3856:37;3781:118;;:::o;3905:222::-;3998:4;4036:2;4025:9;4021:18;4013:26;;4049:71;4117:1;4106:9;4102:17;4093:6;4049:71;:::i;:::-;3905:222;;;;:::o;4133:60::-;4161:3;4182:5;4175:12;;4133:60;;;:::o;4199:142::-;4249:9;4282:53;4300:34;4309:24;4327:5;4309:24;:::i;:::-;4300:34;:::i;:::-;4282:53;:::i;:::-;4269:66;;4199:142;;;:::o;4347:126::-;4397:9;4430:37;4461:5;4430:37;:::i;:::-;4417:50;;4347:126;;;:::o;4479:153::-;4556:9;4589:37;4620:5;4589:37;:::i;:::-;4576:50;;4479:153;;;:::o;4638:185::-;4752:64;4810:5;4752:64;:::i;:::-;4747:3;4740:77;4638:185;;:::o;4829:276::-;4949:4;4987:2;4976:9;4972:18;4964:26;;5000:98;5095:1;5084:9;5080:17;5071:6;5000:98;:::i;:::-;4829:276;;;;:::o;5111:619::-;5188:6;5196;5204;5253:2;5241:9;5232:7;5228:23;5224:32;5221:119;;;5259:79;;:::i;:::-;5221:119;5379:1;5404:53;5449:7;5440:6;5429:9;5425:22;5404:53;:::i;:::-;5394:63;;5350:117;5506:2;5532:53;5577:7;5568:6;5557:9;5553:22;5532:53;:::i;:::-;5522:63;;5477:118;5634:2;5660:53;5705:7;5696:6;5685:9;5681:22;5660:53;:::i;:::-;5650:63;;5605:118;5111:619;;;;;:::o;5736:86::-;5771:7;5811:4;5804:5;5800:16;5789:27;;5736:86;;;:::o;5828:112::-;5911:22;5927:5;5911:22;:::i;:::-;5906:3;5899:35;5828:112;;:::o;5946:214::-;6035:4;6073:2;6062:9;6058:18;6050:26;;6086:67;6150:1;6139:9;6135:17;6126:6;6086:67;:::i;:::-;5946:214;;;;:::o;6166:118::-;6253:24;6271:5;6253:24;:::i;:::-;6248:3;6241:37;6166:118;;:::o;6290:222::-;6383:4;6421:2;6410:9;6406:18;6398:26;;6434:71;6502:1;6491:9;6487:17;6478:6;6434:71;:::i;:::-;6290:222;;;;:::o;6518:116::-;6588:21;6603:5;6588:21;:::i;:::-;6581:5;6578:32;6568:60;;6624:1;6621;6614:12;6568:60;6518:116;:::o;6640:133::-;6683:5;6721:6;6708:20;6699:29;;6737:30;6761:5;6737:30;:::i;:::-;6640:133;;;;:::o;6779:468::-;6844:6;6852;6901:2;6889:9;6880:7;6876:23;6872:32;6869:119;;;6907:79;;:::i;:::-;6869:119;7027:1;7052:53;7097:7;7088:6;7077:9;7073:22;7052:53;:::i;:::-;7042:63;;6998:117;7154:2;7180:50;7222:7;7213:6;7202:9;7198:22;7180:50;:::i;:::-;7170:60;;7125:115;6779:468;;;;;:::o;7253:474::-;7321:6;7329;7378:2;7366:9;7357:7;7353:23;7349:32;7346:119;;;7384:79;;:::i;:::-;7346:119;7504:1;7529:53;7574:7;7565:6;7554:9;7550:22;7529:53;:::i;:::-;7519:63;;7475:117;7631:2;7657:53;7702:7;7693:6;7682:9;7678:22;7657:53;:::i;:::-;7647:63;;7602:118;7253:474;;;;;:::o;7733:180::-;7781:77;7778:1;7771:88;7878:4;7875:1;7868:15;7902:4;7899:1;7892:15;7919:320;7963:6;8000:1;7994:4;7990:12;7980:22;;8047:1;8041:4;8037:12;8068:18;8058:81;;8124:4;8116:6;8112:17;8102:27;;8058:81;8186:2;8178:6;8175:14;8155:18;8152:38;8149:84;;8205:18;;:::i;:::-;8149:84;7970:269;7919:320;;;:::o;8245:227::-;8385:34;8381:1;8373:6;8369:14;8362:58;8454:10;8449:2;8441:6;8437:15;8430:35;8245:227;:::o;8478:366::-;8620:3;8641:67;8705:2;8700:3;8641:67;:::i;:::-;8634:74;;8717:93;8806:3;8717:93;:::i;:::-;8835:2;8830:3;8826:12;8819:19;;8478:366;;;:::o;8850:419::-;9016:4;9054:2;9043:9;9039:18;9031:26;;9103:9;9097:4;9093:20;9089:1;9078:9;9074:17;9067:47;9131:131;9257:4;9131:131;:::i;:::-;9123:139;;8850:419;;;:::o;9275:180::-;9323:77;9320:1;9313:88;9420:4;9417:1;9410:15;9444:4;9441:1;9434:15;9461:191;9501:3;9520:20;9538:1;9520:20;:::i;:::-;9515:25;;9554:20;9572:1;9554:20;:::i;:::-;9549:25;;9597:1;9594;9590:9;9583:16;;9618:3;9615:1;9612:10;9609:36;;;9625:18;;:::i;:::-;9609:36;9461:191;;;;:::o;9658:182::-;9798:34;9794:1;9786:6;9782:14;9775:58;9658:182;:::o;9846:366::-;9988:3;10009:67;10073:2;10068:3;10009:67;:::i;:::-;10002:74;;10085:93;10174:3;10085:93;:::i;:::-;10203:2;10198:3;10194:12;10187:19;;9846:366;;;:::o;10218:419::-;10384:4;10422:2;10411:9;10407:18;10399:26;;10471:9;10465:4;10461:20;10457:1;10446:9;10442:17;10435:47;10499:131;10625:4;10499:131;:::i;:::-;10491:139;;10218:419;;;:::o;10643:181::-;10783:33;10779:1;10771:6;10767:14;10760:57;10643:181;:::o;10830:366::-;10972:3;10993:67;11057:2;11052:3;10993:67;:::i;:::-;10986:74;;11069:93;11158:3;11069:93;:::i;:::-;11187:2;11182:3;11178:12;11171:19;;10830:366;;;:::o;11202:419::-;11368:4;11406:2;11395:9;11391:18;11383:26;;11455:9;11449:4;11445:20;11441:1;11430:9;11426:17;11419:47;11483:131;11609:4;11483:131;:::i;:::-;11475:139;;11202:419;;;:::o;11627:147::-;11728:11;11765:3;11750:18;;11627:147;;;;:::o;11780:114::-;;:::o;11900:398::-;12059:3;12080:83;12161:1;12156:3;12080:83;:::i;:::-;12073:90;;12172:93;12261:3;12172:93;:::i;:::-;12290:1;12285:3;12281:11;12274:18;;11900:398;;;:::o;12304:379::-;12488:3;12510:147;12653:3;12510:147;:::i;:::-;12503:154;;12674:3;12667:10;;12304:379;;;:::o;12689:244::-;12829:34;12825:1;12817:6;12813:14;12806:58;12898:27;12893:2;12885:6;12881:15;12874:52;12689:244;:::o;12939:366::-;13081:3;13102:67;13166:2;13161:3;13102:67;:::i;:::-;13095:74;;13178:93;13267:3;13178:93;:::i;:::-;13296:2;13291:3;13287:12;13280:19;;12939:366;;;:::o;13311:419::-;13477:4;13515:2;13504:9;13500:18;13492:26;;13564:9;13558:4;13554:20;13550:1;13539:9;13535:17;13528:47;13592:131;13718:4;13592:131;:::i;:::-;13584:139;;13311:419;;;:::o;13736:224::-;13876:34;13872:1;13864:6;13860:14;13853:58;13945:7;13940:2;13932:6;13928:15;13921:32;13736:224;:::o;13966:366::-;14108:3;14129:67;14193:2;14188:3;14129:67;:::i;:::-;14122:74;;14205:93;14294:3;14205:93;:::i;:::-;14323:2;14318:3;14314:12;14307:19;;13966:366;;;:::o;14338:419::-;14504:4;14542:2;14531:9;14527:18;14519:26;;14591:9;14585:4;14581:20;14577:1;14566:9;14562:17;14555:47;14619:131;14745:4;14619:131;:::i;:::-;14611:139;;14338:419;;;:::o;14763:176::-;14903:28;14899:1;14891:6;14887:14;14880:52;14763:176;:::o;14945:366::-;15087:3;15108:67;15172:2;15167:3;15108:67;:::i;:::-;15101:74;;15184:93;15273:3;15184:93;:::i;:::-;15302:2;15297:3;15293:12;15286:19;;14945:366;;;:::o;15317:419::-;15483:4;15521:2;15510:9;15506:18;15498:26;;15570:9;15564:4;15560:20;15556:1;15545:9;15541:17;15534:47;15598:131;15724:4;15598:131;:::i;:::-;15590:139;;15317:419;;;:::o;15742:143::-;15799:5;15830:6;15824:13;15815:22;;15846:33;15873:5;15846:33;:::i;:::-;15742:143;;;;:::o;15891:351::-;15961:6;16010:2;15998:9;15989:7;15985:23;15981:32;15978:119;;;16016:79;;:::i;:::-;15978:119;16136:1;16161:64;16217:7;16208:6;16197:9;16193:22;16161:64;:::i;:::-;16151:74;;16107:128;15891:351;;;;:::o;16248:332::-;16369:4;16407:2;16396:9;16392:18;16384:26;;16420:71;16488:1;16477:9;16473:17;16464:6;16420:71;:::i;:::-;16501:72;16569:2;16558:9;16554:18;16545:6;16501:72;:::i;:::-;16248:332;;;;;:::o;16586:137::-;16640:5;16671:6;16665:13;16656:22;;16687:30;16711:5;16687:30;:::i;:::-;16586:137;;;;:::o;16729:345::-;16796:6;16845:2;16833:9;16824:7;16820:23;16816:32;16813:119;;;16851:79;;:::i;:::-;16813:119;16971:1;16996:61;17049:7;17040:6;17029:9;17025:22;16996:61;:::i;:::-;16986:71;;16942:125;16729:345;;;;:::o;17080:233::-;17220:34;17216:1;17208:6;17204:14;17197:58;17289:16;17284:2;17276:6;17272:15;17265:41;17080:233;:::o;17319:366::-;17461:3;17482:67;17546:2;17541:3;17482:67;:::i;:::-;17475:74;;17558:93;17647:3;17558:93;:::i;:::-;17676:2;17671:3;17667:12;17660:19;;17319:366;;;:::o;17691:419::-;17857:4;17895:2;17884:9;17880:18;17872:26;;17944:9;17938:4;17934:20;17930:1;17919:9;17915:17;17908:47;17972:131;18098:4;17972:131;:::i;:::-;17964:139;;17691:419;;;:::o;18116:225::-;18256:34;18252:1;18244:6;18240:14;18233:58;18325:8;18320:2;18312:6;18308:15;18301:33;18116:225;:::o;18347:366::-;18489:3;18510:67;18574:2;18569:3;18510:67;:::i;:::-;18503:74;;18586:93;18675:3;18586:93;:::i;:::-;18704:2;18699:3;18695:12;18688:19;;18347:366;;;:::o;18719:419::-;18885:4;18923:2;18912:9;18908:18;18900:26;;18972:9;18966:4;18962:20;18958:1;18947:9;18943:17;18936:47;19000:131;19126:4;19000:131;:::i;:::-;18992:139;;18719:419;;;:::o;19144:223::-;19284:34;19280:1;19272:6;19268:14;19261:58;19353:6;19348:2;19340:6;19336:15;19329:31;19144:223;:::o;19373:366::-;19515:3;19536:67;19600:2;19595:3;19536:67;:::i;:::-;19529:74;;19612:93;19701:3;19612:93;:::i;:::-;19730:2;19725:3;19721:12;19714:19;;19373:366;;;:::o;19745:419::-;19911:4;19949:2;19938:9;19934:18;19926:26;;19998:9;19992:4;19988:20;19984:1;19973:9;19969:17;19962:47;20026:131;20152:4;20026:131;:::i;:::-;20018:139;;19745:419;;;:::o;20170:221::-;20310:34;20306:1;20298:6;20294:14;20287:58;20379:4;20374:2;20366:6;20362:15;20355:29;20170:221;:::o;20397:366::-;20539:3;20560:67;20624:2;20619:3;20560:67;:::i;:::-;20553:74;;20636:93;20725:3;20636:93;:::i;:::-;20754:2;20749:3;20745:12;20738:19;;20397:366;;;:::o;20769:419::-;20935:4;20973:2;20962:9;20958:18;20950:26;;21022:9;21016:4;21012:20;21008:1;20997:9;20993:17;20986:47;21050:131;21176:4;21050:131;:::i;:::-;21042:139;;20769:419;;;:::o;21194:224::-;21334:34;21330:1;21322:6;21318:14;21311:58;21403:7;21398:2;21390:6;21386:15;21379:32;21194:224;:::o;21424:366::-;21566:3;21587:67;21651:2;21646:3;21587:67;:::i;:::-;21580:74;;21663:93;21752:3;21663:93;:::i;:::-;21781:2;21776:3;21772:12;21765:19;;21424:366;;;:::o;21796:419::-;21962:4;22000:2;21989:9;21985:18;21977:26;;22049:9;22043:4;22039:20;22035:1;22024:9;22020:17;22013:47;22077:131;22203:4;22077:131;:::i;:::-;22069:139;;21796:419;;;:::o;22221:222::-;22361:34;22357:1;22349:6;22345:14;22338:58;22430:5;22425:2;22417:6;22413:15;22406:30;22221:222;:::o;22449:366::-;22591:3;22612:67;22676:2;22671:3;22612:67;:::i;:::-;22605:74;;22688:93;22777:3;22688:93;:::i;:::-;22806:2;22801:3;22797:12;22790:19;;22449:366;;;:::o;22821:419::-;22987:4;23025:2;23014:9;23010:18;23002:26;;23074:9;23068:4;23064:20;23060:1;23049:9;23045:17;23038:47;23102:131;23228:4;23102:131;:::i;:::-;23094:139;;22821:419;;;:::o;23246:168::-;23386:20;23382:1;23374:6;23370:14;23363:44;23246:168;:::o;23420:366::-;23562:3;23583:67;23647:2;23642:3;23583:67;:::i;:::-;23576:74;;23659:93;23748:3;23659:93;:::i;:::-;23777:2;23772:3;23768:12;23761:19;;23420:366;;;:::o;23792:419::-;23958:4;23996:2;23985:9;23981:18;23973:26;;24045:9;24039:4;24035:20;24031:1;24020:9;24016:17;24009:47;24073:131;24199:4;24073:131;:::i;:::-;24065:139;;23792:419;;;:::o;24217:170::-;24357:22;24353:1;24345:6;24341:14;24334:46;24217:170;:::o;24393:366::-;24535:3;24556:67;24620:2;24615:3;24556:67;:::i;:::-;24549:74;;24632:93;24721:3;24632:93;:::i;:::-;24750:2;24745:3;24741:12;24734:19;;24393:366;;;:::o;24765:419::-;24931:4;24969:2;24958:9;24954:18;24946:26;;25018:9;25012:4;25008:20;25004:1;24993:9;24989:17;24982:47;25046:131;25172:4;25046:131;:::i;:::-;25038:139;;24765:419;;;:::o;25190:172::-;25330:24;25326:1;25318:6;25314:14;25307:48;25190:172;:::o;25368:366::-;25510:3;25531:67;25595:2;25590:3;25531:67;:::i;:::-;25524:74;;25607:93;25696:3;25607:93;:::i;:::-;25725:2;25720:3;25716:12;25709:19;;25368:366;;;:::o;25740:419::-;25906:4;25944:2;25933:9;25929:18;25921:26;;25993:9;25987:4;25983:20;25979:1;25968:9;25964:17;25957:47;26021:131;26147:4;26021:131;:::i;:::-;26013:139;;25740:419;;;:::o;26165:240::-;26305:34;26301:1;26293:6;26289:14;26282:58;26374:23;26369:2;26361:6;26357:15;26350:48;26165:240;:::o;26411:366::-;26553:3;26574:67;26638:2;26633:3;26574:67;:::i;:::-;26567:74;;26650:93;26739:3;26650:93;:::i;:::-;26768:2;26763:3;26759:12;26752:19;;26411:366;;;:::o;26783:419::-;26949:4;26987:2;26976:9;26972:18;26964:26;;27036:9;27030:4;27026:20;27022:1;27011:9;27007:17;27000:47;27064:131;27190:4;27064:131;:::i;:::-;27056:139;;26783:419;;;:::o;27208:169::-;27348:21;27344:1;27336:6;27332:14;27325:45;27208:169;:::o;27383:366::-;27525:3;27546:67;27610:2;27605:3;27546:67;:::i;:::-;27539:74;;27622:93;27711:3;27622:93;:::i;:::-;27740:2;27735:3;27731:12;27724:19;;27383:366;;;:::o;27755:419::-;27921:4;27959:2;27948:9;27944:18;27936:26;;28008:9;28002:4;27998:20;27994:1;27983:9;27979:17;27972:47;28036:131;28162:4;28036:131;:::i;:::-;28028:139;;27755:419;;;:::o;28180:241::-;28320:34;28316:1;28308:6;28304:14;28297:58;28389:24;28384:2;28376:6;28372:15;28365:49;28180:241;:::o;28427:366::-;28569:3;28590:67;28654:2;28649:3;28590:67;:::i;:::-;28583:74;;28666:93;28755:3;28666:93;:::i;:::-;28784:2;28779:3;28775:12;28768:19;;28427:366;;;:::o;28799:419::-;28965:4;29003:2;28992:9;28988:18;28980:26;;29052:9;29046:4;29042:20;29038:1;29027:9;29023:17;29016:47;29080:131;29206:4;29080:131;:::i;:::-;29072:139;;28799:419;;;:::o;29224:410::-;29264:7;29287:20;29305:1;29287:20;:::i;:::-;29282:25;;29321:20;29339:1;29321:20;:::i;:::-;29316:25;;29376:1;29373;29369:9;29398:30;29416:11;29398:30;:::i;:::-;29387:41;;29577:1;29568:7;29564:15;29561:1;29558:22;29538:1;29531:9;29511:83;29488:139;;29607:18;;:::i;:::-;29488:139;29272:362;29224:410;;;;:::o;29640:180::-;29688:77;29685:1;29678:88;29785:4;29782:1;29775:15;29809:4;29806:1;29799:15;29826:185;29866:1;29883:20;29901:1;29883:20;:::i;:::-;29878:25;;29917:20;29935:1;29917:20;:::i;:::-;29912:25;;29956:1;29946:35;;29961:18;;:::i;:::-;29946:35;30003:1;30000;29996:9;29991:14;;29826:185;;;;:::o;30017:194::-;30057:4;30077:20;30095:1;30077:20;:::i;:::-;30072:25;;30111:20;30129:1;30111:20;:::i;:::-;30106:25;;30155:1;30152;30148:9;30140:17;;30179:1;30173:4;30170:11;30167:37;;;30184:18;;:::i;:::-;30167:37;30017:194;;;;:::o;30217:225::-;30357:34;30353:1;30345:6;30341:14;30334:58;30426:8;30421:2;30413:6;30409:15;30402:33;30217:225;:::o;30448:366::-;30590:3;30611:67;30675:2;30670:3;30611:67;:::i;:::-;30604:74;;30687:93;30776:3;30687:93;:::i;:::-;30805:2;30800:3;30796:12;30789:19;;30448:366;;;:::o;30820:419::-;30986:4;31024:2;31013:9;31009:18;31001:26;;31073:9;31067:4;31063:20;31059:1;31048:9;31044:17;31037:47;31101:131;31227:4;31101:131;:::i;:::-;31093:139;;30820:419;;;:::o;31245:442::-;31394:4;31432:2;31421:9;31417:18;31409:26;;31445:71;31513:1;31502:9;31498:17;31489:6;31445:71;:::i;:::-;31526:72;31594:2;31583:9;31579:18;31570:6;31526:72;:::i;:::-;31608;31676:2;31665:9;31661:18;31652:6;31608:72;:::i;:::-;31245:442;;;;;;:::o;31693:180::-;31741:77;31738:1;31731:88;31838:4;31835:1;31828:15;31862:4;31859:1;31852:15;31879:180;31927:77;31924:1;31917:88;32024:4;32021:1;32014:15;32048:4;32045:1;32038:15;32065:143;32122:5;32153:6;32147:13;32138:22;;32169:33;32196:5;32169:33;:::i;:::-;32065:143;;;;:::o;32214:351::-;32284:6;32333:2;32321:9;32312:7;32308:23;32304:32;32301:119;;;32339:79;;:::i;:::-;32301:119;32459:1;32484:64;32540:7;32531:6;32520:9;32516:22;32484:64;:::i;:::-;32474:74;;32430:128;32214:351;;;;:::o;32571:85::-;32616:7;32645:5;32634:16;;32571:85;;;:::o;32662:158::-;32720:9;32753:61;32771:42;32780:32;32806:5;32780:32;:::i;:::-;32771:42;:::i;:::-;32753:61;:::i;:::-;32740:74;;32662:158;;;:::o;32826:147::-;32921:45;32960:5;32921:45;:::i;:::-;32916:3;32909:58;32826:147;;:::o;32979:114::-;33046:6;33080:5;33074:12;33064:22;;32979:114;;;:::o;33099:184::-;33198:11;33232:6;33227:3;33220:19;33272:4;33267:3;33263:14;33248:29;;33099:184;;;;:::o;33289:132::-;33356:4;33379:3;33371:11;;33409:4;33404:3;33400:14;33392:22;;33289:132;;;:::o;33427:108::-;33504:24;33522:5;33504:24;:::i;:::-;33499:3;33492:37;33427:108;;:::o;33541:179::-;33610:10;33631:46;33673:3;33665:6;33631:46;:::i;:::-;33709:4;33704:3;33700:14;33686:28;;33541:179;;;;:::o;33726:113::-;33796:4;33828;33823:3;33819:14;33811:22;;33726:113;;;:::o;33875:732::-;33994:3;34023:54;34071:5;34023:54;:::i;:::-;34093:86;34172:6;34167:3;34093:86;:::i;:::-;34086:93;;34203:56;34253:5;34203:56;:::i;:::-;34282:7;34313:1;34298:284;34323:6;34320:1;34317:13;34298:284;;;34399:6;34393:13;34426:63;34485:3;34470:13;34426:63;:::i;:::-;34419:70;;34512:60;34565:6;34512:60;:::i;:::-;34502:70;;34358:224;34345:1;34342;34338:9;34333:14;;34298:284;;;34302:14;34598:3;34591:10;;33999:608;;;33875:732;;;;:::o;34613:831::-;34876:4;34914:3;34903:9;34899:19;34891:27;;34928:71;34996:1;34985:9;34981:17;34972:6;34928:71;:::i;:::-;35009:80;35085:2;35074:9;35070:18;35061:6;35009:80;:::i;:::-;35136:9;35130:4;35126:20;35121:2;35110:9;35106:18;35099:48;35164:108;35267:4;35258:6;35164:108;:::i;:::-;35156:116;;35282:72;35350:2;35339:9;35335:18;35326:6;35282:72;:::i;:::-;35364:73;35432:3;35421:9;35417:19;35408:6;35364:73;:::i;:::-;34613:831;;;;;;;;:::o;35450:807::-;35699:4;35737:3;35726:9;35722:19;35714:27;;35751:71;35819:1;35808:9;35804:17;35795:6;35751:71;:::i;:::-;35832:72;35900:2;35889:9;35885:18;35876:6;35832:72;:::i;:::-;35914:80;35990:2;35979:9;35975:18;35966:6;35914:80;:::i;:::-;36004;36080:2;36069:9;36065:18;36056:6;36004:80;:::i;:::-;36094:73;36162:3;36151:9;36147:19;36138:6;36094:73;:::i;:::-;36177;36245:3;36234:9;36230:19;36221:6;36177:73;:::i;:::-;35450:807;;;;;;;;;:::o;36263:663::-;36351:6;36359;36367;36416:2;36404:9;36395:7;36391:23;36387:32;36384:119;;;36422:79;;:::i;:::-;36384:119;36542:1;36567:64;36623:7;36614:6;36603:9;36599:22;36567:64;:::i;:::-;36557:74;;36513:128;36680:2;36706:64;36762:7;36753:6;36742:9;36738:22;36706:64;:::i;:::-;36696:74;;36651:129;36819:2;36845:64;36901:7;36892:6;36881:9;36877:22;36845:64;:::i;:::-;36835:74;;36790:129;36263:663;;;;;:::o

Swarm Source

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