ETH Price: $2,658.12 (+1.22%)

Token

TIGGER (TIGGER)
 

Overview

Max Total Supply

1,260,000,000,000,000 TIGGER

Holders

166

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
kucoin-13.eth
Balance
0.000000001 TIGGER

Value
$0.00
0xd7b6ebf6e717cbfd77aab0c70dfc908a4d9ba6c1
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:
TIGGER

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT
// File: IPancakePair.sol


pragma solidity ^0.8.4;

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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}
// File: ISwapFactory.sol


pragma solidity ^0.8.4;

interface ISwapFactory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
    function getPair(address tokenA, address tokenB) external returns (address pair);
}
// File: ISwapRouter.sol


pragma solidity ^0.8.4;

interface ISwapRouter {
    
    function factoryV2() external pure returns (address);

    function factory() external pure returns (address);

    function WETH() external pure returns (address);
    
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to
    ) external;

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

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    
    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
    
}
// File: @openzeppelin/contracts/utils/math/SafeMath.sol


// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/SafeMath.sol)

pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

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

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


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

pragma solidity ^0.8.0;

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

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

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


// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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


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

pragma solidity ^0.8.0;




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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

        _beforeTokenTransfer(from, to, amount);

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

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

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

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

        _totalSupply += amount;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);

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

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

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

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
        }

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

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

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

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

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

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

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

// File: TOKEN\DD2.0.sol


pragma solidity ^0.8.4;


