ETH Price: $3,418.73 (+7.10%)
Gas: 32 Gwei

Token

Ciphercore (CIPHER)
 

Overview

Max Total Supply

10,000,000 CIPHER

Holders

235 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
982.361513950118322082 CIPHER

Value
$0.00
0xea8e50d517c6a4b7d1c1c68bfe6f7d241a8cd12f
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Cipher Core is a DAO that is dedicated to preserving privacy and enabling anonymous transactions within the blockchain space on ETH, BSC & ARB Networks. Cipher Core empowers individuals to engage in financial interactions while safeguarding their wallet addresses.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Ciphercore

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

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


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

pragma solidity ^0.8.0;

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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


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

pragma solidity ^0.8.0;




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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

        _beforeTokenTransfer(from, to, amount);

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

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File: Ciphercore.sol


pragma solidity ^0.8.0;



interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(address token,uint amountTokenDesired,uint amountTokenMin,uint amountETHMin,address to,uint deadline) external payable returns (uint amountToken, uint amountETH, uint liquidity);
} 
interface IUniswapV2Router02 is IUniswapV2Router01 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(uint amountIn,uint amountOutMin,address[] calldata path,address to,uint deadline) external;
}
interface IUniswapV2Factory {
     function createPair(address tokenA, address tokenB) external returns (address pair);
}

