ETH Price: $3,337.36 (-0.06%)
 

Overview

Max Total Supply

3,518 VIRUS

Holders

727

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
horith.eth
Balance
2 VIRUS
0xbe4e0072267cbd32d47a028acced5ef1098ee145
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
nftPandemic

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-06-18
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/*
    Fully commented standard ERC721 Distilled from OpenZeppelin Docs
    Base for Building ERC721 by Martin McConnell
    All the utility without the fluff.
*/


interface IERC165 {
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

interface IERC721 is IERC165 {
    //@dev Emitted when `tokenId` token is transferred from `from` to `to`.
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    //@dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    //@dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    //@dev Returns the number of tokens in ``owner``'s account.
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(address from,address to,uint256 tokenId) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address from, address to, uint256 tokenId) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    //@dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
    function isApprovedForAll(address owner, address operator) external view returns (bool);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;
}

interface IERC721Metadata is IERC721 {
    //@dev Returns the token collection name.
    function name() external view returns (string memory);

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

    //@dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
     */
    function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4);
}

library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Addr: cant send val, rcpt revert");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Addr: low-level call value fail");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Addr: insufficient balance call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Addr: low-level static call fail");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Addr: static call non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Addr: low-level del call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Addr: delegate call non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) private pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

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

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

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() {
        _setOwner(_msgSender());
    }

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

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

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _setOwner(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 0x address");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

abstract contract Functional {
    function toString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }
    
    bool private _reentryKey = false;
    modifier reentryLock {
        require(!_reentryKey, "attempt reenter locked function");
        _reentryKey = true;
        _;
        _reentryKey = false;
    }
}

abstract contract Proxy is Ownable {
    mapping(address => bool) private _isProxy;

    constructor() {
        _isProxy[_msgSender()] = true;
    }

    function assignProxy(address newProxy) external onlyOwner {
        _isProxy[newProxy] = true;
    }

    function revokeProxy(address badProxy) external onlyOwner {
        _isProxy[badProxy] = false;
    }

    function isProxy(address checkProxy) external view returns (bool) {
        return _isProxy[checkProxy];
    }

    modifier proxyAccess {
        require(_isProxy[_msgSender()]);
        _;
    }
}

// ******************************************************************************************************************************
// **************************************************  Start of Main Contract ***************************************************
// ******************************************************************************************************************************