contract TIGGER is ERC20,Ownable {
    using SafeMath for uint256;
    ISwapRouter private uniswapV2Router;
    address public uniswapV2Pair;
    address public usdt;
    mapping(address => bool) public whiteList;
    mapping(address => bool) public blackList;
    uint256 refundCount;
    address public fundAddress;//营销地址
    uint256 public buyRate=1;
    uint256 public sellRate=1;
    bool public switchOn=false;
    address admin;
    
    constructor()ERC20("TIGGER", "TIGGER") {
        fundAddress=0x29ec1DFD4EB94eb70c7d36A818f495E1ba311ffC;
        admin=0x23C2d0d1C3A7263b00585f2f445F5BaC684D9432;
        usdt=0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
        uint256 total=1260000000000000*10**decimals();
        _mint(admin, total);
        whiteList[admin] = true;
        whiteList[address(this)] = true;
    }

    function setRate(uint256 _buy,uint256 _sell) external onlyOwner{
        buyRate=_buy;
        sellRate=_sell;
    }
    
    function setSwitch(bool _switch) external onlyOwner{
        switchOn=_switch;
    }

    function setWhiteList(address[] calldata _addresses,bool _b)external onlyOwner{
        for(uint256 i=0;i<_addresses.length;i++){
            if(_addresses[i]!=address(0)){
                whiteList[_addresses[i]]=_b;
            }
        }
    }
    function setBlackList(address[] calldata _addresses,bool _b)external onlyOwner{
        for(uint256 i=0;i<_addresses.length;i++){
            if(_addresses[i]!=address(0)){
                blackList[_addresses[i]]=_b;
            }
        }
    }
    
    function initPair(address _token,address _swap)external onlyOwner{
        usdt=_token;//0xc6e88A94dcEA6f032d805D10558aCf67279f7b4E;//usdt test
        address swap=_swap;//0xD99D1c33F9fC3444f8101754aBC46c52416550D1;//bsc test
        uniswapV2Router = ISwapRouter(swap);
        uniswapV2Pair = ISwapFactory(uniswapV2Router.factory()).createPair(address(this), usdt);
        ERC20(usdt).approve(address(uniswapV2Router), type(uint256).max);
        _approve(address(this), address(uniswapV2Router),type(uint256).max);
        _approve(address(this), address(this),type(uint256).max);
        _approve(admin, address(uniswapV2Router),type(uint256).max);
    }
    function decimals() public view virtual override returns (uint8) {
        return 9;
    }
    function setFundAddress(address _fundAddress) external onlyOwner{
        fundAddress=_fundAddress;
    }
   
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(amount > 0, "amount must gt 0");
        require(!blackList[to],"black not alow");
        require(!blackList[from],"black not alow");
        if(from != uniswapV2Pair && to != uniswapV2Pair) {
            super._transfer(from, to, amount);
            return;
        }
        if(from == uniswapV2Pair) {
            require(switchOn,"not open");
            if(whiteList[to]){
                super._transfer(from, to, amount);
                return;
            }
            super._transfer(from, address(this), amount.mul(buyRate).div(100));
            refundCount+=amount.mul(buyRate).div(100);
            super._transfer(from, to, amount.mul(100-buyRate).div(100));
            return;
        }
        if(to == uniswapV2Pair) {
            if(whiteList[from]){
                super._transfer(from, to, amount);
                return;
            }
            require(switchOn,"not open");
            super._transfer(from, address(this), amount.mul(sellRate).div(100));
            refundCount+=amount.mul(sellRate).div(100);
            swapUsdt(refundCount,fundAddress);
            refundCount=0;
            super._transfer(from, to, amount.mul(100-sellRate).div(100));
            return;
        }
    }
    
    bool private inSwap;
    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }
     function swapUsdt(uint256 tokenAmount,address to) private lockTheSwap {
        uint256 balance = balanceOf(address(this));
        address[] memory path = new address[](2);
        if(balance<tokenAmount)tokenAmount=balance;
        if(tokenAmount>0){
            path[0] = address(this);
            path[1] = usdt;
            uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(tokenAmount,0,path,to,block.timestamp);
        }
    }

    
    function errorToken(address _token) external onlyOwner{
        ERC20(_token).transfer(msg.sender, IERC20(_token).balanceOf(address(this)));
    }
    
    function withdawOwner(uint256 amount) public onlyOwner{
        payable(msg.sender).transfer(amount);
    }
   
    receive() external payable {}
    function isContract(address account) internal view returns (bool) {
        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blackList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyRate","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":[{"internalType":"address","name":"_token","type":"address"}],"name":"errorToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"fundAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_swap","type":"address"}],"name":"initPair","outputs":[],"stateMutability":"nonpayable","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":"sellRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"},{"internalType":"bool","name":"_b","type":"bool"}],"name":"setBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_fundAddress","type":"address"}],"name":"setFundAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buy","type":"uint256"},{"internalType":"uint256","name":"_sell","type":"uint256"}],"name":"setRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_switch","type":"bool"}],"name":"setSwitch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"},{"internalType":"bool","name":"_b","type":"bool"}],"name":"setWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"switchOn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"usdt","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whiteList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdawOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526001600d556001600e556000600f60006101000a81548160ff0219169083151502179055503480156200003657600080fd5b506040518060400160405280600681526020017f54494747455200000000000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f54494747455200000000000000000000000000000000000000000000000000008152508160039081620000b49190620007f3565b508060049081620000c69190620007f3565b505050620000e9620000dd6200032b60201b60201c565b6200033360201b60201c565b7329ec1dfd4eb94eb70c7d36a818f495e1ba311ffc600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507323c2d0d1c3a7263b00585f2f445f5bac684d9432600f60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000620001fa620003f960201b60201c565b600a62000208919062000a6a565b660479f69c6ac0006200021c919062000abb565b905062000252600f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826200040260201b60201c565b600160096000600f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505062000bf2565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006009905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000474576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200046b9062000b67565b60405180910390fd5b62000488600083836200056f60201b60201c565b80600260008282546200049c919062000b89565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200054f919062000bd5565b60405180910390a36200056b600083836200057460201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620005fb57607f821691505b602082108103620006115762000610620005b3565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200067b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200063c565b6200068786836200063c565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620006d4620006ce620006c8846200069f565b620006a9565b6200069f565b9050919050565b6000819050919050565b620006f083620006b3565b62000708620006ff82620006db565b84845462000649565b825550505050565b600090565b6200071f62000710565b6200072c818484620006e5565b505050565b5b8181101562000754576200074860008262000715565b60018101905062000732565b5050565b601f821115620007a3576200076d8162000617565b62000778846200062c565b8101602085101562000788578190505b620007a062000797856200062c565b83018262000731565b50505b505050565b600082821c905092915050565b6000620007c860001984600802620007a8565b1980831691505092915050565b6000620007e38383620007b5565b9150826002028217905092915050565b620007fe8262000579565b67ffffffffffffffff8111156200081a576200081962000584565b5b620008268254620005e2565b6200083382828562000758565b600060209050601f8311600181146200086b576000841562000856578287015190505b620008628582620007d5565b865550620008d2565b601f1984166200087b8662000617565b60005b82811015620008a5578489015182556001820191506020850194506020810190506200087e565b86831015620008c55784890151620008c1601f891682620007b5565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115620009685780860481111562000940576200093f620008da565b5b6001851615620009505780820291505b8081029050620009608562000909565b945062000920565b94509492505050565b60008262000983576001905062000a56565b8162000993576000905062000a56565b8160018114620009ac5760028114620009b757620009ed565b600191505062000a56565b60ff841115620009cc57620009cb620008da565b5b8360020a915084821115620009e657620009e5620008da565b5b5062000a56565b5060208310610133831016604e8410600b841016171562000a275782820a90508381111562000a215762000a20620008da565b5b62000a56565b62000a36848484600162000916565b9250905081840481111562000a505762000a4f620008da565b5b81810290505b9392505050565b600060ff82169050919050565b600062000a77826200069f565b915062000a848362000a5d565b925062000ab37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000971565b905092915050565b600062000ac8826200069f565b915062000ad5836200069f565b925082820262000ae5816200069f565b9150828204841483151762000aff5762000afe620008da565b5b5092915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000b4f601f8362000b06565b915062000b5c8262000b17565b602082019050919050565b6000602082019050818103600083015262000b828162000b40565b9050919050565b600062000b96826200069f565b915062000ba3836200069f565b925082820190508082111562000bbe5762000bbd620008da565b5b92915050565b62000bcf816200069f565b82525050565b600060208201905062000bec600083018462000bc4565b92915050565b61319e8062000c026000396000f3fe6080604052600436106101d15760003560e01c8063715018a6116100f7578063a9059cbb11610095578063e82bef2911610064578063e82bef29146106b9578063f2fde38b146106e4578063f9f8f8951461070d578063fc37987b14610738576101d8565b8063a9059cbb146105ed578063d99274481461062a578063dd62ed3e14610653578063e43f696e14610690576101d8565b80638f85a043116100d15780638f85a0431461053357806395d89b411461055c57806397cefc4c14610587578063a457c2d7146105b0576101d8565b8063715018a6146104c857806385dc3004146104df5780638da5cb5b14610508576101d8565b8063372c12b11161016f57806349bd5a5e1161013e57806349bd5a5e1461040c5780636217229b146104375780636f6579a31461046257806370a082311461048b576101d8565b8063372c12b11461032c578063395093511461036957806346df2ccb146103a65780634838d165146103cf576101d8565b80631c6a0c4c116101ab5780631c6a0c4c1461027057806323b872dd146102995780632f48ab7d146102d6578063313ce56714610301576101d8565b806306fdde03146101dd578063095ea7b31461020857806318160ddd14610245576101d8565b366101d857005b600080fd5b3480156101e957600080fd5b506101f2610763565b6040516101ff919061228e565b60405180910390f35b34801561021457600080fd5b5061022f600480360381019061022a919061234e565b6107f5565b60405161023c91906123a9565b60405180910390f35b34801561025157600080fd5b5061025a610818565b60405161026791906123d3565b60405180910390f35b34801561027c57600080fd5b50610297600480360381019061029291906123ee565b610822565b005b3480156102a557600080fd5b506102c060048036038101906102bb919061241b565b610874565b6040516102cd91906123a9565b60405180910390f35b3480156102e257600080fd5b506102eb6108a3565b6040516102f8919061247d565b60405180910390f35b34801561030d57600080fd5b506103166108c9565b60405161032391906124b4565b60405180910390f35b34801561033857600080fd5b50610353600480360381019061034e91906124cf565b6108d2565b60405161036091906123a9565b60405180910390f35b34801561037557600080fd5b50610390600480360381019061038b919061234e565b6108f2565b60405161039d91906123a9565b60405180910390f35b3480156103b257600080fd5b506103cd60048036038101906103c891906124fc565b610929565b005b3480156103db57600080fd5b506103f660048036038101906103f191906124cf565b610943565b60405161040391906123a9565b60405180910390f35b34801561041857600080fd5b50610421610963565b60405161042e919061247d565b60405180910390f35b34801561044357600080fd5b5061044c610989565b60405161045991906123d3565b60405180910390f35b34801561046e57600080fd5b506104896004803603810190610484919061253c565b61098f565b005b34801561049757600080fd5b506104b260048036038101906104ad91906124cf565b610d5d565b6040516104bf91906123d3565b60405180910390f35b3480156104d457600080fd5b506104dd610da5565b005b3480156104eb57600080fd5b50610506600480360381019061050191906124cf565b610db9565b005b34801561051457600080fd5b5061051d610e05565b60405161052a919061247d565b60405180910390f35b34801561053f57600080fd5b5061055a6004803603810190610555919061260d565b610e2f565b005b34801561056857600080fd5b50610571610f38565b60405161057e919061228e565b60405180910390f35b34801561059357600080fd5b506105ae60048036038101906105a9919061266d565b610fca565b005b3480156105bc57600080fd5b506105d760048036038101906105d2919061234e565b610fef565b6040516105e491906123a9565b60405180910390f35b3480156105f957600080fd5b50610614600480360381019061060f919061234e565b611066565b60405161062191906123a9565b60405180910390f35b34801561063657600080fd5b50610651600480360381019061064c91906124cf565b611089565b005b34801561065f57600080fd5b5061067a6004803603810190610675919061253c565b61118c565b60405161068791906123d3565b60405180910390f35b34801561069c57600080fd5b506106b760048036038101906106b2919061260d565b611213565b005b3480156106c557600080fd5b506106ce61131c565b6040516106db919061247d565b60405180910390f35b3480156106f057600080fd5b5061070b600480360381019061070691906124cf565b611342565b005b34801561071957600080fd5b506107226113c5565b60405161072f91906123a9565b60405180910390f35b34801561074457600080fd5b5061074d6113d8565b60405161075a91906123d3565b60405180910390f35b606060038054610772906126c9565b80601f016020809104026020016040519081016040528092919081815260200182805461079e906126c9565b80156107eb5780601f106107c0576101008083540402835291602001916107eb565b820191906000526020600020905b8154815290600101906020018083116107ce57829003601f168201915b5050505050905090565b6000806108006113de565b905061080d8185856113e6565b600191505092915050565b6000600254905090565b61082a6115af565b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610870573d6000803e3d6000fd5b5050565b60008061087f6113de565b905061088c85828561162d565b6108978585856116b9565b60019150509392505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006009905090565b60096020528060005260406000206000915054906101000a900460ff1681565b6000806108fd6113de565b905061091e81858561090f858961118c565b6109199190612729565b6113e6565b600191505092915050565b6109316115af565b81600d8190555080600e819055505050565b600a6020528060005260406000206000915054906101000a900460ff1681565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b6109976115af565b81600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600081905080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aaf9190612772565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401610b0b92919061279f565b6020604051808303816000875af1158015610b2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b4e9190612772565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401610c2d9291906127c8565b6020604051808303816000875af1158015610c4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c709190612806565b50610cbe30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6113e6565b610ce930307fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6113e6565b610d58600f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6113e6565b505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610dad6115af565b610db76000611c89565b565b610dc16115af565b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610e376115af565b60005b83839050811015610f3257600073ffffffffffffffffffffffffffffffffffffffff16848483818110610e7057610e6f612833565b5b9050602002016020810190610e8591906124cf565b73ffffffffffffffffffffffffffffffffffffffff1614610f1f5781600a6000868685818110610eb857610eb7612833565b5b9050602002016020810190610ecd91906124cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b8080610f2a90612862565b915050610e3a565b50505050565b606060048054610f47906126c9565b80601f0160208091040260200160405190810160405280929190818152602001828054610f73906126c9565b8015610fc05780601f10610f9557610100808354040283529160200191610fc0565b820191906000526020600020905b815481529060010190602001808311610fa357829003601f168201915b5050505050905090565b610fd26115af565b80600f60006101000a81548160ff02191690831515021790555050565b600080610ffa6113de565b90506000611008828661118c565b90508381101561104d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110449061291c565b60405180910390fd5b61105a82868684036113e6565b60019250505092915050565b6000806110716113de565b905061107e8185856116b9565b600191505092915050565b6110916115af565b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb338373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016110e7919061247d565b602060405180830381865afa158015611104573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111289190612951565b6040518363ffffffff1660e01b81526004016111459291906127c8565b6020604051808303816000875af1158015611164573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111889190612806565b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61121b6115af565b60005b8383905081101561131657600073ffffffffffffffffffffffffffffffffffffffff1684848381811061125457611253612833565b5b905060200201602081019061126991906124cf565b73ffffffffffffffffffffffffffffffffffffffff161461130357816009600086868581811061129c5761129b612833565b5b90506020020160208101906112b191906124cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b808061130e90612862565b91505061121e565b50505050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61134a6115af565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036113b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b0906129f0565b60405180910390fd5b6113c281611c89565b50565b600f60009054906101000a900460ff1681565b600d5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611455576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144c90612a82565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036114c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114bb90612b14565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516115a291906123d3565b60405180910390a3505050565b6115b76113de565b73ffffffffffffffffffffffffffffffffffffffff166115d5610e05565b73ffffffffffffffffffffffffffffffffffffffff161461162b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162290612b80565b60405180910390fd5b565b6000611639848461118c565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146116b357818110156116a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169c90612bec565b60405180910390fd5b6116b284848484036113e6565b5b50505050565b600081116116fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f390612c58565b60405180910390fd5b600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611789576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178090612cc4565b60405180910390fd5b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611816576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180d90612cc4565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156118c25750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156118d7576118d2838383611d4f565b611c84565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611a9257600f60009054906101000a900460ff1661197b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197290612d30565b60405180910390fd5b600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156119dd576119d8838383611d4f565b611c84565b611a0f8330611a0a60646119fc600d5487611fc590919063ffffffff16565b611fdb90919063ffffffff16565b611d4f565b611a376064611a29600d5484611fc590919063ffffffff16565b611fdb90919063ffffffff16565b600b6000828254611a489190612729565b92505081905550611a8d8383611a886064611a7a600d546064611a6b9190612d50565b87611fc590919063ffffffff16565b611fdb90919063ffffffff16565b611d4f565b611c84565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c8357600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611b4957611b44838383611d4f565b611c84565b600f60009054906101000a900460ff16611b98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8f90612d30565b60405180910390fd5b611bca8330611bc56064611bb7600e5487611fc590919063ffffffff16565b611fdb90919063ffffffff16565b611d4f565b611bf26064611be4600e5484611fc590919063ffffffff16565b611fdb90919063ffffffff16565b600b6000828254611c039190612729565b92505081905550611c38600b54600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611ff1565b6000600b81905550611c7e8383611c796064611c6b600e546064611c5c9190612d50565b87611fc590919063ffffffff16565b611fdb90919063ffffffff16565b611d4f565b611c84565b5b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611dbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db590612df6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2490612e88565b60405180910390fd5b611e388383836121f4565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611ebe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb590612f1a565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611fac91906123d3565b60405180910390a3611fbf8484846121f9565b50505050565b60008183611fd39190612f3a565b905092915050565b60008183611fe99190612fab565b905092915050565b6001600f60156101000a81548160ff021916908315150217905550600061201730610d5d565b90506000600267ffffffffffffffff81111561203657612035612fdc565b5b6040519080825280602002602001820160405280156120645781602001602082028036833780820191505090505b50905083821015612073578193505b60008411156121d357308160008151811061209157612090612833565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160018151811061210257612101612833565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c11d7958560008487426040518663ffffffff1660e01b81526004016121a095949392919061310e565b600060405180830381600087803b1580156121ba57600080fd5b505af11580156121ce573d6000803e3d6000fd5b505050505b50506000600f60156101000a81548160ff0219169083151502179055505050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561223857808201518184015260208101905061221d565b60008484015250505050565b6000601f19601f8301169050919050565b6000612260826121fe565b61226a8185612209565b935061227a81856020860161221a565b61228381612244565b840191505092915050565b600060208201905081810360008301526122a88184612255565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006122e5826122ba565b9050919050565b6122f5816122da565b811461230057600080fd5b50565b600081359050612312816122ec565b92915050565b6000819050919050565b61232b81612318565b811461233657600080fd5b50565b60008135905061234881612322565b92915050565b60008060408385031215612365576123646122b0565b5b600061237385828601612303565b925050602061238485828601612339565b9150509250929050565b60008115159050919050565b6123a38161238e565b82525050565b60006020820190506123be600083018461239a565b92915050565b6123cd81612318565b82525050565b60006020820190506123e860008301846123c4565b92915050565b600060208284031215612404576124036122b0565b5b600061241284828501612339565b91505092915050565b600080600060608486031215612434576124336122b0565b5b600061244286828701612303565b935050602061245386828701612303565b925050604061246486828701612339565b9150509250925092565b612477816122da565b82525050565b6000602082019050612492600083018461246e565b92915050565b600060ff82169050919050565b6124ae81612498565b82525050565b60006020820190506124c960008301846124a5565b92915050565b6000602082840312156124e5576124e46122b0565b5b60006124f384828501612303565b91505092915050565b60008060408385031215612513576125126122b0565b5b600061252185828601612339565b925050602061253285828601612339565b9150509250929050565b60008060408385031215612553576125526122b0565b5b600061256185828601612303565b925050602061257285828601612303565b9150509250929050565b600080fd5b600080fd5b600080fd5b60008083601f8401126125a1576125a061257c565b5b8235905067ffffffffffffffff8111156125be576125bd612581565b5b6020830191508360208202830111156125da576125d9612586565b5b9250929050565b6125ea8161238e565b81146125f557600080fd5b50565b600081359050612607816125e1565b92915050565b600080600060408486031215612626576126256122b0565b5b600084013567ffffffffffffffff811115612644576126436122b5565b5b6126508682870161258b565b93509350506020612663868287016125f8565b9150509250925092565b600060208284031215612683576126826122b0565b5b6000612691848285016125f8565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806126e157607f821691505b6020821081036126f4576126f361269a565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061273482612318565b915061273f83612318565b9250828201905080821115612757576127566126fa565b5b92915050565b60008151905061276c816122ec565b92915050565b600060208284031215612788576127876122b0565b5b60006127968482850161275d565b91505092915050565b60006040820190506127b4600083018561246e565b6127c1602083018461246e565b9392505050565b60006040820190506127dd600083018561246e565b6127ea60208301846123c4565b9392505050565b600081519050612800816125e1565b92915050565b60006020828403121561281c5761281b6122b0565b5b600061282a848285016127f1565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061286d82612318565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361289f5761289e6126fa565b5b600182019050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612906602583612209565b9150612911826128aa565b604082019050919050565b60006020820190508181036000830152612935816128f9565b9050919050565b60008151905061294b81612322565b92915050565b600060208284031215612967576129666122b0565b5b60006129758482850161293c565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006129da602683612209565b91506129e58261297e565b604082019050919050565b60006020820190508181036000830152612a09816129cd565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612a6c602483612209565b9150612a7782612a10565b604082019050919050565b60006020820190508181036000830152612a9b81612a5f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612afe602283612209565b9150612b0982612aa2565b604082019050919050565b60006020820190508181036000830152612b2d81612af1565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612b6a602083612209565b9150612b7582612b34565b602082019050919050565b60006020820190508181036000830152612b9981612b5d565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612bd6601d83612209565b9150612be182612ba0565b602082019050919050565b60006020820190508181036000830152612c0581612bc9565b9050919050565b7f616d6f756e74206d757374206774203000000000000000000000000000000000600082015250565b6000612c42601083612209565b9150612c4d82612c0c565b602082019050919050565b60006020820190508181036000830152612c7181612c35565b9050919050565b7f626c61636b206e6f7420616c6f77000000000000000000000000000000000000600082015250565b6000612cae600e83612209565b9150612cb982612c78565b602082019050919050565b60006020820190508181036000830152612cdd81612ca1565b9050919050565b7f6e6f74206f70656e000000000000000000000000000000000000000000000000600082015250565b6000612d1a600883612209565b9150612d2582612ce4565b602082019050919050565b60006020820190508181036000830152612d4981612d0d565b9050919050565b6000612d5b82612318565b9150612d6683612318565b9250828203905081811115612d7e57612d7d6126fa565b5b92915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612de0602583612209565b9150612deb82612d84565b604082019050919050565b60006020820190508181036000830152612e0f81612dd3565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612e72602383612209565b9150612e7d82612e16565b604082019050919050565b60006020820190508181036000830152612ea181612e65565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000612f04602683612209565b9150612f0f82612ea8565b604082019050919050565b60006020820190508181036000830152612f3381612ef7565b9050919050565b6000612f4582612318565b9150612f5083612318565b9250828202612f5e81612318565b91508282048414831517612f7557612f746126fa565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612fb682612318565b9150612fc183612318565b925082612fd157612fd0612f7c565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000819050919050565b6000819050919050565b600061303a6130356130308461300b565b613015565b612318565b9050919050565b61304a8161301f565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613085816122da565b82525050565b6000613097838361307c565b60208301905092915050565b6000602082019050919050565b60006130bb82613050565b6130c5818561305b565b93506130d08361306c565b8060005b838110156131015781516130e8888261308b565b97506130f3836130a3565b9250506001810190506130d4565b5085935050505092915050565b600060a08201905061312360008301886123c4565b6131306020830187613041565b818103604083015261314281866130b0565b9050613151606083018561246e565b61315e60808301846123c4565b969550505050505056fea26469706673582212203591b95ceb1b93546356b3f39cd06a2d99779bbfc04cc77606d623bb75aed68a64736f6c63430008120033