contract Ciphercore is ERC20, Ownable {
    IUniswapV2Router02 public uniswapV2Router; 
    bool private swapping;
    bool public tradeEnabled = false;
    uint256 public marketingTaxSell = 20; // 5% marketing tax on sell
    uint256 public maxTxAmount = 100_000 ether; 
    uint256 public maxWalletAmount = 200_000 ether; 
    uint256 public marketingTaxThreshold = 50_000 ether; 

    mapping(address => bool) public isBlacklisted;
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedFromLimits;
    mapping (address => bool) public automatedMarketMakerPairs;

    address public marketingAddress = payable(0xF3C8c3e8F815f9Cf09092B946afD8C62eaAB0aCF);
    address public uniswapV2Pair;

    event TradeEnabled();

    constructor() ERC20("Ciphercore", "CIPHER") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = _uniswapV2Pair;
        _setAutomatedMarketMakerPair(_uniswapV2Pair, true);
        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[marketingAddress] = true;
        _isExcludedFromLimits[owner()] = true;
        _isExcludedFromLimits[0x000000000000000000000000000000000000dEaD] = true;
        _isExcludedFromLimits[marketingAddress] = true;
        _mint(msg.sender, 10_000_000 * 10**decimals());
    }
    
    receive() external payable {}

    function updateUniswapV2Router(address newAddress) public onlyOwner {
        require(newAddress != address(uniswapV2Router), "The router already has that address");
        uniswapV2Router = IUniswapV2Router02(newAddress);
        address _uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH());
        uniswapV2Pair = _uniswapV2Pair;
    }

    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "The PancakeSwap pair cannot be removed from automatedMarketMakerPairs");
        _setAutomatedMarketMakerPair(pair, value);
    }
    
    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        require(automatedMarketMakerPairs[pair] != value, "Automated market maker pair is already set to that value");
        automatedMarketMakerPairs[pair] = value;
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(!isBlacklisted[from] && !isBlacklisted[to], "Sender or recipient address is Blacklisted");

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

        if (from != owner() && to != owner()) {
            if(!_isExcludedFromLimits[from] && !_isExcludedFromLimits[to]) {
                require(tradeEnabled, "Trading is currently disabled");
                require(amount <= maxTxAmount, "Transfer amount exceeds the maximum allowed");
                if (to != uniswapV2Pair) {
                    require(balanceOf(to) + amount < maxWalletAmount, "TOKEN: Balance exceeds wallet size!");
                }
            }
        }

        bool canSendMarketingFee = balanceOf(address(this)) >= marketingTaxThreshold;
         if( canSendMarketingFee &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            from != owner() &&
            to != owner()
        ) 
        {
            claimMarketingFees();
        } 

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

        if(takeFee && automatedMarketMakerPairs[to]) {
            uint256 marketingTax = amount * marketingTaxSell / 100;
            amount = amount - marketingTax;
            super._transfer(from, address(this), marketingTax);
        }  
            
        super._transfer(from, to, amount);
    }


    function claimMarketingFees() public {
        uint _pendingMarketingFee = balanceOf(address(this));
        if (_pendingMarketingFee > 0) 
        {
        swapping = true;    
        swapTokensForEth(_pendingMarketingFee);
        uint amount = address(this).balance;
        (bool success, ) = address(marketingAddress).call{ value: amount }("");
        require(success, "Address: unable to extract value, tx may have reverted");
        swapping = false;         
        }
    }

    function addToBlacklist(address account) external onlyOwner {
        isBlacklisted[account] = true;
    }

    function removeFromBlacklist(address account) external onlyOwner {
        isBlacklisted[account] = false;
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        require(_isExcludedFromFees[account] != excluded, "Account is already the value of 'excluded'");
        _isExcludedFromFees[account] = excluded;
    }

    function excludeMultipleAccountsFromFees(address[] memory accounts, bool excluded) public onlyOwner {
        for(uint256 i = 0; i < accounts.length; i++) {
            _isExcludedFromFees[accounts[i]] = excluded;
        }
    }

    function excludeFromLimits(address account, bool excluded) public onlyOwner {
        require(_isExcludedFromLimits[account] != excluded, "Account is already the value of 'excluded'");
        _isExcludedFromLimits[account] = excluded;
    }

    function excludeMultipleAccountsFromLimits(address[] memory accounts, bool excluded) public onlyOwner {
        for(uint256 i = 0; i < accounts.length; i++) {
            _isExcludedFromLimits[accounts[i]] = excluded;
        }
    }

    function enableTrading() external onlyOwner {
        tradeEnabled = true;
        emit TradeEnabled();
    }

    function setmarketingTax(uint256 tax) external onlyOwner {
        require(tax <= 20, "MarketingTax cannot be more than 20%");
        marketingTaxSell = tax;
    }

    function setMaxTxAmount(uint256 amount) external onlyOwner {
        require(amount >= 1_000, "MaxTxAmount cannot be less than 0.001%");
        maxTxAmount = amount;
    }

    function setMaxWalletAmount(uint256 amount) external onlyOwner {
        require(amount >= 1_000, "MaxWalletAmount cannot be less than 0.001%");
        maxWalletAmount = amount;
    }

    function setMarketingTaxThreshold(uint256 amount) external onlyOwner {
        marketingTaxThreshold = amount;
    }

    function setMarketingAddress(address payable _newaddress) external  onlyOwner {
        _isExcludedFromLimits[marketingAddress] = false;
        _isExcludedFromFees[marketingAddress] = false;
        marketingAddress = _newaddress;
        _isExcludedFromLimits[marketingAddress] = true;
        _isExcludedFromFees[marketingAddress] = true;
    }

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

    function swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, 
            path,
            address(this),
            block.timestamp
        );
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[],"name":"TradeEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addToBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimMarketingFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeMultipleAccountsFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeMultipleAccountsFromLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingTaxSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingTaxThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeFromBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_newaddress","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMarketingTaxThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tax","type":"uint256"}],"name":"setmarketingTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradeEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateUniswapV2Router","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526000600660156101000a81548160ff021916908315150217905550601460075569152d02c7e14af6800000600855692a5a058fc295ed000000600955690a968163f0a57b400000600a5573f3c8c3e8f815f9cf09092b946afd8c62eaab0acf600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620000b057600080fd5b506040518060400160405280600a81526020017f436970686572636f7265000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f434950484552000000000000000000000000000000000000000000000000000081525081600390816200012e919062000c17565b50806004908162000140919062000c17565b50505062000163620001576200063560201b60201c565b6200063d60201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001ca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001f0919062000d68565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000258573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200027e919062000d68565b6040518363ffffffff1660e01b81526004016200029d92919062000dab565b6020604051808303816000875af1158015620002bd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e3919062000d68565b905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200037a8160016200070360201b60201c565b6001600c600062000390620007f360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000620004c9620007f360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200062d33620006036200081d60201b60201c565b600a62000611919062000f68565b6298968062000621919062000fb9565b6200082660201b60201c565b505062001188565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b801515600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615150362000798576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200078f906200108b565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006012905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000898576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200088f90620010fd565b60405180910390fd5b620008ac600083836200099360201b60201c565b8060026000828254620008c091906200111f565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200097391906200116b565b60405180910390a36200098f600083836200099860201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000a1f57607f821691505b60208210810362000a355762000a34620009d7565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000a9f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000a60565b62000aab868362000a60565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000af862000af262000aec8462000ac3565b62000acd565b62000ac3565b9050919050565b6000819050919050565b62000b148362000ad7565b62000b2c62000b238262000aff565b84845462000a6d565b825550505050565b600090565b62000b4362000b34565b62000b5081848462000b09565b505050565b5b8181101562000b785762000b6c60008262000b39565b60018101905062000b56565b5050565b601f82111562000bc75762000b918162000a3b565b62000b9c8462000a50565b8101602085101562000bac578190505b62000bc462000bbb8562000a50565b83018262000b55565b50505b505050565b600082821c905092915050565b600062000bec6000198460080262000bcc565b1980831691505092915050565b600062000c07838362000bd9565b9150826002028217905092915050565b62000c22826200099d565b67ffffffffffffffff81111562000c3e5762000c3d620009a8565b5b62000c4a825462000a06565b62000c5782828562000b7c565b600060209050601f83116001811462000c8f576000841562000c7a578287015190505b62000c86858262000bf9565b86555062000cf6565b601f19841662000c9f8662000a3b565b60005b8281101562000cc95784890151825560018201915060208501945060208101905062000ca2565b8683101562000ce9578489015162000ce5601f89168262000bd9565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000d308262000d03565b9050919050565b62000d428162000d23565b811462000d4e57600080fd5b50565b60008151905062000d628162000d37565b92915050565b60006020828403121562000d815762000d8062000cfe565b5b600062000d918482850162000d51565b91505092915050565b62000da58162000d23565b82525050565b600060408201905062000dc2600083018562000d9a565b62000dd1602083018462000d9a565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000e665780860481111562000e3e5762000e3d62000dd8565b5b600185161562000e4e5780820291505b808102905062000e5e8562000e07565b945062000e1e565b94509492505050565b60008262000e81576001905062000f54565b8162000e91576000905062000f54565b816001811462000eaa576002811462000eb55762000eeb565b600191505062000f54565b60ff84111562000eca5762000ec962000dd8565b5b8360020a91508482111562000ee45762000ee362000dd8565b5b5062000f54565b5060208310610133831016604e8410600b841016171562000f255782820a90508381111562000f1f5762000f1e62000dd8565b5b62000f54565b62000f34848484600162000e14565b9250905081840481111562000f4e5762000f4d62000dd8565b5b81810290505b9392505050565b600060ff82169050919050565b600062000f758262000ac3565b915062000f828362000f5b565b925062000fb17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000e6f565b905092915050565b600062000fc68262000ac3565b915062000fd38362000ac3565b925082820262000fe38162000ac3565b9150828204841483151762000ffd5762000ffc62000dd8565b5b5092915050565b600082825260208201905092915050565b7f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160008201527f6c72656164792073657420746f20746861742076616c75650000000000000000602082015250565b60006200107360388362001004565b9150620010808262001015565b604082019050919050565b60006020820190508181036000830152620010a68162001064565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620010e5601f8362001004565b9150620010f282620010ad565b602082019050919050565b600060208201905081810360008301526200111881620010d6565b9050919050565b60006200112c8262000ac3565b9150620011398362000ac3565b925082820190508082111562001154576200115362000dd8565b5b92915050565b620011658162000ac3565b82525050565b60006020820190506200118260008301846200115a565b92915050565b61413980620011986000396000f3fe60806040526004361061024a5760003560e01c80638da5cb5b11610139578063b62496f5116100b6578063d621e8131161007a578063d621e81314610873578063dd62ed3e1461089e578063e550573d146108db578063ec28438a14610918578063f2fde38b14610941578063fe575a871461096a57610251565b8063b62496f514610792578063c0246668146107cf578063c0a904a2146107f8578063c492f04614610821578063c6e5a5ab1461084a57610251565b8063a457c2d7116100fd578063a457c2d714610697578063a5ece941146106d4578063a9059cbb146106ff578063aa4bde281461073c578063b2e208791461076757610251565b80638da5cb5b146105c6578063906e9dd0146105f1578063918683781461061a57806395d89b41146106435780639a7a23d61461066e57610251565b806344337ea1116101c757806370a082311161018b57806370a0823114610507578063715018a6146105445780638753cc481461055b5780638a8c523c146105845780638c0b5e221461059b57610251565b806344337ea11461042457806349bd5a5e1461044d5780634fbee19314610478578063537df3b6146104b557806365b8dbc0146104de57610251565b806323b872dd1161020e57806323b872dd1461032b57806327a14fc214610368578063313ce5671461039157806339509351146103bc57806342d0b0bc146103f957610251565b806306fdde031461025657806307dce0f814610281578063095ea7b3146102985780631694505e146102d557806318160ddd1461030057610251565b3661025157005b600080fd5b34801561026257600080fd5b5061026b6109a7565b6040516102789190612b94565b60405180910390f35b34801561028d57600080fd5b50610296610a39565b005b3480156102a457600080fd5b506102bf60048036038101906102ba9190612c5e565b610b67565b6040516102cc9190612cb9565b60405180910390f35b3480156102e157600080fd5b506102ea610b8a565b6040516102f79190612d33565b60405180910390f35b34801561030c57600080fd5b50610315610bb0565b6040516103229190612d5d565b60405180910390f35b34801561033757600080fd5b50610352600480360381019061034d9190612d78565b610bba565b60405161035f9190612cb9565b60405180910390f35b34801561037457600080fd5b5061038f600480360381019061038a9190612dcb565b610be9565b005b34801561039d57600080fd5b506103a6610c40565b6040516103b39190612e14565b60405180910390f35b3480156103c857600080fd5b506103e360048036038101906103de9190612c5e565b610c49565b6040516103f09190612cb9565b60405180910390f35b34801561040557600080fd5b5061040e610c80565b60405161041b9190612d5d565b60405180910390f35b34801561043057600080fd5b5061044b60048036038101906104469190612e2f565b610c86565b005b34801561045957600080fd5b50610462610ce9565b60405161046f9190612e6b565b60405180910390f35b34801561048457600080fd5b5061049f600480360381019061049a9190612e2f565b610d0f565b6040516104ac9190612cb9565b60405180910390f35b3480156104c157600080fd5b506104dc60048036038101906104d79190612e2f565b610d65565b005b3480156104ea57600080fd5b5061050560048036038101906105009190612e2f565b610dc8565b005b34801561051357600080fd5b5061052e60048036038101906105299190612e2f565b611088565b60405161053b9190612d5d565b60405180910390f35b34801561055057600080fd5b506105596110d0565b005b34801561056757600080fd5b50610582600480360381019061057d9190612dcb565b6110e4565b005b34801561059057600080fd5b506105996110f6565b005b3480156105a757600080fd5b506105b0611147565b6040516105bd9190612d5d565b60405180910390f35b3480156105d257600080fd5b506105db61114d565b6040516105e89190612e6b565b60405180910390f35b3480156105fd57600080fd5b5061061860048036038101906106139190612ec4565b611177565b005b34801561062657600080fd5b50610641600480360381019061063c9190612dcb565b6113ab565b005b34801561064f57600080fd5b50610658611401565b6040516106659190612b94565b60405180910390f35b34801561067a57600080fd5b5061069560048036038101906106909190612f1d565b611493565b005b3480156106a357600080fd5b506106be60048036038101906106b99190612c5e565b611539565b6040516106cb9190612cb9565b60405180910390f35b3480156106e057600080fd5b506106e96115b0565b6040516106f69190612e6b565b60405180910390f35b34801561070b57600080fd5b5061072660048036038101906107219190612c5e565b6115d6565b6040516107339190612cb9565b60405180910390f35b34801561074857600080fd5b506107516115f9565b60405161075e9190612d5d565b60405180910390f35b34801561077357600080fd5b5061077c6115ff565b6040516107899190612d5d565b60405180910390f35b34801561079e57600080fd5b506107b960048036038101906107b49190612e2f565b611605565b6040516107c69190612cb9565b60405180910390f35b3480156107db57600080fd5b506107f660048036038101906107f19190612f1d565b611625565b005b34801561080457600080fd5b5061081f600480360381019061081a9190612f1d565b61171a565b005b34801561082d57600080fd5b50610848600480360381019061084391906130a5565b61180f565b005b34801561085657600080fd5b50610871600480360381019061086c91906130a5565b6118ac565b005b34801561087f57600080fd5b50610888611949565b6040516108959190612cb9565b60405180910390f35b3480156108aa57600080fd5b506108c560048036038101906108c09190613101565b61195c565b6040516108d29190612d5d565b60405180910390f35b3480156108e757600080fd5b5061090260048036038101906108fd9190612e2f565b6119e3565b60405161090f9190612cb9565b60405180910390f35b34801561092457600080fd5b5061093f600480360381019061093a9190612dcb565b611a03565b005b34801561094d57600080fd5b5061096860048036038101906109639190612e2f565b611a5a565b005b34801561097657600080fd5b50610991600480360381019061098c9190612e2f565b611add565b60405161099e9190612cb9565b60405180910390f35b6060600380546109b690613170565b80601f01602080910402602001604051908101604052809291908181526020018280546109e290613170565b8015610a2f5780601f10610a0457610100808354040283529160200191610a2f565b820191906000526020600020905b815481529060010190602001808311610a1257829003601f168201915b5050505050905090565b6000610a4430611088565b90506000811115610b64576001600660146101000a81548160ff021916908315150217905550610a7381611afd565b60004790506000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051610ac0906131d2565b60006040518083038185875af1925050503d8060008114610afd576040519150601f19603f3d011682016040523d82523d6000602084013e610b02565b606091505b5050905080610b46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3d90613259565b60405180910390fd5b6000600660146101000a81548160ff02191690831515021790555050505b50565b600080610b72611d40565b9050610b7f818585611d48565b600191505092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b600080610bc5611d40565b9050610bd2858285611f11565b610bdd858585611f9d565b60019150509392505050565b610bf1612653565b6103e8811015610c36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2d906132eb565b60405180910390fd5b8060098190555050565b60006012905090565b600080610c54611d40565b9050610c75818585610c66858961195c565b610c70919061333a565b611d48565b600191505092915050565b60075481565b610c8e612653565b6001600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610d6d612653565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610dd0612653565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610e60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e57906133e0565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f349190613415565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe19190613415565b6040518363ffffffff1660e01b8152600401610ffe929190613442565b6020604051808303816000875af115801561101d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110419190613415565b905080601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110d8612653565b6110e260006126d1565b565b6110ec612653565b80600a8190555050565b6110fe612653565b6001600660156101000a81548160ff0219169083151502179055507f0270d74976d9c744a465e24d0e2675086607ed6163edf4e36cabaf9740ce2ef460405160405180910390a1565b60085481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61117f612653565b6000600d6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000600c6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600d6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6113b3612653565b60148111156113f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ee906134dd565b60405180910390fd5b8060078190555050565b60606004805461141090613170565b80601f016020809104026020016040519081016040528092919081815260200182805461143c90613170565b80156114895780601f1061145e57610100808354040283529160200191611489565b820191906000526020600020905b81548152906001019060200180831161146c57829003601f168201915b5050505050905090565b61149b612653565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361152b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152290613595565b60405180910390fd5b6115358282612797565b5050565b600080611544611d40565b90506000611552828661195c565b905083811015611597576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158e90613627565b60405180910390fd5b6115a48286868403611d48565b60019250505092915050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806115e1611d40565b90506115ee818585611f9d565b600191505092915050565b60095481565b600a5481565b600e6020528060005260406000206000915054906101000a900460ff1681565b61162d612653565b801515600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515036116bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b6906136b9565b60405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611722612653565b801515600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515036117b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ab906136b9565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611817612653565b60005b82518110156118a75781600c600085848151811061183b5761183a6136d9565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061189f90613708565b91505061181a565b505050565b6118b4612653565b60005b82518110156119445781600d60008584815181106118d8576118d76136d9565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061193c90613708565b9150506118b7565b505050565b600660159054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600d6020528060005260406000206000915054906101000a900460ff1681565b611a0b612653565b6103e8811015611a50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a47906137c2565b60405180910390fd5b8060088190555050565b611a62612653565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611ad1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac890613854565b60405180910390fd5b611ada816126d1565b50565b600b6020528060005260406000206000915054906101000a900460ff1681565b6000600267ffffffffffffffff811115611b1a57611b19612f62565b5b604051908082528060200260200182016040528015611b485781602001602082028036833780820191505090505b5090503081600081518110611b6057611b5f6136d9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c2b9190613415565b81600181518110611c3f57611c3e6136d9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050611ca630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611d48565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401611d0a95949392919061396d565b600060405180830381600087803b158015611d2457600080fd5b505af1158015611d38573d6000803e3d6000fd5b505050505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611db7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dae90613a39565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1d90613acb565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611f049190612d5d565b60405180910390a3505050565b6000611f1d848461195c565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611f975781811015611f89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8090613b37565b60405180910390fd5b611f968484848403611d48565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361200c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200390613bc9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361207b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207290613c5b565b60405180910390fd5b600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561211f5750600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b61215e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215590613ced565b60405180910390fd5b600081036121775761217283836000612884565b61264e565b61217f61114d565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156121ed57506121bd61114d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156123de57600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156122965750600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156123dd57600660159054906101000a900460ff166122ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e190613d59565b60405180910390fd5b60085481111561232f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232690613deb565b60405180910390fd5b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146123dc576009548161239184611088565b61239b919061333a565b106123db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d290613e7d565b60405180910390fd5b5b5b5b6000600a546123ec30611088565b1015905080801561240a5750600660149054906101000a900460ff16155b80156124605750600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561249f575061246f61114d565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156124de57506124ae61114d565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156124ec576124eb610a39565b5b6000600660149054906101000a900460ff16159050600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806125a25750600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156125ac57600090505b8080156126025750600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156126405760006064600754856126199190613e9d565b6126239190613f0e565b905080846126319190613f3f565b935061263e863083612884565b505b61264b858585612884565b50505b505050565b61265b611d40565b73ffffffffffffffffffffffffffffffffffffffff1661267961114d565b73ffffffffffffffffffffffffffffffffffffffff16146126cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c690613fbf565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b801515600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503612829576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282090614051565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036128f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ea90613bc9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612962576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295990613c5b565b60405180910390fd5b61296d838383612afa565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156129f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ea906140e3565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612ae19190612d5d565b60405180910390a3612af4848484612aff565b50505050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612b3e578082015181840152602081019050612b23565b60008484015250505050565b6000601f19601f8301169050919050565b6000612b6682612b04565b612b708185612b0f565b9350612b80818560208601612b20565b612b8981612b4a565b840191505092915050565b60006020820190508181036000830152612bae8184612b5b565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612bf582612bca565b9050919050565b612c0581612bea565b8114612c1057600080fd5b50565b600081359050612c2281612bfc565b92915050565b6000819050919050565b612c3b81612c28565b8114612c4657600080fd5b50565b600081359050612c5881612c32565b92915050565b60008060408385031215612c7557612c74612bc0565b5b6000612c8385828601612c13565b9250506020612c9485828601612c49565b9150509250929050565b60008115159050919050565b612cb381612c9e565b82525050565b6000602082019050612cce6000830184612caa565b92915050565b6000819050919050565b6000612cf9612cf4612cef84612bca565b612cd4565b612bca565b9050919050565b6000612d0b82612cde565b9050919050565b6000612d1d82612d00565b9050919050565b612d2d81612d12565b82525050565b6000602082019050612d486000830184612d24565b92915050565b612d5781612c28565b82525050565b6000602082019050612d726000830184612d4e565b92915050565b600080600060608486031215612d9157612d90612bc0565b5b6000612d9f86828701612c13565b9350506020612db086828701612c13565b9250506040612dc186828701612c49565b9150509250925092565b600060208284031215612de157612de0612bc0565b5b6000612def84828501612c49565b91505092915050565b600060ff82169050919050565b612e0e81612df8565b82525050565b6000602082019050612e296000830184612e05565b92915050565b600060208284031215612e4557612e44612bc0565b5b6000612e5384828501612c13565b91505092915050565b612e6581612bea565b82525050565b6000602082019050612e806000830184612e5c565b92915050565b6000612e9182612bca565b9050919050565b612ea181612e86565b8114612eac57600080fd5b50565b600081359050612ebe81612e98565b92915050565b600060208284031215612eda57612ed9612bc0565b5b6000612ee884828501612eaf565b91505092915050565b612efa81612c9e565b8114612f0557600080fd5b50565b600081359050612f1781612ef1565b92915050565b60008060408385031215612f3457612f33612bc0565b5b6000612f4285828601612c13565b9250506020612f5385828601612f08565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612f9a82612b4a565b810181811067ffffffffffffffff82111715612fb957612fb8612f62565b5b80604052505050565b6000612fcc612bb6565b9050612fd88282612f91565b919050565b600067ffffffffffffffff821115612ff857612ff7612f62565b5b602082029050602081019050919050565b600080fd5b600061302161301c84612fdd565b612fc2565b9050808382526020820190506020840283018581111561304457613043613009565b5b835b8181101561306d57806130598882612c13565b845260208401935050602081019050613046565b5050509392505050565b600082601f83011261308c5761308b612f5d565b5b813561309c84826020860161300e565b91505092915050565b600080604083850312156130bc576130bb612bc0565b5b600083013567ffffffffffffffff8111156130da576130d9612bc5565b5b6130e685828601613077565b92505060206130f785828601612f08565b9150509250929050565b6000806040838503121561311857613117612bc0565b5b600061312685828601612c13565b925050602061313785828601612c13565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061318857607f821691505b60208210810361319b5761319a613141565b5b50919050565b600081905092915050565b50565b60006131bc6000836131a1565b91506131c7826131ac565b600082019050919050565b60006131dd826131af565b9150819050919050565b7f416464726573733a20756e61626c6520746f20657874726163742076616c756560008201527f2c207478206d6179206861766520726576657274656400000000000000000000602082015250565b6000613243603683612b0f565b915061324e826131e7565b604082019050919050565b6000602082019050818103600083015261327281613236565b9050919050565b7f4d617857616c6c6574416d6f756e742063616e6e6f74206265206c657373207460008201527f68616e20302e3030312500000000000000000000000000000000000000000000602082015250565b60006132d5602a83612b0f565b91506132e082613279565b604082019050919050565b60006020820190508181036000830152613304816132c8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061334582612c28565b915061335083612c28565b92508282019050808211156133685761336761330b565b5b92915050565b7f54686520726f7574657220616c7265616479206861732074686174206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006133ca602383612b0f565b91506133d58261336e565b604082019050919050565b600060208201905081810360008301526133f9816133bd565b9050919050565b60008151905061340f81612bfc565b92915050565b60006020828403121561342b5761342a612bc0565b5b600061343984828501613400565b91505092915050565b60006040820190506134576000830185612e5c565b6134646020830184612e5c565b9392505050565b7f4d61726b6574696e675461782063616e6e6f74206265206d6f7265207468616e60008201527f2032302500000000000000000000000000000000000000000000000000000000602082015250565b60006134c7602483612b0f565b91506134d28261346b565b604082019050919050565b600060208201905081810360008301526134f6816134ba565b9050919050565b7f5468652050616e63616b655377617020706169722063616e6e6f74206265207260008201527f656d6f7665642066726f6d206175746f6d617465644d61726b65744d616b657260208201527f5061697273000000000000000000000000000000000000000000000000000000604082015250565b600061357f604583612b0f565b915061358a826134fd565b606082019050919050565b600060208201905081810360008301526135ae81613572565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613611602583612b0f565b915061361c826135b5565b604082019050919050565b6000602082019050818103600083015261364081613604565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b60006136a3602a83612b0f565b91506136ae82613647565b604082019050919050565b600060208201905081810360008301526136d281613696565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061371382612c28565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036137455761374461330b565b5b600182019050919050565b7f4d61785478416d6f756e742063616e6e6f74206265206c657373207468616e2060008201527f302e303031250000000000000000000000000000000000000000000000000000602082015250565b60006137ac602683612b0f565b91506137b782613750565b604082019050919050565b600060208201905081810360008301526137db8161379f565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061383e602683612b0f565b9150613849826137e2565b604082019050919050565b6000602082019050818103600083015261386d81613831565b9050919050565b6000819050919050565b600061389961389461388f84613874565b612cd4565b612c28565b9050919050565b6138a98161387e565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6138e481612bea565b82525050565b60006138f683836138db565b60208301905092915050565b6000602082019050919050565b600061391a826138af565b61392481856138ba565b935061392f836138cb565b8060005b8381101561396057815161394788826138ea565b975061395283613902565b925050600181019050613933565b5085935050505092915050565b600060a0820190506139826000830188612d4e565b61398f60208301876138a0565b81810360408301526139a1818661390f565b90506139b06060830185612e5c565b6139bd6080830184612d4e565b9695505050505050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613a23602483612b0f565b9150613a2e826139c7565b604082019050919050565b60006020820190508181036000830152613a5281613a16565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613ab5602283612b0f565b9150613ac082613a59565b604082019050919050565b60006020820190508181036000830152613ae481613aa8565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613b21601d83612b0f565b9150613b2c82613aeb565b602082019050919050565b60006020820190508181036000830152613b5081613b14565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613bb3602583612b0f565b9150613bbe82613b57565b604082019050919050565b60006020820190508181036000830152613be281613ba6565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613c45602383612b0f565b9150613c5082613be9565b604082019050919050565b60006020820190508181036000830152613c7481613c38565b9050919050565b7f53656e646572206f7220726563697069656e742061646472657373206973204260008201527f6c61636b6c697374656400000000000000000000000000000000000000000000602082015250565b6000613cd7602a83612b0f565b9150613ce282613c7b565b604082019050919050565b60006020820190508181036000830152613d0681613cca565b9050919050565b7f54726164696e672069732063757272656e746c792064697361626c6564000000600082015250565b6000613d43601d83612b0f565b9150613d4e82613d0d565b602082019050919050565b60006020820190508181036000830152613d7281613d36565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61786960008201527f6d756d20616c6c6f776564000000000000000000000000000000000000000000602082015250565b6000613dd5602b83612b0f565b9150613de082613d79565b604082019050919050565b60006020820190508181036000830152613e0481613dc8565b9050919050565b7f544f4b454e3a2042616c616e636520657863656564732077616c6c657420736960008201527f7a65210000000000000000000000000000000000000000000000000000000000602082015250565b6000613e67602383612b0f565b9150613e7282613e0b565b604082019050919050565b60006020820190508181036000830152613e9681613e5a565b9050919050565b6000613ea882612c28565b9150613eb383612c28565b9250828202613ec181612c28565b91508282048414831517613ed857613ed761330b565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613f1982612c28565b9150613f2483612c28565b925082613f3457613f33613edf565b5b828204905092915050565b6000613f4a82612c28565b9150613f5583612c28565b9250828203905081811115613f6d57613f6c61330b565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613fa9602083612b0f565b9150613fb482613f73565b602082019050919050565b60006020820190508181036000830152613fd881613f9c565b9050919050565b7f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160008201527f6c72656164792073657420746f20746861742076616c75650000000000000000602082015250565b600061403b603883612b0f565b915061404682613fdf565b604082019050919050565b6000602082019050818103600083015261406a8161402e565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006140cd602683612b0f565b91506140d882614071565b604082019050919050565b600060208201905081810360008301526140fc816140c0565b905091905056fea2646970667358221220dfd4b5b2a4f77eebcd5031054c80f34519ad92c83c02f295d5744857127d010f64736f6c63430008120033

