ETH Price: $3,707.73 (+1.48%)

Token

ERC-20: CrackSmokingPetrolHuffingElonMuskFightingA... (SMOKECRACK)
 

Overview

Max Total Supply

69,420 SMOKECRACK

Holders

76

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
1.095163465000763522 SMOKECRACK

Value
$0.00
0x2121a77421f14034fd05539cc8a84019256e4e9b
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:
CrackSmokingPetrolHuffingElonMuskFightingAtWalmertScreamingYOLO69BulldogPoodle

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity Multiple files format)

File 12 of 12: Token.sol
/*

The ticker is SMOKECRACK
The name of this token is CrackSmokingPetrolHuffingElonMuskFightingAtWalmertScreamingYOLO69BulldogPoodle 

Do not smoke crack or fight at Walmart please.

*/

// SPDX-License-Identifier: No License
pragma solidity 0.8.19;

//Importing libraries

import "./ERC20.sol";
import "./ERC20Burnable.sol";
import "./Ownable.sol";
import "./Initializable.sol";
import "./IUniswapV2Factory.sol";
import "./IUniswapV2Pair.sol";
import "./IUniswapV2Router01.sol";
import "./IUniswapV2Router02.sol";

// Start creating contract
contract CrackSmokingPetrolHuffingElonMuskFightingAtWalmertScreamingYOLO69BulldogPoodle is ERC20, ERC20Burnable, Ownable, Initializable {
    
    uint256 public swapThreshold;
    
    uint256 private _marketingPending;

    address public marketingAddress;
    uint16[3] public marketingFees;

    mapping (address => bool) public isExcludedFromFees;

    uint16[3] public totalFees;
    bool private _swapping;

    IUniswapV2Router02 public routerV2;
    address public pairV2;
    mapping (address => bool) public AMMPairs;
    event SwapThresholdUpdated(uint256 swapThreshold);
    event marketingAddressUpdated(address marketingAddress);
    event marketingFeesUpdated(uint16 buyFee, uint16 sellFee, uint16 transferFee);
    event marketingFeeSent(address recipient, uint256 amount);
    event ExcludeFromFees(address indexed account, bool isExcluded);
    event RouterV2Updated(address indexed routerV2);
    event AMMPairsUpdated(address indexed AMMPair, bool isPair);
    // Name the tokens
    constructor()
        ERC20(unicode"CrackSmokingPetrolHuffingElonMuskFightingAtWalmertScreamingYOLO69BulldogPoodle", unicode"SMOKECRACK") 
    {
        address supplyRecipient = 0x331Ea9c62325F92283d6395811c7C5AEc77b6A40;
        updateSwapThreshold(3471 * (10 ** decimals()) / 10);
        marketingAddressSetup(0x331Ea9c62325F92283d6395811c7C5AEc77b6A40);
        marketingFeesSetup(0, 0, 0);
        excludeFromFees(supplyRecipient, true);
        excludeFromFees(address(this), true); 
        _mint(supplyRecipient, 694200 * (10 ** decimals()) / 10);
        _transferOwnership(0x331Ea9c62325F92283d6395811c7C5AEc77b6A40);
    }
    
    function initialize(address _router) initializer external {
        _updateRouterV2(_router);
    }

    receive() external payable {}

    function decimals() public pure override returns (uint8) {
        return 18;
    }
    
    function _swapTokensForCoin(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = routerV2.WETH();

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

        routerV2.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount, 0, path, address(this), block.timestamp);
    }

    function updateSwapThreshold(uint256 _swapThreshold) public onlyOwner {
        swapThreshold = _swapThreshold;
        
        emit SwapThresholdUpdated(_swapThreshold);
    }

    function getAllPending() public view returns (uint256) {
        return 0 + _marketingPending;
    }

    function marketingAddressSetup(address _newAddress) public onlyOwner {
        require(_newAddress != address(0), "TaxesDefaultRouterWallet: Wallet tax recipient cannot be a 0x0 address");

        marketingAddress = _newAddress;
        excludeFromFees(_newAddress, true);

        emit marketingAddressUpdated(_newAddress);
    }

    function marketingFeesSetup(uint16 _buyFee, uint16 _sellFee, uint16 _transferFee) public onlyOwner {
        totalFees[0] = totalFees[0] - marketingFees[0] + _buyFee;
        totalFees[1] = totalFees[1] - marketingFees[1] + _sellFee;
        totalFees[2] = totalFees[2] - marketingFees[2] + _transferFee;
        require(totalFees[0] <= 5000 && totalFees[1] <= 5000 && totalFees[2] <= 5000, "TaxesDefaultRouter: Cannot exceed max total fee of 50%");

        marketingFees = [_buyFee, _sellFee, _transferFee];

        emit marketingFeesUpdated(_buyFee, _sellFee, _transferFee);
    }

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        
        bool canSwap = getAllPending() >= swapThreshold;
        
        if (!_swapping && !AMMPairs[from] && canSwap) {
            _swapping = true;
            
            if (false || _marketingPending > 0) {
                uint256 token2Swap = 0 + _marketingPending;
                bool success = false;

                _swapTokensForCoin(token2Swap);
                uint256 coinsReceived = address(this).balance;
                
                uint256 marketingPortion = coinsReceived * _marketingPending / token2Swap;
                if (marketingPortion > 0) {
                    success = payable(marketingAddress).send(marketingPortion);
                    if (success) {
                        emit marketingFeeSent(marketingAddress, marketingPortion);
                    }
                }
                _marketingPending = 0;

            }

            _swapping = false;
        }

        if (!_swapping && amount > 0 && to != address(routerV2) && !isExcludedFromFees[from] && !isExcludedFromFees[to]) {
            uint256 fees = 0;
            uint8 txType = 3;
            
            if (AMMPairs[from]) {
                if (totalFees[0] > 0) txType = 0;
            }
            else if (AMMPairs[to]) {
                if (totalFees[1] > 0) txType = 1;
            }
            else if (totalFees[2] > 0) txType = 2;
            
            if (txType < 3) {
                
                fees = amount * totalFees[txType] / 10000;
                amount -= fees;
                
                _marketingPending += fees * marketingFees[txType] / totalFees[txType];

                
            }

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

    function _updateRouterV2(address router) private {
        routerV2 = IUniswapV2Router02(router);
        pairV2 = IUniswapV2Factory(routerV2.factory()).createPair(address(this), routerV2.WETH());
        
        _setAMMPair(pairV2, true);

        emit RouterV2Updated(router);
    }

    function setAMMPair(address pair, bool isPair) external onlyOwner {
        require(pair != pairV2, "DefaultRouter: Cannot remove initial pair from list");

        _setAMMPair(pair, isPair);
    }

    function _setAMMPair(address pair, bool isPair) private {
        AMMPairs[pair] = isPair;

        if (isPair) { 
        }

        emit AMMPairsUpdated(pair, isPair);
    }

    function _beforeTokenTransfer(address from, address to, uint256 amount)
        internal
        override
    {
        super._beforeTokenTransfer(from, to, amount);
    }

    function _afterTokenTransfer(address from, address to, uint256 amount)
        internal
        override
    {
        super._afterTokenTransfer(from, to, amount);
    }
}

File 1 of 12: Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

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

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

File 2 of 12: ERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.0;

import "./IERC20.sol";
import "./IERC20Metadata.sol";
import "./Context.sol";

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

        _beforeTokenTransfer(from, to, amount);

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

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

File 3 of 12: ERC20Burnable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Burnable.sol)

pragma solidity ^0.8.0;

import "./ERC20.sol";
import "./Context.sol";

/**
 * @dev Extension of {ERC20} that allows token holders to destroy both their own
 * tokens and those that they have an allowance for, in a way that can be
 * recognized off-chain (via event analysis).
 */