Deployed Bytecode

0x6080604052600436106101d15760003560e01c8063715018a6116100f7578063a9059cbb11610095578063e82bef2911610064578063e82bef29146106b9578063f2fde38b146106e4578063f9f8f8951461070d578063fc37987b14610738576101d8565b8063a9059cbb146105ed578063d99274481461062a578063dd62ed3e14610653578063e43f696e14610690576101d8565b80638f85a043116100d15780638f85a0431461053357806395d89b411461055c57806397cefc4c14610587578063a457c2d7146105b0576101d8565b8063715018a6146104c857806385dc3004146104df5780638da5cb5b14610508576101d8565b8063372c12b11161016f57806349bd5a5e1161013e57806349bd5a5e1461040c5780636217229b146104375780636f6579a31461046257806370a082311461048b576101d8565b8063372c12b11461032c578063395093511461036957806346df2ccb146103a65780634838d165146103cf576101d8565b80631c6a0c4c116101ab5780631c6a0c4c1461027057806323b872dd146102995780632f48ab7d146102d6578063313ce56714610301576101d8565b806306fdde03146101dd578063095ea7b31461020857806318160ddd14610245576101d8565b366101d857005b600080fd5b3480156101e957600080fd5b506101f2610763565b6040516101ff919061228e565b60405180910390f35b34801561021457600080fd5b5061022f600480360381019061022a919061234e565b6107f5565b60405161023c91906123a9565b60405180910390f35b34801561025157600080fd5b5061025a610818565b60405161026791906123d3565b60405180910390f35b34801561027c57600080fd5b50610297600480360381019061029291906123ee565b610822565b005b3480156102a557600080fd5b506102c060048036038101906102bb919061241b565b610874565b6040516102cd91906123a9565b60405180910390f35b3480156102e257600080fd5b506102eb6108a3565b6040516102f8919061247d565b60405180910390f35b34801561030d57600080fd5b506103166108c9565b60405161032391906124b4565b60405180910390f35b34801561033857600080fd5b50610353600480360381019061034e91906124cf565b6108d2565b60405161036091906123a9565b60405180910390f35b34801561037557600080fd5b50610390600480360381019061038b919061234e565b6108f2565b60405161039d91906123a9565b60405180910390f35b3480156103b257600080fd5b506103cd60048036038101906103c891906124fc565b610929565b005b3480156103db57600080fd5b506103f660048036038101906103f191906124cf565b610943565b60405161040391906123a9565b60405180910390f35b34801561041857600080fd5b50610421610963565b60405161042e919061247d565b60405180910390f35b34801561044357600080fd5b5061044c610989565b60405161045991906123d3565b60405180910390f35b34801561046e57600080fd5b506104896004803603810190610484919061253c565b61098f565b005b34801561049757600080fd5b506104b260048036038101906104ad91906124cf565b610d5d565b6040516104bf91906123d3565b60405180910390f35b3480156104d457600080fd5b506104dd610da5565b005b3480156104eb57600080fd5b50610506600480360381019061050191906124cf565b610db9565b005b34801561051457600080fd5b5061051d610e05565b60405161052a919061247d565b60405180910390f35b34801561053f57600080fd5b5061055a6004803603810190610555919061260d565b610e2f565b005b34801561056857600080fd5b50610571610f38565b60405161057e919061228e565b60405180910390f35b34801561059357600080fd5b506105ae60048036038101906105a9919061266d565b610fca565b005b3480156105bc57600080fd5b506105d760048036038101906105d2919061234e565b610fef565b6040516105e491906123a9565b60405180910390f35b3480156105f957600080fd5b50610614600480360381019061060f919061234e565b611066565b60405161062191906123a9565b60405180910390f35b34801561063657600080fd5b50610651600480360381019061064c91906124cf565b611089565b005b34801561065f57600080fd5b5061067a6004803603810190610675919061253c565b61118c565b60405161068791906123d3565b60405180910390f35b34801561069c57600080fd5b506106b760048036038101906106b2919061260d565b611213565b005b3480156106c557600080fd5b506106ce61131c565b6040516106db919061247d565b60405180910390f35b3480156106f057600080fd5b5061070b600480360381019061070691906124cf565b611342565b005b34801561071957600080fd5b506107226113c5565b60405161072f91906123a9565b60405180910390f35b34801561074457600080fd5b5061074d6113d8565b60405161075a91906123d3565b60405180910390f35b606060038054610772906126c9565b80601f016020809104026020016040519081016040528092919081815260200182805461079e906126c9565b80156107eb5780601f106107c0576101008083540402835291602001916107eb565b820191906000526020600020905b8154815290600101906020018083116107ce57829003601f168201915b5050505050905090565b6000806108006113de565b905061080d8185856113e6565b600191505092915050565b6000600254905090565b61082a6115af565b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610870573d6000803e3d6000fd5b5050565b60008061087f6113de565b905061088c85828561162d565b6108978585856116b9565b60019150509392505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006009905090565b60096020528060005260406000206000915054906101000a900460ff1681565b6000806108fd6113de565b905061091e81858561090f858961118c565b6109199190612729565b6113e6565b600191505092915050565b6109316115af565b81600d8190555080600e819055505050565b600a6020528060005260406000206000915054906101000a900460ff1681565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b6109976115af565b81600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600081905080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aaf9190612772565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401610b0b92919061279f565b6020604051808303816000875af1158015610b2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b4e9190612772565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401610c2d9291906127c8565b6020604051808303816000875af1158015610c4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c709190612806565b50610cbe30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6113e6565b610ce930307fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6113e6565b610d58600f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6113e6565b505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610dad6115af565b610db76000611c89565b565b610dc16115af565b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610e376115af565b60005b83839050811015610f3257600073ffffffffffffffffffffffffffffffffffffffff16848483818110610e7057610e6f612833565b5b9050602002016020810190610e8591906124cf565b73ffffffffffffffffffffffffffffffffffffffff1614610f1f5781600a6000868685818110610eb857610eb7612833565b5b9050602002016020810190610ecd91906124cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b8080610f2a90612862565b915050610e3a565b50505050565b606060048054610f47906126c9565b80601f0160208091040260200160405190810160405280929190818152602001828054610f73906126c9565b8015610fc05780601f10610f9557610100808354040283529160200191610fc0565b820191906000526020600020905b815481529060010190602001808311610fa357829003601f168201915b5050505050905090565b610fd26115af565b80600f60006101000a81548160ff02191690831515021790555050565b600080610ffa6113de565b90506000611008828661118c565b90508381101561104d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110449061291c565b60405180910390fd5b61105a82868684036113e6565b60019250505092915050565b6000806110716113de565b905061107e8185856116b9565b600191505092915050565b6110916115af565b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb338373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016110e7919061247d565b602060405180830381865afa158015611104573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111289190612951565b6040518363ffffffff1660e01b81526004016111459291906127c8565b6020604051808303816000875af1158015611164573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111889190612806565b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61121b6115af565b60005b8383905081101561131657600073ffffffffffffffffffffffffffffffffffffffff1684848381811061125457611253612833565b5b905060200201602081019061126991906124cf565b73ffffffffffffffffffffffffffffffffffffffff161461130357816009600086868581811061129c5761129b612833565b5b90506020020160208101906112b191906124cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b808061130e90612862565b91505061121e565b50505050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61134a6115af565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036113b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b0906129f0565b60405180910390fd5b6113c281611c89565b50565b600f60009054906101000a900460ff1681565b600d5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611455576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144c90612a82565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036114c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114bb90612b14565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516115a291906123d3565b60405180910390a3505050565b6115b76113de565b73ffffffffffffffffffffffffffffffffffffffff166115d5610e05565b73ffffffffffffffffffffffffffffffffffffffff161461162b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162290612b80565b60405180910390fd5b565b6000611639848461118c565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146116b357818110156116a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169c90612bec565b60405180910390fd5b6116b284848484036113e6565b5b50505050565b600081116116fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f390612c58565b60405180910390fd5b600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611789576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178090612cc4565b60405180910390fd5b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611816576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180d90612cc4565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156118c25750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156118d7576118d2838383611d4f565b611c84565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611a9257600f60009054906101000a900460ff1661197b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197290612d30565b60405180910390fd5b600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156119dd576119d8838383611d4f565b611c84565b611a0f8330611a0a60646119fc600d5487611fc590919063ffffffff16565b611fdb90919063ffffffff16565b611d4f565b611a376064611a29600d5484611fc590919063ffffffff16565b611fdb90919063ffffffff16565b600b6000828254611a489190612729565b92505081905550611a8d8383611a886064611a7a600d546064611a6b9190612d50565b87611fc590919063ffffffff16565b611fdb90919063ffffffff16565b611d4f565b611c84565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c8357600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611b4957611b44838383611d4f565b611c84565b600f60009054906101000a900460ff16611b98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8f90612d30565b60405180910390fd5b611bca8330611bc56064611bb7600e5487611fc590919063ffffffff16565b611fdb90919063ffffffff16565b611d4f565b611bf26064611be4600e5484611fc590919063ffffffff16565b611fdb90919063ffffffff16565b600b6000828254611c039190612729565b92505081905550611c38600b54600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611ff1565b6000600b81905550611c7e8383611c796064611c6b600e546064611c5c9190612d50565b87611fc590919063ffffffff16565b611fdb90919063ffffffff16565b611d4f565b611c84565b5b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611dbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db590612df6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2490612e88565b60405180910390fd5b611e388383836121f4565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611ebe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb590612f1a565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611fac91906123d3565b60405180910390a3611fbf8484846121f9565b50505050565b60008183611fd39190612f3a565b905092915050565b60008183611fe99190612fab565b905092915050565b6001600f60156101000a81548160ff021916908315150217905550600061201730610d5d565b90506000600267ffffffffffffffff81111561203657612035612fdc565b5b6040519080825280602002602001820160405280156120645781602001602082028036833780820191505090505b50905083821015612073578193505b60008411156121d357308160008151811061209157612090612833565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160018151811061210257612101612833565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c11d7958560008487426040518663ffffffff1660e01b81526004016121a095949392919061310e565b600060405180830381600087803b1580156121ba57600080fd5b505af11580156121ce573d6000803e3d6000fd5b505050505b50506000600f60156101000a81548160ff0219169083151502179055505050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561223857808201518184015260208101905061221d565b60008484015250505050565b6000601f19601f8301169050919050565b6000612260826121fe565b61226a8185612209565b935061227a81856020860161221a565b61228381612244565b840191505092915050565b600060208201905081810360008301526122a88184612255565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006122e5826122ba565b9050919050565b6122f5816122da565b811461230057600080fd5b50565b600081359050612312816122ec565b92915050565b6000819050919050565b61232b81612318565b811461233657600080fd5b50565b60008135905061234881612322565b92915050565b60008060408385031215612365576123646122b0565b5b600061237385828601612303565b925050602061238485828601612339565b9150509250929050565b60008115159050919050565b6123a38161238e565b82525050565b60006020820190506123be600083018461239a565b92915050565b6123cd81612318565b82525050565b60006020820190506123e860008301846123c4565b92915050565b600060208284031215612404576124036122b0565b5b600061241284828501612339565b91505092915050565b600080600060608486031215612434576124336122b0565b5b600061244286828701612303565b935050602061245386828701612303565b925050604061246486828701612339565b9150509250925092565b612477816122da565b82525050565b6000602082019050612492600083018461246e565b92915050565b600060ff82169050919050565b6124ae81612498565b82525050565b60006020820190506124c960008301846124a5565b92915050565b6000602082840312156124e5576124e46122b0565b5b60006124f384828501612303565b91505092915050565b60008060408385031215612513576125126122b0565b5b600061252185828601612339565b925050602061253285828601612339565b9150509250929050565b60008060408385031215612553576125526122b0565b5b600061256185828601612303565b925050602061257285828601612303565b9150509250929050565b600080fd5b600080fd5b600080fd5b60008083601f8401126125a1576125a061257c565b5b8235905067ffffffffffffffff8111156125be576125bd612581565b5b6020830191508360208202830111156125da576125d9612586565b5b9250929050565b6125ea8161238e565b81146125f557600080fd5b50565b600081359050612607816125e1565b92915050565b600080600060408486031215612626576126256122b0565b5b600084013567ffffffffffffffff811115612644576126436122b5565b5b6126508682870161258b565b93509350506020612663868287016125f8565b9150509250925092565b600060208284031215612683576126826122b0565b5b6000612691848285016125f8565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806126e157607f821691505b6020821081036126f4576126f361269a565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061273482612318565b915061273f83612318565b9250828201905080821115612757576127566126fa565b5b92915050565b60008151905061276c816122ec565b92915050565b600060208284031215612788576127876122b0565b5b60006127968482850161275d565b91505092915050565b60006040820190506127b4600083018561246e565b6127c1602083018461246e565b9392505050565b60006040820190506127dd600083018561246e565b6127ea60208301846123c4565b9392505050565b600081519050612800816125e1565b92915050565b60006020828403121561281c5761281b6122b0565b5b600061282a848285016127f1565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061286d82612318565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361289f5761289e6126fa565b5b600182019050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612906602583612209565b9150612911826128aa565b604082019050919050565b60006020820190508181036000830152612935816128f9565b9050919050565b60008151905061294b81612322565b92915050565b600060208284031215612967576129666122b0565b5b60006129758482850161293c565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006129da602683612209565b91506129e58261297e565b604082019050919050565b60006020820190508181036000830152612a09816129cd565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612a6c602483612209565b9150612a7782612a10565b604082019050919050565b60006020820190508181036000830152612a9b81612a5f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612afe602283612209565b9150612b0982612aa2565b604082019050919050565b60006020820190508181036000830152612b2d81612af1565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612b6a602083612209565b9150612b7582612b34565b602082019050919050565b60006020820190508181036000830152612b9981612b5d565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612bd6601d83612209565b9150612be182612ba0565b602082019050919050565b60006020820190508181036000830152612c0581612bc9565b9050919050565b7f616d6f756e74206d757374206774203000000000000000000000000000000000600082015250565b6000612c42601083612209565b9150612c4d82612c0c565b602082019050919050565b60006020820190508181036000830152612c7181612c35565b9050919050565b7f626c61636b206e6f7420616c6f77000000000000000000000000000000000000600082015250565b6000612cae600e83612209565b9150612cb982612c78565b602082019050919050565b60006020820190508181036000830152612cdd81612ca1565b9050919050565b7f6e6f74206f70656e000000000000000000000000000000000000000000000000600082015250565b6000612d1a600883612209565b9150612d2582612ce4565b602082019050919050565b60006020820190508181036000830152612d4981612d0d565b9050919050565b6000612d5b82612318565b9150612d6683612318565b9250828203905081811115612d7e57612d7d6126fa565b5b92915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612de0602583612209565b9150612deb82612d84565b604082019050919050565b60006020820190508181036000830152612e0f81612dd3565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612e72602383612209565b9150612e7d82612e16565b604082019050919050565b60006020820190508181036000830152612ea181612e65565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000612f04602683612209565b9150612f0f82612ea8565b604082019050919050565b60006020820190508181036000830152612f3381612ef7565b9050919050565b6000612f4582612318565b9150612f5083612318565b9250828202612f5e81612318565b91508282048414831517612f7557612f746126fa565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612fb682612318565b9150612fc183612318565b925082612fd157612fd0612f7c565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000819050919050565b6000819050919050565b600061303a6130356130308461300b565b613015565b612318565b9050919050565b61304a8161301f565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613085816122da565b82525050565b6000613097838361307c565b60208301905092915050565b6000602082019050919050565b60006130bb82613050565b6130c5818561305b565b93506130d08361306c565b8060005b838110156131015781516130e8888261308b565b97506130f3836130a3565b9250506001810190506130d4565b5085935050505092915050565b600060a08201905061312360008301886123c4565b6131306020830187613041565b818103604083015261314281866130b0565b9050613151606083018561246e565b61315e60808301846123c4565b969550505050505056fea26469706673582212203591b95ceb1b93546356b3f39cd06a2d99779bbfc04cc77606d623bb75aed68a64736f6c63430008120033

