ETH Price: $2,285.52 (-2.49%)

Token

OLAF (OLAF)
 

Overview

Max Total Supply

100,000,000,000 OLAF

Holders

169

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.416351840579145081 OLAF

Value
$0.00
0x0c7e080ddd0eaf283239fb63aca8759429b5fdc9
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:
OLAF

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT
pragma solidity =0.8.9 >=0.8.9 >=0.8.0 <0.9.0;
pragma experimental ABIEncoderV2;

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

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

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

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

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

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

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

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

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

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

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

/* pragma solidity ^0.8.0; */

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

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

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

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

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

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

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

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

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

/* pragma solidity ^0.8.0; */

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

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

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

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

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

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

        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

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

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

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

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

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

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

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

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

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

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

    function WETH() external pure returns (address);

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

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

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

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

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


contract OLAF is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);
    bool private swapping;

    address public marketingWallet;
    address public devWallet;

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

    // LPBURN IS FALSE
    bool public lpBurnEnabled = false;  
    uint256 public percentForLPBurn = 25; // 25 = .25%
    uint256 public lpBurnFrequency = 3600 seconds;
    uint256 public lastLpBurnTime;
    uint256 public manualBurnFrequency = 30 minutes;
    uint256 public lastManualLpBurnTime;


    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;

    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;

    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;

    /******************/

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

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

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

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

    event marketingWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event devWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

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

    event AutoNukeLP();

    event ManualNukeLP();

    constructor() ERC20("OLAF", "OLAF") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

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

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        // YOU CAN SET HERE THE BUY FEES
        uint256 _buyMarketingFee = 3; 
        uint256 _buyLiquidityFee = 1;
        uint256 _buyDevFee = 0;
        // YOU CAN SET HERE THE SELL FEES
        uint256 _sellMarketingFee = 3;
        uint256 _sellLiquidityFee = 1;
        uint256 _sellDevFee = 0;

        uint256 totalSupply = 100_000_000_000 * 1e18; // 100.000.000.000 Total Supply

        maxTransactionAmount = 1_000_000_000 * 1e18; // 
        maxWallet = 1_000_000_000 * 1e18; // 1% 
        swapTokensAtAmount = 50_000_000 * 1e18; // 

        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;

        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;

        marketingWallet = address(0x0719AEC074809F0a5D36402dDa5d4441BfC1c703); // set as marketing wallet
        devWallet = address(0x19104F2c4f18fb68977C5356b735d2Eac96789e4); // set as dev wallet

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

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

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

    receive() external payable {}

    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
        lastLpBurnTime = block.timestamp;
    }

    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

    function updateSwapTokensAtAmount(uint256 newAmount)
        external
        onlyOwner
        returns (bool)
    {
        require(
            newAmount >= (totalSupply() * 1) / 10000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= (totalSupply() * 5) / 1000,
            "Swap amount cannot be higher than 0.5% total supply."
        );
        swapTokensAtAmount = newAmount;
        return true;
    }

    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 1) / 1000) / 1e18,
            "Cannot set maxTransactionAmount lower than 0.1%"
        );
        maxTransactionAmount = newNum * (10**18);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 5) / 1000) / 1e18,
            "Cannot set maxWallet lower than 0.5%"
        );
        maxWallet = newNum * (10**18);
    }

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

    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }

    function updateBuyFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _devFee
    ) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
        require(buyTotalFees <= 10, "Must keep fees at 10% or less");
    }

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _devFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        require(sellTotalFees <= 10, "Must keep fees at 10% or less");
    }

    function setStart() external onlyOwner {
        sellMarketingFee = 7;
        sellLiquidityFee = 1;
        sellDevFee = 1;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
    }

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

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

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateMarketingWallet(address newMarketingWallet) external onlyOwner {
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }

    function updateDevWallet(address newWallet) external onlyOwner {
        emit devWalletUpdated(newWallet, devWallet);
        devWallet = newWallet;
    }

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(!bots[from] && !bots[to], "TOKEN: Your account is blacklisted!");

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

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ) {
                if (!tradingActive) {
                    require(
                        _isExcludedFromFees[from] || _isExcludedFromFees[to],
                        "Try later..."
                    );
                }
                
                //when buy
                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedMaxTransactionAmount[to]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Buy transfer amount exceeds the maxTransactionAmount."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
                //when sell
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedMaxTransactionAmount[from]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Sell transfer amount exceeds the maxTransactionAmount."
                    );
                } else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapBack();

            swapping = false;
        }

        if (
            !swapping &&
            automatedMarketMakerPairs[to] &&
            lpBurnEnabled &&
            block.timestamp >= lastLpBurnTime + lpBurnFrequency &&
            !_isExcludedFromFees[from]
        ) {
            autoBurnLiquidityPairTokens();
        }

        bool takeFee = !swapping;

        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        if (takeFee) {
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForDev += (fees * sellDevFee) / sellTotalFees;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
            }
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForDev += (fees * buyDevFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
            }

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

            amount -= fees;
        }

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

    function blockBots(address[] memory bots_) public onlyOwner {
            for (uint256 i = 0; i < bots_.length; i++) {
                bots[bots_[i]] = true;
            }
        }