contract nftPandemic is IERC721, Proxy, Functional {

    using Address for address;
    
    // Token name
    string private _name;

    // Token symbol
    string private _symbol;
    
    // URI Root Location for Json Files
    string private _baseURI;

    // Mapping from token ID to owner address
    mapping(uint256 => address) private _owners;

    // Mapping owner address to token count
    mapping(address => uint256) private _balances;

    // Mapping from token ID to approved address
    mapping(uint256 => address) private _tokenApprovals;

    // Mapping from owner to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;
    
    // Specific Functionality
    bool public mintActive;
    uint256 private _revealTokens;  //for URI redirects
    uint256 public price;
    uint256 public totalTokens;
    uint256 public numberMinted;
    uint256 public maxPerWallet;
    
    mapping(address => uint256) private _mintTracker;

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor() {
        _name = "nftPandemic";
        _symbol = "VIRUS";
        _baseURI = "https://nftpandemic.io/metadata/";
        
        totalTokens = 6666;
        price = 1 * (10 ** 15); // Replace leading value with price in finney

        maxPerWallet = 100;
    }

    //@dev See {IERC165-supportsInterface}. Interfaces Supported by this Standard
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return  interfaceId == type(IERC721).interfaceId ||
                interfaceId == type(IERC721Metadata).interfaceId ||
                interfaceId == type(IERC165).interfaceId ||
                interfaceId == nftPandemic.onERC721Received.selector;
    }
    
    // Standard Withdraw function for the owner to pull the contract
    function withdraw() external onlyOwner {
        uint256 sendAmount = address(this).balance;
        (bool success, ) = msg.sender.call{value: sendAmount}("");
        require(success, "Transaction Unsuccessful");
    }
    
    function ownerMint(address _to, uint256 qty) external onlyOwner {
        require((numberMinted + qty) <= totalTokens, "Cannot fill order");
        
        uint256 mintSeedValue = numberMinted; //Store the starting value of the mint batch
        numberMinted += qty;
        
        for(uint256 i = 0; i < qty; i++) {
            _safeMint(_to, mintSeedValue + i);
        }
    }
    
    function airDrop(address[] memory _to) external onlyOwner {
        uint256 qty = _to.length;
        require((numberMinted + qty) <= totalTokens, "Cannot fill order");
        
        uint256 mintSeedValue = numberMinted;
		numberMinted += qty;
        
        for(uint256 i = 0; i < qty; i++) {
            _safeMint(_to[i], mintSeedValue + i);
        }
    }
    
    function mint() external payable reentryLock {
        address _to = _msgSender();
        require(mintActive, "NOt OPen");
        require(msg.value >= price, "Mint: Insufficient Funds");
        require((2 + numberMinted) <= totalTokens, "Mint: Not enough avaialable");
        require((_mintTracker[_to] + 2) <= maxPerWallet, "Mint: Max tkn per wallet exceeded");
        
        uint256 mintSeedValue = numberMinted; //Store the starting value of the mint batch
        _mintTracker[_to] += 2;
        numberMinted += 2;

        _safeMint(_to, mintSeedValue);
        _safeMint(_to, mintSeedValue + 1);
    }
    
    // allows holders to burn their own tokens if desired
    function burn(uint256 tokenID) external {
        require(_msgSender() == ownerOf(tokenID));
        _burn(tokenID);
    }
    
    //////////////////////////////////////////////////////////////
    //////////////////// Setters and Getters /////////////////////
    //////////////////////////////////////////////////////////////

    
    function setMaxWalletThreshold(uint256 maxWallet) external onlyOwner {
        maxPerWallet = maxWallet;
    }
    
    function setBaseURI(string memory newURI) public onlyOwner {
        _baseURI = newURI;
    }
    
    function activateMint() public onlyOwner {
        mintActive = true;
    }
    
    function deactivateMint() public onlyOwner {
        mintActive = false;
    }
    
    function setPrice(uint256 newPrice) public onlyOwner {
        price = newPrice;
    }
    
    function setTotalTokens(uint256 numTokens) public onlyOwner {
        totalTokens = numTokens;
    }

    function totalSupply() external view returns (uint256) {
        return numberMinted; //stupid bs for etherscan's call
    }
    
    function revealTokens(uint256 numtoreveal) external onlyOwner {
        _revealTokens = numtoreveal;
    }

    /// Proxy functions for future extension contracts to save gas and make things interactive
    function proxyMint(address to, uint256 tokenId) external proxyAccess {
    	_safeMint(to, tokenId);
    	numberMinted += 1;
    }
    
    function proxyBurn(uint256 tokenId) external proxyAccess {
    	_burn(tokenId);
    	numberMinted -= 1;
    }
    
    function proxyTransfer(address from, address to, uint256 tokenId) external proxyAccess {
    	_transfer(from, to, tokenId);
    }

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: bal qry for zero address");
        return _balances[owner];
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: own query nonexist tkn");
        return owner;
    }

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ownerOf(tokenId);
        require(to != owner, "ERC721: approval current owner");

        require(
            msg.sender == owner || isApprovedForAll(owner, msg.sender),
            "ERC721: caller !owner/!approved"
        );

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved nonexistent tkn");
        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        require(operator != msg.sender, "ERC721: approve to caller");

        _operatorApprovals[msg.sender][operator] = approved;
        emit ApprovalForAll(msg.sender, operator, approved);
    }

    /**
     * @dev See {IERC721-isApprovedForAll}.
     */
    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner][operator];
    }

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(msg.sender, tokenId), "ERC721: txfr !owner/approved");
        _transfer(from, to, tokenId);
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        require(_isApprovedOrOwner(msg.sender, tokenId), "ERC721: txfr !owner/approved");
        _safeTransfer(from, to, tokenId, _data);
    }

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * `_data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "txfr to non ERC721Reciever");
    }

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     * and stop existing when they are burned (`_burn`).
     */
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: op query nonexistent tkn");
        address owner = ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }

    /**
     * @dev Safely mints `tokenId` and transfers it to `to`.
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    /**
     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
     */
    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, _data),
            "txfr to non ERC721Reciever"
        );
    }

    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _beforeTokenTransfer(address(0), to, tokenId);

        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(address(0), to, tokenId);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal virtual {
        address owner = ownerOf(tokenId);

        _beforeTokenTransfer(owner, address(0), tokenId);

        // Clear approvals
        _approve(address(0), tokenId);

        _balances[owner] -= 1;
        delete _owners[tokenId];

        emit Transfer(owner, address(0), tokenId);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(ownerOf(tokenId) == from, "ERC721: txfr token not owned");
        require(to != address(0), "ERC721: txfr to 0x0 address");
        _beforeTokenTransfer(from, to, tokenId);

        // Clear approvals from the previous owner
        _approve(address(0), tokenId);

        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);
    }

    /**
     * @dev Approve `to` to operate on `tokenId`
     *
     * Emits a {Approval} event.
     */
    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ownerOf(tokenId), to, tokenId);
    }

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(msg.sender, from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver(to).onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("txfr to non ERC721Reciever");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }
    
    // *********************** ERC721 Token Receiver **********************
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
     */
    function onERC721Received(address _operator, address _from, uint256 _tokenId, bytes calldata _data) external returns(bytes4) {
        //InterfaceID=0x150b7a02
        return this.onERC721Received.selector;
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` 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 tokenId
    ) internal virtual {}

    // **************************************** Metadata Standard Functions **********
    //@dev Returns the token collection name.
    function name() external view returns (string memory){
        return _name;
    }

    //@dev Returns the token collection symbol.
    function symbol() external view returns (string memory){
        return _symbol;
    }

    //@dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
    function tokenURI(uint256 tokenId) external view returns (string memory){
        require(_exists(tokenId), "ERC721Metadata: URI 0x0 token");
        string memory tokenuri;
        
        if (tokenId < _revealTokens) {
            tokenuri = string(abi.encodePacked(_baseURI, toString(tokenId), ".json"));
        } else {
            tokenuri = string(abi.encodePacked(_baseURI, "mystery.json"));  
        }
        
        return tokenuri;
    }
    
    function contractURI() public view returns (string memory) {
            return string(abi.encodePacked(_baseURI,"contract.json"));
    }
    // *******************************************************************************

    receive() external payable {}
    
    fallback() external payable {}
}

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":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"activateMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_to","type":"address[]"}],"name":"airDrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newProxy","type":"address"}],"name":"assignProxy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenID","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deactivateMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"checkProxy","type":"address"}],"name":"isProxy","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"qty","type":"uint256"}],"name":"ownerMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"proxyBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"proxyMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"proxyTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numtoreveal","type":"uint256"}],"name":"revealTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"badProxy","type":"address"}],"name":"revokeProxy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWallet","type":"uint256"}],"name":"setMaxWalletThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numTokens","type":"uint256"}],"name":"setTotalTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","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":"totalTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526000600260006101000a81548160ff0219169083151502179055503480156200002c57600080fd5b506200004d62000041620001c260201b60201c565b620001ca60201b60201c565b600180600062000062620001c260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506040518060400160405280600b81526020017f6e667450616e64656d696300000000000000000000000000000000000000000081525060039080519060200190620001009291906200028e565b506040518060400160405280600581526020017f5649525553000000000000000000000000000000000000000000000000000000815250600490805190602001906200014e9291906200028e565b506040518060400160405280602081526020017f68747470733a2f2f6e667470616e64656d69632e696f2f6d657461646174612f815250600590805190602001906200019c9291906200028e565b50611a0a600d8190555066038d7ea4c68000600c819055506064600f81905550620003a3565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200029c906200033e565b90600052602060002090601f016020900481019282620002c057600085556200030c565b82601f10620002db57805160ff19168380011785556200030c565b828001600101855582156200030c579182015b828111156200030b578251825591602001919060010190620002ee565b5b5090506200031b91906200031f565b5090565b5b808211156200033a57600081600090555060010162000320565b5090565b600060028204905060018216806200035757607f821691505b602082108114156200036e576200036d62000374565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61477d80620003b36000396000f3fe6080604052600436106102545760003560e01c80634a92fb3a11610139578063a22cb465116100b6578063c89052251161007a578063c89052251461086a578063c91c046214610893578063e8a3d485146108aa578063e985e9c5146108d5578063f2fde38b14610912578063fa825efd1461093b5761025b565b8063a22cb46514610789578063b0b92263146107b2578063b3aa8806146107db578063b88d4fde14610804578063c87b56dd1461082d5761025b565b80637e1c0c09116100fd5780637e1c0c09146106b45780638da5cb5b146106df57806391b7f5ed1461070a57806395d89b4114610733578063a035b1fe1461075e5761025b565b80634a92fb3a146105d157806355f804b3146105fa5780636352211e1461062357806370a0823114610660578063715018a61461069d5761025b565b806323b872dd116101d25780633ccfd60b116101965780633ccfd60b146104e957806342842e0e1461050057806342966c6814610529578063453c231014610552578063484b973c1461057d57806349a772b5146105a65761025b565b806323b872dd1461041857806325fd90f314610441578063297103881461046c5780632e56f71e146104a95780633b479d58146104c05761025b565b80631249c58b116102195780631249c58b14610354578063150b7a021461035e57806318160ddd1461039b5780631e8383a8146103c65780631f471ad0146103ef5761025b565b8062b6849f1461025d57806301ffc9a71461028657806306fdde03146102c3578063081812fc146102ee578063095ea7b31461032b5761025b565b3661025b57005b005b34801561026957600080fd5b50610284600480360381019061027f91906133b0565b610964565b005b34801561029257600080fd5b506102ad60048036038101906102a891906133f9565b610aab565b6040516102ba9190613ac7565b60405180910390f35b3480156102cf57600080fd5b506102d8610c34565b6040516102e59190613afd565b60405180910390f35b3480156102fa57600080fd5b506103156004803603810190610310919061349c565b610cc6565b6040516103229190613a60565b60405180910390f35b34801561033757600080fd5b50610352600480360381019061034d9190613370565b610d4b565b005b61035c610e55565b005b34801561036a57600080fd5b5061038560048036038101906103809190613225565b6110fa565b6040516103929190613ae2565b60405180910390f35b3480156103a757600080fd5b506103b061110f565b6040516103bd9190613dff565b60405180910390f35b3480156103d257600080fd5b506103ed60048036038101906103e8919061349c565b611119565b005b3480156103fb57600080fd5b5061041660048036038101906104119190613370565b61119c565b005b34801561042457600080fd5b5061043f600480360381019061043a91906131d2565b611221565b005b34801561044d57600080fd5b5061045661127a565b6040516104639190613ac7565b60405180910390f35b34801561047857600080fd5b50610493600480360381019061048e9190613165565b61128d565b6040516104a09190613ac7565b60405180910390f35b3480156104b557600080fd5b506104be6112e3565b005b3480156104cc57600080fd5b506104e760048036038101906104e29190613165565b61137c565b005b3480156104f557600080fd5b506104fe611452565b005b34801561050c57600080fd5b50610527600480360381019061052291906131d2565b611583565b005b34801561053557600080fd5b50610550600480360381019061054b919061349c565b6115a3565b005b34801561055e57600080fd5b506105676115f6565b6040516105749190613dff565b60405180910390f35b34801561058957600080fd5b506105a4600480360381019061059f9190613370565b6115fc565b005b3480156105b257600080fd5b506105bb611723565b6040516105c89190613dff565b60405180910390f35b3480156105dd57600080fd5b506105f860048036038101906105f391906131d2565b611729565b005b34801561060657600080fd5b50610621600480360381019061061c9190613453565b611796565b005b34801561062f57600080fd5b5061064a6004803603810190610645919061349c565b61182c565b6040516106579190613a60565b60405180910390f35b34801561066c57600080fd5b5061068760048036038101906106829190613165565b6118de565b6040516106949190613dff565b60405180910390f35b3480156106a957600080fd5b506106b2611996565b005b3480156106c057600080fd5b506106c9611a1e565b6040516106d69190613dff565b60405180910390f35b3480156106eb57600080fd5b506106f4611a24565b6040516107019190613a60565b60405180910390f35b34801561071657600080fd5b50610731600480360381019061072c919061349c565b611a4d565b005b34801561073f57600080fd5b50610748611ad3565b6040516107559190613afd565b60405180910390f35b34801561076a57600080fd5b50610773611b65565b6040516107809190613dff565b60405180910390f35b34801561079557600080fd5b506107b060048036038101906107ab9190613330565b611b6b565b005b3480156107be57600080fd5b506107d960048036038101906107d4919061349c565b611cd7565b005b3480156107e757600080fd5b5061080260048036038101906107fd919061349c565b611d5d565b005b34801561081057600080fd5b5061082b600480360381019061082691906132ad565b611de3565b005b34801561083957600080fd5b50610854600480360381019061084f919061349c565b611e3e565b6040516108619190613afd565b60405180910390f35b34801561087657600080fd5b50610891600480360381019061088c9190613165565b611ef3565b005b34801561089f57600080fd5b506108a8611fca565b005b3480156108b657600080fd5b506108bf612063565b6040516108cc9190613afd565b60405180910390f35b3480156108e157600080fd5b506108fc60048036038101906108f79190613192565b61208b565b6040516109099190613ac7565b60405180910390f35b34801561091e57600080fd5b5061093960048036038101906109349190613165565b61211f565b005b34801561094757600080fd5b50610962600480360381019061095d919061349c565b612217565b005b61096c61229d565b73ffffffffffffffffffffffffffffffffffffffff1661098a611a24565b73ffffffffffffffffffffffffffffffffffffffff16146109e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d790613d5f565b60405180910390fd5b600081519050600d5481600e546109f79190613f30565b1115610a38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2f90613c9f565b60405180910390fd5b6000600e54905081600e6000828254610a519190613f30565b9250508190555060005b82811015610aa557610a92848281518110610a7957610a7861420b565b5b60200260200101518284610a8d9190613f30565b6122a5565b8080610a9d90614104565b915050610a5b565b50505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b7657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610bde57507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610c2d575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b606060038054610c43906140a1565b80601f0160208091040260200160405190810160405280929190818152602001828054610c6f906140a1565b8015610cbc5780601f10610c9157610100808354040283529160200191610cbc565b820191906000526020600020905b815481529060010190602001808311610c9f57829003601f168201915b5050505050905090565b6000610cd1826122c3565b610d10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0790613b9f565b60405180910390fd5b6008600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d568261182c565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610dc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbe90613bdf565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610e075750610e06813361208b565b5b610e46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3d90613cbf565b60405180910390fd5b610e50838361232f565b505050565b600260009054906101000a900460ff1615610ea5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9c90613cdf565b60405180910390fd5b6001600260006101000a81548160ff0219169083151502179055506000610eca61229d565b9050600a60009054906101000a900460ff16610f1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1290613b3f565b60405180910390fd5b600c54341015610f60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5790613d7f565b60405180910390fd5b600d54600e546002610f729190613f30565b1115610fb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610faa90613bbf565b60405180910390fd5b600f546002601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546110029190613f30565b1115611043576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103a90613dbf565b60405180910390fd5b6000600e5490506002601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461109a9190613f30565b925050819055506002600e60008282546110b49190613f30565b925050819055506110c582826122a5565b6110db826001836110d69190613f30565b6122a5565b50506000600260006101000a81548160ff021916908315150217905550565b600063150b7a0260e01b905095945050505050565b6000600e54905090565b6001600061112561229d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661117657600080fd5b61117f816123e8565b6001600e60008282546111929190613fb7565b9250508190555050565b600160006111a861229d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166111f957600080fd5b61120382826122a5565b6001600e60008282546112169190613f30565b925050819055505050565b61122b33826124f9565b61126a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126190613d9f565b60405180910390fd5b6112758383836125d7565b505050565b600a60009054906101000a900460ff1681565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6112eb61229d565b73ffffffffffffffffffffffffffffffffffffffff16611309611a24565b73ffffffffffffffffffffffffffffffffffffffff161461135f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135690613d5f565b60405180910390fd5b6000600a60006101000a81548160ff021916908315150217905550565b61138461229d565b73ffffffffffffffffffffffffffffffffffffffff166113a2611a24565b73ffffffffffffffffffffffffffffffffffffffff16146113f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ef90613d5f565b60405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61145a61229d565b73ffffffffffffffffffffffffffffffffffffffff16611478611a24565b73ffffffffffffffffffffffffffffffffffffffff16146114ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c590613d5f565b60405180910390fd5b600047905060003373ffffffffffffffffffffffffffffffffffffffff16826040516114f990613a4b565b60006040518083038185875af1925050503d8060008114611536576040519150601f19603f3d011682016040523d82523d6000602084013e61153b565b606091505b505090508061157f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157690613bff565b60405180910390fd5b5050565b61159e83838360405180602001604052806000815250611de3565b505050565b6115ac8161182c565b73ffffffffffffffffffffffffffffffffffffffff166115ca61229d565b73ffffffffffffffffffffffffffffffffffffffff16146115ea57600080fd5b6115f3816123e8565b50565b600f5481565b61160461229d565b73ffffffffffffffffffffffffffffffffffffffff16611622611a24565b73ffffffffffffffffffffffffffffffffffffffff1614611678576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166f90613d5f565b60405180910390fd5b600d5481600e546116899190613f30565b11156116ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c190613c9f565b60405180910390fd5b6000600e54905081600e60008282546116e39190613f30565b9250508190555060005b8281101561171d5761170a8482846117059190613f30565b6122a5565b808061171590614104565b9150506116ed565b50505050565b600e5481565b6001600061173561229d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661178657600080fd5b6117918383836125d7565b505050565b61179e61229d565b73ffffffffffffffffffffffffffffffffffffffff166117bc611a24565b73ffffffffffffffffffffffffffffffffffffffff1614611812576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180990613d5f565b60405180910390fd5b8060059080519060200190611828929190612e85565b5050565b6000806006600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156118d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118cc90613c5f565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561194f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194690613d1f565b60405180910390fd5b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61199e61229d565b73ffffffffffffffffffffffffffffffffffffffff166119bc611a24565b73ffffffffffffffffffffffffffffffffffffffff1614611a12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0990613d5f565b60405180910390fd5b611a1c6000612833565b565b600d5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611a5561229d565b73ffffffffffffffffffffffffffffffffffffffff16611a73611a24565b73ffffffffffffffffffffffffffffffffffffffff1614611ac9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac090613d5f565b60405180910390fd5b80600c8190555050565b606060048054611ae2906140a1565b80601f0160208091040260200160405190810160405280929190818152602001828054611b0e906140a1565b8015611b5b5780601f10611b3057610100808354040283529160200191611b5b565b820191906000526020600020905b815481529060010190602001808311611b3e57829003601f168201915b5050505050905090565b600c5481565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd190613c3f565b60405180910390fd5b80600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611ccb9190613ac7565b60405180910390a35050565b611cdf61229d565b73ffffffffffffffffffffffffffffffffffffffff16611cfd611a24565b73ffffffffffffffffffffffffffffffffffffffff1614611d53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4a90613d5f565b60405180910390fd5b80600d8190555050565b611d6561229d565b73ffffffffffffffffffffffffffffffffffffffff16611d83611a24565b73ffffffffffffffffffffffffffffffffffffffff1614611dd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd090613d5f565b60405180910390fd5b80600f8190555050565b611ded33836124f9565b611e2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2390613d9f565b60405180910390fd5b611e38848484846128f7565b50505050565b6060611e49826122c3565b611e88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7f90613ddf565b60405180910390fd5b6060600b54831015611ec6576005611e9f84612953565b604051602001611eb09291906139d8565b6040516020818303038152906040529050611eea565b6005604051602001611ed89190613a29565b60405160208183030381529060405290505b80915050919050565b611efb61229d565b73ffffffffffffffffffffffffffffffffffffffff16611f19611a24565b73ffffffffffffffffffffffffffffffffffffffff1614611f6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6690613d5f565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611fd261229d565b73ffffffffffffffffffffffffffffffffffffffff16611ff0611a24565b73ffffffffffffffffffffffffffffffffffffffff1614612046576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203d90613d5f565b60405180910390fd5b6001600a60006101000a81548160ff021916908315150217905550565b606060056040516020016120779190613a07565b604051602081830303815290604052905090565b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61212761229d565b73ffffffffffffffffffffffffffffffffffffffff16612145611a24565b73ffffffffffffffffffffffffffffffffffffffff161461219b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219290613d5f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561220b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220290613c1f565b60405180910390fd5b61221481612833565b50565b61221f61229d565b73ffffffffffffffffffffffffffffffffffffffff1661223d611a24565b73ffffffffffffffffffffffffffffffffffffffff1614612293576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228a90613d5f565b60405180910390fd5b80600b8190555050565b600033905090565b6122bf828260405180602001604052806000815250612ab4565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff166006600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816008600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166123a28361182c565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006123f38261182c565b905061240181600084612b0f565b61240c60008361232f565b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461245c9190613fb7565b925050819055506006600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000612504826122c3565b612543576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253a90613b1f565b60405180910390fd5b600061254e8361182c565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806125bd57508373ffffffffffffffffffffffffffffffffffffffff166125a584610cc6565b73ffffffffffffffffffffffffffffffffffffffff16145b806125ce57506125cd818561208b565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166125f78261182c565b73ffffffffffffffffffffffffffffffffffffffff161461264d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264490613d3f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b490613b5f565b60405180910390fd5b6126c8838383612b0f565b6126d360008261232f565b6001600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127239190613fb7565b925050819055506001600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461277a9190613f30565b92505081905550816006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6129028484846125d7565b61290e84848484612b14565b61294d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294490613c7f565b60405180910390fd5b50505050565b6060600082141561299b576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612aaf565b600082905060005b600082146129cd5780806129b690614104565b915050600a826129c69190613f86565b91506129a3565b60008167ffffffffffffffff8111156129e9576129e861423a565b5b6040519080825280601f01601f191660200182016040528015612a1b5781602001600182028036833780820191505090505b5090505b60008514612aa857600182612a349190613fb7565b9150600a85612a43919061414d565b6030612a4f9190613f30565b60f81b818381518110612a6557612a6461420b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612aa19190613f86565b9450612a1f565b8093505050505b919050565b612abe8383612ca4565b612acb6000848484612b14565b612b0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0190613c7f565b60405180910390fd5b505050565b505050565b6000612b358473ffffffffffffffffffffffffffffffffffffffff16612e72565b15612c97578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02338786866040518563ffffffff1660e01b8152600401612b799493929190613a7b565b602060405180830381600087803b158015612b9357600080fd5b505af1925050508015612bc457506040513d601f19601f82011682018060405250810190612bc19190613426565b60015b612c47573d8060008114612bf4576040519150601f19603f3d011682016040523d82523d6000602084013e612bf9565b606091505b50600081511415612c3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3690613c7f565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612c9c565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0b90613cff565b60405180910390fd5b612d1d816122c3565b15612d5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5490613b7f565b60405180910390fd5b612d6960008383612b0f565b6001600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612db99190613f30565b92505081905550816006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054612e91906140a1565b90600052602060002090601f016020900481019282612eb35760008555612efa565b82601f10612ecc57805160ff1916838001178555612efa565b82800160010185558215612efa579182015b82811115612ef9578251825591602001919060010190612ede565b5b509050612f079190612f0b565b5090565b5b80821115612f24576000816000905550600101612f0c565b5090565b6000612f3b612f3684613e3f565b613e1a565b90508083825260208201905082856020860282011115612f5e57612f5d614273565b5b60005b85811015612f8e5781612f74888261301c565b845260208401935060208301925050600181019050612f61565b5050509392505050565b6000612fab612fa684613e6b565b613e1a565b905082815260208101848484011115612fc757612fc6614278565b5b612fd284828561405f565b509392505050565b6000612fed612fe884613e9c565b613e1a565b90508281526020810184848401111561300957613008614278565b5b61301484828561405f565b509392505050565b60008135905061302b816146eb565b92915050565b600082601f8301126130465761304561426e565b5b8135613056848260208601612f28565b91505092915050565b60008135905061306e81614702565b92915050565b60008135905061308381614719565b92915050565b60008151905061309881614719565b92915050565b60008083601f8401126130b4576130b361426e565b5b8235905067ffffffffffffffff8111156130d1576130d0614269565b5b6020830191508360018202830111156130ed576130ec614273565b5b9250929050565b600082601f8301126131095761310861426e565b5b8135613119848260208601612f98565b91505092915050565b600082601f8301126131375761313661426e565b5b8135613147848260208601612fda565b91505092915050565b60008135905061315f81614730565b92915050565b60006020828403121561317b5761317a614282565b5b60006131898482850161301c565b91505092915050565b600080604083850312156131a9576131a8614282565b5b60006131b78582860161301c565b92505060206131c88582860161301c565b9150509250929050565b6000806000606084860312156131eb576131ea614282565b5b60006131f98682870161301c565b935050602061320a8682870161301c565b925050604061321b86828701613150565b9150509250925092565b60008060008060006080868803121561324157613240614282565b5b600061324f8882890161301c565b95505060206132608882890161301c565b945050604061327188828901613150565b935050606086013567ffffffffffffffff8111156132925761329161427d565b5b61329e8882890161309e565b92509250509295509295909350565b600080600080608085870312156132c7576132c6614282565b5b60006132d58782880161301c565b94505060206132e68782880161301c565b93505060406132f787828801613150565b925050606085013567ffffffffffffffff8111156133185761331761427d565b5b613324878288016130f4565b91505092959194509250565b6000806040838503121561334757613346614282565b5b60006133558582860161301c565b92505060206133668582860161305f565b9150509250929050565b6000806040838503121561338757613386614282565b5b60006133958582860161301c565b92505060206133a685828601613150565b9150509250929050565b6000602082840312156133c6576133c5614282565b5b600082013567ffffffffffffffff8111156133e4576133e361427d565b5b6133f084828501613031565b91505092915050565b60006020828403121561340f5761340e614282565b5b600061341d84828501613074565b91505092915050565b60006020828403121561343c5761343b614282565b5b600061344a84828501613089565b91505092915050565b60006020828403121561346957613468614282565b5b600082013567ffffffffffffffff8111156134875761348661427d565b5b61349384828501613122565b91505092915050565b6000602082840312156134b2576134b1614282565b5b60006134c084828501613150565b91505092915050565b6134d281613feb565b82525050565b6134e181613ffd565b82525050565b6134f081614009565b82525050565b600061350182613ee2565b61350b8185613ef8565b935061351b81856020860161406e565b61352481614287565b840191505092915050565b600061353a82613eed565b6135448185613f14565b935061355481856020860161406e565b61355d81614287565b840191505092915050565b600061357382613eed565b61357d8185613f25565b935061358d81856020860161406e565b80840191505092915050565b600081546135a6816140a1565b6135b08186613f25565b945060018216600081146135cb57600181146135dc5761360f565b60ff1983168652818601935061360f565b6135e585613ecd565b60005b83811015613607578154818901526001820191506020810190506135e8565b838801955050505b50505092915050565b6000613625602083613f14565b915061363082614298565b602082019050919050565b6000613648600d83613f25565b9150613653826142c1565b600d82019050919050565b600061366b600883613f14565b9150613676826142ea565b602082019050919050565b600061368e601b83613f14565b915061369982614313565b602082019050919050565b60006136b1601c83613f14565b91506136bc8261433c565b602082019050919050565b60006136d4602083613f14565b91506136df82614365565b602082019050919050565b60006136f7601b83613f14565b91506137028261438e565b602082019050919050565b600061371a601e83613f14565b9150613725826143b7565b602082019050919050565b600061373d601883613f14565b9150613748826143e0565b602082019050919050565b6000613760602083613f14565b915061376b82614409565b602082019050919050565b6000613783601983613f14565b915061378e82614432565b602082019050919050565b60006137a6600c83613f25565b91506137b18261445b565b600c82019050919050565b60006137c9601e83613f14565b91506137d482614484565b602082019050919050565b60006137ec601a83613f14565b91506137f7826144ad565b602082019050919050565b600061380f601183613f14565b915061381a826144d6565b602082019050919050565b6000613832601f83613f14565b915061383d826144ff565b602082019050919050565b6000613855601f83613f14565b915061386082614528565b602082019050919050565b6000613878602083613f14565b915061388382614551565b602082019050919050565b600061389b602083613f14565b91506138a68261457a565b602082019050919050565b60006138be600583613f25565b91506138c9826145a3565b600582019050919050565b60006138e1601c83613f14565b91506138ec826145cc565b602082019050919050565b6000613904602083613f14565b915061390f826145f5565b602082019050919050565b6000613927601883613f14565b91506139328261461e565b602082019050919050565b600061394a601c83613f14565b915061395582614647565b602082019050919050565b600061396d602183613f14565b915061397882614670565b604082019050919050565b6000613990600083613f09565b915061399b826146bf565b600082019050919050565b60006139b3601d83613f14565b91506139be826146c2565b602082019050919050565b6139d281614055565b82525050565b60006139e48285613599565b91506139f08284613568565b91506139fb826138b1565b91508190509392505050565b6000613a138284613599565b9150613a1e8261363b565b915081905092915050565b6000613a358284613599565b9150613a4082613799565b915081905092915050565b6000613a5682613983565b9150819050919050565b6000602082019050613a7560008301846134c9565b92915050565b6000608082019050613a9060008301876134c9565b613a9d60208301866134c9565b613aaa60408301856139c9565b8181036060830152613abc81846134f6565b905095945050505050565b6000602082019050613adc60008301846134d8565b92915050565b6000602082019050613af760008301846134e7565b92915050565b60006020820190508181036000830152613b17818461352f565b905092915050565b60006020820190508181036000830152613b3881613618565b9050919050565b60006020820190508181036000830152613b588161365e565b9050919050565b60006020820190508181036000830152613b7881613681565b9050919050565b60006020820190508181036000830152613b98816136a4565b9050919050565b60006020820190508181036000830152613bb8816136c7565b9050919050565b60006020820190508181036000830152613bd8816136ea565b9050919050565b60006020820190508181036000830152613bf88161370d565b9050919050565b60006020820190508181036000830152613c1881613730565b9050919050565b60006020820190508181036000830152613c3881613753565b9050919050565b60006020820190508181036000830152613c5881613776565b9050919050565b60006020820190508181036000830152613c78816137bc565b9050919050565b60006020820190508181036000830152613c98816137df565b9050919050565b60006020820190508181036000830152613cb881613802565b9050919050565b60006020820190508181036000830152613cd881613825565b9050919050565b60006020820190508181036000830152613cf881613848565b9050919050565b60006020820190508181036000830152613d188161386b565b9050919050565b60006020820190508181036000830152613d388161388e565b9050919050565b60006020820190508181036000830152613d58816138d4565b9050919050565b60006020820190508181036000830152613d78816138f7565b9050919050565b60006020820190508181036000830152613d988161391a565b9050919050565b60006020820190508181036000830152613db88161393d565b9050919050565b60006020820190508181036000830152613dd881613960565b9050919050565b60006020820190508181036000830152613df8816139a6565b9050919050565b6000602082019050613e1460008301846139c9565b92915050565b6000613e24613e35565b9050613e3082826140d3565b919050565b6000604051905090565b600067ffffffffffffffff821115613e5a57613e5961423a565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613e8657613e8561423a565b5b613e8f82614287565b9050602081019050919050565b600067ffffffffffffffff821115613eb757613eb661423a565b5b613ec082614287565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613f3b82614055565b9150613f4683614055565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613f7b57613f7a61417e565b5b828201905092915050565b6000613f9182614055565b9150613f9c83614055565b925082613fac57613fab6141ad565b5b828204905092915050565b6000613fc282614055565b9150613fcd83614055565b925082821015613fe057613fdf61417e565b5b828203905092915050565b6000613ff682614035565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561408c578082015181840152602081019050614071565b8381111561409b576000848401525b50505050565b600060028204905060018216806140b957607f821691505b602082108114156140cd576140cc6141dc565b5b50919050565b6140dc82614287565b810181811067ffffffffffffffff821117156140fb576140fa61423a565b5b80604052505050565b600061410f82614055565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156141425761414161417e565b5b600182019050919050565b600061415882614055565b915061416383614055565b925082614173576141726141ad565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a206f70207175657279206e6f6e6578697374656e7420746b6e600082015250565b7f636f6e74726163742e6a736f6e00000000000000000000000000000000000000600082015250565b7f4e4f74204f50656e000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207478667220746f2030783020616464726573730000000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a20617070726f766564206e6f6e6578697374656e7420746b6e600082015250565b7f4d696e743a204e6f7420656e6f7567682061766169616c61626c650000000000600082015250565b7f4552433732313a20617070726f76616c2063757272656e74206f776e65720000600082015250565b7f5472616e73616374696f6e20556e7375636365737366756c0000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e65722069732030782061646472657373600082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f6d7973746572792e6a736f6e0000000000000000000000000000000000000000600082015250565b7f4552433732313a206f776e207175657279206e6f6e657869737420746b6e0000600082015250565b7f7478667220746f206e6f6e204552433732315265636965766572000000000000600082015250565b7f43616e6e6f742066696c6c206f72646572000000000000000000000000000000600082015250565b7f4552433732313a2063616c6c657220216f776e65722f21617070726f76656400600082015250565b7f617474656d7074207265656e746572206c6f636b65642066756e6374696f6e00600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a2062616c2071727920666f72207a65726f2061646472657373600082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207478667220746f6b656e206e6f74206f776e656400000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4d696e743a20496e73756666696369656e742046756e64730000000000000000600082015250565b7f4552433732313a207478667220216f776e65722f617070726f76656400000000600082015250565b7f4d696e743a204d617820746b6e207065722077616c6c6574206578636565646560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732314d657461646174613a205552492030783020746f6b656e000000600082015250565b6146f481613feb565b81146146ff57600080fd5b50565b61470b81613ffd565b811461471657600080fd5b50565b61472281614009565b811461472d57600080fd5b50565b61473981614055565b811461474457600080fd5b5056fea26469706673582212200dde18c9fd4d4c8fdbfa3d112c4410f961071d8b37745a8cf239102a43fa946e64736f6c63430008070033