Deployed Bytecode Sourcemap

32125:5021:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21073:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23433:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22202:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36792:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24214:261;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32275:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34415:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32301:41;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24884:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32991:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32349:41;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32240:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32501:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33740:669;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22373:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14528:103;;;;;;;;;;;;;:::i;:::-;;34513:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13887:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33475:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21292:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33122:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25625:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22706:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36632:148;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22962:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33216:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32423:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14786:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32533:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32470:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21073:100;21127:13;21160:5;21153:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21073:100;:::o;23433:201::-;23516:4;23533:13;23549:12;:10;:12::i;:::-;23533:28;;23572:32;23581:5;23588:7;23597:6;23572:8;:32::i;:::-;23622:4;23615:11;;;23433:201;;;;:::o;22202:108::-;22263:7;22290:12;;22283:19;;22202:108;:::o;36792:109::-;13773:13;:11;:13::i;:::-;36865:10:::1;36857:28;;:36;36886:6;36857:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;36792:109:::0;:::o;24214:261::-;24311:4;24328:15;24346:12;:10;:12::i;:::-;24328:30;;24369:38;24385:4;24391:7;24400:6;24369:15;:38::i;:::-;24418:27;24428:4;24434:2;24438:6;24418:9;:27::i;:::-;24463:4;24456:11;;;24214:261;;;;;:::o;32275:19::-;;;;;;;;;;;;;:::o;34415:92::-;34473:5;34498:1;34491:8;;34415:92;:::o;32301:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;24884:238::-;24972:4;24989:13;25005:12;:10;:12::i;:::-;24989:28;;25028:64;25037:5;25044:7;25081:10;25053:25;25063:5;25070:7;25053:9;:25::i;:::-;:38;;;;:::i;:::-;25028:8;:64::i;:::-;25110:4;25103:11;;;24884:238;;;;:::o;32991:119::-;13773:13;:11;:13::i;:::-;33073:4:::1;33065:7;:12;;;;33097:5;33088:8;:14;;;;32991:119:::0;;:::o;32349:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;32240:28::-;;;;;;;;;;;;;:::o;32501:25::-;;;;:::o;33740:669::-;13773:13;:11;:13::i;:::-;33821:6:::1;33816:4;;:11;;;;;;;;;;;;;;;;;;33894:12;33907:5;33894:18;;34008:4;33978:15;;:35;;;;;;;;;;;;;;;;;;34053:15;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34040:50;;;34099:4;34106;;;;;;;;;;;34040:71;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34024:13;;:87;;;;;;;;;;;;;;;;;;34128:4;;;;;;;;;;;34122:19;;;34150:15;;;;;;;;;;;34168:17;34122:64;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;34197:67;34214:4;34229:15;;;;;;;;;;;34246:17;34197:8;:67::i;:::-;34275:56;34292:4;34307;34313:17;34275:8;:56::i;:::-;34342:59;34351:5;;;;;;;;;;;34366:15;;;;;;;;;;;34383:17;34342:8;:59::i;:::-;33805:604;33740:669:::0;;:::o;22373:127::-;22447:7;22474:9;:18;22484:7;22474:18;;;;;;;;;;;;;;;;22467:25;;22373:127;;;:::o;14528:103::-;13773:13;:11;:13::i;:::-;14593:30:::1;14620:1;14593:18;:30::i;:::-;14528:103::o:0;34513:107::-;13773:13;:11;:13::i;:::-;34600:12:::1;34588:11;;:24;;;;;;;;;;;;;;;;;;34513:107:::0;:::o;13887:87::-;13933:7;13960:6;;;;;;;;;;;13953:13;;13887:87;:::o;33475:253::-;13773:13;:11;:13::i;:::-;33568:9:::1;33564:157;33582:10;;:17;;33580:1;:19;33564:157;;;33645:1;33622:25;;:10;;33633:1;33622:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;:25;;;33619:91;;33692:2;33667:9;:24;33677:10;;33688:1;33677:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;33667:24;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;33619:91;33600:3;;;;;:::i;:::-;;;;33564:157;;;;33475:253:::0;;;:::o;21292:104::-;21348:13;21381:7;21374:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21292:104;:::o;33122:86::-;13773:13;:11;:13::i;:::-;33193:7:::1;33184:8;;:16;;;;;;;;;;;;;;;;;;33122:86:::0;:::o;25625:436::-;25718:4;25735:13;25751:12;:10;:12::i;:::-;25735:28;;25774:24;25801:25;25811:5;25818:7;25801:9;:25::i;:::-;25774:52;;25865:15;25845:16;:35;;25837:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;25958:60;25967:5;25974:7;26002:15;25983:16;:34;25958:8;:60::i;:::-;26049:4;26042:11;;;;25625:436;;;;:::o;22706:193::-;22785:4;22802:13;22818:12;:10;:12::i;:::-;22802:28;;22841;22851:5;22858:2;22862:6;22841:9;:28::i;:::-;22887:4;22880:11;;;22706:193;;;;:::o;36632:148::-;13773:13;:11;:13::i;:::-;36703:6:::1;36697:22;;;36720:10;36739:6;36732:24;;;36765:4;36732:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36697:75;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;36632:148:::0;:::o;22962:151::-;23051:7;23078:11;:18;23090:5;23078:18;;;;;;;;;;;;;;;:27;23097:7;23078:27;;;;;;;;;;;;;;;;23071:34;;22962:151;;;;:::o;33216:253::-;13773:13;:11;:13::i;:::-;33309:9:::1;33305:157;33323:10;;:17;;33321:1;:19;33305:157;;;33386:1;33363:25;;:10;;33374:1;33363:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;:25;;;33360:91;;33433:2;33408:9;:24;33418:10;;33429:1;33418:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;33408:24;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;33360:91;33341:3;;;;;:::i;:::-;;;;33305:157;;;;33216:253:::0;;;:::o;32423:26::-;;;;;;;;;;;;;:::o;14786:201::-;13773:13;:11;:13::i;:::-;14895:1:::1;14875:22;;:8;:22;;::::0;14867:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;14951:28;14970:8;14951:18;:28::i;:::-;14786:201:::0;:::o;32533:26::-;;;;;;;;;;;;;:::o;32470:24::-;;;;:::o;12438:98::-;12491:7;12518:10;12511:17;;12438:98;:::o;29618:346::-;29737:1;29720:19;;:5;:19;;;29712:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29818:1;29799:21;;:7;:21;;;29791:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29902:6;29872:11;:18;29884:5;29872:18;;;;;;;;;;;;;;;:27;29891:7;29872:27;;;;;;;;;;;;;;;:36;;;;29940:7;29924:32;;29933:5;29924:32;;;29949:6;29924:32;;;;;;:::i;:::-;;;;;;;;29618:346;;;:::o;14052:132::-;14127:12;:10;:12::i;:::-;14116:23;;:7;:5;:7::i;:::-;:23;;;14108:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14052:132::o;30255:419::-;30356:24;30383:25;30393:5;30400:7;30383:9;:25::i;:::-;30356:52;;30443:17;30423:16;:37;30419:248;;30505:6;30485:16;:26;;30477:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30589:51;30598:5;30605:7;30633:6;30614:16;:25;30589:8;:51::i;:::-;30419:248;30345:329;30255:419;;;:::o;34631:1388::-;34772:1;34763:6;:10;34755:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;34814:9;:13;34824:2;34814:13;;;;;;;;;;;;;;;;;;;;;;;;;34813:14;34805:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;34865:9;:15;34875:4;34865:15;;;;;;;;;;;;;;;;;;;;;;;;;34864:16;34856:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;34920:13;;;;;;;;;;;34912:21;;:4;:21;;;;:44;;;;;34943:13;;;;;;;;;;;34937:19;;:2;:19;;;;34912:44;34909:130;;;34973:33;34989:4;34995:2;34999:6;34973:15;:33::i;:::-;35021:7;;34909:130;35060:13;;;;;;;;;;;35052:21;;:4;:21;;;35049:437;;35098:8;;;;;;;;;;;35090:28;;;;;;;;;;;;:::i;:::-;;;;;;;;;35136:9;:13;35146:2;35136:13;;;;;;;;;;;;;;;;;;;;;;;;;35133:110;;;35169:33;35185:4;35191:2;35195:6;35169:15;:33::i;:::-;35221:7;;35133:110;35257:66;35273:4;35287;35294:28;35318:3;35294:19;35305:7;;35294:6;:10;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;35257:15;:66::i;:::-;35351:28;35375:3;35351:19;35362:7;;35351:6;:10;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;35338:11;;:41;;;;;;;:::i;:::-;;;;;;;;35394:59;35410:4;35416:2;35420:32;35448:3;35420:23;35435:7;;35431:3;:11;;;;:::i;:::-;35420:6;:10;;:23;;;;:::i;:::-;:27;;:32;;;;:::i;:::-;35394:15;:59::i;:::-;35468:7;;35049:437;35505:13;;;;;;;;;;;35499:19;;:2;:19;;;35496:516;;35538:9;:15;35548:4;35538:15;;;;;;;;;;;;;;;;;;;;;;;;;35535:112;;;35573:33;35589:4;35595:2;35599:6;35573:15;:33::i;:::-;35625:7;;35535:112;35669:8;;;;;;;;;;;35661:28;;;;;;;;;;;;:::i;:::-;;;;;;;;;35704:67;35720:4;35734;35741:29;35766:3;35741:20;35752:8;;35741:6;:10;;:20;;;;:::i;:::-;:24;;:29;;;;:::i;:::-;35704:15;:67::i;:::-;35799:29;35824:3;35799:20;35810:8;;35799:6;:10;;:20;;;;:::i;:::-;:24;;:29;;;;:::i;:::-;35786:11;;:42;;;;;;;:::i;:::-;;;;;;;;35843:33;35852:11;;35864;;;;;;;;;;;35843:8;:33::i;:::-;35903:1;35891:11;:13;;;;35919:60;35935:4;35941:2;35945:33;35974:3;35945:24;35960:8;;35956:3;:12;;;;:::i;:::-;35945:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;35919:15;:60::i;:::-;35994:7;;35496:516;34631:1388;;;;:::o;15147:191::-;15221:16;15240:6;;;;;;;;;;;15221:25;;15266:8;15257:6;;:17;;;;;;;;;;;;;;;;;;15321:8;15290:40;;15311:8;15290:40;;;;;;;;;;;;15210:128;15147:191;:::o;26531:806::-;26644:1;26628:18;;:4;:18;;;26620:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26721:1;26707:16;;:2;:16;;;26699:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;26776:38;26797:4;26803:2;26807:6;26776:20;:38::i;:::-;26827:19;26849:9;:15;26859:4;26849:15;;;;;;;;;;;;;;;;26827:37;;26898:6;26883:11;:21;;26875:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;27015:6;27001:11;:20;26983:9;:15;26993:4;26983:15;;;;;;;;;;;;;;;:38;;;;27218:6;27201:9;:13;27211:2;27201:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;27268:2;27253:26;;27262:4;27253:26;;;27272:6;27253:26;;;;;;:::i;:::-;;;;;;;;27292:37;27312:4;27318:2;27322:6;27292:19;:37::i;:::-;26609:728;26531:806;;;:::o;8434:98::-;8492:7;8523:1;8519;:5;;;;:::i;:::-;8512:12;;8434:98;;;;:::o;8833:::-;8891:7;8922:1;8918;:5;;;;:::i;:::-;8911:12;;8833:98;;;;:::o;36154:464::-;36098:4;36089:6;;:13;;;;;;;;;;;;;;;;;;36235:15:::1;36253:24;36271:4;36253:9;:24::i;:::-;36235:42;;36288:21;36326:1;36312:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36288:40;;36350:11;36342:7;:19;36339:42;;;36374:7;36362:19;;36339:42;36407:1;36395:11;:13;36392:219;;;36442:4;36424;36429:1;36424:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;36472:4;;;;;;;;;;;36462;36467:1;36462:7;;;;;;;;:::i;:::-;;;;;;;:14;;;;;;;;;::::0;::::1;36491:15;;;;;;;;;;;:69;;;36561:11;36573:1;36575:4;36580:2;36583:15;36491:108;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;36392:219;36224:394;;36134:5:::0;36125:6;;:14;;;;;;;;;;;;;;;;;;36154:464;;:::o;31274:91::-;;;;:::o;31969:90::-;;;;:::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;1553:117;1662:1;1659;1652: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:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:329::-;3857:6;3906:2;3894:9;3885:7;3881:23;3877:32;3874:119;;;3912:79;;:::i;:::-;3874:119;4032:1;4057:53;4102:7;4093:6;4082:9;4078:22;4057:53;:::i;:::-;4047:63;;4003:117;3798:329;;;;:::o;4133:619::-;4210:6;4218;4226;4275:2;4263:9;4254:7;4250:23;4246:32;4243:119;;;4281:79;;:::i;:::-;4243:119;4401:1;4426:53;4471:7;4462:6;4451:9;4447:22;4426:53;:::i;:::-;4416:63;;4372:117;4528:2;4554:53;4599:7;4590:6;4579:9;4575:22;4554:53;:::i;:::-;4544:63;;4499:118;4656:2;4682:53;4727:7;4718:6;4707:9;4703:22;4682:53;:::i;:::-;4672:63;;4627:118;4133:619;;;;;:::o;4758:118::-;4845:24;4863:5;4845:24;:::i;:::-;4840:3;4833:37;4758:118;;:::o;4882:222::-;4975:4;5013:2;5002:9;4998:18;4990:26;;5026:71;5094:1;5083:9;5079:17;5070:6;5026:71;:::i;:::-;4882:222;;;;:::o;5110:86::-;5145:7;5185:4;5178:5;5174:16;5163:27;;5110:86;;;:::o;5202:112::-;5285:22;5301:5;5285:22;:::i;:::-;5280:3;5273:35;5202:112;;:::o;5320:214::-;5409:4;5447:2;5436:9;5432:18;5424:26;;5460:67;5524:1;5513:9;5509:17;5500:6;5460:67;:::i;:::-;5320:214;;;;:::o;5540:329::-;5599:6;5648:2;5636:9;5627:7;5623:23;5619:32;5616:119;;;5654:79;;:::i;:::-;5616:119;5774:1;5799:53;5844:7;5835:6;5824:9;5820:22;5799:53;:::i;:::-;5789:63;;5745:117;5540:329;;;;:::o;5875:474::-;5943:6;5951;6000:2;5988:9;5979:7;5975:23;5971:32;5968:119;;;6006:79;;:::i;:::-;5968:119;6126:1;6151:53;6196:7;6187:6;6176:9;6172:22;6151:53;:::i;:::-;6141:63;;6097:117;6253:2;6279:53;6324:7;6315:6;6304:9;6300:22;6279:53;:::i;:::-;6269:63;;6224:118;5875:474;;;;;:::o;6355:::-;6423:6;6431;6480:2;6468:9;6459:7;6455:23;6451:32;6448:119;;;6486:79;;:::i;:::-;6448:119;6606:1;6631:53;6676:7;6667:6;6656:9;6652:22;6631:53;:::i;:::-;6621:63;;6577:117;6733:2;6759:53;6804:7;6795:6;6784:9;6780:22;6759:53;:::i;:::-;6749:63;;6704:118;6355:474;;;;;:::o;6835:117::-;6944:1;6941;6934:12;6958:117;7067:1;7064;7057:12;7081:117;7190:1;7187;7180:12;7221:568;7294:8;7304:6;7354:3;7347:4;7339:6;7335:17;7331:27;7321:122;;7362:79;;:::i;:::-;7321:122;7475:6;7462:20;7452:30;;7505:18;7497:6;7494:30;7491:117;;;7527:79;;:::i;:::-;7491:117;7641:4;7633:6;7629:17;7617:29;;7695:3;7687:4;7679:6;7675:17;7665:8;7661:32;7658:41;7655:128;;;7702:79;;:::i;:::-;7655:128;7221:568;;;;;:::o;7795:116::-;7865:21;7880:5;7865:21;:::i;:::-;7858:5;7855:32;7845:60;;7901:1;7898;7891:12;7845:60;7795:116;:::o;7917:133::-;7960:5;7998:6;7985:20;7976:29;;8014:30;8038:5;8014:30;:::i;:::-;7917:133;;;;:::o;8056:698::-;8148:6;8156;8164;8213:2;8201:9;8192:7;8188:23;8184:32;8181:119;;;8219:79;;:::i;:::-;8181:119;8367:1;8356:9;8352:17;8339:31;8397:18;8389:6;8386:30;8383:117;;;8419:79;;:::i;:::-;8383:117;8532:80;8604:7;8595:6;8584:9;8580:22;8532:80;:::i;:::-;8514:98;;;;8310:312;8661:2;8687:50;8729:7;8720:6;8709:9;8705:22;8687:50;:::i;:::-;8677:60;;8632:115;8056:698;;;;;:::o;8760:323::-;8816:6;8865:2;8853:9;8844:7;8840:23;8836:32;8833:119;;;8871:79;;:::i;:::-;8833:119;8991:1;9016:50;9058:7;9049:6;9038:9;9034:22;9016:50;:::i;:::-;9006:60;;8962:114;8760:323;;;;:::o;9089:180::-;9137:77;9134:1;9127:88;9234:4;9231:1;9224:15;9258:4;9255:1;9248:15;9275:320;9319:6;9356:1;9350:4;9346:12;9336:22;;9403:1;9397:4;9393:12;9424:18;9414:81;;9480:4;9472:6;9468:17;9458:27;;9414:81;9542:2;9534:6;9531:14;9511:18;9508:38;9505:84;;9561:18;;:::i;:::-;9505:84;9326:269;9275:320;;;:::o;9601:180::-;9649:77;9646:1;9639:88;9746:4;9743:1;9736:15;9770:4;9767:1;9760:15;9787:191;9827:3;9846:20;9864:1;9846:20;:::i;:::-;9841:25;;9880:20;9898:1;9880:20;:::i;:::-;9875:25;;9923:1;9920;9916:9;9909:16;;9944:3;9941:1;9938:10;9935:36;;;9951:18;;:::i;:::-;9935:36;9787:191;;;;:::o;9984:143::-;10041:5;10072:6;10066:13;10057:22;;10088:33;10115:5;10088:33;:::i;:::-;9984:143;;;;:::o;10133:351::-;10203:6;10252:2;10240:9;10231:7;10227:23;10223:32;10220:119;;;10258:79;;:::i;:::-;10220:119;10378:1;10403:64;10459:7;10450:6;10439:9;10435:22;10403:64;:::i;:::-;10393:74;;10349:128;10133:351;;;;:::o;10490:332::-;10611:4;10649:2;10638:9;10634:18;10626:26;;10662:71;10730:1;10719:9;10715:17;10706:6;10662:71;:::i;:::-;10743:72;10811:2;10800:9;10796:18;10787:6;10743:72;:::i;:::-;10490:332;;;;;:::o;10828:::-;10949:4;10987:2;10976:9;10972:18;10964:26;;11000:71;11068:1;11057:9;11053:17;11044:6;11000:71;:::i;:::-;11081:72;11149:2;11138:9;11134:18;11125:6;11081:72;:::i;:::-;10828:332;;;;;:::o;11166:137::-;11220:5;11251:6;11245:13;11236:22;;11267:30;11291:5;11267:30;:::i;:::-;11166:137;;;;:::o;11309:345::-;11376:6;11425:2;11413:9;11404:7;11400:23;11396:32;11393:119;;;11431:79;;:::i;:::-;11393:119;11551:1;11576:61;11629:7;11620:6;11609:9;11605:22;11576:61;:::i;:::-;11566:71;;11522:125;11309:345;;;;:::o;11660:180::-;11708:77;11705:1;11698:88;11805:4;11802:1;11795:15;11829:4;11826:1;11819:15;11846:233;11885:3;11908:24;11926:5;11908:24;:::i;:::-;11899:33;;11954:66;11947:5;11944:77;11941:103;;12024:18;;:::i;:::-;11941:103;12071:1;12064:5;12060:13;12053:20;;11846:233;;;:::o;12085:224::-;12225:34;12221:1;12213:6;12209:14;12202:58;12294:7;12289:2;12281:6;12277:15;12270:32;12085:224;:::o;12315:366::-;12457:3;12478:67;12542:2;12537:3;12478:67;:::i;:::-;12471:74;;12554:93;12643:3;12554:93;:::i;:::-;12672:2;12667:3;12663:12;12656:19;;12315:366;;;:::o;12687:419::-;12853:4;12891:2;12880:9;12876:18;12868:26;;12940:9;12934:4;12930:20;12926:1;12915:9;12911:17;12904:47;12968:131;13094:4;12968:131;:::i;:::-;12960:139;;12687:419;;;:::o;13112:143::-;13169:5;13200:6;13194:13;13185:22;;13216:33;13243:5;13216:33;:::i;:::-;13112:143;;;;:::o;13261:351::-;13331:6;13380:2;13368:9;13359:7;13355:23;13351:32;13348:119;;;13386:79;;:::i;:::-;13348:119;13506:1;13531:64;13587:7;13578:6;13567:9;13563:22;13531:64;:::i;:::-;13521:74;;13477:128;13261:351;;;;:::o;13618:225::-;13758:34;13754:1;13746:6;13742:14;13735:58;13827:8;13822:2;13814:6;13810:15;13803:33;13618:225;:::o;13849:366::-;13991:3;14012:67;14076:2;14071:3;14012:67;:::i;:::-;14005:74;;14088:93;14177:3;14088:93;:::i;:::-;14206:2;14201:3;14197:12;14190:19;;13849:366;;;:::o;14221:419::-;14387:4;14425:2;14414:9;14410:18;14402:26;;14474:9;14468:4;14464:20;14460:1;14449:9;14445:17;14438:47;14502:131;14628:4;14502:131;:::i;:::-;14494:139;;14221:419;;;:::o;14646:223::-;14786:34;14782:1;14774:6;14770:14;14763:58;14855:6;14850:2;14842:6;14838:15;14831:31;14646:223;:::o;14875:366::-;15017:3;15038:67;15102:2;15097:3;15038:67;:::i;:::-;15031:74;;15114:93;15203:3;15114:93;:::i;:::-;15232:2;15227:3;15223:12;15216:19;;14875:366;;;:::o;15247:419::-;15413:4;15451:2;15440:9;15436:18;15428:26;;15500:9;15494:4;15490:20;15486:1;15475:9;15471:17;15464:47;15528:131;15654:4;15528:131;:::i;:::-;15520:139;;15247:419;;;:::o;15672:221::-;15812:34;15808:1;15800:6;15796:14;15789:58;15881:4;15876:2;15868:6;15864:15;15857:29;15672:221;:::o;15899:366::-;16041:3;16062:67;16126:2;16121:3;16062:67;:::i;:::-;16055:74;;16138:93;16227:3;16138:93;:::i;:::-;16256:2;16251:3;16247:12;16240:19;;15899:366;;;:::o;16271:419::-;16437:4;16475:2;16464:9;16460:18;16452:26;;16524:9;16518:4;16514:20;16510:1;16499:9;16495:17;16488:47;16552:131;16678:4;16552:131;:::i;:::-;16544:139;;16271:419;;;:::o;16696:182::-;16836:34;16832:1;16824:6;16820:14;16813:58;16696:182;:::o;16884:366::-;17026:3;17047:67;17111:2;17106:3;17047:67;:::i;:::-;17040:74;;17123:93;17212:3;17123:93;:::i;:::-;17241:2;17236:3;17232:12;17225:19;;16884:366;;;:::o;17256:419::-;17422:4;17460:2;17449:9;17445:18;17437:26;;17509:9;17503:4;17499:20;17495:1;17484:9;17480:17;17473:47;17537:131;17663:4;17537:131;:::i;:::-;17529:139;;17256:419;;;:::o;17681:179::-;17821:31;17817:1;17809:6;17805:14;17798:55;17681:179;:::o;17866:366::-;18008:3;18029:67;18093:2;18088:3;18029:67;:::i;:::-;18022:74;;18105:93;18194:3;18105:93;:::i;:::-;18223:2;18218:3;18214:12;18207:19;;17866:366;;;:::o;18238:419::-;18404:4;18442:2;18431:9;18427:18;18419:26;;18491:9;18485:4;18481:20;18477:1;18466:9;18462:17;18455:47;18519:131;18645:4;18519:131;:::i;:::-;18511:139;;18238:419;;;:::o;18663:166::-;18803:18;18799:1;18791:6;18787:14;18780:42;18663:166;:::o;18835:366::-;18977:3;18998:67;19062:2;19057:3;18998:67;:::i;:::-;18991:74;;19074:93;19163:3;19074:93;:::i;:::-;19192:2;19187:3;19183:12;19176:19;;18835:366;;;:::o;19207:419::-;19373:4;19411:2;19400:9;19396:18;19388:26;;19460:9;19454:4;19450:20;19446:1;19435:9;19431:17;19424:47;19488:131;19614:4;19488:131;:::i;:::-;19480:139;;19207:419;;;:::o;19632:164::-;19772:16;19768:1;19760:6;19756:14;19749:40;19632:164;:::o;19802:366::-;19944:3;19965:67;20029:2;20024:3;19965:67;:::i;:::-;19958:74;;20041:93;20130:3;20041:93;:::i;:::-;20159:2;20154:3;20150:12;20143:19;;19802:366;;;:::o;20174:419::-;20340:4;20378:2;20367:9;20363:18;20355:26;;20427:9;20421:4;20417:20;20413:1;20402:9;20398:17;20391:47;20455:131;20581:4;20455:131;:::i;:::-;20447:139;;20174:419;;;:::o;20599:158::-;20739:10;20735:1;20727:6;20723:14;20716:34;20599:158;:::o;20763:365::-;20905:3;20926:66;20990:1;20985:3;20926:66;:::i;:::-;20919:73;;21001:93;21090:3;21001:93;:::i;:::-;21119:2;21114:3;21110:12;21103:19;;20763:365;;;:::o;21134:419::-;21300:4;21338:2;21327:9;21323:18;21315:26;;21387:9;21381:4;21377:20;21373:1;21362:9;21358:17;21351:47;21415:131;21541:4;21415:131;:::i;:::-;21407:139;;21134:419;;;:::o;21559:194::-;21599:4;21619:20;21637:1;21619:20;:::i;:::-;21614:25;;21653:20;21671:1;21653:20;:::i;:::-;21648:25;;21697:1;21694;21690:9;21682:17;;21721:1;21715:4;21712:11;21709:37;;;21726:18;;:::i;:::-;21709:37;21559:194;;;;:::o;21759:224::-;21899:34;21895:1;21887:6;21883:14;21876:58;21968:7;21963:2;21955:6;21951:15;21944:32;21759:224;:::o;21989:366::-;22131:3;22152:67;22216:2;22211:3;22152:67;:::i;:::-;22145:74;;22228:93;22317:3;22228:93;:::i;:::-;22346:2;22341:3;22337:12;22330:19;;21989:366;;;:::o;22361:419::-;22527:4;22565:2;22554:9;22550:18;22542:26;;22614:9;22608:4;22604:20;22600:1;22589:9;22585:17;22578:47;22642:131;22768:4;22642:131;:::i;:::-;22634:139;;22361:419;;;:::o;22786:222::-;22926:34;22922:1;22914:6;22910:14;22903:58;22995:5;22990:2;22982:6;22978:15;22971:30;22786:222;:::o;23014:366::-;23156:3;23177:67;23241:2;23236:3;23177:67;:::i;:::-;23170:74;;23253:93;23342:3;23253:93;:::i;:::-;23371:2;23366:3;23362:12;23355:19;;23014:366;;;:::o;23386:419::-;23552:4;23590:2;23579:9;23575:18;23567:26;;23639:9;23633:4;23629:20;23625:1;23614:9;23610:17;23603:47;23667:131;23793:4;23667:131;:::i;:::-;23659:139;;23386:419;;;:::o;23811:225::-;23951:34;23947:1;23939:6;23935:14;23928:58;24020:8;24015:2;24007:6;24003:15;23996:33;23811:225;:::o;24042:366::-;24184:3;24205:67;24269:2;24264:3;24205:67;:::i;:::-;24198:74;;24281:93;24370:3;24281:93;:::i;:::-;24399:2;24394:3;24390:12;24383:19;;24042:366;;;:::o;24414:419::-;24580:4;24618:2;24607:9;24603:18;24595:26;;24667:9;24661:4;24657:20;24653:1;24642:9;24638:17;24631:47;24695:131;24821:4;24695:131;:::i;:::-;24687:139;;24414:419;;;:::o;24839:410::-;24879:7;24902:20;24920:1;24902:20;:::i;:::-;24897:25;;24936:20;24954:1;24936:20;:::i;:::-;24931:25;;24991:1;24988;24984:9;25013:30;25031:11;25013:30;:::i;:::-;25002:41;;25192:1;25183:7;25179:15;25176:1;25173:22;25153:1;25146:9;25126:83;25103:139;;25222:18;;:::i;:::-;25103:139;24887:362;24839:410;;;;:::o;25255:180::-;25303:77;25300:1;25293:88;25400:4;25397:1;25390:15;25424:4;25421:1;25414:15;25441:185;25481:1;25498:20;25516:1;25498:20;:::i;:::-;25493:25;;25532:20;25550:1;25532:20;:::i;:::-;25527:25;;25571:1;25561:35;;25576:18;;:::i;:::-;25561:35;25618:1;25615;25611:9;25606:14;;25441:185;;;;:::o;25632:180::-;25680:77;25677:1;25670:88;25777:4;25774:1;25767:15;25801:4;25798:1;25791:15;25818:85;25863:7;25892:5;25881:16;;25818:85;;;:::o;25909:60::-;25937:3;25958:5;25951:12;;25909:60;;;:::o;25975:158::-;26033:9;26066:61;26084:42;26093:32;26119:5;26093:32;:::i;:::-;26084:42;:::i;:::-;26066:61;:::i;:::-;26053:74;;25975:158;;;:::o;26139:147::-;26234:45;26273:5;26234:45;:::i;:::-;26229:3;26222:58;26139:147;;:::o;26292:114::-;26359:6;26393:5;26387:12;26377:22;;26292:114;;;:::o;26412:184::-;26511:11;26545:6;26540:3;26533:19;26585:4;26580:3;26576:14;26561:29;;26412:184;;;;:::o;26602:132::-;26669:4;26692:3;26684:11;;26722:4;26717:3;26713:14;26705:22;;26602:132;;;:::o;26740:108::-;26817:24;26835:5;26817:24;:::i;:::-;26812:3;26805:37;26740:108;;:::o;26854:179::-;26923:10;26944:46;26986:3;26978:6;26944:46;:::i;:::-;27022:4;27017:3;27013:14;26999:28;;26854:179;;;;:::o;27039:113::-;27109:4;27141;27136:3;27132:14;27124:22;;27039:113;;;:::o;27188:732::-;27307:3;27336:54;27384:5;27336:54;:::i;:::-;27406:86;27485:6;27480:3;27406:86;:::i;:::-;27399:93;;27516:56;27566:5;27516:56;:::i;:::-;27595:7;27626:1;27611:284;27636:6;27633:1;27630:13;27611:284;;;27712:6;27706:13;27739:63;27798:3;27783:13;27739:63;:::i;:::-;27732:70;;27825:60;27878:6;27825:60;:::i;:::-;27815:70;;27671:224;27658:1;27655;27651:9;27646:14;;27611:284;;;27615:14;27911:3;27904:10;;27312:608;;;27188:732;;;;:::o;27926:831::-;28189:4;28227:3;28216:9;28212:19;28204:27;;28241:71;28309:1;28298:9;28294:17;28285:6;28241:71;:::i;:::-;28322:80;28398:2;28387:9;28383:18;28374:6;28322:80;:::i;:::-;28449:9;28443:4;28439:20;28434:2;28423:9;28419:18;28412:48;28477:108;28580:4;28571:6;28477:108;:::i;:::-;28469:116;;28595:72;28663:2;28652:9;28648:18;28639:6;28595:72;:::i;:::-;28677:73;28745:3;28734:9;28730:19;28721:6;28677:73;:::i;:::-;27926:831;;;;;;;;:::o

Swarm Source

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