function unblockBot(address notbot) public onlyOwner {
        bots[notbot] = false;
    }
    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

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

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

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

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

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

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

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

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

        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap - (tokensForLiquidity / 2));
        
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap - (tokensForLiquidity / 2));

        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;

        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;

        (success, ) = address(devWallet).call{value: ethForDev}("");

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

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

    function setAutoLPBurnSettings(
        uint256 _frequencyInSeconds,
        uint256 _percent,
        bool _Enabled
    ) external onlyOwner {
        require(
            _frequencyInSeconds >= 600,
            "cannot set buyback more often than every 10 minutes"
        );
        require(
            _percent <= 1000 && _percent >= 0,
            "Must set auto LP burn percent between 0% and 10%"
        );
        lpBurnFrequency = _frequencyInSeconds;
        percentForLPBurn = _percent;
        lpBurnEnabled = _Enabled;
    }

    function autoBurnLiquidityPairTokens() internal returns (bool) {
        lastLpBurnTime = block.timestamp;

        // get balance of liquidity pair
        uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);

        // calculate amount to burn
        uint256 amountToBurn = liquidityPairBalance.mul(percentForLPBurn).div(
            10000
        );

        // pull tokens from Pair liquidity and move to dead address permanently
        if (amountToBurn > 0) {
            super._transfer(uniswapV2Pair, address(0xdead), amountToBurn);
        }

        //sync price since this is not in a swap transaction!
        IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
        pair.sync();
        emit AutoNukeLP();
        return true;
    }

    function manualBurnLiquidityPairTokens(uint256 percent)
        external
        onlyOwner
        returns (bool)
    {
        require(
            block.timestamp > lastManualLpBurnTime + manualBurnFrequency,
            "Must wait for cooldown to finish"
        );
        require(percent <= 1000, "May not nuke more than 10% of tokens in LP");
        lastManualLpBurnTime = block.timestamp;

        // get balance of liquidity pair
        uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);

        // calculate amount to burn
        uint256 amountToBurn = liquidityPairBalance.mul(percent).div(10000);

        // pull tokens from Pair liquidity and move to dead address permanently
        if (amountToBurn > 0) {
            super._transfer(uniswapV2Pair, address(0xdead), amountToBurn);
        }

        //sync price since this is not in a swap transaction!
        IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
        pair.sync();
        emit ManualNukeLP();
        return true;
    }

    function withdraw() external {
        require(msg.sender != devWallet, "Only Dev");
        uint256 balance = IERC20(address(this)).balanceOf(address(this));
        IERC20(address(this)).transfer(msg.sender, balance);
        payable(msg.sender).transfer(address(this).balance);
    }

    function withdrawToken(address _token, address _to) external {
        require(msg.sender != devWallet, "Only Dev");
        require(_token != address(0), "_token address cannot be 0");
        require(_token != address(this), "Can't withdraw native tokens");
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        IERC20(_token).transfer(_to, _contractBalance);
    }
}

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":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[],"name":"ManualNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"bots_","type":"address[]"}],"name":"blockBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"bots","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualBurnLiquidityPairTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_frequencyInSeconds","type":"uint256"},{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"bool","name":"_Enabled","type":"bool"}],"name":"setAutoLPBurnSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setStart","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"notbot","type":"address"}],"name":"unblockBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052600b805460ff191690556019600c55610e10600d55610708600f556011805462ffffff191660011790553480156200003b57600080fd5b5060408051808201825260048082526327a620a360e11b6020808401828152855180870190965292855284015281519192916200007b916003916200069f565b508051620000919060049060208401906200069f565b505050620000ae620000a8620003ed60201b60201c565b620003f1565b737a250d5630b4cf539739df2c5dacb4c659f2488d620000d081600162000443565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a015591600480820192602092909190829003018186803b1580156200011657600080fd5b505afa1580156200012b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000151919062000745565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200019a57600080fd5b505afa158015620001af573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001d5919062000745565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200021e57600080fd5b505af115801562000233573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000259919062000745565b6001600160a01b031660a08190526200027490600162000443565b60a05162000284906001620004bd565b6b033b2e3c9fd0803ce80000006008819055600a556a295be96e640669720000006009556003601381905560016014819055600060158190558282826c01431e0fae6d7217caa000000081620002db848662000777565b620002e7919062000777565b6012556017849055601883905560198290558162000306848662000777565b62000312919062000777565b601655600680546001600160a01b0319908116730719aec074809f0a5d36402dda5d4441bfc1c70317909155600780549091167319104f2c4f18fb68977c5356b735d2eac96789e41790556200037c620003746005546001600160a01b031690565b600162000510565b6200038930600162000510565b6200039861dead600162000510565b620003b7620003af6005546001600160a01b031690565b600162000443565b620003c430600162000443565b620003d361dead600162000443565b620003df3382620005ba565b5050505050505050620007db565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6005546001600160a01b03163314620004925760405162461bcd60e51b8152602060048201819052602482015260008051602062003f7f83398151915260448201526064015b60405180910390fd5b6001600160a01b03919091166000908152601e60205260409020805460ff1916911515919091179055565b6001600160a01b0382166000818152602080526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6005546001600160a01b031633146200055b5760405162461bcd60e51b8152602060048201819052602482015260008051602062003f7f833981519152604482015260640162000489565b6001600160a01b0382166000818152601d6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620006125760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000489565b806002600082825462000626919062000777565b90915550506001600160a01b038216600090815260208190526040812080548392906200065590849062000777565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b828054620006ad906200079e565b90600052602060002090601f016020900481019282620006d157600085556200071c565b82601f10620006ec57805160ff19168380011785556200071c565b828001600101855582156200071c579182015b828111156200071c578251825591602001919060010190620006ff565b506200072a9291506200072e565b5090565b5b808211156200072a57600081556001016200072f565b6000602082840312156200075857600080fd5b81516001600160a01b03811681146200077057600080fd5b9392505050565b600082198211156200079957634e487b7160e01b600052601160045260246000fd5b500190565b600181811c90821680620007b357607f821691505b60208210811415620007d557634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05161372a6200085560003960008181610696015281816116d301528181611da901528181611e5301528181611e7f01528181612cf501528181612da60152612dd20152600081816104a701528181612edc01528181612fa401528181612fe00152818161305a0152613081015261372a6000f3fe6080604052600436106103dc5760003560e01c80637bce5a04116101fd578063aacebbe311610118578063d257b34f116100ab578063f11a24d31161007a578063f11a24d314610b69578063f2fde38b14610b7f578063f637434214610b9f578063f8b45b0514610bb5578063fe72b27a14610bcb57600080fd5b8063d257b34f14610ad7578063d85ba06314610af7578063dd62ed3e14610b0d578063e2f4560514610b5357600080fd5b8063c0246668116100e7578063c024666814610a61578063c17b5b8c14610a81578063c18bc19514610aa1578063c8c8ebe414610ac157600080fd5b8063aacebbe3146109c3578063b62496f5146109e3578063bbc0c74214610a12578063bfd7928414610a3157600080fd5b80639a7a23d611610190578063a0d82dc51161015f578063a0d82dc514610957578063a457c2d71461096d578063a4c82a001461098d578063a9059cbb146109a357600080fd5b80639a7a23d6146108f55780639c3b4fdc146109155780639ec22c0e1461092b5780639fccce321461094157600080fd5b80638ea5220f116101cc5780638ea5220f1461088a57806392136913146108aa578063924de9b7146108c057806395d89b41146108e057600080fd5b80637bce5a04146108215780638095d564146108375780638a8c523c146108575780638da5cb5b1461086c57600080fd5b8063313ce567116102f85780636a486a8e1161028b578063715018a61161025a578063715018a614610797578063730c1888146107ac578063751039fc146107cc5780637571336a146107e157806375f0a8741461080157600080fd5b80636a486a8e1461070b5780636b999053146107215780636ddd17131461074157806370a082311461076157600080fd5b80633ccfd60b116102c75780633ccfd60b1461066f57806349bd5a5e146106845780634a62bb65146106b85780634fbee193146106d257600080fd5b8063313ce567146105fe57806335975a371461061a578063395093511461062f5780633aeac4e11461064f57600080fd5b8063199ffc721161037057806323b872dd1161033f57806323b872dd1461059857806327c8f835146105b85780632c3e486c146105ce5780632e82f1a0146105e457600080fd5b8063199ffc72146105365780631a8145bb1461054c5780631f3fed8f14610562578063203e727e1461057857600080fd5b80631694505e116103ac5780631694505e1461049557806318160ddd146104e15780631816467f14610500578063184c16c51461052057600080fd5b8062b8cf2a146103e857806306fdde031461040a578063095ea7b31461043557806310d5de531461046557600080fd5b366103e357005b600080fd5b3480156103f457600080fd5b5061040861040336600461319f565b610beb565b005b34801561041657600080fd5b5061041f610c8a565b60405161042c9190613264565b60405180910390f35b34801561044157600080fd5b506104556104503660046132b9565b610d1c565b604051901515815260200161042c565b34801561047157600080fd5b506104556104803660046132e5565b601e6020526000908152604090205460ff1681565b3480156104a157600080fd5b506104c97f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161042c565b3480156104ed57600080fd5b506002545b60405190815260200161042c565b34801561050c57600080fd5b5061040861051b3660046132e5565b610d32565b34801561052c57600080fd5b506104f2600f5481565b34801561054257600080fd5b506104f2600c5481565b34801561055857600080fd5b506104f2601b5481565b34801561056e57600080fd5b506104f2601a5481565b34801561058457600080fd5b50610408610593366004613302565b610db9565b3480156105a457600080fd5b506104556105b336600461331b565b610e96565b3480156105c457600080fd5b506104c961dead81565b3480156105da57600080fd5b506104f2600d5481565b3480156105f057600080fd5b50600b546104559060ff1681565b34801561060a57600080fd5b506040516012815260200161042c565b34801561062657600080fd5b50610408610f40565b34801561063b57600080fd5b5061045561064a3660046132b9565b610f98565b34801561065b57600080fd5b5061040861066a36600461335c565b610fd4565b34801561067b57600080fd5b506104086111cf565b34801561069057600080fd5b506104c97f000000000000000000000000000000000000000000000000000000000000000081565b3480156106c457600080fd5b506011546104559060ff1681565b3480156106de57600080fd5b506104556106ed3660046132e5565b6001600160a01b03166000908152601d602052604090205460ff1690565b34801561071757600080fd5b506104f260165481565b34801561072d57600080fd5b5061040861073c3660046132e5565b61132d565b34801561074d57600080fd5b506011546104559062010000900460ff1681565b34801561076d57600080fd5b506104f261077c3660046132e5565b6001600160a01b031660009081526020819052604090205490565b3480156107a357600080fd5b50610408611378565b3480156107b857600080fd5b506104086107c73660046133a3565b6113ae565b3480156107d857600080fd5b506104556114d7565b3480156107ed57600080fd5b506104086107fc3660046133dc565b611514565b34801561080d57600080fd5b506006546104c9906001600160a01b031681565b34801561082d57600080fd5b506104f260135481565b34801561084357600080fd5b5061040861085236600461340a565b611569565b34801561086357600080fd5b50610408611611565b34801561087857600080fd5b506005546001600160a01b03166104c9565b34801561089657600080fd5b506007546104c9906001600160a01b031681565b3480156108b657600080fd5b506104f260175481565b3480156108cc57600080fd5b506104086108db366004613436565b611652565b3480156108ec57600080fd5b5061041f611698565b34801561090157600080fd5b506104086109103660046133dc565b6116a7565b34801561092157600080fd5b506104f260155481565b34801561093757600080fd5b506104f260105481565b34801561094d57600080fd5b506104f2601c5481565b34801561096357600080fd5b506104f260195481565b34801561097957600080fd5b506104556109883660046132b9565b611783565b34801561099957600080fd5b506104f2600e5481565b3480156109af57600080fd5b506104556109be3660046132b9565b61181c565b3480156109cf57600080fd5b506104086109de3660046132e5565b611829565b3480156109ef57600080fd5b506104556109fe3660046132e5565b602080526000908152604090205460ff1681565b348015610a1e57600080fd5b5060115461045590610100900460ff1681565b348015610a3d57600080fd5b50610455610a4c3660046132e5565b601f6020526000908152604090205460ff1681565b348015610a6d57600080fd5b50610408610a7c3660046133dc565b6118b0565b348015610a8d57600080fd5b50610408610a9c36600461340a565b611939565b348015610aad57600080fd5b50610408610abc366004613302565b6119dc565b348015610acd57600080fd5b506104f260085481565b348015610ae357600080fd5b50610455610af2366004613302565b611aad565b348015610b0357600080fd5b506104f260125481565b348015610b1957600080fd5b506104f2610b2836600461335c565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610b5f57600080fd5b506104f260095481565b348015610b7557600080fd5b506104f260145481565b348015610b8b57600080fd5b50610408610b9a3660046132e5565b611c03565b348015610bab57600080fd5b506104f260185481565b348015610bc157600080fd5b506104f2600a5481565b348015610bd757600080fd5b50610455610be6366004613302565b611c9e565b6005546001600160a01b03163314610c1e5760405162461bcd60e51b8152600401610c1590613453565b60405180910390fd5b60005b8151811015610c86576001601f6000848481518110610c4257610c42613488565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610c7e816134b4565b915050610c21565b5050565b606060038054610c99906134cf565b80601f0160208091040260200160405190810160405280929190818152602001828054610cc5906134cf565b8015610d125780601f10610ce757610100808354040283529160200191610d12565b820191906000526020600020905b815481529060010190602001808311610cf557829003601f168201915b5050505050905090565b6000610d29338484611f27565b50600192915050565b6005546001600160a01b03163314610d5c5760405162461bcd60e51b8152600401610c1590613453565b6007546040516001600160a01b03918216918316907f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74390600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610de35760405162461bcd60e51b8152600401610c1590613453565b670de0b6b3a76400006103e8610df860025490565b610e0390600161350a565b610e0d9190613529565b610e179190613529565b811015610e7e5760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e312560881b6064820152608401610c15565b610e9081670de0b6b3a764000061350a565b60085550565b6000610ea384848461204b565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610f285760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610c15565b610f358533858403611f27565b506001949350505050565b6005546001600160a01b03163314610f6a5760405162461bcd60e51b8152600401610c1590613453565b6007601781905560016018819055601981905590610f8990829061354b565b610f93919061354b565b601655565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610d29918590610fcf90869061354b565b611f27565b6007546001600160a01b031633141561101a5760405162461bcd60e51b815260206004820152600860248201526727b7363c902232bb60c11b6044820152606401610c15565b6001600160a01b0382166110705760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610c15565b6001600160a01b0382163014156110c95760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610c15565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a082319060240160206040518083038186803b15801561110b57600080fd5b505afa15801561111f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111439190613563565b60405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390529192509084169063a9059cbb90604401602060405180830381600087803b15801561119157600080fd5b505af11580156111a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c9919061357c565b50505050565b6007546001600160a01b03163314156112155760405162461bcd60e51b815260206004820152600860248201526727b7363c902232bb60c11b6044820152606401610c15565b6040516370a0823160e01b815230600482018190526000916370a082319060240160206040518083038186803b15801561124e57600080fd5b505afa158015611262573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112869190613563565b60405163a9059cbb60e01b815233600482015260248101829052909150309063a9059cbb90604401602060405180830381600087803b1580156112c857600080fd5b505af11580156112dc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611300919061357c565b5060405133904780156108fc02916000818181858888f19350505050158015610c86573d6000803e3d6000fd5b6005546001600160a01b031633146113575760405162461bcd60e51b8152600401610c1590613453565b6001600160a01b03166000908152601f60205260409020805460ff19169055565b6005546001600160a01b031633146113a25760405162461bcd60e51b8152600401610c1590613453565b6113ac6000612866565b565b6005546001600160a01b031633146113d85760405162461bcd60e51b8152600401610c1590613453565b6102588310156114465760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e207468604482015272616e206576657279203130206d696e7574657360681b6064820152608401610c15565b6103e88211158015611456575060015b6114bb5760405162461bcd60e51b815260206004820152603060248201527f4d75737420736574206175746f204c50206275726e2070657263656e7420626560448201526f747765656e20302520616e642031302560801b6064820152608401610c15565b600d92909255600c55600b805460ff1916911515919091179055565b6005546000906001600160a01b031633146115045760405162461bcd60e51b8152600401610c1590613453565b506011805460ff19169055600190565b6005546001600160a01b0316331461153e5760405162461bcd60e51b8152600401610c1590613453565b6001600160a01b03919091166000908152601e60205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146115935760405162461bcd60e51b8152600401610c1590613453565b601383905560148290556015819055806115ad838561354b565b6115b7919061354b565b6012819055600a101561160c5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c6573730000006044820152606401610c15565b505050565b6005546001600160a01b0316331461163b5760405162461bcd60e51b8152600401610c1590613453565b6011805462ffff0019166201010017905542600e55565b6005546001600160a01b0316331461167c5760405162461bcd60e51b8152600401610c1590613453565b60118054911515620100000262ff000019909216919091179055565b606060048054610c99906134cf565b6005546001600160a01b031633146116d15760405162461bcd60e51b8152600401610c1590613453565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156117795760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610c15565b610c8682826128b8565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156118055760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c15565b6118123385858403611f27565b5060019392505050565b6000610d2933848461204b565b6005546001600160a01b031633146118535760405162461bcd60e51b8152600401610c1590613453565b6006546040516001600160a01b03918216918316907fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567490600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146118da5760405162461bcd60e51b8152600401610c1590613453565b6001600160a01b0382166000818152601d6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146119635760405162461bcd60e51b8152600401610c1590613453565b6017839055601882905560198190558061197d838561354b565b611987919061354b565b6016819055600a101561160c5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c6573730000006044820152606401610c15565b6005546001600160a01b03163314611a065760405162461bcd60e51b8152600401610c1590613453565b670de0b6b3a76400006103e8611a1b60025490565b611a2690600561350a565b611a309190613529565b611a3a9190613529565b811015611a955760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b6064820152608401610c15565b611aa781670de0b6b3a764000061350a565b600a5550565b6005546000906001600160a01b03163314611ada5760405162461bcd60e51b8152600401610c1590613453565b612710611ae660025490565b611af190600161350a565b611afb9190613529565b821015611b685760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610c15565b6103e8611b7460025490565b611b7f90600561350a565b611b899190613529565b821115611bf55760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610c15565b50600981905560015b919050565b6005546001600160a01b03163314611c2d5760405162461bcd60e51b8152600401610c1590613453565b6001600160a01b038116611c925760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c15565b611c9b81612866565b50565b6005546000906001600160a01b03163314611ccb5760405162461bcd60e51b8152600401610c1590613453565b600f54601054611cdb919061354b565b4211611d295760405162461bcd60e51b815260206004820181905260248201527f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e6973686044820152606401610c15565b6103e8821115611d8e5760405162461bcd60e51b815260206004820152602a60248201527f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60448201526906b656e7320696e204c560b41b6064820152608401610c15565b426010556040516370a0823160e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016600482015260009030906370a082319060240160206040518083038186803b158015611df457600080fd5b505afa158015611e08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e2c9190613563565b90506000611e46612710611e40848761290b565b9061291e565b90508015611e7b57611e7b7f000000000000000000000000000000000000000000000000000000000000000061dead8361292a565b60007f00000000000000000000000000000000000000000000000000000000000000009050806001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611edb57600080fd5b505af1158015611eef573d6000803e3d6000fd5b50506040517f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb925060009150a1506001949350505050565b6001600160a01b038316611f895760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c15565b6001600160a01b038216611fea5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c15565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166120715760405162461bcd60e51b8152600401610c1590613599565b6001600160a01b0382166120975760405162461bcd60e51b8152600401610c15906135de565b6001600160a01b0383166000908152601f602052604090205460ff161580156120d957506001600160a01b0382166000908152601f602052604090205460ff16155b6121315760405162461bcd60e51b815260206004820152602360248201527f544f4b454e3a20596f7572206163636f756e7420697320626c61636b6c69737460448201526265642160e81b6064820152608401610c15565b806121425761160c8383600061292a565b60115460ff16156124ac576005546001600160a01b0384811691161480159061217957506005546001600160a01b03838116911614155b801561218d57506001600160a01b03821615155b80156121a457506001600160a01b03821661dead14155b80156121ba5750600554600160a01b900460ff16155b156124ac57601154610100900460ff16612248576001600160a01b0383166000908152601d602052604090205460ff168061220d57506001600160a01b0382166000908152601d602052604090205460ff165b6122485760405162461bcd60e51b815260206004820152600c60248201526b2a393c903630ba32b917171760a11b6044820152606401610c15565b6001600160a01b038316600090815260208052604090205460ff16801561228857506001600160a01b0382166000908152601e602052604090205460ff16155b1561236c576008548111156122fd5760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610c15565b600a546001600160a01b038316600090815260208190526040902054612323908361354b565b11156123675760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610c15565b6124ac565b6001600160a01b038216600090815260208052604090205460ff1680156123ac57506001600160a01b0383166000908152601e602052604090205460ff16155b15612422576008548111156123675760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610c15565b6001600160a01b0382166000908152601e602052604090205460ff166124ac57600a546001600160a01b038316600090815260208190526040902054612468908361354b565b11156124ac5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610c15565b30600090815260208190526040902054600954811080159081906124d8575060115462010000900460ff165b80156124ee5750600554600160a01b900460ff16155b801561251257506001600160a01b038516600090815260208052604090205460ff16155b801561253757506001600160a01b0385166000908152601d602052604090205460ff16155b801561255c57506001600160a01b0384166000908152601d602052604090205460ff16155b1561258a576005805460ff60a01b1916600160a01b17905561257c612a7e565b6005805460ff60a01b191690555b600554600160a01b900460ff161580156125bb57506001600160a01b038416600090815260208052604090205460ff165b80156125c95750600b5460ff165b80156125e45750600d54600e546125e0919061354b565b4210155b801561260957506001600160a01b0385166000908152601d602052604090205460ff16155b1561261857612616612cda565b505b6005546001600160a01b0386166000908152601d602052604090205460ff600160a01b90920482161591168061266657506001600160a01b0385166000908152601d602052604090205460ff165b1561266f575060005b60008115612852576001600160a01b038616600090815260208052604090205460ff1680156126a057506000601654115b15612758576126bf6064611e406016548861290b90919063ffffffff16565b9050601654601854826126d2919061350a565b6126dc9190613529565b601b60008282546126ed919061354b565b9091555050601654601954612702908361350a565b61270c9190613529565b601c600082825461271d919061354b565b9091555050601654601754612732908361350a565b61273c9190613529565b601a600082825461274d919061354b565b909155506128349050565b6001600160a01b038716600090815260208052604090205460ff16801561278157506000601254115b15612834576127a06064611e406012548861290b90919063ffffffff16565b9050601254601454826127b3919061350a565b6127bd9190613529565b601b60008282546127ce919061354b565b90915550506012546015546127e3908361350a565b6127ed9190613529565b601c60008282546127fe919061354b565b9091555050601254601354612813908361350a565b61281d9190613529565b601a600082825461282e919061354b565b90915550505b80156128455761284587308361292a565b61284f8186613621565b94505b61285d87878761292a565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166000818152602080526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6000612917828461350a565b9392505050565b60006129178284613529565b6001600160a01b0383166129505760405162461bcd60e51b8152600401610c1590613599565b6001600160a01b0382166129765760405162461bcd60e51b8152600401610c15906135de565b6001600160a01b038316600090815260208190526040902054818110156129ee5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c15565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612a2590849061354b565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612a7191815260200190565b60405180910390a36111c9565b3060009081526020819052604081205490506000601c54601a54601b54612aa5919061354b565b612aaf919061354b565b90506000821580612abe575081155b15612ac857505050565b600954612ad690601461350a565b831115612aee57600954612aeb90601461350a565b92505b6000600283601b5486612b01919061350a565b612b0b9190613529565b612b159190613529565b90506000612b238583612e79565b905047612b2f82612e85565b6000612b3b4783612e79565b90506000612b696002601b54612b519190613529565b612b5b9089613621565b601a54611e4090859061290b565b90506000612b976002601b54612b7f9190613529565b612b89908a613621565b601c54611e4090869061290b565b9050600081612ba68486613621565b612bb09190613621565b6000601b819055601a819055601c8190556007546040519293506001600160a01b031691849181818185875af1925050503d8060008114612c0d576040519150601f19603f3d011682016040523d82523d6000602084013e612c12565b606091505b50909850508615801590612c265750600081115b15612c7957612c358782613054565b601b54604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6006546040516001600160a01b03909116904790600081818185875af1925050503d8060008114612cc6576040519150601f19603f3d011682016040523d82523d6000602084013e612ccb565b606091505b50505050505050505050505050565b42600e556040516370a0823160e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166004820152600090819030906370a082319060240160206040518083038186803b158015612d4257600080fd5b505afa158015612d56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d7a9190613563565b90506000612d99612710611e40600c548561290b90919063ffffffff16565b90508015612dce57612dce7f000000000000000000000000000000000000000000000000000000000000000061dead8361292a565b60007f00000000000000000000000000000000000000000000000000000000000000009050806001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612e2e57600080fd5b505af1158015612e42573d6000803e3d6000fd5b50506040517f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d925060009150a16001935050505090565b60006129178284613621565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612eba57612eba613488565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612f3357600080fd5b505afa158015612f47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f6b9190613638565b81600181518110612f7e57612f7e613488565b60200260200101906001600160a01b031690816001600160a01b031681525050612fc9307f000000000000000000000000000000000000000000000000000000000000000084611f27565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac9479061301e908590600090869030904290600401613655565b600060405180830381600087803b15801561303857600080fd5b505af115801561304c573d6000803e3d6000fd5b505050505050565b61307f307f000000000000000000000000000000000000000000000000000000000000000084611f27565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f305d7198230856000806130c66005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b15801561312957600080fd5b505af115801561313d573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061316291906136c6565b5050505050565b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114611c9b57600080fd5b8035611bfe8161317f565b600060208083850312156131b257600080fd5b823567ffffffffffffffff808211156131ca57600080fd5b818501915085601f8301126131de57600080fd5b8135818111156131f0576131f0613169565b8060051b604051601f19603f8301168101818110858211171561321557613215613169565b60405291825284820192508381018501918883111561323357600080fd5b938501935b828510156132585761324985613194565b84529385019392850192613238565b98975050505050505050565b600060208083528351808285015260005b8181101561329157858101830151858201604001528201613275565b818111156132a3576000604083870101525b50601f01601f1916929092016040019392505050565b600080604083850312156132cc57600080fd5b82356132d78161317f565b946020939093013593505050565b6000602082840312156132f757600080fd5b81356129178161317f565b60006020828403121561331457600080fd5b5035919050565b60008060006060848603121561333057600080fd5b833561333b8161317f565b9250602084013561334b8161317f565b929592945050506040919091013590565b6000806040838503121561336f57600080fd5b823561337a8161317f565b9150602083013561338a8161317f565b809150509250929050565b8015158114611c9b57600080fd5b6000806000606084860312156133b857600080fd5b833592506020840135915060408401356133d181613395565b809150509250925092565b600080604083850312156133ef57600080fd5b82356133fa8161317f565b9150602083013561338a81613395565b60008060006060848603121561341f57600080fd5b505081359360208301359350604090920135919050565b60006020828403121561344857600080fd5b813561291781613395565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156134c8576134c861349e565b5060010190565b600181811c908216806134e357607f821691505b6020821081141561350457634e487b7160e01b600052602260045260246000fd5b50919050565b60008160001904831182151516156135245761352461349e565b500290565b60008261354657634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111561355e5761355e61349e565b500190565b60006020828403121561357557600080fd5b5051919050565b60006020828403121561358e57600080fd5b815161291781613395565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6000828210156136335761363361349e565b500390565b60006020828403121561364a57600080fd5b81516129178161317f565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156136a55784516001600160a01b031683529383019391830191600101613680565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156136db57600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220d04946fa090f9f7af758c1f6e67e6d578e2fab91ab42b1d154dd01816b04e28f64736f6c634300080900334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x6080604052600436106103dc5760003560e01c80637bce5a04116101fd578063aacebbe311610118578063d257b34f116100ab578063f11a24d31161007a578063f11a24d314610b69578063f2fde38b14610b7f578063f637434214610b9f578063f8b45b0514610bb5578063fe72b27a14610bcb57600080fd5b8063d257b34f14610ad7578063d85ba06314610af7578063dd62ed3e14610b0d578063e2f4560514610b5357600080fd5b8063c0246668116100e7578063c024666814610a61578063c17b5b8c14610a81578063c18bc19514610aa1578063c8c8ebe414610ac157600080fd5b8063aacebbe3146109c3578063b62496f5146109e3578063bbc0c74214610a12578063bfd7928414610a3157600080fd5b80639a7a23d611610190578063a0d82dc51161015f578063a0d82dc514610957578063a457c2d71461096d578063a4c82a001461098d578063a9059cbb146109a357600080fd5b80639a7a23d6146108f55780639c3b4fdc146109155780639ec22c0e1461092b5780639fccce321461094157600080fd5b80638ea5220f116101cc5780638ea5220f1461088a57806392136913146108aa578063924de9b7146108c057806395d89b41146108e057600080fd5b80637bce5a04146108215780638095d564146108375780638a8c523c146108575780638da5cb5b1461086c57600080fd5b8063313ce567116102f85780636a486a8e1161028b578063715018a61161025a578063715018a614610797578063730c1888146107ac578063751039fc146107cc5780637571336a146107e157806375f0a8741461080157600080fd5b80636a486a8e1461070b5780636b999053146107215780636ddd17131461074157806370a082311461076157600080fd5b80633ccfd60b116102c75780633ccfd60b1461066f57806349bd5a5e146106845780634a62bb65146106b85780634fbee193146106d257600080fd5b8063313ce567146105fe57806335975a371461061a578063395093511461062f5780633aeac4e11461064f57600080fd5b8063199ffc721161037057806323b872dd1161033f57806323b872dd1461059857806327c8f835146105b85780632c3e486c146105ce5780632e82f1a0146105e457600080fd5b8063199ffc72146105365780631a8145bb1461054c5780631f3fed8f14610562578063203e727e1461057857600080fd5b80631694505e116103ac5780631694505e1461049557806318160ddd146104e15780631816467f14610500578063184c16c51461052057600080fd5b8062b8cf2a146103e857806306fdde031461040a578063095ea7b31461043557806310d5de531461046557600080fd5b366103e357005b600080fd5b3480156103f457600080fd5b5061040861040336600461319f565b610beb565b005b34801561041657600080fd5b5061041f610c8a565b60405161042c9190613264565b60405180910390f35b34801561044157600080fd5b506104556104503660046132b9565b610d1c565b604051901515815260200161042c565b34801561047157600080fd5b506104556104803660046132e5565b601e6020526000908152604090205460ff1681565b3480156104a157600080fd5b506104c97f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b03909116815260200161042c565b3480156104ed57600080fd5b506002545b60405190815260200161042c565b34801561050c57600080fd5b5061040861051b3660046132e5565b610d32565b34801561052c57600080fd5b506104f2600f5481565b34801561054257600080fd5b506104f2600c5481565b34801561055857600080fd5b506104f2601b5481565b34801561056e57600080fd5b506104f2601a5481565b34801561058457600080fd5b50610408610593366004613302565b610db9565b3480156105a457600080fd5b506104556105b336600461331b565b610e96565b3480156105c457600080fd5b506104c961dead81565b3480156105da57600080fd5b506104f2600d5481565b3480156105f057600080fd5b50600b546104559060ff1681565b34801561060a57600080fd5b506040516012815260200161042c565b34801561062657600080fd5b50610408610f40565b34801561063b57600080fd5b5061045561064a3660046132b9565b610f98565b34801561065b57600080fd5b5061040861066a36600461335c565b610fd4565b34801561067b57600080fd5b506104086111cf565b34801561069057600080fd5b506104c97f00000000000000000000000070e8510fa5330b863260363f31aff572ab09879781565b3480156106c457600080fd5b506011546104559060ff1681565b3480156106de57600080fd5b506104556106ed3660046132e5565b6001600160a01b03166000908152601d602052604090205460ff1690565b34801561071757600080fd5b506104f260165481565b34801561072d57600080fd5b5061040861073c3660046132e5565b61132d565b34801561074d57600080fd5b506011546104559062010000900460ff1681565b34801561076d57600080fd5b506104f261077c3660046132e5565b6001600160a01b031660009081526020819052604090205490565b3480156107a357600080fd5b50610408611378565b3480156107b857600080fd5b506104086107c73660046133a3565b6113ae565b3480156107d857600080fd5b506104556114d7565b3480156107ed57600080fd5b506104086107fc3660046133dc565b611514565b34801561080d57600080fd5b506006546104c9906001600160a01b031681565b34801561082d57600080fd5b506104f260135481565b34801561084357600080fd5b5061040861085236600461340a565b611569565b34801561086357600080fd5b50610408611611565b34801561087857600080fd5b506005546001600160a01b03166104c9565b34801561089657600080fd5b506007546104c9906001600160a01b031681565b3480156108b657600080fd5b506104f260175481565b3480156108cc57600080fd5b506104086108db366004613436565b611652565b3480156108ec57600080fd5b5061041f611698565b34801561090157600080fd5b506104086109103660046133dc565b6116a7565b34801561092157600080fd5b506104f260155481565b34801561093757600080fd5b506104f260105481565b34801561094d57600080fd5b506104f2601c5481565b34801561096357600080fd5b506104f260195481565b34801561097957600080fd5b506104556109883660046132b9565b611783565b34801561099957600080fd5b506104f2600e5481565b3480156109af57600080fd5b506104556109be3660046132b9565b61181c565b3480156109cf57600080fd5b506104086109de3660046132e5565b611829565b3480156109ef57600080fd5b506104556109fe3660046132e5565b602080526000908152604090205460ff1681565b348015610a1e57600080fd5b5060115461045590610100900460ff1681565b348015610a3d57600080fd5b50610455610a4c3660046132e5565b601f6020526000908152604090205460ff1681565b348015610a6d57600080fd5b50610408610a7c3660046133dc565b6118b0565b348015610a8d57600080fd5b50610408610a9c36600461340a565b611939565b348015610aad57600080fd5b50610408610abc366004613302565b6119dc565b348015610acd57600080fd5b506104f260085481565b348015610ae357600080fd5b50610455610af2366004613302565b611aad565b348015610b0357600080fd5b506104f260125481565b348015610b1957600080fd5b506104f2610b2836600461335c565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610b5f57600080fd5b506104f260095481565b348015610b7557600080fd5b506104f260145481565b348015610b8b57600080fd5b50610408610b9a3660046132e5565b611c03565b348015610bab57600080fd5b506104f260185481565b348015610bc157600080fd5b506104f2600a5481565b348015610bd757600080fd5b50610455610be6366004613302565b611c9e565b6005546001600160a01b03163314610c1e5760405162461bcd60e51b8152600401610c1590613453565b60405180910390fd5b60005b8151811015610c86576001601f6000848481518110610c4257610c42613488565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610c7e816134b4565b915050610c21565b5050565b606060038054610c99906134cf565b80601f0160208091040260200160405190810160405280929190818152602001828054610cc5906134cf565b8015610d125780601f10610ce757610100808354040283529160200191610d12565b820191906000526020600020905b815481529060010190602001808311610cf557829003601f168201915b5050505050905090565b6000610d29338484611f27565b50600192915050565b6005546001600160a01b03163314610d5c5760405162461bcd60e51b8152600401610c1590613453565b6007546040516001600160a01b03918216918316907f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74390600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610de35760405162461bcd60e51b8152600401610c1590613453565b670de0b6b3a76400006103e8610df860025490565b610e0390600161350a565b610e0d9190613529565b610e179190613529565b811015610e7e5760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e312560881b6064820152608401610c15565b610e9081670de0b6b3a764000061350a565b60085550565b6000610ea384848461204b565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610f285760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610c15565b610f358533858403611f27565b506001949350505050565b6005546001600160a01b03163314610f6a5760405162461bcd60e51b8152600401610c1590613453565b6007601781905560016018819055601981905590610f8990829061354b565b610f93919061354b565b601655565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610d29918590610fcf90869061354b565b611f27565b6007546001600160a01b031633141561101a5760405162461bcd60e51b815260206004820152600860248201526727b7363c902232bb60c11b6044820152606401610c15565b6001600160a01b0382166110705760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610c15565b6001600160a01b0382163014156110c95760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610c15565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a082319060240160206040518083038186803b15801561110b57600080fd5b505afa15801561111f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111439190613563565b60405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390529192509084169063a9059cbb90604401602060405180830381600087803b15801561119157600080fd5b505af11580156111a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c9919061357c565b50505050565b6007546001600160a01b03163314156112155760405162461bcd60e51b815260206004820152600860248201526727b7363c902232bb60c11b6044820152606401610c15565b6040516370a0823160e01b815230600482018190526000916370a082319060240160206040518083038186803b15801561124e57600080fd5b505afa158015611262573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112869190613563565b60405163a9059cbb60e01b815233600482015260248101829052909150309063a9059cbb90604401602060405180830381600087803b1580156112c857600080fd5b505af11580156112dc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611300919061357c565b5060405133904780156108fc02916000818181858888f19350505050158015610c86573d6000803e3d6000fd5b6005546001600160a01b031633146113575760405162461bcd60e51b8152600401610c1590613453565b6001600160a01b03166000908152601f60205260409020805460ff19169055565b6005546001600160a01b031633146113a25760405162461bcd60e51b8152600401610c1590613453565b6113ac6000612866565b565b6005546001600160a01b031633146113d85760405162461bcd60e51b8152600401610c1590613453565b6102588310156114465760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e207468604482015272616e206576657279203130206d696e7574657360681b6064820152608401610c15565b6103e88211158015611456575060015b6114bb5760405162461bcd60e51b815260206004820152603060248201527f4d75737420736574206175746f204c50206275726e2070657263656e7420626560448201526f747765656e20302520616e642031302560801b6064820152608401610c15565b600d92909255600c55600b805460ff1916911515919091179055565b6005546000906001600160a01b031633146115045760405162461bcd60e51b8152600401610c1590613453565b506011805460ff19169055600190565b6005546001600160a01b0316331461153e5760405162461bcd60e51b8152600401610c1590613453565b6001600160a01b03919091166000908152601e60205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146115935760405162461bcd60e51b8152600401610c1590613453565b601383905560148290556015819055806115ad838561354b565b6115b7919061354b565b6012819055600a101561160c5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c6573730000006044820152606401610c15565b505050565b6005546001600160a01b0316331461163b5760405162461bcd60e51b8152600401610c1590613453565b6011805462ffff0019166201010017905542600e55565b6005546001600160a01b0316331461167c5760405162461bcd60e51b8152600401610c1590613453565b60118054911515620100000262ff000019909216919091179055565b606060048054610c99906134cf565b6005546001600160a01b031633146116d15760405162461bcd60e51b8152600401610c1590613453565b7f00000000000000000000000070e8510fa5330b863260363f31aff572ab0987976001600160a01b0316826001600160a01b031614156117795760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610c15565b610c8682826128b8565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156118055760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c15565b6118123385858403611f27565b5060019392505050565b6000610d2933848461204b565b6005546001600160a01b031633146118535760405162461bcd60e51b8152600401610c1590613453565b6006546040516001600160a01b03918216918316907fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567490600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146118da5760405162461bcd60e51b8152600401610c1590613453565b6001600160a01b0382166000818152601d6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146119635760405162461bcd60e51b8152600401610c1590613453565b6017839055601882905560198190558061197d838561354b565b611987919061354b565b6016819055600a101561160c5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c6573730000006044820152606401610c15565b6005546001600160a01b03163314611a065760405162461bcd60e51b8152600401610c1590613453565b670de0b6b3a76400006103e8611a1b60025490565b611a2690600561350a565b611a309190613529565b611a3a9190613529565b811015611a955760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b6064820152608401610c15565b611aa781670de0b6b3a764000061350a565b600a5550565b6005546000906001600160a01b03163314611ada5760405162461bcd60e51b8152600401610c1590613453565b612710611ae660025490565b611af190600161350a565b611afb9190613529565b821015611b685760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610c15565b6103e8611b7460025490565b611b7f90600561350a565b611b899190613529565b821115611bf55760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610c15565b50600981905560015b919050565b6005546001600160a01b03163314611c2d5760405162461bcd60e51b8152600401610c1590613453565b6001600160a01b038116611c925760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c15565b611c9b81612866565b50565b6005546000906001600160a01b03163314611ccb5760405162461bcd60e51b8152600401610c1590613453565b600f54601054611cdb919061354b565b4211611d295760405162461bcd60e51b815260206004820181905260248201527f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e6973686044820152606401610c15565b6103e8821115611d8e5760405162461bcd60e51b815260206004820152602a60248201527f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60448201526906b656e7320696e204c560b41b6064820152608401610c15565b426010556040516370a0823160e01b81526001600160a01b037f00000000000000000000000070e8510fa5330b863260363f31aff572ab09879716600482015260009030906370a082319060240160206040518083038186803b158015611df457600080fd5b505afa158015611e08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e2c9190613563565b90506000611e46612710611e40848761290b565b9061291e565b90508015611e7b57611e7b7f00000000000000000000000070e8510fa5330b863260363f31aff572ab09879761dead8361292a565b60007f00000000000000000000000070e8510fa5330b863260363f31aff572ab0987979050806001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611edb57600080fd5b505af1158015611eef573d6000803e3d6000fd5b50506040517f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb925060009150a1506001949350505050565b6001600160a01b038316611f895760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c15565b6001600160a01b038216611fea5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c15565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166120715760405162461bcd60e51b8152600401610c1590613599565b6001600160a01b0382166120975760405162461bcd60e51b8152600401610c15906135de565b6001600160a01b0383166000908152601f602052604090205460ff161580156120d957506001600160a01b0382166000908152601f602052604090205460ff16155b6121315760405162461bcd60e51b815260206004820152602360248201527f544f4b454e3a20596f7572206163636f756e7420697320626c61636b6c69737460448201526265642160e81b6064820152608401610c15565b806121425761160c8383600061292a565b60115460ff16156124ac576005546001600160a01b0384811691161480159061217957506005546001600160a01b03838116911614155b801561218d57506001600160a01b03821615155b80156121a457506001600160a01b03821661dead14155b80156121ba5750600554600160a01b900460ff16155b156124ac57601154610100900460ff16612248576001600160a01b0383166000908152601d602052604090205460ff168061220d57506001600160a01b0382166000908152601d602052604090205460ff165b6122485760405162461bcd60e51b815260206004820152600c60248201526b2a393c903630ba32b917171760a11b6044820152606401610c15565b6001600160a01b038316600090815260208052604090205460ff16801561228857506001600160a01b0382166000908152601e602052604090205460ff16155b1561236c576008548111156122fd5760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610c15565b600a546001600160a01b038316600090815260208190526040902054612323908361354b565b11156123675760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610c15565b6124ac565b6001600160a01b038216600090815260208052604090205460ff1680156123ac57506001600160a01b0383166000908152601e602052604090205460ff16155b15612422576008548111156123675760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610c15565b6001600160a01b0382166000908152601e602052604090205460ff166124ac57600a546001600160a01b038316600090815260208190526040902054612468908361354b565b11156124ac5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610c15565b30600090815260208190526040902054600954811080159081906124d8575060115462010000900460ff165b80156124ee5750600554600160a01b900460ff16155b801561251257506001600160a01b038516600090815260208052604090205460ff16155b801561253757506001600160a01b0385166000908152601d602052604090205460ff16155b801561255c57506001600160a01b0384166000908152601d602052604090205460ff16155b1561258a576005805460ff60a01b1916600160a01b17905561257c612a7e565b6005805460ff60a01b191690555b600554600160a01b900460ff161580156125bb57506001600160a01b038416600090815260208052604090205460ff165b80156125c95750600b5460ff165b80156125e45750600d54600e546125e0919061354b565b4210155b801561260957506001600160a01b0385166000908152601d602052604090205460ff16155b1561261857612616612cda565b505b6005546001600160a01b0386166000908152601d602052604090205460ff600160a01b90920482161591168061266657506001600160a01b0385166000908152601d602052604090205460ff165b1561266f575060005b60008115612852576001600160a01b038616600090815260208052604090205460ff1680156126a057506000601654115b15612758576126bf6064611e406016548861290b90919063ffffffff16565b9050601654601854826126d2919061350a565b6126dc9190613529565b601b60008282546126ed919061354b565b9091555050601654601954612702908361350a565b61270c9190613529565b601c600082825461271d919061354b565b9091555050601654601754612732908361350a565b61273c9190613529565b601a600082825461274d919061354b565b909155506128349050565b6001600160a01b038716600090815260208052604090205460ff16801561278157506000601254115b15612834576127a06064611e406012548861290b90919063ffffffff16565b9050601254601454826127b3919061350a565b6127bd9190613529565b601b60008282546127ce919061354b565b90915550506012546015546127e3908361350a565b6127ed9190613529565b601c60008282546127fe919061354b565b9091555050601254601354612813908361350a565b61281d9190613529565b601a600082825461282e919061354b565b90915550505b80156128455761284587308361292a565b61284f8186613621565b94505b61285d87878761292a565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166000818152602080526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6000612917828461350a565b9392505050565b60006129178284613529565b6001600160a01b0383166129505760405162461bcd60e51b8152600401610c1590613599565b6001600160a01b0382166129765760405162461bcd60e51b8152600401610c15906135de565b6001600160a01b038316600090815260208190526040902054818110156129ee5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c15565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612a2590849061354b565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612a7191815260200190565b60405180910390a36111c9565b3060009081526020819052604081205490506000601c54601a54601b54612aa5919061354b565b612aaf919061354b565b90506000821580612abe575081155b15612ac857505050565b600954612ad690601461350a565b831115612aee57600954612aeb90601461350a565b92505b6000600283601b5486612b01919061350a565b612b0b9190613529565b612b159190613529565b90506000612b238583612e79565b905047612b2f82612e85565b6000612b3b4783612e79565b90506000612b696002601b54612b519190613529565b612b5b9089613621565b601a54611e4090859061290b565b90506000612b976002601b54612b7f9190613529565b612b89908a613621565b601c54611e4090869061290b565b9050600081612ba68486613621565b612bb09190613621565b6000601b819055601a819055601c8190556007546040519293506001600160a01b031691849181818185875af1925050503d8060008114612c0d576040519150601f19603f3d011682016040523d82523d6000602084013e612c12565b606091505b50909850508615801590612c265750600081115b15612c7957612c358782613054565b601b54604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6006546040516001600160a01b03909116904790600081818185875af1925050503d8060008114612cc6576040519150601f19603f3d011682016040523d82523d6000602084013e612ccb565b606091505b50505050505050505050505050565b42600e556040516370a0823160e01b81526001600160a01b037f00000000000000000000000070e8510fa5330b863260363f31aff572ab098797166004820152600090819030906370a082319060240160206040518083038186803b158015612d4257600080fd5b505afa158015612d56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d7a9190613563565b90506000612d99612710611e40600c548561290b90919063ffffffff16565b90508015612dce57612dce7f00000000000000000000000070e8510fa5330b863260363f31aff572ab09879761dead8361292a565b60007f00000000000000000000000070e8510fa5330b863260363f31aff572ab0987979050806001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612e2e57600080fd5b505af1158015612e42573d6000803e3d6000fd5b50506040517f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d925060009150a16001935050505090565b60006129178284613621565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612eba57612eba613488565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612f3357600080fd5b505afa158015612f47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f6b9190613638565b81600181518110612f7e57612f7e613488565b60200260200101906001600160a01b031690816001600160a01b031681525050612fc9307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611f27565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac9479061301e908590600090869030904290600401613655565b600060405180830381600087803b15801561303857600080fd5b505af115801561304c573d6000803e3d6000fd5b505050505050565b61307f307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611f27565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663f305d7198230856000806130c66005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b15801561312957600080fd5b505af115801561313d573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061316291906136c6565b5050505050565b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114611c9b57600080fd5b8035611bfe8161317f565b600060208083850312156131b257600080fd5b823567ffffffffffffffff808211156131ca57600080fd5b818501915085601f8301126131de57600080fd5b8135818111156131f0576131f0613169565b8060051b604051601f19603f8301168101818110858211171561321557613215613169565b60405291825284820192508381018501918883111561323357600080fd5b938501935b828510156132585761324985613194565b84529385019392850192613238565b98975050505050505050565b600060208083528351808285015260005b8181101561329157858101830151858201604001528201613275565b818111156132a3576000604083870101525b50601f01601f1916929092016040019392505050565b600080604083850312156132cc57600080fd5b82356132d78161317f565b946020939093013593505050565b6000602082840312156132f757600080fd5b81356129178161317f565b60006020828403121561331457600080fd5b5035919050565b60008060006060848603121561333057600080fd5b833561333b8161317f565b9250602084013561334b8161317f565b929592945050506040919091013590565b6000806040838503121561336f57600080fd5b823561337a8161317f565b9150602083013561338a8161317f565b809150509250929050565b8015158114611c9b57600080fd5b6000806000606084860312156133b857600080fd5b833592506020840135915060408401356133d181613395565b809150509250925092565b600080604083850312156133ef57600080fd5b82356133fa8161317f565b9150602083013561338a81613395565b60008060006060848603121561341f57600080fd5b505081359360208301359350604090920135919050565b60006020828403121561344857600080fd5b813561291781613395565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156134c8576134c861349e565b5060010190565b600181811c908216806134e357607f821691505b6020821081141561350457634e487b7160e01b600052602260045260246000fd5b50919050565b60008160001904831182151516156135245761352461349e565b500290565b60008261354657634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111561355e5761355e61349e565b500190565b60006020828403121561357557600080fd5b5051919050565b60006020828403121561358e57600080fd5b815161291781613395565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6000828210156136335761363361349e565b500390565b60006020828403121561364a57600080fd5b81516129178161317f565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156136a55784516001600160a01b031683529383019391830191600101613680565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156136db57600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220d04946fa090f9f7af758c1f6e67e6d578e2fab91ab42b1d154dd01816b04e28f64736f6c63430008090033

