ETH Price: $3,256.02 (-0.64%)
 

Overview

Max Total Supply

100,000,000 MOODENG

Holders

36

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
1,714,102.324426164263593505 MOODENG

Value
$0.00
0x471373063ff62cdb43fada2179ab69f6e082b560
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:
MooDeng

Compiler Version
v0.8.27+commit.40a35a09

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-09-28
*/

// SPDX-License-Identifier: MIT

/** 

Twitter : https://x.com/Moodeng_ERC_20
Telegram: https://t.me/MOODENG_ERC_20

**/
pragma solidity ^0.8.10;
pragma experimental ABIEncoderV2;

////// lib/openzeppelin-contracts/contracts/utils/Context.sol
// OpenZeppelin Contracts v4.4.0 (utils/Context.sol)

/* pragma solidity ^0.8.0; */

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

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

////// lib/openzeppelin-contracts/contracts/access/Ownable.sol
// OpenZeppelin Contracts v4.4.0 (access/Ownable.sol)

/* pragma solidity ^0.8.0; */

/* import "../utils/Context.sol"; */

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

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

/* pragma solidity ^0.8.0; */

/* import "./IERC20.sol"; */
/* import "./extensions/IERC20Metadata.sol"; */
/* import "../../utils/Context.sol"; */

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

////// lib/openzeppelin-contracts/contracts/utils/math/SafeMath.sol
// OpenZeppelin Contracts v4.4.0 (utils/math/SafeMath.sol)

