ETH Price: $2,507.33 (-4.83%)

Token

Pepe Token (PEPE)
 

Overview

Max Total Supply

420,690,000,000,000 PEPE

Holders

218

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.000338030143398396 PEPE

Value
$0.00
0x93f17f275b7aac067cc2e8d649cd83cd15f06706
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:
Pepe

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-05-31
*/

/*
 * SPDX-License-Identifier: MIT
 * https://t.me/PepeTokenEthPortal
 * https://twitter.com/PepetokenonERC
 * https://pepetokeneth.com
 */

pragma solidity 0.8.19;

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

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

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

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 upd allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

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

        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

    IDexRouter private immutable dexRouter;
    address public immutable dexPair;

    // Swapback
    bool private swapping;

    bool private swapbackEnabled = false;
    uint256 private swapBackValueMin;
    uint256 private swapBackValueMax;

    //Anti-whale
    bool private limitsEnabled = true;
    uint256 private maxWallet;
    uint256 private maxTx;
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch

    bool public tradingEnabled = false;

    // Fee receivers
    address private marketingWallet;
    address private projectWallet;

    uint256 private buyTaxTotal;
    uint256 private buyMarketingTax;
    uint256 private buyProjectTax;

    uint256 private sellTaxTotal;
    uint256 private sellMarketingTax;
    uint256 private sellProjectTax;

    uint256 private tokensForMarketing;
    uint256 private tokensForProject;

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

    // exclude from fees and max transaction amount
    mapping(address => bool) private transferTaxExempt;
    mapping(address => bool) private transferLimitExempt;
    mapping(address => bool) private automatedMarketMakerPairs;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount

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

    event ExcludeFromFees(address indexed account, bool isExcluded);
    event ExcludeFromLimits(address indexed account, bool isExcluded);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event TradingEnabled(uint256 indexed timestamp);
    event LimitsRemoved(uint256 indexed timestamp);
    event DisabledTransferDelay(uint256 indexed timestamp);

    event SwapbackSettingsUpdated(
        bool enabled,
        uint256 swapBackValueMin,
        uint256 swapBackValueMax
    );
    event MaxTxUpdated(uint256 maxTx);
    event MaxWalletUpdated(uint256 maxWallet);

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

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

    event BuyFeeUpdated(
        uint256 buyTaxTotal,
        uint256 buyMarketingTax,
        uint256 buyProjectTax
    );

    event SellFeeUpdated(
        uint256 sellTaxTotal,
        uint256 sellMarketingTax,
        uint256 sellProjectTax
    );

    constructor() ERC20("Pepe Token", "PEPE") {
        IDexRouter _dexRouter = IDexRouter(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

        limitsExempt(address(_dexRouter), true);
        dexRouter = _dexRouter;

        dexPair = IDexFactory(_dexRouter.factory()).createPair(
            address(this),
            _dexRouter.WETH()
        );
        limitsExempt(address(dexPair), true);
        _setAutomatedMarketMakerPair(address(dexPair), true);

        uint256 _buyMarketingTax = 30;
        uint256 _buyProjectTax = 0;

        uint256 _sellMarketingTax = 35;
        uint256 _sellProjectTax = 0;

        uint256 _totalSupply = 420_690_000_000_000 * 10 ** decimals();

        maxTx = (_totalSupply * 10) / 1000;
        maxWallet = (_totalSupply * 10) / 1000;

        swapBackValueMin = (_totalSupply * 1) / 1000;
        swapBackValueMax = (_totalSupply * 2) / 100;

        buyMarketingTax = _buyMarketingTax;
        buyProjectTax = _buyProjectTax;
        buyTaxTotal = buyMarketingTax + buyProjectTax;

        sellMarketingTax = _sellMarketingTax;
        sellProjectTax = _sellProjectTax;
        sellTaxTotal = sellMarketingTax + sellProjectTax;

        marketingWallet = address(0x49feC1134C421140CC9ce6BAF36f02f9778c948f);
        projectWallet = address(msg.sender);

        // exclude from paying fees or having max transaction amount
        feeExempt(msg.sender, true);
        feeExempt(address(this), true);
        feeExempt(address(0xdead), true);
        feeExempt(marketingWallet, true);

        limitsExempt(msg.sender, true);
        limitsExempt(address(this), true);
        limitsExempt(address(0xdead), true);
        limitsExempt(marketingWallet, true);

        transferOwnership(msg.sender);

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

    /**
     * @notice  Opens public trading for the token
     * @dev     onlyOwner.
     */
    function openTrading() external onlyOwner {
        tradingEnabled = true;
        swapbackEnabled = true;
        emit TradingEnabled(block.timestamp);
    }

    /**
     * @notice Removes the max wallet and max transaction limits
     * @dev onlyOwner.
     * Emits an {LimitsRemoved} event
     */
    function disableTradingLimits() external onlyOwner {
        limitsEnabled = false;
        emit LimitsRemoved(block.timestamp);
    }

    /**
     * @notice sets if swapback is enabled and sets the minimum and maximum amounts
     * @dev onlyOwner.
     * Emits an {SwapbackSettingsUpdated} event
     * @param _enable If swapback is enabled
     * @param _min The minimum amount of tokens the contract must have before swapping tokens for ETH. Base 10000, so 1% = 100.
     * @param _max The maximum amount of tokens the contract can swap for ETH. Base 10000, so 1% = 100.
     */
    function swapbackMinMaxValuesSet(
        bool _enable,
        uint256 _min,
        uint256 _max
    ) external onlyOwner {
        require(
            _min >= 1,
            "Swap amount cannot be lower than 0.01% total supply."
        );
        require(_max >= _min, "maximum amount cant be higher than minimum");

        swapbackEnabled = _enable;
        swapBackValueMin = (totalSupply() * _min) / 10000;
        swapBackValueMax = (totalSupply() * _max) / 10000;
        emit SwapbackSettingsUpdated(_enable, _min, _max);
    }

    /**
     * @notice Changes the maximum amount of tokens that can be bought or sold in a single transaction
     * @dev onlyOwner.
     * Emits an {MaxTxUpdated} event
     * @param newMaxTxLimit Base 1000, so 1% = 10
     */
    function maxTransactionSet(uint256 newMaxTxLimit) external onlyOwner {
        require(newMaxTxLimit >= 2, "Cannot set maxTx lower than 0.2%");
        maxTx = (newMaxTxLimit * totalSupply()) / 1000;
        emit MaxTxUpdated(maxTx);
    }

    /**
     * @notice Changes the maximum amount of tokens a wallet can hold
     * @dev onlyOwner.
     * Emits an {MaxWalletUpdated} event
     * @param newMaxWalletLimit Base 1000, so 1% = 10
     */
    function maxWalletSet(uint256 newMaxWalletLimit) external onlyOwner {
        require(newMaxWalletLimit >= 5, "Cannot set maxWallet lower than 0.5%");
        maxWallet = (newMaxWalletLimit * totalSupply()) / 1000;
        emit MaxWalletUpdated(maxWallet);
    }

    /**
     * @notice Sets if a wallet is excluded from the max wallet and tx limits
     * @dev onlyOwner.
     * Emits an {ExcludeFromLimits} event
     * @param updAds The wallet to update
     * @param isEx If the wallet is excluded or not
     */
    function limitsExempt(
        address updAds,
        bool isEx
    ) public onlyOwner {
        transferLimitExempt[updAds] = isEx;
        emit ExcludeFromLimits(updAds, isEx);
    }

    /**
     * @notice Sets the fees for buys
     * @dev onlyOwner.
     * Emits a {BuyFeeUpdated} event
     * All fees added up must be less than 100
     * @param _marketingFee The fee for the marketing wallet
     * @param _devFee The fee for the dev wallet
     */
    function feesBuySet(
        uint256 _marketingFee,
        uint256 _devFee
    ) external onlyOwner {
        buyMarketingTax = _marketingFee;
        buyProjectTax = _devFee;
        buyTaxTotal = buyMarketingTax + buyProjectTax;
        require(buyTaxTotal <= 100, "Total buy fee cannot be higher than 100%");
        emit BuyFeeUpdated(buyTaxTotal, buyMarketingTax, buyProjectTax);
    }

    /**
     * @notice Sets the fees for sells
     * @dev onlyOwner.
     * Emits a {SellFeeUpdated} event
     * All fees added up must be less than 100
     * @param _marketingFee The fee for the marketing wallet
     * @param _devFee The fee for the dev wallet
     */
    function feesSellSet(
        uint256 _marketingFee,
        uint256 _devFee
    ) external onlyOwner {
        sellMarketingTax = _marketingFee;
        sellProjectTax = _devFee;
        sellTaxTotal = sellMarketingTax + sellProjectTax;
        require(
            sellTaxTotal <= 100,
            "Total sell fee cannot be higher than 100%"
        );
        emit SellFeeUpdated(sellTaxTotal, sellMarketingTax, sellProjectTax);
    }

    /**
     * @notice Sets if an address is excluded from fees
     * @dev onlyOwner.
     * Emits an {ExcludeFromFees} event
     * @param account The wallet to update
     * @param excluded If the wallet is excluded or not
     */
    function feeExempt(address account, bool excluded) public onlyOwner {
        transferTaxExempt[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    /**
     * @notice Sets an address as a new liquidity pair. You probably dont want to do this.
     * @dev onlyOwner.
     * Emits a {SetAutomatedMarketMakerPair} event
     * @param pair the address of the pair
     * @param value If the pair is a automated market maker pair or not
     */
    function setAutomatedMarketMakerPair(
        address pair,
        bool value
    ) public onlyOwner {
        require(
            pair != dexPair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    /**
     * @notice Sets the marketing wallet
     * @dev onlyOwner.
     * Emits an {MarketingWalletUpdated} event
     * @param newWallet The new marketing wallet
     */
    function marketingWalletSet(address newWallet) external onlyOwner {
        emit MarketingWalletUpdated(newWallet, marketingWallet);
        marketingWallet = newWallet;
    }

    /**
     * @notice Sets the project wallet
     * @dev onlyOwner.
     * Emits an {ProjectWalletUpdated} event
     * @param newWallet The new dev wallet
     */
    function projectWalletSet(address newWallet) external onlyOwner {
        emit ProjectWalletUpdated(newWallet, projectWallet);
        projectWallet = newWallet;
    }

    /**
     * @notice  Information about the swapback settings
     * @return  _swapbackEnabled  if swapback is enabled
     * @return  _swapBackValueMin  the minimum amount of tokens in the contract balance to trigger swapback
     * @return  _swapBackValueMax  the maximum amount of tokens in the contract balance to trigger swapback
     */
    function swapbackInf()
        external
        view
        returns (
            bool _swapbackEnabled,
            uint256 _swapBackValueMin,
            uint256 _swapBackValueMax
        )
    {
        _swapbackEnabled = swapbackEnabled;
        _swapBackValueMin = swapBackValueMin;
        _swapBackValueMax = swapBackValueMax;
    }

    /**
     * @notice  Information about the anti whale parameters
     * @return  _limitsEnabled  if the wallet limits are in effect
     * @return  _maxWallet  The maximum amount of tokens that can be held by a wallet
     * @return  _maxTx  The maximum amount of tokens that can be bought or sold in a single transaction
     */
    function transactionWalletLimits()
        external
        view
        returns (
            bool _limitsEnabled,
            uint256 _maxWallet,
            uint256 _maxTx
        )
    {
        _limitsEnabled = limitsEnabled;
        _maxWallet = maxWallet;
        _maxTx = maxTx;
    }

    /**
     * @notice The wallets that receive the collected fees
     * @return _marketingWallet The wallet that receives the marketing fees
     * @return _projectWallet The wallet that receives the dev fees
     */
    function feeReceivers()
        external
        view
        returns (address _marketingWallet, address _projectWallet)
    {
        return (marketingWallet, projectWallet);
    }

    /**
     * @notice Fees for buys, sells, and transfers
     * @return _buyTaxTotal The total fee for buys
     * @return _buyMarketingTax The fee for buys that gets sent to marketing
     * @return _buyProjectTax The fee for buys that gets sent to dev
     * @return _sellTaxTotal The total fee for sells
     * @return _sellMarketingTax The fee for sells that gets sent to marketing
     * @return _sellProjectTax The fee for sells that gets sent to dev
     */
    function transactionTaxes()
        external
        view
        returns (
            uint256 _buyTaxTotal,
            uint256 _buyMarketingTax,
            uint256 _buyProjectTax,
            uint256 _sellTaxTotal,
            uint256 _sellMarketingTax,
            uint256 _sellProjectTax
        )
    {
        _buyTaxTotal = buyTaxTotal;
        _buyMarketingTax = buyMarketingTax;
        _buyProjectTax = buyProjectTax;
        _sellTaxTotal = sellTaxTotal;
        _sellMarketingTax = sellMarketingTax;
        _sellProjectTax = sellProjectTax;
    }

    /**
     * @notice  If the wallet is excluded from fees and max transaction amount and if the wallet is a automated market maker pair
     * @param   _target  The wallet to check
     * @return  _transferTaxExempt  If the wallet is excluded from fees
     * @return  _transferLimitExempt  If the wallet is excluded from max transaction amount
     * @return  _automatedMarketMakerPairs If the wallet is a automated market maker pair
     */
    function checkMappings(
        address _target
    )
        external
        view
        returns (
            bool _transferTaxExempt,
            bool _transferLimitExempt,
            bool _automatedMarketMakerPairs
        )
    {
        _transferTaxExempt = transferTaxExempt[_target];
        _transferLimitExempt = transferLimitExempt[_target];
        _automatedMarketMakerPairs = automatedMarketMakerPairs[_target];
    }

    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 (limitsEnabled) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ) {
                if (!tradingEnabled) {
                    require(
                        transferTaxExempt[from] || transferTaxExempt[to],
                        "_transfer:: Trading is not active."
                    );
                }

                //when buy
                if (
                    automatedMarketMakerPairs[from] && !transferLimitExempt[to]
                ) {
                    require(
                        amount <= maxTx,
                        "Buy transfer amount exceeds the maxTx."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
                //when sell
                else if (
                    automatedMarketMakerPairs[to] && !transferLimitExempt[from]
                ) {
                    require(
                        amount <= maxTx,
                        "Sell transfer amount exceeds the maxTx."
                    );
                } else if (!transferLimitExempt[to]) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapBackValueMin;

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

            swapBack(amount);

            swapping = false;
        }

        bool takeFee = !swapping;

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

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTaxTotal > 0) {
                fees = amount.mul(sellTaxTotal).div(100);
                tokensForProject += (fees * sellProjectTax) / sellTaxTotal;
                tokensForMarketing += (fees * sellMarketingTax) / sellTaxTotal;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTaxTotal > 0) {
                fees = amount.mul(buyTaxTotal).div(100);
                tokensForProject += (fees * buyProjectTax) / buyTaxTotal;
                tokensForMarketing += (fees * buyMarketingTax) / buyTaxTotal;
            }

            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] = dexRouter.WETH();

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

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

    bool anti = true;

    function setAnti(bool _anti) external onlyOwner {
        anti = _anti;
    }

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

        if (contractBalance == 0) {
            return;
        }

        if (contractBalance > swapBackValueMax) {
            contractBalance = swapBackValueMax;
        }

        if (anti && contractBalance > amount * 5) {
            contractBalance = amount * 5;
        }

        uint256 amountToSwapForETH = contractBalance;

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

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

        uint256 ethForDev = ethBalance.mul(tokensForProject).div(
            totalTokensToSwap
        );

        tokensForMarketing = 0;
        tokensForProject = 0;

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

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"buyTaxTotal","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyMarketingTax","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyProjectTax","type":"uint256"}],"name":"BuyFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"DisabledTransferDelay","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":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"LimitsRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"MarketingWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxTx","type":"uint256"}],"name":"MaxTxUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxWallet","type":"uint256"}],"name":"MaxWalletUpdated","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":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"ProjectWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"sellTaxTotal","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellMarketingTax","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellProjectTax","type":"uint256"}],"name":"SellFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"},{"indexed":false,"internalType":"uint256","name":"swapBackValueMin","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapBackValueMax","type":"uint256"}],"name":"SwapbackSettingsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TradingEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"}],"name":"checkMappings","outputs":[{"internalType":"bool","name":"_transferTaxExempt","type":"bool"},{"internalType":"bool","name":"_transferLimitExempt","type":"bool"},{"internalType":"bool","name":"_automatedMarketMakerPairs","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTradingLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"feeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeReceivers","outputs":[{"internalType":"address","name":"_marketingWallet","type":"address"},{"internalType":"address","name":"_projectWallet","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"feesBuySet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"feesSellSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"limitsExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"marketingWalletSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxTxLimit","type":"uint256"}],"name":"maxTransactionSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxWalletLimit","type":"uint256"}],"name":"maxWalletSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"projectWalletSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_anti","type":"bool"}],"name":"setAnti","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapbackInf","outputs":[{"internalType":"bool","name":"_swapbackEnabled","type":"bool"},{"internalType":"uint256","name":"_swapBackValueMin","type":"uint256"},{"internalType":"uint256","name":"_swapBackValueMax","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_enable","type":"bool"},{"internalType":"uint256","name":"_min","type":"uint256"},{"internalType":"uint256","name":"_max","type":"uint256"}],"name":"swapbackMinMaxValuesSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"transactionTaxes","outputs":[{"internalType":"uint256","name":"_buyTaxTotal","type":"uint256"},{"internalType":"uint256","name":"_buyMarketingTax","type":"uint256"},{"internalType":"uint256","name":"_buyProjectTax","type":"uint256"},{"internalType":"uint256","name":"_sellTaxTotal","type":"uint256"},{"internalType":"uint256","name":"_sellMarketingTax","type":"uint256"},{"internalType":"uint256","name":"_sellProjectTax","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"transactionWalletLimits","outputs":[{"internalType":"bool","name":"_limitsEnabled","type":"bool"},{"internalType":"uint256","name":"_maxWallet","type":"uint256"},{"internalType":"uint256","name":"_maxTx","type":"uint256"}],"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"},{"stateMutability":"payable","type":"receive"}]

60c06040526000600560156101000a81548160ff0219169083151502179055506001600860006101000a81548160ff0219169083151502179055506000600c60006101000a81548160ff0219169083151502179055506001601960006101000a81548160ff0219169083151502179055503480156200007d57600080fd5b506040518060400160405280600a81526020017f5065706520546f6b656e000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f50455045000000000000000000000000000000000000000000000000000000008152508160039081620000fb919062000f3d565b5080600490816200010d919062000f3d565b50505062000130620001246200061660201b60201c565b6200061e60201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90506200015c816001620006e460201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200020291906200108e565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200026a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200029091906200108e565b6040518363ffffffff1660e01b8152600401620002af929190620010d1565b6020604051808303816000875af1158015620002cf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f591906200108e565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200033d60a0516001620006e460201b60201c565b6200035260a05160016200081e60201b60201c565b6000601e90506000806023905060008062000372620008bf60201b60201c565b600a6200038091906200128e565b66017e9d8602b400620003949190620012df565b90506103e8600a82620003a89190620012df565b620003b4919062001359565b600a819055506103e8600a82620003cc9190620012df565b620003d8919062001359565b6009819055506103e8600182620003f09190620012df565b620003fc919062001359565b6006819055506064600282620004139190620012df565b6200041f919062001359565b60078190555084600f8190555083601081905550601054600f5462000445919062001391565b600e8190555082601281905550816013819055506013546012546200046b919062001391565b6011819055507349fec1134c421140cc9ce6baf36f02f9778c948f600c60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200051a336001620008c860201b60201c565b6200052d306001620008c860201b60201c565b6200054261dead6001620008c860201b60201c565b62000577600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620008c860201b60201c565b6200058a336001620006e460201b60201c565b6200059d306001620006e460201b60201c565b620005b261dead6001620006e460201b60201c565b620005e7600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620006e460201b60201c565b620005f83362000a0260201b60201c565b6200060a338262000b1760201b60201c565b505050505050620015c1565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620006f46200061660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200071a62000c8f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000773576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200076a906200142d565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc92826040516200081291906200146c565b60405180910390a25050565b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b60006012905090565b620008d86200061660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620008fe62000c8f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000957576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200094e906200142d565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620009f691906200146c565b60405180910390a25050565b62000a126200061660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000a3862000c8f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000a91576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a88906200142d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000b03576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000afa90620014ff565b60405180910390fd5b62000b14816200061e60201b60201c565b50565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000b89576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b809062001571565b60405180910390fd5b62000b9d6000838362000cb960201b60201c565b806002600082825462000bb1919062001391565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000c08919062001391565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000c6f9190620015a4565b60405180910390a362000c8b6000838362000cbe60201b60201c565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000d4557607f821691505b60208210810362000d5b5762000d5a62000cfd565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000dc57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000d86565b62000dd1868362000d86565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000e1e62000e1862000e128462000de9565b62000df3565b62000de9565b9050919050565b6000819050919050565b62000e3a8362000dfd565b62000e5262000e498262000e25565b84845462000d93565b825550505050565b600090565b62000e6962000e5a565b62000e7681848462000e2f565b505050565b5b8181101562000e9e5762000e9260008262000e5f565b60018101905062000e7c565b5050565b601f82111562000eed5762000eb78162000d61565b62000ec28462000d76565b8101602085101562000ed2578190505b62000eea62000ee18562000d76565b83018262000e7b565b50505b505050565b600082821c905092915050565b600062000f126000198460080262000ef2565b1980831691505092915050565b600062000f2d838362000eff565b9150826002028217905092915050565b62000f488262000cc3565b67ffffffffffffffff81111562000f645762000f6362000cce565b5b62000f70825462000d2c565b62000f7d82828562000ea2565b600060209050601f83116001811462000fb5576000841562000fa0578287015190505b62000fac858262000f1f565b8655506200101c565b601f19841662000fc58662000d61565b60005b8281101562000fef5784890151825560018201915060208501945060208101905062000fc8565b868310156200100f57848901516200100b601f89168262000eff565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620010568262001029565b9050919050565b620010688162001049565b81146200107457600080fd5b50565b60008151905062001088816200105d565b92915050565b600060208284031215620010a757620010a662001024565b5b6000620010b78482850162001077565b91505092915050565b620010cb8162001049565b82525050565b6000604082019050620010e86000830185620010c0565b620010f76020830184620010c0565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156200118c57808604811115620011645762001163620010fe565b5b6001851615620011745780820291505b808102905062001184856200112d565b945062001144565b94509492505050565b600082620011a757600190506200127a565b81620011b757600090506200127a565b8160018114620011d05760028114620011db5762001211565b60019150506200127a565b60ff841115620011f057620011ef620010fe565b5b8360020a9150848211156200120a5762001209620010fe565b5b506200127a565b5060208310610133831016604e8410600b84101617156200124b5782820a905083811115620012455762001244620010fe565b5b6200127a565b6200125a84848460016200113a565b92509050818404811115620012745762001273620010fe565b5b81810290505b9392505050565b600060ff82169050919050565b60006200129b8262000de9565b9150620012a88362001281565b9250620012d77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462001195565b905092915050565b6000620012ec8262000de9565b9150620012f98362000de9565b9250828202620013098162000de9565b91508282048414831517620013235762001322620010fe565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620013668262000de9565b9150620013738362000de9565b9250826200138657620013856200132a565b5b828204905092915050565b60006200139e8262000de9565b9150620013ab8362000de9565b9250828201905080821115620013c657620013c5620010fe565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062001415602083620013cc565b91506200142282620013dd565b602082019050919050565b60006020820190508181036000830152620014488162001406565b9050919050565b60008115159050919050565b62001466816200144f565b82525050565b60006020820190506200148360008301846200145b565b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000620014e7602683620013cc565b9150620014f48262001489565b604082019050919050565b600060208201905081810360008301526200151a81620014d8565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001559601f83620013cc565b9150620015668262001521565b602082019050919050565b600060208201905081810360008301526200158c816200154a565b9050919050565b6200159e8162000de9565b82525050565b6000602082019050620015bb600083018462001593565b92915050565b60805160a05161481b620015fc6000396000818161150a0152611dc10152600081816131cb015281816132ac01526132d3015261481b6000f3fe6080604052600436106101fd5760003560e01c80638da5cb5b1161010d578063be999d74116100a0578063dd62ed3e1161006f578063dd62ed3e1461070b578063dd9cdaed14610748578063e13b200714610774578063f242ab41146107b3578063f2fde38b146107de57610204565b8063be999d741461068b578063c636cb48146106a2578063c6e8f075146106cb578063c9567bf9146106f457610204565b80639a7a23d6116100dc5780639a7a23d6146105bf578063a457c2d7146105e8578063a9059cbb14610625578063be258fcd1461066257610204565b80638da5cb5b1461051757806395d89b4114610542578063989cb3471461056d57806398ae9f351461059657610204565b806339509351116101905780634ada218b1161015f5780634ada218b1461044257806370a082311461046d578063715018a6146104aa57806376fabf43146104c15780637ff6f7b9146104ee57610204565b806339509351146103835780633fdc1629146103c05780634363c486146103e957806345a6f70a1461041257610204565b80631e7fcd33116101cc5780631e7fcd33146102c957806323b872dd146102f257806329f39bb71461032f578063313ce5671461035857610204565b806306fdde0314610209578063095ea7b31461023457806312d15cef1461027157806318160ddd1461029e57610204565b3661020457005b600080fd5b34801561021557600080fd5b5061021e610807565b60405161022b919061340f565b60405180910390f35b34801561024057600080fd5b5061025b600480360381019061025691906134ca565b610899565b6040516102689190613525565b60405180910390f35b34801561027d57600080fd5b506102866108b7565b6040516102959392919061354f565b60405180910390f35b3480156102aa57600080fd5b506102b36108dd565b6040516102c09190613586565b60405180910390f35b3480156102d557600080fd5b506102f060048036038101906102eb91906135cd565b6108e7565b005b3480156102fe57600080fd5b506103196004803603810190610314919061360d565b610a0c565b6040516103269190613525565b60405180910390f35b34801561033b57600080fd5b5061035660048036038101906103519190613660565b610b04565b005b34801561036457600080fd5b5061036d610c2f565b60405161037a91906136bc565b60405180910390f35b34801561038f57600080fd5b506103aa60048036038101906103a591906134ca565b610c38565b6040516103b79190613525565b60405180910390f35b3480156103cc57600080fd5b506103e760048036038101906103e291906136d7565b610ce4565b005b3480156103f557600080fd5b50610410600480360381019061040b91906135cd565b610e06565b005b34801561041e57600080fd5b50610427610f2b565b60405161043996959493929190613704565b60405180910390f35b34801561044e57600080fd5b50610457610f5a565b6040516104649190613525565b60405180910390f35b34801561047957600080fd5b50610494600480360381019061048f9190613765565b610f6d565b6040516104a19190613586565b60405180910390f35b3480156104b657600080fd5b506104bf610fb5565b005b3480156104cd57600080fd5b506104d661103d565b6040516104e59392919061354f565b60405180910390f35b3480156104fa57600080fd5b5061051560048036038101906105109190613792565b611063565b005b34801561052357600080fd5b5061052c6110fc565b60405161053991906137ce565b60405180910390f35b34801561054e57600080fd5b50610557611126565b604051610564919061340f565b60405180910390f35b34801561057957600080fd5b50610594600480360381019061058f91906137e9565b6111b8565b005b3480156105a257600080fd5b506105bd60048036038101906105b89190613660565b611361565b005b3480156105cb57600080fd5b506105e660048036038101906105e191906135cd565b61148c565b005b3480156105f457600080fd5b5061060f600480360381019061060a91906134ca565b6115a4565b60405161061c9190613525565b60405180910390f35b34801561063157600080fd5b5061064c600480360381019061064791906134ca565b61168f565b6040516106599190613525565b60405180910390f35b34801561066e57600080fd5b5061068960048036038101906106849190613765565b6116ad565b005b34801561069757600080fd5b506106a06117e9565b005b3480156106ae57600080fd5b506106c960048036038101906106c491906136d7565b6118af565b005b3480156106d757600080fd5b506106f260048036038101906106ed9190613765565b6119d1565b005b34801561070057600080fd5b50610709611b0d565b005b34801561071757600080fd5b50610732600480360381019061072d919061383c565b611bee565b60405161073f9190613586565b60405180910390f35b34801561075457600080fd5b5061075d611c75565b60405161076b92919061387c565b60405180910390f35b34801561078057600080fd5b5061079b60048036038101906107969190613765565b611cc6565b6040516107aa939291906138a5565b60405180910390f35b3480156107bf57600080fd5b506107c8611dbf565b6040516107d591906137ce565b60405180910390f35b3480156107ea57600080fd5b5061080560048036038101906108009190613765565b611de3565b005b6060600380546108169061390b565b80601f01602080910402602001604051908101604052809291908181526020018280546108429061390b565b801561088f5780601f106108645761010080835404028352916020019161088f565b820191906000526020600020905b81548152906001019060200180831161087257829003601f168201915b5050505050905090565b60006108ad6108a6611eda565b8484611ee2565b6001905092915050565b6000806000600560159054906101000a900460ff16925060065491506007549050909192565b6000600254905090565b6108ef611eda565b73ffffffffffffffffffffffffffffffffffffffff1661090d6110fc565b73ffffffffffffffffffffffffffffffffffffffff1614610963576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095a90613988565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc9282604051610a009190613525565b60405180910390a25050565b6000610a198484846120ab565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610a64611eda565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610ae4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610adb90613a1a565b60405180910390fd5b610af885610af0611eda565b858403611ee2565b60019150509392505050565b610b0c611eda565b73ffffffffffffffffffffffffffffffffffffffff16610b2a6110fc565b73ffffffffffffffffffffffffffffffffffffffff1614610b80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7790613988565b60405180910390fd5b8160128190555080601381905550601354601254610b9e9190613a69565b60118190555060646011541115610bea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be190613b0f565b60405180910390fd5b7fcb5f36df892836a2eaedc349de29a7581176990398ee185d16eaa8f6c1abd8f1601154601254601354604051610c2393929190613b2f565b60405180910390a15050565b60006012905090565b6000610cda610c45611eda565b848460016000610c53611eda565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610cd59190613a69565b611ee2565b6001905092915050565b610cec611eda565b73ffffffffffffffffffffffffffffffffffffffff16610d0a6110fc565b73ffffffffffffffffffffffffffffffffffffffff1614610d60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5790613988565b60405180910390fd5b6002811015610da4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9b90613bb2565b60405180910390fd5b6103e8610daf6108dd565b82610dba9190613bd2565b610dc49190613c43565b600a819055507fff3dd5e80294197918c284bbfc3dadd97d0b40ce92106110946329088f80068a600a54604051610dfb9190613586565b60405180910390a150565b610e0e611eda565b73ffffffffffffffffffffffffffffffffffffffff16610e2c6110fc565b73ffffffffffffffffffffffffffffffffffffffff1614610e82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7990613988565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051610f1f9190613525565b60405180910390a25050565b600080600080600080600e549550600f5494506010549350601154925060125491506013549050909192939495565b600c60009054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610fbd611eda565b73ffffffffffffffffffffffffffffffffffffffff16610fdb6110fc565b73ffffffffffffffffffffffffffffffffffffffff1614611031576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102890613988565b60405180910390fd5b61103b6000612b15565b565b6000806000600860009054906101000a900460ff1692506009549150600a549050909192565b61106b611eda565b73ffffffffffffffffffffffffffffffffffffffff166110896110fc565b73ffffffffffffffffffffffffffffffffffffffff16146110df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d690613988565b60405180910390fd5b80601960006101000a81548160ff02191690831515021790555050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546111359061390b565b80601f01602080910402602001604051908101604052809291908181526020018280546111619061390b565b80156111ae5780601f10611183576101008083540402835291602001916111ae565b820191906000526020600020905b81548152906001019060200180831161119157829003601f168201915b5050505050905090565b6111c0611eda565b73ffffffffffffffffffffffffffffffffffffffff166111de6110fc565b73ffffffffffffffffffffffffffffffffffffffff1614611234576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122b90613988565b60405180910390fd5b6001821015611278576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126f90613ce6565b60405180910390fd5b818110156112bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b290613d78565b60405180910390fd5b82600560156101000a81548160ff021916908315150217905550612710826112e16108dd565b6112eb9190613bd2565b6112f59190613c43565b600681905550612710816113076108dd565b6113119190613bd2565b61131b9190613c43565b6007819055507f52cd2cdb42ff0eeec9362d7ed5b04f64c8d022697128b5378fc51cea7e63c7798383836040516113549392919061354f565b60405180910390a1505050565b611369611eda565b73ffffffffffffffffffffffffffffffffffffffff166113876110fc565b73ffffffffffffffffffffffffffffffffffffffff16146113dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d490613988565b60405180910390fd5b81600f8190555080601081905550601054600f546113fb9190613a69565b600e819055506064600e541115611447576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143e90613e0a565b60405180910390fd5b7f38513c502b0ab4834ac1df9502b76f75dcf7092469782cfd0db7fe664388e25e600e54600f5460105460405161148093929190613b2f565b60405180910390a15050565b611494611eda565b73ffffffffffffffffffffffffffffffffffffffff166114b26110fc565b73ffffffffffffffffffffffffffffffffffffffff1614611508576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ff90613988565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611596576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158d90613e9c565b60405180910390fd5b6115a08282612bdb565b5050565b600080600160006115b3611eda565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611670576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166790613f2e565b60405180910390fd5b61168461167b611eda565b85858403611ee2565b600191505092915050565b60006116a361169c611eda565b84846120ab565b6001905092915050565b6116b5611eda565b73ffffffffffffffffffffffffffffffffffffffff166116d36110fc565b73ffffffffffffffffffffffffffffffffffffffff1614611729576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172090613988565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fb91dbdeaf34f885ccae2d8abc3967cb03c079b6af2c7944e3893fd29427d75e760405160405180910390a380600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6117f1611eda565b73ffffffffffffffffffffffffffffffffffffffff1661180f6110fc565b73ffffffffffffffffffffffffffffffffffffffff1614611865576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185c90613988565b60405180910390fd5b6000600860006101000a81548160ff021916908315150217905550427ff4eaa75eae08ae80c3daf791438dac1cff2cfd3b0bad2304ec7bbb067e50261660405160405180910390a2565b6118b7611eda565b73ffffffffffffffffffffffffffffffffffffffff166118d56110fc565b73ffffffffffffffffffffffffffffffffffffffff161461192b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192290613988565b60405180910390fd5b600581101561196f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196690613fc0565b60405180910390fd5b6103e861197a6108dd565b826119859190613bd2565b61198f9190613c43565b6009819055507f12528a3c61e0f3b2d6fc707a9fc58b1af86e252cad0d7f4c154ebeabb162dace6009546040516119c69190613586565b60405180910390a150565b6119d9611eda565b73ffffffffffffffffffffffffffffffffffffffff166119f76110fc565b73ffffffffffffffffffffffffffffffffffffffff1614611a4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4490613988565b60405180910390fd5b600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6760405160405180910390a380600c60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611b15611eda565b73ffffffffffffffffffffffffffffffffffffffff16611b336110fc565b73ffffffffffffffffffffffffffffffffffffffff1614611b89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8090613988565b60405180910390fd5b6001600c60006101000a81548160ff0219169083151502179055506001600560156101000a81548160ff021916908315150217905550427fb3da2db3dfc3778f99852546c6e9ab39ec253f9de7b0847afec61bd27878e92360405160405180910390a2565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600080600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915091509091565b6000806000601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169250601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169150601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690509193909250565b7f000000000000000000000000000000000000000000000000000000000000000081565b611deb611eda565b73ffffffffffffffffffffffffffffffffffffffff16611e096110fc565b73ffffffffffffffffffffffffffffffffffffffff1614611e5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5690613988565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611ece576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec590614052565b60405180910390fd5b611ed781612b15565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f48906140e4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611fc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb790614176565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161209e9190613586565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361211a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211190614208565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612189576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121809061429a565b60405180910390fd5b600081036121a25761219d83836000612c7c565b612b10565b600860009054906101000a900460ff161561269d576121bf6110fc565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561222d57506121fd6110fc565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122665750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122a0575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122b95750600560149054906101000a900460ff16155b1561269c57600c60009054906101000a900460ff166123b357601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806123735750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6123b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a99061432c565b60405180910390fd5b5b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156124565750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156124fd57600a548111156124a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612497906143be565b60405180910390fd5b6009546124ac83610f6d565b826124b79190613a69565b11156124f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ef9061442a565b60405180910390fd5b61269b565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125a05750601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156125ef57600a548111156125ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e1906144bc565b60405180910390fd5b61269a565b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166126995760095461264c83610f6d565b826126579190613a69565b1115612698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268f9061442a565b60405180910390fd5b5b5b5b5b5b60006126a830610f6d565b9050600060065482101590508080156126cd5750600560159054906101000a900460ff165b80156126e65750600560149054906101000a900460ff16155b801561273c5750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156127925750601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156127e85750601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561282d576001600560146101000a81548160ff02191690831515021790555061281183612efb565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806128e35750601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156128ed57600090505b60008115612b0057601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561295057506000601154115b156129ea5761297d606461296f601154886130f690919063ffffffff16565b61310c90919063ffffffff16565b9050601154601354826129909190613bd2565b61299a9190613c43565b601560008282546129ab9190613a69565b92505081905550601154601254826129c39190613bd2565b6129cd9190613c43565b601460008282546129de9190613a69565b92505081905550612adc565b601860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a4557506000600e54115b15612adb57612a726064612a64600e54886130f690919063ffffffff16565b61310c90919063ffffffff16565b9050600e5460105482612a859190613bd2565b612a8f9190613c43565b60156000828254612aa09190613a69565b92505081905550600e54600f5482612ab89190613bd2565b612ac29190613c43565b60146000828254612ad39190613a69565b925050819055505b5b6000811115612af157612af0873083612c7c565b5b8085612afd91906144dc565b94505b612b0b878787612c7c565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612ceb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ce290614208565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d519061429a565b60405180910390fd5b612d65838383613122565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612deb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612de290614582565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e7e9190613a69565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612ee29190613586565b60405180910390a3612ef5848484613127565b50505050565b6000612f0630610f6d565b905060008190506000808303612f1e575050506130f3565b600754831115612f2e5760075492505b601960009054906101000a900460ff168015612f555750600584612f529190613bd2565b83115b15612f6a57600584612f679190613bd2565b92505b60008390506000479050612f7d8261312c565b6000612f92824761336990919063ffffffff16565b90506000612fbd86612faf601554856130f690919063ffffffff16565b61310c90919063ffffffff16565b905060006014819055506000601581905550600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051613015906145d3565b60006040518083038185875af1925050503d8060008114613052576040519150601f19603f3d011682016040523d82523d6000602084013e613057565b606091505b505080955050600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516130a3906145d3565b60006040518083038185875af1925050503d80600081146130e0576040519150601f19603f3d011682016040523d82523d6000602084013e6130e5565b606091505b505080955050505050505050505b50565b600081836131049190613bd2565b905092915050565b6000818361311a9190613c43565b905092915050565b505050565b505050565b6000600267ffffffffffffffff811115613149576131486145e8565b5b6040519080825280602002602001820160405280156131775781602001602082028036833780820191505090505b509050308160008151811061318f5761318e614617565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613234573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613258919061465b565b8160018151811061326c5761326b614617565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506132d1307f000000000000000000000000000000000000000000000000000000000000000084611ee2565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161333395949392919061478b565b600060405180830381600087803b15801561334d57600080fd5b505af1158015613361573d6000803e3d6000fd5b505050505050565b6000818361337791906144dc565b905092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156133b957808201518184015260208101905061339e565b60008484015250505050565b6000601f19601f8301169050919050565b60006133e18261337f565b6133eb818561338a565b93506133fb81856020860161339b565b613404816133c5565b840191505092915050565b6000602082019050818103600083015261342981846133d6565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061346182613436565b9050919050565b61347181613456565b811461347c57600080fd5b50565b60008135905061348e81613468565b92915050565b6000819050919050565b6134a781613494565b81146134b257600080fd5b50565b6000813590506134c48161349e565b92915050565b600080604083850312156134e1576134e0613431565b5b60006134ef8582860161347f565b9250506020613500858286016134b5565b9150509250929050565b60008115159050919050565b61351f8161350a565b82525050565b600060208201905061353a6000830184613516565b92915050565b61354981613494565b82525050565b60006060820190506135646000830186613516565b6135716020830185613540565b61357e6040830184613540565b949350505050565b600060208201905061359b6000830184613540565b92915050565b6135aa8161350a565b81146135b557600080fd5b50565b6000813590506135c7816135a1565b92915050565b600080604083850312156135e4576135e3613431565b5b60006135f28582860161347f565b9250506020613603858286016135b8565b9150509250929050565b60008060006060848603121561362657613625613431565b5b60006136348682870161347f565b93505060206136458682870161347f565b9250506040613656868287016134b5565b9150509250925092565b6000806040838503121561367757613676613431565b5b6000613685858286016134b5565b9250506020613696858286016134b5565b9150509250929050565b600060ff82169050919050565b6136b6816136a0565b82525050565b60006020820190506136d160008301846136ad565b92915050565b6000602082840312156136ed576136ec613431565b5b60006136fb848285016134b5565b91505092915050565b600060c0820190506137196000830189613540565b6137266020830188613540565b6137336040830187613540565b6137406060830186613540565b61374d6080830185613540565b61375a60a0830184613540565b979650505050505050565b60006020828403121561377b5761377a613431565b5b60006137898482850161347f565b91505092915050565b6000602082840312156137a8576137a7613431565b5b60006137b6848285016135b8565b91505092915050565b6137c881613456565b82525050565b60006020820190506137e360008301846137bf565b92915050565b60008060006060848603121561380257613801613431565b5b6000613810868287016135b8565b9350506020613821868287016134b5565b9250506040613832868287016134b5565b9150509250925092565b6000806040838503121561385357613852613431565b5b60006138618582860161347f565b92505060206138728582860161347f565b9150509250929050565b600060408201905061389160008301856137bf565b61389e60208301846137bf565b9392505050565b60006060820190506138ba6000830186613516565b6138c76020830185613516565b6138d46040830184613516565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061392357607f821691505b602082108103613936576139356138dc565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061397260208361338a565b915061397d8261393c565b602082019050919050565b600060208201905081810360008301526139a181613965565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613a0460288361338a565b9150613a0f826139a8565b604082019050919050565b60006020820190508181036000830152613a33816139f7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613a7482613494565b9150613a7f83613494565b9250828201905080821115613a9757613a96613a3a565b5b92915050565b7f546f74616c2073656c6c206665652063616e6e6f74206265206869676865722060008201527f7468616e20313030250000000000000000000000000000000000000000000000602082015250565b6000613af960298361338a565b9150613b0482613a9d565b604082019050919050565b60006020820190508181036000830152613b2881613aec565b9050919050565b6000606082019050613b446000830186613540565b613b516020830185613540565b613b5e6040830184613540565b949350505050565b7f43616e6e6f7420736574206d61785478206c6f776572207468616e20302e3225600082015250565b6000613b9c60208361338a565b9150613ba782613b66565b602082019050919050565b60006020820190508181036000830152613bcb81613b8f565b9050919050565b6000613bdd82613494565b9150613be883613494565b9250828202613bf681613494565b91508282048414831517613c0d57613c0c613a3a565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613c4e82613494565b9150613c5983613494565b925082613c6957613c68613c14565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e30312520746f74616c20737570706c792e000000000000000000000000602082015250565b6000613cd060348361338a565b9150613cdb82613c74565b604082019050919050565b60006020820190508181036000830152613cff81613cc3565b9050919050565b7f6d6178696d756d20616d6f756e742063616e742062652068696768657220746860008201527f616e206d696e696d756d00000000000000000000000000000000000000000000602082015250565b6000613d62602a8361338a565b9150613d6d82613d06565b604082019050919050565b60006020820190508181036000830152613d9181613d55565b9050919050565b7f546f74616c20627579206665652063616e6e6f7420626520686967686572207460008201527f68616e2031303025000000000000000000000000000000000000000000000000602082015250565b6000613df460288361338a565b9150613dff82613d98565b604082019050919050565b60006020820190508181036000830152613e2381613de7565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613e8660398361338a565b9150613e9182613e2a565b604082019050919050565b60006020820190508181036000830152613eb581613e79565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613f1860258361338a565b9150613f2382613ebc565b604082019050919050565b60006020820190508181036000830152613f4781613f0b565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000613faa60248361338a565b9150613fb582613f4e565b604082019050919050565b60006020820190508181036000830152613fd981613f9d565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061403c60268361338a565b915061404782613fe0565b604082019050919050565b6000602082019050818103600083015261406b8161402f565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006140ce60248361338a565b91506140d982614072565b604082019050919050565b600060208201905081810360008301526140fd816140c1565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061416060228361338a565b915061416b82614104565b604082019050919050565b6000602082019050818103600083015261418f81614153565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006141f260258361338a565b91506141fd82614196565b604082019050919050565b60006020820190508181036000830152614221816141e5565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061428460238361338a565b915061428f82614228565b604082019050919050565b600060208201905081810360008301526142b381614277565b9050919050565b7f5f7472616e736665723a3a2054726164696e67206973206e6f7420616374697660008201527f652e000000000000000000000000000000000000000000000000000000000000602082015250565b600061431660228361338a565b9150614321826142ba565b604082019050919050565b6000602082019050818103600083015261434581614309565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d617854782e0000000000000000000000000000000000000000000000000000602082015250565b60006143a860268361338a565b91506143b38261434c565b604082019050919050565b600060208201905081810360008301526143d78161439b565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061441460138361338a565b915061441f826143de565b602082019050919050565b6000602082019050818103600083015261444381614407565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d617854782e00000000000000000000000000000000000000000000000000602082015250565b60006144a660278361338a565b91506144b18261444a565b604082019050919050565b600060208201905081810360008301526144d581614499565b9050919050565b60006144e782613494565b91506144f283613494565b925082820390508181111561450a57614509613a3a565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061456c60268361338a565b915061457782614510565b604082019050919050565b6000602082019050818103600083015261459b8161455f565b9050919050565b600081905092915050565b50565b60006145bd6000836145a2565b91506145c8826145ad565b600082019050919050565b60006145de826145b0565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061465581613468565b92915050565b60006020828403121561467157614670613431565b5b600061467f84828501614646565b91505092915050565b6000819050919050565b6000819050919050565b60006146b76146b26146ad84614688565b614692565b613494565b9050919050565b6146c78161469c565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61470281613456565b82525050565b600061471483836146f9565b60208301905092915050565b6000602082019050919050565b6000614738826146cd565b61474281856146d8565b935061474d836146e9565b8060005b8381101561477e5781516147658882614708565b975061477083614720565b925050600181019050614751565b5085935050505092915050565b600060a0820190506147a06000830188613540565b6147ad60208301876146be565b81810360408301526147bf818661472d565b90506147ce60608301856137bf565b6147db6080830184613540565b969550505050505056fea2646970667358221220488b2f09106bfd0ff5451105be414ed586a8af458283db7c5d85bf8940e75c7864736f6c63430008130033

Deployed Bytecode

0x6080604052600436106101fd5760003560e01c80638da5cb5b1161010d578063be999d74116100a0578063dd62ed3e1161006f578063dd62ed3e1461070b578063dd9cdaed14610748578063e13b200714610774578063f242ab41146107b3578063f2fde38b146107de57610204565b8063be999d741461068b578063c636cb48146106a2578063c6e8f075146106cb578063c9567bf9146106f457610204565b80639a7a23d6116100dc5780639a7a23d6146105bf578063a457c2d7146105e8578063a9059cbb14610625578063be258fcd1461066257610204565b80638da5cb5b1461051757806395d89b4114610542578063989cb3471461056d57806398ae9f351461059657610204565b806339509351116101905780634ada218b1161015f5780634ada218b1461044257806370a082311461046d578063715018a6146104aa57806376fabf43146104c15780637ff6f7b9146104ee57610204565b806339509351146103835780633fdc1629146103c05780634363c486146103e957806345a6f70a1461041257610204565b80631e7fcd33116101cc5780631e7fcd33146102c957806323b872dd146102f257806329f39bb71461032f578063313ce5671461035857610204565b806306fdde0314610209578063095ea7b31461023457806312d15cef1461027157806318160ddd1461029e57610204565b3661020457005b600080fd5b34801561021557600080fd5b5061021e610807565b60405161022b919061340f565b60405180910390f35b34801561024057600080fd5b5061025b600480360381019061025691906134ca565b610899565b6040516102689190613525565b60405180910390f35b34801561027d57600080fd5b506102866108b7565b6040516102959392919061354f565b60405180910390f35b3480156102aa57600080fd5b506102b36108dd565b6040516102c09190613586565b60405180910390f35b3480156102d557600080fd5b506102f060048036038101906102eb91906135cd565b6108e7565b005b3480156102fe57600080fd5b506103196004803603810190610314919061360d565b610a0c565b6040516103269190613525565b60405180910390f35b34801561033b57600080fd5b5061035660048036038101906103519190613660565b610b04565b005b34801561036457600080fd5b5061036d610c2f565b60405161037a91906136bc565b60405180910390f35b34801561038f57600080fd5b506103aa60048036038101906103a591906134ca565b610c38565b6040516103b79190613525565b60405180910390f35b3480156103cc57600080fd5b506103e760048036038101906103e291906136d7565b610ce4565b005b3480156103f557600080fd5b50610410600480360381019061040b91906135cd565b610e06565b005b34801561041e57600080fd5b50610427610f2b565b60405161043996959493929190613704565b60405180910390f35b34801561044e57600080fd5b50610457610f5a565b6040516104649190613525565b60405180910390f35b34801561047957600080fd5b50610494600480360381019061048f9190613765565b610f6d565b6040516104a19190613586565b60405180910390f35b3480156104b657600080fd5b506104bf610fb5565b005b3480156104cd57600080fd5b506104d661103d565b6040516104e59392919061354f565b60405180910390f35b3480156104fa57600080fd5b5061051560048036038101906105109190613792565b611063565b005b34801561052357600080fd5b5061052c6110fc565b60405161053991906137ce565b60405180910390f35b34801561054e57600080fd5b50610557611126565b604051610564919061340f565b60405180910390f35b34801561057957600080fd5b50610594600480360381019061058f91906137e9565b6111b8565b005b3480156105a257600080fd5b506105bd60048036038101906105b89190613660565b611361565b005b3480156105cb57600080fd5b506105e660048036038101906105e191906135cd565b61148c565b005b3480156105f457600080fd5b5061060f600480360381019061060a91906134ca565b6115a4565b60405161061c9190613525565b60405180910390f35b34801561063157600080fd5b5061064c600480360381019061064791906134ca565b61168f565b6040516106599190613525565b60405180910390f35b34801561066e57600080fd5b5061068960048036038101906106849190613765565b6116ad565b005b34801561069757600080fd5b506106a06117e9565b005b3480156106ae57600080fd5b506106c960048036038101906106c491906136d7565b6118af565b005b3480156106d757600080fd5b506106f260048036038101906106ed9190613765565b6119d1565b005b34801561070057600080fd5b50610709611b0d565b005b34801561071757600080fd5b50610732600480360381019061072d919061383c565b611bee565b60405161073f9190613586565b60405180910390f35b34801561075457600080fd5b5061075d611c75565b60405161076b92919061387c565b60405180910390f35b34801561078057600080fd5b5061079b60048036038101906107969190613765565b611cc6565b6040516107aa939291906138a5565b60405180910390f35b3480156107bf57600080fd5b506107c8611dbf565b6040516107d591906137ce565b60405180910390f35b3480156107ea57600080fd5b5061080560048036038101906108009190613765565b611de3565b005b6060600380546108169061390b565b80601f01602080910402602001604051908101604052809291908181526020018280546108429061390b565b801561088f5780601f106108645761010080835404028352916020019161088f565b820191906000526020600020905b81548152906001019060200180831161087257829003601f168201915b5050505050905090565b60006108ad6108a6611eda565b8484611ee2565b6001905092915050565b6000806000600560159054906101000a900460ff16925060065491506007549050909192565b6000600254905090565b6108ef611eda565b73ffffffffffffffffffffffffffffffffffffffff1661090d6110fc565b73ffffffffffffffffffffffffffffffffffffffff1614610963576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095a90613988565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc9282604051610a009190613525565b60405180910390a25050565b6000610a198484846120ab565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610a64611eda565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610ae4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610adb90613a1a565b60405180910390fd5b610af885610af0611eda565b858403611ee2565b60019150509392505050565b610b0c611eda565b73ffffffffffffffffffffffffffffffffffffffff16610b2a6110fc565b73ffffffffffffffffffffffffffffffffffffffff1614610b80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7790613988565b60405180910390fd5b8160128190555080601381905550601354601254610b9e9190613a69565b60118190555060646011541115610bea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be190613b0f565b60405180910390fd5b7fcb5f36df892836a2eaedc349de29a7581176990398ee185d16eaa8f6c1abd8f1601154601254601354604051610c2393929190613b2f565b60405180910390a15050565b60006012905090565b6000610cda610c45611eda565b848460016000610c53611eda565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610cd59190613a69565b611ee2565b6001905092915050565b610cec611eda565b73ffffffffffffffffffffffffffffffffffffffff16610d0a6110fc565b73ffffffffffffffffffffffffffffffffffffffff1614610d60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5790613988565b60405180910390fd5b6002811015610da4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9b90613bb2565b60405180910390fd5b6103e8610daf6108dd565b82610dba9190613bd2565b610dc49190613c43565b600a819055507fff3dd5e80294197918c284bbfc3dadd97d0b40ce92106110946329088f80068a600a54604051610dfb9190613586565b60405180910390a150565b610e0e611eda565b73ffffffffffffffffffffffffffffffffffffffff16610e2c6110fc565b73ffffffffffffffffffffffffffffffffffffffff1614610e82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7990613988565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051610f1f9190613525565b60405180910390a25050565b600080600080600080600e549550600f5494506010549350601154925060125491506013549050909192939495565b600c60009054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610fbd611eda565b73ffffffffffffffffffffffffffffffffffffffff16610fdb6110fc565b73ffffffffffffffffffffffffffffffffffffffff1614611031576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102890613988565b60405180910390fd5b61103b6000612b15565b565b6000806000600860009054906101000a900460ff1692506009549150600a549050909192565b61106b611eda565b73ffffffffffffffffffffffffffffffffffffffff166110896110fc565b73ffffffffffffffffffffffffffffffffffffffff16146110df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d690613988565b60405180910390fd5b80601960006101000a81548160ff02191690831515021790555050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546111359061390b565b80601f01602080910402602001604051908101604052809291908181526020018280546111619061390b565b80156111ae5780601f10611183576101008083540402835291602001916111ae565b820191906000526020600020905b81548152906001019060200180831161119157829003601f168201915b5050505050905090565b6111c0611eda565b73ffffffffffffffffffffffffffffffffffffffff166111de6110fc565b73ffffffffffffffffffffffffffffffffffffffff1614611234576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122b90613988565b60405180910390fd5b6001821015611278576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126f90613ce6565b60405180910390fd5b818110156112bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b290613d78565b60405180910390fd5b82600560156101000a81548160ff021916908315150217905550612710826112e16108dd565b6112eb9190613bd2565b6112f59190613c43565b600681905550612710816113076108dd565b6113119190613bd2565b61131b9190613c43565b6007819055507f52cd2cdb42ff0eeec9362d7ed5b04f64c8d022697128b5378fc51cea7e63c7798383836040516113549392919061354f565b60405180910390a1505050565b611369611eda565b73ffffffffffffffffffffffffffffffffffffffff166113876110fc565b73ffffffffffffffffffffffffffffffffffffffff16146113dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d490613988565b60405180910390fd5b81600f8190555080601081905550601054600f546113fb9190613a69565b600e819055506064600e541115611447576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143e90613e0a565b60405180910390fd5b7f38513c502b0ab4834ac1df9502b76f75dcf7092469782cfd0db7fe664388e25e600e54600f5460105460405161148093929190613b2f565b60405180910390a15050565b611494611eda565b73ffffffffffffffffffffffffffffffffffffffff166114b26110fc565b73ffffffffffffffffffffffffffffffffffffffff1614611508576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ff90613988565b60405180910390fd5b7f0000000000000000000000004a56a8b24639e5eaf9056aac745c93013f7d2d9373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611596576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158d90613e9c565b60405180910390fd5b6115a08282612bdb565b5050565b600080600160006115b3611eda565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611670576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166790613f2e565b60405180910390fd5b61168461167b611eda565b85858403611ee2565b600191505092915050565b60006116a361169c611eda565b84846120ab565b6001905092915050565b6116b5611eda565b73ffffffffffffffffffffffffffffffffffffffff166116d36110fc565b73ffffffffffffffffffffffffffffffffffffffff1614611729576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172090613988565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fb91dbdeaf34f885ccae2d8abc3967cb03c079b6af2c7944e3893fd29427d75e760405160405180910390a380600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6117f1611eda565b73ffffffffffffffffffffffffffffffffffffffff1661180f6110fc565b73ffffffffffffffffffffffffffffffffffffffff1614611865576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185c90613988565b60405180910390fd5b6000600860006101000a81548160ff021916908315150217905550427ff4eaa75eae08ae80c3daf791438dac1cff2cfd3b0bad2304ec7bbb067e50261660405160405180910390a2565b6118b7611eda565b73ffffffffffffffffffffffffffffffffffffffff166118d56110fc565b73ffffffffffffffffffffffffffffffffffffffff161461192b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192290613988565b60405180910390fd5b600581101561196f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196690613fc0565b60405180910390fd5b6103e861197a6108dd565b826119859190613bd2565b61198f9190613c43565b6009819055507f12528a3c61e0f3b2d6fc707a9fc58b1af86e252cad0d7f4c154ebeabb162dace6009546040516119c69190613586565b60405180910390a150565b6119d9611eda565b73ffffffffffffffffffffffffffffffffffffffff166119f76110fc565b73ffffffffffffffffffffffffffffffffffffffff1614611a4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4490613988565b60405180910390fd5b600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6760405160405180910390a380600c60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611b15611eda565b73ffffffffffffffffffffffffffffffffffffffff16611b336110fc565b73ffffffffffffffffffffffffffffffffffffffff1614611b89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8090613988565b60405180910390fd5b6001600c60006101000a81548160ff0219169083151502179055506001600560156101000a81548160ff021916908315150217905550427fb3da2db3dfc3778f99852546c6e9ab39ec253f9de7b0847afec61bd27878e92360405160405180910390a2565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600080600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915091509091565b6000806000601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169250601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169150601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690509193909250565b7f0000000000000000000000004a56a8b24639e5eaf9056aac745c93013f7d2d9381565b611deb611eda565b73ffffffffffffffffffffffffffffffffffffffff16611e096110fc565b73ffffffffffffffffffffffffffffffffffffffff1614611e5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5690613988565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611ece576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec590614052565b60405180910390fd5b611ed781612b15565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f48906140e4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611fc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb790614176565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161209e9190613586565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361211a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211190614208565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612189576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121809061429a565b60405180910390fd5b600081036121a25761219d83836000612c7c565b612b10565b600860009054906101000a900460ff161561269d576121bf6110fc565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561222d57506121fd6110fc565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122665750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122a0575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122b95750600560149054906101000a900460ff16155b1561269c57600c60009054906101000a900460ff166123b357601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806123735750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6123b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a99061432c565b60405180910390fd5b5b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156124565750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156124fd57600a548111156124a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612497906143be565b60405180910390fd5b6009546124ac83610f6d565b826124b79190613a69565b11156124f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ef9061442a565b60405180910390fd5b61269b565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125a05750601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156125ef57600a548111156125ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e1906144bc565b60405180910390fd5b61269a565b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166126995760095461264c83610f6d565b826126579190613a69565b1115612698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268f9061442a565b60405180910390fd5b5b5b5b5b5b60006126a830610f6d565b9050600060065482101590508080156126cd5750600560159054906101000a900460ff165b80156126e65750600560149054906101000a900460ff16155b801561273c5750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156127925750601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156127e85750601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561282d576001600560146101000a81548160ff02191690831515021790555061281183612efb565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806128e35750601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156128ed57600090505b60008115612b0057601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561295057506000601154115b156129ea5761297d606461296f601154886130f690919063ffffffff16565b61310c90919063ffffffff16565b9050601154601354826129909190613bd2565b61299a9190613c43565b601560008282546129ab9190613a69565b92505081905550601154601254826129c39190613bd2565b6129cd9190613c43565b601460008282546129de9190613a69565b92505081905550612adc565b601860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a4557506000600e54115b15612adb57612a726064612a64600e54886130f690919063ffffffff16565b61310c90919063ffffffff16565b9050600e5460105482612a859190613bd2565b612a8f9190613c43565b60156000828254612aa09190613a69565b92505081905550600e54600f5482612ab89190613bd2565b612ac29190613c43565b60146000828254612ad39190613a69565b925050819055505b5b6000811115612af157612af0873083612c7c565b5b8085612afd91906144dc565b94505b612b0b878787612c7c565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612ceb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ce290614208565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d519061429a565b60405180910390fd5b612d65838383613122565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612deb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612de290614582565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e7e9190613a69565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612ee29190613586565b60405180910390a3612ef5848484613127565b50505050565b6000612f0630610f6d565b905060008190506000808303612f1e575050506130f3565b600754831115612f2e5760075492505b601960009054906101000a900460ff168015612f555750600584612f529190613bd2565b83115b15612f6a57600584612f679190613bd2565b92505b60008390506000479050612f7d8261312c565b6000612f92824761336990919063ffffffff16565b90506000612fbd86612faf601554856130f690919063ffffffff16565b61310c90919063ffffffff16565b905060006014819055506000601581905550600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051613015906145d3565b60006040518083038185875af1925050503d8060008114613052576040519150601f19603f3d011682016040523d82523d6000602084013e613057565b606091505b505080955050600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516130a3906145d3565b60006040518083038185875af1925050503d80600081146130e0576040519150601f19603f3d011682016040523d82523d6000602084013e6130e5565b606091505b505080955050505050505050505b50565b600081836131049190613bd2565b905092915050565b6000818361311a9190613c43565b905092915050565b505050565b505050565b6000600267ffffffffffffffff811115613149576131486145e8565b5b6040519080825280602002602001820160405280156131775781602001602082028036833780820191505090505b509050308160008151811061318f5761318e614617565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613234573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613258919061465b565b8160018151811061326c5761326b614617565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506132d1307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611ee2565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161333395949392919061478b565b600060405180830381600087803b15801561334d57600080fd5b505af1158015613361573d6000803e3d6000fd5b505050505050565b6000818361337791906144dc565b905092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156133b957808201518184015260208101905061339e565b60008484015250505050565b6000601f19601f8301169050919050565b60006133e18261337f565b6133eb818561338a565b93506133fb81856020860161339b565b613404816133c5565b840191505092915050565b6000602082019050818103600083015261342981846133d6565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061346182613436565b9050919050565b61347181613456565b811461347c57600080fd5b50565b60008135905061348e81613468565b92915050565b6000819050919050565b6134a781613494565b81146134b257600080fd5b50565b6000813590506134c48161349e565b92915050565b600080604083850312156134e1576134e0613431565b5b60006134ef8582860161347f565b9250506020613500858286016134b5565b9150509250929050565b60008115159050919050565b61351f8161350a565b82525050565b600060208201905061353a6000830184613516565b92915050565b61354981613494565b82525050565b60006060820190506135646000830186613516565b6135716020830185613540565b61357e6040830184613540565b949350505050565b600060208201905061359b6000830184613540565b92915050565b6135aa8161350a565b81146135b557600080fd5b50565b6000813590506135c7816135a1565b92915050565b600080604083850312156135e4576135e3613431565b5b60006135f28582860161347f565b9250506020613603858286016135b8565b9150509250929050565b60008060006060848603121561362657613625613431565b5b60006136348682870161347f565b93505060206136458682870161347f565b9250506040613656868287016134b5565b9150509250925092565b6000806040838503121561367757613676613431565b5b6000613685858286016134b5565b9250506020613696858286016134b5565b9150509250929050565b600060ff82169050919050565b6136b6816136a0565b82525050565b60006020820190506136d160008301846136ad565b92915050565b6000602082840312156136ed576136ec613431565b5b60006136fb848285016134b5565b91505092915050565b600060c0820190506137196000830189613540565b6137266020830188613540565b6137336040830187613540565b6137406060830186613540565b61374d6080830185613540565b61375a60a0830184613540565b979650505050505050565b60006020828403121561377b5761377a613431565b5b60006137898482850161347f565b91505092915050565b6000602082840312156137a8576137a7613431565b5b60006137b6848285016135b8565b91505092915050565b6137c881613456565b82525050565b60006020820190506137e360008301846137bf565b92915050565b60008060006060848603121561380257613801613431565b5b6000613810868287016135b8565b9350506020613821868287016134b5565b9250506040613832868287016134b5565b9150509250925092565b6000806040838503121561385357613852613431565b5b60006138618582860161347f565b92505060206138728582860161347f565b9150509250929050565b600060408201905061389160008301856137bf565b61389e60208301846137bf565b9392505050565b60006060820190506138ba6000830186613516565b6138c76020830185613516565b6138d46040830184613516565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061392357607f821691505b602082108103613936576139356138dc565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061397260208361338a565b915061397d8261393c565b602082019050919050565b600060208201905081810360008301526139a181613965565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613a0460288361338a565b9150613a0f826139a8565b604082019050919050565b60006020820190508181036000830152613a33816139f7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613a7482613494565b9150613a7f83613494565b9250828201905080821115613a9757613a96613a3a565b5b92915050565b7f546f74616c2073656c6c206665652063616e6e6f74206265206869676865722060008201527f7468616e20313030250000000000000000000000000000000000000000000000602082015250565b6000613af960298361338a565b9150613b0482613a9d565b604082019050919050565b60006020820190508181036000830152613b2881613aec565b9050919050565b6000606082019050613b446000830186613540565b613b516020830185613540565b613b5e6040830184613540565b949350505050565b7f43616e6e6f7420736574206d61785478206c6f776572207468616e20302e3225600082015250565b6000613b9c60208361338a565b9150613ba782613b66565b602082019050919050565b60006020820190508181036000830152613bcb81613b8f565b9050919050565b6000613bdd82613494565b9150613be883613494565b9250828202613bf681613494565b91508282048414831517613c0d57613c0c613a3a565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613c4e82613494565b9150613c5983613494565b925082613c6957613c68613c14565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e30312520746f74616c20737570706c792e000000000000000000000000602082015250565b6000613cd060348361338a565b9150613cdb82613c74565b604082019050919050565b60006020820190508181036000830152613cff81613cc3565b9050919050565b7f6d6178696d756d20616d6f756e742063616e742062652068696768657220746860008201527f616e206d696e696d756d00000000000000000000000000000000000000000000602082015250565b6000613d62602a8361338a565b9150613d6d82613d06565b604082019050919050565b60006020820190508181036000830152613d9181613d55565b9050919050565b7f546f74616c20627579206665652063616e6e6f7420626520686967686572207460008201527f68616e2031303025000000000000000000000000000000000000000000000000602082015250565b6000613df460288361338a565b9150613dff82613d98565b604082019050919050565b60006020820190508181036000830152613e2381613de7565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613e8660398361338a565b9150613e9182613e2a565b604082019050919050565b60006020820190508181036000830152613eb581613e79565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613f1860258361338a565b9150613f2382613ebc565b604082019050919050565b60006020820190508181036000830152613f4781613f0b565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000613faa60248361338a565b9150613fb582613f4e565b604082019050919050565b60006020820190508181036000830152613fd981613f9d565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061403c60268361338a565b915061404782613fe0565b604082019050919050565b6000602082019050818103600083015261406b8161402f565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006140ce60248361338a565b91506140d982614072565b604082019050919050565b600060208201905081810360008301526140fd816140c1565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061416060228361338a565b915061416b82614104565b604082019050919050565b6000602082019050818103600083015261418f81614153565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006141f260258361338a565b91506141fd82614196565b604082019050919050565b60006020820190508181036000830152614221816141e5565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061428460238361338a565b915061428f82614228565b604082019050919050565b600060208201905081810360008301526142b381614277565b9050919050565b7f5f7472616e736665723a3a2054726164696e67206973206e6f7420616374697660008201527f652e000000000000000000000000000000000000000000000000000000000000602082015250565b600061431660228361338a565b9150614321826142ba565b604082019050919050565b6000602082019050818103600083015261434581614309565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d617854782e0000000000000000000000000000000000000000000000000000602082015250565b60006143a860268361338a565b91506143b38261434c565b604082019050919050565b600060208201905081810360008301526143d78161439b565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061441460138361338a565b915061441f826143de565b602082019050919050565b6000602082019050818103600083015261444381614407565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d617854782e00000000000000000000000000000000000000000000000000602082015250565b60006144a660278361338a565b91506144b18261444a565b604082019050919050565b600060208201905081810360008301526144d581614499565b9050919050565b60006144e782613494565b91506144f283613494565b925082820390508181111561450a57614509613a3a565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061456c60268361338a565b915061457782614510565b604082019050919050565b6000602082019050818103600083015261459b8161455f565b9050919050565b600081905092915050565b50565b60006145bd6000836145a2565b91506145c8826145ad565b600082019050919050565b60006145de826145b0565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061465581613468565b92915050565b60006020828403121561467157614670613431565b5b600061467f84828501614646565b91505092915050565b6000819050919050565b6000819050919050565b60006146b76146b26146ad84614688565b614692565b613494565b9050919050565b6146c78161469c565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61470281613456565b82525050565b600061471483836146f9565b60208301905092915050565b6000602082019050919050565b6000614738826146cd565b61474281856146d8565b935061474d836146e9565b8060005b8381101561477e5781516147658882614708565b975061477083614720565b925050600181019050614751565b5085935050505092915050565b600060a0820190506147a06000830188613540565b6147ad60208301876146be565b81810360408301526147bf818661472d565b90506147ce60608301856137bf565b6147db6080830184613540565b969550505050505056fea2646970667358221220488b2f09106bfd0ff5451105be414ed586a8af458283db7c5d85bf8940e75c7864736f6c63430008130033

Deployed Bytecode Sourcemap

25426:20294:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11024:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13257:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36882:352;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;12144:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32959:191;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13929:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34126:449;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11986:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14863:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31964:243;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34824:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38788:579;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;25999:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12315:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22363:103;;;;;;;;;;;;;:::i;:::-;;37581:304;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;44535:79;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21712:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11243:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31167:554;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33437:400;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35309:300;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15652:475;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12671:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36353:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30566:137;;;;;;;;;;;;;:::i;:::-;;32425:266;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35995:178;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30249:162;;;;;;;;;;;;;:::i;:::-;;12934:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38117:187;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;39827:448;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;25545:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22621:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11024:100;11078:13;11111:5;11104:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11024:100;:::o;13257:194::-;13365:4;13382:39;13391:12;:10;:12::i;:::-;13405:7;13414:6;13382:8;:39::i;:::-;13439:4;13432:11;;13257:194;;;;:::o;36882:352::-;36969:21;37005:25;37045;37117:15;;;;;;;;;;;37098:34;;37163:16;;37143:36;;37210:16;;37190:36;;36882:352;;;:::o;12144:108::-;12205:7;12232:12;;12225:19;;12144:108;:::o;32959:191::-;21943:12;:10;:12::i;:::-;21932:23;;:7;:5;:7::i;:::-;:23;;;21924:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33091:4:::1;33061:19;:27;33081:6;33061:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;33129:6;33111:31;;;33137:4;33111:31;;;;;;:::i;:::-;;;;;;;;32959:191:::0;;:::o;13929:529::-;14069:4;14086:36;14096:6;14104:9;14115:6;14086:9;:36::i;:::-;14135:24;14162:11;:19;14174:6;14162:19;;;;;;;;;;;;;;;:33;14182:12;:10;:12::i;:::-;14162:33;;;;;;;;;;;;;;;;14135:60;;14248:6;14228:16;:26;;14206:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;14358:57;14367:6;14375:12;:10;:12::i;:::-;14408:6;14389:16;:25;14358:8;:57::i;:::-;14446:4;14439:11;;;13929:529;;;;;:::o;34126:449::-;21943:12;:10;:12::i;:::-;21932:23;;:7;:5;:7::i;:::-;:23;;;21924:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34261:13:::1;34242:16;:32;;;;34302:7;34285:14;:24;;;;34354:14;;34335:16;;:33;;;;:::i;:::-;34320:12;:48;;;;34417:3;34401:12;;:19;;34379:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;34505:62;34520:12;;34534:16;;34552:14;;34505:62;;;;;;;;:::i;:::-;;;;;;;;34126:449:::0;;:::o;11986:93::-;12044:5;12069:2;12062:9;;11986:93;:::o;14863:290::-;14976:4;14993:130;15016:12;:10;:12::i;:::-;15043:7;15102:10;15065:11;:25;15077:12;:10;:12::i;:::-;15065:25;;;;;;;;;;;;;;;:34;15091:7;15065:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;14993:8;:130::i;:::-;15141:4;15134:11;;14863:290;;;;:::o;31964:243::-;21943:12;:10;:12::i;:::-;21932:23;;:7;:5;:7::i;:::-;:23;;;21924:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32069:1:::1;32052:13;:18;;32044:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;32160:4;32143:13;:11;:13::i;:::-;32127;:29;;;;:::i;:::-;32126:38;;;;:::i;:::-;32118:5;:46;;;;32180:19;32193:5;;32180:19;;;;;;:::i;:::-;;;;;;;;31964:243:::0;:::o;34824:174::-;21943:12;:10;:12::i;:::-;21932:23;;:7;:5;:7::i;:::-;:23;;;21924:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34932:8:::1;34903:17;:26;34921:7;34903:26;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;34972:7;34956:34;;;34981:8;34956:34;;;;;;:::i;:::-;;;;;;;;34824:174:::0;;:::o;38788:579::-;38880:20;38915:24;38954:22;38991:21;39027:25;39067:23;39133:11;;39118:26;;39174:15;;39155:34;;39217:13;;39200:30;;39257:12;;39241:28;;39300:16;;39280:36;;39345:14;;39327:32;;38788:579;;;;;;:::o;25999:34::-;;;;;;;;;;;;;:::o;12315:143::-;12405:7;12432:9;:18;12442:7;12432:18;;;;;;;;;;;;;;;;12425:25;;12315:143;;;:::o;22363:103::-;21943:12;:10;:12::i;:::-;21932:23;;:7;:5;:7::i;:::-;:23;;;21924:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22428:30:::1;22455:1;22428:18;:30::i;:::-;22363:103::o:0;37581:304::-;37680:19;37714:18;37747:14;37806:13;;;;;;;;;;;37789:30;;37843:9;;37830:22;;37872:5;;37863:14;;37581:304;;;:::o;44535:79::-;21943:12;:10;:12::i;:::-;21932:23;;:7;:5;:7::i;:::-;:23;;;21924:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44601:5:::1;44594:4;;:12;;;;;;;;;;;;;;;;;;44535:79:::0;:::o;21712:87::-;21758:7;21785:6;;;;;;;;;;;21778:13;;21712:87;:::o;11243:104::-;11299:13;11332:7;11325:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11243:104;:::o;31167:554::-;21943:12;:10;:12::i;:::-;21932:23;;:7;:5;:7::i;:::-;:23;;;21924:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31336:1:::1;31328:4;:9;;31306:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;31444:4;31436;:12;;31428:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31526:7;31508:15;;:25;;;;;;;;;;;;;;;;;;31588:5;31580:4;31564:13;:11;:13::i;:::-;:20;;;;:::i;:::-;31563:30;;;;:::i;:::-;31544:16;:49;;;;31648:5;31640:4;31624:13;:11;:13::i;:::-;:20;;;;:::i;:::-;31623:30;;;;:::i;:::-;31604:16;:49;;;;31669:44;31693:7;31702:4;31708;31669:44;;;;;;;;:::i;:::-;;;;;;;;31167:554:::0;;;:::o;33437:400::-;21943:12;:10;:12::i;:::-;21932:23;;:7;:5;:7::i;:::-;:23;;;21924:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33570:13:::1;33552:15;:31;;;;33610:7;33594:13;:23;;;;33660:13;;33642:15;;:31;;;;:::i;:::-;33628:11;:45;;;;33707:3;33692:11;;:18;;33684:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;33771:58;33785:11;;33798:15;;33815:13;;33771:58;;;;;;;;:::i;:::-;;;;;;;;33437:400:::0;;:::o;35309:300::-;21943:12;:10;:12::i;:::-;21932:23;;:7;:5;:7::i;:::-;:23;;;21924:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35455:7:::1;35447:15;;:4;:15;;::::0;35425:122:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;35560:41;35589:4;35595:5;35560:28;:41::i;:::-;35309:300:::0;;:::o;15652:475::-;15770:4;15787:24;15814:11;:25;15826:12;:10;:12::i;:::-;15814:25;;;;;;;;;;;;;;;:34;15840:7;15814:34;;;;;;;;;;;;;;;;15787:61;;15901:15;15881:16;:35;;15859:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;16017:67;16026:12;:10;:12::i;:::-;16040:7;16068:15;16049:16;:34;16017:8;:67::i;:::-;16115:4;16108:11;;;15652:475;;;;:::o;12671:200::-;12782:4;12799:42;12809:12;:10;:12::i;:::-;12823:9;12834:6;12799:9;:42::i;:::-;12859:4;12852:11;;12671:200;;;;:::o;36353:170::-;21943:12;:10;:12::i;:::-;21932:23;;:7;:5;:7::i;:::-;:23;;;21924:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36465:13:::1;;;;;;;;;;;36433:46;;36454:9;36433:46;;;;;;;;;;;;36506:9;36490:13;;:25;;;;;;;;;;;;;;;;;;36353:170:::0;:::o;30566:137::-;21943:12;:10;:12::i;:::-;21932:23;;:7;:5;:7::i;:::-;:23;;;21924:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30644:5:::1;30628:13;;:21;;;;;;;;;;;;;;;;;;30679:15;30665:30;;;;;;;;;;30566:137::o:0;32425:266::-;21943:12;:10;:12::i;:::-;21932:23;;:7;:5;:7::i;:::-;:23;;;21924:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32533:1:::1;32512:17;:22;;32504:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;32636:4;32619:13;:11;:13::i;:::-;32599:17;:33;;;;:::i;:::-;32598:42;;;;:::i;:::-;32586:9;:54;;;;32656:27;32673:9;;32656:27;;;;;;:::i;:::-;;;;;;;;32425:266:::0;:::o;35995:178::-;21943:12;:10;:12::i;:::-;21932:23;;:7;:5;:7::i;:::-;:23;;;21924:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36111:15:::1;;;;;;;;;;;36077:50;;36100:9;36077:50;;;;;;;;;;;;36156:9;36138:15;;:27;;;;;;;;;;;;;;;;;;35995:178:::0;:::o;30249:162::-;21943:12;:10;:12::i;:::-;21932:23;;:7;:5;:7::i;:::-;:23;;;21924:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30319:4:::1;30302:14;;:21;;;;;;;;;;;;;;;;;;30352:4;30334:15;;:22;;;;;;;;;;;;;;;;;;30387:15;30372:31;;;;;;;;;;30249:162::o:0;12934:176::-;13048:7;13075:11;:18;13087:5;13075:18;;;;;;;;;;;;;;;:27;13094:7;13075:27;;;;;;;;;;;;;;;;13068:34;;12934:176;;;;:::o;38117:187::-;38191:24;38217:22;38265:15;;;;;;;;;;;38282:13;;;;;;;;;;;38257:39;;;;38117:187;;:::o;39827:448::-;39947:23;39985:25;40025:31;40105:17;:26;40123:7;40105:26;;;;;;;;;;;;;;;;;;;;;;;;;40084:47;;40165:19;:28;40185:7;40165:28;;;;;;;;;;;;;;;;;;;;;;;;;40142:51;;40233:25;:34;40259:7;40233:34;;;;;;;;;;;;;;;;;;;;;;;;;40204:63;;39827:448;;;;;:::o;25545:32::-;;;:::o;22621:238::-;21943:12;:10;:12::i;:::-;21932:23;;:7;:5;:7::i;:::-;:23;;;21924:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22744:1:::1;22724:22;;:8;:22;;::::0;22702:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22823:28;22842:8;22823:18;:28::i;:::-;22621:238:::0;:::o;10030:98::-;10083:7;10110:10;10103:17;;10030:98;:::o;19435:380::-;19588:1;19571:19;;:5;:19;;;19563:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19669:1;19650:21;;:7;:21;;;19642:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19753:6;19723:11;:18;19735:5;19723:18;;;;;;;;;;;;;;;:27;19742:7;19723:27;;;;;;;;;;;;;;;:36;;;;19791:7;19775:32;;19784:5;19775:32;;;19800:6;19775:32;;;;;;:::i;:::-;;;;;;;;19435:380;;;:::o;40283:3640::-;40431:1;40415:18;;:4;:18;;;40407:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40508:1;40494:16;;:2;:16;;;40486:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;40577:1;40567:6;:11;40563:93;;40595:28;40611:4;40617:2;40621:1;40595:15;:28::i;:::-;40638:7;;40563:93;40672:13;;;;;;;;;;;40668:1564;;;40732:7;:5;:7::i;:::-;40724:15;;:4;:15;;;;:49;;;;;40766:7;:5;:7::i;:::-;40760:13;;:2;:13;;;;40724:49;:86;;;;;40808:1;40794:16;;:2;:16;;;;40724:86;:128;;;;;40845:6;40831:21;;:2;:21;;;;40724:128;:158;;;;;40874:8;;;;;;;;;;;40873:9;40724:158;40702:1519;;;40922:14;;;;;;;;;;;40917:232;;40995:17;:23;41013:4;40995:23;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;41022:17;:21;41040:2;41022:21;;;;;;;;;;;;;;;;;;;;;;;;;40995:48;40961:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;40917:232;41223:25;:31;41249:4;41223:31;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;;41259:19;:23;41279:2;41259:23;;;;;;;;;;;;;;;;;;;;;;;;;41258:24;41223:59;41197:1009;;;41369:5;;41359:6;:15;;41325:139;;;;;;;;;;;;:::i;:::-;;;;;;;;;41547:9;;41530:13;41540:2;41530:9;:13::i;:::-;41521:6;:22;;;;:::i;:::-;:35;;41487:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;41197:1009;;;41725:25;:29;41751:2;41725:29;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;;41759:19;:25;41779:4;41759:25;;;;;;;;;;;;;;;;;;;;;;;;;41758:26;41725:59;41699:507;;;41871:5;;41861:6;:15;;41827:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;41699:507;;;41998:19;:23;42018:2;41998:23;;;;;;;;;;;;;;;;;;;;;;;;;41993:213;;42106:9;;42089:13;42099:2;42089:9;:13::i;:::-;42080:6;:22;;;;:::i;:::-;:35;;42046:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;41993:213;41699:507;41197:1009;40702:1519;40668:1564;42244:28;42275:24;42293:4;42275:9;:24::i;:::-;42244:55;;42312:12;42351:16;;42327:20;:40;;42312:55;;42398:7;:39;;;;;42422:15;;;;;;;;;;;42398:39;:65;;;;;42455:8;;;;;;;;;;;42454:9;42398:65;:114;;;;;42481:25;:31;42507:4;42481:31;;;;;;;;;;;;;;;;;;;;;;;;;42480:32;42398:114;:155;;;;;42530:17;:23;42548:4;42530:23;;;;;;;;;;;;;;;;;;;;;;;;;42529:24;42398:155;:194;;;;;42571:17;:21;42589:2;42571:21;;;;;;;;;;;;;;;;;;;;;;;;;42570:22;42398:194;42380:332;;;42630:4;42619:8;;:15;;;;;;;;;;;;;;;;;;42651:16;42660:6;42651:8;:16::i;:::-;42695:5;42684:8;;:16;;;;;;;;;;;;;;;;;;42380:332;42724:12;42740:8;;;;;;;;;;;42739:9;42724:24;;42850:17;:23;42868:4;42850:23;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;42877:17;:21;42895:2;42877:21;;;;;;;;;;;;;;;;;;;;;;;;;42850:48;42846:96;;;42925:5;42915:15;;42846:96;42954:12;43059:7;43055:815;;;43111:25;:29;43137:2;43111:29;;;;;;;;;;;;;;;;;;;;;;;;;:49;;;;;43159:1;43144:12;;:16;43111:49;43107:614;;;43188:33;43217:3;43188:24;43199:12;;43188:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;43181:40;;43286:12;;43268:14;;43261:4;:21;;;;:::i;:::-;43260:38;;;;:::i;:::-;43240:16;;:58;;;;;;;:::i;:::-;;;;;;;;43367:12;;43347:16;;43340:4;:23;;;;:::i;:::-;43339:40;;;;:::i;:::-;43317:18;;:62;;;;;;;:::i;:::-;;;;;;;;43107:614;;;43441:25;:31;43467:4;43441:31;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;43490:1;43476:11;;:15;43441:50;43437:284;;;43519:32;43547:3;43519:23;43530:11;;43519:6;:10;;:23;;;;:::i;:::-;:27;;:32;;;;:::i;:::-;43512:39;;43615:11;;43598:13;;43591:4;:20;;;;:::i;:::-;43590:36;;;;:::i;:::-;43570:16;;:56;;;;;;;:::i;:::-;;;;;;;;43694:11;;43675:15;;43668:4;:22;;;;:::i;:::-;43667:38;;;;:::i;:::-;43645:18;;:60;;;;;;;:::i;:::-;;;;;;;;43437:284;43107:614;43748:1;43741:4;:8;43737:91;;;43770:42;43786:4;43800;43807;43770:15;:42::i;:::-;43737:91;43854:4;43844:14;;;;;:::i;:::-;;;43055:815;43882:33;43898:4;43904:2;43908:6;43882:15;:33::i;:::-;40396:3527;;;;40283:3640;;;;:::o;23019:191::-;23093:16;23112:6;;;;;;;;;;;23093:25;;23138:8;23129:6;;:17;;;;;;;;;;;;;;;;;;23193:8;23162:40;;23183:8;23162:40;;;;;;;;;;;;23082:128;23019:191;:::o;35617:188::-;35734:5;35700:25;:31;35726:4;35700:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;35791:5;35757:40;;35785:4;35757:40;;;;;;;;;;;;35617:188;;:::o;16617:770::-;16775:1;16757:20;;:6;:20;;;16749:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;16859:1;16838:23;;:9;:23;;;16830:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;16914:47;16935:6;16943:9;16954:6;16914:20;:47::i;:::-;16974:21;16998:9;:17;17008:6;16998:17;;;;;;;;;;;;;;;;16974:41;;17065:6;17048:13;:23;;17026:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;17209:6;17193:13;:22;17173:9;:17;17183:6;17173:17;;;;;;;;;;;;;;;:42;;;;17261:6;17237:9;:20;17247:9;17237:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;17302:9;17285:35;;17294:6;17285:35;;;17313:6;17285:35;;;;;;:::i;:::-;;;;;;;;17333:46;17353:6;17361:9;17372:6;17333:19;:46::i;:::-;16738:649;16617:770;;;:::o;44622:1095::-;44675:23;44701:24;44719:4;44701:9;:24::i;:::-;44675:50;;44736:25;44764:15;44736:43;;44790:12;44838:1;44819:15;:20;44815:59;;44856:7;;;;;44815:59;44908:16;;44890:15;:34;44886:101;;;44959:16;;44941:34;;44886:101;45003:4;;;;;;;;;;;:36;;;;;45038:1;45029:6;:10;;;;:::i;:::-;45011:15;:28;45003:36;44999:97;;;45083:1;45074:6;:10;;;;:::i;:::-;45056:28;;44999:97;45108:26;45137:15;45108:44;;45165:25;45193:21;45165:49;;45227:36;45244:18;45227:16;:36::i;:::-;45276:18;45297:44;45323:17;45297:21;:25;;:44;;;;:::i;:::-;45276:65;;45354:17;45374:79;45425:17;45374:32;45389:16;;45374:10;:14;;:32;;;;:::i;:::-;:36;;:79;;;;:::i;:::-;45354:99;;45487:1;45466:18;:22;;;;45518:1;45499:16;:20;;;;45554:13;;;;;;;;;;;45546:27;;45581:9;45546:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45532:63;;;;;45630:15;;;;;;;;;;;45622:29;;45673:21;45622:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45608:101;;;;;44664:1053;;;;;;;44622:1095;;:::o;3389:98::-;3447:7;3478:1;3474;:5;;;;:::i;:::-;3467:12;;3389:98;;;;:::o;3788:::-;3846:7;3877:1;3873;:5;;;;:::i;:::-;3866:12;;3788:98;;;;:::o;20415:125::-;;;;:::o;21144:124::-;;;;:::o;43931:571::-;44057:21;44095:1;44081:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44057:40;;44126:4;44108;44113:1;44108:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;44152:9;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44142:4;44147:1;44142:7;;;;;;;;:::i;:::-;;;;;;;:26;;;;;;;;;;;44181:56;44198:4;44213:9;44225:11;44181:8;:56::i;:::-;44276:9;:60;;;44351:11;44377:1;44421:4;44448;44468:15;44276:218;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43986:516;43931:571;:::o;3032:98::-;3090:7;3121:1;3117;:5;;;;:::i;:::-;3110:12;;3032:98;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:430::-;3713:4;3751:2;3740:9;3736:18;3728:26;;3764:65;3826:1;3815:9;3811:17;3802:6;3764:65;:::i;:::-;3839:72;3907:2;3896:9;3892:18;3883:6;3839:72;:::i;:::-;3921;3989:2;3978:9;3974:18;3965:6;3921:72;:::i;:::-;3570:430;;;;;;:::o;4006:222::-;4099:4;4137:2;4126:9;4122:18;4114:26;;4150:71;4218:1;4207:9;4203:17;4194:6;4150:71;:::i;:::-;4006:222;;;;:::o;4234:116::-;4304:21;4319:5;4304:21;:::i;:::-;4297:5;4294:32;4284:60;;4340:1;4337;4330:12;4284:60;4234:116;:::o;4356:133::-;4399:5;4437:6;4424:20;4415:29;;4453:30;4477:5;4453:30;:::i;:::-;4356:133;;;;:::o;4495:468::-;4560:6;4568;4617:2;4605:9;4596:7;4592:23;4588:32;4585:119;;;4623:79;;:::i;:::-;4585:119;4743:1;4768:53;4813:7;4804:6;4793:9;4789:22;4768:53;:::i;:::-;4758:63;;4714:117;4870:2;4896:50;4938:7;4929:6;4918:9;4914:22;4896:50;:::i;:::-;4886:60;;4841:115;4495:468;;;;;:::o;4969:619::-;5046:6;5054;5062;5111:2;5099:9;5090:7;5086:23;5082:32;5079:119;;;5117:79;;:::i;:::-;5079:119;5237:1;5262:53;5307:7;5298:6;5287:9;5283:22;5262:53;:::i;:::-;5252:63;;5208:117;5364:2;5390:53;5435:7;5426:6;5415:9;5411:22;5390:53;:::i;:::-;5380:63;;5335:118;5492:2;5518:53;5563:7;5554:6;5543:9;5539:22;5518:53;:::i;:::-;5508:63;;5463:118;4969:619;;;;;:::o;5594:474::-;5662:6;5670;5719:2;5707:9;5698:7;5694:23;5690:32;5687:119;;;5725:79;;:::i;:::-;5687:119;5845:1;5870:53;5915:7;5906:6;5895:9;5891:22;5870:53;:::i;:::-;5860:63;;5816:117;5972:2;5998:53;6043:7;6034:6;6023:9;6019:22;5998:53;:::i;:::-;5988:63;;5943:118;5594:474;;;;;:::o;6074:86::-;6109:7;6149:4;6142:5;6138:16;6127:27;;6074:86;;;:::o;6166:112::-;6249:22;6265:5;6249:22;:::i;:::-;6244:3;6237:35;6166:112;;:::o;6284:214::-;6373:4;6411:2;6400:9;6396:18;6388:26;;6424:67;6488:1;6477:9;6473:17;6464:6;6424:67;:::i;:::-;6284:214;;;;:::o;6504:329::-;6563:6;6612:2;6600:9;6591:7;6587:23;6583:32;6580:119;;;6618:79;;:::i;:::-;6580:119;6738:1;6763:53;6808:7;6799:6;6788:9;6784:22;6763:53;:::i;:::-;6753:63;;6709:117;6504:329;;;;:::o;6839:775::-;7072:4;7110:3;7099:9;7095:19;7087:27;;7124:71;7192:1;7181:9;7177:17;7168:6;7124:71;:::i;:::-;7205:72;7273:2;7262:9;7258:18;7249:6;7205:72;:::i;:::-;7287;7355:2;7344:9;7340:18;7331:6;7287:72;:::i;:::-;7369;7437:2;7426:9;7422:18;7413:6;7369:72;:::i;:::-;7451:73;7519:3;7508:9;7504:19;7495:6;7451:73;:::i;:::-;7534;7602:3;7591:9;7587:19;7578:6;7534:73;:::i;:::-;6839:775;;;;;;;;;:::o;7620:329::-;7679:6;7728:2;7716:9;7707:7;7703:23;7699:32;7696:119;;;7734:79;;:::i;:::-;7696:119;7854:1;7879:53;7924:7;7915:6;7904:9;7900:22;7879:53;:::i;:::-;7869:63;;7825:117;7620:329;;;;:::o;7955:323::-;8011:6;8060:2;8048:9;8039:7;8035:23;8031:32;8028:119;;;8066:79;;:::i;:::-;8028:119;8186:1;8211:50;8253:7;8244:6;8233:9;8229:22;8211:50;:::i;:::-;8201:60;;8157:114;7955:323;;;;:::o;8284:118::-;8371:24;8389:5;8371:24;:::i;:::-;8366:3;8359:37;8284:118;;:::o;8408:222::-;8501:4;8539:2;8528:9;8524:18;8516:26;;8552:71;8620:1;8609:9;8605:17;8596:6;8552:71;:::i;:::-;8408:222;;;;:::o;8636:613::-;8710:6;8718;8726;8775:2;8763:9;8754:7;8750:23;8746:32;8743:119;;;8781:79;;:::i;:::-;8743:119;8901:1;8926:50;8968:7;8959:6;8948:9;8944:22;8926:50;:::i;:::-;8916:60;;8872:114;9025:2;9051:53;9096:7;9087:6;9076:9;9072:22;9051:53;:::i;:::-;9041:63;;8996:118;9153:2;9179:53;9224:7;9215:6;9204:9;9200:22;9179:53;:::i;:::-;9169:63;;9124:118;8636:613;;;;;:::o;9255:474::-;9323:6;9331;9380:2;9368:9;9359:7;9355:23;9351:32;9348:119;;;9386:79;;:::i;:::-;9348:119;9506:1;9531:53;9576:7;9567:6;9556:9;9552:22;9531:53;:::i;:::-;9521:63;;9477:117;9633:2;9659:53;9704:7;9695:6;9684:9;9680:22;9659:53;:::i;:::-;9649:63;;9604:118;9255:474;;;;;:::o;9735:332::-;9856:4;9894:2;9883:9;9879:18;9871:26;;9907:71;9975:1;9964:9;9960:17;9951:6;9907:71;:::i;:::-;9988:72;10056:2;10045:9;10041:18;10032:6;9988:72;:::i;:::-;9735:332;;;;;:::o;10073:406::-;10204:4;10242:2;10231:9;10227:18;10219:26;;10255:65;10317:1;10306:9;10302:17;10293:6;10255:65;:::i;:::-;10330:66;10392:2;10381:9;10377:18;10368:6;10330:66;:::i;:::-;10406;10468:2;10457:9;10453:18;10444:6;10406:66;:::i;:::-;10073:406;;;;;;:::o;10485:180::-;10533:77;10530:1;10523:88;10630:4;10627:1;10620:15;10654:4;10651:1;10644:15;10671:320;10715:6;10752:1;10746:4;10742:12;10732:22;;10799:1;10793:4;10789:12;10820:18;10810:81;;10876:4;10868:6;10864:17;10854:27;;10810:81;10938:2;10930:6;10927:14;10907:18;10904:38;10901:84;;10957:18;;:::i;:::-;10901:84;10722:269;10671:320;;;:::o;10997:182::-;11137:34;11133:1;11125:6;11121:14;11114:58;10997:182;:::o;11185:366::-;11327:3;11348:67;11412:2;11407:3;11348:67;:::i;:::-;11341:74;;11424:93;11513:3;11424:93;:::i;:::-;11542:2;11537:3;11533:12;11526:19;;11185:366;;;:::o;11557:419::-;11723:4;11761:2;11750:9;11746:18;11738:26;;11810:9;11804:4;11800:20;11796:1;11785:9;11781:17;11774:47;11838:131;11964:4;11838:131;:::i;:::-;11830:139;;11557:419;;;:::o;11982:227::-;12122:34;12118:1;12110:6;12106:14;12099:58;12191:10;12186:2;12178:6;12174:15;12167:35;11982:227;:::o;12215:366::-;12357:3;12378:67;12442:2;12437:3;12378:67;:::i;:::-;12371:74;;12454:93;12543:3;12454:93;:::i;:::-;12572:2;12567:3;12563:12;12556:19;;12215:366;;;:::o;12587:419::-;12753:4;12791:2;12780:9;12776:18;12768:26;;12840:9;12834:4;12830:20;12826:1;12815:9;12811:17;12804:47;12868:131;12994:4;12868:131;:::i;:::-;12860:139;;12587:419;;;:::o;13012:180::-;13060:77;13057:1;13050:88;13157:4;13154:1;13147:15;13181:4;13178:1;13171:15;13198:191;13238:3;13257:20;13275:1;13257:20;:::i;:::-;13252:25;;13291:20;13309:1;13291:20;:::i;:::-;13286:25;;13334:1;13331;13327:9;13320:16;;13355:3;13352:1;13349:10;13346:36;;;13362:18;;:::i;:::-;13346:36;13198:191;;;;:::o;13395:228::-;13535:34;13531:1;13523:6;13519:14;13512:58;13604:11;13599:2;13591:6;13587:15;13580:36;13395:228;:::o;13629:366::-;13771:3;13792:67;13856:2;13851:3;13792:67;:::i;:::-;13785:74;;13868:93;13957:3;13868:93;:::i;:::-;13986:2;13981:3;13977:12;13970:19;;13629:366;;;:::o;14001:419::-;14167:4;14205:2;14194:9;14190:18;14182:26;;14254:9;14248:4;14244:20;14240:1;14229:9;14225:17;14218:47;14282:131;14408:4;14282:131;:::i;:::-;14274:139;;14001:419;;;:::o;14426:442::-;14575:4;14613:2;14602:9;14598:18;14590:26;;14626:71;14694:1;14683:9;14679:17;14670:6;14626:71;:::i;:::-;14707:72;14775:2;14764:9;14760:18;14751:6;14707:72;:::i;:::-;14789;14857:2;14846:9;14842:18;14833:6;14789:72;:::i;:::-;14426:442;;;;;;:::o;14874:182::-;15014:34;15010:1;15002:6;14998:14;14991:58;14874:182;:::o;15062:366::-;15204:3;15225:67;15289:2;15284:3;15225:67;:::i;:::-;15218:74;;15301:93;15390:3;15301:93;:::i;:::-;15419:2;15414:3;15410:12;15403:19;;15062:366;;;:::o;15434:419::-;15600:4;15638:2;15627:9;15623:18;15615:26;;15687:9;15681:4;15677:20;15673:1;15662:9;15658:17;15651:47;15715:131;15841:4;15715:131;:::i;:::-;15707:139;;15434:419;;;:::o;15859:410::-;15899:7;15922:20;15940:1;15922:20;:::i;:::-;15917:25;;15956:20;15974:1;15956:20;:::i;:::-;15951:25;;16011:1;16008;16004:9;16033:30;16051:11;16033:30;:::i;:::-;16022:41;;16212:1;16203:7;16199:15;16196:1;16193:22;16173:1;16166:9;16146:83;16123:139;;16242:18;;:::i;:::-;16123:139;15907:362;15859:410;;;;:::o;16275:180::-;16323:77;16320:1;16313:88;16420:4;16417:1;16410:15;16444:4;16441:1;16434:15;16461:185;16501:1;16518:20;16536:1;16518:20;:::i;:::-;16513:25;;16552:20;16570:1;16552:20;:::i;:::-;16547:25;;16591:1;16581:35;;16596:18;;:::i;:::-;16581:35;16638:1;16635;16631:9;16626:14;;16461:185;;;;:::o;16652:239::-;16792:34;16788:1;16780:6;16776:14;16769:58;16861:22;16856:2;16848:6;16844:15;16837:47;16652:239;:::o;16897:366::-;17039:3;17060:67;17124:2;17119:3;17060:67;:::i;:::-;17053:74;;17136:93;17225:3;17136:93;:::i;:::-;17254:2;17249:3;17245:12;17238:19;;16897:366;;;:::o;17269:419::-;17435:4;17473:2;17462:9;17458:18;17450:26;;17522:9;17516:4;17512:20;17508:1;17497:9;17493:17;17486:47;17550:131;17676:4;17550:131;:::i;:::-;17542:139;;17269:419;;;:::o;17694:229::-;17834:34;17830:1;17822:6;17818:14;17811:58;17903:12;17898:2;17890:6;17886:15;17879:37;17694:229;:::o;17929:366::-;18071:3;18092:67;18156:2;18151:3;18092:67;:::i;:::-;18085:74;;18168:93;18257:3;18168:93;:::i;:::-;18286:2;18281:3;18277:12;18270:19;;17929:366;;;:::o;18301:419::-;18467:4;18505:2;18494:9;18490:18;18482:26;;18554:9;18548:4;18544:20;18540:1;18529:9;18525:17;18518:47;18582:131;18708:4;18582:131;:::i;:::-;18574:139;;18301:419;;;:::o;18726:227::-;18866:34;18862:1;18854:6;18850:14;18843:58;18935:10;18930:2;18922:6;18918:15;18911:35;18726:227;:::o;18959:366::-;19101:3;19122:67;19186:2;19181:3;19122:67;:::i;:::-;19115:74;;19198:93;19287:3;19198:93;:::i;:::-;19316:2;19311:3;19307:12;19300:19;;18959:366;;;:::o;19331:419::-;19497:4;19535:2;19524:9;19520:18;19512:26;;19584:9;19578:4;19574:20;19570:1;19559:9;19555:17;19548:47;19612:131;19738:4;19612:131;:::i;:::-;19604:139;;19331:419;;;:::o;19756:244::-;19896:34;19892:1;19884:6;19880:14;19873:58;19965:27;19960:2;19952:6;19948:15;19941:52;19756:244;:::o;20006:366::-;20148:3;20169:67;20233:2;20228:3;20169:67;:::i;:::-;20162:74;;20245:93;20334:3;20245:93;:::i;:::-;20363:2;20358:3;20354:12;20347:19;;20006:366;;;:::o;20378:419::-;20544:4;20582:2;20571:9;20567:18;20559:26;;20631:9;20625:4;20621:20;20617:1;20606:9;20602:17;20595:47;20659:131;20785:4;20659:131;:::i;:::-;20651:139;;20378:419;;;:::o;20803:224::-;20943:34;20939:1;20931:6;20927:14;20920:58;21012:7;21007:2;20999:6;20995:15;20988:32;20803:224;:::o;21033:366::-;21175:3;21196:67;21260:2;21255:3;21196:67;:::i;:::-;21189:74;;21272:93;21361:3;21272:93;:::i;:::-;21390:2;21385:3;21381:12;21374:19;;21033:366;;;:::o;21405:419::-;21571:4;21609:2;21598:9;21594:18;21586:26;;21658:9;21652:4;21648:20;21644:1;21633:9;21629:17;21622:47;21686:131;21812:4;21686:131;:::i;:::-;21678:139;;21405:419;;;:::o;21830:223::-;21970:34;21966:1;21958:6;21954:14;21947:58;22039:6;22034:2;22026:6;22022:15;22015:31;21830:223;:::o;22059:366::-;22201:3;22222:67;22286:2;22281:3;22222:67;:::i;:::-;22215:74;;22298:93;22387:3;22298:93;:::i;:::-;22416:2;22411:3;22407:12;22400:19;;22059:366;;;:::o;22431:419::-;22597:4;22635:2;22624:9;22620:18;22612:26;;22684:9;22678:4;22674:20;22670:1;22659:9;22655:17;22648:47;22712:131;22838:4;22712:131;:::i;:::-;22704:139;;22431:419;;;:::o;22856:225::-;22996:34;22992:1;22984:6;22980:14;22973:58;23065:8;23060:2;23052:6;23048:15;23041:33;22856:225;:::o;23087:366::-;23229:3;23250:67;23314:2;23309:3;23250:67;:::i;:::-;23243:74;;23326:93;23415:3;23326:93;:::i;:::-;23444:2;23439:3;23435:12;23428:19;;23087:366;;;:::o;23459:419::-;23625:4;23663:2;23652:9;23648:18;23640:26;;23712:9;23706:4;23702:20;23698:1;23687:9;23683:17;23676:47;23740:131;23866:4;23740:131;:::i;:::-;23732:139;;23459:419;;;:::o;23884:223::-;24024:34;24020:1;24012:6;24008:14;24001:58;24093:6;24088:2;24080:6;24076:15;24069:31;23884:223;:::o;24113:366::-;24255:3;24276:67;24340:2;24335:3;24276:67;:::i;:::-;24269:74;;24352:93;24441:3;24352:93;:::i;:::-;24470:2;24465:3;24461:12;24454:19;;24113:366;;;:::o;24485:419::-;24651:4;24689:2;24678:9;24674:18;24666:26;;24738:9;24732:4;24728:20;24724:1;24713:9;24709:17;24702:47;24766:131;24892:4;24766:131;:::i;:::-;24758:139;;24485:419;;;:::o;24910:221::-;25050:34;25046:1;25038:6;25034:14;25027:58;25119:4;25114:2;25106:6;25102:15;25095:29;24910:221;:::o;25137:366::-;25279:3;25300:67;25364:2;25359:3;25300:67;:::i;:::-;25293:74;;25376:93;25465:3;25376:93;:::i;:::-;25494:2;25489:3;25485:12;25478:19;;25137:366;;;:::o;25509:419::-;25675:4;25713:2;25702:9;25698:18;25690:26;;25762:9;25756:4;25752:20;25748:1;25737:9;25733:17;25726:47;25790:131;25916:4;25790:131;:::i;:::-;25782:139;;25509:419;;;:::o;25934:224::-;26074:34;26070:1;26062:6;26058:14;26051:58;26143:7;26138:2;26130:6;26126:15;26119:32;25934:224;:::o;26164:366::-;26306:3;26327:67;26391:2;26386:3;26327:67;:::i;:::-;26320:74;;26403:93;26492:3;26403:93;:::i;:::-;26521:2;26516:3;26512:12;26505:19;;26164:366;;;:::o;26536:419::-;26702:4;26740:2;26729:9;26725:18;26717:26;;26789:9;26783:4;26779:20;26775:1;26764:9;26760:17;26753:47;26817:131;26943:4;26817:131;:::i;:::-;26809:139;;26536:419;;;:::o;26961:222::-;27101:34;27097:1;27089:6;27085:14;27078:58;27170:5;27165:2;27157:6;27153:15;27146:30;26961:222;:::o;27189:366::-;27331:3;27352:67;27416:2;27411:3;27352:67;:::i;:::-;27345:74;;27428:93;27517:3;27428:93;:::i;:::-;27546:2;27541:3;27537:12;27530:19;;27189:366;;;:::o;27561:419::-;27727:4;27765:2;27754:9;27750:18;27742:26;;27814:9;27808:4;27804:20;27800:1;27789:9;27785:17;27778:47;27842:131;27968:4;27842:131;:::i;:::-;27834:139;;27561:419;;;:::o;27986:221::-;28126:34;28122:1;28114:6;28110:14;28103:58;28195:4;28190:2;28182:6;28178:15;28171:29;27986:221;:::o;28213:366::-;28355:3;28376:67;28440:2;28435:3;28376:67;:::i;:::-;28369:74;;28452:93;28541:3;28452:93;:::i;:::-;28570:2;28565:3;28561:12;28554:19;;28213:366;;;:::o;28585:419::-;28751:4;28789:2;28778:9;28774:18;28766:26;;28838:9;28832:4;28828:20;28824:1;28813:9;28809:17;28802:47;28866:131;28992:4;28866:131;:::i;:::-;28858:139;;28585:419;;;:::o;29010:225::-;29150:34;29146:1;29138:6;29134:14;29127:58;29219:8;29214:2;29206:6;29202:15;29195:33;29010:225;:::o;29241:366::-;29383:3;29404:67;29468:2;29463:3;29404:67;:::i;:::-;29397:74;;29480:93;29569:3;29480:93;:::i;:::-;29598:2;29593:3;29589:12;29582:19;;29241:366;;;:::o;29613:419::-;29779:4;29817:2;29806:9;29802:18;29794:26;;29866:9;29860:4;29856:20;29852:1;29841:9;29837:17;29830:47;29894:131;30020:4;29894:131;:::i;:::-;29886:139;;29613:419;;;:::o;30038:169::-;30178:21;30174:1;30166:6;30162:14;30155:45;30038:169;:::o;30213:366::-;30355:3;30376:67;30440:2;30435:3;30376:67;:::i;:::-;30369:74;;30452:93;30541:3;30452:93;:::i;:::-;30570:2;30565:3;30561:12;30554:19;;30213:366;;;:::o;30585:419::-;30751:4;30789:2;30778:9;30774:18;30766:26;;30838:9;30832:4;30828:20;30824:1;30813:9;30809:17;30802:47;30866:131;30992:4;30866:131;:::i;:::-;30858:139;;30585:419;;;:::o;31010:226::-;31150:34;31146:1;31138:6;31134:14;31127:58;31219:9;31214:2;31206:6;31202:15;31195:34;31010:226;:::o;31242:366::-;31384:3;31405:67;31469:2;31464:3;31405:67;:::i;:::-;31398:74;;31481:93;31570:3;31481:93;:::i;:::-;31599:2;31594:3;31590:12;31583:19;;31242:366;;;:::o;31614:419::-;31780:4;31818:2;31807:9;31803:18;31795:26;;31867:9;31861:4;31857:20;31853:1;31842:9;31838:17;31831:47;31895:131;32021:4;31895:131;:::i;:::-;31887:139;;31614:419;;;:::o;32039:194::-;32079:4;32099:20;32117:1;32099:20;:::i;:::-;32094:25;;32133:20;32151:1;32133:20;:::i;:::-;32128:25;;32177:1;32174;32170:9;32162:17;;32201:1;32195:4;32192:11;32189:37;;;32206:18;;:::i;:::-;32189:37;32039:194;;;;:::o;32239:225::-;32379:34;32375:1;32367:6;32363:14;32356:58;32448:8;32443:2;32435:6;32431:15;32424:33;32239:225;:::o;32470:366::-;32612:3;32633:67;32697:2;32692:3;32633:67;:::i;:::-;32626:74;;32709:93;32798:3;32709:93;:::i;:::-;32827:2;32822:3;32818:12;32811:19;;32470:366;;;:::o;32842:419::-;33008:4;33046:2;33035:9;33031:18;33023:26;;33095:9;33089:4;33085:20;33081:1;33070:9;33066:17;33059:47;33123:131;33249:4;33123:131;:::i;:::-;33115:139;;32842:419;;;:::o;33267:147::-;33368:11;33405:3;33390:18;;33267:147;;;;:::o;33420:114::-;;:::o;33540:398::-;33699:3;33720:83;33801:1;33796:3;33720:83;:::i;:::-;33713:90;;33812:93;33901:3;33812:93;:::i;:::-;33930:1;33925:3;33921:11;33914:18;;33540:398;;;:::o;33944:379::-;34128:3;34150:147;34293:3;34150:147;:::i;:::-;34143:154;;34314:3;34307:10;;33944:379;;;:::o;34329:180::-;34377:77;34374:1;34367:88;34474:4;34471:1;34464:15;34498:4;34495:1;34488:15;34515:180;34563:77;34560:1;34553:88;34660:4;34657:1;34650:15;34684:4;34681:1;34674:15;34701:143;34758:5;34789:6;34783:13;34774:22;;34805:33;34832:5;34805:33;:::i;:::-;34701:143;;;;:::o;34850:351::-;34920:6;34969:2;34957:9;34948:7;34944:23;34940:32;34937:119;;;34975:79;;:::i;:::-;34937:119;35095:1;35120:64;35176:7;35167:6;35156:9;35152:22;35120:64;:::i;:::-;35110:74;;35066:128;34850:351;;;;:::o;35207:85::-;35252:7;35281:5;35270:16;;35207:85;;;:::o;35298:60::-;35326:3;35347:5;35340:12;;35298:60;;;:::o;35364:158::-;35422:9;35455:61;35473:42;35482:32;35508:5;35482:32;:::i;:::-;35473:42;:::i;:::-;35455:61;:::i;:::-;35442:74;;35364:158;;;:::o;35528:147::-;35623:45;35662:5;35623:45;:::i;:::-;35618:3;35611:58;35528:147;;:::o;35681:114::-;35748:6;35782:5;35776:12;35766:22;;35681:114;;;:::o;35801:184::-;35900:11;35934:6;35929:3;35922:19;35974:4;35969:3;35965:14;35950:29;;35801:184;;;;:::o;35991:132::-;36058:4;36081:3;36073:11;;36111:4;36106:3;36102:14;36094:22;;35991:132;;;:::o;36129:108::-;36206:24;36224:5;36206:24;:::i;:::-;36201:3;36194:37;36129:108;;:::o;36243:179::-;36312:10;36333:46;36375:3;36367:6;36333:46;:::i;:::-;36411:4;36406:3;36402:14;36388:28;;36243:179;;;;:::o;36428:113::-;36498:4;36530;36525:3;36521:14;36513:22;;36428:113;;;:::o;36577:732::-;36696:3;36725:54;36773:5;36725:54;:::i;:::-;36795:86;36874:6;36869:3;36795:86;:::i;:::-;36788:93;;36905:56;36955:5;36905:56;:::i;:::-;36984:7;37015:1;37000:284;37025:6;37022:1;37019:13;37000:284;;;37101:6;37095:13;37128:63;37187:3;37172:13;37128:63;:::i;:::-;37121:70;;37214:60;37267:6;37214:60;:::i;:::-;37204:70;;37060:224;37047:1;37044;37040:9;37035:14;;37000:284;;;37004:14;37300:3;37293:10;;36701:608;;;36577:732;;;;:::o;37315:831::-;37578:4;37616:3;37605:9;37601:19;37593:27;;37630:71;37698:1;37687:9;37683:17;37674:6;37630:71;:::i;:::-;37711:80;37787:2;37776:9;37772:18;37763:6;37711:80;:::i;:::-;37838:9;37832:4;37828:20;37823:2;37812:9;37808:18;37801:48;37866:108;37969:4;37960:6;37866:108;:::i;:::-;37858:116;;37984:72;38052:2;38041:9;38037:18;38028:6;37984:72;:::i;:::-;38066:73;38134:3;38123:9;38119:19;38110:6;38066:73;:::i;:::-;37315:831;;;;;;;;:::o

Swarm Source

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