Deployed Bytecode Sourcemap

30968:19026:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43697:185;;;;;;;;;;-1:-1:-1;43697:185:0;;;;;:::i;:::-;;:::i;:::-;;8925:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11092:169;;;;;;;;;;-1:-1:-1;11092:169:0;;;;;:::i;:::-;;:::i;:::-;;;2634:14:1;;2627:22;2609:41;;2597:2;2582:18;11092:169:0;2469:187:1;32392:63:0;;;;;;;;;;-1:-1:-1;32392:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;31042:51;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3104:32:1;;;3086:51;;3074:2;3059:18;31042:51:0;2913:230:1;10045:108:0;;;;;;;;;;-1:-1:-1;10133:12:0;;10045:108;;;3294:25:1;;;3282:2;3267:18;10045:108:0;3148:177:1;39289:157:0;;;;;;;;;;-1:-1:-1;39289:157:0;;;;;:::i;:::-;;:::i;31630:47::-;;;;;;;;;;;;;;;;31486:36;;;;;;;;;;;;;;;;32176:33;;;;;;;;;;;;;;;;32136;;;;;;;;;;;;;;;;36497:275;;;;;;;;;;-1:-1:-1;36497:275:0;;;;;:::i;:::-;;:::i;11743:492::-;;;;;;;;;;-1:-1:-1;11743:492:0;;;;;:::i;:::-;;:::i;31145:53::-;;;;;;;;;;;;31191:6;31145:53;;31542:45;;;;;;;;;;;;;;;;31444:33;;;;;;;;;;-1:-1:-1;31444:33:0;;;;;;;;9887:93;;;;;;;;;;-1:-1:-1;9887:93:0;;9970:2;4326:36:1;;4314:2;4299:18;9887:93:0;4184:184:1;38158:209:0;;;;;;;;;;;;;:::i;12644:215::-;;;;;;;;;;-1:-1:-1;12644:215:0;;;;;:::i;:::-;;:::i;49588:403::-;;;;;;;;;;-1:-1:-1;49588:403:0;;;;;:::i;:::-;;:::i;49289:291::-;;;;;;;;;;;;;:::i;31100:38::-;;;;;;;;;;;;;;;31730:33;;;;;;;;;;-1:-1:-1;31730:33:0;;;;;;;;39454:126;;;;;;;;;;-1:-1:-1;39454:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;39544:28:0;39520:4;39544:28;;;:19;:28;;;;;;;;;39454:126;31991:28;;;;;;;;;;;;;;;;43884:92;;;;;;;;;;-1:-1:-1;43884:92:0;;;;;:::i;:::-;;:::i;31810:31::-;;;;;;;;;;-1:-1:-1;31810:31:0;;;;;;;;;;;10216:127;;;;;;;;;;-1:-1:-1;10216:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;10317:18:0;10290:7;10317:18;;;;;;;;;;;;10216:127;2442:103;;;;;;;;;;;;;:::i;46880:555::-;;;;;;;;;;-1:-1:-1;46880:555:0;;;;;:::i;:::-;;:::i;35864:121::-;;;;;;;;;;;;;:::i;37044:167::-;;;;;;;;;;-1:-1:-1;37044:167:0;;;;;:::i;:::-;;:::i;31235:30::-;;;;;;;;;;-1:-1:-1;31235:30:0;;;;-1:-1:-1;;;;;31235:30:0;;;31884;;;;;;;;;;;;;;;;37327:403;;;;;;;;;;-1:-1:-1;37327:403:0;;;;;:::i;:::-;;:::i;35701:155::-;;;;;;;;;;;;;:::i;1791:87::-;;;;;;;;;;-1:-1:-1;1864:6:0;;-1:-1:-1;;;;;1864:6:0;1791:87;;31272:24;;;;;;;;;;-1:-1:-1;31272:24:0;;;;-1:-1:-1;;;;;31272:24:0;;;32026:31;;;;;;;;;;;;;;;;37219:100;;;;;;;;;;-1:-1:-1;37219:100:0;;;;;:::i;:::-;;:::i;9144:104::-;;;;;;;;;;;;;:::i;38565:304::-;;;;;;;;;;-1:-1:-1;38565:304:0;;;;;:::i;:::-;;:::i;31958:24::-;;;;;;;;;;;;;;;;31684:35;;;;;;;;;;;;;;;;32216:27;;;;;;;;;;;;;;;;32102:25;;;;;;;;;;;;;;;;13362:413;;;;;;;;;;-1:-1:-1;13362:413:0;;;;;:::i;:::-;;:::i;31594:29::-;;;;;;;;;;;;;;;;10556:175;;;;;;;;;;-1:-1:-1;10556:175:0;;;;;:::i;:::-;;:::i;39073:208::-;;;;;;;;;;-1:-1:-1;39073:208:0;;;;;:::i;:::-;;:::i;32657:57::-;;;;;;;;;;-1:-1:-1;32657:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;31770:33;;;;;;;;;;-1:-1:-1;31770:33:0;;;;;;;;;;;32462:36;;;;;;;;;;-1:-1:-1;32462:36:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;38375:182;;;;;;;;;;-1:-1:-1;38375:182:0;;;;;:::i;:::-;;:::i;37738:412::-;;;;;;;;;;-1:-1:-1;37738:412:0;;;;;:::i;:::-;;:::i;36780:256::-;;;;;;;;;;-1:-1:-1;36780:256:0;;;;;:::i;:::-;;:::i;31305:35::-;;;;;;;;;;;;;;;;35993:496;;;;;;;;;;-1:-1:-1;35993:496:0;;;;;:::i;:::-;;:::i;31850:27::-;;;;;;;;;;;;;;;;10794:151;;;;;;;;;;-1:-1:-1;10794:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;10910:18:0;;;10883:7;10910:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;10794:151;31347:33;;;;;;;;;;;;;;;;31921:30;;;;;;;;;;;;;;;;2700:201;;;;;;;;;;-1:-1:-1;2700:201:0;;;;;:::i;:::-;;:::i;32064:31::-;;;;;;;;;;;;;;;;31387:24;;;;;;;;;;;;;;;;48232:1049;;;;;;;;;;-1:-1:-1;48232:1049:0;;;;;:::i;:::-;;:::i;43697:185::-;1864:6;;-1:-1:-1;;;;;1864:6:0;738:10;2011:23;2003:68;;;;-1:-1:-1;;;2003:68:0;;;;;;;:::i;:::-;;;;;;;;;43777:9:::1;43772:99;43796:5;:12;43792:1;:16;43772:99;;;43851:4;43834;:14;43839:5;43845:1;43839:8;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;43834:14:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;43834:14:0;:21;;-1:-1:-1;;43834:21:0::1;::::0;::::1;;::::0;;;::::1;::::0;;43810:3;::::1;::::0;::::1;:::i;:::-;;;;43772:99;;;;43697:185:::0;:::o;8925:100::-;8979:13;9012:5;9005:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8925:100;:::o;11092:169::-;11175:4;11192:39;738:10;11215:7;11224:6;11192:8;:39::i;:::-;-1:-1:-1;11249:4:0;11092:169;;;;:::o;39289:157::-;1864:6;;-1:-1:-1;;;;;1864:6:0;738:10;2011:23;2003:68;;;;-1:-1:-1;;;2003:68:0;;;;;;;:::i;:::-;39396:9:::1;::::0;39368:38:::1;::::0;-1:-1:-1;;;;;39396:9:0;;::::1;::::0;39368:38;::::1;::::0;::::1;::::0;39396:9:::1;::::0;39368:38:::1;39417:9;:21:::0;;-1:-1:-1;;;;;;39417:21:0::1;-1:-1:-1::0;;;;;39417:21:0;;;::::1;::::0;;;::::1;::::0;;39289:157::o;36497:275::-;1864:6;;-1:-1:-1;;;;;1864:6:0;738:10;2011:23;2003:68;;;;-1:-1:-1;;;2003:68:0;;;;;;;:::i;:::-;36634:4:::1;36626;36605:13;10133:12:::0;;;10045:108;36605:13:::1;:17;::::0;36621:1:::1;36605:17;:::i;:::-;36604:26;;;;:::i;:::-;36603:35;;;;:::i;:::-;36593:6;:45;;36571:142;;;::::0;-1:-1:-1;;;36571:142:0;;7972:2:1;36571:142:0::1;::::0;::::1;7954:21:1::0;8011:2;7991:18;;;7984:30;8050:34;8030:18;;;8023:62;-1:-1:-1;;;8101:18:1;;;8094:45;8156:19;;36571:142:0::1;7770:411:1::0;36571:142:0::1;36747:17;:6:::0;36757::::1;36747:17;:::i;:::-;36724:20;:40:::0;-1:-1:-1;36497:275:0:o;11743:492::-;11883:4;11900:36;11910:6;11918:9;11929:6;11900:9;:36::i;:::-;-1:-1:-1;;;;;11976:19:0;;11949:24;11976:19;;;:11;:19;;;;;;;;738:10;11976:33;;;;;;;;12028:26;;;;12020:79;;;;-1:-1:-1;;;12020:79:0;;8388:2:1;12020:79:0;;;8370:21:1;8427:2;8407:18;;;8400:30;8466:34;8446:18;;;8439:62;-1:-1:-1;;;8517:18:1;;;8510:38;8565:19;;12020:79:0;8186:404:1;12020:79:0;12135:57;12144:6;738:10;12185:6;12166:16;:25;12135:8;:57::i;:::-;-1:-1:-1;12223:4:0;;11743:492;-1:-1:-1;;;;11743:492:0:o;38158:209::-;1864:6;;-1:-1:-1;;;;;1864:6:0;738:10;2011:23;2003:68;;;;-1:-1:-1;;;2003:68:0;;;;;;;:::i;:::-;38227:1:::1;38208:16;:20:::0;;;38258:1:::1;38239:16;:20:::0;;;38270:10:::1;:14:::0;;;38258:1;38311:35:::1;::::0;38258:1;;38311:35:::1;:::i;:::-;:48;;;;:::i;:::-;38295:13;:64:::0;38158:209::o;12644:215::-;738:10;12732:4;12781:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;12781:34:0;;;;;;;;;;12732:4;;12749:80;;12772:7;;12781:47;;12818:10;;12781:47;:::i;:::-;12749:8;:80::i;49588:403::-;49682:9;;-1:-1:-1;;;;;49682:9:0;49668:10;:23;;49660:44;;;;-1:-1:-1;;;49660:44:0;;8930:2:1;49660:44:0;;;8912:21:1;8969:1;8949:18;;;8942:29;-1:-1:-1;;;8987:18:1;;;8980:38;9035:18;;49660:44:0;8728:331:1;49660:44:0;-1:-1:-1;;;;;49723:20:0;;49715:59;;;;-1:-1:-1;;;49715:59:0;;9266:2:1;49715:59:0;;;9248:21:1;9305:2;9285:18;;;9278:30;9344:28;9324:18;;;9317:56;9390:18;;49715:59:0;9064:350:1;49715:59:0;-1:-1:-1;;;;;49793:23:0;;49811:4;49793:23;;49785:64;;;;-1:-1:-1;;;49785:64:0;;9621:2:1;49785:64:0;;;9603:21:1;9660:2;9640:18;;;9633:30;9699;9679:18;;;9672:58;9747:18;;49785:64:0;9419:352:1;49785:64:0;49887:39;;-1:-1:-1;;;49887:39:0;;49920:4;49887:39;;;3086:51:1;49860:24:0;;-1:-1:-1;;;;;49887:24:0;;;;;3059:18:1;;49887:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49937:46;;-1:-1:-1;;;49937:46:0;;-1:-1:-1;;;;;10157:32:1;;;49937:46:0;;;10139:51:1;10206:18;;;10199:34;;;49860:66:0;;-1:-1:-1;49937:23:0;;;;;;10112:18:1;;49937:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;49649:342;49588:403;;:::o;49289:291::-;49351:9;;-1:-1:-1;;;;;49351:9:0;49337:10;:23;;49329:44;;;;-1:-1:-1;;;49329:44:0;;8930:2:1;49329:44:0;;;8912:21:1;8969:1;8949:18;;;8942:29;-1:-1:-1;;;8987:18:1;;;8980:38;9035:18;;49329:44:0;8728:331:1;49329:44:0;49402:46;;-1:-1:-1;;;49402:46:0;;49417:4;49402:46;;;3086:51:1;;;49384:15:0;;49402:31;;3059:18:1;;49402:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49459:51;;-1:-1:-1;;;49459:51:0;;49490:10;49459:51;;;10139::1;10206:18;;;10199:34;;;49384:64:0;;-1:-1:-1;49474:4:0;;49459:30;;10112:18:1;;49459:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;49521:51:0;;49529:10;;49550:21;49521:51;;;;;;;;;49550:21;49529:10;49521:51;;;;;;;;;;;;;;;;;;;43884:92;1864:6;;-1:-1:-1;;;;;1864:6:0;738:10;2011:23;2003:68;;;;-1:-1:-1;;;2003:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;43948:12:0::1;43963:5;43948:12:::0;;;:4:::1;:12;::::0;;;;:20;;-1:-1:-1;;43948:20:0::1;::::0;;43884:92::o;2442:103::-;1864:6;;-1:-1:-1;;;;;1864:6:0;738:10;2011:23;2003:68;;;;-1:-1:-1;;;2003:68:0;;;;;;;:::i;:::-;2507:30:::1;2534:1;2507:18;:30::i;:::-;2442:103::o:0;46880:555::-;1864:6;;-1:-1:-1;;;;;1864:6:0;738:10;2011:23;2003:68;;;;-1:-1:-1;;;2003:68:0;;;;;;;:::i;:::-;47082:3:::1;47059:19;:26;;47037:127;;;::::0;-1:-1:-1;;;47037:127:0;;10696:2:1;47037:127:0::1;::::0;::::1;10678:21:1::0;10735:2;10715:18;;;10708:30;10774:34;10754:18;;;10747:62;-1:-1:-1;;;10825:18:1;;;10818:49;10884:19;;47037:127:0::1;10494:415:1::0;47037:127:0::1;47209:4;47197:8;:16;;:33;;;;-1:-1:-1::0;47217:13:0;47197:33:::1;47175:131;;;::::0;-1:-1:-1;;;47175:131:0;;11116:2:1;47175:131:0::1;::::0;::::1;11098:21:1::0;11155:2;11135:18;;;11128:30;11194:34;11174:18;;;11167:62;-1:-1:-1;;;11245:18:1;;;11238:46;11301:19;;47175:131:0::1;10914:412:1::0;47175:131:0::1;47317:15;:37:::0;;;;47365:16:::1;:27:::0;47403:13:::1;:24:::0;;-1:-1:-1;;47403:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;46880:555::o;35864:121::-;1864:6;;35916:4;;-1:-1:-1;;;;;1864:6:0;738:10;2011:23;2003:68;;;;-1:-1:-1;;;2003:68:0;;;;;;;:::i;:::-;-1:-1:-1;35933:14:0::1;:22:::0;;-1:-1:-1;;35933:22:0::1;::::0;;;35864:121;:::o;37044:167::-;1864:6;;-1:-1:-1;;;;;1864:6:0;738:10;2011:23;2003:68;;;;-1:-1:-1;;;2003:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37157:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;37157:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;37044:167::o;37327:403::-;1864:6;;-1:-1:-1;;;;;1864:6:0;738:10;2011:23;2003:68;;;;-1:-1:-1;;;2003:68:0;;;;;;;:::i;:::-;37477:15:::1;:31:::0;;;37519:15:::1;:31:::0;;;37561:9:::1;:19:::0;;;37573:7;37606:33:::1;37537:13:::0;37495;37606:33:::1;:::i;:::-;:45;;;;:::i;:::-;37591:12;:60:::0;;;37686:2:::1;-1:-1:-1::0;37670:18:0::1;37662:60;;;::::0;-1:-1:-1;;;37662:60:0;;11533:2:1;37662:60:0::1;::::0;::::1;11515:21:1::0;11572:2;11552:18;;;11545:30;11611:31;11591:18;;;11584:59;11660:18;;37662:60:0::1;11331:353:1::0;37662:60:0::1;37327:403:::0;;;:::o;35701:155::-;1864:6;;-1:-1:-1;;;;;1864:6:0;738:10;2011:23;2003:68;;;;-1:-1:-1;;;2003:68:0;;;;;;;:::i;:::-;35756:13:::1;:20:::0;;-1:-1:-1;;35787:18:0;;;;;35833:15:::1;35816:14;:32:::0;35701:155::o;37219:100::-;1864:6;;-1:-1:-1;;;;;1864:6:0;738:10;2011:23;2003:68;;;;-1:-1:-1;;;2003:68:0;;;;;;;:::i;:::-;37290:11:::1;:21:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;37290:21:0;;::::1;::::0;;;::::1;::::0;;37219:100::o;9144:104::-;9200:13;9233:7;9226:14;;;;;:::i;38565:304::-;1864:6;;-1:-1:-1;;;;;1864:6:0;738:10;2011:23;2003:68;;;;-1:-1:-1;;;2003:68:0;;;;;;;:::i;:::-;38709:13:::1;-1:-1:-1::0;;;;;38701:21:0::1;:4;-1:-1:-1::0;;;;;38701:21:0::1;;;38679:128;;;::::0;-1:-1:-1;;;38679:128:0;;11891:2:1;38679:128:0::1;::::0;::::1;11873:21:1::0;11930:2;11910:18;;;11903:30;11969:34;11949:18;;;11942:62;12040:27;12020:18;;;12013:55;12085:19;;38679:128:0::1;11689:421:1::0;38679:128:0::1;38820:41;38849:4;38855:5;38820:28;:41::i;13362:413::-:0;738:10;13455:4;13499:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;13499:34:0;;;;;;;;;;13552:35;;;;13544:85;;;;-1:-1:-1;;;13544:85:0;;12317:2:1;13544:85:0;;;12299:21:1;12356:2;12336:18;;;12329:30;12395:34;12375:18;;;12368:62;-1:-1:-1;;;12446:18:1;;;12439:35;12491:19;;13544:85:0;12115:401:1;13544:85:0;13665:67;738:10;13688:7;13716:15;13697:16;:34;13665:8;:67::i;:::-;-1:-1:-1;13763:4:0;;13362:413;-1:-1:-1;;;13362:413:0:o;10556:175::-;10642:4;10659:42;738:10;10683:9;10694:6;10659:9;:42::i;39073:208::-;1864:6;;-1:-1:-1;;;;;1864:6:0;738:10;2011:23;2003:68;;;;-1:-1:-1;;;2003:68:0;;;;;;;:::i;:::-;39210:15:::1;::::0;39167:59:::1;::::0;-1:-1:-1;;;;;39210:15:0;;::::1;::::0;39167:59;::::1;::::0;::::1;::::0;39210:15:::1;::::0;39167:59:::1;39237:15;:36:::0;;-1:-1:-1;;;;;;39237:36:0::1;-1:-1:-1::0;;;;;39237:36:0;;;::::1;::::0;;;::::1;::::0;;39073:208::o;38375:182::-;1864:6;;-1:-1:-1;;;;;1864:6:0;738:10;2011:23;2003:68;;;;-1:-1:-1;;;2003:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38460:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;38460:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;38515:34;;2609:41:1;;;38515:34:0::1;::::0;2582:18:1;38515:34:0::1;;;;;;;38375:182:::0;;:::o;37738:412::-;1864:6;;-1:-1:-1;;;;;1864:6:0;738:10;2011:23;2003:68;;;;-1:-1:-1;;;2003:68:0;;;;;;;:::i;:::-;37889:16:::1;:32:::0;;;37932:16:::1;:32:::0;;;37975:10:::1;:20:::0;;;37988:7;38022:35:::1;37951:13:::0;37908;38022:35:::1;:::i;:::-;:48;;;;:::i;:::-;38006:13;:64:::0;;;38106:2:::1;-1:-1:-1::0;38089:19:0::1;38081:61;;;::::0;-1:-1:-1;;;38081:61:0;;11533:2:1;38081:61:0::1;::::0;::::1;11515:21:1::0;11572:2;11552:18;;;11545:30;11611:31;11591:18;;;11584:59;11660:18;;38081:61:0::1;11331:353:1::0;36780:256:0;1864:6;;-1:-1:-1;;;;;1864:6:0;738:10;2011:23;2003:68;;;;-1:-1:-1;;;2003:68:0;;;;;;;:::i;:::-;36920:4:::1;36912;36891:13;10133:12:::0;;;10045:108;36891:13:::1;:17;::::0;36907:1:::1;36891:17;:::i;:::-;36890:26;;;;:::i;:::-;36889:35;;;;:::i;:::-;36879:6;:45;;36857:131;;;::::0;-1:-1:-1;;;36857:131:0;;12723:2:1;36857:131:0::1;::::0;::::1;12705:21:1::0;12762:2;12742:18;;;12735:30;12801:34;12781:18;;;12774:62;-1:-1:-1;;;12852:18:1;;;12845:34;12896:19;;36857:131:0::1;12521:400:1::0;36857:131:0::1;37011:17;:6:::0;37021::::1;37011:17;:::i;:::-;36999:9;:29:::0;-1:-1:-1;36780:256:0:o;35993:496::-;1864:6;;36101:4;;-1:-1:-1;;;;;1864:6:0;738:10;2011:23;2003:68;;;;-1:-1:-1;;;2003:68:0;;;;;;;:::i;:::-;36180:5:::1;36159:13;10133:12:::0;;;10045:108;36159:13:::1;:17;::::0;36175:1:::1;36159:17;:::i;:::-;36158:27;;;;:::i;:::-;36145:9;:40;;36123:143;;;::::0;-1:-1:-1;;;36123:143:0;;13128:2:1;36123:143:0::1;::::0;::::1;13110:21:1::0;13167:2;13147:18;;;13140:30;13206:34;13186:18;;;13179:62;-1:-1:-1;;;13257:18:1;;;13250:51;13318:19;;36123:143:0::1;12926:417:1::0;36123:143:0::1;36334:4;36313:13;10133:12:::0;;;10045:108;36313:13:::1;:17;::::0;36329:1:::1;36313:17;:::i;:::-;36312:26;;;;:::i;:::-;36299:9;:39;;36277:141;;;::::0;-1:-1:-1;;;36277:141:0;;13550:2:1;36277:141:0::1;::::0;::::1;13532:21:1::0;13589:2;13569:18;;;13562:30;13628:34;13608:18;;;13601:62;-1:-1:-1;;;13679:18:1;;;13672:50;13739:19;;36277:141:0::1;13348:416:1::0;36277:141:0::1;-1:-1:-1::0;36429:18:0::1;:30:::0;;;36477:4:::1;2082:1;35993:496:::0;;;:::o;2700:201::-;1864:6;;-1:-1:-1;;;;;1864:6:0;738:10;2011:23;2003:68;;;;-1:-1:-1;;;2003:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2789:22:0;::::1;2781:73;;;::::0;-1:-1:-1;;;2781:73:0;;13971:2:1;2781:73:0::1;::::0;::::1;13953:21:1::0;14010:2;13990:18;;;13983:30;14049:34;14029:18;;;14022:62;-1:-1:-1;;;14100:18:1;;;14093:36;14146:19;;2781:73:0::1;13769:402:1::0;2781:73:0::1;2865:28;2884:8;2865:18;:28::i;:::-;2700:201:::0;:::o;48232:1049::-;1864:6;;48343:4;;-1:-1:-1;;;;;1864:6:0;738:10;2011:23;2003:68;;;;-1:-1:-1;;;2003:68:0;;;;;;;:::i;:::-;48428:19:::1;;48405:20;;:42;;;;:::i;:::-;48387:15;:60;48365:142;;;::::0;-1:-1:-1;;;48365:142:0;;14378:2:1;48365:142:0::1;::::0;::::1;14360:21:1::0;;;14397:18;;;14390:30;14456:34;14436:18;;;14429:62;14508:18;;48365:142:0::1;14176:356:1::0;48365:142:0::1;48537:4;48526:7;:15;;48518:70;;;::::0;-1:-1:-1;;;48518:70:0;;14739:2:1;48518:70:0::1;::::0;::::1;14721:21:1::0;14778:2;14758:18;;;14751:30;14817:34;14797:18;;;14790:62;-1:-1:-1;;;14868:18:1;;;14861:40;14918:19;;48518:70:0::1;14537:406:1::0;48518:70:0::1;48622:15;48599:20;:38:::0;48723:29:::1;::::0;-1:-1:-1;;;48723:29:0;;-1:-1:-1;;;;;48738:13:0::1;3104:32:1::0;48723:29:0::1;::::0;::::1;3086:51:1::0;48692:28:0::1;::::0;48723:4:::1;::::0;:14:::1;::::0;3059:18:1;;48723:29:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48692:60:::0;-1:-1:-1;48802:20:0::1;48825:44;48863:5;48825:33;48692:60:::0;48850:7;48825:24:::1;:33::i;:::-;:37:::0;::::1;:44::i;:::-;48802:67:::0;-1:-1:-1;48967:16:0;;48963:110:::1;;49000:61;49016:13;49039:6;49048:12;49000:15;:61::i;:::-;49148:19;49185:13;49148:51;;49210:4;-1:-1:-1::0;;;;;49210:9:0::1;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;49237:14:0::1;::::0;::::1;::::0;-1:-1:-1;49237:14:0;;-1:-1:-1;49237:14:0::1;-1:-1:-1::0;49269:4:0::1;::::0;48232:1049;-1:-1:-1;;;;48232:1049:0:o;17046:380::-;-1:-1:-1;;;;;17182:19:0;;17174:68;;;;-1:-1:-1;;;17174:68:0;;15150:2:1;17174:68:0;;;15132:21:1;15189:2;15169:18;;;15162:30;15228:34;15208:18;;;15201:62;-1:-1:-1;;;15279:18:1;;;15272:34;15323:19;;17174:68:0;14948:400:1;17174:68:0;-1:-1:-1;;;;;17261:21:0;;17253:68;;;;-1:-1:-1;;;17253:68:0;;15555:2:1;17253:68:0;;;15537:21:1;15594:2;15574:18;;;15567:30;15633:34;15613:18;;;15606:62;-1:-1:-1;;;15684:18:1;;;15677:32;15726:19;;17253:68:0;15353:398:1;17253:68:0;-1:-1:-1;;;;;17334:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;17386:32;;3294:25:1;;;17386:32:0;;3267:18:1;17386:32:0;;;;;;;17046:380;;;:::o;39588:4101::-;-1:-1:-1;;;;;39720:18:0;;39712:68;;;;-1:-1:-1;;;39712:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39799:16:0;;39791:64;;;;-1:-1:-1;;;39791:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39875:10:0;;;;;;:4;:10;;;;;;;;39874:11;:24;;;;-1:-1:-1;;;;;;39890:8:0;;;;;;:4;:8;;;;;;;;39889:9;39874:24;39866:72;;;;-1:-1:-1;;;39866:72:0;;16768:2:1;39866:72:0;;;16750:21:1;16807:2;16787:18;;;16780:30;16846:34;16826:18;;;16819:62;-1:-1:-1;;;16897:18:1;;;16890:33;16940:19;;39866:72:0;16566:399:1;39866:72:0;39955:11;39951:93;;39983:28;39999:4;40005:2;40009:1;39983:15;:28::i;39951:93::-;40060:14;;;;40056:1700;;;1864:6;;-1:-1:-1;;;;;40113:15:0;;;1864:6;;40113:15;;;;:49;;-1:-1:-1;1864:6:0;;-1:-1:-1;;;;;40149:13:0;;;1864:6;;40149:13;;40113:49;:86;;;;-1:-1:-1;;;;;;40183:16:0;;;;40113:86;:128;;;;-1:-1:-1;;;;;;40220:21:0;;40234:6;40220:21;;40113:128;:158;;;;-1:-1:-1;40263:8:0;;-1:-1:-1;;;40263:8:0;;;;40262:9;40113:158;40091:1654;;;40311:13;;;;;;;40306:213;;-1:-1:-1;;;;;40383:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;40412:23:0;;;;;;:19;:23;;;;;;;;40383:52;40349:150;;;;-1:-1:-1;;;40349:150:0;;17172:2:1;40349:150:0;;;17154:21:1;17211:2;17191:18;;;17184:30;-1:-1:-1;;;17230:18:1;;;17223:42;17282:18;;40349:150:0;16970:336:1;40349:150:0;-1:-1:-1;;;;;40609:31:0;;;;;;:25;:31;;;;;;;;:92;;;;-1:-1:-1;;;;;;40666:35:0;;;;;;:31;:35;;;;;;;;40665:36;40609:92;40583:1147;;;40788:20;;40778:6;:30;;40744:169;;;;-1:-1:-1;;;40744:169:0;;17513:2:1;40744:169:0;;;17495:21:1;17552:2;17532:18;;;17525:30;17591:34;17571:18;;;17564:62;-1:-1:-1;;;17642:18:1;;;17635:51;17703:19;;40744:169:0;17311:417:1;40744:169:0;40996:9;;-1:-1:-1;;;;;10317:18:0;;10290:7;10317:18;;;;;;;;;;;40970:22;;:6;:22;:::i;:::-;:35;;40936:140;;;;-1:-1:-1;;;40936:140:0;;17935:2:1;40936:140:0;;;17917:21:1;17974:2;17954:18;;;17947:30;-1:-1:-1;;;17993:18:1;;;17986:49;18052:18;;40936:140:0;17733:343:1;40936:140:0;40583:1147;;;-1:-1:-1;;;;;41174:29:0;;;;;;:25;:29;;;;;;;;:92;;;;-1:-1:-1;;;;;;41229:37:0;;;;;;:31;:37;;;;;;;;41228:38;41174:92;41148:582;;;41353:20;;41343:6;:30;;41309:170;;;;-1:-1:-1;;;41309:170:0;;18283:2:1;41309:170:0;;;18265:21:1;18322:2;18302:18;;;18295:30;18361:34;18341:18;;;18334:62;-1:-1:-1;;;18412:18:1;;;18405:52;18474:19;;41309:170:0;18081:418:1;41148:582:0;-1:-1:-1;;;;;41510:35:0;;;;;;:31;:35;;;;;;;;41505:225;;41630:9;;-1:-1:-1;;;;;10317:18:0;;10290:7;10317:18;;;;;;;;;;;41604:22;;:6;:22;:::i;:::-;:35;;41570:140;;;;-1:-1:-1;;;41570:140:0;;17935:2:1;41570:140:0;;;17917:21:1;17974:2;17954:18;;;17947:30;-1:-1:-1;;;17993:18:1;;;17986:49;18052:18;;41570:140:0;17733:343:1;41570:140:0;41817:4;41768:28;10317:18;;;;;;;;;;;41875;;41851:42;;;;;;;41924:35;;-1:-1:-1;41948:11:0;;;;;;;41924:35;:61;;;;-1:-1:-1;41977:8:0;;-1:-1:-1;;;41977:8:0;;;;41976:9;41924:61;:110;;;;-1:-1:-1;;;;;;42003:31:0;;;;;;:25;:31;;;;;;;;42002:32;41924:110;:153;;;;-1:-1:-1;;;;;;42052:25:0;;;;;;:19;:25;;;;;;;;42051:26;41924:153;:194;;;;-1:-1:-1;;;;;;42095:23:0;;;;;;:19;:23;;;;;;;;42094:24;41924:194;41906:326;;;42145:8;:15;;-1:-1:-1;;;;42145:15:0;-1:-1:-1;;;42145:15:0;;;42177:10;:8;:10::i;:::-;42204:8;:16;;-1:-1:-1;;;;42204:16:0;;;41906:326;42263:8;;-1:-1:-1;;;42263:8:0;;;;42262:9;:55;;;;-1:-1:-1;;;;;;42288:29:0;;;;;;:25;:29;;;;;;;;42262:55;:85;;;;-1:-1:-1;42334:13:0;;;;42262:85;:153;;;;;42400:15;;42383:14;;:32;;;;:::i;:::-;42364:15;:51;;42262:153;:196;;;;-1:-1:-1;;;;;;42433:25:0;;;;;;:19;:25;;;;;;;;42432:26;42262:196;42244:282;;;42485:29;:27;:29::i;:::-;;42244:282;42554:8;;-1:-1:-1;;;;;42579:25:0;;42538:12;42579:25;;;:19;:25;;;;;;42554:8;-1:-1:-1;;;42554:8:0;;;;;42553:9;;42579:25;;:52;;-1:-1:-1;;;;;;42608:23:0;;;;;;:19;:23;;;;;;;;42579:52;42575:100;;;-1:-1:-1;42658:5:0;42575:100;42687:12;42718:7;42714:922;;;-1:-1:-1;;;;;42746:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;42795:1;42779:13;;:17;42746:50;42742:745;;;42824:34;42854:3;42824:25;42835:13;;42824:6;:10;;:25;;;;:::i;:34::-;42817:41;;42927:13;;42907:16;;42900:4;:23;;;;:::i;:::-;42899:41;;;;:::i;:::-;42877:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;42997:13:0;;42983:10;;42976:17;;:4;:17;:::i;:::-;42975:35;;;;:::i;:::-;42959:12;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;;43079:13:0;;43059:16;;43052:23;;:4;:23;:::i;:::-;43051:41;;;;:::i;:::-;43029:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;42742:745:0;;-1:-1:-1;42742:745:0;;-1:-1:-1;;;;;43131:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;43181:1;43166:12;;:16;43131:51;43127:360;;;43210:33;43239:3;43210:24;43221:12;;43210:6;:10;;:24;;;;:::i;:33::-;43203:40;;43311:12;;43292:15;;43285:4;:22;;;;:::i;:::-;43284:39;;;;:::i;:::-;43262:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;43379:12:0;;43366:9;;43359:16;;:4;:16;:::i;:::-;43358:33;;;;:::i;:::-;43342:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;43459:12:0;;43440:15;;43433:22;;:4;:22;:::i;:::-;43432:39;;;;:::i;:::-;43410:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;43127:360:0;43507:8;;43503:91;;43536:42;43552:4;43566;43573;43536:15;:42::i;:::-;43610:14;43620:4;43610:14;;:::i;:::-;;;42714:922;43648:33;43664:4;43670:2;43674:6;43648:15;:33::i;:::-;39701:3988;;;;39588:4101;;;:::o;3061:191::-;3154:6;;;-1:-1:-1;;;;;3171:17:0;;;-1:-1:-1;;;;;;3171:17:0;;;;;;;3204:40;;3154:6;;;3171:17;3154:6;;3204:40;;3135:16;;3204:40;3124:128;3061:191;:::o;38877:188::-;-1:-1:-1;;;;;38960:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;38960:39:0;;;;;;;;;;39017:40;;38960:39;;:31;39017:40;;;38877:188;;:::o;22178:98::-;22236:7;22263:5;22267:1;22263;:5;:::i;:::-;22256:12;22178:98;-1:-1:-1;;;22178:98:0:o;22577:::-;22635:7;22662:5;22666:1;22662;:5;:::i;14265:733::-;-1:-1:-1;;;;;14405:20:0;;14397:70;;;;-1:-1:-1;;;14397:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14486:23:0;;14478:71;;;;-1:-1:-1;;;14478:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14646:17:0;;14622:21;14646:17;;;;;;;;;;;14682:23;;;;14674:74;;;;-1:-1:-1;;;14674:74:0;;18836:2:1;14674:74:0;;;18818:21:1;18875:2;18855:18;;;18848:30;18914:34;18894:18;;;18887:62;-1:-1:-1;;;18965:18:1;;;18958:36;19011:19;;14674:74:0;18634:402:1;14674:74:0;-1:-1:-1;;;;;14784:17:0;;;:9;:17;;;;;;;;;;;14804:22;;;14784:42;;14848:20;;;;;;;;:30;;14820:6;;14784:9;14848:30;;14820:6;;14848:30;:::i;:::-;;;;;;;;14913:9;-1:-1:-1;;;;;14896:35:0;14905:6;-1:-1:-1;;;;;14896:35:0;;14924:6;14896:35;;;;3294:25:1;;3282:2;3267:18;;3148:177;14896:35:0;;;;;;;;14944:46;37327:403;45100:1772;45183:4;45139:23;10317:18;;;;;;;;;;;45139:50;;45200:25;45296:12;;45262:18;;45228;;:52;;;;:::i;:::-;:80;;;;:::i;:::-;45200:108;-1:-1:-1;45319:12:0;45348:20;;;:46;;-1:-1:-1;45372:22:0;;45348:46;45344:85;;;45411:7;;;45100:1772::o;45344:85::-;45463:18;;:23;;45484:2;45463:23;:::i;:::-;45445:15;:41;45441:115;;;45521:18;;:23;;45542:2;45521:23;:::i;:::-;45503:41;;45441:115;45617:23;45730:1;45697:17;45662:18;;45644:15;:36;;;;:::i;:::-;45643:71;;;;:::i;:::-;:88;;;;:::i;:::-;45617:114;-1:-1:-1;45742:26:0;45771:36;:15;45617:114;45771:19;:36::i;:::-;45742:65;-1:-1:-1;45848:21:0;45882:36;45742:65;45882:16;:36::i;:::-;45931:18;45952:44;:21;45978:17;45952:25;:44::i;:::-;45931:65;;46009:23;46035:84;46116:1;46095:18;;:22;;;;:::i;:::-;46074:44;;:17;:44;:::i;:::-;46050:18;;46035:34;;:10;;:14;:34::i;:84::-;46009:110;;46140:17;46160:78;46235:1;46214:18;;:22;;;;:::i;:::-;46193:44;;:17;:44;:::i;:::-;46175:12;;46160:28;;:10;;:14;:28::i;:78::-;46140:98;-1:-1:-1;46251:23:0;46140:98;46277:28;46290:15;46277:10;:28;:::i;:::-;:40;;;;:::i;:::-;46351:1;46330:18;:22;;;46363:18;:22;;;46396:12;:16;;;46447:9;;46439:45;;46251:66;;-1:-1:-1;;;;;;46447:9:0;;46470;;46439:45;46351:1;46439:45;46470:9;46447;46439:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;46425:59:0;;-1:-1:-1;;46501:19:0;;;;;:42;;;46542:1;46524:15;:19;46501:42;46497:278;;;46560:46;46573:15;46590;46560:12;:46::i;:::-;46730:18;;46626:137;;;19453:25:1;;;19509:2;19494:18;;19487:34;;;19537:18;;;19530:34;;;;46626:137:0;;;;;;19441:2:1;46626:137:0;;;46497:278;46809:15;;46801:63;;-1:-1:-1;;;;;46809:15:0;;;;46838:21;;46801:63;;;;46838:21;46809:15;46801:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;45100:1772:0:o;47443:781::-;47534:15;47517:14;:32;47635:29;;-1:-1:-1;;;47635:29:0;;-1:-1:-1;;;;;47650:13:0;3104:32:1;47635:29:0;;;3086:51:1;47500:4:0;;;;47635;;:14;;3059:18:1;;47635:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47604:60;;47714:20;47737:77;47798:5;47737:42;47762:16;;47737:20;:24;;:42;;;;:::i;:77::-;47714:100;-1:-1:-1;47912:16:0;;47908:110;;47945:61;47961:13;47984:6;47993:12;47945:15;:61::i;:::-;48093:19;48130:13;48093:51;;48155:4;-1:-1:-1;;;;;48155:9:0;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;48182:12:0;;;;-1:-1:-1;48182:12:0;;-1:-1:-1;48182:12:0;48212:4;48205:11;;;;;47443:781;:::o;21821:98::-;21879:7;21906:5;21910:1;21906;:5;:::i;43982:589::-;44132:16;;;44146:1;44132:16;;;;;;;;44108:21;;44132:16;;;;;;;;;;-1:-1:-1;44132:16:0;44108:40;;44177:4;44159;44164:1;44159:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;44159:23:0;;;-1:-1:-1;;;;;44159:23:0;;;;;44203:15;-1:-1:-1;;;;;44203:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44193:4;44198:1;44193:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;44193:32:0;;;-1:-1:-1;;;;;44193:32:0;;;;;44238:62;44255:4;44270:15;44288:11;44238:8;:62::i;:::-;44339:224;;-1:-1:-1;;;44339:224:0;;-1:-1:-1;;;;;44339:15:0;:66;;;;:224;;44420:11;;44446:1;;44490:4;;44517;;44537:15;;44339:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44037:534;43982:589;:::o;44579:513::-;44727:62;44744:4;44759:15;44777:11;44727:8;:62::i;:::-;44832:15;-1:-1:-1;;;;;44832:31:0;;44871:9;44904:4;44924:11;44950:1;44993;45036:7;1864:6;;-1:-1:-1;;;;;1864:6:0;;1791:87;45036:7;44832:252;;;;;;-1:-1:-1;;;;;;44832:252:0;;;-1:-1:-1;;;;;21175:15:1;;;44832:252:0;;;21157:34:1;21207:18;;;21200:34;;;;21250:18;;;21243:34;;;;21293:18;;;21286:34;21357:15;;;21336:19;;;21329:44;45058:15:0;21389:19:1;;;21382:35;21091:19;;44832:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;44579:513;;:::o;14:127:1:-;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:131;-1:-1:-1;;;;;221:31:1;;211:42;;201:70;;267:1;264;257:12;282:134;350:20;;379:31;350:20;379:31;:::i;421:1121::-;505:6;536:2;579;567:9;558:7;554:23;550:32;547:52;;;595:1;592;585:12;547:52;635:9;622:23;664:18;705:2;697:6;694:14;691:34;;;721:1;718;711:12;691:34;759:6;748:9;744:22;734:32;;804:7;797:4;793:2;789:13;785:27;775:55;;826:1;823;816:12;775:55;862:2;849:16;884:2;880;877:10;874:36;;;890:18;;:::i;:::-;936:2;933:1;929:10;968:2;962:9;1031:2;1027:7;1022:2;1018;1014:11;1010:25;1002:6;998:38;1086:6;1074:10;1071:22;1066:2;1054:10;1051:18;1048:46;1045:72;;;1097:18;;:::i;:::-;1133:2;1126:22;1183:18;;;1217:15;;;;-1:-1:-1;1259:11:1;;;1255:20;;;1287:19;;;1284:39;;;1319:1;1316;1309:12;1284:39;1343:11;;;;1363:148;1379:6;1374:3;1371:15;1363:148;;;1445:23;1464:3;1445:23;:::i;:::-;1433:36;;1396:12;;;;1489;;;;1363:148;;;1530:6;421:1121;-1:-1:-1;;;;;;;;421:1121:1:o;1547:597::-;1659:4;1688:2;1717;1706:9;1699:21;1749:6;1743:13;1792:6;1787:2;1776:9;1772:18;1765:34;1817:1;1827:140;1841:6;1838:1;1835:13;1827:140;;;1936:14;;;1932:23;;1926:30;1902:17;;;1921:2;1898:26;1891:66;1856:10;;1827:140;;;1985:6;1982:1;1979:13;1976:91;;;2055:1;2050:2;2041:6;2030:9;2026:22;2022:31;2015:42;1976:91;-1:-1:-1;2128:2:1;2107:15;-1:-1:-1;;2103:29:1;2088:45;;;;2135:2;2084:54;;1547:597;-1:-1:-1;;;1547:597:1:o;2149:315::-;2217:6;2225;2278:2;2266:9;2257:7;2253:23;2249:32;2246:52;;;2294:1;2291;2284:12;2246:52;2333:9;2320:23;2352:31;2377:5;2352:31;:::i;:::-;2402:5;2454:2;2439:18;;;;2426:32;;-1:-1:-1;;;2149:315:1:o;2661:247::-;2720:6;2773:2;2761:9;2752:7;2748:23;2744:32;2741:52;;;2789:1;2786;2779:12;2741:52;2828:9;2815:23;2847:31;2872:5;2847:31;:::i;3330:180::-;3389:6;3442:2;3430:9;3421:7;3417:23;3413:32;3410:52;;;3458:1;3455;3448:12;3410:52;-1:-1:-1;3481:23:1;;3330:180;-1:-1:-1;3330:180:1:o;3515:456::-;3592:6;3600;3608;3661:2;3649:9;3640:7;3636:23;3632:32;3629:52;;;3677:1;3674;3667:12;3629:52;3716:9;3703:23;3735:31;3760:5;3735:31;:::i;:::-;3785:5;-1:-1:-1;3842:2:1;3827:18;;3814:32;3855:33;3814:32;3855:33;:::i;:::-;3515:456;;3907:7;;-1:-1:-1;;;3961:2:1;3946:18;;;;3933:32;;3515:456::o;4373:388::-;4441:6;4449;4502:2;4490:9;4481:7;4477:23;4473:32;4470:52;;;4518:1;4515;4508:12;4470:52;4557:9;4544:23;4576:31;4601:5;4576:31;:::i;:::-;4626:5;-1:-1:-1;4683:2:1;4668:18;;4655:32;4696:33;4655:32;4696:33;:::i;:::-;4748:7;4738:17;;;4373:388;;;;;:::o;4766:118::-;4852:5;4845:13;4838:21;4831:5;4828:32;4818:60;;4874:1;4871;4864:12;4889:377;4963:6;4971;4979;5032:2;5020:9;5011:7;5007:23;5003:32;5000:52;;;5048:1;5045;5038:12;5000:52;5084:9;5071:23;5061:33;;5141:2;5130:9;5126:18;5113:32;5103:42;;5195:2;5184:9;5180:18;5167:32;5208:28;5230:5;5208:28;:::i;:::-;5255:5;5245:15;;;4889:377;;;;;:::o;5271:382::-;5336:6;5344;5397:2;5385:9;5376:7;5372:23;5368:32;5365:52;;;5413:1;5410;5403:12;5365:52;5452:9;5439:23;5471:31;5496:5;5471:31;:::i;:::-;5521:5;-1:-1:-1;5578:2:1;5563:18;;5550:32;5591:30;5550:32;5591:30;:::i;5658:316::-;5735:6;5743;5751;5804:2;5792:9;5783:7;5779:23;5775:32;5772:52;;;5820:1;5817;5810:12;5772:52;-1:-1:-1;;5843:23:1;;;5913:2;5898:18;;5885:32;;-1:-1:-1;5964:2:1;5949:18;;;5936:32;;5658:316;-1:-1:-1;5658:316:1:o;5979:241::-;6035:6;6088:2;6076:9;6067:7;6063:23;6059:32;6056:52;;;6104:1;6101;6094:12;6056:52;6143:9;6130:23;6162:28;6184:5;6162:28;:::i;6225:356::-;6427:2;6409:21;;;6446:18;;;6439:30;6505:34;6500:2;6485:18;;6478:62;6572:2;6557:18;;6225:356::o;6586:127::-;6647:10;6642:3;6638:20;6635:1;6628:31;6678:4;6675:1;6668:15;6702:4;6699:1;6692:15;6718:127;6779:10;6774:3;6770:20;6767:1;6760:31;6810:4;6807:1;6800:15;6834:4;6831:1;6824:15;6850:135;6889:3;-1:-1:-1;;6910:17:1;;6907:43;;;6930:18;;:::i;:::-;-1:-1:-1;6977:1:1;6966:13;;6850:135::o;6990:380::-;7069:1;7065:12;;;;7112;;;7133:61;;7187:4;7179:6;7175:17;7165:27;;7133:61;7240:2;7232:6;7229:14;7209:18;7206:38;7203:161;;;7286:10;7281:3;7277:20;7274:1;7267:31;7321:4;7318:1;7311:15;7349:4;7346:1;7339:15;7203:161;;6990:380;;;:::o;7375:168::-;7415:7;7481:1;7477;7473:6;7469:14;7466:1;7463:21;7458:1;7451:9;7444:17;7440:45;7437:71;;;7488:18;;:::i;:::-;-1:-1:-1;7528:9:1;;7375:168::o;7548:217::-;7588:1;7614;7604:132;;7658:10;7653:3;7649:20;7646:1;7639:31;7693:4;7690:1;7683:15;7721:4;7718:1;7711:15;7604:132;-1:-1:-1;7750:9:1;;7548:217::o;8595:128::-;8635:3;8666:1;8662:6;8659:1;8656:13;8653:39;;;8672:18;;:::i;:::-;-1:-1:-1;8708:9:1;;8595:128::o;9776:184::-;9846:6;9899:2;9887:9;9878:7;9874:23;9870:32;9867:52;;;9915:1;9912;9905:12;9867:52;-1:-1:-1;9938:16:1;;9776:184;-1:-1:-1;9776:184:1:o;10244:245::-;10311:6;10364:2;10352:9;10343:7;10339:23;10335:32;10332:52;;;10380:1;10377;10370:12;10332:52;10412:9;10406:16;10431:28;10453:5;10431:28;:::i;15756:401::-;15958:2;15940:21;;;15997:2;15977:18;;;15970:30;16036:34;16031:2;16016:18;;16009:62;-1:-1:-1;;;16102:2:1;16087:18;;16080:35;16147:3;16132:19;;15756:401::o;16162:399::-;16364:2;16346:21;;;16403:2;16383:18;;;16376:30;16442:34;16437:2;16422:18;;16415:62;-1:-1:-1;;;16508:2:1;16493:18;;16486:33;16551:3;16536:19;;16162:399::o;18504:125::-;18544:4;18572:1;18569;18566:8;18563:34;;;18577:18;;:::i;:::-;-1:-1:-1;18614:9:1;;18504:125::o;19575:251::-;19645:6;19698:2;19686:9;19677:7;19673:23;19669:32;19666:52;;;19714:1;19711;19704:12;19666:52;19746:9;19740:16;19765:31;19790:5;19765:31;:::i;19831:980::-;20093:4;20141:3;20130:9;20126:19;20172:6;20161:9;20154:25;20198:2;20236:6;20231:2;20220:9;20216:18;20209:34;20279:3;20274:2;20263:9;20259:18;20252:31;20303:6;20338;20332:13;20369:6;20361;20354:22;20407:3;20396:9;20392:19;20385:26;;20446:2;20438:6;20434:15;20420:29;;20467:1;20477:195;20491:6;20488:1;20485:13;20477:195;;;20556:13;;-1:-1:-1;;;;;20552:39:1;20540:52;;20647:15;;;;20612:12;;;;20588:1;20506:9;20477:195;;;-1:-1:-1;;;;;;;20728:32:1;;;;20723:2;20708:18;;20701:60;-1:-1:-1;;;20792:3:1;20777:19;20770:35;20689:3;19831:980;-1:-1:-1;;;19831:980:1:o;21428:306::-;21516:6;21524;21532;21585:2;21573:9;21564:7;21560:23;21556:32;21553:52;;;21601:1;21598;21591:12;21553:52;21630:9;21624:16;21614:26;;21680:2;21669:9;21665:18;21659:25;21649:35;;21724:2;21713:9;21709:18;21703:25;21693:35;;21428:306;;;;;:::o

Swarm Source

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