abstract contract ERC20Burnable is Context, ERC20 {
    /**
     * @dev Destroys `amount` tokens from the caller.
     *
     * See {ERC20-_burn}.
     */
    function burn(uint256 amount) public virtual {
        _burn(_msgSender(), amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, deducting from the caller's
     * allowance.
     *
     * See {ERC20-_burn} and {ERC20-allowance}.
     *
     * Requirements:
     *
     * - the caller must have allowance for ``accounts``'s tokens of at least
     * `amount`.
     */
    function burnFrom(address account, uint256 amount) public virtual {
        _spendAllowance(account, _msgSender(), amount);
        _burn(account, amount);
    }
}

File 4 of 12: IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

File 5 of 12: IERC20Metadata.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;

import "./IERC20.sol";

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

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

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

File 6 of 12: Initializable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed
 * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an
 * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer
 * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.
 *
 * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as
 * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.
 *
 * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure
 * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.
 */
abstract contract Initializable {

    /**
     * @dev Indicates that the contract has been initialized.
     */
    bool private _initialized;

    /**
     * @dev Indicates that the contract is in the process of being initialized.
     */
    bool private _initializing;

    /**
     * @dev Modifier to protect an initializer function from being invoked twice.
     */
    modifier initializer() {
        require(_initializing || !_initialized, "Initializable: contract is already initialized");

        bool isTopLevelCall = !_initializing;
        if (isTopLevelCall) {
            _initializing = true;
            _initialized = true;
        }

        _;

        if (isTopLevelCall) {
            _initializing = false;
        }
    }
}

File 7 of 12: IUniswapV2Factory.sol
// SPDX-License-Identifier: None
pragma solidity >=0.5.0;

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

    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(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

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

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

File 8 of 12: IUniswapV2Pair.sol
// SPDX-License-Identifier: None

pragma solidity >=0.5.0;

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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}

File 9 of 12: IUniswapV2Router01.sol
// SPDX-License-Identifier: None

pragma solidity >=0.6.2;

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

File 10 of 12: IUniswapV2Router02.sol
// SPDX-License-Identifier: None

pragma solidity >=0.6.2;

import './IUniswapV2Router01.sol';

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

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

File 11 of 12: Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)

pragma solidity ^0.8.0;

import "./Context.sol";

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

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

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

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

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

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

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

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

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"AMMPair","type":"address"},{"indexed":false,"internalType":"bool","name":"isPair","type":"bool"}],"name":"AMMPairsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"routerV2","type":"address"}],"name":"RouterV2Updated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"swapThreshold","type":"uint256"}],"name":"SwapThresholdUpdated","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":false,"internalType":"address","name":"marketingAddress","type":"address"}],"name":"marketingAddressUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"marketingFeeSent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"buyFee","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"sellFee","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"transferFee","type":"uint16"}],"name":"marketingFeesUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"AMMPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAllPending","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newAddress","type":"address"}],"name":"marketingAddressSetup","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"marketingFees","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_buyFee","type":"uint16"},{"internalType":"uint16","name":"_sellFee","type":"uint16"},{"internalType":"uint16","name":"_transferFee","type":"uint16"}],"name":"marketingFeesSetup","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pairV2","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"routerV2","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"isPair","type":"bool"}],"name":"setAMMPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"totalFees","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_swapThreshold","type":"uint256"}],"name":"updateSwapThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040523480156200001157600080fd5b506040518060800160405280604e815260200162005020604e91396040518060400160405280600a81526020017f534d4f4b45435241434b00000000000000000000000000000000000000000000815250816003908162000073919062000e46565b50806004908162000085919062000e46565b505050620000a86200009c620001e560201b60201c565b620001ed60201b60201c565b600073331ea9c62325f92283d6395811c7c5aec77b6a4090506200010c600a620000d7620002b360201b60201c565b600a620000e59190620010bd565b610d8f620000f491906200110e565b62000100919062001188565b620002bc60201b60201c565b6200013173331ea9c62325f92283d6395811c7c5aec77b6a406200030f60201b60201c565b6200014660008060006200042160201b60201c565b62000159816001620007ec60201b60201c565b6200016c306001620007ec60201b60201c565b620001b981600a62000183620002b360201b60201c565b600a620001919190620010bd565b620a97b8620001a191906200110e565b620001ad919062001188565b620008a760201b60201c565b620001de73331ea9c62325f92283d6395811c7c5aec77b6a40620001ed60201b60201c565b5062001615565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006012905090565b620002cc62000a1460201b60201c565b806006819055507f18ff2fc8464635e4f668567019152095047e34d7a2ab4b97661ba4dc7fd0647681604051620003049190620011d1565b60405180910390a150565b6200031f62000a1460201b60201c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000391576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000388906200129b565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620003e5816001620007ec60201b60201c565b7feaf1986d341c3096d2d5d32f86ed29a21fee4e0d8365cd2b6fa85c0ec6889cf68160405162000416919062001302565b60405180910390a150565b6200043162000a1460201b60201c565b8260096000600381106200044a57620004496200131f565b5b601091828204019190066002029054906101000a900461ffff16600b6000600381106200047c576200047b6200131f565b5b601091828204019190066002029054906101000a900461ffff16620004a291906200135c565b620004ae919062001399565b600b600060038110620004c657620004c56200131f565b5b601091828204019190066002026101000a81548161ffff021916908361ffff1602179055508160096001600381106200050457620005036200131f565b5b601091828204019190066002029054906101000a900461ffff16600b6001600381106200053657620005356200131f565b5b601091828204019190066002029054906101000a900461ffff166200055c91906200135c565b62000568919062001399565b600b60016003811062000580576200057f6200131f565b5b601091828204019190066002026101000a81548161ffff021916908361ffff160217905550806009600260038110620005be57620005bd6200131f565b5b601091828204019190066002029054906101000a900461ffff16600b600260038110620005f057620005ef6200131f565b5b601091828204019190066002029054906101000a900461ffff166200061691906200135c565b62000622919062001399565b600b6002600381106200063a57620006396200131f565b5b601091828204019190066002026101000a81548161ffff021916908361ffff160217905550611388600b6000600381106200067a57620006796200131f565b5b601091828204019190066002029054906101000a900461ffff1661ffff1611158015620006de5750611388600b600160038110620006bd57620006bc6200131f565b5b601091828204019190066002029054906101000a900461ffff1661ffff1611155b8015620007225750611388600b6002600381106200070157620007006200131f565b5b601091828204019190066002029054906101000a900461ffff1661ffff1611155b62000764576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200075b906200144c565b60405180910390fd5b60405180606001604052808461ffff1661ffff1681526020018361ffff1661ffff1681526020018261ffff1661ffff168152506009906003620007a992919062000b09565b507f1e5d76e30cd4303515f118e75cbf9d9440bb68ab78b2c2fa46984200dc11ad64838383604051620007df939291906200147f565b60405180910390a1505050565b620007fc62000a1460201b60201c565b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516200089b9190620014d9565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000919576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009109062001546565b60405180910390fd5b6200092d6000838362000aa560201b60201c565b806002600082825462000941919062001568565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620009f49190620011d1565b60405180910390a362000a106000838362000abd60201b60201c565b5050565b62000a24620001e560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000a4a62000ad560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000aa3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a9a90620015f3565b60405180910390fd5b565b62000ab883838362000aff60201b60201c565b505050565b62000ad083838362000b0460201b60201c565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b505050565b505050565b826003600f0160109004810192821562000b9a5791602002820160005b8382111562000b6857835183826101000a81548161ffff021916908361ffff160217905550926020019260020160208160010104928301926001030262000b26565b801562000b985782816101000a81549061ffff021916905560020160208160010104928301926001030262000b68565b505b50905062000ba9919062000bad565b5090565b5b8082111562000bc857600081600090555060010162000bae565b5090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000c4e57607f821691505b60208210810362000c645762000c6362000c06565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000cce7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000c8f565b62000cda868362000c8f565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000d2762000d2162000d1b8462000cf2565b62000cfc565b62000cf2565b9050919050565b6000819050919050565b62000d438362000d06565b62000d5b62000d528262000d2e565b84845462000c9c565b825550505050565b600090565b62000d7262000d63565b62000d7f81848462000d38565b505050565b5b8181101562000da75762000d9b60008262000d68565b60018101905062000d85565b5050565b601f82111562000df65762000dc08162000c6a565b62000dcb8462000c7f565b8101602085101562000ddb578190505b62000df362000dea8562000c7f565b83018262000d84565b50505b505050565b600082821c905092915050565b600062000e1b6000198460080262000dfb565b1980831691505092915050565b600062000e36838362000e08565b9150826002028217905092915050565b62000e518262000bcc565b67ffffffffffffffff81111562000e6d5762000e6c62000bd7565b5b62000e79825462000c35565b62000e8682828562000dab565b600060209050601f83116001811462000ebe576000841562000ea9578287015190505b62000eb5858262000e28565b86555062000f25565b601f19841662000ece8662000c6a565b60005b8281101562000ef85784890151825560018201915060208501945060208101905062000ed1565b8683101562000f18578489015162000f14601f89168262000e08565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000fbb5780860481111562000f935762000f9262000f2d565b5b600185161562000fa35780820291505b808102905062000fb38562000f5c565b945062000f73565b94509492505050565b60008262000fd65760019050620010a9565b8162000fe65760009050620010a9565b816001811462000fff57600281146200100a5762001040565b6001915050620010a9565b60ff8411156200101f576200101e62000f2d565b5b8360020a91508482111562001039576200103862000f2d565b5b50620010a9565b5060208310610133831016604e8410600b84101617156200107a5782820a90508381111562001074576200107362000f2d565b5b620010a9565b62001089848484600162000f69565b92509050818404811115620010a357620010a262000f2d565b5b81810290505b9392505050565b600060ff82169050919050565b6000620010ca8262000cf2565b9150620010d783620010b0565b9250620011067fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000fc4565b905092915050565b60006200111b8262000cf2565b9150620011288362000cf2565b9250828202620011388162000cf2565b9150828204841483151762001152576200115162000f2d565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620011958262000cf2565b9150620011a28362000cf2565b925082620011b557620011b462001159565b5b828204905092915050565b620011cb8162000cf2565b82525050565b6000602082019050620011e86000830184620011c0565b92915050565b600082825260208201905092915050565b7f546178657344656661756c74526f7574657257616c6c65743a2057616c6c657460008201527f2074617820726563697069656e742063616e6e6f74206265206120307830206160208201527f6464726573730000000000000000000000000000000000000000000000000000604082015250565b600062001283604683620011ee565b91506200129082620011ff565b606082019050919050565b60006020820190508181036000830152620012b68162001274565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620012ea82620012bd565b9050919050565b620012fc81620012dd565b82525050565b6000602082019050620013196000830184620012f1565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061ffff82169050919050565b600062001369826200134e565b915062001376836200134e565b9250828203905061ffff81111562001393576200139262000f2d565b5b92915050565b6000620013a6826200134e565b9150620013b3836200134e565b9250828201905061ffff811115620013d057620013cf62000f2d565b5b92915050565b7f546178657344656661756c74526f757465723a2043616e6e6f7420657863656560008201527f64206d617820746f74616c20666565206f662035302500000000000000000000602082015250565b600062001434603683620011ee565b91506200144182620013d6565b604082019050919050565b60006020820190508181036000830152620014678162001425565b9050919050565b62001479816200134e565b82525050565b60006060820190506200149660008301866200146e565b620014a560208301856200146e565b620014b460408301846200146e565b949350505050565b60008115159050919050565b620014d381620014bc565b82525050565b6000602082019050620014f06000830184620014c8565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006200152e601f83620011ee565b91506200153b82620014f6565b602082019050919050565b6000602082019050818103600083015262001561816200151f565b9050919050565b6000620015758262000cf2565b9150620015828362000cf2565b92508282019050808211156200159d576200159c62000f2d565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620015db602083620011ee565b9150620015e882620015a3565b602082019050919050565b600060208201905081810360008301526200160e81620015cc565b9050919050565b6139fb80620016256000396000f3fe6080604052600436106101dc5760003560e01c80637685655711610102578063a9059cbb11610095578063cc274b2911610064578063cc274b2914610703578063dd62ed3e1461072c578063f112ba7214610769578063f2fde38b14610794576101e3565b8063a9059cbb1461064b578063c024666814610688578063c400f5e7146106b1578063c4d66de8146106da576101e3565b80638fffabed116100d15780638fffabed1461058d57806395d89b41146105b8578063a457c2d7146105e3578063a5ece94114610620576101e3565b806376856557146104bf57806379cc6790146104fc5780638da5cb5b146105255780638e749a8f14610550576101e3565b8063395093511161017a5780634fbee193116101495780634fbee19314610403578063502f74461461044057806370a082311461046b578063715018a6146104a8576101e3565b80633950935114610337578063408ccbdf1461037457806342966c68146103b15780634a4dd9cd146103da576101e3565b806318160ddd116101b657806318160ddd1461027b57806323b872dd146102a65780632d99d32e146102e3578063313ce5671461030c576101e3565b80630445b667146101e857806306fdde0314610213578063095ea7b31461023e576101e3565b366101e357005b600080fd5b3480156101f457600080fd5b506101fd6107bd565b60405161020a919061281f565b60405180910390f35b34801561021f57600080fd5b506102286107c3565b60405161023591906128ca565b60405180910390f35b34801561024a57600080fd5b506102656004803603810190610260919061297b565b610855565b60405161027291906129d6565b60405180910390f35b34801561028757600080fd5b50610290610878565b60405161029d919061281f565b60405180910390f35b3480156102b257600080fd5b506102cd60048036038101906102c891906129f1565b610882565b6040516102da91906129d6565b60405180910390f35b3480156102ef57600080fd5b5061030a60048036038101906103059190612a70565b6108b1565b005b34801561031857600080fd5b50610321610957565b60405161032e9190612acc565b60405180910390f35b34801561034357600080fd5b5061035e6004803603810190610359919061297b565b610960565b60405161036b91906129d6565b60405180910390f35b34801561038057600080fd5b5061039b60048036038101906103969190612ae7565b610997565b6040516103a89190612b31565b60405180910390f35b3480156103bd57600080fd5b506103d860048036038101906103d39190612ae7565b6109c5565b005b3480156103e657600080fd5b5061040160048036038101906103fc9190612b78565b6109d9565b005b34801561040f57600080fd5b5061042a60048036038101906104259190612bcb565b610d63565b60405161043791906129d6565b60405180910390f35b34801561044c57600080fd5b50610455610d83565b6040516104629190612c57565b60405180910390f35b34801561047757600080fd5b50610492600480360381019061048d9190612bcb565b610da9565b60405161049f919061281f565b60405180910390f35b3480156104b457600080fd5b506104bd610df1565b005b3480156104cb57600080fd5b506104e660048036038101906104e19190612bcb565b610e05565b6040516104f391906129d6565b60405180910390f35b34801561050857600080fd5b50610523600480360381019061051e919061297b565b610e25565b005b34801561053157600080fd5b5061053a610e45565b6040516105479190612c81565b60405180910390f35b34801561055c57600080fd5b5061057760048036038101906105729190612ae7565b610e6f565b6040516105849190612b31565b60405180910390f35b34801561059957600080fd5b506105a2610e9d565b6040516105af9190612c81565b60405180910390f35b3480156105c457600080fd5b506105cd610ec3565b6040516105da91906128ca565b60405180910390f35b3480156105ef57600080fd5b5061060a6004803603810190610605919061297b565b610f55565b60405161061791906129d6565b60405180910390f35b34801561062c57600080fd5b50610635610fcc565b6040516106429190612c81565b60405180910390f35b34801561065757600080fd5b50610672600480360381019061066d919061297b565b610ff2565b60405161067f91906129d6565b60405180910390f35b34801561069457600080fd5b506106af60048036038101906106aa9190612a70565b611015565b005b3480156106bd57600080fd5b506106d860048036038101906106d39190612bcb565b6110c6565b005b3480156106e657600080fd5b5061070160048036038101906106fc9190612bcb565b6111c3565b005b34801561070f57600080fd5b5061072a60048036038101906107259190612ae7565b6112ab565b005b34801561073857600080fd5b50610753600480360381019061074e9190612c9c565b6112f4565b604051610760919061281f565b60405180910390f35b34801561077557600080fd5b5061077e61137b565b60405161078b919061281f565b60405180910390f35b3480156107a057600080fd5b506107bb60048036038101906107b69190612bcb565b611391565b005b60065481565b6060600380546107d290612d0b565b80601f01602080910402602001604051908101604052809291908181526020018280546107fe90612d0b565b801561084b5780601f106108205761010080835404028352916020019161084b565b820191906000526020600020905b81548152906001019060200180831161082e57829003601f168201915b5050505050905090565b600080610860611414565b905061086d81858561141c565b600191505092915050565b6000600254905090565b60008061088d611414565b905061089a8582856115e5565b6108a5858585611671565b60019150509392505050565b6108b9611c1d565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610949576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094090612dae565b60405180910390fd5b6109538282611c9b565b5050565b60006012905090565b60008061096b611414565b905061098c81858561097d85896112f4565b6109879190612dfd565b61141c565b600191505092915050565b600b81600381106109a757600080fd5b60109182820401919006600202915054906101000a900461ffff1681565b6109d66109d0611414565b82611d44565b50565b6109e1611c1d565b8260096000600381106109f7576109f6612e31565b5b601091828204019190066002029054906101000a900461ffff16600b600060038110610a2657610a25612e31565b5b601091828204019190066002029054906101000a900461ffff16610a4a9190612e60565b610a549190612e96565b600b600060038110610a6957610a68612e31565b5b601091828204019190066002026101000a81548161ffff021916908361ffff160217905550816009600160038110610aa457610aa3612e31565b5b601091828204019190066002029054906101000a900461ffff16600b600160038110610ad357610ad2612e31565b5b601091828204019190066002029054906101000a900461ffff16610af79190612e60565b610b019190612e96565b600b600160038110610b1657610b15612e31565b5b601091828204019190066002026101000a81548161ffff021916908361ffff160217905550806009600260038110610b5157610b50612e31565b5b601091828204019190066002029054906101000a900461ffff16600b600260038110610b8057610b7f612e31565b5b601091828204019190066002029054906101000a900461ffff16610ba49190612e60565b610bae9190612e96565b600b600260038110610bc357610bc2612e31565b5b601091828204019190066002026101000a81548161ffff021916908361ffff160217905550611388600b600060038110610c0057610bff612e31565b5b601091828204019190066002029054906101000a900461ffff1661ffff1611158015610c605750611388600b600160038110610c3f57610c3e612e31565b5b601091828204019190066002029054906101000a900461ffff1661ffff1611155b8015610ca05750611388600b600260038110610c7f57610c7e612e31565b5b601091828204019190066002029054906101000a900461ffff1661ffff1611155b610cdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd690612f3e565b60405180910390fd5b60405180606001604052808461ffff1661ffff1681526020018361ffff1661ffff1681526020018261ffff1661ffff168152506009906003610d2292919061274c565b507f1e5d76e30cd4303515f118e75cbf9d9440bb68ab78b2c2fa46984200dc11ad64838383604051610d5693929190612f5e565b60405180910390a1505050565b600a6020528060005260406000206000915054906101000a900460ff1681565b600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610df9611c1d565b610e036000611f11565b565b600e6020528060005260406000206000915054906101000a900460ff1681565b610e3782610e31611414565b836115e5565b610e418282611d44565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60098160038110610e7f57600080fd5b60109182820401919006600202915054906101000a900461ffff1681565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060048054610ed290612d0b565b80601f0160208091040260200160405190810160405280929190818152602001828054610efe90612d0b565b8015610f4b5780601f10610f2057610100808354040283529160200191610f4b565b820191906000526020600020905b815481529060010190602001808311610f2e57829003601f168201915b5050505050905090565b600080610f60611414565b90506000610f6e82866112f4565b905083811015610fb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610faa90613007565b60405180910390fd5b610fc0828686840361141c565b60019250505092915050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080610ffd611414565b905061100a818585611671565b600191505092915050565b61101d611c1d565b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516110ba91906129d6565b60405180910390a25050565b6110ce611c1d565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361113d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611134906130bf565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611189816001611015565b7feaf1986d341c3096d2d5d32f86ed29a21fee4e0d8365cd2b6fa85c0ec6889cf6816040516111b89190612c81565b60405180910390a150565b600560159054906101000a900460ff16806111eb5750600560149054906101000a900460ff16155b61122a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122190613151565b60405180910390fd5b6000600560159054906101000a900460ff16159050801561127c576001600560156101000a81548160ff0219169083151502179055506001600560146101000a81548160ff0219169083151502179055505b61128582611fd7565b80156112a7576000600560156101000a81548160ff0219169083151502179055505b5050565b6112b3611c1d565b806006819055507f18ff2fc8464635e4f668567019152095047e34d7a2ab4b97661ba4dc7fd06476816040516112e9919061281f565b60405180910390a150565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600754600061138c9190612dfd565b905090565b611399611c1d565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611408576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ff906131e3565b60405180910390fd5b61141181611f11565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361148b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148290613275565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036114fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f190613307565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516115d8919061281f565b60405180910390a3505050565b60006115f184846112f4565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461166b578181101561165d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165490613373565b60405180910390fd5b61166a848484840361141c565b5b50505050565b600060065461167e61137b565b10159050600c60009054906101000a900460ff161580156116e95750600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156116f25750805b15611854576001600c60006101000a81548160ff02191690831515021790555060008061172157506000600754115b1561183857600060075460006117379190612dfd565b9050600061174482612269565b60004790506000836007548361175a9190613393565b6117649190613404565b9050600081111561182b57600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050509250821561182a577f3e6afd69feef8f4cc1adbe6d3905e477db85aa5aa28d02674dc4bc6d39237fe4600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051611821929190613435565b60405180910390a15b5b6000600781905550505050505b6000600c60006101000a81548160ff0219169083151502179055505b600c60009054906101000a900460ff161580156118715750600082115b80156118cb5750600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156119215750600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156119775750600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611c0c5760008060039050600e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611a1a576000600b6000600381106119ec576119eb612e31565b5b601091828204019190066002029054906101000a900461ffff1661ffff161115611a1557600090505b611af3565b600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611ab1576000600b600160038110611a8357611a82612e31565b5b601091828204019190066002029054906101000a900461ffff1661ffff161115611aac57600190505b611af2565b6000600b600260038110611ac857611ac7612e31565b5b601091828204019190066002029054906101000a900461ffff1661ffff161115611af157600290505b5b5b60038160ff161015611bf457612710600b8260ff1660038110611b1957611b18612e31565b5b601091828204019190066002029054906101000a900461ffff1661ffff1685611b429190613393565b611b4c9190613404565b91508184611b5a919061345e565b9350600b8160ff1660038110611b7357611b72612e31565b5b601091828204019190066002029054906101000a900461ffff1661ffff1660098260ff1660038110611ba857611ba7612e31565b5b601091828204019190066002029054906101000a900461ffff1661ffff1683611bd19190613393565b611bdb9190613404565b60076000828254611bec9190612dfd565b925050819055505b6000821115611c0957611c088630846124ac565b5b50505b611c178484846124ac565b50505050565b611c25611414565b73ffffffffffffffffffffffffffffffffffffffff16611c43610e45565b73ffffffffffffffffffffffffffffffffffffffff1614611c99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c90906134de565b60405180910390fd5b565b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f911aa18ddbbbc33c9b4c704a71bdaa0984b0aa2e82726a7f51e64bad0b0a845582604051611d3891906129d6565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611db3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611daa90613570565b60405180910390fd5b611dbf82600083612722565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611e45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3c90613602565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611ef8919061281f565b60405180910390a3611f0c83600084612732565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80600c60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612085573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120a99190613637565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612132573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121569190613637565b6040518363ffffffff1660e01b8152600401612173929190613664565b6020604051808303816000875af1158015612192573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121b69190613637565b600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612223600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001611c9b565b8073ffffffffffffffffffffffffffffffffffffffff167fbc052db65df144ad4f71f02da93cae3d4401104c30ac374d7cc10d87ee07b60260405160405180910390a250565b6000600267ffffffffffffffff8111156122865761228561368d565b5b6040519080825280602002602001820160405280156122b45781602001602082028036833780820191505090505b50905030816000815181106122cc576122cb612e31565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612373573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123979190613637565b816001815181106123ab576123aa612e31565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061241230600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461141c565b600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016124769594939291906137b5565b600060405180830381600087803b15801561249057600080fd5b505af11580156124a4573d6000803e3d6000fd5b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361251b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251290613881565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361258a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258190613913565b60405180910390fd5b612595838383612722565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561261b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612612906139a5565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612709919061281f565b60405180910390a361271c848484612732565b50505050565b61272d838383612742565b505050565b61273d838383612747565b505050565b505050565b505050565b826003600f016010900481019282156127d85791602002820160005b838211156127a857835183826101000a81548161ffff021916908361ffff1602179055509260200192600201602081600101049283019260010302612768565b80156127d65782816101000a81549061ffff02191690556002016020816001010492830192600103026127a8565b505b5090506127e591906127e9565b5090565b5b808211156128025760008160009055506001016127ea565b5090565b6000819050919050565b61281981612806565b82525050565b60006020820190506128346000830184612810565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612874578082015181840152602081019050612859565b60008484015250505050565b6000601f19601f8301169050919050565b600061289c8261283a565b6128a68185612845565b93506128b6818560208601612856565b6128bf81612880565b840191505092915050565b600060208201905081810360008301526128e48184612891565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061291c826128f1565b9050919050565b61292c81612911565b811461293757600080fd5b50565b60008135905061294981612923565b92915050565b61295881612806565b811461296357600080fd5b50565b6000813590506129758161294f565b92915050565b60008060408385031215612992576129916128ec565b5b60006129a08582860161293a565b92505060206129b185828601612966565b9150509250929050565b60008115159050919050565b6129d0816129bb565b82525050565b60006020820190506129eb60008301846129c7565b92915050565b600080600060608486031215612a0a57612a096128ec565b5b6000612a188682870161293a565b9350506020612a298682870161293a565b9250506040612a3a86828701612966565b9150509250925092565b612a4d816129bb565b8114612a5857600080fd5b50565b600081359050612a6a81612a44565b92915050565b60008060408385031215612a8757612a866128ec565b5b6000612a958582860161293a565b9250506020612aa685828601612a5b565b9150509250929050565b600060ff82169050919050565b612ac681612ab0565b82525050565b6000602082019050612ae16000830184612abd565b92915050565b600060208284031215612afd57612afc6128ec565b5b6000612b0b84828501612966565b91505092915050565b600061ffff82169050919050565b612b2b81612b14565b82525050565b6000602082019050612b466000830184612b22565b92915050565b612b5581612b14565b8114612b6057600080fd5b50565b600081359050612b7281612b4c565b92915050565b600080600060608486031215612b9157612b906128ec565b5b6000612b9f86828701612b63565b9350506020612bb086828701612b63565b9250506040612bc186828701612b63565b9150509250925092565b600060208284031215612be157612be06128ec565b5b6000612bef8482850161293a565b91505092915050565b6000819050919050565b6000612c1d612c18612c13846128f1565b612bf8565b6128f1565b9050919050565b6000612c2f82612c02565b9050919050565b6000612c4182612c24565b9050919050565b612c5181612c36565b82525050565b6000602082019050612c6c6000830184612c48565b92915050565b612c7b81612911565b82525050565b6000602082019050612c966000830184612c72565b92915050565b60008060408385031215612cb357612cb26128ec565b5b6000612cc18582860161293a565b9250506020612cd28582860161293a565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612d2357607f821691505b602082108103612d3657612d35612cdc565b5b50919050565b7f44656661756c74526f757465723a2043616e6e6f742072656d6f766520696e6960008201527f7469616c20706169722066726f6d206c69737400000000000000000000000000602082015250565b6000612d98603383612845565b9150612da382612d3c565b604082019050919050565b60006020820190508181036000830152612dc781612d8b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612e0882612806565b9150612e1383612806565b9250828201905080821115612e2b57612e2a612dce565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000612e6b82612b14565b9150612e7683612b14565b9250828203905061ffff811115612e9057612e8f612dce565b5b92915050565b6000612ea182612b14565b9150612eac83612b14565b9250828201905061ffff811115612ec657612ec5612dce565b5b92915050565b7f546178657344656661756c74526f757465723a2043616e6e6f7420657863656560008201527f64206d617820746f74616c20666565206f662035302500000000000000000000602082015250565b6000612f28603683612845565b9150612f3382612ecc565b604082019050919050565b60006020820190508181036000830152612f5781612f1b565b9050919050565b6000606082019050612f736000830186612b22565b612f806020830185612b22565b612f8d6040830184612b22565b949350505050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612ff1602583612845565b9150612ffc82612f95565b604082019050919050565b6000602082019050818103600083015261302081612fe4565b9050919050565b7f546178657344656661756c74526f7574657257616c6c65743a2057616c6c657460008201527f2074617820726563697069656e742063616e6e6f74206265206120307830206160208201527f6464726573730000000000000000000000000000000000000000000000000000604082015250565b60006130a9604683612845565b91506130b482613027565b606082019050919050565b600060208201905081810360008301526130d88161309c565b9050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b600061313b602e83612845565b9150613146826130df565b604082019050919050565b6000602082019050818103600083015261316a8161312e565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006131cd602683612845565b91506131d882613171565b604082019050919050565b600060208201905081810360008301526131fc816131c0565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061325f602483612845565b915061326a82613203565b604082019050919050565b6000602082019050818103600083015261328e81613252565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006132f1602283612845565b91506132fc82613295565b604082019050919050565b60006020820190508181036000830152613320816132e4565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b600061335d601d83612845565b915061336882613327565b602082019050919050565b6000602082019050818103600083015261338c81613350565b9050919050565b600061339e82612806565b91506133a983612806565b92508282026133b781612806565b915082820484148315176133ce576133cd612dce565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061340f82612806565b915061341a83612806565b92508261342a576134296133d5565b5b828204905092915050565b600060408201905061344a6000830185612c72565b6134576020830184612810565b9392505050565b600061346982612806565b915061347483612806565b925082820390508181111561348c5761348b612dce565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006134c8602083612845565b91506134d382613492565b602082019050919050565b600060208201905081810360008301526134f7816134bb565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061355a602183612845565b9150613565826134fe565b604082019050919050565b600060208201905081810360008301526135898161354d565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b60006135ec602283612845565b91506135f782613590565b604082019050919050565b6000602082019050818103600083015261361b816135df565b9050919050565b60008151905061363181612923565b92915050565b60006020828403121561364d5761364c6128ec565b5b600061365b84828501613622565b91505092915050565b60006040820190506136796000830185612c72565b6136866020830184612c72565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000819050919050565b60006136e16136dc6136d7846136bc565b612bf8565b612806565b9050919050565b6136f1816136c6565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61372c81612911565b82525050565b600061373e8383613723565b60208301905092915050565b6000602082019050919050565b6000613762826136f7565b61376c8185613702565b935061377783613713565b8060005b838110156137a857815161378f8882613732565b975061379a8361374a565b92505060018101905061377b565b5085935050505092915050565b600060a0820190506137ca6000830188612810565b6137d760208301876136e8565b81810360408301526137e98186613757565b90506137f86060830185612c72565b6138056080830184612810565b9695505050505050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061386b602583612845565b91506138768261380f565b604082019050919050565b6000602082019050818103600083015261389a8161385e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006138fd602383612845565b9150613908826138a1565b604082019050919050565b6000602082019050818103600083015261392c816138f0565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061398f602683612845565b915061399a82613933565b604082019050919050565b600060208201905081810360008301526139be81613982565b905091905056fea264697066735822122052260f563d38831a4af9776de140ea3f76e1da745e86c2bb1c3f1bef0bfc5d3664736f6c63430008130033437261636b536d6f6b696e67506574726f6c48756666696e67456c6f6e4d75736b4669676874696e67417457616c6d65727453637265616d696e67594f4c4f363942756c6c646f67506f6f646c65