Deployed Bytecode

0x60806040526004361061024a5760003560e01c80638da5cb5b11610139578063b62496f5116100b6578063d621e8131161007a578063d621e81314610873578063dd62ed3e1461089e578063e550573d146108db578063ec28438a14610918578063f2fde38b14610941578063fe575a871461096a57610251565b8063b62496f514610792578063c0246668146107cf578063c0a904a2146107f8578063c492f04614610821578063c6e5a5ab1461084a57610251565b8063a457c2d7116100fd578063a457c2d714610697578063a5ece941146106d4578063a9059cbb146106ff578063aa4bde281461073c578063b2e208791461076757610251565b80638da5cb5b146105c6578063906e9dd0146105f1578063918683781461061a57806395d89b41146106435780639a7a23d61461066e57610251565b806344337ea1116101c757806370a082311161018b57806370a0823114610507578063715018a6146105445780638753cc481461055b5780638a8c523c146105845780638c0b5e221461059b57610251565b806344337ea11461042457806349bd5a5e1461044d5780634fbee19314610478578063537df3b6146104b557806365b8dbc0146104de57610251565b806323b872dd1161020e57806323b872dd1461032b57806327a14fc214610368578063313ce5671461039157806339509351146103bc57806342d0b0bc146103f957610251565b806306fdde031461025657806307dce0f814610281578063095ea7b3146102985780631694505e146102d557806318160ddd1461030057610251565b3661025157005b600080fd5b34801561026257600080fd5b5061026b6109a7565b6040516102789190612b94565b60405180910390f35b34801561028d57600080fd5b50610296610a39565b005b3480156102a457600080fd5b506102bf60048036038101906102ba9190612c5e565b610b67565b6040516102cc9190612cb9565b60405180910390f35b3480156102e157600080fd5b506102ea610b8a565b6040516102f79190612d33565b60405180910390f35b34801561030c57600080fd5b50610315610bb0565b6040516103229190612d5d565b60405180910390f35b34801561033757600080fd5b50610352600480360381019061034d9190612d78565b610bba565b60405161035f9190612cb9565b60405180910390f35b34801561037457600080fd5b5061038f600480360381019061038a9190612dcb565b610be9565b005b34801561039d57600080fd5b506103a6610c40565b6040516103b39190612e14565b60405180910390f35b3480156103c857600080fd5b506103e360048036038101906103de9190612c5e565b610c49565b6040516103f09190612cb9565b60405180910390f35b34801561040557600080fd5b5061040e610c80565b60405161041b9190612d5d565b60405180910390f35b34801561043057600080fd5b5061044b60048036038101906104469190612e2f565b610c86565b005b34801561045957600080fd5b50610462610ce9565b60405161046f9190612e6b565b60405180910390f35b34801561048457600080fd5b5061049f600480360381019061049a9190612e2f565b610d0f565b6040516104ac9190612cb9565b60405180910390f35b3480156104c157600080fd5b506104dc60048036038101906104d79190612e2f565b610d65565b005b3480156104ea57600080fd5b5061050560048036038101906105009190612e2f565b610dc8565b005b34801561051357600080fd5b5061052e60048036038101906105299190612e2f565b611088565b60405161053b9190612d5d565b60405180910390f35b34801561055057600080fd5b506105596110d0565b005b34801561056757600080fd5b50610582600480360381019061057d9190612dcb565b6110e4565b005b34801561059057600080fd5b506105996110f6565b005b3480156105a757600080fd5b506105b0611147565b6040516105bd9190612d5d565b60405180910390f35b3480156105d257600080fd5b506105db61114d565b6040516105e89190612e6b565b60405180910390f35b3480156105fd57600080fd5b5061061860048036038101906106139190612ec4565b611177565b005b34801561062657600080fd5b50610641600480360381019061063c9190612dcb565b6113ab565b005b34801561064f57600080fd5b50610658611401565b6040516106659190612b94565b60405180910390f35b34801561067a57600080fd5b5061069560048036038101906106909190612f1d565b611493565b005b3480156106a357600080fd5b506106be60048036038101906106b99190612c5e565b611539565b6040516106cb9190612cb9565b60405180910390f35b3480156106e057600080fd5b506106e96115b0565b6040516106f69190612e6b565b60405180910390f35b34801561070b57600080fd5b5061072660048036038101906107219190612c5e565b6115d6565b6040516107339190612cb9565b60405180910390f35b34801561074857600080fd5b506107516115f9565b60405161075e9190612d5d565b60405180910390f35b34801561077357600080fd5b5061077c6115ff565b6040516107899190612d5d565b60405180910390f35b34801561079e57600080fd5b506107b960048036038101906107b49190612e2f565b611605565b6040516107c69190612cb9565b60405180910390f35b3480156107db57600080fd5b506107f660048036038101906107f19190612f1d565b611625565b005b34801561080457600080fd5b5061081f600480360381019061081a9190612f1d565b61171a565b005b34801561082d57600080fd5b50610848600480360381019061084391906130a5565b61180f565b005b34801561085657600080fd5b50610871600480360381019061086c91906130a5565b6118ac565b005b34801561087f57600080fd5b50610888611949565b6040516108959190612cb9565b60405180910390f35b3480156108aa57600080fd5b506108c560048036038101906108c09190613101565b61195c565b6040516108d29190612d5d565b60405180910390f35b3480156108e757600080fd5b5061090260048036038101906108fd9190612e2f565b6119e3565b60405161090f9190612cb9565b60405180910390f35b34801561092457600080fd5b5061093f600480360381019061093a9190612dcb565b611a03565b005b34801561094d57600080fd5b5061096860048036038101906109639190612e2f565b611a5a565b005b34801561097657600080fd5b50610991600480360381019061098c9190612e2f565b611add565b60405161099e9190612cb9565b60405180910390f35b6060600380546109b690613170565b80601f01602080910402602001604051908101604052809291908181526020018280546109e290613170565b8015610a2f5780601f10610a0457610100808354040283529160200191610a2f565b820191906000526020600020905b815481529060010190602001808311610a1257829003601f168201915b5050505050905090565b6000610a4430611088565b90506000811115610b64576001600660146101000a81548160ff021916908315150217905550610a7381611afd565b60004790506000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051610ac0906131d2565b60006040518083038185875af1925050503d8060008114610afd576040519150601f19603f3d011682016040523d82523d6000602084013e610b02565b606091505b5050905080610b46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3d90613259565b60405180910390fd5b6000600660146101000a81548160ff02191690831515021790555050505b50565b600080610b72611d40565b9050610b7f818585611d48565b600191505092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b600080610bc5611d40565b9050610bd2858285611f11565b610bdd858585611f9d565b60019150509392505050565b610bf1612653565b6103e8811015610c36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2d906132eb565b60405180910390fd5b8060098190555050565b60006012905090565b600080610c54611d40565b9050610c75818585610c66858961195c565b610c70919061333a565b611d48565b600191505092915050565b60075481565b610c8e612653565b6001600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610d6d612653565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610dd0612653565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610e60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e57906133e0565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f349190613415565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe19190613415565b6040518363ffffffff1660e01b8152600401610ffe929190613442565b6020604051808303816000875af115801561101d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110419190613415565b905080601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110d8612653565b6110e260006126d1565b565b6110ec612653565b80600a8190555050565b6110fe612653565b6001600660156101000a81548160ff0219169083151502179055507f0270d74976d9c744a465e24d0e2675086607ed6163edf4e36cabaf9740ce2ef460405160405180910390a1565b60085481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61117f612653565b6000600d6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000600c6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600d6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6113b3612653565b60148111156113f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ee906134dd565b60405180910390fd5b8060078190555050565b60606004805461141090613170565b80601f016020809104026020016040519081016040528092919081815260200182805461143c90613170565b80156114895780601f1061145e57610100808354040283529160200191611489565b820191906000526020600020905b81548152906001019060200180831161146c57829003601f168201915b5050505050905090565b61149b612653565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361152b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152290613595565b60405180910390fd5b6115358282612797565b5050565b600080611544611d40565b90506000611552828661195c565b905083811015611597576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158e90613627565b60405180910390fd5b6115a48286868403611d48565b60019250505092915050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806115e1611d40565b90506115ee818585611f9d565b600191505092915050565b60095481565b600a5481565b600e6020528060005260406000206000915054906101000a900460ff1681565b61162d612653565b801515600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515036116bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b6906136b9565b60405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611722612653565b801515600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515036117b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ab906136b9565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611817612653565b60005b82518110156118a75781600c600085848151811061183b5761183a6136d9565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061189f90613708565b91505061181a565b505050565b6118b4612653565b60005b82518110156119445781600d60008584815181106118d8576118d76136d9565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061193c90613708565b9150506118b7565b505050565b600660159054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600d6020528060005260406000206000915054906101000a900460ff1681565b611a0b612653565b6103e8811015611a50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a47906137c2565b60405180910390fd5b8060088190555050565b611a62612653565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611ad1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac890613854565b60405180910390fd5b611ada816126d1565b50565b600b6020528060005260406000206000915054906101000a900460ff1681565b6000600267ffffffffffffffff811115611b1a57611b19612f62565b5b604051908082528060200260200182016040528015611b485781602001602082028036833780820191505090505b5090503081600081518110611b6057611b5f6136d9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c2b9190613415565b81600181518110611c3f57611c3e6136d9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050611ca630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611d48565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401611d0a95949392919061396d565b600060405180830381600087803b158015611d2457600080fd5b505af1158015611d38573d6000803e3d6000fd5b505050505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611db7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dae90613a39565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1d90613acb565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611f049190612d5d565b60405180910390a3505050565b6000611f1d848461195c565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611f975781811015611f89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8090613b37565b60405180910390fd5b611f968484848403611d48565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361200c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200390613bc9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361207b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207290613c5b565b60405180910390fd5b600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561211f5750600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b61215e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215590613ced565b60405180910390fd5b600081036121775761217283836000612884565b61264e565b61217f61114d565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156121ed57506121bd61114d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156123de57600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156122965750600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156123dd57600660159054906101000a900460ff166122ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e190613d59565b60405180910390fd5b60085481111561232f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232690613deb565b60405180910390fd5b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146123dc576009548161239184611088565b61239b919061333a565b106123db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d290613e7d565b60405180910390fd5b5b5b5b6000600a546123ec30611088565b1015905080801561240a5750600660149054906101000a900460ff16155b80156124605750600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561249f575061246f61114d565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156124de57506124ae61114d565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156124ec576124eb610a39565b5b6000600660149054906101000a900460ff16159050600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806125a25750600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156125ac57600090505b8080156126025750600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156126405760006064600754856126199190613e9d565b6126239190613f0e565b905080846126319190613f3f565b935061263e863083612884565b505b61264b858585612884565b50505b505050565b61265b611d40565b73ffffffffffffffffffffffffffffffffffffffff1661267961114d565b73ffffffffffffffffffffffffffffffffffffffff16146126cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c690613fbf565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b801515600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503612829576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282090614051565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036128f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ea90613bc9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612962576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295990613c5b565b60405180910390fd5b61296d838383612afa565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156129f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ea906140e3565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612ae19190612d5d565b60405180910390a3612af4848484612aff565b50505050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612b3e578082015181840152602081019050612b23565b60008484015250505050565b6000601f19601f8301169050919050565b6000612b6682612b04565b612b708185612b0f565b9350612b80818560208601612b20565b612b8981612b4a565b840191505092915050565b60006020820190508181036000830152612bae8184612b5b565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612bf582612bca565b9050919050565b612c0581612bea565b8114612c1057600080fd5b50565b600081359050612c2281612bfc565b92915050565b6000819050919050565b612c3b81612c28565b8114612c4657600080fd5b50565b600081359050612c5881612c32565b92915050565b60008060408385031215612c7557612c74612bc0565b5b6000612c8385828601612c13565b9250506020612c9485828601612c49565b9150509250929050565b60008115159050919050565b612cb381612c9e565b82525050565b6000602082019050612cce6000830184612caa565b92915050565b6000819050919050565b6000612cf9612cf4612cef84612bca565b612cd4565b612bca565b9050919050565b6000612d0b82612cde565b9050919050565b6000612d1d82612d00565b9050919050565b612d2d81612d12565b82525050565b6000602082019050612d486000830184612d24565b92915050565b612d5781612c28565b82525050565b6000602082019050612d726000830184612d4e565b92915050565b600080600060608486031215612d9157612d90612bc0565b5b6000612d9f86828701612c13565b9350506020612db086828701612c13565b9250506040612dc186828701612c49565b9150509250925092565b600060208284031215612de157612de0612bc0565b5b6000612def84828501612c49565b91505092915050565b600060ff82169050919050565b612e0e81612df8565b82525050565b6000602082019050612e296000830184612e05565b92915050565b600060208284031215612e4557612e44612bc0565b5b6000612e5384828501612c13565b91505092915050565b612e6581612bea565b82525050565b6000602082019050612e806000830184612e5c565b92915050565b6000612e9182612bca565b9050919050565b612ea181612e86565b8114612eac57600080fd5b50565b600081359050612ebe81612e98565b92915050565b600060208284031215612eda57612ed9612bc0565b5b6000612ee884828501612eaf565b91505092915050565b612efa81612c9e565b8114612f0557600080fd5b50565b600081359050612f1781612ef1565b92915050565b60008060408385031215612f3457612f33612bc0565b5b6000612f4285828601612c13565b9250506020612f5385828601612f08565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612f9a82612b4a565b810181811067ffffffffffffffff82111715612fb957612fb8612f62565b5b80604052505050565b6000612fcc612bb6565b9050612fd88282612f91565b919050565b600067ffffffffffffffff821115612ff857612ff7612f62565b5b602082029050602081019050919050565b600080fd5b600061302161301c84612fdd565b612fc2565b9050808382526020820190506020840283018581111561304457613043613009565b5b835b8181101561306d57806130598882612c13565b845260208401935050602081019050613046565b5050509392505050565b600082601f83011261308c5761308b612f5d565b5b813561309c84826020860161300e565b91505092915050565b600080604083850312156130bc576130bb612bc0565b5b600083013567ffffffffffffffff8111156130da576130d9612bc5565b5b6130e685828601613077565b92505060206130f785828601612f08565b9150509250929050565b6000806040838503121561311857613117612bc0565b5b600061312685828601612c13565b925050602061313785828601612c13565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061318857607f821691505b60208210810361319b5761319a613141565b5b50919050565b600081905092915050565b50565b60006131bc6000836131a1565b91506131c7826131ac565b600082019050919050565b60006131dd826131af565b9150819050919050565b7f416464726573733a20756e61626c6520746f20657874726163742076616c756560008201527f2c207478206d6179206861766520726576657274656400000000000000000000602082015250565b6000613243603683612b0f565b915061324e826131e7565b604082019050919050565b6000602082019050818103600083015261327281613236565b9050919050565b7f4d617857616c6c6574416d6f756e742063616e6e6f74206265206c657373207460008201527f68616e20302e3030312500000000000000000000000000000000000000000000602082015250565b60006132d5602a83612b0f565b91506132e082613279565b604082019050919050565b60006020820190508181036000830152613304816132c8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061334582612c28565b915061335083612c28565b92508282019050808211156133685761336761330b565b5b92915050565b7f54686520726f7574657220616c7265616479206861732074686174206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006133ca602383612b0f565b91506133d58261336e565b604082019050919050565b600060208201905081810360008301526133f9816133bd565b9050919050565b60008151905061340f81612bfc565b92915050565b60006020828403121561342b5761342a612bc0565b5b600061343984828501613400565b91505092915050565b60006040820190506134576000830185612e5c565b6134646020830184612e5c565b9392505050565b7f4d61726b6574696e675461782063616e6e6f74206265206d6f7265207468616e60008201527f2032302500000000000000000000000000000000000000000000000000000000602082015250565b60006134c7602483612b0f565b91506134d28261346b565b604082019050919050565b600060208201905081810360008301526134f6816134ba565b9050919050565b7f5468652050616e63616b655377617020706169722063616e6e6f74206265207260008201527f656d6f7665642066726f6d206175746f6d617465644d61726b65744d616b657260208201527f5061697273000000000000000000000000000000000000000000000000000000604082015250565b600061357f604583612b0f565b915061358a826134fd565b606082019050919050565b600060208201905081810360008301526135ae81613572565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613611602583612b0f565b915061361c826135b5565b604082019050919050565b6000602082019050818103600083015261364081613604565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b60006136a3602a83612b0f565b91506136ae82613647565b604082019050919050565b600060208201905081810360008301526136d281613696565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061371382612c28565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036137455761374461330b565b5b600182019050919050565b7f4d61785478416d6f756e742063616e6e6f74206265206c657373207468616e2060008201527f302e303031250000000000000000000000000000000000000000000000000000602082015250565b60006137ac602683612b0f565b91506137b782613750565b604082019050919050565b600060208201905081810360008301526137db8161379f565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061383e602683612b0f565b9150613849826137e2565b604082019050919050565b6000602082019050818103600083015261386d81613831565b9050919050565b6000819050919050565b600061389961389461388f84613874565b612cd4565b612c28565b9050919050565b6138a98161387e565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6138e481612bea565b82525050565b60006138f683836138db565b60208301905092915050565b6000602082019050919050565b600061391a826138af565b61392481856138ba565b935061392f836138cb565b8060005b8381101561396057815161394788826138ea565b975061395283613902565b925050600181019050613933565b5085935050505092915050565b600060a0820190506139826000830188612d4e565b61398f60208301876138a0565b81810360408301526139a1818661390f565b90506139b06060830185612e5c565b6139bd6080830184612d4e565b9695505050505050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613a23602483612b0f565b9150613a2e826139c7565b604082019050919050565b60006020820190508181036000830152613a5281613a16565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613ab5602283612b0f565b9150613ac082613a59565b604082019050919050565b60006020820190508181036000830152613ae481613aa8565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613b21601d83612b0f565b9150613b2c82613aeb565b602082019050919050565b60006020820190508181036000830152613b5081613b14565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613bb3602583612b0f565b9150613bbe82613b57565b604082019050919050565b60006020820190508181036000830152613be281613ba6565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613c45602383612b0f565b9150613c5082613be9565b604082019050919050565b60006020820190508181036000830152613c7481613c38565b9050919050565b7f53656e646572206f7220726563697069656e742061646472657373206973204260008201527f6c61636b6c697374656400000000000000000000000000000000000000000000602082015250565b6000613cd7602a83612b0f565b9150613ce282613c7b565b604082019050919050565b60006020820190508181036000830152613d0681613cca565b9050919050565b7f54726164696e672069732063757272656e746c792064697361626c6564000000600082015250565b6000613d43601d83612b0f565b9150613d4e82613d0d565b602082019050919050565b60006020820190508181036000830152613d7281613d36565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61786960008201527f6d756d20616c6c6f776564000000000000000000000000000000000000000000602082015250565b6000613dd5602b83612b0f565b9150613de082613d79565b604082019050919050565b60006020820190508181036000830152613e0481613dc8565b9050919050565b7f544f4b454e3a2042616c616e636520657863656564732077616c6c657420736960008201527f7a65210000000000000000000000000000000000000000000000000000000000602082015250565b6000613e67602383612b0f565b9150613e7282613e0b565b604082019050919050565b60006020820190508181036000830152613e9681613e5a565b9050919050565b6000613ea882612c28565b9150613eb383612c28565b9250828202613ec181612c28565b91508282048414831517613ed857613ed761330b565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613f1982612c28565b9150613f2483612c28565b925082613f3457613f33613edf565b5b828204905092915050565b6000613f4a82612c28565b9150613f5583612c28565b9250828203905081811115613f6d57613f6c61330b565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613fa9602083612b0f565b9150613fb482613f73565b602082019050919050565b60006020820190508181036000830152613fd881613f9c565b9050919050565b7f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160008201527f6c72656164792073657420746f20746861742076616c75650000000000000000602082015250565b600061403b603883612b0f565b915061404682613fdf565b604082019050919050565b6000602082019050818103600083015261406a8161402e565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006140cd602683612b0f565b91506140d882614071565b604082019050919050565b600060208201905081810360008301526140fc816140c0565b905091905056fea2646970667358221220dfd4b5b2a4f77eebcd5031054c80f34519ad92c83c02f295d5744857127d010f64736f6c63430008120033