/* pragma solidity ^0.8.0; */

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

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

    /**
     * @dev Returns the 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 createPair(address tokenA, address tokenB)
        external
        returns (address pair);
}

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

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

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

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0x000000000000000000000000000000000000dEaD);
    address public ETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;

    bool private swapping;
    
    uint256 public genesis_block;

    address public deployerAddress;
    address public lpLocker;

    address private devWallet;

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

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

    uint256 public buyTotalFees;
    uint256 public buydevfee;

    uint256 public sellTotalFees;
    uint256 public selldevfee;

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

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


    event ExcludeFromFees(address indexed account, bool isExcluded);

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


    constructor() ERC20("Moo Deng", "MOODENG") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );


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

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


        uint256 _buydevfee = 25;

        uint256 _selldevfee = 25;

        uint256 totalSupply = 100_000_000 * 1e18;

        maxTransactionAmount =  totalSupply * 30 / 1000; // 2% from total supply maxTransactionAmountTxn
        maxWallet = totalSupply * 30 / 1000; // 2% from total supply maxWallet
        swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% swap wallet

        buydevfee = _buydevfee;
        buyTotalFees = buydevfee;

        selldevfee = _selldevfee;
        sellTotalFees = selldevfee;

        devWallet = address(0x681C341Ede28F238153262e35A21F61f99e678Ea); // set as dev wallet
        deployerAddress = address(0x681C341Ede28F238153262e35A21F61f99e678Ea); 
        lpLocker = address(msg.sender); 

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdEaD), true);
        excludeFromFees(deployerAddress, true); // Deployer Address
        excludeFromFees(lpLocker, true); // LP Locker

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdEaD), true);
        excludeFromMaxTransaction(deployerAddress, true); // Deployer Address
        excludeFromMaxTransaction(lpLocker, true); // LP Locker

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

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
    }

    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount)
        external
        onlyOwner
        returns (bool)
    {
        require(
            newAmount >= (totalSupply() * 1) / 100000,
            "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() * 5) / 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;
    }

    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }

    function updateBuyFees(
        uint256 _devfee
    ) external onlyOwner {
        buydevfee = _devfee;
        buyTotalFees = buydevfee;
        require(buyTotalFees <= 99, "Must keep fees at 10% or less");
    }

    function updateSellFees(
        uint256 _devfee
    ) external onlyOwner {
        selldevfee = _devfee;
        sellTotalFees = selldevfee;
        require(sellTotalFees <= 99, "Must keep fees at 10% or less");
    }

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

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



    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");

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

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

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.
                //when buy
                if (
                    from == uniswapV2Pair &&
                    !_isExcludedMaxTransactionAmount[to]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Buy transfer amount exceeds the maxTransactionAmount."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
                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 &&
            to == uniswapV2Pair &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

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

        uint256 fees = 0;
        uint256 tokensForDev = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (to == uniswapV2Pair && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForDev = (fees * selldevfee) / sellTotalFees;
            }
            // on buy
            else if (from == uniswapV2Pair && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForDev = (fees * buydevfee) / buyTotalFees;
            }

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

            amount -= fees;
        }

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

function swapTokensForETH(uint256 tokenAmount) private {
    // generate the uniswap pair path of token -> weth
    address[] memory path = new address[](2);
    path[0] = address(this);
    path[1] = ETH;

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

    // make the swap
    uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
        tokenAmount,
        0, // accept any amount of WETH
        path,
        devWallet,
        block.timestamp
    );

}


    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        if (contractBalance == 0) {
            return;
        }

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

        swapTokensForETH(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":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"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":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"inputs":[],"name":"ETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"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":"account","type":"address"}],"name":"balanceOf","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":"buydevfee","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":[],"name":"deployerAddress","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":[],"name":"genesis_block","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpLocker","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":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"selldevfee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"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":[],"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":"_devfee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newDevWallet","type":"address"}],"name":"updateDevWallet","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":"_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"},{"stateMutability":"payable","type":"receive"}]

60c060405273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc260065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600e5f6101000a81548160ff0219169083151502179055505f600e60016101000a81548160ff0219169083151502179055506001600e60026101000a81548160ff0219169083151502179055503480156100b2575f5ffd5b506040518060400160405280600881526020017f4d6f6f2044656e670000000000000000000000000000000000000000000000008152506040518060400160405280600781526020017f4d4f4f44454e4700000000000000000000000000000000000000000000000000815250816003908161012e9190610c98565b50806004908161013e9190610c98565b50505061015d6101526105ee60201b60201c565b6105f560201b60201c565b5f737a250d5630b4cf539739df2c5dacb4c659f2488d90506101868160016106b860201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610203573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102279190610dc5565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401610282929190610dff565b6020604051808303815f875af115801561029e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102c29190610dc5565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff168152505061030860a05160016106b860201b60201c565b5f601990505f601990505f6a52b7d2dcc80cd2e400000090506103e8601e826103319190610e53565b61033b9190610ec1565b600b819055506103e8601e826103519190610e53565b61035b9190610ec1565b600d819055506127106005826103719190610e53565b61037b9190610ec1565b600c8190555082601081905550601054600f819055508160128190555060125460118190555073681c341ede28f238153262e35a21f61f99e678ea600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073681c341ede28f238153262e35a21f61f99e678ea60085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503360095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506104a761049a61079860201b60201c565b60016107c060201b60201c565b6104b83060016107c060201b60201c565b6104cb61dead60016107c060201b60201c565b6104fd60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016107c060201b60201c565b61052f60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016107c060201b60201c565b61054d61054061079860201b60201c565b60016106b860201b60201c565b61055e3060016106b860201b60201c565b61057161dead60016106b860201b60201c565b6105a360085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016106b860201b60201c565b6105d560095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016106b860201b60201c565b6105e533826108ee60201b60201c565b5050505061105f565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6106c66105ee60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166106ea61079860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614610740576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073790610f4b565b60405180910390fd5b8060145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6107ce6105ee60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166107f261079860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614610848576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083f90610f4b565b60405180910390fd5b8060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516108e29190610f83565b60405180910390a25050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361095c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095390610fe6565b60405180910390fd5b61096d5f8383610a5160201b60201c565b8060025f82825461097e9190611004565b92505081905550805f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546109d09190611004565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610a349190611046565b60405180910390a3610a4d5f8383610a5660201b60201c565b5050565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680610ad657607f821691505b602082108103610ae957610ae8610a92565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302610b4b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610b10565b610b558683610b10565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f610b99610b94610b8f84610b6d565b610b76565b610b6d565b9050919050565b5f819050919050565b610bb283610b7f565b610bc6610bbe82610ba0565b848454610b1c565b825550505050565b5f5f905090565b610bdd610bce565b610be8818484610ba9565b505050565b5b81811015610c0b57610c005f82610bd5565b600181019050610bee565b5050565b601f821115610c5057610c2181610aef565b610c2a84610b01565b81016020851015610c39578190505b610c4d610c4585610b01565b830182610bed565b50505b505050565b5f82821c905092915050565b5f610c705f1984600802610c55565b1980831691505092915050565b5f610c888383610c61565b9150826002028217905092915050565b610ca182610a5b565b67ffffffffffffffff811115610cba57610cb9610a65565b5b610cc48254610abf565b610ccf828285610c0f565b5f60209050601f831160018114610d00575f8415610cee578287015190505b610cf88582610c7d565b865550610d5f565b601f198416610d0e86610aef565b5f5b82811015610d3557848901518255600182019150602085019450602081019050610d10565b86831015610d525784890151610d4e601f891682610c61565b8355505b6001600288020188555050505b505050505050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610d9482610d6b565b9050919050565b610da481610d8a565b8114610dae575f5ffd5b50565b5f81519050610dbf81610d9b565b92915050565b5f60208284031215610dda57610dd9610d67565b5b5f610de784828501610db1565b91505092915050565b610df981610d8a565b82525050565b5f604082019050610e125f830185610df0565b610e1f6020830184610df0565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610e5d82610b6d565b9150610e6883610b6d565b9250828202610e7681610b6d565b91508282048414831517610e8d57610e8c610e26565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f610ecb82610b6d565b9150610ed683610b6d565b925082610ee657610ee5610e94565b5b828204905092915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f610f35602083610ef1565b9150610f4082610f01565b602082019050919050565b5f6020820190508181035f830152610f6281610f29565b9050919050565b5f8115159050919050565b610f7d81610f69565b82525050565b5f602082019050610f965f830184610f74565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f610fd0601f83610ef1565b9150610fdb82610f9c565b602082019050919050565b5f6020820190508181035f830152610ffd81610fc4565b9050919050565b5f61100e82610b6d565b915061101983610b6d565b925082820190508082111561103157611030610e26565b5b92915050565b61104081610b6d565b82525050565b5f6020820190506110595f830184611037565b92915050565b60805160a051613a146110aa5f395f8181610e0c01528181611ef4015281816121350152818161233401526123e101525f8181610a8a0152818161298d01526129b40152613a145ff3fe608060405260043610610254575f3560e01c806371fc468811610138578063c0246668116100b5578063dd62ed3e11610079578063dd62ed3e1461088f578063e2f45605146108cb578063eba4c333146108f5578063efdee94f1461091d578063f2fde38b14610947578063f8b45b051461096f5761025b565b8063c0246668146107af578063c18bc195146107d7578063c8c8ebe4146107ff578063d257b34f14610829578063d85ba063146108655761025b565b80638da5cb5b116100fc5780638da5cb5b146106cd578063924de9b7146106f757806395d89b411461071f578063a9059cbb14610749578063bbc0c742146107855761025b565b806371fc468814610613578063751039fc1461063b5780637571336a146106655780638322fff21461068d5780638a8c523c146106b75761025b565b806327c8f835116101d15780634fbee193116101955780634fbee1931461050757806365c1bef8146105435780636a486a8e1461056d5780636ddd17131461059757806370a08231146105c1578063715018a6146105fd5761025b565b806327c8f83514610435578063313ce5671461045f578063489ae78d1461048957806349bd5a5e146104b35780634a62bb65146104dd5761025b565b806318160ddd1161021857806318160ddd146103555780631816467f1461037f578063203e727e146103a757806323b872dd146103cf578063274a533c1461040b5761025b565b806303fc20131461025f57806306fdde0314610289578063095ea7b3146102b357806310d5de53146102ef5780631694505e1461032b5761025b565b3661025b57005b5f5ffd5b34801561026a575f5ffd5b50610273610999565b6040516102809190612aa4565b60405180910390f35b348015610294575f5ffd5b5061029d6109be565b6040516102aa9190612b2d565b60405180910390f35b3480156102be575f5ffd5b506102d960048036038101906102d49190612bae565b610a4e565b6040516102e69190612c06565b60405180910390f35b3480156102fa575f5ffd5b5061031560048036038101906103109190612c1f565b610a6b565b6040516103229190612c06565b60405180910390f35b348015610336575f5ffd5b5061033f610a88565b60405161034c9190612ca5565b60405180910390f35b348015610360575f5ffd5b50610369610aac565b6040516103769190612ccd565b60405180910390f35b34801561038a575f5ffd5b506103a560048036038101906103a09190612c1f565b610ab5565b005b3480156103b2575f5ffd5b506103cd60048036038101906103c89190612ce6565b610bef565b005b3480156103da575f5ffd5b506103f560048036038101906103f09190612d11565b610cfe565b6040516104029190612c06565b60405180910390f35b348015610416575f5ffd5b5061041f610df0565b60405161042c9190612ccd565b60405180910390f35b348015610440575f5ffd5b50610449610df6565b6040516104569190612aa4565b60405180910390f35b34801561046a575f5ffd5b50610473610dfc565b6040516104809190612d7c565b60405180910390f35b348015610494575f5ffd5b5061049d610e04565b6040516104aa9190612ccd565b60405180910390f35b3480156104be575f5ffd5b506104c7610e0a565b6040516104d49190612aa4565b60405180910390f35b3480156104e8575f5ffd5b506104f1610e2e565b6040516104fe9190612c06565b60405180910390f35b348015610512575f5ffd5b5061052d60048036038101906105289190612c1f565b610e40565b60405161053a9190612c06565b60405180910390f35b34801561054e575f5ffd5b50610557610e92565b6040516105649190612ccd565b60405180910390f35b348015610578575f5ffd5b50610581610e98565b60405161058e9190612ccd565b60405180910390f35b3480156105a2575f5ffd5b506105ab610e9e565b6040516105b89190612c06565b60405180910390f35b3480156105cc575f5ffd5b506105e760048036038101906105e29190612c1f565b610eb1565b6040516105f49190612ccd565b60405180910390f35b348015610608575f5ffd5b50610611610ef6565b005b34801561061e575f5ffd5b5061063960048036038101906106349190612ce6565b610f7d565b005b348015610646575f5ffd5b5061064f611052565b60405161065c9190612c06565b60405180910390f35b348015610670575f5ffd5b5061068b60048036038101906106869190612dbf565b6110ef565b005b348015610698575f5ffd5b506106a16111c3565b6040516106ae9190612aa4565b60405180910390f35b3480156106c2575f5ffd5b506106cb6111e8565b005b3480156106d8575f5ffd5b506106e161129c565b6040516106ee9190612aa4565b60405180910390f35b348015610702575f5ffd5b5061071d60048036038101906107189190612dfd565b6112c4565b005b34801561072a575f5ffd5b5061073361135d565b6040516107409190612b2d565b60405180910390f35b348015610754575f5ffd5b5061076f600480360381019061076a9190612bae565b6113ed565b60405161077c9190612c06565b60405180910390f35b348015610790575f5ffd5b5061079961140a565b6040516107a69190612c06565b60405180910390f35b3480156107ba575f5ffd5b506107d560048036038101906107d09190612dbf565b61141d565b005b3480156107e2575f5ffd5b506107fd60048036038101906107f89190612ce6565b61153f565b005b34801561080a575f5ffd5b5061081361164e565b6040516108209190612ccd565b60405180910390f35b348015610834575f5ffd5b5061084f600480360381019061084a9190612ce6565b611654565b60405161085c9190612c06565b60405180910390f35b348015610870575f5ffd5b506108796117a8565b6040516108869190612ccd565b60405180910390f35b34801561089a575f5ffd5b506108b560048036038101906108b09190612e28565b6117ae565b6040516108c29190612ccd565b60405180910390f35b3480156108d6575f5ffd5b506108df611830565b6040516108ec9190612ccd565b60405180910390f35b348015610900575f5ffd5b5061091b60048036038101906109169190612ce6565b611836565b005b348015610928575f5ffd5b5061093161190b565b60405161093e9190612aa4565b60405180910390f35b348015610952575f5ffd5b5061096d60048036038101906109689190612c1f565b611930565b005b34801561097a575f5ffd5b50610983611a26565b6040516109909190612ccd565b60405180910390f35b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600380546109cd90612e93565b80601f01602080910402602001604051908101604052809291908181526020018280546109f990612e93565b8015610a445780601f10610a1b57610100808354040283529160200191610a44565b820191905f5260205f20905b815481529060010190602001808311610a2757829003601f168201915b5050505050905090565b5f610a61610a5a611a2c565b8484611a33565b6001905092915050565b6014602052805f5260405f205f915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600254905090565b610abd611a2c565b73ffffffffffffffffffffffffffffffffffffffff16610adb61129c565b73ffffffffffffffffffffffffffffffffffffffff1614610b31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2890612f0d565b60405180910390fd5b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610bf7611a2c565b73ffffffffffffffffffffffffffffffffffffffff16610c1561129c565b73ffffffffffffffffffffffffffffffffffffffff1614610c6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6290612f0d565b60405180910390fd5b670de0b6b3a76400006103e86005610c81610aac565b610c8b9190612f58565b610c959190612fc6565b610c9f9190612fc6565b811015610ce1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd890613066565b60405180910390fd5b670de0b6b3a764000081610cf59190612f58565b600b8190555050565b5f610d0a848484611bf6565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610d51611a2c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610dd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc7906130f4565b60405180910390fd5b610de485610ddc611a2c565b858403611a33565b60019150509392505050565b60075481565b61dead81565b5f6012905090565b60105481565b7f000000000000000000000000000000000000000000000000000000000000000081565b600e5f9054906101000a900460ff1681565b5f60135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60125481565b60115481565b600e60029054906101000a900460ff1681565b5f5f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610efe611a2c565b73ffffffffffffffffffffffffffffffffffffffff16610f1c61129c565b73ffffffffffffffffffffffffffffffffffffffff1614610f72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6990612f0d565b60405180910390fd5b610f7b5f6124c2565b565b610f85611a2c565b73ffffffffffffffffffffffffffffffffffffffff16610fa361129c565b73ffffffffffffffffffffffffffffffffffffffff1614610ff9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff090612f0d565b60405180910390fd5b80601081905550601054600f819055506063600f54111561104f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110469061315c565b60405180910390fd5b50565b5f61105b611a2c565b73ffffffffffffffffffffffffffffffffffffffff1661107961129c565b73ffffffffffffffffffffffffffffffffffffffff16146110cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c690612f0d565b60405180910390fd5b5f600e5f6101000a81548160ff0219169083151502179055506001905090565b6110f7611a2c565b73ffffffffffffffffffffffffffffffffffffffff1661111561129c565b73ffffffffffffffffffffffffffffffffffffffff161461116b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116290612f0d565b60405180910390fd5b8060145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6111f0611a2c565b73ffffffffffffffffffffffffffffffffffffffff1661120e61129c565b73ffffffffffffffffffffffffffffffffffffffff1614611264576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125b90612f0d565b60405180910390fd5b6001600e60016101000a81548160ff0219169083151502179055506001600e60026101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6112cc611a2c565b73ffffffffffffffffffffffffffffffffffffffff166112ea61129c565b73ffffffffffffffffffffffffffffffffffffffff1614611340576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133790612f0d565b60405180910390fd5b80600e60026101000a81548160ff02191690831515021790555050565b60606004805461136c90612e93565b80601f016020809104026020016040519081016040528092919081815260200182805461139890612e93565b80156113e35780601f106113ba576101008083540402835291602001916113e3565b820191905f5260205f20905b8154815290600101906020018083116113c657829003601f168201915b5050505050905090565b5f6114006113f9611a2c565b8484611bf6565b6001905092915050565b600e60019054906101000a900460ff1681565b611425611a2c565b73ffffffffffffffffffffffffffffffffffffffff1661144361129c565b73ffffffffffffffffffffffffffffffffffffffff1614611499576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149090612f0d565b60405180910390fd5b8060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516115339190612c06565b60405180910390a25050565b611547611a2c565b73ffffffffffffffffffffffffffffffffffffffff1661156561129c565b73ffffffffffffffffffffffffffffffffffffffff16146115bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b290612f0d565b60405180910390fd5b670de0b6b3a76400006103e860056115d1610aac565b6115db9190612f58565b6115e59190612fc6565b6115ef9190612fc6565b811015611631576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611628906131ea565b60405180910390fd5b670de0b6b3a7640000816116459190612f58565b600d8190555050565b600b5481565b5f61165d611a2c565b73ffffffffffffffffffffffffffffffffffffffff1661167b61129c565b73ffffffffffffffffffffffffffffffffffffffff16146116d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c890612f0d565b60405180910390fd5b620186a060016116df610aac565b6116e99190612f58565b6116f39190612fc6565b821015611735576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172c90613278565b60405180910390fd5b6103e86005611742610aac565b61174c9190612f58565b6117569190612fc6565b821115611798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178f90613306565b60405180910390fd5b81600c8190555060019050919050565b600f5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600c5481565b61183e611a2c565b73ffffffffffffffffffffffffffffffffffffffff1661185c61129c565b73ffffffffffffffffffffffffffffffffffffffff16146118b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a990612f0d565b60405180910390fd5b8060128190555060125460118190555060636011541115611908576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ff9061315c565b60405180910390fd5b50565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611938611a2c565b73ffffffffffffffffffffffffffffffffffffffff1661195661129c565b73ffffffffffffffffffffffffffffffffffffffff16146119ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a390612f0d565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611a1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1190613394565b60405180910390fd5b611a23816124c2565b50565b600d5481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611aa1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9890613422565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b06906134b0565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611be99190612ccd565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611c64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5b9061353e565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611cd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc9906135cc565b60405180910390fd5b5f8103611ce957611ce483835f612585565b6124bd565b600e5f9054906101000a900460ff16156120e557611d0561129c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611d735750611d4361129c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611dab57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611de5575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611dfe5750600660149054906101000a900460ff16155b156120e457600e60019054906101000a900460ff16611ef25760135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680611eb2575060135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b611ef1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee890613634565b60405180910390fd5b5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611f94575060145f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561203b57600b54811115611fde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd5906136c2565b60405180910390fd5b600d54611fea83610eb1565b82611ff591906136e0565b1115612036576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202d9061375d565b60405180910390fd5b6120e3565b60145f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166120e257600d5461209583610eb1565b826120a091906136e0565b11156120e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d89061375d565b60405180910390fd5b5b5b5b5b5f6120ef30610eb1565b90505f600c5482101590508080156121135750600e60029054906101000a900460ff165b801561212c5750600660149054906101000a900460ff16155b801561218357507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80156121d6575060135f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612229575060135f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561226c576001600660146101000a81548160ff0219169083151502179055506122516127fa565b5f600660146101000a81548160ff0219169083151502179055505b5f600660149054906101000a900460ff1615905060135f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168061231b575060135f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612324575f90505b5f5f90505f5f905082156124ac577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614801561238e57505f601154115b156123df576123bb60646123ad6011548961284890919063ffffffff16565b61285d90919063ffffffff16565b9150601154601254836123ce9190612f58565b6123d89190612fc6565b9050612489565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614801561243b57505f600f54115b1561248857612468606461245a600f548961284890919063ffffffff16565b61285d90919063ffffffff16565b9150600f546010548361247b9190612f58565b6124859190612fc6565b90505b5b5f82111561249d5761249c883084612585565b5b81866124a9919061377b565b95505b6124b7888888612585565b50505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036125f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ea9061353e565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612661576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612658906135cc565b60405180910390fd5b61266c838383612872565b5f5f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156126ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e69061381e565b60405180910390fd5b8181035f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461277d91906136e0565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516127e19190612ccd565b60405180910390a36127f4848484612877565b50505050565b5f61280430610eb1565b90505f81036128135750612846565b6014600c546128229190612f58565b81111561283b576014600c546128389190612f58565b90505b6128448161287c565b505b565b5f81836128559190612f58565b905092915050565b5f818361286a9190612fc6565b905092915050565b505050565b505050565b5f600267ffffffffffffffff8111156128985761289761383c565b5b6040519080825280602002602001820160405280156128c65781602001602082028036833780820191505090505b50905030815f815181106128dd576128dc613869565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160018151811061294d5761294c613869565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506129b2307f000000000000000000000000000000000000000000000000000000000000000084611a33565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635c11d795835f84600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401612a34959493929190613986565b5f604051808303815f87803b158015612a4b575f5ffd5b505af1158015612a5d573d5f5f3e3d5ffd5b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612a8e82612a65565b9050919050565b612a9e81612a84565b82525050565b5f602082019050612ab75f830184612a95565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f612aff82612abd565b612b098185612ac7565b9350612b19818560208601612ad7565b612b2281612ae5565b840191505092915050565b5f6020820190508181035f830152612b458184612af5565b905092915050565b5f5ffd5b612b5a81612a84565b8114612b64575f5ffd5b50565b5f81359050612b7581612b51565b92915050565b5f819050919050565b612b8d81612b7b565b8114612b97575f5ffd5b50565b5f81359050612ba881612b84565b92915050565b5f5f60408385031215612bc457612bc3612b4d565b5b5f612bd185828601612b67565b9250506020612be285828601612b9a565b9150509250929050565b5f8115159050919050565b612c0081612bec565b82525050565b5f602082019050612c195f830184612bf7565b92915050565b5f60208284031215612c3457612c33612b4d565b5b5f612c4184828501612b67565b91505092915050565b5f819050919050565b5f612c6d612c68612c6384612a65565b612c4a565b612a65565b9050919050565b5f612c7e82612c53565b9050919050565b5f612c8f82612c74565b9050919050565b612c9f81612c85565b82525050565b5f602082019050612cb85f830184612c96565b92915050565b612cc781612b7b565b82525050565b5f602082019050612ce05f830184612cbe565b92915050565b5f60208284031215612cfb57612cfa612b4d565b5b5f612d0884828501612b9a565b91505092915050565b5f5f5f60608486031215612d2857612d27612b4d565b5b5f612d3586828701612b67565b9350506020612d4686828701612b67565b9250506040612d5786828701612b9a565b9150509250925092565b5f60ff82169050919050565b612d7681612d61565b82525050565b5f602082019050612d8f5f830184612d6d565b92915050565b612d9e81612bec565b8114612da8575f5ffd5b50565b5f81359050612db981612d95565b92915050565b5f5f60408385031215612dd557612dd4612b4d565b5b5f612de285828601612b67565b9250506020612df385828601612dab565b9150509250929050565b5f60208284031215612e1257612e11612b4d565b5b5f612e1f84828501612dab565b91505092915050565b5f5f60408385031215612e3e57612e3d612b4d565b5b5f612e4b85828601612b67565b9250506020612e5c85828601612b67565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612eaa57607f821691505b602082108103612ebd57612ebc612e66565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f612ef7602083612ac7565b9150612f0282612ec3565b602082019050919050565b5f6020820190508181035f830152612f2481612eeb565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612f6282612b7b565b9150612f6d83612b7b565b9250828202612f7b81612b7b565b91508282048414831517612f9257612f91612f2b565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612fd082612b7b565b9150612fdb83612b7b565b925082612feb57612fea612f99565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74205f8201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b5f613050602f83612ac7565b915061305b82612ff6565b604082019050919050565b5f6020820190508181035f83015261307d81613044565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f6130de602883612ac7565b91506130e982613084565b604082019050919050565b5f6020820190508181035f83015261310b816130d2565b9050919050565b7f4d757374206b656570206665657320617420313025206f72206c6573730000005f82015250565b5f613146601d83612ac7565b915061315182613112565b602082019050919050565b5f6020820190508181035f8301526131738161313a565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b5f6131d4602483612ac7565b91506131df8261317a565b604082019050919050565b5f6020820190508181035f830152613201816131c8565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f613262603583612ac7565b915061326d82613208565b604082019050919050565b5f6020820190508181035f83015261328f81613256565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f6132f0603483612ac7565b91506132fb82613296565b604082019050919050565b5f6020820190508181035f83015261331d816132e4565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61337e602683612ac7565b915061338982613324565b604082019050919050565b5f6020820190508181035f8301526133ab81613372565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f61340c602483612ac7565b9150613417826133b2565b604082019050919050565b5f6020820190508181035f83015261343981613400565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f61349a602283612ac7565b91506134a582613440565b604082019050919050565b5f6020820190508181035f8301526134c78161348e565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613528602583612ac7565b9150613533826134ce565b604082019050919050565b5f6020820190508181035f8301526135558161351c565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6135b6602383612ac7565b91506135c18261355c565b604082019050919050565b5f6020820190508181035f8301526135e3816135aa565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f61361e601683612ac7565b9150613629826135ea565b602082019050919050565b5f6020820190508181035f83015261364b81613612565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f6136ac603583612ac7565b91506136b782613652565b604082019050919050565b5f6020820190508181035f8301526136d9816136a0565b9050919050565b5f6136ea82612b7b565b91506136f583612b7b565b925082820190508082111561370d5761370c612f2b565b5b92915050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f613747601383612ac7565b915061375282613713565b602082019050919050565b5f6020820190508181035f8301526137748161373b565b9050919050565b5f61378582612b7b565b915061379083612b7b565b92508282039050818111156137a8576137a7612f2b565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f613808602683612ac7565b9150613813826137ae565b604082019050919050565b5f6020820190508181035f830152613835816137fc565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b5f6138b96138b46138af84613896565b612c4a565b612b7b565b9050919050565b6138c98161389f565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61390181612a84565b82525050565b5f61391283836138f8565b60208301905092915050565b5f602082019050919050565b5f613934826138cf565b61393e81856138d9565b9350613949836138e9565b805f5b838110156139795781516139608882613907565b975061396b8361391e565b92505060018101905061394c565b5085935050505092915050565b5f60a0820190506139995f830188612cbe565b6139a660208301876138c0565b81810360408301526139b8818661392a565b90506139c76060830185612a95565b6139d46080830184612cbe565b969550505050505056fea2646970667358221220e6adf07dc1a7bc0835c4d2a9debe66856680320f5f352fae37c48d35e977379d64736f6c634300081b0033

Deployed Bytecode

0x608060405260043610610254575f3560e01c806371fc468811610138578063c0246668116100b5578063dd62ed3e11610079578063dd62ed3e1461088f578063e2f45605146108cb578063eba4c333146108f5578063efdee94f1461091d578063f2fde38b14610947578063f8b45b051461096f5761025b565b8063c0246668146107af578063c18bc195146107d7578063c8c8ebe4146107ff578063d257b34f14610829578063d85ba063146108655761025b565b80638da5cb5b116100fc5780638da5cb5b146106cd578063924de9b7146106f757806395d89b411461071f578063a9059cbb14610749578063bbc0c742146107855761025b565b806371fc468814610613578063751039fc1461063b5780637571336a146106655780638322fff21461068d5780638a8c523c146106b75761025b565b806327c8f835116101d15780634fbee193116101955780634fbee1931461050757806365c1bef8146105435780636a486a8e1461056d5780636ddd17131461059757806370a08231146105c1578063715018a6146105fd5761025b565b806327c8f83514610435578063313ce5671461045f578063489ae78d1461048957806349bd5a5e146104b35780634a62bb65146104dd5761025b565b806318160ddd1161021857806318160ddd146103555780631816467f1461037f578063203e727e146103a757806323b872dd146103cf578063274a533c1461040b5761025b565b806303fc20131461025f57806306fdde0314610289578063095ea7b3146102b357806310d5de53146102ef5780631694505e1461032b5761025b565b3661025b57005b5f5ffd5b34801561026a575f5ffd5b50610273610999565b6040516102809190612aa4565b60405180910390f35b348015610294575f5ffd5b5061029d6109be565b6040516102aa9190612b2d565b60405180910390f35b3480156102be575f5ffd5b506102d960048036038101906102d49190612bae565b610a4e565b6040516102e69190612c06565b60405180910390f35b3480156102fa575f5ffd5b5061031560048036038101906103109190612c1f565b610a6b565b6040516103229190612c06565b60405180910390f35b348015610336575f5ffd5b5061033f610a88565b60405161034c9190612ca5565b60405180910390f35b348015610360575f5ffd5b50610369610aac565b6040516103769190612ccd565b60405180910390f35b34801561038a575f5ffd5b506103a560048036038101906103a09190612c1f565b610ab5565b005b3480156103b2575f5ffd5b506103cd60048036038101906103c89190612ce6565b610bef565b005b3480156103da575f5ffd5b506103f560048036038101906103f09190612d11565b610cfe565b6040516104029190612c06565b60405180910390f35b348015610416575f5ffd5b5061041f610df0565b60405161042c9190612ccd565b60405180910390f35b348015610440575f5ffd5b50610449610df6565b6040516104569190612aa4565b60405180910390f35b34801561046a575f5ffd5b50610473610dfc565b6040516104809190612d7c565b60405180910390f35b348015610494575f5ffd5b5061049d610e04565b6040516104aa9190612ccd565b60405180910390f35b3480156104be575f5ffd5b506104c7610e0a565b6040516104d49190612aa4565b60405180910390f35b3480156104e8575f5ffd5b506104f1610e2e565b6040516104fe9190612c06565b60405180910390f35b348015610512575f5ffd5b5061052d60048036038101906105289190612c1f565b610e40565b60405161053a9190612c06565b60405180910390f35b34801561054e575f5ffd5b50610557610e92565b6040516105649190612ccd565b60405180910390f35b348015610578575f5ffd5b50610581610e98565b60405161058e9190612ccd565b60405180910390f35b3480156105a2575f5ffd5b506105ab610e9e565b6040516105b89190612c06565b60405180910390f35b3480156105cc575f5ffd5b506105e760048036038101906105e29190612c1f565b610eb1565b6040516105f49190612ccd565b60405180910390f35b348015610608575f5ffd5b50610611610ef6565b005b34801561061e575f5ffd5b5061063960048036038101906106349190612ce6565b610f7d565b005b348015610646575f5ffd5b5061064f611052565b60405161065c9190612c06565b60405180910390f35b348015610670575f5ffd5b5061068b60048036038101906106869190612dbf565b6110ef565b005b348015610698575f5ffd5b506106a16111c3565b6040516106ae9190612aa4565b60405180910390f35b3480156106c2575f5ffd5b506106cb6111e8565b005b3480156106d8575f5ffd5b506106e161129c565b6040516106ee9190612aa4565b60405180910390f35b348015610702575f5ffd5b5061071d60048036038101906107189190612dfd565b6112c4565b005b34801561072a575f5ffd5b5061073361135d565b6040516107409190612b2d565b60405180910390f35b348015610754575f5ffd5b5061076f600480360381019061076a9190612bae565b6113ed565b60405161077c9190612c06565b60405180910390f35b348015610790575f5ffd5b5061079961140a565b6040516107a69190612c06565b60405180910390f35b3480156107ba575f5ffd5b506107d560048036038101906107d09190612dbf565b61141d565b005b3480156107e2575f5ffd5b506107fd60048036038101906107f89190612ce6565b61153f565b005b34801561080a575f5ffd5b5061081361164e565b6040516108209190612ccd565b60405180910390f35b348015610834575f5ffd5b5061084f600480360381019061084a9190612ce6565b611654565b60405161085c9190612c06565b60405180910390f35b348015610870575f5ffd5b506108796117a8565b6040516108869190612ccd565b60405180910390f35b34801561089a575f5ffd5b506108b560048036038101906108b09190612e28565b6117ae565b6040516108c29190612ccd565b60405180910390f35b3480156108d6575f5ffd5b506108df611830565b6040516108ec9190612ccd565b60405180910390f35b348015610900575f5ffd5b5061091b60048036038101906109169190612ce6565b611836565b005b348015610928575f5ffd5b5061093161190b565b60405161093e9190612aa4565b60405180910390f35b348015610952575f5ffd5b5061096d60048036038101906109689190612c1f565b611930565b005b34801561097a575f5ffd5b50610983611a26565b6040516109909190612ccd565b60405180910390f35b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600380546109cd90612e93565b80601f01602080910402602001604051908101604052809291908181526020018280546109f990612e93565b8015610a445780601f10610a1b57610100808354040283529160200191610a44565b820191905f5260205f20905b815481529060010190602001808311610a2757829003601f168201915b5050505050905090565b5f610a61610a5a611a2c565b8484611a33565b6001905092915050565b6014602052805f5260405f205f915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600254905090565b610abd611a2c565b73ffffffffffffffffffffffffffffffffffffffff16610adb61129c565b73ffffffffffffffffffffffffffffffffffffffff1614610b31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2890612f0d565b60405180910390fd5b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610bf7611a2c565b73ffffffffffffffffffffffffffffffffffffffff16610c1561129c565b73ffffffffffffffffffffffffffffffffffffffff1614610c6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6290612f0d565b60405180910390fd5b670de0b6b3a76400006103e86005610c81610aac565b610c8b9190612f58565b610c959190612fc6565b610c9f9190612fc6565b811015610ce1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd890613066565b60405180910390fd5b670de0b6b3a764000081610cf59190612f58565b600b8190555050565b5f610d0a848484611bf6565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610d51611a2c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610dd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc7906130f4565b60405180910390fd5b610de485610ddc611a2c565b858403611a33565b60019150509392505050565b60075481565b61dead81565b5f6012905090565b60105481565b7f000000000000000000000000ea826b9c2962d9bcccae5a16e975bab52d2b9f4781565b600e5f9054906101000a900460ff1681565b5f60135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60125481565b60115481565b600e60029054906101000a900460ff1681565b5f5f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610efe611a2c565b73ffffffffffffffffffffffffffffffffffffffff16610f1c61129c565b73ffffffffffffffffffffffffffffffffffffffff1614610f72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6990612f0d565b60405180910390fd5b610f7b5f6124c2565b565b610f85611a2c565b73ffffffffffffffffffffffffffffffffffffffff16610fa361129c565b73ffffffffffffffffffffffffffffffffffffffff1614610ff9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff090612f0d565b60405180910390fd5b80601081905550601054600f819055506063600f54111561104f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110469061315c565b60405180910390fd5b50565b5f61105b611a2c565b73ffffffffffffffffffffffffffffffffffffffff1661107961129c565b73ffffffffffffffffffffffffffffffffffffffff16146110cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c690612f0d565b60405180910390fd5b5f600e5f6101000a81548160ff0219169083151502179055506001905090565b6110f7611a2c565b73ffffffffffffffffffffffffffffffffffffffff1661111561129c565b73ffffffffffffffffffffffffffffffffffffffff161461116b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116290612f0d565b60405180910390fd5b8060145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6111f0611a2c565b73ffffffffffffffffffffffffffffffffffffffff1661120e61129c565b73ffffffffffffffffffffffffffffffffffffffff1614611264576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125b90612f0d565b60405180910390fd5b6001600e60016101000a81548160ff0219169083151502179055506001600e60026101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6112cc611a2c565b73ffffffffffffffffffffffffffffffffffffffff166112ea61129c565b73ffffffffffffffffffffffffffffffffffffffff1614611340576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133790612f0d565b60405180910390fd5b80600e60026101000a81548160ff02191690831515021790555050565b60606004805461136c90612e93565b80601f016020809104026020016040519081016040528092919081815260200182805461139890612e93565b80156113e35780601f106113ba576101008083540402835291602001916113e3565b820191905f5260205f20905b8154815290600101906020018083116113c657829003601f168201915b5050505050905090565b5f6114006113f9611a2c565b8484611bf6565b6001905092915050565b600e60019054906101000a900460ff1681565b611425611a2c565b73ffffffffffffffffffffffffffffffffffffffff1661144361129c565b73ffffffffffffffffffffffffffffffffffffffff1614611499576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149090612f0d565b60405180910390fd5b8060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516115339190612c06565b60405180910390a25050565b611547611a2c565b73ffffffffffffffffffffffffffffffffffffffff1661156561129c565b73ffffffffffffffffffffffffffffffffffffffff16146115bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b290612f0d565b60405180910390fd5b670de0b6b3a76400006103e860056115d1610aac565b6115db9190612f58565b6115e59190612fc6565b6115ef9190612fc6565b811015611631576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611628906131ea565b60405180910390fd5b670de0b6b3a7640000816116459190612f58565b600d8190555050565b600b5481565b5f61165d611a2c565b73ffffffffffffffffffffffffffffffffffffffff1661167b61129c565b73ffffffffffffffffffffffffffffffffffffffff16146116d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c890612f0d565b60405180910390fd5b620186a060016116df610aac565b6116e99190612f58565b6116f39190612fc6565b821015611735576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172c90613278565b60405180910390fd5b6103e86005611742610aac565b61174c9190612f58565b6117569190612fc6565b821115611798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178f90613306565b60405180910390fd5b81600c8190555060019050919050565b600f5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600c5481565b61183e611a2c565b73ffffffffffffffffffffffffffffffffffffffff1661185c61129c565b73ffffffffffffffffffffffffffffffffffffffff16146118b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a990612f0d565b60405180910390fd5b8060128190555060125460118190555060636011541115611908576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ff9061315c565b60405180910390fd5b50565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611938611a2c565b73ffffffffffffffffffffffffffffffffffffffff1661195661129c565b73ffffffffffffffffffffffffffffffffffffffff16146119ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a390612f0d565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611a1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1190613394565b60405180910390fd5b611a23816124c2565b50565b600d5481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611aa1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9890613422565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b06906134b0565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611be99190612ccd565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611c64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5b9061353e565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611cd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc9906135cc565b60405180910390fd5b5f8103611ce957611ce483835f612585565b6124bd565b600e5f9054906101000a900460ff16156120e557611d0561129c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611d735750611d4361129c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611dab57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611de5575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611dfe5750600660149054906101000a900460ff16155b156120e457600e60019054906101000a900460ff16611ef25760135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680611eb2575060135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b611ef1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee890613634565b60405180910390fd5b5b7f000000000000000000000000ea826b9c2962d9bcccae5a16e975bab52d2b9f4773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611f94575060145f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561203b57600b54811115611fde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd5906136c2565b60405180910390fd5b600d54611fea83610eb1565b82611ff591906136e0565b1115612036576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202d9061375d565b60405180910390fd5b6120e3565b60145f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166120e257600d5461209583610eb1565b826120a091906136e0565b11156120e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d89061375d565b60405180910390fd5b5b5b5b5b5f6120ef30610eb1565b90505f600c5482101590508080156121135750600e60029054906101000a900460ff165b801561212c5750600660149054906101000a900460ff16155b801561218357507f000000000000000000000000ea826b9c2962d9bcccae5a16e975bab52d2b9f4773ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80156121d6575060135f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612229575060135f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561226c576001600660146101000a81548160ff0219169083151502179055506122516127fa565b5f600660146101000a81548160ff0219169083151502179055505b5f600660149054906101000a900460ff1615905060135f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168061231b575060135f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612324575f90505b5f5f90505f5f905082156124ac577f000000000000000000000000ea826b9c2962d9bcccae5a16e975bab52d2b9f4773ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614801561238e57505f601154115b156123df576123bb60646123ad6011548961284890919063ffffffff16565b61285d90919063ffffffff16565b9150601154601254836123ce9190612f58565b6123d89190612fc6565b9050612489565b7f000000000000000000000000ea826b9c2962d9bcccae5a16e975bab52d2b9f4773ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614801561243b57505f600f54115b1561248857612468606461245a600f548961284890919063ffffffff16565b61285d90919063ffffffff16565b9150600f546010548361247b9190612f58565b6124859190612fc6565b90505b5b5f82111561249d5761249c883084612585565b5b81866124a9919061377b565b95505b6124b7888888612585565b50505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036125f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ea9061353e565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612661576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612658906135cc565b60405180910390fd5b61266c838383612872565b5f5f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156126ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e69061381e565b60405180910390fd5b8181035f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461277d91906136e0565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516127e19190612ccd565b60405180910390a36127f4848484612877565b50505050565b5f61280430610eb1565b90505f81036128135750612846565b6014600c546128229190612f58565b81111561283b576014600c546128389190612f58565b90505b6128448161287c565b505b565b5f81836128559190612f58565b905092915050565b5f818361286a9190612fc6565b905092915050565b505050565b505050565b5f600267ffffffffffffffff8111156128985761289761383c565b5b6040519080825280602002602001820160405280156128c65781602001602082028036833780820191505090505b50905030815f815181106128dd576128dc613869565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160018151811061294d5761294c613869565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506129b2307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611a33565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff16635c11d795835f84600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401612a34959493929190613986565b5f604051808303815f87803b158015612a4b575f5ffd5b505af1158015612a5d573d5f5f3e3d5ffd5b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612a8e82612a65565b9050919050565b612a9e81612a84565b82525050565b5f602082019050612ab75f830184612a95565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f612aff82612abd565b612b098185612ac7565b9350612b19818560208601612ad7565b612b2281612ae5565b840191505092915050565b5f6020820190508181035f830152612b458184612af5565b905092915050565b5f5ffd5b612b5a81612a84565b8114612b64575f5ffd5b50565b5f81359050612b7581612b51565b92915050565b5f819050919050565b612b8d81612b7b565b8114612b97575f5ffd5b50565b5f81359050612ba881612b84565b92915050565b5f5f60408385031215612bc457612bc3612b4d565b5b5f612bd185828601612b67565b9250506020612be285828601612b9a565b9150509250929050565b5f8115159050919050565b612c0081612bec565b82525050565b5f602082019050612c195f830184612bf7565b92915050565b5f60208284031215612c3457612c33612b4d565b5b5f612c4184828501612b67565b91505092915050565b5f819050919050565b5f612c6d612c68612c6384612a65565b612c4a565b612a65565b9050919050565b5f612c7e82612c53565b9050919050565b5f612c8f82612c74565b9050919050565b612c9f81612c85565b82525050565b5f602082019050612cb85f830184612c96565b92915050565b612cc781612b7b565b82525050565b5f602082019050612ce05f830184612cbe565b92915050565b5f60208284031215612cfb57612cfa612b4d565b5b5f612d0884828501612b9a565b91505092915050565b5f5f5f60608486031215612d2857612d27612b4d565b5b5f612d3586828701612b67565b9350506020612d4686828701612b67565b9250506040612d5786828701612b9a565b9150509250925092565b5f60ff82169050919050565b612d7681612d61565b82525050565b5f602082019050612d8f5f830184612d6d565b92915050565b612d9e81612bec565b8114612da8575f5ffd5b50565b5f81359050612db981612d95565b92915050565b5f5f60408385031215612dd557612dd4612b4d565b5b5f612de285828601612b67565b9250506020612df385828601612dab565b9150509250929050565b5f60208284031215612e1257612e11612b4d565b5b5f612e1f84828501612dab565b91505092915050565b5f5f60408385031215612e3e57612e3d612b4d565b5b5f612e4b85828601612b67565b9250506020612e5c85828601612b67565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612eaa57607f821691505b602082108103612ebd57612ebc612e66565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f612ef7602083612ac7565b9150612f0282612ec3565b602082019050919050565b5f6020820190508181035f830152612f2481612eeb565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612f6282612b7b565b9150612f6d83612b7b565b9250828202612f7b81612b7b565b91508282048414831517612f9257612f91612f2b565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612fd082612b7b565b9150612fdb83612b7b565b925082612feb57612fea612f99565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74205f8201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b5f613050602f83612ac7565b915061305b82612ff6565b604082019050919050565b5f6020820190508181035f83015261307d81613044565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f6130de602883612ac7565b91506130e982613084565b604082019050919050565b5f6020820190508181035f83015261310b816130d2565b9050919050565b7f4d757374206b656570206665657320617420313025206f72206c6573730000005f82015250565b5f613146601d83612ac7565b915061315182613112565b602082019050919050565b5f6020820190508181035f8301526131738161313a565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b5f6131d4602483612ac7565b91506131df8261317a565b604082019050919050565b5f6020820190508181035f830152613201816131c8565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f613262603583612ac7565b915061326d82613208565b604082019050919050565b5f6020820190508181035f83015261328f81613256565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f6132f0603483612ac7565b91506132fb82613296565b604082019050919050565b5f6020820190508181035f83015261331d816132e4565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61337e602683612ac7565b915061338982613324565b604082019050919050565b5f6020820190508181035f8301526133ab81613372565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f61340c602483612ac7565b9150613417826133b2565b604082019050919050565b5f6020820190508181035f83015261343981613400565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f61349a602283612ac7565b91506134a582613440565b604082019050919050565b5f6020820190508181035f8301526134c78161348e565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613528602583612ac7565b9150613533826134ce565b604082019050919050565b5f6020820190508181035f8301526135558161351c565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6135b6602383612ac7565b91506135c18261355c565b604082019050919050565b5f6020820190508181035f8301526135e3816135aa565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f61361e601683612ac7565b9150613629826135ea565b602082019050919050565b5f6020820190508181035f83015261364b81613612565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f6136ac603583612ac7565b91506136b782613652565b604082019050919050565b5f6020820190508181035f8301526136d9816136a0565b9050919050565b5f6136ea82612b7b565b91506136f583612b7b565b925082820190508082111561370d5761370c612f2b565b5b92915050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f613747601383612ac7565b915061375282613713565b602082019050919050565b5f6020820190508181035f8301526137748161373b565b9050919050565b5f61378582612b7b565b915061379083612b7b565b92508282039050818111156137a8576137a7612f2b565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f613808602683612ac7565b9150613813826137ae565b604082019050919050565b5f6020820190508181035f830152613835816137fc565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b5f6138b96138b46138af84613896565b612c4a565b612b7b565b9050919050565b6138c98161389f565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61390181612a84565b82525050565b5f61391283836138f8565b60208301905092915050565b5f602082019050919050565b5f613934826138cf565b61393e81856138d9565b9350613949836138e9565b805f5b838110156139795781516139608882613907565b975061396b8361391e565b92505060018101905061394c565b5085935050505092915050565b5f60a0820190506139995f830188612cbe565b6139a660208301876138c0565b81810360408301526139b8818661392a565b90506139c76060830185612a95565b6139d46080830184612cbe565b969550505050505056fea2646970667358221220e6adf07dc1a7bc0835c4d2a9debe66856680320f5f352fae37c48d35e977379d64736f6c634300081b0033

Deployed Bytecode Sourcemap

24771:10475:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25227:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9627:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11794:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25803:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24848:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10747:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30666:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29099:275;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12445:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25153:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24951:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10589:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25561:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24906:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25408:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30867:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25629:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25594:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25488:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10918:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2862:103;;;;;;;;;;;;;:::i;:::-;;30017:219;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28403:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29646:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25047:63;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28239:112;;;;;;;;;;;;;:::i;:::-;;2211:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29909:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9846:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11258:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25448:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30476:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29382:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25293:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28594:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25527:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11496:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25335:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30244:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25190:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3120:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25375:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25227:23;;;;;;;;;;;;;:::o;9627:100::-;9681:13;9714:5;9707:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9627:100;:::o;11794:169::-;11877:4;11894:39;11903:12;:10;:12::i;:::-;11917:7;11926:6;11894:8;:39::i;:::-;11951:4;11944:11;;11794:169;;;;:::o;25803:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;24848:51::-;;;:::o;10747:108::-;10808:7;10835:12;;10828:19;;10747:108;:::o;30666:189::-;2442:12;:10;:12::i;:::-;2431:23;;:7;:5;:7::i;:::-;:23;;;2423:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30802:9:::1;;;;;;;;;;;30771:41;;30788:12;30771:41;;;;;;;;;;;;30835:12;30823:9;;:24;;;;;;;;;;;;;;;;;;30666:189:::0;:::o;29099:275::-;2442:12;:10;:12::i;:::-;2431:23;;:7;:5;:7::i;:::-;:23;;;2423:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29236:4:::1;29228;29223:1;29207:13;:11;:13::i;:::-;:17;;;;:::i;:::-;29206:26;;;;:::i;:::-;29205:35;;;;:::i;:::-;29195:6;:45;;29173:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;29359:6;29349;:17;;;;:::i;:::-;29326:20;:40;;;;29099:275:::0;:::o;12445:492::-;12585:4;12602:36;12612:6;12620:9;12631:6;12602:9;:36::i;:::-;12651:24;12678:11;:19;12690:6;12678:19;;;;;;;;;;;;;;;:33;12698:12;:10;:12::i;:::-;12678:33;;;;;;;;;;;;;;;;12651:60;;12750:6;12730:16;:26;;12722:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;12837:57;12846:6;12854:12;:10;:12::i;:::-;12887:6;12868:16;:25;12837:8;:57::i;:::-;12925:4;12918:11;;;12445:492;;;;;:::o;25153:28::-;;;;:::o;24951:89::-;24997:42;24951:89;:::o;10589:93::-;10647:5;10672:2;10665:9;;10589:93;:::o;25561:24::-;;;;:::o;24906:38::-;;;:::o;25408:33::-;;;;;;;;;;;;;:::o;30867:126::-;30933:4;30957:19;:28;30977:7;30957:28;;;;;;;;;;;;;;;;;;;;;;;;;30950:35;;30867:126;;;:::o;25629:25::-;;;;:::o;25594:28::-;;;;:::o;25488:30::-;;;;;;;;;;;;;:::o;10918:127::-;10992:7;11019:9;:18;11029:7;11019:18;;;;;;;;;;;;;;;;11012:25;;10918:127;;;:::o;2862:103::-;2442:12;:10;:12::i;:::-;2431:23;;:7;:5;:7::i;:::-;:23;;;2423:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2927:30:::1;2954:1;2927:18;:30::i;:::-;2862:103::o:0;30017:219::-;2442:12;:10;:12::i;:::-;2431:23;;:7;:5;:7::i;:::-;:23;;;2423:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30115:7:::1;30103:9;:19;;;;30148:9;;30133:12;:24;;;;30192:2;30176:12;;:18;;30168:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;30017:219:::0;:::o;28403:121::-;28455:4;2442:12;:10;:12::i;:::-;2431:23;;:7;:5;:7::i;:::-;:23;;;2423:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28489:5:::1;28472:14;;:22;;;;;;;;;;;;;;;;;;28512:4;28505:11;;28403:121:::0;:::o;29646:167::-;2442:12;:10;:12::i;:::-;2431:23;;:7;:5;:7::i;:::-;:23;;;2423:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29801:4:::1;29759:31;:39;29791:6;29759:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;29646:167:::0;;:::o;25047:63::-;;;;;;;;;;;;;:::o;28239:112::-;2442:12;:10;:12::i;:::-;2431:23;;:7;:5;:7::i;:::-;:23;;;2423:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28310:4:::1;28294:13;;:20;;;;;;;;;;;;;;;;;;28339:4;28325:11;;:18;;;;;;;;;;;;;;;;;;28239:112::o:0;2211:87::-;2257:7;2284:6;;;;;;;;;;;2277:13;;2211:87;:::o;29909:100::-;2442:12;:10;:12::i;:::-;2431:23;;:7;:5;:7::i;:::-;:23;;;2423:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29994:7:::1;29980:11;;:21;;;;;;;;;;;;;;;;;;29909:100:::0;:::o;9846:104::-;9902:13;9935:7;9928:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9846:104;:::o;11258:175::-;11344:4;11361:42;11371:12;:10;:12::i;:::-;11385:9;11396:6;11361:9;:42::i;:::-;11421:4;11414:11;;11258:175;;;;:::o;25448:33::-;;;;;;;;;;;;;:::o;30476:182::-;2442:12;:10;:12::i;:::-;2431:23;;:7;:5;:7::i;:::-;:23;;;2423:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30592:8:::1;30561:19;:28;30581:7;30561:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;30632:7;30616:34;;;30641:8;30616:34;;;;;;:::i;:::-;;;;;;;;30476:182:::0;;:::o;29382:256::-;2442:12;:10;:12::i;:::-;2431:23;;:7;:5;:7::i;:::-;:23;;;2423:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29522:4:::1;29514;29509:1;29493:13;:11;:13::i;:::-;:17;;;;:::i;:::-;29492:26;;;;:::i;:::-;29491:35;;;;:::i;:::-;29481:6;:45;;29459:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;29623:6;29613;:17;;;;:::i;:::-;29601:9;:29;;;;29382:256:::0;:::o;25293:35::-;;;;:::o;28594:497::-;28702:4;2442:12;:10;:12::i;:::-;2431:23;;:7;:5;:7::i;:::-;:23;;;2423:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28781:6:::1;28776:1;28760:13;:11;:13::i;:::-;:17;;;;:::i;:::-;28759:28;;;;:::i;:::-;28746:9;:41;;28724:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;28936:4;28931:1;28915:13;:11;:13::i;:::-;:17;;;;:::i;:::-;28914:26;;;;:::i;:::-;28901:9;:39;;28879:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;29052:9;29031:18;:30;;;;29079:4;29072:11;;28594:497:::0;;;:::o;25527:27::-;;;;:::o;11496:151::-;11585:7;11612:11;:18;11624:5;11612:18;;;;;;;;;;;;;;;:27;11631:7;11612:27;;;;;;;;;;;;;;;;11605:34;;11496:151;;;;:::o;25335:33::-;;;;:::o;30244:224::-;2442:12;:10;:12::i;:::-;2431:23;;:7;:5;:7::i;:::-;:23;;;2423:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30344:7:::1;30331:10;:20;;;;30378:10;;30362:13;:26;;;;30424:2;30407:13;;:19;;30399:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;30244:224:::0;:::o;25190:30::-;;;;;;;;;;;;;:::o;3120:201::-;2442:12;:10;:12::i;:::-;2431:23;;:7;:5;:7::i;:::-;:23;;;2423:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3229:1:::1;3209:22;;:8;:22;;::::0;3201:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3285:28;3304:8;3285:18;:28::i;:::-;3120:201:::0;:::o;25375:24::-;;;;:::o;884:98::-;937:7;964:10;957:17;;884:98;:::o;15286:380::-;15439:1;15422:19;;:5;:19;;;15414:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15520:1;15501:21;;:7;:21;;;15493:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15604:6;15574:11;:18;15586:5;15574:18;;;;;;;;;;;;;;;:27;15593:7;15574:27;;;;;;;;;;;;;;;:36;;;;15642:7;15626:32;;15635:5;15626:32;;;15651:6;15626:32;;;;;;:::i;:::-;;;;;;;;15286:380;;;:::o;31001:3371::-;31149:1;31133:18;;:4;:18;;;31125:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31226:1;31212:16;;:2;:16;;;31204:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;31295:1;31285:6;:11;31281:93;;31313:28;31329:4;31335:2;31339:1;31313:15;:28::i;:::-;31356:7;;31281:93;31390:14;;;;;;;;;;;31386:1466;;;31451:7;:5;:7::i;:::-;31443:15;;:4;:15;;;;:49;;;;;31485:7;:5;:7::i;:::-;31479:13;;:2;:13;;;;31443:49;:86;;;;;31527:1;31513:16;;:2;:16;;;;31443:86;:164;;;;;31564:42;31550:57;;:2;:57;;;;31443:164;:194;;;;;31629:8;;;;;;;;;;;31628:9;31443:194;31421:1420;;;31677:13;;;;;;;;;;;31672:223;;31749:19;:25;31769:4;31749:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;31778:19;:23;31798:2;31778:23;;;;;;;;;;;;;;;;;;;;;;;;;31749:52;31715:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;31672:223;32109:13;32101:21;;:4;:21;;;:82;;;;;32148:31;:35;32180:2;32148:35;;;;;;;;;;;;;;;;;;;;;;;;;32147:36;32101:82;32075:751;;;32270:20;;32260:6;:30;;32226:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;32478:9;;32461:13;32471:2;32461:9;:13::i;:::-;32452:6;:22;;;;:::i;:::-;:35;;32418:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;32075:751;;;32606:31;:35;32638:2;32606:35;;;;;;;;;;;;;;;;;;;;;;;;;32601:225;;32726:9;;32709:13;32719:2;32709:9;:13::i;:::-;32700:6;:22;;;;:::i;:::-;:35;;32666:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;32601:225;32075:751;31421:1420;31386:1466;32864:28;32895:24;32913:4;32895:9;:24::i;:::-;32864:55;;32932:12;32971:18;;32947:20;:42;;32932:57;;33020:7;:35;;;;;33044:11;;;;;;;;;;;33020:35;:61;;;;;33073:8;;;;;;;;;;;33072:9;33020:61;:97;;;;;33104:13;33098:19;;:2;:19;;;33020:97;:140;;;;;33135:19;:25;33155:4;33135:25;;;;;;;;;;;;;;;;;;;;;;;;;33134:26;33020:140;:181;;;;;33178:19;:23;33198:2;33178:23;;;;;;;;;;;;;;;;;;;;;;;;;33177:24;33020:181;33002:313;;;33239:4;33228:8;;:15;;;;;;;;;;;;;;;;;;33260:10;:8;:10::i;:::-;33298:5;33287:8;;:16;;;;;;;;;;;;;;;;;;33002:313;33327:12;33343:8;;;;;;;;;;;33342:9;33327:24;;33453:19;:25;33473:4;33453:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;33482:19;:23;33502:2;33482:23;;;;;;;;;;;;;;;;;;;;;;;;;33453:52;33449:100;;;33532:5;33522:15;;33449:100;33561:12;33576:1;33561:16;;33588:20;33611:1;33588:24;;33701:7;33697:622;;;33759:13;33753:19;;:2;:19;;;:40;;;;;33792:1;33776:13;;:17;33753:40;33749:422;;;33821:34;33851:3;33821:25;33832:13;;33821:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;33814:41;;33911:13;;33897:10;;33890:4;:17;;;;:::i;:::-;33889:35;;;;:::i;:::-;33874:50;;33749:422;;;33994:13;33986:21;;:4;:21;;;:41;;;;;34026:1;34011:12;;:16;33986:41;33982:189;;;34055:33;34084:3;34055:24;34066:12;;34055:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;34048:40;;34143:12;;34130:9;;34123:4;:16;;;;:::i;:::-;34122:33;;;;:::i;:::-;34107:48;;33982:189;33749:422;34197:1;34191:4;:7;34187:90;;;34219:42;34235:4;34249;34256;34219:15;:42::i;:::-;34187:90;34303:4;34293:14;;;;;:::i;:::-;;;33697:622;34331:33;34347:4;34353:2;34357:6;34331:15;:33::i;:::-;31114:3258;;;;;31001:3371;;;;:::o;3481:191::-;3555:16;3574:6;;;;;;;;;;;3555:25;;3600:8;3591:6;;:17;;;;;;;;;;;;;;;;;;3655:8;3624:40;;3645:8;3624:40;;;;;;;;;;;;3544:128;3481:191;:::o;13427:733::-;13585:1;13567:20;;:6;:20;;;13559:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;13669:1;13648:23;;:9;:23;;;13640:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13724:47;13745:6;13753:9;13764:6;13724:20;:47::i;:::-;13784:21;13808:9;:17;13818:6;13808:17;;;;;;;;;;;;;;;;13784:41;;13861:6;13844:13;:23;;13836:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;13982:6;13966:13;:22;13946:9;:17;13956:6;13946:17;;;;;;;;;;;;;;;:42;;;;14034:6;14010:9;:20;14020:9;14010:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;14075:9;14058:35;;14067:6;14058:35;;;14086:6;14058:35;;;;;;:::i;:::-;;;;;;;;14106:46;14126:6;14134:9;14145:6;14106:19;:46::i;:::-;13548:612;13427:733;;;:::o;34902:339::-;34941:23;34967:24;34985:4;34967:9;:24::i;:::-;34941:50;;35025:1;35006:15;:20;35002:59;;35043:7;;;35002:59;35116:2;35095:18;;:23;;;;:::i;:::-;35077:15;:41;35073:115;;;35174:2;35153:18;;:23;;;;:::i;:::-;35135:41;;35073:115;35200:33;35217:15;35200:16;:33::i;:::-;34930:311;34902:339;:::o;20739:98::-;20797:7;20828:1;20824;:5;;;;:::i;:::-;20817:12;;20739:98;;;;:::o;21138:::-;21196:7;21227:1;21223;:5;;;;:::i;:::-;21216:12;;21138:98;;;;:::o;16266:125::-;;;;:::o;16995:124::-;;;;:::o;34376:516::-;34494:21;34532:1;34518:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34494:40;;34559:4;34541;34546:1;34541:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;34581:3;;;;;;;;;;;34571:4;34576:1;34571:7;;;;;;;;:::i;:::-;;;;;;;:13;;;;;;;;;;;34593:62;34610:4;34625:15;34643:11;34593:8;:62::i;:::-;34686:15;:69;;;34766:11;34788:1;34829:4;34844:9;;;;;;;;;;;34864:15;34686:200;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34431:461;34376:516;:::o;7:126:1:-;44:7;84:42;77:5;73:54;62:65;;7:126;;;:::o;139:96::-;176:7;205:24;223:5;205:24;:::i;:::-;194:35;;139:96;;;:::o;241:118::-;328:24;346:5;328:24;:::i;:::-;323:3;316:37;241:118;;:::o;365:222::-;458:4;496:2;485:9;481:18;473:26;;509:71;577:1;566:9;562:17;553:6;509:71;:::i;:::-;365:222;;;;:::o;593:99::-;645:6;679:5;673:12;663:22;;593:99;;;:::o;698:169::-;782:11;816:6;811:3;804:19;856:4;851:3;847:14;832:29;;698:169;;;;:::o;873:139::-;962:6;957:3;952;946:23;1003:1;994:6;989:3;985:16;978:27;873:139;;;:::o;1018:102::-;1059:6;1110:2;1106:7;1101:2;1094:5;1090:14;1086:28;1076:38;;1018:102;;;:::o;1126:377::-;1214:3;1242:39;1275:5;1242:39;:::i;:::-;1297:71;1361:6;1356:3;1297:71;:::i;:::-;1290:78;;1377:65;1435:6;1430:3;1423:4;1416:5;1412:16;1377:65;:::i;:::-;1467:29;1489:6;1467:29;:::i;:::-;1462:3;1458:39;1451:46;;1218:285;1126:377;;;;:::o;1509:313::-;1622:4;1660:2;1649:9;1645:18;1637:26;;1709:9;1703:4;1699:20;1695:1;1684:9;1680:17;1673:47;1737:78;1810:4;1801:6;1737:78;:::i;:::-;1729:86;;1509:313;;;;:::o;1909:117::-;2018:1;2015;2008:12;2155:122;2228:24;2246:5;2228:24;:::i;:::-;2221:5;2218:35;2208:63;;2267:1;2264;2257:12;2208:63;2155:122;:::o;2283:139::-;2329:5;2367:6;2354:20;2345:29;;2383:33;2410:5;2383:33;:::i;:::-;2283:139;;;;:::o;2428:77::-;2465:7;2494:5;2483:16;;2428:77;;;:::o;2511:122::-;2584:24;2602:5;2584:24;:::i;:::-;2577:5;2574:35;2564:63;;2623:1;2620;2613:12;2564:63;2511:122;:::o;2639:139::-;2685:5;2723:6;2710:20;2701:29;;2739:33;2766:5;2739:33;:::i;:::-;2639:139;;;;:::o;2784:474::-;2852:6;2860;2909:2;2897:9;2888:7;2884:23;2880:32;2877:119;;;2915:79;;:::i;:::-;2877:119;3035:1;3060:53;3105:7;3096:6;3085:9;3081:22;3060:53;:::i;:::-;3050:63;;3006:117;3162:2;3188:53;3233:7;3224:6;3213:9;3209:22;3188:53;:::i;:::-;3178:63;;3133:118;2784:474;;;;;:::o;3264:90::-;3298:7;3341:5;3334:13;3327:21;3316:32;;3264:90;;;:::o;3360:109::-;3441:21;3456:5;3441:21;:::i;:::-;3436:3;3429:34;3360:109;;:::o;3475:210::-;3562:4;3600:2;3589:9;3585:18;3577:26;;3613:65;3675:1;3664:9;3660:17;3651:6;3613:65;:::i;:::-;3475:210;;;;:::o;3691:329::-;3750:6;3799:2;3787:9;3778:7;3774:23;3770:32;3767:119;;;3805:79;;:::i;:::-;3767:119;3925:1;3950:53;3995:7;3986:6;3975:9;3971:22;3950:53;:::i;:::-;3940:63;;3896:117;3691:329;;;;:::o;4026:60::-;4054:3;4075:5;4068:12;;4026:60;;;:::o;4092:142::-;4142:9;4175:53;4193:34;4202:24;4220:5;4202:24;:::i;:::-;4193:34;:::i;:::-;4175:53;:::i;:::-;4162:66;;4092:142;;;:::o;4240:126::-;4290:9;4323:37;4354:5;4323:37;:::i;:::-;4310:50;;4240:126;;;:::o;4372:152::-;4448:9;4481:37;4512:5;4481:37;:::i;:::-;4468:50;;4372:152;;;:::o;4530:183::-;4643:63;4700:5;4643:63;:::i;:::-;4638:3;4631:76;4530:183;;:::o;4719:274::-;4838:4;4876:2;4865:9;4861:18;4853:26;;4889:97;4983:1;4972:9;4968:17;4959:6;4889:97;:::i;:::-;4719:274;;;;:::o;4999:118::-;5086:24;5104:5;5086:24;:::i;:::-;5081:3;5074:37;4999:118;;:::o;5123:222::-;5216:4;5254:2;5243:9;5239:18;5231:26;;5267:71;5335:1;5324:9;5320:17;5311:6;5267:71;:::i;:::-;5123:222;;;;:::o;5351:329::-;5410:6;5459:2;5447:9;5438:7;5434:23;5430:32;5427:119;;;5465:79;;:::i;:::-;5427:119;5585:1;5610:53;5655:7;5646:6;5635:9;5631:22;5610:53;:::i;:::-;5600:63;;5556:117;5351:329;;;;:::o;5686:619::-;5763:6;5771;5779;5828:2;5816:9;5807:7;5803:23;5799:32;5796:119;;;5834:79;;:::i;:::-;5796:119;5954:1;5979:53;6024:7;6015:6;6004:9;6000:22;5979:53;:::i;:::-;5969:63;;5925:117;6081:2;6107:53;6152:7;6143:6;6132:9;6128:22;6107:53;:::i;:::-;6097:63;;6052:118;6209:2;6235:53;6280:7;6271:6;6260:9;6256:22;6235:53;:::i;:::-;6225:63;;6180:118;5686:619;;;;;:::o;6311:86::-;6346:7;6386:4;6379:5;6375:16;6364:27;;6311:86;;;:::o;6403:112::-;6486:22;6502:5;6486:22;:::i;:::-;6481:3;6474:35;6403:112;;:::o;6521:214::-;6610:4;6648:2;6637:9;6633:18;6625:26;;6661:67;6725:1;6714:9;6710:17;6701:6;6661:67;:::i;:::-;6521:214;;;;:::o;6741:116::-;6811:21;6826:5;6811:21;:::i;:::-;6804:5;6801:32;6791:60;;6847:1;6844;6837:12;6791:60;6741:116;:::o;6863:133::-;6906:5;6944:6;6931:20;6922:29;;6960:30;6984:5;6960:30;:::i;:::-;6863:133;;;;:::o;7002:468::-;7067:6;7075;7124:2;7112:9;7103:7;7099:23;7095:32;7092:119;;;7130:79;;:::i;:::-;7092:119;7250:1;7275:53;7320:7;7311:6;7300:9;7296:22;7275:53;:::i;:::-;7265:63;;7221:117;7377:2;7403:50;7445:7;7436:6;7425:9;7421:22;7403:50;:::i;:::-;7393:60;;7348:115;7002:468;;;;;:::o;7476:323::-;7532:6;7581:2;7569:9;7560:7;7556:23;7552:32;7549:119;;;7587:79;;:::i;:::-;7549:119;7707:1;7732:50;7774:7;7765:6;7754:9;7750:22;7732:50;:::i;:::-;7722:60;;7678:114;7476:323;;;;:::o;7805:474::-;7873:6;7881;7930:2;7918:9;7909:7;7905:23;7901:32;7898:119;;;7936:79;;:::i;:::-;7898:119;8056:1;8081:53;8126:7;8117:6;8106:9;8102:22;8081:53;:::i;:::-;8071:63;;8027:117;8183:2;8209:53;8254:7;8245:6;8234:9;8230:22;8209:53;:::i;:::-;8199:63;;8154:118;7805:474;;;;;:::o;8285:180::-;8333:77;8330:1;8323:88;8430:4;8427:1;8420:15;8454:4;8451:1;8444:15;8471:320;8515:6;8552:1;8546:4;8542:12;8532:22;;8599:1;8593:4;8589:12;8620:18;8610:81;;8676:4;8668:6;8664:17;8654:27;;8610:81;8738:2;8730:6;8727:14;8707:18;8704:38;8701:84;;8757:18;;:::i;:::-;8701:84;8522:269;8471:320;;;:::o;8797:182::-;8937:34;8933:1;8925:6;8921:14;8914:58;8797:182;:::o;8985:366::-;9127:3;9148:67;9212:2;9207:3;9148:67;:::i;:::-;9141:74;;9224:93;9313:3;9224:93;:::i;:::-;9342:2;9337:3;9333:12;9326:19;;8985:366;;;:::o;9357:419::-;9523:4;9561:2;9550:9;9546:18;9538:26;;9610:9;9604:4;9600:20;9596:1;9585:9;9581:17;9574:47;9638:131;9764:4;9638:131;:::i;:::-;9630:139;;9357:419;;;:::o;9782:180::-;9830:77;9827:1;9820:88;9927:4;9924:1;9917:15;9951:4;9948:1;9941:15;9968:410;10008:7;10031:20;10049:1;10031:20;:::i;:::-;10026:25;;10065:20;10083:1;10065:20;:::i;:::-;10060:25;;10120:1;10117;10113:9;10142:30;10160:11;10142:30;:::i;:::-;10131:41;;10321:1;10312:7;10308:15;10305:1;10302:22;10282:1;10275:9;10255:83;10232:139;;10351:18;;:::i;:::-;10232:139;10016:362;9968:410;;;;:::o;10384:180::-;10432:77;10429:1;10422:88;10529:4;10526:1;10519:15;10553:4;10550:1;10543:15;10570:185;10610:1;10627:20;10645:1;10627:20;:::i;:::-;10622:25;;10661:20;10679:1;10661:20;:::i;:::-;10656:25;;10700:1;10690:35;;10705:18;;:::i;:::-;10690:35;10747:1;10744;10740:9;10735:14;;10570:185;;;;:::o;10761:234::-;10901:34;10897:1;10889:6;10885:14;10878:58;10970:17;10965:2;10957:6;10953:15;10946:42;10761:234;:::o;11001:366::-;11143:3;11164:67;11228:2;11223:3;11164:67;:::i;:::-;11157:74;;11240:93;11329:3;11240:93;:::i;:::-;11358:2;11353:3;11349:12;11342:19;;11001:366;;;:::o;11373:419::-;11539:4;11577:2;11566:9;11562:18;11554:26;;11626:9;11620:4;11616:20;11612:1;11601:9;11597:17;11590:47;11654:131;11780:4;11654:131;:::i;:::-;11646:139;;11373:419;;;:::o;11798:227::-;11938:34;11934:1;11926:6;11922:14;11915:58;12007:10;12002:2;11994:6;11990:15;11983:35;11798:227;:::o;12031:366::-;12173:3;12194:67;12258:2;12253:3;12194:67;:::i;:::-;12187:74;;12270:93;12359:3;12270:93;:::i;:::-;12388:2;12383:3;12379:12;12372:19;;12031:366;;;:::o;12403:419::-;12569:4;12607:2;12596:9;12592:18;12584:26;;12656:9;12650:4;12646:20;12642:1;12631:9;12627:17;12620:47;12684:131;12810:4;12684:131;:::i;:::-;12676:139;;12403:419;;;:::o;12828:179::-;12968:31;12964:1;12956:6;12952:14;12945:55;12828:179;:::o;13013:366::-;13155:3;13176:67;13240:2;13235:3;13176:67;:::i;:::-;13169:74;;13252:93;13341:3;13252:93;:::i;:::-;13370:2;13365:3;13361:12;13354:19;;13013:366;;;:::o;13385:419::-;13551:4;13589:2;13578:9;13574:18;13566:26;;13638:9;13632:4;13628:20;13624:1;13613:9;13609:17;13602:47;13666:131;13792:4;13666:131;:::i;:::-;13658:139;;13385:419;;;:::o;13810:223::-;13950:34;13946:1;13938:6;13934:14;13927:58;14019:6;14014:2;14006:6;14002:15;13995:31;13810:223;:::o;14039:366::-;14181:3;14202:67;14266:2;14261:3;14202:67;:::i;:::-;14195:74;;14278:93;14367:3;14278:93;:::i;:::-;14396:2;14391:3;14387:12;14380:19;;14039:366;;;:::o;14411:419::-;14577:4;14615:2;14604:9;14600:18;14592:26;;14664:9;14658:4;14654:20;14650:1;14639:9;14635:17;14628:47;14692:131;14818:4;14692:131;:::i;:::-;14684:139;;14411:419;;;:::o;14836:240::-;14976:34;14972:1;14964:6;14960:14;14953:58;15045:23;15040:2;15032:6;15028:15;15021:48;14836:240;:::o;15082:366::-;15224:3;15245:67;15309:2;15304:3;15245:67;:::i;:::-;15238:74;;15321:93;15410:3;15321:93;:::i;:::-;15439:2;15434:3;15430:12;15423:19;;15082:366;;;:::o;15454:419::-;15620:4;15658:2;15647:9;15643:18;15635:26;;15707:9;15701:4;15697:20;15693:1;15682:9;15678:17;15671:47;15735:131;15861:4;15735:131;:::i;:::-;15727:139;;15454:419;;;:::o;15879:239::-;16019:34;16015:1;16007:6;16003:14;15996:58;16088:22;16083:2;16075:6;16071:15;16064:47;15879:239;:::o;16124:366::-;16266:3;16287:67;16351:2;16346:3;16287:67;:::i;:::-;16280:74;;16363:93;16452:3;16363:93;:::i;:::-;16481:2;16476:3;16472:12;16465:19;;16124:366;;;:::o;16496:419::-;16662:4;16700:2;16689:9;16685:18;16677:26;;16749:9;16743:4;16739:20;16735:1;16724:9;16720:17;16713:47;16777:131;16903:4;16777:131;:::i;:::-;16769:139;;16496:419;;;:::o;16921:225::-;17061:34;17057:1;17049:6;17045:14;17038:58;17130:8;17125:2;17117:6;17113:15;17106:33;16921:225;:::o;17152:366::-;17294:3;17315:67;17379:2;17374:3;17315:67;:::i;:::-;17308:74;;17391:93;17480:3;17391:93;:::i;:::-;17509:2;17504:3;17500:12;17493:19;;17152:366;;;:::o;17524:419::-;17690:4;17728:2;17717:9;17713:18;17705:26;;17777:9;17771:4;17767:20;17763:1;17752:9;17748:17;17741:47;17805:131;17931:4;17805:131;:::i;:::-;17797:139;;17524:419;;;:::o;17949:223::-;18089:34;18085:1;18077:6;18073:14;18066:58;18158:6;18153:2;18145:6;18141:15;18134:31;17949:223;:::o;18178:366::-;18320:3;18341:67;18405:2;18400:3;18341:67;:::i;:::-;18334:74;;18417:93;18506:3;18417:93;:::i;:::-;18535:2;18530:3;18526:12;18519:19;;18178:366;;;:::o;18550:419::-;18716:4;18754:2;18743:9;18739:18;18731:26;;18803:9;18797:4;18793:20;18789:1;18778:9;18774:17;18767:47;18831:131;18957:4;18831:131;:::i;:::-;18823:139;;18550:419;;;:::o;18975:221::-;19115:34;19111:1;19103:6;19099:14;19092:58;19184:4;19179:2;19171:6;19167:15;19160:29;18975:221;:::o;19202:366::-;19344:3;19365:67;19429:2;19424:3;19365:67;:::i;:::-;19358:74;;19441:93;19530:3;19441:93;:::i;:::-;19559:2;19554:3;19550:12;19543:19;;19202:366;;;:::o;19574:419::-;19740:4;19778:2;19767:9;19763:18;19755:26;;19827:9;19821:4;19817:20;19813:1;19802:9;19798:17;19791:47;19855:131;19981:4;19855:131;:::i;:::-;19847:139;;19574:419;;;:::o;19999:224::-;20139:34;20135:1;20127:6;20123:14;20116:58;20208:7;20203:2;20195:6;20191:15;20184:32;19999:224;:::o;20229:366::-;20371:3;20392:67;20456:2;20451:3;20392:67;:::i;:::-;20385:74;;20468:93;20557:3;20468:93;:::i;:::-;20586:2;20581:3;20577:12;20570:19;;20229:366;;;:::o;20601:419::-;20767:4;20805:2;20794:9;20790:18;20782:26;;20854:9;20848:4;20844:20;20840:1;20829:9;20825:17;20818:47;20882:131;21008:4;20882:131;:::i;:::-;20874:139;;20601:419;;;:::o;21026:222::-;21166:34;21162:1;21154:6;21150:14;21143:58;21235:5;21230:2;21222:6;21218:15;21211:30;21026:222;:::o;21254:366::-;21396:3;21417:67;21481:2;21476:3;21417:67;:::i;:::-;21410:74;;21493:93;21582:3;21493:93;:::i;:::-;21611:2;21606:3;21602:12;21595:19;;21254:366;;;:::o;21626:419::-;21792:4;21830:2;21819:9;21815:18;21807:26;;21879:9;21873:4;21869:20;21865:1;21854:9;21850:17;21843:47;21907:131;22033:4;21907:131;:::i;:::-;21899:139;;21626:419;;;:::o;22051:172::-;22191:24;22187:1;22179:6;22175:14;22168:48;22051:172;:::o;22229:366::-;22371:3;22392:67;22456:2;22451:3;22392:67;:::i;:::-;22385:74;;22468:93;22557:3;22468:93;:::i;:::-;22586:2;22581:3;22577:12;22570:19;;22229:366;;;:::o;22601:419::-;22767:4;22805:2;22794:9;22790:18;22782:26;;22854:9;22848:4;22844:20;22840:1;22829:9;22825:17;22818:47;22882:131;23008:4;22882:131;:::i;:::-;22874:139;;22601:419;;;:::o;23026:240::-;23166:34;23162:1;23154:6;23150:14;23143:58;23235:23;23230:2;23222:6;23218:15;23211:48;23026:240;:::o;23272:366::-;23414:3;23435:67;23499:2;23494:3;23435:67;:::i;:::-;23428:74;;23511:93;23600:3;23511:93;:::i;:::-;23629:2;23624:3;23620:12;23613:19;;23272:366;;;:::o;23644:419::-;23810:4;23848:2;23837:9;23833:18;23825:26;;23897:9;23891:4;23887:20;23883:1;23872:9;23868:17;23861:47;23925:131;24051:4;23925:131;:::i;:::-;23917:139;;23644:419;;;:::o;24069:191::-;24109:3;24128:20;24146:1;24128:20;:::i;:::-;24123:25;;24162:20;24180:1;24162:20;:::i;:::-;24157:25;;24205:1;24202;24198:9;24191:16;;24226:3;24223:1;24220:10;24217:36;;;24233:18;;:::i;:::-;24217:36;24069:191;;;;:::o;24266:169::-;24406:21;24402:1;24394:6;24390:14;24383:45;24266:169;:::o;24441:366::-;24583:3;24604:67;24668:2;24663:3;24604:67;:::i;:::-;24597:74;;24680:93;24769:3;24680:93;:::i;:::-;24798:2;24793:3;24789:12;24782:19;;24441:366;;;:::o;24813:419::-;24979:4;25017:2;25006:9;25002:18;24994:26;;25066:9;25060:4;25056:20;25052:1;25041:9;25037:17;25030:47;25094:131;25220:4;25094:131;:::i;:::-;25086:139;;24813:419;;;:::o;25238:194::-;25278:4;25298:20;25316:1;25298:20;:::i;:::-;25293:25;;25332:20;25350:1;25332:20;:::i;:::-;25327:25;;25376:1;25373;25369:9;25361:17;;25400:1;25394:4;25391:11;25388:37;;;25405:18;;:::i;:::-;25388:37;25238:194;;;;:::o;25438:225::-;25578:34;25574:1;25566:6;25562:14;25555:58;25647:8;25642:2;25634:6;25630:15;25623:33;25438:225;:::o;25669:366::-;25811:3;25832:67;25896:2;25891:3;25832:67;:::i;:::-;25825:74;;25908:93;25997:3;25908:93;:::i;:::-;26026:2;26021:3;26017:12;26010:19;;25669:366;;;:::o;26041:419::-;26207:4;26245:2;26234:9;26230:18;26222:26;;26294:9;26288:4;26284:20;26280:1;26269:9;26265:17;26258:47;26322:131;26448:4;26322:131;:::i;:::-;26314:139;;26041:419;;;:::o;26466:180::-;26514:77;26511:1;26504:88;26611:4;26608:1;26601:15;26635:4;26632:1;26625:15;26652:180;26700:77;26697:1;26690:88;26797:4;26794:1;26787:15;26821:4;26818:1;26811:15;26838:85;26883:7;26912:5;26901:16;;26838:85;;;:::o;26929:158::-;26987:9;27020:61;27038:42;27047:32;27073:5;27047:32;:::i;:::-;27038:42;:::i;:::-;27020:61;:::i;:::-;27007:74;;26929:158;;;:::o;27093:147::-;27188:45;27227:5;27188:45;:::i;:::-;27183:3;27176:58;27093:147;;:::o;27246:114::-;27313:6;27347:5;27341:12;27331:22;;27246:114;;;:::o;27366:184::-;27465:11;27499:6;27494:3;27487:19;27539:4;27534:3;27530:14;27515:29;;27366:184;;;;:::o;27556:132::-;27623:4;27646:3;27638:11;;27676:4;27671:3;27667:14;27659:22;;27556:132;;;:::o;27694:108::-;27771:24;27789:5;27771:24;:::i;:::-;27766:3;27759:37;27694:108;;:::o;27808:179::-;27877:10;27898:46;27940:3;27932:6;27898:46;:::i;:::-;27976:4;27971:3;27967:14;27953:28;;27808:179;;;;:::o;27993:113::-;28063:4;28095;28090:3;28086:14;28078:22;;27993:113;;;:::o;28142:732::-;28261:3;28290:54;28338:5;28290:54;:::i;:::-;28360:86;28439:6;28434:3;28360:86;:::i;:::-;28353:93;;28470:56;28520:5;28470:56;:::i;:::-;28549:7;28580:1;28565:284;28590:6;28587:1;28584:13;28565:284;;;28666:6;28660:13;28693:63;28752:3;28737:13;28693:63;:::i;:::-;28686:70;;28779:60;28832:6;28779:60;:::i;:::-;28769:70;;28625:224;28612:1;28609;28605:9;28600:14;;28565:284;;;28569:14;28865:3;28858:10;;28266:608;;;28142:732;;;;:::o;28880:831::-;29143:4;29181:3;29170:9;29166:19;29158:27;;29195:71;29263:1;29252:9;29248:17;29239:6;29195:71;:::i;:::-;29276:80;29352:2;29341:9;29337:18;29328:6;29276:80;:::i;:::-;29403:9;29397:4;29393:20;29388:2;29377:9;29373:18;29366:48;29431:108;29534:4;29525:6;29431:108;:::i;:::-;29423:116;;29549:72;29617:2;29606:9;29602:18;29593:6;29549:72;:::i;:::-;29631:73;29699:3;29688:9;29684:19;29675:6;29631:73;:::i;:::-;28880:831;;;;;;;;:::o

Swarm Source

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