Deployed Bytecode

0x6080604052600436106101dc5760003560e01c80637685655711610102578063a9059cbb11610095578063cc274b2911610064578063cc274b2914610703578063dd62ed3e1461072c578063f112ba7214610769578063f2fde38b14610794576101e3565b8063a9059cbb1461064b578063c024666814610688578063c400f5e7146106b1578063c4d66de8146106da576101e3565b80638fffabed116100d15780638fffabed1461058d57806395d89b41146105b8578063a457c2d7146105e3578063a5ece94114610620576101e3565b806376856557146104bf57806379cc6790146104fc5780638da5cb5b146105255780638e749a8f14610550576101e3565b8063395093511161017a5780634fbee193116101495780634fbee19314610403578063502f74461461044057806370a082311461046b578063715018a6146104a8576101e3565b80633950935114610337578063408ccbdf1461037457806342966c68146103b15780634a4dd9cd146103da576101e3565b806318160ddd116101b657806318160ddd1461027b57806323b872dd146102a65780632d99d32e146102e3578063313ce5671461030c576101e3565b80630445b667146101e857806306fdde0314610213578063095ea7b31461023e576101e3565b366101e357005b600080fd5b3480156101f457600080fd5b506101fd6107bd565b60405161020a919061281f565b60405180910390f35b34801561021f57600080fd5b506102286107c3565b60405161023591906128ca565b60405180910390f35b34801561024a57600080fd5b506102656004803603810190610260919061297b565b610855565b60405161027291906129d6565b60405180910390f35b34801561028757600080fd5b50610290610878565b60405161029d919061281f565b60405180910390f35b3480156102b257600080fd5b506102cd60048036038101906102c891906129f1565b610882565b6040516102da91906129d6565b60405180910390f35b3480156102ef57600080fd5b5061030a60048036038101906103059190612a70565b6108b1565b005b34801561031857600080fd5b50610321610957565b60405161032e9190612acc565b60405180910390f35b34801561034357600080fd5b5061035e6004803603810190610359919061297b565b610960565b60405161036b91906129d6565b60405180910390f35b34801561038057600080fd5b5061039b60048036038101906103969190612ae7565b610997565b6040516103a89190612b31565b60405180910390f35b3480156103bd57600080fd5b506103d860048036038101906103d39190612ae7565b6109c5565b005b3480156103e657600080fd5b5061040160048036038101906103fc9190612b78565b6109d9565b005b34801561040f57600080fd5b5061042a60048036038101906104259190612bcb565b610d63565b60405161043791906129d6565b60405180910390f35b34801561044c57600080fd5b50610455610d83565b6040516104629190612c57565b60405180910390f35b34801561047757600080fd5b50610492600480360381019061048d9190612bcb565b610da9565b60405161049f919061281f565b60405180910390f35b3480156104b457600080fd5b506104bd610df1565b005b3480156104cb57600080fd5b506104e660048036038101906104e19190612bcb565b610e05565b6040516104f391906129d6565b60405180910390f35b34801561050857600080fd5b50610523600480360381019061051e919061297b565b610e25565b005b34801561053157600080fd5b5061053a610e45565b6040516105479190612c81565b60405180910390f35b34801561055c57600080fd5b5061057760048036038101906105729190612ae7565b610e6f565b6040516105849190612b31565b60405180910390f35b34801561059957600080fd5b506105a2610e9d565b6040516105af9190612c81565b60405180910390f35b3480156105c457600080fd5b506105cd610ec3565b6040516105da91906128ca565b60405180910390f35b3480156105ef57600080fd5b5061060a6004803603810190610605919061297b565b610f55565b60405161061791906129d6565b60405180910390f35b34801561062c57600080fd5b50610635610fcc565b6040516106429190612c81565b60405180910390f35b34801561065757600080fd5b50610672600480360381019061066d919061297b565b610ff2565b60405161067f91906129d6565b60405180910390f35b34801561069457600080fd5b506106af60048036038101906106aa9190612a70565b611015565b005b3480156106bd57600080fd5b506106d860048036038101906106d39190612bcb565b6110c6565b005b3480156106e657600080fd5b5061070160048036038101906106fc9190612bcb565b6111c3565b005b34801561070f57600080fd5b5061072a60048036038101906107259190612ae7565b6112ab565b005b34801561073857600080fd5b50610753600480360381019061074e9190612c9c565b6112f4565b604051610760919061281f565b60405180910390f35b34801561077557600080fd5b5061077e61137b565b60405161078b919061281f565b60405180910390f35b3480156107a057600080fd5b506107bb60048036038101906107b69190612bcb565b611391565b005b60065481565b6060600380546107d290612d0b565b80601f01602080910402602001604051908101604052809291908181526020018280546107fe90612d0b565b801561084b5780601f106108205761010080835404028352916020019161084b565b820191906000526020600020905b81548152906001019060200180831161082e57829003601f168201915b5050505050905090565b600080610860611414565b905061086d81858561141c565b600191505092915050565b6000600254905090565b60008061088d611414565b905061089a8582856115e5565b6108a5858585611671565b60019150509392505050565b6108b9611c1d565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610949576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094090612dae565b60405180910390fd5b6109538282611c9b565b5050565b60006012905090565b60008061096b611414565b905061098c81858561097d85896112f4565b6109879190612dfd565b61141c565b600191505092915050565b600b81600381106109a757600080fd5b60109182820401919006600202915054906101000a900461ffff1681565b6109d66109d0611414565b82611d44565b50565b6109e1611c1d565b8260096000600381106109f7576109f6612e31565b5b601091828204019190066002029054906101000a900461ffff16600b600060038110610a2657610a25612e31565b5b601091828204019190066002029054906101000a900461ffff16610a4a9190612e60565b610a549190612e96565b600b600060038110610a6957610a68612e31565b5b601091828204019190066002026101000a81548161ffff021916908361ffff160217905550816009600160038110610aa457610aa3612e31565b5b601091828204019190066002029054906101000a900461ffff16600b600160038110610ad357610ad2612e31565b5b601091828204019190066002029054906101000a900461ffff16610af79190612e60565b610b019190612e96565b600b600160038110610b1657610b15612e31565b5b601091828204019190066002026101000a81548161ffff021916908361ffff160217905550806009600260038110610b5157610b50612e31565b5b601091828204019190066002029054906101000a900461ffff16600b600260038110610b8057610b7f612e31565b5b601091828204019190066002029054906101000a900461ffff16610ba49190612e60565b610bae9190612e96565b600b600260038110610bc357610bc2612e31565b5b601091828204019190066002026101000a81548161ffff021916908361ffff160217905550611388600b600060038110610c0057610bff612e31565b5b601091828204019190066002029054906101000a900461ffff1661ffff1611158015610c605750611388600b600160038110610c3f57610c3e612e31565b5b601091828204019190066002029054906101000a900461ffff1661ffff1611155b8015610ca05750611388600b600260038110610c7f57610c7e612e31565b5b601091828204019190066002029054906101000a900461ffff1661ffff1611155b610cdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd690612f3e565b60405180910390fd5b60405180606001604052808461ffff1661ffff1681526020018361ffff1661ffff1681526020018261ffff1661ffff168152506009906003610d2292919061274c565b507f1e5d76e30cd4303515f118e75cbf9d9440bb68ab78b2c2fa46984200dc11ad64838383604051610d5693929190612f5e565b60405180910390a1505050565b600a6020528060005260406000206000915054906101000a900460ff1681565b600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610df9611c1d565b610e036000611f11565b565b600e6020528060005260406000206000915054906101000a900460ff1681565b610e3782610e31611414565b836115e5565b610e418282611d44565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60098160038110610e7f57600080fd5b60109182820401919006600202915054906101000a900461ffff1681565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060048054610ed290612d0b565b80601f0160208091040260200160405190810160405280929190818152602001828054610efe90612d0b565b8015610f4b5780601f10610f2057610100808354040283529160200191610f4b565b820191906000526020600020905b815481529060010190602001808311610f2e57829003601f168201915b5050505050905090565b600080610f60611414565b90506000610f6e82866112f4565b905083811015610fb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610faa90613007565b60405180910390fd5b610fc0828686840361141c565b60019250505092915050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080610ffd611414565b905061100a818585611671565b600191505092915050565b61101d611c1d565b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516110ba91906129d6565b60405180910390a25050565b6110ce611c1d565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361113d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611134906130bf565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611189816001611015565b7feaf1986d341c3096d2d5d32f86ed29a21fee4e0d8365cd2b6fa85c0ec6889cf6816040516111b89190612c81565b60405180910390a150565b600560159054906101000a900460ff16806111eb5750600560149054906101000a900460ff16155b61122a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122190613151565b60405180910390fd5b6000600560159054906101000a900460ff16159050801561127c576001600560156101000a81548160ff0219169083151502179055506001600560146101000a81548160ff0219169083151502179055505b61128582611fd7565b80156112a7576000600560156101000a81548160ff0219169083151502179055505b5050565b6112b3611c1d565b806006819055507f18ff2fc8464635e4f668567019152095047e34d7a2ab4b97661ba4dc7fd06476816040516112e9919061281f565b60405180910390a150565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600754600061138c9190612dfd565b905090565b611399611c1d565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611408576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ff906131e3565b60405180910390fd5b61141181611f11565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361148b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148290613275565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036114fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f190613307565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516115d8919061281f565b60405180910390a3505050565b60006115f184846112f4565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461166b578181101561165d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165490613373565b60405180910390fd5b61166a848484840361141c565b5b50505050565b600060065461167e61137b565b10159050600c60009054906101000a900460ff161580156116e95750600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156116f25750805b15611854576001600c60006101000a81548160ff02191690831515021790555060008061172157506000600754115b1561183857600060075460006117379190612dfd565b9050600061174482612269565b60004790506000836007548361175a9190613393565b6117649190613404565b9050600081111561182b57600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050509250821561182a577f3e6afd69feef8f4cc1adbe6d3905e477db85aa5aa28d02674dc4bc6d39237fe4600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051611821929190613435565b60405180910390a15b5b6000600781905550505050505b6000600c60006101000a81548160ff0219169083151502179055505b600c60009054906101000a900460ff161580156118715750600082115b80156118cb5750600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156119215750600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156119775750600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611c0c5760008060039050600e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611a1a576000600b6000600381106119ec576119eb612e31565b5b601091828204019190066002029054906101000a900461ffff1661ffff161115611a1557600090505b611af3565b600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611ab1576000600b600160038110611a8357611a82612e31565b5b601091828204019190066002029054906101000a900461ffff1661ffff161115611aac57600190505b611af2565b6000600b600260038110611ac857611ac7612e31565b5b601091828204019190066002029054906101000a900461ffff1661ffff161115611af157600290505b5b5b60038160ff161015611bf457612710600b8260ff1660038110611b1957611b18612e31565b5b601091828204019190066002029054906101000a900461ffff1661ffff1685611b429190613393565b611b4c9190613404565b91508184611b5a919061345e565b9350600b8160ff1660038110611b7357611b72612e31565b5b601091828204019190066002029054906101000a900461ffff1661ffff1660098260ff1660038110611ba857611ba7612e31565b5b601091828204019190066002029054906101000a900461ffff1661ffff1683611bd19190613393565b611bdb9190613404565b60076000828254611bec9190612dfd565b925050819055505b6000821115611c0957611c088630846124ac565b5b50505b611c178484846124ac565b50505050565b611c25611414565b73ffffffffffffffffffffffffffffffffffffffff16611c43610e45565b73ffffffffffffffffffffffffffffffffffffffff1614611c99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c90906134de565b60405180910390fd5b565b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f911aa18ddbbbc33c9b4c704a71bdaa0984b0aa2e82726a7f51e64bad0b0a845582604051611d3891906129d6565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611db3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611daa90613570565b60405180910390fd5b611dbf82600083612722565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611e45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3c90613602565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611ef8919061281f565b60405180910390a3611f0c83600084612732565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80600c60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612085573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120a99190613637565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612132573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121569190613637565b6040518363ffffffff1660e01b8152600401612173929190613664565b6020604051808303816000875af1158015612192573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121b69190613637565b600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612223600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001611c9b565b8073ffffffffffffffffffffffffffffffffffffffff167fbc052db65df144ad4f71f02da93cae3d4401104c30ac374d7cc10d87ee07b60260405160405180910390a250565b6000600267ffffffffffffffff8111156122865761228561368d565b5b6040519080825280602002602001820160405280156122b45781602001602082028036833780820191505090505b50905030816000815181106122cc576122cb612e31565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612373573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123979190613637565b816001815181106123ab576123aa612e31565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061241230600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461141c565b600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016124769594939291906137b5565b600060405180830381600087803b15801561249057600080fd5b505af11580156124a4573d6000803e3d6000fd5b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361251b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251290613881565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361258a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258190613913565b60405180910390fd5b612595838383612722565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561261b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612612906139a5565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612709919061281f565b60405180910390a361271c848484612732565b50505050565b61272d838383612742565b505050565b61273d838383612747565b505050565b505050565b505050565b826003600f016010900481019282156127d85791602002820160005b838211156127a857835183826101000a81548161ffff021916908361ffff1602179055509260200192600201602081600101049283019260010302612768565b80156127d65782816101000a81549061ffff02191690556002016020816001010492830192600103026127a8565b505b5090506127e591906127e9565b5090565b5b808211156128025760008160009055506001016127ea565b5090565b6000819050919050565b61281981612806565b82525050565b60006020820190506128346000830184612810565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612874578082015181840152602081019050612859565b60008484015250505050565b6000601f19601f8301169050919050565b600061289c8261283a565b6128a68185612845565b93506128b6818560208601612856565b6128bf81612880565b840191505092915050565b600060208201905081810360008301526128e48184612891565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061291c826128f1565b9050919050565b61292c81612911565b811461293757600080fd5b50565b60008135905061294981612923565b92915050565b61295881612806565b811461296357600080fd5b50565b6000813590506129758161294f565b92915050565b60008060408385031215612992576129916128ec565b5b60006129a08582860161293a565b92505060206129b185828601612966565b9150509250929050565b60008115159050919050565b6129d0816129bb565b82525050565b60006020820190506129eb60008301846129c7565b92915050565b600080600060608486031215612a0a57612a096128ec565b5b6000612a188682870161293a565b9350506020612a298682870161293a565b9250506040612a3a86828701612966565b9150509250925092565b612a4d816129bb565b8114612a5857600080fd5b50565b600081359050612a6a81612a44565b92915050565b60008060408385031215612a8757612a866128ec565b5b6000612a958582860161293a565b9250506020612aa685828601612a5b565b9150509250929050565b600060ff82169050919050565b612ac681612ab0565b82525050565b6000602082019050612ae16000830184612abd565b92915050565b600060208284031215612afd57612afc6128ec565b5b6000612b0b84828501612966565b91505092915050565b600061ffff82169050919050565b612b2b81612b14565b82525050565b6000602082019050612b466000830184612b22565b92915050565b612b5581612b14565b8114612b6057600080fd5b50565b600081359050612b7281612b4c565b92915050565b600080600060608486031215612b9157612b906128ec565b5b6000612b9f86828701612b63565b9350506020612bb086828701612b63565b9250506040612bc186828701612b63565b9150509250925092565b600060208284031215612be157612be06128ec565b5b6000612bef8482850161293a565b91505092915050565b6000819050919050565b6000612c1d612c18612c13846128f1565b612bf8565b6128f1565b9050919050565b6000612c2f82612c02565b9050919050565b6000612c4182612c24565b9050919050565b612c5181612c36565b82525050565b6000602082019050612c6c6000830184612c48565b92915050565b612c7b81612911565b82525050565b6000602082019050612c966000830184612c72565b92915050565b60008060408385031215612cb357612cb26128ec565b5b6000612cc18582860161293a565b9250506020612cd28582860161293a565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612d2357607f821691505b602082108103612d3657612d35612cdc565b5b50919050565b7f44656661756c74526f757465723a2043616e6e6f742072656d6f766520696e6960008201527f7469616c20706169722066726f6d206c69737400000000000000000000000000602082015250565b6000612d98603383612845565b9150612da382612d3c565b604082019050919050565b60006020820190508181036000830152612dc781612d8b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612e0882612806565b9150612e1383612806565b9250828201905080821115612e2b57612e2a612dce565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000612e6b82612b14565b9150612e7683612b14565b9250828203905061ffff811115612e9057612e8f612dce565b5b92915050565b6000612ea182612b14565b9150612eac83612b14565b9250828201905061ffff811115612ec657612ec5612dce565b5b92915050565b7f546178657344656661756c74526f757465723a2043616e6e6f7420657863656560008201527f64206d617820746f74616c20666565206f662035302500000000000000000000602082015250565b6000612f28603683612845565b9150612f3382612ecc565b604082019050919050565b60006020820190508181036000830152612f5781612f1b565b9050919050565b6000606082019050612f736000830186612b22565b612f806020830185612b22565b612f8d6040830184612b22565b949350505050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612ff1602583612845565b9150612ffc82612f95565b604082019050919050565b6000602082019050818103600083015261302081612fe4565b9050919050565b7f546178657344656661756c74526f7574657257616c6c65743a2057616c6c657460008201527f2074617820726563697069656e742063616e6e6f74206265206120307830206160208201527f6464726573730000000000000000000000000000000000000000000000000000604082015250565b60006130a9604683612845565b91506130b482613027565b606082019050919050565b600060208201905081810360008301526130d88161309c565b9050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b600061313b602e83612845565b9150613146826130df565b604082019050919050565b6000602082019050818103600083015261316a8161312e565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006131cd602683612845565b91506131d882613171565b604082019050919050565b600060208201905081810360008301526131fc816131c0565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061325f602483612845565b915061326a82613203565b604082019050919050565b6000602082019050818103600083015261328e81613252565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006132f1602283612845565b91506132fc82613295565b604082019050919050565b60006020820190508181036000830152613320816132e4565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b600061335d601d83612845565b915061336882613327565b602082019050919050565b6000602082019050818103600083015261338c81613350565b9050919050565b600061339e82612806565b91506133a983612806565b92508282026133b781612806565b915082820484148315176133ce576133cd612dce565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061340f82612806565b915061341a83612806565b92508261342a576134296133d5565b5b828204905092915050565b600060408201905061344a6000830185612c72565b6134576020830184612810565b9392505050565b600061346982612806565b915061347483612806565b925082820390508181111561348c5761348b612dce565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006134c8602083612845565b91506134d382613492565b602082019050919050565b600060208201905081810360008301526134f7816134bb565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061355a602183612845565b9150613565826134fe565b604082019050919050565b600060208201905081810360008301526135898161354d565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b60006135ec602283612845565b91506135f782613590565b604082019050919050565b6000602082019050818103600083015261361b816135df565b9050919050565b60008151905061363181612923565b92915050565b60006020828403121561364d5761364c6128ec565b5b600061365b84828501613622565b91505092915050565b60006040820190506136796000830185612c72565b6136866020830184612c72565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000819050919050565b60006136e16136dc6136d7846136bc565b612bf8565b612806565b9050919050565b6136f1816136c6565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61372c81612911565b82525050565b600061373e8383613723565b60208301905092915050565b6000602082019050919050565b6000613762826136f7565b61376c8185613702565b935061377783613713565b8060005b838110156137a857815161378f8882613732565b975061379a8361374a565b92505060018101905061377b565b5085935050505092915050565b600060a0820190506137ca6000830188612810565b6137d760208301876136e8565b81810360408301526137e98186613757565b90506137f86060830185612c72565b6138056080830184612810565b9695505050505050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061386b602583612845565b91506138768261380f565b604082019050919050565b6000602082019050818103600083015261389a8161385e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006138fd602383612845565b9150613908826138a1565b604082019050919050565b6000602082019050818103600083015261392c816138f0565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061398f602683612845565b915061399a82613933565b604082019050919050565b600060208201905081810360008301526139be81613982565b905091905056fea264697066735822122052260f563d38831a4af9776de140ea3f76e1da745e86c2bb1c3f1bef0bfc5d3664736f6c63430008130033