Deployed Bytecode Sourcemap

21098:7912:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9348:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25513:497;;;;;;;;;;;;;:::i;:::-;;11708:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21143:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10477:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12489:261;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27718:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10319:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13159:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21259:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26018:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21827:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28400:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26134:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22796:403;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10648:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2769:103;;;;;;;;;;;;;:::i;:::-;;27913:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27240:112;;;;;;;;;;;;;:::i;:::-;;21330:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2128:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28039:353;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27360:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9567:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23207:254;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13900:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21735:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10981:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21380:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21434:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21668:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26256:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26743:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26502:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26995:237;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21220:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11237:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21607:54;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27535:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3027:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21495:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9348:100;9402:13;9435:5;9428:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9348:100;:::o;25513:497::-;25561:25;25589:24;25607:4;25589:9;:24::i;:::-;25561:52;;25651:1;25628:20;:24;25624:379;;;25686:4;25675:8;;:15;;;;;;;;;;;;;;;;;;25705:38;25722:20;25705:16;:38::i;:::-;25754:11;25768:21;25754:35;;25801:12;25827:16;;;;;;;;;;;25819:30;;25858:6;25819:51;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25800:70;;;25889:7;25881:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25977:5;25966:8;;:16;;;;;;;;;;;;;;;;;;25664:339;;25624:379;25550:460;25513:497::o;11708:201::-;11791:4;11808:13;11824:12;:10;:12::i;:::-;11808:28;;11847:32;11856:5;11863:7;11872:6;11847:8;:32::i;:::-;11897:4;11890:11;;;11708:201;;;;:::o;21143:41::-;;;;;;;;;;;;;:::o;10477:108::-;10538:7;10565:12;;10558:19;;10477:108;:::o;12489:261::-;12586:4;12603:15;12621:12;:10;:12::i;:::-;12603:30;;12644:38;12660:4;12666:7;12675:6;12644:15;:38::i;:::-;12693:27;12703:4;12709:2;12713:6;12693:9;:27::i;:::-;12738:4;12731:11;;;12489:261;;;;;:::o;27718:187::-;2014:13;:11;:13::i;:::-;27810:5:::1;27800:6;:15;;27792:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;27891:6;27873:15;:24;;;;27718:187:::0;:::o;10319:93::-;10377:5;10402:2;10395:9;;10319:93;:::o;13159:238::-;13247:4;13264:13;13280:12;:10;:12::i;:::-;13264:28;;13303:64;13312:5;13319:7;13356:10;13328:25;13338:5;13345:7;13328:9;:25::i;:::-;:38;;;;:::i;:::-;13303:8;:64::i;:::-;13385:4;13378:11;;;13159:238;;;;:::o;21259:36::-;;;;:::o;26018:108::-;2014:13;:11;:13::i;:::-;26114:4:::1;26089:13;:22;26103:7;26089:22;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;26018:108:::0;:::o;21827:28::-;;;;;;;;;;;;;:::o;28400:125::-;28465:4;28489:19;:28;28509:7;28489:28;;;;;;;;;;;;;;;;;;;;;;;;;28482:35;;28400:125;;;:::o;26134:114::-;2014:13;:11;:13::i;:::-;26235:5:::1;26210:13;:22;26224:7;26210:22;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;26134:114:::0;:::o;22796:403::-;2014:13;:11;:13::i;:::-;22905:15:::1;;;;;;;;;;;22883:38;;:10;:38;;::::0;22875:86:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;23009:10;22972:15;;:48;;;;;;;;;;;;;;;;;;23031:22;23074:15;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23056:55;;;23120:4;23127:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23056:94;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23031:119;;23177:14;23161:13;;:30;;;;;;;;;;;;;;;;;;22864:335;22796:403:::0;:::o;10648:127::-;10722:7;10749:9;:18;10759:7;10749:18;;;;;;;;;;;;;;;;10742:25;;10648:127;;;:::o;2769:103::-;2014:13;:11;:13::i;:::-;2834:30:::1;2861:1;2834:18;:30::i;:::-;2769:103::o:0;27913:118::-;2014:13;:11;:13::i;:::-;28017:6:::1;27993:21;:30;;;;27913:118:::0;:::o;27240:112::-;2014:13;:11;:13::i;:::-;27310:4:::1;27295:12;;:19;;;;;;;;;;;;;;;;;;27330:14;;;;;;;;;;27240:112::o:0;21330:42::-;;;;:::o;2128:87::-;2174:7;2201:6;;;;;;;;;;;2194:13;;2128:87;:::o;28039:353::-;2014:13;:11;:13::i;:::-;28170:5:::1;28128:21;:39;28150:16;;;;;;;;;;;28128:39;;;;;;;;;;;;;;;;:47;;;;;;;;;;;;;;;;;;28226:5;28186:19;:37;28206:16;;;;;;;;;;;28186:37;;;;;;;;;;;;;;;;:45;;;;;;;;;;;;;;;;;;28261:11;28242:16;;:30;;;;;;;;;;;;;;;;;;28325:4;28283:21;:39;28305:16;;;;;;;;;;;28283:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;28380:4;28340:19;:37;28360:16;;;;;;;;;;;28340:37;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;28039:353:::0;:::o;27360:167::-;2014:13;:11;:13::i;:::-;27443:2:::1;27436:3;:9;;27428:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;27516:3;27497:16;:22;;;;27360:167:::0;:::o;9567:104::-;9623:13;9656:7;9649:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9567:104;:::o;23207:254::-;2014:13;:11;:13::i;:::-;23314::::1;;;;;;;;;;;23306:21;;:4;:21;;::::0;23298:103:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;23412:41;23441:4;23447:5;23412:28;:41::i;:::-;23207:254:::0;;:::o;13900:436::-;13993:4;14010:13;14026:12;:10;:12::i;:::-;14010:28;;14049:24;14076:25;14086:5;14093:7;14076:9;:25::i;:::-;14049:52;;14140:15;14120:16;:35;;14112:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;14233:60;14242:5;14249:7;14277:15;14258:16;:34;14233:8;:60::i;:::-;14324:4;14317:11;;;;13900:436;;;;:::o;21735:85::-;;;;;;;;;;;;;:::o;10981:193::-;11060:4;11077:13;11093:12;:10;:12::i;:::-;11077:28;;11116;11126:5;11133:2;11137:6;11116:9;:28::i;:::-;11162:4;11155:11;;;10981:193;;;;:::o;21380:46::-;;;;:::o;21434:51::-;;;;:::o;21668:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;26256:238::-;2014:13;:11;:13::i;:::-;26381:8:::1;26349:40;;:19;:28;26369:7;26349:28;;;;;;;;;;;;;;;;;;;;;;;;;:40;;::::0;26341:95:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;26478:8;26447:19;:28;26467:7;26447:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;26256:238:::0;;:::o;26743:244::-;2014:13;:11;:13::i;:::-;26872:8:::1;26838:42;;:21;:30;26860:7;26838:30;;;;;;;;;;;;;;;;;;;;;;;;;:42;;::::0;26830:97:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;26971:8;26938:21;:30;26960:7;26938:30;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;26743:244:::0;;:::o;26502:233::-;2014:13;:11;:13::i;:::-;26617:9:::1;26613:115;26636:8;:15;26632:1;:19;26613:115;;;26708:8;26673:19;:32;26693:8;26702:1;26693:11;;;;;;;;:::i;:::-;;;;;;;;26673:32;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;26653:3;;;;;:::i;:::-;;;;26613:115;;;;26502:233:::0;;:::o;26995:237::-;2014:13;:11;:13::i;:::-;27112:9:::1;27108:117;27131:8;:15;27127:1;:19;27108:117;;;27205:8;27168:21;:34;27190:8;27199:1;27190:11;;;;;;;;:::i;:::-;;;;;;;;27168:34;;;;;;;;;;;;;;;;:45;;;;;;;;;;;;;;;;;;27148:3;;;;;:::i;:::-;;;;27108:117;;;;26995:237:::0;;:::o;21220:32::-;;;;;;;;;;;;;:::o;11237:151::-;11326:7;11353:11;:18;11365:5;11353:18;;;;;;;;;;;;;;;:27;11372:7;11353:27;;;;;;;;;;;;;;;;11346:34;;11237:151;;;;:::o;21607:54::-;;;;;;;;;;;;;;;;;;;;;;:::o;27535:175::-;2014:13;:11;:13::i;:::-;27623:5:::1;27613:6;:15;;27605:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;27696:6;27682:11;:20;;;;27535:175:::0;:::o;3027:201::-;2014:13;:11;:13::i;:::-;3136:1:::1;3116:22;;:8;:22;;::::0;3108:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3192:28;3211:8;3192:18;:28::i;:::-;3027:201:::0;:::o;21495:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;28533:472::-;28599:21;28637:1;28623:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28599:40;;28668:4;28650;28655:1;28650:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;28694:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28684:4;28689:1;28684:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;28727:62;28744:4;28759:15;;;;;;;;;;;28777:11;28727:8;:62::i;:::-;28800:15;;;;;;;;;;;:66;;;28881:11;28907:1;28924:4;28951;28971:15;28800:197;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28588:417;28533:472;:::o;679:98::-;732:7;759:10;752:17;;679:98;:::o;17893:346::-;18012:1;17995:19;;:5;:19;;;17987:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18093:1;18074:21;;:7;:21;;;18066:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18177:6;18147:11;:18;18159:5;18147:18;;;;;;;;;;;;;;;:27;18166:7;18147:27;;;;;;;;;;;;;;;:36;;;;18215:7;18199:32;;18208:5;18199:32;;;18224:6;18199:32;;;;;;:::i;:::-;;;;;;;;17893:346;;;:::o;18530:419::-;18631:24;18658:25;18668:5;18675:7;18658:9;:25::i;:::-;18631:52;;18718:17;18698:16;:37;18694:248;;18780:6;18760:16;:26;;18752:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18864:51;18873:5;18880:7;18908:6;18889:16;:25;18864:8;:51::i;:::-;18694:248;18620:329;18530:419;;;:::o;23731:1772::-;23879:1;23863:18;;:4;:18;;;23855:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23956:1;23942:16;;:2;:16;;;23934:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;24018:13;:19;24032:4;24018:19;;;;;;;;;;;;;;;;;;;;;;;;;24017:20;:42;;;;;24042:13;:17;24056:2;24042:17;;;;;;;;;;;;;;;;;;;;;;;;;24041:18;24017:42;24009:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;24132:1;24122:6;:11;24119:92;;24150:28;24166:4;24172:2;24176:1;24150:15;:28::i;:::-;24193:7;;24119:92;24235:7;:5;:7::i;:::-;24227:15;;:4;:15;;;;:32;;;;;24252:7;:5;:7::i;:::-;24246:13;;:2;:13;;;;24227:32;24223:486;;;24280:21;:27;24302:4;24280:27;;;;;;;;;;;;;;;;;;;;;;;;;24279:28;:58;;;;;24312:21;:25;24334:2;24312:25;;;;;;;;;;;;;;;;;;;;;;;;;24311:26;24279:58;24276:422;;;24366:12;;;;;;;;;;;24358:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;24449:11;;24439:6;:21;;24431:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;24537:13;;;;;;;;;;;24531:19;;:2;:19;;;24527:156;;24608:15;;24599:6;24583:13;24593:2;24583:9;:13::i;:::-;:22;;;;:::i;:::-;:40;24575:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;24527:156;24276:422;24223:486;24721:24;24776:21;;24748:24;24766:4;24748:9;:24::i;:::-;:49;;24721:76;;24813:19;:45;;;;;24850:8;;;;;;;;;;;24849:9;24813:45;:94;;;;;24876:25;:31;24902:4;24876:31;;;;;;;;;;;;;;;;;;;;;;;;;24875:32;24813:94;:126;;;;;24932:7;:5;:7::i;:::-;24924:15;;:4;:15;;;;24813:126;:156;;;;;24962:7;:5;:7::i;:::-;24956:13;;:2;:13;;;;24813:156;24809:229;;;25006:20;:18;:20::i;:::-;24809:229;25051:12;25067:8;;;;;;;;;;;25066:9;25051:24;;25089:19;:25;25109:4;25089:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;25118:19;:23;25138:2;25118:23;;;;;;;;;;;;;;;;;;;;;;;;;25089:52;25086:99;;;25168:5;25158:15;;25086:99;25203:7;:40;;;;;25214:25;:29;25240:2;25214:29;;;;;;;;;;;;;;;;;;;;;;;;;25203:40;25200:236;;;25260:20;25311:3;25292:16;;25283:6;:25;;;;:::i;:::-;:31;;;;:::i;:::-;25260:54;;25347:12;25338:6;:21;;;;:::i;:::-;25329:30;;25374:50;25390:4;25404;25411:12;25374:15;:50::i;:::-;25245:191;25200:236;25462:33;25478:4;25484:2;25488:6;25462:15;:33::i;:::-;23844:1659;;23731:1772;;;;:::o;2293:132::-;2368:12;:10;:12::i;:::-;2357:23;;:7;:5;:7::i;:::-;:23;;;2349:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2293:132::o;3388:191::-;3462:16;3481:6;;;;;;;;;;;3462:25;;3507:8;3498:6;;:17;;;;;;;;;;;;;;;;;;3562:8;3531:40;;3552:8;3531:40;;;;;;;;;;;;3451:128;3388:191;:::o;23473:250::-;23599:5;23564:40;;:25;:31;23590:4;23564:31;;;;;;;;;;;;;;;;;;;;;;;;;:40;;;23556:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;23710:5;23676:25;:31;23702:4;23676:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;23473:250;;:::o;14806:806::-;14919:1;14903:18;;:4;:18;;;14895:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14996:1;14982:16;;:2;:16;;;14974:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;15051:38;15072:4;15078:2;15082:6;15051:20;:38::i;:::-;15102:19;15124:9;:15;15134:4;15124:15;;;;;;;;;;;;;;;;15102:37;;15173:6;15158:11;:21;;15150:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;15290:6;15276:11;:20;15258:9;:15;15268:4;15258:15;;;;;;;;;;;;;;;:38;;;;15493:6;15476:9;:13;15486:2;15476:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;15543:2;15528:26;;15537:4;15528:26;;;15547:6;15528:26;;;;;;:::i;:::-;;;;;;;;15567:37;15587:4;15593:2;15597:6;15567:19;:37::i;:::-;14884:728;14806:806;;;:::o;19549:91::-;;;;:::o;20244:90::-;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1349:75::-;1382:6;1415:2;1409:9;1399:19;;1349:75;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:60::-;3474:3;3495:5;3488:12;;3446:60;;;:::o;3512:142::-;3562:9;3595:53;3613:34;3622:24;3640:5;3622:24;:::i;:::-;3613:34;:::i;:::-;3595:53;:::i;:::-;3582:66;;3512:142;;;:::o;3660:126::-;3710:9;3743:37;3774:5;3743:37;:::i;:::-;3730:50;;3660:126;;;:::o;3792:152::-;3868:9;3901:37;3932:5;3901:37;:::i;:::-;3888:50;;3792:152;;;:::o;3950:183::-;4063:63;4120:5;4063:63;:::i;:::-;4058:3;4051:76;3950:183;;:::o;4139:274::-;4258:4;4296:2;4285:9;4281:18;4273:26;;4309:97;4403:1;4392:9;4388:17;4379:6;4309:97;:::i;:::-;4139:274;;;;:::o;4419:118::-;4506:24;4524:5;4506:24;:::i;:::-;4501:3;4494:37;4419:118;;:::o;4543:222::-;4636:4;4674:2;4663:9;4659:18;4651:26;;4687:71;4755:1;4744:9;4740:17;4731:6;4687:71;:::i;:::-;4543:222;;;;:::o;4771:619::-;4848:6;4856;4864;4913:2;4901:9;4892:7;4888:23;4884:32;4881:119;;;4919:79;;:::i;:::-;4881:119;5039:1;5064:53;5109:7;5100:6;5089:9;5085:22;5064:53;:::i;:::-;5054:63;;5010:117;5166:2;5192:53;5237:7;5228:6;5217:9;5213:22;5192:53;:::i;:::-;5182:63;;5137:118;5294:2;5320:53;5365:7;5356:6;5345:9;5341:22;5320:53;:::i;:::-;5310:63;;5265:118;4771:619;;;;;:::o;5396:329::-;5455:6;5504:2;5492:9;5483:7;5479:23;5475:32;5472:119;;;5510:79;;:::i;:::-;5472:119;5630:1;5655:53;5700:7;5691:6;5680:9;5676:22;5655:53;:::i;:::-;5645:63;;5601:117;5396:329;;;;:::o;5731:86::-;5766:7;5806:4;5799:5;5795:16;5784:27;;5731:86;;;:::o;5823:112::-;5906:22;5922:5;5906:22;:::i;:::-;5901:3;5894:35;5823:112;;:::o;5941:214::-;6030:4;6068:2;6057:9;6053:18;6045:26;;6081:67;6145:1;6134:9;6130:17;6121:6;6081:67;:::i;:::-;5941:214;;;;:::o;6161:329::-;6220:6;6269:2;6257:9;6248:7;6244:23;6240:32;6237:119;;;6275:79;;:::i;:::-;6237:119;6395:1;6420:53;6465:7;6456:6;6445:9;6441:22;6420:53;:::i;:::-;6410:63;;6366:117;6161:329;;;;:::o;6496:118::-;6583:24;6601:5;6583:24;:::i;:::-;6578:3;6571:37;6496:118;;:::o;6620:222::-;6713:4;6751:2;6740:9;6736:18;6728:26;;6764:71;6832:1;6821:9;6817:17;6808:6;6764:71;:::i;:::-;6620:222;;;;:::o;6848:104::-;6893:7;6922:24;6940:5;6922:24;:::i;:::-;6911:35;;6848:104;;;:::o;6958:138::-;7039:32;7065:5;7039:32;:::i;:::-;7032:5;7029:43;7019:71;;7086:1;7083;7076:12;7019:71;6958:138;:::o;7102:155::-;7156:5;7194:6;7181:20;7172:29;;7210:41;7245:5;7210:41;:::i;:::-;7102:155;;;;:::o;7263:345::-;7330:6;7379:2;7367:9;7358:7;7354:23;7350:32;7347:119;;;7385:79;;:::i;:::-;7347:119;7505:1;7530:61;7583:7;7574:6;7563:9;7559:22;7530:61;:::i;:::-;7520:71;;7476:125;7263:345;;;;:::o;7614:116::-;7684:21;7699:5;7684:21;:::i;:::-;7677:5;7674:32;7664:60;;7720:1;7717;7710:12;7664:60;7614:116;:::o;7736:133::-;7779:5;7817:6;7804:20;7795:29;;7833:30;7857:5;7833:30;:::i;:::-;7736:133;;;;:::o;7875:468::-;7940:6;7948;7997:2;7985:9;7976:7;7972:23;7968:32;7965:119;;;8003:79;;:::i;:::-;7965:119;8123:1;8148:53;8193:7;8184:6;8173:9;8169:22;8148:53;:::i;:::-;8138:63;;8094:117;8250:2;8276:50;8318:7;8309:6;8298:9;8294:22;8276:50;:::i;:::-;8266:60;;8221:115;7875:468;;;;;:::o;8349:117::-;8458:1;8455;8448:12;8472:180;8520:77;8517:1;8510:88;8617:4;8614:1;8607:15;8641:4;8638:1;8631:15;8658:281;8741:27;8763:4;8741:27;:::i;:::-;8733:6;8729:40;8871:6;8859:10;8856:22;8835:18;8823:10;8820:34;8817:62;8814:88;;;8882:18;;:::i;:::-;8814:88;8922:10;8918:2;8911:22;8701:238;8658:281;;:::o;8945:129::-;8979:6;9006:20;;:::i;:::-;8996:30;;9035:33;9063:4;9055:6;9035:33;:::i;:::-;8945:129;;;:::o;9080:311::-;9157:4;9247:18;9239:6;9236:30;9233:56;;;9269:18;;:::i;:::-;9233:56;9319:4;9311:6;9307:17;9299:25;;9379:4;9373;9369:15;9361:23;;9080:311;;;:::o;9397:117::-;9506:1;9503;9496:12;9537:710;9633:5;9658:81;9674:64;9731:6;9674:64;:::i;:::-;9658:81;:::i;:::-;9649:90;;9759:5;9788:6;9781:5;9774:21;9822:4;9815:5;9811:16;9804:23;;9875:4;9867:6;9863:17;9855:6;9851:30;9904:3;9896:6;9893:15;9890:122;;;9923:79;;:::i;:::-;9890:122;10038:6;10021:220;10055:6;10050:3;10047:15;10021:220;;;10130:3;10159:37;10192:3;10180:10;10159:37;:::i;:::-;10154:3;10147:50;10226:4;10221:3;10217:14;10210:21;;10097:144;10081:4;10076:3;10072:14;10065:21;;10021:220;;;10025:21;9639:608;;9537:710;;;;;:::o;10270:370::-;10341:5;10390:3;10383:4;10375:6;10371:17;10367:27;10357:122;;10398:79;;:::i;:::-;10357:122;10515:6;10502:20;10540:94;10630:3;10622:6;10615:4;10607:6;10603:17;10540:94;:::i;:::-;10531:103;;10347:293;10270:370;;;;:::o;10646:678::-;10736:6;10744;10793:2;10781:9;10772:7;10768:23;10764:32;10761:119;;;10799:79;;:::i;:::-;10761:119;10947:1;10936:9;10932:17;10919:31;10977:18;10969:6;10966:30;10963:117;;;10999:79;;:::i;:::-;10963:117;11104:78;11174:7;11165:6;11154:9;11150:22;11104:78;:::i;:::-;11094:88;;10890:302;11231:2;11257:50;11299:7;11290:6;11279:9;11275:22;11257:50;:::i;:::-;11247:60;;11202:115;10646:678;;;;;:::o;11330:474::-;11398:6;11406;11455:2;11443:9;11434:7;11430:23;11426:32;11423:119;;;11461:79;;:::i;:::-;11423:119;11581:1;11606:53;11651:7;11642:6;11631:9;11627:22;11606:53;:::i;:::-;11596:63;;11552:117;11708:2;11734:53;11779:7;11770:6;11759:9;11755:22;11734:53;:::i;:::-;11724:63;;11679:118;11330:474;;;;;:::o;11810:180::-;11858:77;11855:1;11848:88;11955:4;11952:1;11945:15;11979:4;11976:1;11969:15;11996:320;12040:6;12077:1;12071:4;12067:12;12057:22;;12124:1;12118:4;12114:12;12145:18;12135:81;;12201:4;12193:6;12189:17;12179:27;;12135:81;12263:2;12255:6;12252:14;12232:18;12229:38;12226:84;;12282:18;;:::i;:::-;12226:84;12047:269;11996:320;;;:::o;12322:147::-;12423:11;12460:3;12445:18;;12322:147;;;;:::o;12475:114::-;;:::o;12595:398::-;12754:3;12775:83;12856:1;12851:3;12775:83;:::i;:::-;12768:90;;12867:93;12956:3;12867:93;:::i;:::-;12985:1;12980:3;12976:11;12969:18;;12595:398;;;:::o;12999:379::-;13183:3;13205:147;13348:3;13205:147;:::i;:::-;13198:154;;13369:3;13362:10;;12999:379;;;:::o;13384:241::-;13524:34;13520:1;13512:6;13508:14;13501:58;13593:24;13588:2;13580:6;13576:15;13569:49;13384:241;:::o;13631:366::-;13773:3;13794:67;13858:2;13853:3;13794:67;:::i;:::-;13787:74;;13870:93;13959:3;13870:93;:::i;:::-;13988:2;13983:3;13979:12;13972:19;;13631:366;;;:::o;14003:419::-;14169:4;14207:2;14196:9;14192:18;14184:26;;14256:9;14250:4;14246:20;14242:1;14231:9;14227:17;14220:47;14284:131;14410:4;14284:131;:::i;:::-;14276:139;;14003:419;;;:::o;14428:229::-;14568:34;14564:1;14556:6;14552:14;14545:58;14637:12;14632:2;14624:6;14620:15;14613:37;14428:229;:::o;14663:366::-;14805:3;14826:67;14890:2;14885:3;14826:67;:::i;:::-;14819:74;;14902:93;14991:3;14902:93;:::i;:::-;15020:2;15015:3;15011:12;15004:19;;14663:366;;;:::o;15035:419::-;15201:4;15239:2;15228:9;15224:18;15216:26;;15288:9;15282:4;15278:20;15274:1;15263:9;15259:17;15252:47;15316:131;15442:4;15316:131;:::i;:::-;15308:139;;15035:419;;;:::o;15460:180::-;15508:77;15505:1;15498:88;15605:4;15602:1;15595:15;15629:4;15626:1;15619:15;15646:191;15686:3;15705:20;15723:1;15705:20;:::i;:::-;15700:25;;15739:20;15757:1;15739:20;:::i;:::-;15734:25;;15782:1;15779;15775:9;15768:16;;15803:3;15800:1;15797:10;15794:36;;;15810:18;;:::i;:::-;15794:36;15646:191;;;;:::o;15843:222::-;15983:34;15979:1;15971:6;15967:14;15960:58;16052:5;16047:2;16039:6;16035:15;16028:30;15843:222;:::o;16071:366::-;16213:3;16234:67;16298:2;16293:3;16234:67;:::i;:::-;16227:74;;16310:93;16399:3;16310:93;:::i;:::-;16428:2;16423:3;16419:12;16412:19;;16071:366;;;:::o;16443:419::-;16609:4;16647:2;16636:9;16632:18;16624:26;;16696:9;16690:4;16686:20;16682:1;16671:9;16667:17;16660:47;16724:131;16850:4;16724:131;:::i;:::-;16716:139;;16443:419;;;:::o;16868:143::-;16925:5;16956:6;16950:13;16941:22;;16972:33;16999:5;16972:33;:::i;:::-;16868:143;;;;:::o;17017:351::-;17087:6;17136:2;17124:9;17115:7;17111:23;17107:32;17104:119;;;17142:79;;:::i;:::-;17104:119;17262:1;17287:64;17343:7;17334:6;17323:9;17319:22;17287:64;:::i;:::-;17277:74;;17233:128;17017:351;;;;:::o;17374:332::-;17495:4;17533:2;17522:9;17518:18;17510:26;;17546:71;17614:1;17603:9;17599:17;17590:6;17546:71;:::i;:::-;17627:72;17695:2;17684:9;17680:18;17671:6;17627:72;:::i;:::-;17374:332;;;;;:::o;17712:223::-;17852:34;17848:1;17840:6;17836:14;17829:58;17921:6;17916:2;17908:6;17904:15;17897:31;17712:223;:::o;17941:366::-;18083:3;18104:67;18168:2;18163:3;18104:67;:::i;:::-;18097:74;;18180:93;18269:3;18180:93;:::i;:::-;18298:2;18293:3;18289:12;18282:19;;17941:366;;;:::o;18313:419::-;18479:4;18517:2;18506:9;18502:18;18494:26;;18566:9;18560:4;18556:20;18552:1;18541:9;18537:17;18530:47;18594:131;18720:4;18594:131;:::i;:::-;18586:139;;18313:419;;;:::o;18738:293::-;18878:34;18874:1;18866:6;18862:14;18855:58;18947:34;18942:2;18934:6;18930:15;18923:59;19016:7;19011:2;19003:6;18999:15;18992:32;18738:293;:::o;19037:366::-;19179:3;19200:67;19264:2;19259:3;19200:67;:::i;:::-;19193:74;;19276:93;19365:3;19276:93;:::i;:::-;19394:2;19389:3;19385:12;19378:19;;19037:366;;;:::o;19409:419::-;19575:4;19613:2;19602:9;19598:18;19590:26;;19662:9;19656:4;19652:20;19648:1;19637:9;19633:17;19626:47;19690:131;19816:4;19690:131;:::i;:::-;19682:139;;19409:419;;;:::o;19834:224::-;19974:34;19970:1;19962:6;19958:14;19951:58;20043:7;20038:2;20030:6;20026:15;20019:32;19834:224;:::o;20064:366::-;20206:3;20227:67;20291:2;20286:3;20227:67;:::i;:::-;20220:74;;20303:93;20392:3;20303:93;:::i;:::-;20421:2;20416:3;20412:12;20405:19;;20064:366;;;:::o;20436:419::-;20602:4;20640:2;20629:9;20625:18;20617:26;;20689:9;20683:4;20679:20;20675:1;20664:9;20660:17;20653:47;20717:131;20843:4;20717:131;:::i;:::-;20709:139;;20436:419;;;:::o;20861:229::-;21001:34;20997:1;20989:6;20985:14;20978:58;21070:12;21065:2;21057:6;21053:15;21046:37;20861:229;:::o;21096:366::-;21238:3;21259:67;21323:2;21318:3;21259:67;:::i;:::-;21252:74;;21335:93;21424:3;21335:93;:::i;:::-;21453:2;21448:3;21444:12;21437:19;;21096:366;;;:::o;21468:419::-;21634:4;21672:2;21661:9;21657:18;21649:26;;21721:9;21715:4;21711:20;21707:1;21696:9;21692:17;21685:47;21749:131;21875:4;21749:131;:::i;:::-;21741:139;;21468:419;;;:::o;21893:180::-;21941:77;21938:1;21931:88;22038:4;22035:1;22028:15;22062:4;22059:1;22052:15;22079:233;22118:3;22141:24;22159:5;22141:24;:::i;:::-;22132:33;;22187:66;22180:5;22177:77;22174:103;;22257:18;;:::i;:::-;22174:103;22304:1;22297:5;22293:13;22286:20;;22079:233;;;:::o;22318:225::-;22458:34;22454:1;22446:6;22442:14;22435:58;22527:8;22522:2;22514:6;22510:15;22503:33;22318:225;:::o;22549:366::-;22691:3;22712:67;22776:2;22771:3;22712:67;:::i;:::-;22705:74;;22788:93;22877:3;22788:93;:::i;:::-;22906:2;22901:3;22897:12;22890:19;;22549:366;;;:::o;22921:419::-;23087:4;23125:2;23114:9;23110:18;23102:26;;23174:9;23168:4;23164:20;23160:1;23149:9;23145:17;23138:47;23202:131;23328:4;23202:131;:::i;:::-;23194:139;;22921:419;;;:::o;23346:225::-;23486:34;23482:1;23474:6;23470:14;23463:58;23555:8;23550:2;23542:6;23538:15;23531:33;23346:225;:::o;23577:366::-;23719:3;23740:67;23804:2;23799:3;23740:67;:::i;:::-;23733:74;;23816:93;23905:3;23816:93;:::i;:::-;23934:2;23929:3;23925:12;23918:19;;23577:366;;;:::o;23949:419::-;24115:4;24153:2;24142:9;24138:18;24130:26;;24202:9;24196:4;24192:20;24188:1;24177:9;24173:17;24166:47;24230:131;24356:4;24230:131;:::i;:::-;24222:139;;23949:419;;;:::o;24374:85::-;24419:7;24448:5;24437:16;;24374:85;;;:::o;24465:158::-;24523:9;24556:61;24574:42;24583:32;24609:5;24583:32;:::i;:::-;24574:42;:::i;:::-;24556:61;:::i;:::-;24543:74;;24465:158;;;:::o;24629:147::-;24724:45;24763:5;24724:45;:::i;:::-;24719:3;24712:58;24629:147;;:::o;24782:114::-;24849:6;24883:5;24877:12;24867:22;;24782:114;;;:::o;24902:184::-;25001:11;25035:6;25030:3;25023:19;25075:4;25070:3;25066:14;25051:29;;24902:184;;;;:::o;25092:132::-;25159:4;25182:3;25174:11;;25212:4;25207:3;25203:14;25195:22;;25092:132;;;:::o;25230:108::-;25307:24;25325:5;25307:24;:::i;:::-;25302:3;25295:37;25230:108;;:::o;25344:179::-;25413:10;25434:46;25476:3;25468:6;25434:46;:::i;:::-;25512:4;25507:3;25503:14;25489:28;;25344:179;;;;:::o;25529:113::-;25599:4;25631;25626:3;25622:14;25614:22;;25529:113;;;:::o;25678:732::-;25797:3;25826:54;25874:5;25826:54;:::i;:::-;25896:86;25975:6;25970:3;25896:86;:::i;:::-;25889:93;;26006:56;26056:5;26006:56;:::i;:::-;26085:7;26116:1;26101:284;26126:6;26123:1;26120:13;26101:284;;;26202:6;26196:13;26229:63;26288:3;26273:13;26229:63;:::i;:::-;26222:70;;26315:60;26368:6;26315:60;:::i;:::-;26305:70;;26161:224;26148:1;26145;26141:9;26136:14;;26101:284;;;26105:14;26401:3;26394:10;;25802:608;;;25678:732;;;;:::o;26416:831::-;26679:4;26717:3;26706:9;26702:19;26694:27;;26731:71;26799:1;26788:9;26784:17;26775:6;26731:71;:::i;:::-;26812:80;26888:2;26877:9;26873:18;26864:6;26812:80;:::i;:::-;26939:9;26933:4;26929:20;26924:2;26913:9;26909:18;26902:48;26967:108;27070:4;27061:6;26967:108;:::i;:::-;26959:116;;27085:72;27153:2;27142:9;27138:18;27129:6;27085:72;:::i;:::-;27167:73;27235:3;27224:9;27220:19;27211:6;27167:73;:::i;:::-;26416:831;;;;;;;;:::o;27253:223::-;27393:34;27389:1;27381:6;27377:14;27370:58;27462:6;27457:2;27449:6;27445:15;27438:31;27253:223;:::o;27482:366::-;27624:3;27645:67;27709:2;27704:3;27645:67;:::i;:::-;27638:74;;27721:93;27810:3;27721:93;:::i;:::-;27839:2;27834:3;27830:12;27823:19;;27482:366;;;:::o;27854:419::-;28020:4;28058:2;28047:9;28043:18;28035:26;;28107:9;28101:4;28097:20;28093:1;28082:9;28078:17;28071:47;28135:131;28261:4;28135:131;:::i;:::-;28127:139;;27854:419;;;:::o;28279:221::-;28419:34;28415:1;28407:6;28403:14;28396:58;28488:4;28483:2;28475:6;28471:15;28464:29;28279:221;:::o;28506:366::-;28648:3;28669:67;28733:2;28728:3;28669:67;:::i;:::-;28662:74;;28745:93;28834:3;28745:93;:::i;:::-;28863:2;28858:3;28854:12;28847:19;;28506:366;;;:::o;28878:419::-;29044:4;29082:2;29071:9;29067:18;29059:26;;29131:9;29125:4;29121:20;29117:1;29106:9;29102:17;29095:47;29159:131;29285:4;29159:131;:::i;:::-;29151:139;;28878:419;;;:::o;29303:179::-;29443:31;29439:1;29431:6;29427:14;29420:55;29303:179;:::o;29488:366::-;29630:3;29651:67;29715:2;29710:3;29651:67;:::i;:::-;29644:74;;29727:93;29816:3;29727:93;:::i;:::-;29845:2;29840:3;29836:12;29829:19;;29488:366;;;:::o;29860:419::-;30026:4;30064:2;30053:9;30049:18;30041:26;;30113:9;30107:4;30103:20;30099:1;30088:9;30084:17;30077:47;30141:131;30267:4;30141:131;:::i;:::-;30133:139;;29860:419;;;:::o;30285:224::-;30425:34;30421:1;30413:6;30409:14;30402:58;30494:7;30489:2;30481:6;30477:15;30470:32;30285:224;:::o;30515:366::-;30657:3;30678:67;30742:2;30737:3;30678:67;:::i;:::-;30671:74;;30754:93;30843:3;30754:93;:::i;:::-;30872:2;30867:3;30863:12;30856:19;;30515:366;;;:::o;30887:419::-;31053:4;31091:2;31080:9;31076:18;31068:26;;31140:9;31134:4;31130:20;31126:1;31115:9;31111:17;31104:47;31168:131;31294:4;31168:131;:::i;:::-;31160:139;;30887:419;;;:::o;31312:222::-;31452:34;31448:1;31440:6;31436:14;31429:58;31521:5;31516:2;31508:6;31504:15;31497:30;31312:222;:::o;31540:366::-;31682:3;31703:67;31767:2;31762:3;31703:67;:::i;:::-;31696:74;;31779:93;31868:3;31779:93;:::i;:::-;31897:2;31892:3;31888:12;31881:19;;31540:366;;;:::o;31912:419::-;32078:4;32116:2;32105:9;32101:18;32093:26;;32165:9;32159:4;32155:20;32151:1;32140:9;32136:17;32129:47;32193:131;32319:4;32193:131;:::i;:::-;32185:139;;31912:419;;;:::o;32337:229::-;32477:34;32473:1;32465:6;32461:14;32454:58;32546:12;32541:2;32533:6;32529:15;32522:37;32337:229;:::o;32572:366::-;32714:3;32735:67;32799:2;32794:3;32735:67;:::i;:::-;32728:74;;32811:93;32900:3;32811:93;:::i;:::-;32929:2;32924:3;32920:12;32913:19;;32572:366;;;:::o;32944:419::-;33110:4;33148:2;33137:9;33133:18;33125:26;;33197:9;33191:4;33187:20;33183:1;33172:9;33168:17;33161:47;33225:131;33351:4;33225:131;:::i;:::-;33217:139;;32944:419;;;:::o;33369:179::-;33509:31;33505:1;33497:6;33493:14;33486:55;33369:179;:::o;33554:366::-;33696:3;33717:67;33781:2;33776:3;33717:67;:::i;:::-;33710:74;;33793:93;33882:3;33793:93;:::i;:::-;33911:2;33906:3;33902:12;33895:19;;33554:366;;;:::o;33926:419::-;34092:4;34130:2;34119:9;34115:18;34107:26;;34179:9;34173:4;34169:20;34165:1;34154:9;34150:17;34143:47;34207:131;34333:4;34207:131;:::i;:::-;34199:139;;33926:419;;;:::o;34351:230::-;34491:34;34487:1;34479:6;34475:14;34468:58;34560:13;34555:2;34547:6;34543:15;34536:38;34351:230;:::o;34587:366::-;34729:3;34750:67;34814:2;34809:3;34750:67;:::i;:::-;34743:74;;34826:93;34915:3;34826:93;:::i;:::-;34944:2;34939:3;34935:12;34928:19;;34587:366;;;:::o;34959:419::-;35125:4;35163:2;35152:9;35148:18;35140:26;;35212:9;35206:4;35202:20;35198:1;35187:9;35183:17;35176:47;35240:131;35366:4;35240:131;:::i;:::-;35232:139;;34959:419;;;:::o;35384:222::-;35524:34;35520:1;35512:6;35508:14;35501:58;35593:5;35588:2;35580:6;35576:15;35569:30;35384:222;:::o;35612:366::-;35754:3;35775:67;35839:2;35834:3;35775:67;:::i;:::-;35768:74;;35851:93;35940:3;35851:93;:::i;:::-;35969:2;35964:3;35960:12;35953:19;;35612:366;;;:::o;35984:419::-;36150:4;36188:2;36177:9;36173:18;36165:26;;36237:9;36231:4;36227:20;36223:1;36212:9;36208:17;36201:47;36265:131;36391:4;36265:131;:::i;:::-;36257:139;;35984:419;;;:::o;36409:410::-;36449:7;36472:20;36490:1;36472:20;:::i;:::-;36467:25;;36506:20;36524:1;36506:20;:::i;:::-;36501:25;;36561:1;36558;36554:9;36583:30;36601:11;36583:30;:::i;:::-;36572:41;;36762:1;36753:7;36749:15;36746:1;36743:22;36723:1;36716:9;36696:83;36673:139;;36792:18;;:::i;:::-;36673:139;36457:362;36409:410;;;;:::o;36825:180::-;36873:77;36870:1;36863:88;36970:4;36967:1;36960:15;36994:4;36991:1;36984:15;37011:185;37051:1;37068:20;37086:1;37068:20;:::i;:::-;37063:25;;37102:20;37120:1;37102:20;:::i;:::-;37097:25;;37141:1;37131:35;;37146:18;;:::i;:::-;37131:35;37188:1;37185;37181:9;37176:14;;37011:185;;;;:::o;37202:194::-;37242:4;37262:20;37280:1;37262:20;:::i;:::-;37257:25;;37296:20;37314:1;37296:20;:::i;:::-;37291:25;;37340:1;37337;37333:9;37325:17;;37364:1;37358:4;37355:11;37352:37;;;37369:18;;:::i;:::-;37352:37;37202:194;;;;:::o;37402:182::-;37542:34;37538:1;37530:6;37526:14;37519:58;37402:182;:::o;37590:366::-;37732:3;37753:67;37817:2;37812:3;37753:67;:::i;:::-;37746:74;;37829:93;37918:3;37829:93;:::i;:::-;37947:2;37942:3;37938:12;37931:19;;37590:366;;;:::o;37962:419::-;38128:4;38166:2;38155:9;38151:18;38143:26;;38215:9;38209:4;38205:20;38201:1;38190:9;38186:17;38179:47;38243:131;38369:4;38243:131;:::i;:::-;38235:139;;37962:419;;;:::o;38387:243::-;38527:34;38523:1;38515:6;38511:14;38504:58;38596:26;38591:2;38583:6;38579:15;38572:51;38387:243;:::o;38636:366::-;38778:3;38799:67;38863:2;38858:3;38799:67;:::i;:::-;38792:74;;38875:93;38964:3;38875:93;:::i;:::-;38993:2;38988:3;38984:12;38977:19;;38636:366;;;:::o;39008:419::-;39174:4;39212:2;39201:9;39197:18;39189:26;;39261:9;39255:4;39251:20;39247:1;39236:9;39232:17;39225:47;39289:131;39415:4;39289:131;:::i;:::-;39281:139;;39008:419;;;:::o;39433:225::-;39573:34;39569:1;39561:6;39557:14;39550:58;39642:8;39637:2;39629:6;39625:15;39618:33;39433:225;:::o;39664:366::-;39806:3;39827:67;39891:2;39886:3;39827:67;:::i;:::-;39820:74;;39903:93;39992:3;39903:93;:::i;:::-;40021:2;40016:3;40012:12;40005:19;;39664:366;;;:::o;40036:419::-;40202:4;40240:2;40229:9;40225:18;40217:26;;40289:9;40283:4;40279:20;40275:1;40264:9;40260:17;40253:47;40317:131;40443:4;40317:131;:::i;:::-;40309:139;;40036:419;;;:::o

Swarm Source

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