Deployed Bytecode

0x6080604052600436106102545760003560e01c80634a92fb3a11610139578063a22cb465116100b6578063c89052251161007a578063c89052251461086a578063c91c046214610893578063e8a3d485146108aa578063e985e9c5146108d5578063f2fde38b14610912578063fa825efd1461093b5761025b565b8063a22cb46514610789578063b0b92263146107b2578063b3aa8806146107db578063b88d4fde14610804578063c87b56dd1461082d5761025b565b80637e1c0c09116100fd5780637e1c0c09146106b45780638da5cb5b146106df57806391b7f5ed1461070a57806395d89b4114610733578063a035b1fe1461075e5761025b565b80634a92fb3a146105d157806355f804b3146105fa5780636352211e1461062357806370a0823114610660578063715018a61461069d5761025b565b806323b872dd116101d25780633ccfd60b116101965780633ccfd60b146104e957806342842e0e1461050057806342966c6814610529578063453c231014610552578063484b973c1461057d57806349a772b5146105a65761025b565b806323b872dd1461041857806325fd90f314610441578063297103881461046c5780632e56f71e146104a95780633b479d58146104c05761025b565b80631249c58b116102195780631249c58b14610354578063150b7a021461035e57806318160ddd1461039b5780631e8383a8146103c65780631f471ad0146103ef5761025b565b8062b6849f1461025d57806301ffc9a71461028657806306fdde03146102c3578063081812fc146102ee578063095ea7b31461032b5761025b565b3661025b57005b005b34801561026957600080fd5b50610284600480360381019061027f91906133b0565b610964565b005b34801561029257600080fd5b506102ad60048036038101906102a891906133f9565b610aab565b6040516102ba9190613ac7565b60405180910390f35b3480156102cf57600080fd5b506102d8610c34565b6040516102e59190613afd565b60405180910390f35b3480156102fa57600080fd5b506103156004803603810190610310919061349c565b610cc6565b6040516103229190613a60565b60405180910390f35b34801561033757600080fd5b50610352600480360381019061034d9190613370565b610d4b565b005b61035c610e55565b005b34801561036a57600080fd5b5061038560048036038101906103809190613225565b6110fa565b6040516103929190613ae2565b60405180910390f35b3480156103a757600080fd5b506103b061110f565b6040516103bd9190613dff565b60405180910390f35b3480156103d257600080fd5b506103ed60048036038101906103e8919061349c565b611119565b005b3480156103fb57600080fd5b5061041660048036038101906104119190613370565b61119c565b005b34801561042457600080fd5b5061043f600480360381019061043a91906131d2565b611221565b005b34801561044d57600080fd5b5061045661127a565b6040516104639190613ac7565b60405180910390f35b34801561047857600080fd5b50610493600480360381019061048e9190613165565b61128d565b6040516104a09190613ac7565b60405180910390f35b3480156104b557600080fd5b506104be6112e3565b005b3480156104cc57600080fd5b506104e760048036038101906104e29190613165565b61137c565b005b3480156104f557600080fd5b506104fe611452565b005b34801561050c57600080fd5b50610527600480360381019061052291906131d2565b611583565b005b34801561053557600080fd5b50610550600480360381019061054b919061349c565b6115a3565b005b34801561055e57600080fd5b506105676115f6565b6040516105749190613dff565b60405180910390f35b34801561058957600080fd5b506105a4600480360381019061059f9190613370565b6115fc565b005b3480156105b257600080fd5b506105bb611723565b6040516105c89190613dff565b60405180910390f35b3480156105dd57600080fd5b506105f860048036038101906105f391906131d2565b611729565b005b34801561060657600080fd5b50610621600480360381019061061c9190613453565b611796565b005b34801561062f57600080fd5b5061064a6004803603810190610645919061349c565b61182c565b6040516106579190613a60565b60405180910390f35b34801561066c57600080fd5b5061068760048036038101906106829190613165565b6118de565b6040516106949190613dff565b60405180910390f35b3480156106a957600080fd5b506106b2611996565b005b3480156106c057600080fd5b506106c9611a1e565b6040516106d69190613dff565b60405180910390f35b3480156106eb57600080fd5b506106f4611a24565b6040516107019190613a60565b60405180910390f35b34801561071657600080fd5b50610731600480360381019061072c919061349c565b611a4d565b005b34801561073f57600080fd5b50610748611ad3565b6040516107559190613afd565b60405180910390f35b34801561076a57600080fd5b50610773611b65565b6040516107809190613dff565b60405180910390f35b34801561079557600080fd5b506107b060048036038101906107ab9190613330565b611b6b565b005b3480156107be57600080fd5b506107d960048036038101906107d4919061349c565b611cd7565b005b3480156107e757600080fd5b5061080260048036038101906107fd919061349c565b611d5d565b005b34801561081057600080fd5b5061082b600480360381019061082691906132ad565b611de3565b005b34801561083957600080fd5b50610854600480360381019061084f919061349c565b611e3e565b6040516108619190613afd565b60405180910390f35b34801561087657600080fd5b50610891600480360381019061088c9190613165565b611ef3565b005b34801561089f57600080fd5b506108a8611fca565b005b3480156108b657600080fd5b506108bf612063565b6040516108cc9190613afd565b60405180910390f35b3480156108e157600080fd5b506108fc60048036038101906108f79190613192565b61208b565b6040516109099190613ac7565b60405180910390f35b34801561091e57600080fd5b5061093960048036038101906109349190613165565b61211f565b005b34801561094757600080fd5b50610962600480360381019061095d919061349c565b612217565b005b61096c61229d565b73ffffffffffffffffffffffffffffffffffffffff1661098a611a24565b73ffffffffffffffffffffffffffffffffffffffff16146109e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d790613d5f565b60405180910390fd5b600081519050600d5481600e546109f79190613f30565b1115610a38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2f90613c9f565b60405180910390fd5b6000600e54905081600e6000828254610a519190613f30565b9250508190555060005b82811015610aa557610a92848281518110610a7957610a7861420b565b5b60200260200101518284610a8d9190613f30565b6122a5565b8080610a9d90614104565b915050610a5b565b50505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b7657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610bde57507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610c2d575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b606060038054610c43906140a1565b80601f0160208091040260200160405190810160405280929190818152602001828054610c6f906140a1565b8015610cbc5780601f10610c9157610100808354040283529160200191610cbc565b820191906000526020600020905b815481529060010190602001808311610c9f57829003601f168201915b5050505050905090565b6000610cd1826122c3565b610d10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0790613b9f565b60405180910390fd5b6008600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d568261182c565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610dc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbe90613bdf565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610e075750610e06813361208b565b5b610e46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3d90613cbf565b60405180910390fd5b610e50838361232f565b505050565b600260009054906101000a900460ff1615610ea5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9c90613cdf565b60405180910390fd5b6001600260006101000a81548160ff0219169083151502179055506000610eca61229d565b9050600a60009054906101000a900460ff16610f1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1290613b3f565b60405180910390fd5b600c54341015610f60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5790613d7f565b60405180910390fd5b600d54600e546002610f729190613f30565b1115610fb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610faa90613bbf565b60405180910390fd5b600f546002601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546110029190613f30565b1115611043576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103a90613dbf565b60405180910390fd5b6000600e5490506002601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461109a9190613f30565b925050819055506002600e60008282546110b49190613f30565b925050819055506110c582826122a5565b6110db826001836110d69190613f30565b6122a5565b50506000600260006101000a81548160ff021916908315150217905550565b600063150b7a0260e01b905095945050505050565b6000600e54905090565b6001600061112561229d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661117657600080fd5b61117f816123e8565b6001600e60008282546111929190613fb7565b9250508190555050565b600160006111a861229d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166111f957600080fd5b61120382826122a5565b6001600e60008282546112169190613f30565b925050819055505050565b61122b33826124f9565b61126a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126190613d9f565b60405180910390fd5b6112758383836125d7565b505050565b600a60009054906101000a900460ff1681565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6112eb61229d565b73ffffffffffffffffffffffffffffffffffffffff16611309611a24565b73ffffffffffffffffffffffffffffffffffffffff161461135f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135690613d5f565b60405180910390fd5b6000600a60006101000a81548160ff021916908315150217905550565b61138461229d565b73ffffffffffffffffffffffffffffffffffffffff166113a2611a24565b73ffffffffffffffffffffffffffffffffffffffff16146113f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ef90613d5f565b60405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61145a61229d565b73ffffffffffffffffffffffffffffffffffffffff16611478611a24565b73ffffffffffffffffffffffffffffffffffffffff16146114ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c590613d5f565b60405180910390fd5b600047905060003373ffffffffffffffffffffffffffffffffffffffff16826040516114f990613a4b565b60006040518083038185875af1925050503d8060008114611536576040519150601f19603f3d011682016040523d82523d6000602084013e61153b565b606091505b505090508061157f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157690613bff565b60405180910390fd5b5050565b61159e83838360405180602001604052806000815250611de3565b505050565b6115ac8161182c565b73ffffffffffffffffffffffffffffffffffffffff166115ca61229d565b73ffffffffffffffffffffffffffffffffffffffff16146115ea57600080fd5b6115f3816123e8565b50565b600f5481565b61160461229d565b73ffffffffffffffffffffffffffffffffffffffff16611622611a24565b73ffffffffffffffffffffffffffffffffffffffff1614611678576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166f90613d5f565b60405180910390fd5b600d5481600e546116899190613f30565b11156116ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c190613c9f565b60405180910390fd5b6000600e54905081600e60008282546116e39190613f30565b9250508190555060005b8281101561171d5761170a8482846117059190613f30565b6122a5565b808061171590614104565b9150506116ed565b50505050565b600e5481565b6001600061173561229d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661178657600080fd5b6117918383836125d7565b505050565b61179e61229d565b73ffffffffffffffffffffffffffffffffffffffff166117bc611a24565b73ffffffffffffffffffffffffffffffffffffffff1614611812576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180990613d5f565b60405180910390fd5b8060059080519060200190611828929190612e85565b5050565b6000806006600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156118d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118cc90613c5f565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561194f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194690613d1f565b60405180910390fd5b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61199e61229d565b73ffffffffffffffffffffffffffffffffffffffff166119bc611a24565b73ffffffffffffffffffffffffffffffffffffffff1614611a12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0990613d5f565b60405180910390fd5b611a1c6000612833565b565b600d5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611a5561229d565b73ffffffffffffffffffffffffffffffffffffffff16611a73611a24565b73ffffffffffffffffffffffffffffffffffffffff1614611ac9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac090613d5f565b60405180910390fd5b80600c8190555050565b606060048054611ae2906140a1565b80601f0160208091040260200160405190810160405280929190818152602001828054611b0e906140a1565b8015611b5b5780601f10611b3057610100808354040283529160200191611b5b565b820191906000526020600020905b815481529060010190602001808311611b3e57829003601f168201915b5050505050905090565b600c5481565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd190613c3f565b60405180910390fd5b80600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611ccb9190613ac7565b60405180910390a35050565b611cdf61229d565b73ffffffffffffffffffffffffffffffffffffffff16611cfd611a24565b73ffffffffffffffffffffffffffffffffffffffff1614611d53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4a90613d5f565b60405180910390fd5b80600d8190555050565b611d6561229d565b73ffffffffffffffffffffffffffffffffffffffff16611d83611a24565b73ffffffffffffffffffffffffffffffffffffffff1614611dd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd090613d5f565b60405180910390fd5b80600f8190555050565b611ded33836124f9565b611e2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2390613d9f565b60405180910390fd5b611e38848484846128f7565b50505050565b6060611e49826122c3565b611e88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7f90613ddf565b60405180910390fd5b6060600b54831015611ec6576005611e9f84612953565b604051602001611eb09291906139d8565b6040516020818303038152906040529050611eea565b6005604051602001611ed89190613a29565b60405160208183030381529060405290505b80915050919050565b611efb61229d565b73ffffffffffffffffffffffffffffffffffffffff16611f19611a24565b73ffffffffffffffffffffffffffffffffffffffff1614611f6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6690613d5f565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611fd261229d565b73ffffffffffffffffffffffffffffffffffffffff16611ff0611a24565b73ffffffffffffffffffffffffffffffffffffffff1614612046576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203d90613d5f565b60405180910390fd5b6001600a60006101000a81548160ff021916908315150217905550565b606060056040516020016120779190613a07565b604051602081830303815290604052905090565b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61212761229d565b73ffffffffffffffffffffffffffffffffffffffff16612145611a24565b73ffffffffffffffffffffffffffffffffffffffff161461219b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219290613d5f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561220b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220290613c1f565b60405180910390fd5b61221481612833565b50565b61221f61229d565b73ffffffffffffffffffffffffffffffffffffffff1661223d611a24565b73ffffffffffffffffffffffffffffffffffffffff1614612293576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228a90613d5f565b60405180910390fd5b80600b8190555050565b600033905090565b6122bf828260405180602001604052806000815250612ab4565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff166006600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816008600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166123a28361182c565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006123f38261182c565b905061240181600084612b0f565b61240c60008361232f565b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461245c9190613fb7565b925050819055506006600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000612504826122c3565b612543576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253a90613b1f565b60405180910390fd5b600061254e8361182c565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806125bd57508373ffffffffffffffffffffffffffffffffffffffff166125a584610cc6565b73ffffffffffffffffffffffffffffffffffffffff16145b806125ce57506125cd818561208b565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166125f78261182c565b73ffffffffffffffffffffffffffffffffffffffff161461264d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264490613d3f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b490613b5f565b60405180910390fd5b6126c8838383612b0f565b6126d360008261232f565b6001600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127239190613fb7565b925050819055506001600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461277a9190613f30565b92505081905550816006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6129028484846125d7565b61290e84848484612b14565b61294d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294490613c7f565b60405180910390fd5b50505050565b6060600082141561299b576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612aaf565b600082905060005b600082146129cd5780806129b690614104565b915050600a826129c69190613f86565b91506129a3565b60008167ffffffffffffffff8111156129e9576129e861423a565b5b6040519080825280601f01601f191660200182016040528015612a1b5781602001600182028036833780820191505090505b5090505b60008514612aa857600182612a349190613fb7565b9150600a85612a43919061414d565b6030612a4f9190613f30565b60f81b818381518110612a6557612a6461420b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612aa19190613f86565b9450612a1f565b8093505050505b919050565b612abe8383612ca4565b612acb6000848484612b14565b612b0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0190613c7f565b60405180910390fd5b505050565b505050565b6000612b358473ffffffffffffffffffffffffffffffffffffffff16612e72565b15612c97578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02338786866040518563ffffffff1660e01b8152600401612b799493929190613a7b565b602060405180830381600087803b158015612b9357600080fd5b505af1925050508015612bc457506040513d601f19601f82011682018060405250810190612bc19190613426565b60015b612c47573d8060008114612bf4576040519150601f19603f3d011682016040523d82523d6000602084013e612bf9565b606091505b50600081511415612c3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3690613c7f565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612c9c565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0b90613cff565b60405180910390fd5b612d1d816122c3565b15612d5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5490613b7f565b60405180910390fd5b612d6960008383612b0f565b6001600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612db99190613f30565b92505081905550816006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054612e91906140a1565b90600052602060002090601f016020900481019282612eb35760008555612efa565b82601f10612ecc57805160ff1916838001178555612efa565b82800160010185558215612efa579182015b82811115612ef9578251825591602001919060010190612ede565b5b509050612f079190612f0b565b5090565b5b80821115612f24576000816000905550600101612f0c565b5090565b6000612f3b612f3684613e3f565b613e1a565b90508083825260208201905082856020860282011115612f5e57612f5d614273565b5b60005b85811015612f8e5781612f74888261301c565b845260208401935060208301925050600181019050612f61565b5050509392505050565b6000612fab612fa684613e6b565b613e1a565b905082815260208101848484011115612fc757612fc6614278565b5b612fd284828561405f565b509392505050565b6000612fed612fe884613e9c565b613e1a565b90508281526020810184848401111561300957613008614278565b5b61301484828561405f565b509392505050565b60008135905061302b816146eb565b92915050565b600082601f8301126130465761304561426e565b5b8135613056848260208601612f28565b91505092915050565b60008135905061306e81614702565b92915050565b60008135905061308381614719565b92915050565b60008151905061309881614719565b92915050565b60008083601f8401126130b4576130b361426e565b5b8235905067ffffffffffffffff8111156130d1576130d0614269565b5b6020830191508360018202830111156130ed576130ec614273565b5b9250929050565b600082601f8301126131095761310861426e565b5b8135613119848260208601612f98565b91505092915050565b600082601f8301126131375761313661426e565b5b8135613147848260208601612fda565b91505092915050565b60008135905061315f81614730565b92915050565b60006020828403121561317b5761317a614282565b5b60006131898482850161301c565b91505092915050565b600080604083850312156131a9576131a8614282565b5b60006131b78582860161301c565b92505060206131c88582860161301c565b9150509250929050565b6000806000606084860312156131eb576131ea614282565b5b60006131f98682870161301c565b935050602061320a8682870161301c565b925050604061321b86828701613150565b9150509250925092565b60008060008060006080868803121561324157613240614282565b5b600061324f8882890161301c565b95505060206132608882890161301c565b945050604061327188828901613150565b935050606086013567ffffffffffffffff8111156132925761329161427d565b5b61329e8882890161309e565b92509250509295509295909350565b600080600080608085870312156132c7576132c6614282565b5b60006132d58782880161301c565b94505060206132e68782880161301c565b93505060406132f787828801613150565b925050606085013567ffffffffffffffff8111156133185761331761427d565b5b613324878288016130f4565b91505092959194509250565b6000806040838503121561334757613346614282565b5b60006133558582860161301c565b92505060206133668582860161305f565b9150509250929050565b6000806040838503121561338757613386614282565b5b60006133958582860161301c565b92505060206133a685828601613150565b9150509250929050565b6000602082840312156133c6576133c5614282565b5b600082013567ffffffffffffffff8111156133e4576133e361427d565b5b6133f084828501613031565b91505092915050565b60006020828403121561340f5761340e614282565b5b600061341d84828501613074565b91505092915050565b60006020828403121561343c5761343b614282565b5b600061344a84828501613089565b91505092915050565b60006020828403121561346957613468614282565b5b600082013567ffffffffffffffff8111156134875761348661427d565b5b61349384828501613122565b91505092915050565b6000602082840312156134b2576134b1614282565b5b60006134c084828501613150565b91505092915050565b6134d281613feb565b82525050565b6134e181613ffd565b82525050565b6134f081614009565b82525050565b600061350182613ee2565b61350b8185613ef8565b935061351b81856020860161406e565b61352481614287565b840191505092915050565b600061353a82613eed565b6135448185613f14565b935061355481856020860161406e565b61355d81614287565b840191505092915050565b600061357382613eed565b61357d8185613f25565b935061358d81856020860161406e565b80840191505092915050565b600081546135a6816140a1565b6135b08186613f25565b945060018216600081146135cb57600181146135dc5761360f565b60ff1983168652818601935061360f565b6135e585613ecd565b60005b83811015613607578154818901526001820191506020810190506135e8565b838801955050505b50505092915050565b6000613625602083613f14565b915061363082614298565b602082019050919050565b6000613648600d83613f25565b9150613653826142c1565b600d82019050919050565b600061366b600883613f14565b9150613676826142ea565b602082019050919050565b600061368e601b83613f14565b915061369982614313565b602082019050919050565b60006136b1601c83613f14565b91506136bc8261433c565b602082019050919050565b60006136d4602083613f14565b91506136df82614365565b602082019050919050565b60006136f7601b83613f14565b91506137028261438e565b602082019050919050565b600061371a601e83613f14565b9150613725826143b7565b602082019050919050565b600061373d601883613f14565b9150613748826143e0565b602082019050919050565b6000613760602083613f14565b915061376b82614409565b602082019050919050565b6000613783601983613f14565b915061378e82614432565b602082019050919050565b60006137a6600c83613f25565b91506137b18261445b565b600c82019050919050565b60006137c9601e83613f14565b91506137d482614484565b602082019050919050565b60006137ec601a83613f14565b91506137f7826144ad565b602082019050919050565b600061380f601183613f14565b915061381a826144d6565b602082019050919050565b6000613832601f83613f14565b915061383d826144ff565b602082019050919050565b6000613855601f83613f14565b915061386082614528565b602082019050919050565b6000613878602083613f14565b915061388382614551565b602082019050919050565b600061389b602083613f14565b91506138a68261457a565b602082019050919050565b60006138be600583613f25565b91506138c9826145a3565b600582019050919050565b60006138e1601c83613f14565b91506138ec826145cc565b602082019050919050565b6000613904602083613f14565b915061390f826145f5565b602082019050919050565b6000613927601883613f14565b91506139328261461e565b602082019050919050565b600061394a601c83613f14565b915061395582614647565b602082019050919050565b600061396d602183613f14565b915061397882614670565b604082019050919050565b6000613990600083613f09565b915061399b826146bf565b600082019050919050565b60006139b3601d83613f14565b91506139be826146c2565b602082019050919050565b6139d281614055565b82525050565b60006139e48285613599565b91506139f08284613568565b91506139fb826138b1565b91508190509392505050565b6000613a138284613599565b9150613a1e8261363b565b915081905092915050565b6000613a358284613599565b9150613a4082613799565b915081905092915050565b6000613a5682613983565b9150819050919050565b6000602082019050613a7560008301846134c9565b92915050565b6000608082019050613a9060008301876134c9565b613a9d60208301866134c9565b613aaa60408301856139c9565b8181036060830152613abc81846134f6565b905095945050505050565b6000602082019050613adc60008301846134d8565b92915050565b6000602082019050613af760008301846134e7565b92915050565b60006020820190508181036000830152613b17818461352f565b905092915050565b60006020820190508181036000830152613b3881613618565b9050919050565b60006020820190508181036000830152613b588161365e565b9050919050565b60006020820190508181036000830152613b7881613681565b9050919050565b60006020820190508181036000830152613b98816136a4565b9050919050565b60006020820190508181036000830152613bb8816136c7565b9050919050565b60006020820190508181036000830152613bd8816136ea565b9050919050565b60006020820190508181036000830152613bf88161370d565b9050919050565b60006020820190508181036000830152613c1881613730565b9050919050565b60006020820190508181036000830152613c3881613753565b9050919050565b60006020820190508181036000830152613c5881613776565b9050919050565b60006020820190508181036000830152613c78816137bc565b9050919050565b60006020820190508181036000830152613c98816137df565b9050919050565b60006020820190508181036000830152613cb881613802565b9050919050565b60006020820190508181036000830152613cd881613825565b9050919050565b60006020820190508181036000830152613cf881613848565b9050919050565b60006020820190508181036000830152613d188161386b565b9050919050565b60006020820190508181036000830152613d388161388e565b9050919050565b60006020820190508181036000830152613d58816138d4565b9050919050565b60006020820190508181036000830152613d78816138f7565b9050919050565b60006020820190508181036000830152613d988161391a565b9050919050565b60006020820190508181036000830152613db88161393d565b9050919050565b60006020820190508181036000830152613dd881613960565b9050919050565b60006020820190508181036000830152613df8816139a6565b9050919050565b6000602082019050613e1460008301846139c9565b92915050565b6000613e24613e35565b9050613e3082826140d3565b919050565b6000604051905090565b600067ffffffffffffffff821115613e5a57613e5961423a565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613e8657613e8561423a565b5b613e8f82614287565b9050602081019050919050565b600067ffffffffffffffff821115613eb757613eb661423a565b5b613ec082614287565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613f3b82614055565b9150613f4683614055565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613f7b57613f7a61417e565b5b828201905092915050565b6000613f9182614055565b9150613f9c83614055565b925082613fac57613fab6141ad565b5b828204905092915050565b6000613fc282614055565b9150613fcd83614055565b925082821015613fe057613fdf61417e565b5b828203905092915050565b6000613ff682614035565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561408c578082015181840152602081019050614071565b8381111561409b576000848401525b50505050565b600060028204905060018216806140b957607f821691505b602082108114156140cd576140cc6141dc565b5b50919050565b6140dc82614287565b810181811067ffffffffffffffff821117156140fb576140fa61423a565b5b80604052505050565b600061410f82614055565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156141425761414161417e565b5b600182019050919050565b600061415882614055565b915061416383614055565b925082614173576141726141ad565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a206f70207175657279206e6f6e6578697374656e7420746b6e600082015250565b7f636f6e74726163742e6a736f6e00000000000000000000000000000000000000600082015250565b7f4e4f74204f50656e000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207478667220746f2030783020616464726573730000000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a20617070726f766564206e6f6e6578697374656e7420746b6e600082015250565b7f4d696e743a204e6f7420656e6f7567682061766169616c61626c650000000000600082015250565b7f4552433732313a20617070726f76616c2063757272656e74206f776e65720000600082015250565b7f5472616e73616374696f6e20556e7375636365737366756c0000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e65722069732030782061646472657373600082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f6d7973746572792e6a736f6e0000000000000000000000000000000000000000600082015250565b7f4552433732313a206f776e207175657279206e6f6e657869737420746b6e0000600082015250565b7f7478667220746f206e6f6e204552433732315265636965766572000000000000600082015250565b7f43616e6e6f742066696c6c206f72646572000000000000000000000000000000600082015250565b7f4552433732313a2063616c6c657220216f776e65722f21617070726f76656400600082015250565b7f617474656d7074207265656e746572206c6f636b65642066756e6374696f6e00600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a2062616c2071727920666f72207a65726f2061646472657373600082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207478667220746f6b656e206e6f74206f776e656400000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4d696e743a20496e73756666696369656e742046756e64730000000000000000600082015250565b7f4552433732313a207478667220216f776e65722f617070726f76656400000000600082015250565b7f4d696e743a204d617820746b6e207065722077616c6c6574206578636565646560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732314d657461646174613a205552492030783020746f6b656e000000600082015250565b6146f481613feb565b81146146ff57600080fd5b50565b61470b81613ffd565b811461471657600080fd5b50565b61472281614009565b811461472d57600080fd5b50565b61473981614055565b811461474457600080fd5b5056fea26469706673582212200dde18c9fd4d4c8fdbfa3d112c4410f961071d8b37745a8cf239102a43fa946e64736f6c63430008070033