Deployed Bytecode Sourcemap

544:6648:11:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;691:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2137:98:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4423:197;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3234:106;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5182:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6460:197:11;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2333:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5833:234:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;902:26:11;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;564:89:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3430:584:11;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;844:51;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;963:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3398:125:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1817:101:10;;;;;;;;;;;;;:::i;:::-;;1030:41:11;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;959:161:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1194:85:10;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;807:30:11;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1003:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2348:102:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6554:427;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;770:31:11;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3719:189:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4020:193:11;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3093:331;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2193:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2804:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3966:149:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2987:100:11;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2067:198:10;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;691:28:11;;;;:::o;2137:98:1:-;2191:13;2223:5;2216:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2137:98;:::o;4423:197::-;4506:4;4522:13;4538:12;:10;:12::i;:::-;4522:28;;4560:32;4569:5;4576:7;4585:6;4560:8;:32::i;:::-;4609:4;4602:11;;;4423:197;;;;:::o;3234:106::-;3295:7;3321:12;;3314:19;;3234:106;:::o;5182:256::-;5279:4;5295:15;5313:12;:10;:12::i;:::-;5295:30;;5335:38;5351:4;5357:7;5366:6;5335:15;:38::i;:::-;5383:27;5393:4;5399:2;5403:6;5383:9;:27::i;:::-;5427:4;5420:11;;;5182:256;;;;;:::o;6460:197:11:-;1087:13:10;:11;:13::i;:::-;6552:6:11::1;;;;;;;;;;;6544:14;;:4;:14;;::::0;6536:78:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;6625:25;6637:4;6643:6;6625:11;:25::i;:::-;6460:197:::0;;:::o;2333:83::-;2383:5;2407:2;2400:9;;2333:83;:::o;5833:234:1:-;5921:4;5937:13;5953:12;:10;:12::i;:::-;5937:28;;5975:64;5984:5;5991:7;6028:10;6000:25;6010:5;6017:7;6000:9;:25::i;:::-;:38;;;;:::i;:::-;5975:8;:64::i;:::-;6056:4;6049:11;;;5833:234;;;;:::o;902:26:11:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;564:89:2:-;619:27;625:12;:10;:12::i;:::-;639:6;619:5;:27::i;:::-;564:89;:::o;3430:584:11:-;1087:13:10;:11;:13::i;:::-;3588:7:11::1;3569:13;3583:1;3569:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;3554:9;3564:1;3554:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;:31;;;;:::i;:::-;:41;;;;:::i;:::-;3539:9;3549:1;3539:12;;;;;;;:::i;:::-;;;;;;;;;;;;;:56;;;;;;;;;;;;;;;;;;3654:8;3635:13;3649:1;3635:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;3620:9;3630:1;3620:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;:31;;;;:::i;:::-;:42;;;;:::i;:::-;3605:9;3615:1;3605:12;;;;;;;:::i;:::-;;;;;;;;;;;;;:57;;;;;;;;;;;;;;;;;;3721:12;3702:13;3716:1;3702:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;3687:9;3697:1;3687:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;:31;;;;:::i;:::-;:46;;;;:::i;:::-;3672:9;3682:1;3672:12;;;;;;;:::i;:::-;;;;;;;;;;;;;:61;;;;;;;;;;;;;;;;;;3767:4;3751:9;3761:1;3751:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;:20;;;;:44;;;;;3791:4;3775:9;3785:1;3775:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;:20;;;;3751:44;:68;;;;;3815:4;3799:9;3809:1;3799:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;:20;;;;3751:68;3743:135;;;;;;;;;;;;:::i;:::-;;;;;;;;;3889:49;;;;;;;;3906:7;3889:49;;;;;;;;3915:8;3889:49;;;;;;;;3925:12;3889:49;;;;;;::::0;:13:::1;:49;;;;;;;:::i;:::-;;3954:53;3975:7;3984:8;3994:12;3954:53;;;;;;;;:::i;:::-;;;;;;;;3430:584:::0;;;:::o;844:51::-;;;;;;;;;;;;;;;;;;;;;;:::o;963:34::-;;;;;;;;;;;;;:::o;3398:125:1:-;3472:7;3498:9;:18;3508:7;3498:18;;;;;;;;;;;;;;;;3491:25;;3398:125;;;:::o;1817:101:10:-;1087:13;:11;:13::i;:::-;1881:30:::1;1908:1;1881:18;:30::i;:::-;1817:101::o:0;1030:41:11:-;;;;;;;;;;;;;;;;;;;;;;:::o;959:161:2:-;1035:46;1051:7;1060:12;:10;:12::i;:::-;1074:6;1035:15;:46::i;:::-;1091:22;1097:7;1106:6;1091:5;:22::i;:::-;959:161;;:::o;1194:85:10:-;1240:7;1266:6;;;;;;;;;;;1259:13;;1194:85;:::o;807:30:11:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1003:21::-;;;;;;;;;;;;;:::o;2348:102:1:-;2404:13;2436:7;2429:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2348:102;:::o;6554:427::-;6647:4;6663:13;6679:12;:10;:12::i;:::-;6663:28;;6701:24;6728:25;6738:5;6745:7;6728:9;:25::i;:::-;6701:52;;6791:15;6771:16;:35;;6763:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;6882:60;6891:5;6898:7;6926:15;6907:16;:34;6882:8;:60::i;:::-;6970:4;6963:11;;;;6554:427;;;;:::o;770:31:11:-;;;;;;;;;;;;;:::o;3719:189:1:-;3798:4;3814:13;3830:12;:10;:12::i;:::-;3814:28;;3852;3862:5;3869:2;3873:6;3852:9;:28::i;:::-;3897:4;3890:11;;;3719:189;;;;:::o;4020:193:11:-;1087:13:10;:11;:13::i;:::-;4136:10:11::1;4106:18;:27;4125:7;4106:27;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;4186:7;4170:36;;;4195:10;4170:36;;;;;;:::i;:::-;;;;;;;;4020:193:::0;;:::o;3093:331::-;1087:13:10;:11;:13::i;:::-;3203:1:11::1;3180:25;;:11;:25;;::::0;3172:108:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3310:11;3291:16;;:30;;;;;;;;;;;;;;;;;;3331:34;3347:11;3360:4;3331:15;:34::i;:::-;3381:36;3405:11;3381:36;;;;;;:::i;:::-;;;;;;;;3093:331:::0;:::o;2193:99::-;1410:13:9;;;;;;;;;;;:30;;;;1428:12;;;;;;;;;;;1427:13;1410:30;1402:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;1502:19;1525:13;;;;;;;;;;;1524:14;1502:36;;1552:14;1548:98;;;1598:4;1582:13;;:20;;;;;;;;;;;;;;;;;;1631:4;1616:12;;:19;;;;;;;;;;;;;;;;;;1548:98;2261:24:11::1;2277:7;2261:15;:24::i;:::-;1672:14:9::0;1668:66;;;1718:5;1702:13;;:21;;;;;;;;;;;;;;;;;;1668:66;1392:348;2193:99:11;:::o;2804:177::-;1087:13:10;:11;:13::i;:::-;2900:14:11::1;2884:13;:30;;;;2938:36;2959:14;2938:36;;;;;;:::i;:::-;;;;;;;;2804:177:::0;:::o;3966:149:1:-;4055:7;4081:11;:18;4093:5;4081:18;;;;;;;;;;;;;;;:27;4100:7;4081:27;;;;;;;;;;;;;;;;4074:34;;3966:149;;;;:::o;2987:100:11:-;3033:7;3063:17;;3059:1;:21;;;;:::i;:::-;3052:28;;2987:100;:::o;2067:198:10:-;1087:13;:11;:13::i;:::-;2175:1:::1;2155:22;;:8;:22;;::::0;2147:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;2230:28;2249:8;2230:18;:28::i;:::-;2067:198:::0;:::o;640:96:0:-;693:7;719:10;712:17;;640:96;:::o;10436:340:1:-;10554:1;10537:19;;:5;:19;;;10529:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10634:1;10615:21;;:7;:21;;;10607:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10716:6;10686:11;:18;10698:5;10686:18;;;;;;;;;;;;;;;:27;10705:7;10686:27;;;;;;;;;;;;;;;:36;;;;10753:7;10737:32;;10746:5;10737:32;;;10762:6;10737:32;;;;;;:::i;:::-;;;;;;;;10436:340;;;:::o;11057:411::-;11157:24;11184:25;11194:5;11201:7;11184:9;:25::i;:::-;11157:52;;11243:17;11223:16;:37;11219:243;;11304:6;11284:16;:26;;11276:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11386:51;11395:5;11402:7;11430:6;11411:16;:25;11386:8;:51::i;:::-;11219:243;11147:321;11057:411;;;:::o;4219:1944:11:-;4347:12;4381:13;;4362:15;:13;:15::i;:::-;:32;;4347:47;;4418:9;;;;;;;;;;;4417:10;:29;;;;;4432:8;:14;4441:4;4432:14;;;;;;;;;;;;;;;;;;;;;;;;;4431:15;4417:29;:40;;;;;4450:7;4417:40;4413:836;;;4485:4;4473:9;;:16;;;;;;;;;;;;;;;;;;4520:5;:30;;;;4549:1;4529:17;;:21;4520:30;4516:691;;;4570:18;4595:17;;4591:1;:21;;;;:::i;:::-;4570:42;;4630:12;4669:30;4688:10;4669:18;:30::i;:::-;4717:21;4741;4717:45;;4797:24;4860:10;4840:17;;4824:13;:33;;;;:::i;:::-;:46;;;;:::i;:::-;4797:73;;4911:1;4892:16;:20;4888:265;;;4954:16;;;;;;;;;;;4946:30;;:48;4977:16;4946:48;;;;;;;;;;;;;;;;;;;;;;;4936:58;;5020:7;5016:119;;;5060:52;5077:16;;;;;;;;;;;5095;5060:52;;;;;;;:::i;:::-;;;;;;;;5016:119;4888:265;5190:1;5170:17;:21;;;;4552:655;;;;4516:691;5233:5;5221:9;;:17;;;;;;;;;;;;;;;;;;4413:836;5264:9;;;;;;;;;;;5263:10;:24;;;;;5286:1;5277:6;:10;5263:24;:51;;;;;5305:8;;;;;;;;;;;5291:23;;:2;:23;;;;5263:51;:80;;;;;5319:18;:24;5338:4;5319:24;;;;;;;;;;;;;;;;;;;;;;;;;5318:25;5263:80;:107;;;;;5348:18;:22;5367:2;5348:22;;;;;;;;;;;;;;;;;;;;;;;;;5347:23;5263:107;5259:837;;;5386:12;5416;5431:1;5416:16;;5463:8;:14;5472:4;5463:14;;;;;;;;;;;;;;;;;;;;;;;;;5459:236;;;5516:1;5501:9;5511:1;5501:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;:16;;;5497:32;;;5528:1;5519:10;;5497:32;5459:236;;;5566:8;:12;5575:2;5566:12;;;;;;;;;;;;;;;;;;;;;;;;;5562:133;;;5617:1;5602:9;5612:1;5602:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;:16;;;5598:32;;;5629:1;5620:10;;5598:32;5562:133;;;5682:1;5667:9;5677:1;5667:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;:16;;;5663:32;;;5694:1;5685:10;;5663:32;5562:133;5459:236;5735:1;5726:6;:10;;;5722:261;;;5809:5;5789:9;5799:6;5789:17;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;5780:26;;:6;:26;;;;:::i;:::-;:34;;;;:::i;:::-;5773:41;;5842:4;5832:14;;;;;:::i;:::-;;;5933:9;5943:6;5933:17;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;5902:48;;5909:13;5923:6;5909:21;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;5902:28;;:4;:28;;;;:::i;:::-;:48;;;;:::i;:::-;5881:17;;:69;;;;;;;:::i;:::-;;;;;;;;5722:261;6008:1;6001:4;:8;5997:89;;;6029:42;6045:4;6059;6066;6029:15;:42::i;:::-;5997:89;5372:724;;5259:837;6114:33;6130:4;6136:2;6140:6;6114:15;:33::i;:::-;4328:1835;4219:1944;;;:::o;1352:130:10:-;1426:12;:10;:12::i;:::-;1415:23;;:7;:5;:7::i;:::-;:23;;;1407:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1352:130::o;6663:175:11:-;6746:6;6729:8;:14;6738:4;6729:14;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;6818:4;6802:29;;;6824:6;6802:29;;;;;;:::i;:::-;;;;;;;;6663:175;;:::o;9354:659:1:-;9456:1;9437:21;;:7;:21;;;9429:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;9507:49;9528:7;9545:1;9549:6;9507:20;:49::i;:::-;9567:22;9592:9;:18;9602:7;9592:18;;;;;;;;;;;;;;;;9567:43;;9646:6;9628:14;:24;;9620:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;9763:6;9746:14;:23;9725:9;:18;9735:7;9725:18;;;;;;;;;;;;;;;:44;;;;9878:6;9862:12;;:22;;;;;;;;;;;9936:1;9910:37;;9919:7;9910:37;;;9940:6;9910:37;;;;;;:::i;:::-;;;;;;;;9958:48;9978:7;9995:1;9999:6;9958:19;:48::i;:::-;9419:594;9354:659;;:::o;2419:187:10:-;2492:16;2511:6;;;;;;;;;;;2492:25;;2536:8;2527:6;;:17;;;;;;;;;;;;;;;;;;2590:8;2559:40;;2580:8;2559:40;;;;;;;;;;;;2482:124;2419:187;:::o;6169:285:11:-;6258:6;6228:8;;:37;;;;;;;;;;;;;;;;;;6302:8;;;;;;;;;;;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6284:48;;;6341:4;6348:8;;;;;;;;;;;:13;;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6284:80;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6275:6;;:89;;;;;;;;;;;;;;;;;;6383:25;6395:6;;;;;;;;;;;6403:4;6383:11;:25::i;:::-;6440:6;6424:23;;;;;;;;;;;;6169:285;:::o;2426:372::-;2493:21;2531:1;2517:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2493:40;;2561:4;2543;2548:1;2543:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;2586:8;;;;;;;;;;;:13;;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2576:4;2581:1;2576:7;;;;;;;;:::i;:::-;;;;;;;:25;;;;;;;;;;;2612:55;2629:4;2644:8;;;;;;;;;;;2655:11;2612:8;:55::i;:::-;2678:8;;;;;;;;;;;:59;;;2738:11;2751:1;2754:4;2768;2775:15;2678:113;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2483:315;2426:372;:::o;7435:788:1:-;7547:1;7531:18;;:4;:18;;;7523:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7623:1;7609:16;;:2;:16;;;7601:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;7676:38;7697:4;7703:2;7707:6;7676:20;:38::i;:::-;7725:19;7747:9;:15;7757:4;7747:15;;;;;;;;;;;;;;;;7725:37;;7795:6;7780:11;:21;;7772:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;7910:6;7896:11;:20;7878:9;:15;7888:4;7878:15;;;;;;;;;;;;;;;:38;;;;8110:6;8093:9;:13;8103:2;8093:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;8157:2;8142:26;;8151:4;8142:26;;;8161:6;8142:26;;;;;;:::i;:::-;;;;;;;;8179:37;8199:4;8205:2;8209:6;8179:19;:37::i;:::-;7513:710;7435:788;;;:::o;6844:171:11:-;6964:44;6991:4;6997:2;7001:6;6964:26;:44::i;:::-;6844:171;;;:::o;7021:169::-;7140:43;7166:4;7172:2;7176:6;7140:25;:43::i;:::-;7021:169;;;:::o;12052:91:1:-;;;;:::o;12731:90::-;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:77:12:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:99::-;494:6;528:5;522:12;512:22;;442:99;;;:::o;547:169::-;631:11;665:6;660:3;653:19;705:4;700:3;696:14;681:29;;547:169;;;;:::o;722:246::-;803:1;813:113;827:6;824:1;821:13;813:113;;;912:1;907:3;903:11;897:18;893:1;888:3;884:11;877:39;849:2;846:1;842:10;837:15;;813:113;;;960:1;951:6;946:3;942:16;935:27;784:184;722:246;;;:::o;974:102::-;1015:6;1066:2;1062:7;1057:2;1050:5;1046:14;1042:28;1032:38;;974:102;;;:::o;1082:377::-;1170:3;1198:39;1231:5;1198:39;:::i;:::-;1253:71;1317:6;1312:3;1253:71;:::i;:::-;1246:78;;1333:65;1391:6;1386:3;1379:4;1372:5;1368:16;1333:65;:::i;:::-;1423:29;1445:6;1423:29;:::i;:::-;1418:3;1414:39;1407:46;;1174:285;1082:377;;;;:::o;1465:313::-;1578:4;1616:2;1605:9;1601:18;1593:26;;1665:9;1659:4;1655:20;1651:1;1640:9;1636:17;1629:47;1693:78;1766:4;1757:6;1693:78;:::i;:::-;1685:86;;1465:313;;;;:::o;1865:117::-;1974:1;1971;1964:12;2111:126;2148:7;2188:42;2181:5;2177:54;2166:65;;2111:126;;;:::o;2243:96::-;2280:7;2309:24;2327:5;2309:24;:::i;:::-;2298:35;;2243:96;;;:::o;2345:122::-;2418:24;2436:5;2418:24;:::i;:::-;2411:5;2408:35;2398:63;;2457:1;2454;2447:12;2398:63;2345:122;:::o;2473:139::-;2519:5;2557:6;2544:20;2535:29;;2573:33;2600:5;2573:33;:::i;:::-;2473:139;;;;:::o;2618:122::-;2691:24;2709:5;2691:24;:::i;:::-;2684:5;2681:35;2671:63;;2730:1;2727;2720:12;2671:63;2618:122;:::o;2746:139::-;2792:5;2830:6;2817:20;2808:29;;2846:33;2873:5;2846:33;:::i;:::-;2746:139;;;;:::o;2891:474::-;2959:6;2967;3016:2;3004:9;2995:7;2991:23;2987:32;2984:119;;;3022:79;;:::i;:::-;2984:119;3142:1;3167:53;3212:7;3203:6;3192:9;3188:22;3167:53;:::i;:::-;3157:63;;3113:117;3269:2;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3240:118;2891:474;;;;;:::o;3371:90::-;3405:7;3448:5;3441:13;3434:21;3423:32;;3371:90;;;:::o;3467:109::-;3548:21;3563:5;3548:21;:::i;:::-;3543:3;3536:34;3467:109;;:::o;3582:210::-;3669:4;3707:2;3696:9;3692:18;3684:26;;3720:65;3782:1;3771:9;3767:17;3758:6;3720:65;:::i;:::-;3582:210;;;;:::o;3798:619::-;3875:6;3883;3891;3940:2;3928:9;3919:7;3915:23;3911:32;3908:119;;;3946:79;;:::i;:::-;3908:119;4066:1;4091:53;4136:7;4127:6;4116:9;4112:22;4091:53;:::i;:::-;4081:63;;4037:117;4193:2;4219:53;4264:7;4255:6;4244:9;4240:22;4219:53;:::i;:::-;4209:63;;4164:118;4321:2;4347:53;4392:7;4383:6;4372:9;4368:22;4347:53;:::i;:::-;4337:63;;4292:118;3798:619;;;;;:::o;4423:116::-;4493:21;4508:5;4493:21;:::i;:::-;4486:5;4483:32;4473:60;;4529:1;4526;4519:12;4473:60;4423:116;:::o;4545:133::-;4588:5;4626:6;4613:20;4604:29;;4642:30;4666:5;4642:30;:::i;:::-;4545:133;;;;:::o;4684:468::-;4749:6;4757;4806:2;4794:9;4785:7;4781:23;4777:32;4774:119;;;4812:79;;:::i;:::-;4774:119;4932:1;4957:53;5002:7;4993:6;4982:9;4978:22;4957:53;:::i;:::-;4947:63;;4903:117;5059:2;5085:50;5127:7;5118:6;5107:9;5103:22;5085:50;:::i;:::-;5075:60;;5030:115;4684:468;;;;;:::o;5158:86::-;5193:7;5233:4;5226:5;5222:16;5211:27;;5158:86;;;:::o;5250:112::-;5333:22;5349:5;5333:22;:::i;:::-;5328:3;5321:35;5250:112;;:::o;5368:214::-;5457:4;5495:2;5484:9;5480:18;5472:26;;5508:67;5572:1;5561:9;5557:17;5548:6;5508:67;:::i;:::-;5368:214;;;;:::o;5588:329::-;5647:6;5696:2;5684:9;5675:7;5671:23;5667:32;5664:119;;;5702:79;;:::i;:::-;5664:119;5822:1;5847:53;5892:7;5883:6;5872:9;5868:22;5847:53;:::i;:::-;5837:63;;5793:117;5588:329;;;;:::o;5923:89::-;5959:7;5999:6;5992:5;5988:18;5977:29;;5923:89;;;:::o;6018:115::-;6103:23;6120:5;6103:23;:::i;:::-;6098:3;6091:36;6018:115;;:::o;6139:218::-;6230:4;6268:2;6257:9;6253:18;6245:26;;6281:69;6347:1;6336:9;6332:17;6323:6;6281:69;:::i;:::-;6139:218;;;;:::o;6363:120::-;6435:23;6452:5;6435:23;:::i;:::-;6428:5;6425:34;6415:62;;6473:1;6470;6463:12;6415:62;6363:120;:::o;6489:137::-;6534:5;6572:6;6559:20;6550:29;;6588:32;6614:5;6588:32;:::i;:::-;6489:137;;;;:::o;6632:613::-;6706:6;6714;6722;6771:2;6759:9;6750:7;6746:23;6742:32;6739:119;;;6777:79;;:::i;:::-;6739:119;6897:1;6922:52;6966:7;6957:6;6946:9;6942:22;6922:52;:::i;:::-;6912:62;;6868:116;7023:2;7049:52;7093:7;7084:6;7073:9;7069:22;7049:52;:::i;:::-;7039:62;;6994:117;7150:2;7176:52;7220:7;7211:6;7200:9;7196:22;7176:52;:::i;:::-;7166:62;;7121:117;6632:613;;;;;:::o;7251:329::-;7310:6;7359:2;7347:9;7338:7;7334:23;7330:32;7327:119;;;7365:79;;:::i;:::-;7327:119;7485:1;7510:53;7555:7;7546:6;7535:9;7531:22;7510:53;:::i;:::-;7500:63;;7456:117;7251:329;;;;:::o;7586:60::-;7614:3;7635:5;7628:12;;7586:60;;;:::o;7652:142::-;7702:9;7735:53;7753:34;7762:24;7780:5;7762:24;:::i;:::-;7753:34;:::i;:::-;7735:53;:::i;:::-;7722:66;;7652:142;;;:::o;7800:126::-;7850:9;7883:37;7914:5;7883:37;:::i;:::-;7870:50;;7800:126;;;:::o;7932:153::-;8009:9;8042:37;8073:5;8042:37;:::i;:::-;8029:50;;7932:153;;;:::o;8091:185::-;8205:64;8263:5;8205:64;:::i;:::-;8200:3;8193:77;8091:185;;:::o;8282:276::-;8402:4;8440:2;8429:9;8425:18;8417:26;;8453:98;8548:1;8537:9;8533:17;8524:6;8453:98;:::i;:::-;8282:276;;;;:::o;8564:118::-;8651:24;8669:5;8651:24;:::i;:::-;8646:3;8639:37;8564:118;;:::o;8688:222::-;8781:4;8819:2;8808:9;8804:18;8796:26;;8832:71;8900:1;8889:9;8885:17;8876:6;8832:71;:::i;:::-;8688:222;;;;:::o;8916:474::-;8984:6;8992;9041:2;9029:9;9020:7;9016:23;9012:32;9009:119;;;9047:79;;:::i;:::-;9009:119;9167:1;9192:53;9237:7;9228:6;9217:9;9213:22;9192:53;:::i;:::-;9182:63;;9138:117;9294:2;9320:53;9365:7;9356:6;9345:9;9341:22;9320:53;:::i;:::-;9310:63;;9265:118;8916:474;;;;;:::o;9396:180::-;9444:77;9441:1;9434:88;9541:4;9538:1;9531:15;9565:4;9562:1;9555:15;9582:320;9626:6;9663:1;9657:4;9653:12;9643:22;;9710:1;9704:4;9700:12;9731:18;9721:81;;9787:4;9779:6;9775:17;9765:27;;9721:81;9849:2;9841:6;9838:14;9818:18;9815:38;9812:84;;9868:18;;:::i;:::-;9812:84;9633:269;9582:320;;;:::o;9908:238::-;10048:34;10044:1;10036:6;10032:14;10025:58;10117:21;10112:2;10104:6;10100:15;10093:46;9908:238;:::o;10152:366::-;10294:3;10315:67;10379:2;10374:3;10315:67;:::i;:::-;10308:74;;10391:93;10480:3;10391:93;:::i;:::-;10509:2;10504:3;10500:12;10493:19;;10152:366;;;:::o;10524:419::-;10690:4;10728:2;10717:9;10713:18;10705:26;;10777:9;10771:4;10767:20;10763:1;10752:9;10748:17;10741:47;10805:131;10931:4;10805:131;:::i;:::-;10797:139;;10524:419;;;:::o;10949:180::-;10997:77;10994:1;10987:88;11094:4;11091:1;11084:15;11118:4;11115:1;11108:15;11135:191;11175:3;11194:20;11212:1;11194:20;:::i;:::-;11189:25;;11228:20;11246:1;11228:20;:::i;:::-;11223:25;;11271:1;11268;11264:9;11257:16;;11292:3;11289:1;11286:10;11283:36;;;11299:18;;:::i;:::-;11283:36;11135:191;;;;:::o;11332:180::-;11380:77;11377:1;11370:88;11477:4;11474:1;11467:15;11501:4;11498:1;11491:15;11518:196;11557:4;11577:19;11594:1;11577:19;:::i;:::-;11572:24;;11610:19;11627:1;11610:19;:::i;:::-;11605:24;;11653:1;11650;11646:9;11638:17;;11677:6;11671:4;11668:16;11665:42;;;11687:18;;:::i;:::-;11665:42;11518:196;;;;:::o;11720:193::-;11759:3;11778:19;11795:1;11778:19;:::i;:::-;11773:24;;11811:19;11828:1;11811:19;:::i;:::-;11806:24;;11853:1;11850;11846:9;11839:16;;11876:6;11871:3;11868:15;11865:41;;;11886:18;;:::i;:::-;11865:41;11720:193;;;;:::o;11919:241::-;12059:34;12055:1;12047:6;12043:14;12036:58;12128:24;12123:2;12115:6;12111:15;12104:49;11919:241;:::o;12166:366::-;12308:3;12329:67;12393:2;12388:3;12329:67;:::i;:::-;12322:74;;12405:93;12494:3;12405:93;:::i;:::-;12523:2;12518:3;12514:12;12507:19;;12166:366;;;:::o;12538:419::-;12704:4;12742:2;12731:9;12727:18;12719:26;;12791:9;12785:4;12781:20;12777:1;12766:9;12762:17;12755:47;12819:131;12945:4;12819:131;:::i;:::-;12811:139;;12538:419;;;:::o;12963:430::-;13106:4;13144:2;13133:9;13129:18;13121:26;;13157:69;13223:1;13212:9;13208:17;13199:6;13157:69;:::i;:::-;13236:70;13302:2;13291:9;13287:18;13278:6;13236:70;:::i;:::-;13316;13382:2;13371:9;13367:18;13358:6;13316:70;:::i;:::-;12963:430;;;;;;:::o;13399:224::-;13539:34;13535:1;13527:6;13523:14;13516:58;13608:7;13603:2;13595:6;13591:15;13584:32;13399:224;:::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:294::-;14566:34;14562:1;14554:6;14550:14;14543:58;14635:34;14630:2;14622:6;14618:15;14611:59;14704:8;14699:2;14691:6;14687:15;14680:33;14426:294;:::o;14726:366::-;14868:3;14889:67;14953:2;14948:3;14889:67;:::i;:::-;14882:74;;14965:93;15054:3;14965:93;:::i;:::-;15083:2;15078:3;15074:12;15067:19;;14726:366;;;:::o;15098:419::-;15264:4;15302:2;15291:9;15287:18;15279:26;;15351:9;15345:4;15341:20;15337:1;15326:9;15322:17;15315:47;15379:131;15505:4;15379:131;:::i;:::-;15371:139;;15098:419;;;:::o;15523:233::-;15663:34;15659:1;15651:6;15647:14;15640:58;15732:16;15727:2;15719:6;15715:15;15708:41;15523:233;:::o;15762:366::-;15904:3;15925:67;15989:2;15984:3;15925:67;:::i;:::-;15918:74;;16001:93;16090:3;16001:93;:::i;:::-;16119:2;16114:3;16110:12;16103:19;;15762:366;;;:::o;16134:419::-;16300:4;16338:2;16327:9;16323:18;16315:26;;16387:9;16381:4;16377:20;16373:1;16362:9;16358:17;16351:47;16415:131;16541:4;16415:131;:::i;:::-;16407:139;;16134:419;;;:::o;16559:225::-;16699:34;16695:1;16687:6;16683:14;16676:58;16768:8;16763:2;16755:6;16751:15;16744:33;16559:225;:::o;16790:366::-;16932:3;16953:67;17017:2;17012:3;16953:67;:::i;:::-;16946:74;;17029:93;17118:3;17029:93;:::i;:::-;17147:2;17142:3;17138:12;17131:19;;16790:366;;;:::o;17162:419::-;17328:4;17366:2;17355:9;17351:18;17343:26;;17415:9;17409:4;17405:20;17401:1;17390:9;17386:17;17379:47;17443:131;17569:4;17443:131;:::i;:::-;17435:139;;17162:419;;;:::o;17587:223::-;17727:34;17723:1;17715:6;17711:14;17704:58;17796:6;17791:2;17783:6;17779:15;17772:31;17587:223;:::o;17816:366::-;17958:3;17979:67;18043:2;18038:3;17979:67;:::i;:::-;17972:74;;18055:93;18144:3;18055:93;:::i;:::-;18173:2;18168:3;18164:12;18157:19;;17816:366;;;:::o;18188:419::-;18354:4;18392:2;18381:9;18377:18;18369:26;;18441:9;18435:4;18431:20;18427:1;18416:9;18412:17;18405:47;18469:131;18595:4;18469:131;:::i;:::-;18461:139;;18188:419;;;:::o;18613:221::-;18753:34;18749:1;18741:6;18737:14;18730:58;18822:4;18817:2;18809:6;18805:15;18798:29;18613:221;:::o;18840:366::-;18982:3;19003:67;19067:2;19062:3;19003:67;:::i;:::-;18996:74;;19079:93;19168:3;19079:93;:::i;:::-;19197:2;19192:3;19188:12;19181:19;;18840:366;;;:::o;19212:419::-;19378:4;19416:2;19405:9;19401:18;19393:26;;19465:9;19459:4;19455:20;19451:1;19440:9;19436:17;19429:47;19493:131;19619:4;19493:131;:::i;:::-;19485:139;;19212:419;;;:::o;19637:179::-;19777:31;19773:1;19765:6;19761:14;19754:55;19637:179;:::o;19822:366::-;19964:3;19985:67;20049:2;20044:3;19985:67;:::i;:::-;19978:74;;20061:93;20150:3;20061:93;:::i;:::-;20179:2;20174:3;20170:12;20163:19;;19822:366;;;:::o;20194:419::-;20360:4;20398:2;20387:9;20383:18;20375:26;;20447:9;20441:4;20437:20;20433:1;20422:9;20418:17;20411:47;20475:131;20601:4;20475:131;:::i;:::-;20467:139;;20194:419;;;:::o;20619:410::-;20659:7;20682:20;20700:1;20682:20;:::i;:::-;20677:25;;20716:20;20734:1;20716:20;:::i;:::-;20711:25;;20771:1;20768;20764:9;20793:30;20811:11;20793:30;:::i;:::-;20782:41;;20972:1;20963:7;20959:15;20956:1;20953:22;20933:1;20926:9;20906:83;20883:139;;21002:18;;:::i;:::-;20883:139;20667:362;20619:410;;;;:::o;21035:180::-;21083:77;21080:1;21073:88;21180:4;21177:1;21170:15;21204:4;21201:1;21194:15;21221:185;21261:1;21278:20;21296:1;21278:20;:::i;:::-;21273:25;;21312:20;21330:1;21312:20;:::i;:::-;21307:25;;21351:1;21341:35;;21356:18;;:::i;:::-;21341:35;21398:1;21395;21391:9;21386:14;;21221:185;;;;:::o;21412:332::-;21533:4;21571:2;21560:9;21556:18;21548:26;;21584:71;21652:1;21641:9;21637:17;21628:6;21584:71;:::i;:::-;21665:72;21733:2;21722:9;21718:18;21709:6;21665:72;:::i;:::-;21412:332;;;;;:::o;21750:194::-;21790:4;21810:20;21828:1;21810:20;:::i;:::-;21805:25;;21844:20;21862:1;21844:20;:::i;:::-;21839:25;;21888:1;21885;21881:9;21873:17;;21912:1;21906:4;21903:11;21900:37;;;21917:18;;:::i;:::-;21900:37;21750:194;;;;:::o;21950:182::-;22090:34;22086:1;22078:6;22074:14;22067:58;21950:182;:::o;22138:366::-;22280:3;22301:67;22365:2;22360:3;22301:67;:::i;:::-;22294:74;;22377:93;22466:3;22377:93;:::i;:::-;22495:2;22490:3;22486:12;22479:19;;22138:366;;;:::o;22510:419::-;22676:4;22714:2;22703:9;22699:18;22691:26;;22763:9;22757:4;22753:20;22749:1;22738:9;22734:17;22727:47;22791:131;22917:4;22791:131;:::i;:::-;22783:139;;22510:419;;;:::o;22935:220::-;23075:34;23071:1;23063:6;23059:14;23052:58;23144:3;23139:2;23131:6;23127:15;23120:28;22935:220;:::o;23161:366::-;23303:3;23324:67;23388:2;23383:3;23324:67;:::i;:::-;23317:74;;23400:93;23489:3;23400:93;:::i;:::-;23518:2;23513:3;23509:12;23502:19;;23161:366;;;:::o;23533:419::-;23699:4;23737:2;23726:9;23722:18;23714:26;;23786:9;23780:4;23776:20;23772:1;23761:9;23757:17;23750:47;23814:131;23940:4;23814:131;:::i;:::-;23806:139;;23533:419;;;:::o;23958:221::-;24098:34;24094:1;24086:6;24082:14;24075:58;24167:4;24162:2;24154:6;24150:15;24143:29;23958:221;:::o;24185:366::-;24327:3;24348:67;24412:2;24407:3;24348:67;:::i;:::-;24341:74;;24424:93;24513:3;24424:93;:::i;:::-;24542:2;24537:3;24533:12;24526:19;;24185:366;;;:::o;24557:419::-;24723:4;24761:2;24750:9;24746:18;24738:26;;24810:9;24804:4;24800:20;24796:1;24785:9;24781:17;24774:47;24838:131;24964:4;24838:131;:::i;:::-;24830:139;;24557:419;;;:::o;24982:143::-;25039:5;25070:6;25064:13;25055:22;;25086:33;25113:5;25086:33;:::i;:::-;24982:143;;;;:::o;25131:351::-;25201:6;25250:2;25238:9;25229:7;25225:23;25221:32;25218:119;;;25256:79;;:::i;:::-;25218:119;25376:1;25401:64;25457:7;25448:6;25437:9;25433:22;25401:64;:::i;:::-;25391:74;;25347:128;25131:351;;;;:::o;25488:332::-;25609:4;25647:2;25636:9;25632:18;25624:26;;25660:71;25728:1;25717:9;25713:17;25704:6;25660:71;:::i;:::-;25741:72;25809:2;25798:9;25794:18;25785:6;25741:72;:::i;:::-;25488:332;;;;;:::o;25826:180::-;25874:77;25871:1;25864:88;25971:4;25968:1;25961:15;25995:4;25992:1;25985:15;26012:85;26057:7;26086:5;26075:16;;26012:85;;;:::o;26103:158::-;26161:9;26194:61;26212:42;26221:32;26247:5;26221:32;:::i;:::-;26212:42;:::i;:::-;26194:61;:::i;:::-;26181:74;;26103:158;;;:::o;26267:147::-;26362:45;26401:5;26362:45;:::i;:::-;26357:3;26350:58;26267:147;;:::o;26420:114::-;26487:6;26521:5;26515:12;26505:22;;26420:114;;;:::o;26540:184::-;26639:11;26673:6;26668:3;26661:19;26713:4;26708:3;26704:14;26689:29;;26540:184;;;;:::o;26730:132::-;26797:4;26820:3;26812:11;;26850:4;26845:3;26841:14;26833:22;;26730:132;;;:::o;26868:108::-;26945:24;26963:5;26945:24;:::i;:::-;26940:3;26933:37;26868:108;;:::o;26982:179::-;27051:10;27072:46;27114:3;27106:6;27072:46;:::i;:::-;27150:4;27145:3;27141:14;27127:28;;26982:179;;;;:::o;27167:113::-;27237:4;27269;27264:3;27260:14;27252:22;;27167:113;;;:::o;27316:732::-;27435:3;27464:54;27512:5;27464:54;:::i;:::-;27534:86;27613:6;27608:3;27534:86;:::i;:::-;27527:93;;27644:56;27694:5;27644:56;:::i;:::-;27723:7;27754:1;27739:284;27764:6;27761:1;27758:13;27739:284;;;27840:6;27834:13;27867:63;27926:3;27911:13;27867:63;:::i;:::-;27860:70;;27953:60;28006:6;27953:60;:::i;:::-;27943:70;;27799:224;27786:1;27783;27779:9;27774:14;;27739:284;;;27743:14;28039:3;28032:10;;27440:608;;;27316:732;;;;:::o;28054:831::-;28317:4;28355:3;28344:9;28340:19;28332:27;;28369:71;28437:1;28426:9;28422:17;28413:6;28369:71;:::i;:::-;28450:80;28526:2;28515:9;28511:18;28502:6;28450:80;:::i;:::-;28577:9;28571:4;28567:20;28562:2;28551:9;28547:18;28540:48;28605:108;28708:4;28699:6;28605:108;:::i;:::-;28597:116;;28723:72;28791:2;28780:9;28776:18;28767:6;28723:72;:::i;:::-;28805:73;28873:3;28862:9;28858:19;28849:6;28805:73;:::i;:::-;28054:831;;;;;;;;:::o;28891:224::-;29031:34;29027:1;29019:6;29015:14;29008:58;29100:7;29095:2;29087:6;29083:15;29076:32;28891:224;:::o;29121:366::-;29263:3;29284:67;29348:2;29343:3;29284:67;:::i;:::-;29277:74;;29360:93;29449:3;29360:93;:::i;:::-;29478:2;29473:3;29469:12;29462:19;;29121:366;;;:::o;29493:419::-;29659:4;29697:2;29686:9;29682:18;29674:26;;29746:9;29740:4;29736:20;29732:1;29721:9;29717:17;29710:47;29774:131;29900:4;29774:131;:::i;:::-;29766:139;;29493:419;;;:::o;29918:222::-;30058:34;30054:1;30046:6;30042:14;30035:58;30127:5;30122:2;30114:6;30110:15;30103:30;29918:222;:::o;30146:366::-;30288:3;30309:67;30373:2;30368:3;30309:67;:::i;:::-;30302:74;;30385:93;30474:3;30385:93;:::i;:::-;30503:2;30498:3;30494:12;30487:19;;30146:366;;;:::o;30518:419::-;30684:4;30722:2;30711:9;30707:18;30699:26;;30771:9;30765:4;30761:20;30757:1;30746:9;30742:17;30735:47;30799:131;30925:4;30799:131;:::i;:::-;30791:139;;30518:419;;;:::o;30943:225::-;31083:34;31079:1;31071:6;31067:14;31060:58;31152:8;31147:2;31139:6;31135:15;31128:33;30943:225;:::o;31174:366::-;31316:3;31337:67;31401:2;31396:3;31337:67;:::i;:::-;31330:74;;31413:93;31502:3;31413:93;:::i;:::-;31531:2;31526:3;31522:12;31515:19;;31174:366;;;:::o;31546:419::-;31712:4;31750:2;31739:9;31735:18;31727:26;;31799:9;31793:4;31789:20;31785:1;31774:9;31770:17;31763:47;31827:131;31953:4;31827:131;:::i;:::-;31819:139;;31546:419;;;:::o

Swarm Source

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