Deployed Bytecode Sourcemap

17169:17913:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19770:374;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18687:361;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33982:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23626:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23188:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20156:627;;;:::i;:::-;;32926:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21825:126;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22319:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22175:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24496:314;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17916:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16564:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21523:80;;;;;;;;;;;;;:::i;:::-;;16343:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19130:223;;;;;;;;;;;;;:::i;:::-;;24881:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20854:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18096:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19365:393;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18062:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22443:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21327:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22898:228;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22638:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14765:94;;;;;;;;;;;;;:::i;:::-;;18029:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14114:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21615:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34123;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18002:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23905:289;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21715:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21203:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25137:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34298:463;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16453:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21434:77;;;;;;;;;;;;;:::i;:::-;;34773:139;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24265:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15014:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21963:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19770:374;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19839:11:::1;19853:3;:10;19839:24;;19906:11;;19898:3;19883:12;;:18;;;;:::i;:::-;19882:35;;19874:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;19960:21;19984:12;;19960:36;;20017:3;20001:12;;:19;;;;;;;:::i;:::-;;;;;;;;20045:9;20041:96;20064:3;20060:1;:7;20041:96;;;20089:36;20099:3;20103:1;20099:6;;;;;;;;:::i;:::-;;;;;;;;20123:1;20107:13;:17;;;;:::i;:::-;20089:9;:36::i;:::-;20069:3;;;;;:::i;:::-;;;;20041:96;;;;19828:316;;19770:374:::0;:::o;18687:361::-;18772:4;18812:25;18797:40;;;:11;:40;;;;:109;;;;18873:33;18858:48;;;:11;:48;;;;18797:109;:170;;;;18942:25;18927:40;;;:11;:40;;;;18797:170;:243;;;;19003:37;;;18988:52;;;:11;:52;;;;18797:243;18789:251;;18687:361;;;:::o;33982:84::-;34021:13;34053:5;34046:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33982:84;:::o;23626:207::-;23702:7;23730:16;23738:7;23730;:16::i;:::-;23722:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;23801:15;:24;23817:7;23801:24;;;;;;;;;;;;;;;;;;;;;23794:31;;23626:207;;;:::o;23188:372::-;23269:13;23285:16;23293:7;23285;:16::i;:::-;23269:32;;23326:5;23320:11;;:2;:11;;;;23312:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;23415:5;23401:19;;:10;:19;;;:58;;;;23424:35;23441:5;23448:10;23424:16;:35::i;:::-;23401:58;23379:139;;;;;;;;;;;;:::i;:::-;;;;;;;;;23531:21;23540:2;23544:7;23531:8;:21::i;:::-;23258:302;23188:372;;:::o;20156:627::-;16048:11;;;;;;;;;;;16047:12;16039:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;16120:4;16106:11;;:18;;;;;;;;;;;;;;;;;;20212:11:::1;20226:12;:10;:12::i;:::-;20212:26;;20257:10;;;;;;;;;;;20249:31;;;;;;;;;;;;:::i;:::-;;;;;;;;;20312:5;;20299:9;:18;;20291:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;20387:11;;20370:12;;20366:1;:16;;;;:::i;:::-;20365:33;;20357:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;20476:12;;20470:1;20450:12;:17;20463:3;20450:17;;;;;;;;;;;;;;;;:21;;;;:::i;:::-;20449:39;;20441:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;20547:21;20571:12;;20547:36;;20660:1;20639:12;:17;20652:3;20639:17;;;;;;;;;;;;;;;;:22;;;;;;;:::i;:::-;;;;;;;;20688:1;20672:12;;:17;;;;;;;:::i;:::-;;;;;;;;20702:29;20712:3;20717:13;20702:9;:29::i;:::-;20742:33;20752:3;20773:1;20757:13;:17;;;;:::i;:::-;20742:9;:33::i;:::-;20201:582;;16161:5:::0;16147:11;;:19;;;;;;;;;;;;;;;;;;20156:627::o;32926:215::-;33043:6;33103:30;;;33096:37;;32926:215;;;;;;;:::o;21825:126::-;21871:7;21898:12;;21891:19;;21825:126;:::o;22319:112::-;16724:8;:22;16733:12;:10;:12::i;:::-;16724:22;;;;;;;;;;;;;;;;;;;;;;;;;16716:31;;;;;;22384:14:::1;22390:7;22384:5;:14::i;:::-;22422:1;22406:12;;:17;;;;;;;:::i;:::-;;;;;;;;22319:112:::0;:::o;22175:132::-;16724:8;:22;16733:12;:10;:12::i;:::-;16724:22;;;;;;;;;;;;;;;;;;;;;;;;;16716:31;;;;;;22252:22:::1;22262:2;22266:7;22252:9;:22::i;:::-;22298:1;22282:12;;:17;;;;;;;:::i;:::-;;;;;;;;22175:132:::0;;:::o;24496:314::-;24691:39;24710:10;24722:7;24691:18;:39::i;:::-;24683:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;24774:28;24784:4;24790:2;24794:7;24774:9;:28::i;:::-;24496:314;;;:::o;17916:22::-;;;;;;;;;;;;;:::o;16564:112::-;16624:4;16648:8;:20;16657:10;16648:20;;;;;;;;;;;;;;;;;;;;;;;;;16641:27;;16564:112;;;:::o;21523:80::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21590:5:::1;21577:10;;:18;;;;;;;;;;;;;;;;;;21523:80::o:0;16343:102::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16433:4:::1;16412:8:::0;:18:::1;16421:8;16412:18;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;16343:102:::0;:::o;19130:223::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19180:18:::1;19201:21;19180:42;;19234:12;19252:10;:15;;19275:10;19252:38;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19233:57;;;19309:7;19301:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;19169:184;;19130:223::o:0;24881:185::-;25019:39;25036:4;25042:2;25046:7;25019:39;;;;;;;;;;;;:16;:39::i;:::-;24881:185;;;:::o;20854:125::-;20929:16;20937:7;20929;:16::i;:::-;20913:32;;:12;:10;:12::i;:::-;:32;;;20905:41;;;;;;20957:14;20963:7;20957:5;:14::i;:::-;20854:125;:::o;18096:27::-;;;;:::o;19365:393::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19472:11:::1;;19464:3;19449:12;;:18;;;;:::i;:::-;19448:35;;19440:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;19526:21;19550:12;;19526:36;;19634:3;19618:12;;:19;;;;;;;:::i;:::-;;;;;;;;19662:9;19658:93;19681:3;19677:1;:7;19658:93;;;19706:33;19716:3;19737:1;19721:13;:17;;;;:::i;:::-;19706:9;:33::i;:::-;19686:3;;;;;:::i;:::-;;;;19658:93;;;;19429:329;19365:393:::0;;:::o;18062:27::-;;;;:::o;22443:131::-;16724:8;:22;16733:12;:10;:12::i;:::-;16724:22;;;;;;;;;;;;;;;;;;;;;;;;;16716:31;;;;;;22538:28:::1;22548:4;22554:2;22558:7;22538:9;:28::i;:::-;22443:131:::0;;;:::o;21327:95::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21408:6:::1;21397:8;:17;;;;;;;;;;;;:::i;:::-;;21327:95:::0;:::o;22898:228::-;22970:7;22990:13;23006:7;:16;23014:7;23006:16;;;;;;;;;;;;;;;;;;;;;22990:32;;23058:1;23041:19;;:5;:19;;;;23033:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;23113:5;23106:12;;;22898:228;;;:::o;22638:198::-;22710:7;22755:1;22738:19;;:5;:19;;;;22730:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;22812:9;:16;22822:5;22812:16;;;;;;;;;;;;;;;;22805:23;;22638:198;;;:::o;14765:94::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14830:21:::1;14848:1;14830:9;:21::i;:::-;14765:94::o:0;18029:26::-;;;;:::o;14114:87::-;14160:7;14187:6;;;;;;;;;;;14180:13;;14114:87;:::o;21615:88::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21687:8:::1;21679:5;:16;;;;21615:88:::0;:::o;34123:::-;34164:13;34196:7;34189:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34123:88;:::o;18002:20::-;;;;:::o;23905:289::-;24020:10;24008:22;;:8;:22;;;;24000:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;24116:8;24073:18;:30;24092:10;24073:30;;;;;;;;;;;;;;;:40;24104:8;24073:40;;;;;;;;;;;;;;;;:51;;;;;;;;;;;;;;;;;;24167:8;24140:46;;24155:10;24140:46;;;24177:8;24140:46;;;;;;:::i;:::-;;;;;;;;23905:289;;:::o;21715:102::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21800:9:::1;21786:11;:23;;;;21715:102:::0;:::o;21203:112::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21298:9:::1;21283:12;:24;;;;21203:112:::0;:::o;25137:305::-;25312:39;25331:10;25343:7;25312:18;:39::i;:::-;25304:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;25395:39;25409:4;25415:2;25419:7;25428:5;25395:13;:39::i;:::-;25137:305;;;;:::o;34298:463::-;34356:13;34389:16;34397:7;34389;:16::i;:::-;34381:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;34450:22;34507:13;;34497:7;:23;34493:225;;;34572:8;34582:17;34591:7;34582:8;:17::i;:::-;34555:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;34537:73;;34493:225;;;34678:8;34661:42;;;;;;;;:::i;:::-;;;;;;;;;;;;;34643:61;;34493:225;34745:8;34738:15;;;34298:463;;;:::o;16453:103::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16543:5:::1;16522:8;:18;16531:8;16522:18;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;16453:103:::0;:::o;21434:77::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21499:4:::1;21486:10;;:17;;;;;;;;;;;;;;;;;;21434:77::o:0;34773:139::-;34817:13;34878:8;34861:42;;;;;;;;:::i;:::-;;;;;;;;;;;;;34847:57;;34773:139;:::o;24265:164::-;24362:4;24386:18;:25;24405:5;24386:25;;;;;;;;;;;;;;;:35;24412:8;24386:35;;;;;;;;;;;;;;;;;;;;;;;;;24379:42;;24265:164;;;;:::o;15014:186::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15123:1:::1;15103:22;;:8;:22;;;;15095:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;15173:19;15183:8;15173:9;:19::i;:::-;15014:186:::0;:::o;21963:108::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22052:11:::1;22036:13;:27;;;;21963:108:::0;:::o;13497:98::-;13550:7;13577:10;13570:17;;13497:98;:::o;27893:110::-;27969:26;27979:2;27983:7;27969:26;;;;;;;;;;;;:9;:26::i;:::-;27893:110;;:::o;26928:127::-;26993:4;27045:1;27017:30;;:7;:16;27025:7;27017:16;;;;;;;;;;;;;;;;;;;;;:30;;;;27010:37;;26928:127;;;:::o;30829:167::-;30931:2;30904:15;:24;30920:7;30904:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;30980:7;30976:2;30949:39;;30958:16;30966:7;30958;:16::i;:::-;30949:39;;;;;;;;;;;;30829:167;;:::o;29474:353::-;29534:13;29550:16;29558:7;29550;:16::i;:::-;29534:32;;29579:48;29600:5;29615:1;29619:7;29579:20;:48::i;:::-;29668:29;29685:1;29689:7;29668:8;:29::i;:::-;29730:1;29710:9;:16;29720:5;29710:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;29749:7;:16;29757:7;29749:16;;;;;;;;;;;;29742:23;;;;;;;;;;;29811:7;29807:1;29783:36;;29792:5;29783:36;;;;;;;;;;;;29523:304;29474:353;:::o;27222:329::-;27315:4;27340:16;27348:7;27340;:16::i;:::-;27332:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;27404:13;27420:16;27428:7;27420;:16::i;:::-;27404:32;;27466:5;27455:16;;:7;:16;;;:51;;;;27499:7;27475:31;;:20;27487:7;27475:11;:20::i;:::-;:31;;;27455:51;:87;;;;27510:32;27527:5;27534:7;27510:16;:32::i;:::-;27455:87;27447:96;;;27222:329;;;;:::o;30164:547::-;30316:4;30296:24;;:16;30304:7;30296;:16::i;:::-;:24;;;30288:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;30386:1;30372:16;;:2;:16;;;;30364:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;30431:39;30452:4;30458:2;30462:7;30431:20;:39::i;:::-;30535:29;30552:1;30556:7;30535:8;:29::i;:::-;30596:1;30577:9;:15;30587:4;30577:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;30625:1;30608:9;:13;30618:2;30608:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30656:2;30637:7;:16;30645:7;30637:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30695:7;30691:2;30676:27;;30685:4;30676:27;;;;;;;;;;;;30164:547;;;:::o;15208:173::-;15264:16;15283:6;;;;;;;;;;;15264:25;;15309:8;15300:6;;:17;;;;;;;;;;;;;;;;;;15364:8;15333:40;;15354:8;15333:40;;;;;;;;;;;;15253:128;15208:173;:::o;26324:291::-;26481:28;26491:4;26497:2;26501:7;26481:9;:28::i;:::-;26528:48;26551:4;26557:2;26561:7;26570:5;26528:22;:48::i;:::-;26520:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;26324:291;;;;:::o;15424:532::-;15480:13;15519:1;15510:5;:10;15506:53;;;15537:10;;;;;;;;;;;;;;;;;;;;;15506:53;15569:12;15584:5;15569:20;;15600:14;15625:78;15640:1;15632:4;:9;15625:78;;15658:8;;;;;:::i;:::-;;;;15689:2;15681:10;;;;;:::i;:::-;;;15625:78;;;15713:19;15745:6;15735:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15713:39;;15763:154;15779:1;15770:5;:10;15763:154;;15807:1;15797:11;;;;;:::i;:::-;;;15874:2;15866:5;:10;;;;:::i;:::-;15853:2;:24;;;;:::i;:::-;15840:39;;15823:6;15830;15823:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;15903:2;15894:11;;;;;:::i;:::-;;;15763:154;;;15941:6;15927:21;;;;;15424:532;;;;:::o;28230:297::-;28360:18;28366:2;28370:7;28360:5;:18::i;:::-;28411:54;28442:1;28446:2;28450:7;28459:5;28411:22;:54::i;:::-;28389:130;;;;;;;;;;;;:::i;:::-;;;;;;;;;28230:297;;;:::o;33713:126::-;;;;:::o;31561:777::-;31716:4;31737:15;:2;:13;;;:15::i;:::-;31733:598;;;31789:2;31773:36;;;31810:10;31822:4;31828:7;31837:5;31773:70;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;31769:507;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32034:1;32017:6;:13;:18;32013:248;;;32060:36;;;;;;;;;;:::i;:::-;;;;;;;;32013:248;32211:6;32205:13;32196:6;32192:2;32188:15;32181:38;31769:507;31904:45;;;31894:55;;;:6;:55;;;;31887:62;;;;;31733:598;32315:4;32308:11;;31561:777;;;;;;;:::o;28863:382::-;28957:1;28943:16;;:2;:16;;;;28935:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;29016:16;29024:7;29016;:16::i;:::-;29015:17;29007:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;29078:45;29107:1;29111:2;29115:7;29078:20;:45::i;:::-;29153:1;29136:9;:13;29146:2;29136:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29184:2;29165:7;:16;29173:7;29165:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29229:7;29225:2;29204:33;;29221:1;29204:33;;;;;;;;;;;;28863:382;;:::o;6418:387::-;6478:4;6686:12;6753:7;6741:20;6733:28;;6796:1;6789:4;:8;6782:15;;;6418:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:412::-;1246:5;1271:66;1287:49;1329:6;1287:49;:::i;:::-;1271:66;:::i;:::-;1262:75;;1360:6;1353:5;1346:21;1398:4;1391:5;1387:16;1436:3;1427:6;1422:3;1418:16;1415:25;1412:112;;;1443:79;;:::i;:::-;1412:112;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;1168:412;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1586:139;;;;:::o;1748:370::-;1819:5;1868:3;1861:4;1853:6;1849:17;1845:27;1835:122;;1876:79;;:::i;:::-;1835:122;1993:6;1980:20;2018:94;2108:3;2100:6;2093:4;2085:6;2081:17;2018:94;:::i;:::-;2009:103;;1825:293;1748:370;;;;:::o;2124:133::-;2167:5;2205:6;2192:20;2183:29;;2221:30;2245:5;2221:30;:::i;:::-;2124:133;;;;:::o;2263:137::-;2308:5;2346:6;2333:20;2324:29;;2362:32;2388:5;2362:32;:::i;:::-;2263:137;;;;:::o;2406:141::-;2462:5;2493:6;2487:13;2478:22;;2509:32;2535:5;2509:32;:::i;:::-;2406:141;;;;:::o;2566:552::-;2623:8;2633:6;2683:3;2676:4;2668:6;2664:17;2660:27;2650:122;;2691:79;;:::i;:::-;2650:122;2804:6;2791:20;2781:30;;2834:18;2826:6;2823:30;2820:117;;;2856:79;;:::i;:::-;2820:117;2970:4;2962:6;2958:17;2946:29;;3024:3;3016:4;3008:6;3004:17;2994:8;2990:32;2987:41;2984:128;;;3031:79;;:::i;:::-;2984:128;2566:552;;;;;:::o;3137:338::-;3192:5;3241:3;3234:4;3226:6;3222:17;3218:27;3208:122;;3249:79;;:::i;:::-;3208:122;3366:6;3353:20;3391:78;3465:3;3457:6;3450:4;3442:6;3438:17;3391:78;:::i;:::-;3382:87;;3198:277;3137:338;;;;:::o;3495:340::-;3551:5;3600:3;3593:4;3585:6;3581:17;3577:27;3567:122;;3608:79;;:::i;:::-;3567:122;3725:6;3712:20;3750:79;3825:3;3817:6;3810:4;3802:6;3798:17;3750:79;:::i;:::-;3741:88;;3557:278;3495:340;;;;:::o;3841:139::-;3887:5;3925:6;3912:20;3903:29;;3941:33;3968:5;3941:33;:::i;:::-;3841:139;;;;:::o;3986:329::-;4045:6;4094:2;4082:9;4073:7;4069:23;4065:32;4062:119;;;4100:79;;:::i;:::-;4062:119;4220:1;4245:53;4290:7;4281:6;4270:9;4266:22;4245:53;:::i;:::-;4235:63;;4191:117;3986:329;;;;:::o;4321:474::-;4389:6;4397;4446:2;4434:9;4425:7;4421:23;4417:32;4414:119;;;4452:79;;:::i;:::-;4414:119;4572:1;4597:53;4642:7;4633:6;4622:9;4618:22;4597:53;:::i;:::-;4587:63;;4543:117;4699:2;4725:53;4770:7;4761:6;4750:9;4746:22;4725:53;:::i;:::-;4715:63;;4670:118;4321:474;;;;;:::o;4801:619::-;4878:6;4886;4894;4943:2;4931:9;4922:7;4918:23;4914:32;4911:119;;;4949:79;;:::i;:::-;4911:119;5069:1;5094:53;5139:7;5130:6;5119:9;5115:22;5094:53;:::i;:::-;5084:63;;5040:117;5196:2;5222:53;5267:7;5258:6;5247:9;5243:22;5222:53;:::i;:::-;5212:63;;5167:118;5324:2;5350:53;5395:7;5386:6;5375:9;5371:22;5350:53;:::i;:::-;5340:63;;5295:118;4801:619;;;;;:::o;5426:963::-;5523:6;5531;5539;5547;5555;5604:3;5592:9;5583:7;5579:23;5575:33;5572:120;;;5611:79;;:::i;:::-;5572:120;5731:1;5756:53;5801:7;5792:6;5781:9;5777:22;5756:53;:::i;:::-;5746:63;;5702:117;5858:2;5884:53;5929:7;5920:6;5909:9;5905:22;5884:53;:::i;:::-;5874:63;;5829:118;5986:2;6012:53;6057:7;6048:6;6037:9;6033:22;6012:53;:::i;:::-;6002:63;;5957:118;6142:2;6131:9;6127:18;6114:32;6173:18;6165:6;6162:30;6159:117;;;6195:79;;:::i;:::-;6159:117;6308:64;6364:7;6355:6;6344:9;6340:22;6308:64;:::i;:::-;6290:82;;;;6085:297;5426:963;;;;;;;;:::o;6395:943::-;6490:6;6498;6506;6514;6563:3;6551:9;6542:7;6538:23;6534:33;6531:120;;;6570:79;;:::i;:::-;6531:120;6690:1;6715:53;6760:7;6751:6;6740:9;6736:22;6715:53;:::i;:::-;6705:63;;6661:117;6817:2;6843:53;6888:7;6879:6;6868:9;6864:22;6843:53;:::i;:::-;6833:63;;6788:118;6945:2;6971:53;7016:7;7007:6;6996:9;6992:22;6971:53;:::i;:::-;6961:63;;6916:118;7101:2;7090:9;7086:18;7073:32;7132:18;7124:6;7121:30;7118:117;;;7154:79;;:::i;:::-;7118:117;7259:62;7313:7;7304:6;7293:9;7289:22;7259:62;:::i;:::-;7249:72;;7044:287;6395:943;;;;;;;:::o;7344:468::-;7409:6;7417;7466:2;7454:9;7445:7;7441:23;7437:32;7434:119;;;7472:79;;:::i;:::-;7434:119;7592:1;7617:53;7662:7;7653:6;7642:9;7638:22;7617:53;:::i;:::-;7607:63;;7563:117;7719:2;7745:50;7787:7;7778:6;7767:9;7763:22;7745:50;:::i;:::-;7735:60;;7690:115;7344:468;;;;;:::o;7818:474::-;7886:6;7894;7943:2;7931:9;7922:7;7918:23;7914:32;7911:119;;;7949:79;;:::i;:::-;7911:119;8069:1;8094:53;8139:7;8130:6;8119:9;8115:22;8094:53;:::i;:::-;8084:63;;8040:117;8196:2;8222:53;8267:7;8258:6;8247:9;8243:22;8222:53;:::i;:::-;8212:63;;8167:118;7818:474;;;;;:::o;8298:539::-;8382:6;8431:2;8419:9;8410:7;8406:23;8402:32;8399:119;;;8437:79;;:::i;:::-;8399:119;8585:1;8574:9;8570:17;8557:31;8615:18;8607:6;8604:30;8601:117;;;8637:79;;:::i;:::-;8601:117;8742:78;8812:7;8803:6;8792:9;8788:22;8742:78;:::i;:::-;8732:88;;8528:302;8298:539;;;;:::o;8843:327::-;8901:6;8950:2;8938:9;8929:7;8925:23;8921:32;8918:119;;;8956:79;;:::i;:::-;8918:119;9076:1;9101:52;9145:7;9136:6;9125:9;9121:22;9101:52;:::i;:::-;9091:62;;9047:116;8843:327;;;;:::o;9176:349::-;9245:6;9294:2;9282:9;9273:7;9269:23;9265:32;9262:119;;;9300:79;;:::i;:::-;9262:119;9420:1;9445:63;9500:7;9491:6;9480:9;9476:22;9445:63;:::i;:::-;9435:73;;9391:127;9176:349;;;;:::o;9531:509::-;9600:6;9649:2;9637:9;9628:7;9624:23;9620:32;9617:119;;;9655:79;;:::i;:::-;9617:119;9803:1;9792:9;9788:17;9775:31;9833:18;9825:6;9822:30;9819:117;;;9855:79;;:::i;:::-;9819:117;9960:63;10015:7;10006:6;9995:9;9991:22;9960:63;:::i;:::-;9950:73;;9746:287;9531:509;;;;:::o;10046:329::-;10105:6;10154:2;10142:9;10133:7;10129:23;10125:32;10122:119;;;10160:79;;:::i;:::-;10122:119;10280:1;10305:53;10350:7;10341:6;10330:9;10326:22;10305:53;:::i;:::-;10295:63;;10251:117;10046:329;;;;:::o;10381:118::-;10468:24;10486:5;10468:24;:::i;:::-;10463:3;10456:37;10381:118;;:::o;10505:109::-;10586:21;10601:5;10586:21;:::i;:::-;10581:3;10574:34;10505:109;;:::o;10620:115::-;10705:23;10722:5;10705:23;:::i;:::-;10700:3;10693:36;10620:115;;:::o;10741:360::-;10827:3;10855:38;10887:5;10855:38;:::i;:::-;10909:70;10972:6;10967:3;10909:70;:::i;:::-;10902:77;;10988:52;11033:6;11028:3;11021:4;11014:5;11010:16;10988:52;:::i;:::-;11065:29;11087:6;11065:29;:::i;:::-;11060:3;11056:39;11049:46;;10831:270;10741:360;;;;:::o;11107:364::-;11195:3;11223:39;11256:5;11223:39;:::i;:::-;11278:71;11342:6;11337:3;11278:71;:::i;:::-;11271:78;;11358:52;11403:6;11398:3;11391:4;11384:5;11380:16;11358:52;:::i;:::-;11435:29;11457:6;11435:29;:::i;:::-;11430:3;11426:39;11419:46;;11199:272;11107:364;;;;:::o;11477:377::-;11583:3;11611:39;11644:5;11611:39;:::i;:::-;11666:89;11748:6;11743:3;11666:89;:::i;:::-;11659:96;;11764:52;11809:6;11804:3;11797:4;11790:5;11786:16;11764:52;:::i;:::-;11841:6;11836:3;11832:16;11825:23;;11587:267;11477:377;;;;:::o;11884:845::-;11987:3;12024:5;12018:12;12053:36;12079:9;12053:36;:::i;:::-;12105:89;12187:6;12182:3;12105:89;:::i;:::-;12098:96;;12225:1;12214:9;12210:17;12241:1;12236:137;;;;12387:1;12382:341;;;;12203:520;;12236:137;12320:4;12316:9;12305;12301:25;12296:3;12289:38;12356:6;12351:3;12347:16;12340:23;;12236:137;;12382:341;12449:38;12481:5;12449:38;:::i;:::-;12509:1;12523:154;12537:6;12534:1;12531:13;12523:154;;;12611:7;12605:14;12601:1;12596:3;12592:11;12585:35;12661:1;12652:7;12648:15;12637:26;;12559:4;12556:1;12552:12;12547:17;;12523:154;;;12706:6;12701:3;12697:16;12690:23;;12389:334;;12203:520;;11991:738;;11884:845;;;;:::o;12735:366::-;12877:3;12898:67;12962:2;12957:3;12898:67;:::i;:::-;12891:74;;12974:93;13063:3;12974:93;:::i;:::-;13092:2;13087:3;13083:12;13076:19;;12735:366;;;:::o;13107:402::-;13267:3;13288:85;13370:2;13365:3;13288:85;:::i;:::-;13281:92;;13382:93;13471:3;13382:93;:::i;:::-;13500:2;13495:3;13491:12;13484:19;;13107:402;;;:::o;13515:365::-;13657:3;13678:66;13742:1;13737:3;13678:66;:::i;:::-;13671:73;;13753:93;13842:3;13753:93;:::i;:::-;13871:2;13866:3;13862:12;13855:19;;13515:365;;;:::o;13886:366::-;14028:3;14049:67;14113:2;14108:3;14049:67;:::i;:::-;14042:74;;14125:93;14214:3;14125:93;:::i;:::-;14243:2;14238:3;14234:12;14227:19;;13886:366;;;:::o;14258:::-;14400:3;14421:67;14485:2;14480:3;14421:67;:::i;:::-;14414:74;;14497:93;14586:3;14497:93;:::i;:::-;14615:2;14610:3;14606:12;14599:19;;14258:366;;;:::o;14630:::-;14772:3;14793:67;14857:2;14852:3;14793:67;:::i;:::-;14786:74;;14869:93;14958:3;14869:93;:::i;:::-;14987:2;14982:3;14978:12;14971:19;;14630:366;;;:::o;15002:::-;15144:3;15165:67;15229:2;15224:3;15165:67;:::i;:::-;15158:74;;15241:93;15330:3;15241:93;:::i;:::-;15359:2;15354:3;15350:12;15343:19;;15002:366;;;:::o;15374:::-;15516:3;15537:67;15601:2;15596:3;15537:67;:::i;:::-;15530:74;;15613:93;15702:3;15613:93;:::i;:::-;15731:2;15726:3;15722:12;15715:19;;15374:366;;;:::o;15746:::-;15888:3;15909:67;15973:2;15968:3;15909:67;:::i;:::-;15902:74;;15985:93;16074:3;15985:93;:::i;:::-;16103:2;16098:3;16094:12;16087:19;;15746:366;;;:::o;16118:::-;16260:3;16281:67;16345:2;16340:3;16281:67;:::i;:::-;16274:74;;16357:93;16446:3;16357:93;:::i;:::-;16475:2;16470:3;16466:12;16459:19;;16118:366;;;:::o;16490:::-;16632:3;16653:67;16717:2;16712:3;16653:67;:::i;:::-;16646:74;;16729:93;16818:3;16729:93;:::i;:::-;16847:2;16842:3;16838:12;16831:19;;16490:366;;;:::o;16862:402::-;17022:3;17043:85;17125:2;17120:3;17043:85;:::i;:::-;17036:92;;17137:93;17226:3;17137:93;:::i;:::-;17255:2;17250:3;17246:12;17239:19;;16862:402;;;:::o;17270:366::-;17412:3;17433:67;17497:2;17492:3;17433:67;:::i;:::-;17426:74;;17509:93;17598:3;17509:93;:::i;:::-;17627:2;17622:3;17618:12;17611:19;;17270:366;;;:::o;17642:::-;17784:3;17805:67;17869:2;17864:3;17805:67;:::i;:::-;17798:74;;17881:93;17970:3;17881:93;:::i;:::-;17999:2;17994:3;17990:12;17983:19;;17642:366;;;:::o;18014:::-;18156:3;18177:67;18241:2;18236:3;18177:67;:::i;:::-;18170:74;;18253:93;18342:3;18253:93;:::i;:::-;18371:2;18366:3;18362:12;18355:19;;18014:366;;;:::o;18386:::-;18528:3;18549:67;18613:2;18608:3;18549:67;:::i;:::-;18542:74;;18625:93;18714:3;18625:93;:::i;:::-;18743:2;18738:3;18734:12;18727:19;;18386:366;;;:::o;18758:::-;18900:3;18921:67;18985:2;18980:3;18921:67;:::i;:::-;18914:74;;18997:93;19086:3;18997:93;:::i;:::-;19115:2;19110:3;19106:12;19099:19;;18758:366;;;:::o;19130:::-;19272:3;19293:67;19357:2;19352:3;19293:67;:::i;:::-;19286:74;;19369:93;19458:3;19369:93;:::i;:::-;19487:2;19482:3;19478:12;19471:19;;19130:366;;;:::o;19502:::-;19644:3;19665:67;19729:2;19724:3;19665:67;:::i;:::-;19658:74;;19741:93;19830:3;19741:93;:::i;:::-;19859:2;19854:3;19850:12;19843:19;;19502:366;;;:::o;19874:400::-;20034:3;20055:84;20137:1;20132:3;20055:84;:::i;:::-;20048:91;;20148:93;20237:3;20148:93;:::i;:::-;20266:1;20261:3;20257:11;20250:18;;19874:400;;;:::o;20280:366::-;20422:3;20443:67;20507:2;20502:3;20443:67;:::i;:::-;20436:74;;20519:93;20608:3;20519:93;:::i;:::-;20637:2;20632:3;20628:12;20621:19;;20280:366;;;:::o;20652:::-;20794:3;20815:67;20879:2;20874:3;20815:67;:::i;:::-;20808:74;;20891:93;20980:3;20891:93;:::i;:::-;21009:2;21004:3;21000:12;20993:19;;20652:366;;;:::o;21024:::-;21166:3;21187:67;21251:2;21246:3;21187:67;:::i;:::-;21180:74;;21263:93;21352:3;21263:93;:::i;:::-;21381:2;21376:3;21372:12;21365:19;;21024:366;;;:::o;21396:::-;21538:3;21559:67;21623:2;21618:3;21559:67;:::i;:::-;21552:74;;21635:93;21724:3;21635:93;:::i;:::-;21753:2;21748:3;21744:12;21737:19;;21396:366;;;:::o;21768:::-;21910:3;21931:67;21995:2;21990:3;21931:67;:::i;:::-;21924:74;;22007:93;22096:3;22007:93;:::i;:::-;22125:2;22120:3;22116:12;22109:19;;21768:366;;;:::o;22140:398::-;22299:3;22320:83;22401:1;22396:3;22320:83;:::i;:::-;22313:90;;22412:93;22501:3;22412:93;:::i;:::-;22530:1;22525:3;22521:11;22514:18;;22140:398;;;:::o;22544:366::-;22686:3;22707:67;22771:2;22766:3;22707:67;:::i;:::-;22700:74;;22783:93;22872:3;22783:93;:::i;:::-;22901:2;22896:3;22892:12;22885:19;;22544:366;;;:::o;22916:118::-;23003:24;23021:5;23003:24;:::i;:::-;22998:3;22991:37;22916:118;;:::o;23040:695::-;23318:3;23340:92;23428:3;23419:6;23340:92;:::i;:::-;23333:99;;23449:95;23540:3;23531:6;23449:95;:::i;:::-;23442:102;;23561:148;23705:3;23561:148;:::i;:::-;23554:155;;23726:3;23719:10;;23040:695;;;;;:::o;23741:535::-;23971:3;23993:92;24081:3;24072:6;23993:92;:::i;:::-;23986:99;;24102:148;24246:3;24102:148;:::i;:::-;24095:155;;24267:3;24260:10;;23741:535;;;;:::o;24282:::-;24512:3;24534:92;24622:3;24613:6;24534:92;:::i;:::-;24527:99;;24643:148;24787:3;24643:148;:::i;:::-;24636:155;;24808:3;24801:10;;24282:535;;;;:::o;24823:379::-;25007:3;25029:147;25172:3;25029:147;:::i;:::-;25022:154;;25193:3;25186:10;;24823:379;;;:::o;25208:222::-;25301:4;25339:2;25328:9;25324:18;25316:26;;25352:71;25420:1;25409:9;25405:17;25396:6;25352:71;:::i;:::-;25208:222;;;;:::o;25436:640::-;25631:4;25669:3;25658:9;25654:19;25646:27;;25683:71;25751:1;25740:9;25736:17;25727:6;25683:71;:::i;:::-;25764:72;25832:2;25821:9;25817:18;25808:6;25764:72;:::i;:::-;25846;25914:2;25903:9;25899:18;25890:6;25846:72;:::i;:::-;25965:9;25959:4;25955:20;25950:2;25939:9;25935:18;25928:48;25993:76;26064:4;26055:6;25993:76;:::i;:::-;25985:84;;25436:640;;;;;;;:::o;26082:210::-;26169:4;26207:2;26196:9;26192:18;26184:26;;26220:65;26282:1;26271:9;26267:17;26258:6;26220:65;:::i;:::-;26082:210;;;;:::o;26298:218::-;26389:4;26427:2;26416:9;26412:18;26404:26;;26440:69;26506:1;26495:9;26491:17;26482:6;26440:69;:::i;:::-;26298:218;;;;:::o;26522:313::-;26635:4;26673:2;26662:9;26658:18;26650:26;;26722:9;26716:4;26712:20;26708:1;26697:9;26693:17;26686:47;26750:78;26823:4;26814:6;26750:78;:::i;:::-;26742:86;;26522:313;;;;:::o;26841:419::-;27007:4;27045:2;27034:9;27030:18;27022:26;;27094:9;27088:4;27084:20;27080:1;27069:9;27065:17;27058:47;27122:131;27248:4;27122:131;:::i;:::-;27114:139;;26841:419;;;:::o;27266:::-;27432:4;27470:2;27459:9;27455:18;27447:26;;27519:9;27513:4;27509:20;27505:1;27494:9;27490:17;27483:47;27547:131;27673:4;27547:131;:::i;:::-;27539:139;;27266:419;;;:::o;27691:::-;27857:4;27895:2;27884:9;27880:18;27872:26;;27944:9;27938:4;27934:20;27930:1;27919:9;27915:17;27908:47;27972:131;28098:4;27972:131;:::i;:::-;27964:139;;27691:419;;;:::o;28116:::-;28282:4;28320:2;28309:9;28305:18;28297:26;;28369:9;28363:4;28359:20;28355:1;28344:9;28340:17;28333:47;28397:131;28523:4;28397:131;:::i;:::-;28389:139;;28116:419;;;:::o;28541:::-;28707:4;28745:2;28734:9;28730:18;28722:26;;28794:9;28788:4;28784:20;28780:1;28769:9;28765:17;28758:47;28822:131;28948:4;28822:131;:::i;:::-;28814:139;;28541:419;;;:::o;28966:::-;29132:4;29170:2;29159:9;29155:18;29147:26;;29219:9;29213:4;29209:20;29205:1;29194:9;29190:17;29183:47;29247:131;29373:4;29247:131;:::i;:::-;29239:139;;28966:419;;;:::o;29391:::-;29557:4;29595:2;29584:9;29580:18;29572:26;;29644:9;29638:4;29634:20;29630:1;29619:9;29615:17;29608:47;29672:131;29798:4;29672:131;:::i;:::-;29664:139;;29391:419;;;:::o;29816:::-;29982:4;30020:2;30009:9;30005:18;29997:26;;30069:9;30063:4;30059:20;30055:1;30044:9;30040:17;30033:47;30097:131;30223:4;30097:131;:::i;:::-;30089:139;;29816:419;;;:::o;30241:::-;30407:4;30445:2;30434:9;30430:18;30422:26;;30494:9;30488:4;30484:20;30480:1;30469:9;30465:17;30458:47;30522:131;30648:4;30522:131;:::i;:::-;30514:139;;30241:419;;;:::o;30666:::-;30832:4;30870:2;30859:9;30855:18;30847:26;;30919:9;30913:4;30909:20;30905:1;30894:9;30890:17;30883:47;30947:131;31073:4;30947:131;:::i;:::-;30939:139;;30666:419;;;:::o;31091:::-;31257:4;31295:2;31284:9;31280:18;31272:26;;31344:9;31338:4;31334:20;31330:1;31319:9;31315:17;31308:47;31372:131;31498:4;31372:131;:::i;:::-;31364:139;;31091:419;;;:::o;31516:::-;31682:4;31720:2;31709:9;31705:18;31697:26;;31769:9;31763:4;31759:20;31755:1;31744:9;31740:17;31733:47;31797:131;31923:4;31797:131;:::i;:::-;31789:139;;31516:419;;;:::o;31941:::-;32107:4;32145:2;32134:9;32130:18;32122:26;;32194:9;32188:4;32184:20;32180:1;32169:9;32165:17;32158:47;32222:131;32348:4;32222:131;:::i;:::-;32214:139;;31941:419;;;:::o;32366:::-;32532:4;32570:2;32559:9;32555:18;32547:26;;32619:9;32613:4;32609:20;32605:1;32594:9;32590:17;32583:47;32647:131;32773:4;32647:131;:::i;:::-;32639:139;;32366:419;;;:::o;32791:::-;32957:4;32995:2;32984:9;32980:18;32972:26;;33044:9;33038:4;33034:20;33030:1;33019:9;33015:17;33008:47;33072:131;33198:4;33072:131;:::i;:::-;33064:139;;32791:419;;;:::o;33216:::-;33382:4;33420:2;33409:9;33405:18;33397:26;;33469:9;33463:4;33459:20;33455:1;33444:9;33440:17;33433:47;33497:131;33623:4;33497:131;:::i;:::-;33489:139;;33216:419;;;:::o;33641:::-;33807:4;33845:2;33834:9;33830:18;33822:26;;33894:9;33888:4;33884:20;33880:1;33869:9;33865:17;33858:47;33922:131;34048:4;33922:131;:::i;:::-;33914:139;;33641:419;;;:::o;34066:::-;34232:4;34270:2;34259:9;34255:18;34247:26;;34319:9;34313:4;34309:20;34305:1;34294:9;34290:17;34283:47;34347:131;34473:4;34347:131;:::i;:::-;34339:139;;34066:419;;;:::o;34491:::-;34657:4;34695:2;34684:9;34680:18;34672:26;;34744:9;34738:4;34734:20;34730:1;34719:9;34715:17;34708:47;34772:131;34898:4;34772:131;:::i;:::-;34764:139;;34491:419;;;:::o;34916:::-;35082:4;35120:2;35109:9;35105:18;35097:26;;35169:9;35163:4;35159:20;35155:1;35144:9;35140:17;35133:47;35197:131;35323:4;35197:131;:::i;:::-;35189:139;;34916:419;;;:::o;35341:::-;35507:4;35545:2;35534:9;35530:18;35522:26;;35594:9;35588:4;35584:20;35580:1;35569:9;35565:17;35558:47;35622:131;35748:4;35622:131;:::i;:::-;35614:139;;35341:419;;;:::o;35766:::-;35932:4;35970:2;35959:9;35955:18;35947:26;;36019:9;36013:4;36009:20;36005:1;35994:9;35990:17;35983:47;36047:131;36173:4;36047:131;:::i;:::-;36039:139;;35766:419;;;:::o;36191:::-;36357:4;36395:2;36384:9;36380:18;36372:26;;36444:9;36438:4;36434:20;36430:1;36419:9;36415:17;36408:47;36472:131;36598:4;36472:131;:::i;:::-;36464:139;;36191:419;;;:::o;36616:222::-;36709:4;36747:2;36736:9;36732:18;36724:26;;36760:71;36828:1;36817:9;36813:17;36804:6;36760:71;:::i;:::-;36616:222;;;;:::o;36844:129::-;36878:6;36905:20;;:::i;:::-;36895:30;;36934:33;36962:4;36954:6;36934:33;:::i;:::-;36844:129;;;:::o;36979:75::-;37012:6;37045:2;37039:9;37029:19;;36979:75;:::o;37060:311::-;37137:4;37227:18;37219:6;37216:30;37213:56;;;37249:18;;:::i;:::-;37213:56;37299:4;37291:6;37287:17;37279:25;;37359:4;37353;37349:15;37341:23;;37060:311;;;:::o;37377:307::-;37438:4;37528:18;37520:6;37517:30;37514:56;;;37550:18;;:::i;:::-;37514:56;37588:29;37610:6;37588:29;:::i;:::-;37580:37;;37672:4;37666;37662:15;37654:23;;37377:307;;;:::o;37690:308::-;37752:4;37842:18;37834:6;37831:30;37828:56;;;37864:18;;:::i;:::-;37828:56;37902:29;37924:6;37902:29;:::i;:::-;37894:37;;37986:4;37980;37976:15;37968:23;;37690:308;;;:::o;38004:141::-;38053:4;38076:3;38068:11;;38099:3;38096:1;38089:14;38133:4;38130:1;38120:18;38112:26;;38004:141;;;:::o;38151:98::-;38202:6;38236:5;38230:12;38220:22;;38151:98;;;:::o;38255:99::-;38307:6;38341:5;38335:12;38325:22;;38255:99;;;:::o;38360:168::-;38443:11;38477:6;38472:3;38465:19;38517:4;38512:3;38508:14;38493:29;;38360:168;;;;:::o;38534:147::-;38635:11;38672:3;38657:18;;38534:147;;;;:::o;38687:169::-;38771:11;38805:6;38800:3;38793:19;38845:4;38840:3;38836:14;38821:29;;38687:169;;;;:::o;38862:148::-;38964:11;39001:3;38986:18;;38862:148;;;;:::o;39016:305::-;39056:3;39075:20;39093:1;39075:20;:::i;:::-;39070:25;;39109:20;39127:1;39109:20;:::i;:::-;39104:25;;39263:1;39195:66;39191:74;39188:1;39185:81;39182:107;;;39269:18;;:::i;:::-;39182:107;39313:1;39310;39306:9;39299:16;;39016:305;;;;:::o;39327:185::-;39367:1;39384:20;39402:1;39384:20;:::i;:::-;39379:25;;39418:20;39436:1;39418:20;:::i;:::-;39413:25;;39457:1;39447:35;;39462:18;;:::i;:::-;39447:35;39504:1;39501;39497:9;39492:14;;39327:185;;;;:::o;39518:191::-;39558:4;39578:20;39596:1;39578:20;:::i;:::-;39573:25;;39612:20;39630:1;39612:20;:::i;:::-;39607:25;;39651:1;39648;39645:8;39642:34;;;39656:18;;:::i;:::-;39642:34;39701:1;39698;39694:9;39686:17;;39518:191;;;;:::o;39715:96::-;39752:7;39781:24;39799:5;39781:24;:::i;:::-;39770:35;;39715:96;;;:::o;39817:90::-;39851:7;39894:5;39887:13;39880:21;39869:32;;39817:90;;;:::o;39913:149::-;39949:7;39989:66;39982:5;39978:78;39967:89;;39913:149;;;:::o;40068:126::-;40105:7;40145:42;40138:5;40134:54;40123:65;;40068:126;;;:::o;40200:77::-;40237:7;40266:5;40255:16;;40200:77;;;:::o;40283:154::-;40367:6;40362:3;40357;40344:30;40429:1;40420:6;40415:3;40411:16;40404:27;40283:154;;;:::o;40443:307::-;40511:1;40521:113;40535:6;40532:1;40529:13;40521:113;;;40620:1;40615:3;40611:11;40605:18;40601:1;40596:3;40592:11;40585:39;40557:2;40554:1;40550:10;40545:15;;40521:113;;;40652:6;40649:1;40646:13;40643:101;;;40732:1;40723:6;40718:3;40714:16;40707:27;40643:101;40492:258;40443:307;;;:::o;40756:320::-;40800:6;40837:1;40831:4;40827:12;40817:22;;40884:1;40878:4;40874:12;40905:18;40895:81;;40961:4;40953:6;40949:17;40939:27;;40895:81;41023:2;41015:6;41012:14;40992:18;40989:38;40986:84;;;41042:18;;:::i;:::-;40986:84;40807:269;40756:320;;;:::o;41082:281::-;41165:27;41187:4;41165:27;:::i;:::-;41157:6;41153:40;41295:6;41283:10;41280:22;41259:18;41247:10;41244:34;41241:62;41238:88;;;41306:18;;:::i;:::-;41238:88;41346:10;41342:2;41335:22;41125:238;41082:281;;:::o;41369:233::-;41408:3;41431:24;41449:5;41431:24;:::i;:::-;41422:33;;41477:66;41470:5;41467:77;41464:103;;;41547:18;;:::i;:::-;41464:103;41594:1;41587:5;41583:13;41576:20;;41369:233;;;:::o;41608:176::-;41640:1;41657:20;41675:1;41657:20;:::i;:::-;41652:25;;41691:20;41709:1;41691:20;:::i;:::-;41686:25;;41730:1;41720:35;;41735:18;;:::i;:::-;41720:35;41776:1;41773;41769:9;41764:14;;41608:176;;;;:::o;41790:180::-;41838:77;41835:1;41828:88;41935:4;41932:1;41925:15;41959:4;41956:1;41949:15;41976:180;42024:77;42021:1;42014:88;42121:4;42118:1;42111:15;42145:4;42142:1;42135:15;42162:180;42210:77;42207:1;42200:88;42307:4;42304:1;42297:15;42331:4;42328:1;42321:15;42348:180;42396:77;42393:1;42386:88;42493:4;42490:1;42483:15;42517:4;42514:1;42507:15;42534:180;42582:77;42579:1;42572:88;42679:4;42676:1;42669:15;42703:4;42700:1;42693:15;42720:117;42829:1;42826;42819:12;42843:117;42952:1;42949;42942:12;42966:117;43075:1;43072;43065:12;43089:117;43198:1;43195;43188:12;43212:117;43321:1;43318;43311:12;43335:117;43444:1;43441;43434:12;43458:102;43499:6;43550:2;43546:7;43541:2;43534:5;43530:14;43526:28;43516:38;;43458:102;;;:::o;43566:182::-;43706:34;43702:1;43694:6;43690:14;43683:58;43566:182;:::o;43754:163::-;43894:15;43890:1;43882:6;43878:14;43871:39;43754:163;:::o;43923:158::-;44063:10;44059:1;44051:6;44047:14;44040:34;43923:158;:::o;44087:177::-;44227:29;44223:1;44215:6;44211:14;44204:53;44087:177;:::o;44270:178::-;44410:30;44406:1;44398:6;44394:14;44387:54;44270:178;:::o;44454:182::-;44594:34;44590:1;44582:6;44578:14;44571:58;44454:182;:::o;44642:177::-;44782:29;44778:1;44770:6;44766:14;44759:53;44642:177;:::o;44825:180::-;44965:32;44961:1;44953:6;44949:14;44942:56;44825:180;:::o;45011:174::-;45151:26;45147:1;45139:6;45135:14;45128:50;45011:174;:::o;45191:182::-;45331:34;45327:1;45319:6;45315:14;45308:58;45191:182;:::o;45379:175::-;45519:27;45515:1;45507:6;45503:14;45496:51;45379:175;:::o;45560:162::-;45700:14;45696:1;45688:6;45684:14;45677:38;45560:162;:::o;45728:180::-;45868:32;45864:1;45856:6;45852:14;45845:56;45728:180;:::o;45914:176::-;46054:28;46050:1;46042:6;46038:14;46031:52;45914:176;:::o;46096:167::-;46236:19;46232:1;46224:6;46220:14;46213:43;46096:167;:::o;46269:181::-;46409:33;46405:1;46397:6;46393:14;46386:57;46269:181;:::o;46456:::-;46596:33;46592:1;46584:6;46580:14;46573:57;46456:181;:::o;46643:182::-;46783:34;46779:1;46771:6;46767:14;46760:58;46643:182;:::o;46831:::-;46971:34;46967:1;46959:6;46955:14;46948:58;46831:182;:::o;47019:155::-;47159:7;47155:1;47147:6;47143:14;47136:31;47019:155;:::o;47180:178::-;47320:30;47316:1;47308:6;47304:14;47297:54;47180:178;:::o;47364:182::-;47504:34;47500:1;47492:6;47488:14;47481:58;47364:182;:::o;47552:174::-;47692:26;47688:1;47680:6;47676:14;47669:50;47552:174;:::o;47732:178::-;47872:30;47868:1;47860:6;47856:14;47849:54;47732:178;:::o;47916:220::-;48056:34;48052:1;48044:6;48040:14;48033:58;48125:3;48120:2;48112:6;48108:15;48101:28;47916:220;:::o;48142:114::-;;:::o;48262:179::-;48402:31;48398:1;48390:6;48386:14;48379:55;48262:179;:::o;48447:122::-;48520:24;48538:5;48520:24;:::i;:::-;48513:5;48510:35;48500:63;;48559:1;48556;48549:12;48500:63;48447:122;:::o;48575:116::-;48645:21;48660:5;48645:21;:::i;:::-;48638:5;48635:32;48625:60;;48681:1;48678;48671:12;48625:60;48575:116;:::o;48697:120::-;48769:23;48786:5;48769:23;:::i;:::-;48762:5;48759:34;48749:62;;48807:1;48804;48797:12;48749:62;48697:120;:::o;48823:122::-;48896:24;48914:5;48896:24;:::i;:::-;48889:5;48886:35;48876:63;;48935:1;48932;48925:12;48876:63;48823:122;:::o

Swarm Source

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