ETH Price: $2,347.55 (+0.20%)

Token

TrippinPixelApe (TrippinPixelApe)
 

Overview

Max Total Supply

2,715 TrippinPixelApe

Holders

392

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
7 TrippinPixelApe
0x47681CCce1494402699cfaF251808c3454d9D026
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:
TrippinPixelApe

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-05-25
*/

// SPDX-License-Identifier: MIT
// File: @openzeppelin/contracts/utils/Strings.sol


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

pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

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

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

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


// OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
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
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 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, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @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, "Address: low-level call with value failed");
    }

    /**
     * @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, "Address: insufficient balance for 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, "Address: low-level static call failed");
    }

    /**
     * @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), "Address: static call to 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, "Address: low-level delegate 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), "Address: delegate call to non-contract");

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

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal 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);
            }
        }
    }
}

// File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
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 `IERC721Receiver.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

// File: @openzeppelin/contracts/utils/introspection/IERC165.sol


// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

// File: @openzeppelin/contracts/utils/introspection/ERC165.sol


// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;


/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

// File: @openzeppelin/contracts/token/ERC721/IERC721.sol


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;


/**
 * @dev Required interface of an ERC721 compliant contract.
 */
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`.
     *
     * 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;

    /**
     * @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 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 the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

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

// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)

pragma solidity ^0.8.0;


/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
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);
}

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


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

pragma solidity ^0.8.0;

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

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

// File: contracts/ERC721A.sol


// Creator: Chiru Labs

pragma solidity ^0.8.13;








error ApprovalCallerNotOwnerNorApproved();
error ApprovalQueryForNonexistentToken();
error ApproveToCaller();
error ApprovalToCurrentOwner();
error BalanceQueryForZeroAddress();
error MintToZeroAddress();
error MintZeroQuantity();
error OwnerQueryForNonexistentToken();
error TransferCallerNotOwnerNorApproved();
error TransferFromIncorrectOwner();
error TransferToNonERC721ReceiverImplementer();
error TransferToZeroAddress();
error URIQueryForNonexistentToken();

/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension. Built to optimize for lower gas during batch mints.
 *
 * Assumes serials are sequentially minted starting at _startTokenId() (defaults to 0, e.g. 0, 1, 2, 3..).
 *
 * Assumes that an owner cannot have more than 2**64 - 1 (max value of uint64) of supply.
 *
 * Assumes that the maximum token id cannot exceed 2**256 - 1 (max value of uint256).
 */
contract ERC721A is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Compiler will pack this into a single 256bit word.
    struct TokenOwnership {
        // The address of the owner.
        address addr;
        // Keeps track of the start time of ownership with minimal overhead for tokenomics.
        uint64 startTimestamp;
        // Whether the token has been burned.
        bool burned;
    }

    // Compiler will pack this into a single 256bit word.
    struct AddressData {
        // Realistically, 2**64-1 is more than enough.
        uint64 balance;
        // Keeps track of mint count with minimal overhead for tokenomics.
        uint64 numberMinted;
        // Keeps track of burn count with minimal overhead for tokenomics.
        uint64 numberBurned;
        // For miscellaneous variable(s) pertaining to the address
        // (e.g. number of whitelist mint slots used).
        // If there are multiple variables, please pack them into a uint64.
        uint64 aux;
    }

    // The tokenId of the next token to be minted.
    uint256 internal _currentIndex;

    // The number of tokens burned.
    uint256 internal _burnCounter;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to ownership details
    // An empty struct value does not necessarily mean the token is unowned. See _ownershipOf implementation for details.
    mapping(uint256 => TokenOwnership) internal _ownerships;

    // Mapping owner address to address data
    mapping(address => AddressData) private _addressData;

    // 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;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
        _currentIndex = _startTokenId();
    }

    /**
     * To change the starting tokenId, please override this function.
     */
    function _startTokenId() internal view virtual returns (uint256) {
        return 0;
    }

    /**
     * @dev Burned tokens are calculated here, use _totalMinted() if you want to count just minted tokens.
     */
    function totalSupply() public view returns (uint256) {
        // Counter underflow is impossible as _burnCounter cannot be incremented
        // more than _currentIndex - _startTokenId() times
        unchecked {
            return _currentIndex - _burnCounter - _startTokenId();
        }
    }

    /**
     * Returns the total amount of tokens minted in the contract.
     */
    function _totalMinted() internal view returns (uint256) {
        // Counter underflow is impossible as _currentIndex does not decrement,
        // and it is initialized to _startTokenId()
        unchecked {
            return _currentIndex - _startTokenId();
        }
    }

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return
            interfaceId == type(IERC721).interfaceId ||
            interfaceId == type(IERC721Metadata).interfaceId ||
            super.supportsInterface(interfaceId);
    }

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view override returns (uint256) {
        if (owner == address(0)) revert BalanceQueryForZeroAddress();
        return uint256(_addressData[owner].balance);
    }

    /**
     * Returns the number of tokens minted by `owner`.
     */
    function _numberMinted(address owner) internal view returns (uint256) {
        return uint256(_addressData[owner].numberMinted);
    }

    /**
     * Returns the number of tokens burned by or on behalf of `owner`.
     */
    function _numberBurned(address owner) internal view returns (uint256) {
        return uint256(_addressData[owner].numberBurned);
    }

    /**
     * Returns the auxillary data for `owner`. (e.g. number of whitelist mint slots used).
     */
    function _getAux(address owner) internal view returns (uint64) {
        return _addressData[owner].aux;
    }

    /**
     * Sets the auxillary data for `owner`. (e.g. number of whitelist mint slots used).
     * If there are multiple variables, please pack them into a uint64.
     */
    function _setAux(address owner, uint64 aux) internal {
        _addressData[owner].aux = aux;
    }

    /**
     * Gas spent here starts off proportional to the maximum mint batch size.
     * It gradually moves to O(1) as tokens get transferred around in the collection over time.
     */
    function _ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) {
        uint256 curr = tokenId;

        unchecked {
            if (_startTokenId() <= curr && curr < _currentIndex) {
                TokenOwnership memory ownership = _ownerships[curr];
                if (!ownership.burned) {
                    if (ownership.addr != address(0)) {
                        return ownership;
                    }
                    // Invariant:
                    // There will always be an ownership that has an address and is not burned
                    // before an ownership that does not have an address and is not burned.
                    // Hence, curr will not underflow.
                    while (true) {
                        curr--;
                        ownership = _ownerships[curr];
                        if (ownership.addr != address(0)) {
                            return ownership;
                        }
                    }
                }
            }
        }
        revert OwnerQueryForNonexistentToken();
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view override returns (address) {
        return _ownershipOf(tokenId).addr;
    }

    /**
     * @dev See {IERC721Metadata-name}.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev See {IERC721Metadata-symbol}.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        if (!_exists(tokenId)) revert URIQueryForNonexistentToken();

        string memory baseURI = _baseURI();
        return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : '';
    }

    /**
     * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
     * token will be the concatenation of the `baseURI` and the `tokenId`. Empty
     * by default, can be overriden in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return '';
    }

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public override {
        address owner = ERC721A.ownerOf(tokenId);
        if (to == owner) revert ApprovalToCurrentOwner();

        if (_msgSender() != owner && !isApprovedForAll(owner, _msgSender())) {
            revert ApprovalCallerNotOwnerNorApproved();
        }

        _approve(to, tokenId, owner);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view override returns (address) {
        if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken();

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        if (operator == _msgSender()) revert ApproveToCaller();

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), 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 {
        _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 {
        _transfer(from, to, tokenId);
        if (to.isContract() && !_checkContractOnERC721Received(from, to, tokenId, _data)) {
            revert TransferToNonERC721ReceiverImplementer();
        }
    }

    /**
     * @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`),
     */
    function _exists(uint256 tokenId) internal view returns (bool) {
        return _startTokenId() <= tokenId && tokenId < _currentIndex && !_ownerships[tokenId].burned;
    }

    /**
     * @dev Equivalent to `_safeMint(to, quantity, '')`.
     */
    function _safeMint(address to, uint256 quantity) internal {
        _safeMint(to, quantity, '');
    }

    /**
     * @dev Safely mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - If `to` refers to a smart contract, it must implement 
     *   {IERC721Receiver-onERC721Received}, which is called for each safe transfer.
     * - `quantity` must be greater than 0.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(
        address to,
        uint256 quantity,
        bytes memory _data
    ) internal {
        uint256 startTokenId = _currentIndex;
        if (to == address(0)) revert MintToZeroAddress();
        if (quantity == 0) revert MintZeroQuantity();

        _beforeTokenTransfers(address(0), to, startTokenId, quantity);

        // Overflows are incredibly unrealistic.
        // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1
        // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1
        unchecked {
            _addressData[to].balance += uint64(quantity);
            _addressData[to].numberMinted += uint64(quantity);

            _ownerships[startTokenId].addr = to;
            _ownerships[startTokenId].startTimestamp = uint64(block.timestamp);

            uint256 updatedIndex = startTokenId;
            uint256 end = updatedIndex + quantity;

            if (to.isContract()) {
                do {
                    emit Transfer(address(0), to, updatedIndex);
                    if (!_checkContractOnERC721Received(address(0), to, updatedIndex++, _data)) {
                        revert TransferToNonERC721ReceiverImplementer();
                    }
                } while (updatedIndex != end);
                // Reentrancy protection
                if (_currentIndex != startTokenId) revert();
            } else {
                do {
                    emit Transfer(address(0), to, updatedIndex++);
                } while (updatedIndex != end);
            }
            _currentIndex = updatedIndex;
        }
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

    /**
     * @dev Mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `quantity` must be greater than 0.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 quantity) internal {
        uint256 startTokenId = _currentIndex;
        if (to == address(0)) revert MintToZeroAddress();
        if (quantity == 0) revert MintZeroQuantity();

        _beforeTokenTransfers(address(0), to, startTokenId, quantity);

        // Overflows are incredibly unrealistic.
        // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1
        // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1
        unchecked {
            _addressData[to].balance += uint64(quantity);
            _addressData[to].numberMinted += uint64(quantity);

            _ownerships[startTokenId].addr = to;
            _ownerships[startTokenId].startTimestamp = uint64(block.timestamp);

            uint256 updatedIndex = startTokenId;
            uint256 end = updatedIndex + quantity;

            do {
                emit Transfer(address(0), to, updatedIndex++);
            } while (updatedIndex != end);

            _currentIndex = updatedIndex;
        }
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *
     * 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
    ) private {
        TokenOwnership memory prevOwnership = _ownershipOf(tokenId);

        if (prevOwnership.addr != from) revert TransferFromIncorrectOwner();

        bool isApprovedOrOwner = (_msgSender() == from ||
            isApprovedForAll(from, _msgSender()) ||
            getApproved(tokenId) == _msgSender());

        if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
        if (to == address(0)) revert TransferToZeroAddress();

        _beforeTokenTransfers(from, to, tokenId, 1);

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

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.
        unchecked {
            _addressData[from].balance -= 1;
            _addressData[to].balance += 1;

            TokenOwnership storage currSlot = _ownerships[tokenId];
            currSlot.addr = to;
            currSlot.startTimestamp = uint64(block.timestamp);

            // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it.
            // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
            uint256 nextTokenId = tokenId + 1;
            TokenOwnership storage nextSlot = _ownerships[nextTokenId];
            if (nextSlot.addr == address(0)) {
                // This will suffice for checking _exists(nextTokenId),
                // as a burned slot cannot contain the zero address.
                if (nextTokenId != _currentIndex) {
                    nextSlot.addr = from;
                    nextSlot.startTimestamp = prevOwnership.startTimestamp;
                }
            }
        }

        emit Transfer(from, to, tokenId);
        _afterTokenTransfers(from, to, tokenId, 1);
    }

    /**
     * @dev Equivalent to `_burn(tokenId, false)`.
     */
    function _burn(uint256 tokenId) internal virtual {
        _burn(tokenId, false);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId, bool approvalCheck) internal virtual {
        TokenOwnership memory prevOwnership = _ownershipOf(tokenId);

        address from = prevOwnership.addr;

        if (approvalCheck) {
            bool isApprovedOrOwner = (_msgSender() == from ||
                isApprovedForAll(from, _msgSender()) ||
                getApproved(tokenId) == _msgSender());

            if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
        }

        _beforeTokenTransfers(from, address(0), tokenId, 1);

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

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.
        unchecked {
            AddressData storage addressData = _addressData[from];
            addressData.balance -= 1;
            addressData.numberBurned += 1;

            // Keep track of who burned the token, and the timestamp of burning.
            TokenOwnership storage currSlot = _ownerships[tokenId];
            currSlot.addr = from;
            currSlot.startTimestamp = uint64(block.timestamp);
            currSlot.burned = true;

            // If the ownership slot of tokenId+1 is not explicitly set, that means the burn initiator owns it.
            // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
            uint256 nextTokenId = tokenId + 1;
            TokenOwnership storage nextSlot = _ownerships[nextTokenId];
            if (nextSlot.addr == address(0)) {
                // This will suffice for checking _exists(nextTokenId),
                // as a burned slot cannot contain the zero address.
                if (nextTokenId != _currentIndex) {
                    nextSlot.addr = from;
                    nextSlot.startTimestamp = prevOwnership.startTimestamp;
                }
            }
        }

        emit Transfer(from, address(0), tokenId);
        _afterTokenTransfers(from, address(0), tokenId, 1);

        // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times.
        unchecked {
            _burnCounter++;
        }
    }

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

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target 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 _checkContractOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
            return retval == IERC721Receiver(to).onERC721Received.selector;
        } catch (bytes memory reason) {
            if (reason.length == 0) {
                revert TransferToNonERC721ReceiverImplementer();
            } else {
                assembly {
                    revert(add(32, reason), mload(reason))
                }
            }
        }
    }

    /**
     * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting.
     * And also called before burning one token.
     *
     * startTokenId - the first token id to be transferred
     * quantity - the amount to be transferred
     *
     * 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, `tokenId` will be burned by `from`.
     * - `from` and `to` are never both zero.
     */
    function _beforeTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}

    /**
     * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes
     * minting.
     * And also called after one token has been burned.
     *
     * startTokenId - the first token id to be transferred
     * quantity - the amount to be transferred
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, `from`'s `tokenId` has been
     * transferred to `to`.
     * - When `from` is zero, `tokenId` has been minted for `to`.
     * - When `to` is zero, `tokenId` has been burned by `from`.
     * - `from` and `to` are never both zero.
     */
    function _afterTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}
}
// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

// File: contracts/TrippinPixelApe.sol



pragma solidity ^0.8.13;



contract TrippinPixelApe is ERC721A, Ownable {

    string public baseURI = "https://trippinpixelape.com/metadata/";    
    uint256 public constant MAX_SUPPLY = 5555;
    uint256 public MINT_PRICE = 0.004 ether;
    uint256 public constant MAX_PER_TX = 7;
    uint256 public constant FREE_AMOUNT = 1000;

    constructor() ERC721A("TrippinPixelApe", "TrippinPixelApe") {
    }

    function tokenURI(uint256 _tokenId) public view override returns (string memory) {
        require(_exists(_tokenId), "Token does not exist.");
        return string(abi.encodePacked(baseURI, Strings.toString(_tokenId)));
    }

    function setBaseURI(string memory _baseURI) external onlyOwner {
        baseURI = _baseURI;
    }

    function setMintPrice(uint256 _price) external onlyOwner {
        MINT_PRICE = _price;
    }

    function publicMint(uint256 count) external payable {
        require(totalSupply() + count <= MAX_SUPPLY, "Excedes max supply.");
        require(count <= MAX_PER_TX, "Exceeds max per transaction.");
        if (msg.sender != owner() && (totalSupply() > FREE_AMOUNT)) {
            require(msg.value >= count * MINT_PRICE, "Amount sent less than the cost of minting NFT(s)");
        }
        _safeMint(_msgSender(), count);
    }

    function withdrawMoney() external onlyOwner {
        (bool success, ) = _msgSender().call{value: address(this).balance}("");
        require(success, "Transfer failed.");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"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"},{"inputs":[],"name":"FREE_AMOUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PER_TX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINT_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","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":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"count","type":"uint256"}],"name":"publicMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","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":"_baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setMintPrice","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":[{"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":"withdrawMoney","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052604051806060016040528060258152602001620036b0602591396009908051906020019062000035929190620001fe565b50660e35fa931a0000600a553480156200004e57600080fd5b506040518060400160405280600f81526020017f5472697070696e506978656c41706500000000000000000000000000000000008152506040518060400160405280600f81526020017f5472697070696e506978656c41706500000000000000000000000000000000008152508160029080519060200190620000d3929190620001fe565b508060039080519060200190620000ec929190620001fe565b50620000fd6200012b60201b60201c565b600081905550505062000125620001196200013060201b60201c565b6200013860201b60201c565b62000312565b600090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200020c90620002dd565b90600052602060002090601f0160209004810192826200023057600085556200027c565b82601f106200024b57805160ff19168380011785556200027c565b828001600101855582156200027c579182015b828111156200027b5782518255916020019190600101906200025e565b5b5090506200028b91906200028f565b5090565b5b80821115620002aa57600081600090555060010162000290565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620002f657607f821691505b6020821081036200030c576200030b620002ae565b5b50919050565b61338e80620003226000396000f3fe6080604052600436106101815760003560e01c806370a08231116100d1578063b88d4fde1161008a578063e985e9c511610064578063e985e9c51461054f578063f2fde38b1461058c578063f43a22dc146105b5578063f4a0a528146105e057610181565b8063b88d4fde146104be578063c002d23d146104e7578063c87b56dd1461051257610181565b806370a08231146103d4578063715018a6146104115780638da5cb5b1461042857806395d89b4114610453578063a22cb4651461047e578063ac446002146104a757610181565b806323b872dd1161013e57806342842e0e1161011857806342842e0e1461031a57806355f804b3146103435780636352211e1461036c5780636c0360eb146103a957610181565b806323b872dd146102aa5780632db11544146102d357806332cb6b0c146102ef57610181565b8063017184d91461018657806301ffc9a7146101b157806306fdde03146101ee578063081812fc14610219578063095ea7b31461025657806318160ddd1461027f575b600080fd5b34801561019257600080fd5b5061019b610609565b6040516101a891906124ec565b60405180910390f35b3480156101bd57600080fd5b506101d860048036038101906101d39190612573565b61060f565b6040516101e591906125bb565b60405180910390f35b3480156101fa57600080fd5b506102036106f1565b604051610210919061266f565b60405180910390f35b34801561022557600080fd5b50610240600480360381019061023b91906126bd565b610783565b60405161024d919061272b565b60405180910390f35b34801561026257600080fd5b5061027d60048036038101906102789190612772565b6107ff565b005b34801561028b57600080fd5b50610294610909565b6040516102a191906124ec565b60405180910390f35b3480156102b657600080fd5b506102d160048036038101906102cc91906127b2565b610920565b005b6102ed60048036038101906102e891906126bd565b610930565b005b3480156102fb57600080fd5b50610304610a80565b60405161031191906124ec565b60405180910390f35b34801561032657600080fd5b50610341600480360381019061033c91906127b2565b610a86565b005b34801561034f57600080fd5b5061036a6004803603810190610365919061293a565b610aa6565b005b34801561037857600080fd5b50610393600480360381019061038e91906126bd565b610b3c565b6040516103a0919061272b565b60405180910390f35b3480156103b557600080fd5b506103be610b52565b6040516103cb919061266f565b60405180910390f35b3480156103e057600080fd5b506103fb60048036038101906103f69190612983565b610be0565b60405161040891906124ec565b60405180910390f35b34801561041d57600080fd5b50610426610caf565b005b34801561043457600080fd5b5061043d610d37565b60405161044a919061272b565b60405180910390f35b34801561045f57600080fd5b50610468610d61565b604051610475919061266f565b60405180910390f35b34801561048a57600080fd5b506104a560048036038101906104a091906129dc565b610df3565b005b3480156104b357600080fd5b506104bc610f6a565b005b3480156104ca57600080fd5b506104e560048036038101906104e09190612abd565b61109c565b005b3480156104f357600080fd5b506104fc611118565b60405161050991906124ec565b60405180910390f35b34801561051e57600080fd5b50610539600480360381019061053491906126bd565b61111e565b604051610546919061266f565b60405180910390f35b34801561055b57600080fd5b5061057660048036038101906105719190612b40565b61119a565b60405161058391906125bb565b60405180910390f35b34801561059857600080fd5b506105b360048036038101906105ae9190612983565b61122e565b005b3480156105c157600080fd5b506105ca611325565b6040516105d791906124ec565b60405180910390f35b3480156105ec57600080fd5b50610607600480360381019061060291906126bd565b61132a565b005b6103e881565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106da57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106ea57506106e9826113b0565b5b9050919050565b60606002805461070090612baf565b80601f016020809104026020016040519081016040528092919081815260200182805461072c90612baf565b80156107795780601f1061074e57610100808354040283529160200191610779565b820191906000526020600020905b81548152906001019060200180831161075c57829003601f168201915b5050505050905090565b600061078e8261141a565b6107c4576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061080a82610b3c565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610871576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610890611468565b73ffffffffffffffffffffffffffffffffffffffff16141580156108c257506108c0816108bb611468565b61119a565b155b156108f9576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610904838383611470565b505050565b6000610913611522565b6001546000540303905090565b61092b838383611527565b505050565b6115b38161093c610909565b6109469190612c0f565b1115610987576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097e90612cb1565b60405180910390fd5b60078111156109cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c290612d1d565b60405180910390fd5b6109d3610d37565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015610a1657506103e8610a14610909565b115b15610a6c57600a5481610a299190612d3d565b341015610a6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6290612e09565b60405180910390fd5b5b610a7d610a77611468565b826119db565b50565b6115b381565b610aa18383836040518060200160405280600081525061109c565b505050565b610aae611468565b73ffffffffffffffffffffffffffffffffffffffff16610acc610d37565b73ffffffffffffffffffffffffffffffffffffffff1614610b22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1990612e75565b60405180910390fd5b8060099080519060200190610b389291906123ed565b5050565b6000610b47826119f9565b600001519050919050565b60098054610b5f90612baf565b80601f0160208091040260200160405190810160405280929190818152602001828054610b8b90612baf565b8015610bd85780601f10610bad57610100808354040283529160200191610bd8565b820191906000526020600020905b815481529060010190602001808311610bbb57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610c47576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b610cb7611468565b73ffffffffffffffffffffffffffffffffffffffff16610cd5610d37565b73ffffffffffffffffffffffffffffffffffffffff1614610d2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2290612e75565b60405180910390fd5b610d356000611c88565b565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060038054610d7090612baf565b80601f0160208091040260200160405190810160405280929190818152602001828054610d9c90612baf565b8015610de95780601f10610dbe57610100808354040283529160200191610de9565b820191906000526020600020905b815481529060010190602001808311610dcc57829003601f168201915b5050505050905090565b610dfb611468565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e5f576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060076000610e6c611468565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610f19611468565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610f5e91906125bb565b60405180910390a35050565b610f72611468565b73ffffffffffffffffffffffffffffffffffffffff16610f90610d37565b73ffffffffffffffffffffffffffffffffffffffff1614610fe6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdd90612e75565b60405180910390fd5b6000610ff0611468565b73ffffffffffffffffffffffffffffffffffffffff164760405161101390612ec6565b60006040518083038185875af1925050503d8060008114611050576040519150601f19603f3d011682016040523d82523d6000602084013e611055565b606091505b5050905080611099576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109090612f27565b60405180910390fd5b50565b6110a7848484611527565b6110c68373ffffffffffffffffffffffffffffffffffffffff16611d4e565b80156110db57506110d984848484611d71565b155b15611112576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b600a5481565b60606111298261141a565b611168576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115f90612f93565b60405180910390fd5b600961117383611ec1565b604051602001611184929190613083565b6040516020818303038152906040529050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611236611468565b73ffffffffffffffffffffffffffffffffffffffff16611254610d37565b73ffffffffffffffffffffffffffffffffffffffff16146112aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a190612e75565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611319576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131090613119565b60405180910390fd5b61132281611c88565b50565b600781565b611332611468565b73ffffffffffffffffffffffffffffffffffffffff16611350610d37565b73ffffffffffffffffffffffffffffffffffffffff16146113a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139d90612e75565b60405180910390fd5b80600a8190555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600081611425611522565b11158015611434575060005482105b8015611461575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600090565b6000611532826119f9565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461159d576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff166115be611468565b73ffffffffffffffffffffffffffffffffffffffff1614806115ed57506115ec856115e7611468565b61119a565b5b8061163257506115fb611468565b73ffffffffffffffffffffffffffffffffffffffff1661161a84610783565b73ffffffffffffffffffffffffffffffffffffffff16145b90508061166b576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036116d1576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116de8585856001612021565b6116ea60008487611470565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361196957600054821461196857878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46119d48585856001612027565b5050505050565b6119f582826040518060200160405280600081525061202d565b5050565b611a01612473565b600082905080611a0f611522565b11158015611a1e575060005481105b15611c51576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151611c4f57600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611b33578092505050611c83565b5b600115611c4e57818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611c49578092505050611c83565b611b34565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611d97611468565b8786866040518563ffffffff1660e01b8152600401611db9949392919061318e565b6020604051808303816000875af1925050508015611df557506040513d601f19601f82011682018060405250810190611df291906131ef565b60015b611e6e573d8060008114611e25576040519150601f19603f3d011682016040523d82523d6000602084013e611e2a565b606091505b506000815103611e66576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b606060008203611f08576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061201c565b600082905060005b60008214611f3a578080611f239061321c565b915050600a82611f339190613293565b9150611f10565b60008167ffffffffffffffff811115611f5657611f5561280f565b5b6040519080825280601f01601f191660200182016040528015611f885781602001600182028036833780820191505090505b5090505b6000851461201557600182611fa191906132c4565b9150600a85611fb091906132f8565b6030611fbc9190612c0f565b60f81b818381518110611fd257611fd1613329565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561200e9190613293565b9450611f8c565b8093505050505b919050565b50505050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612099576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600083036120d3576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120e06000858386612021565b82600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555082600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000819050600084820190506122a18673ffffffffffffffffffffffffffffffffffffffff16611d4e565b15612366575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46123166000878480600101955087611d71565b61234c576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8082036122a757826000541461236157600080fd5b6123d1565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808203612367575b8160008190555050506123e76000858386612027565b50505050565b8280546123f990612baf565b90600052602060002090601f01602090048101928261241b5760008555612462565b82601f1061243457805160ff1916838001178555612462565b82800160010185558215612462579182015b82811115612461578251825591602001919060010190612446565b5b50905061246f91906124b6565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b808211156124cf5760008160009055506001016124b7565b5090565b6000819050919050565b6124e6816124d3565b82525050565b600060208201905061250160008301846124dd565b92915050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6125508161251b565b811461255b57600080fd5b50565b60008135905061256d81612547565b92915050565b60006020828403121561258957612588612511565b5b60006125978482850161255e565b91505092915050565b60008115159050919050565b6125b5816125a0565b82525050565b60006020820190506125d060008301846125ac565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156126105780820151818401526020810190506125f5565b8381111561261f576000848401525b50505050565b6000601f19601f8301169050919050565b6000612641826125d6565b61264b81856125e1565b935061265b8185602086016125f2565b61266481612625565b840191505092915050565b600060208201905081810360008301526126898184612636565b905092915050565b61269a816124d3565b81146126a557600080fd5b50565b6000813590506126b781612691565b92915050565b6000602082840312156126d3576126d2612511565b5b60006126e1848285016126a8565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612715826126ea565b9050919050565b6127258161270a565b82525050565b6000602082019050612740600083018461271c565b92915050565b61274f8161270a565b811461275a57600080fd5b50565b60008135905061276c81612746565b92915050565b6000806040838503121561278957612788612511565b5b60006127978582860161275d565b92505060206127a8858286016126a8565b9150509250929050565b6000806000606084860312156127cb576127ca612511565b5b60006127d98682870161275d565b93505060206127ea8682870161275d565b92505060406127fb868287016126a8565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61284782612625565b810181811067ffffffffffffffff821117156128665761286561280f565b5b80604052505050565b6000612879612507565b9050612885828261283e565b919050565b600067ffffffffffffffff8211156128a5576128a461280f565b5b6128ae82612625565b9050602081019050919050565b82818337600083830152505050565b60006128dd6128d88461288a565b61286f565b9050828152602081018484840111156128f9576128f861280a565b5b6129048482856128bb565b509392505050565b600082601f83011261292157612920612805565b5b81356129318482602086016128ca565b91505092915050565b6000602082840312156129505761294f612511565b5b600082013567ffffffffffffffff81111561296e5761296d612516565b5b61297a8482850161290c565b91505092915050565b60006020828403121561299957612998612511565b5b60006129a78482850161275d565b91505092915050565b6129b9816125a0565b81146129c457600080fd5b50565b6000813590506129d6816129b0565b92915050565b600080604083850312156129f3576129f2612511565b5b6000612a018582860161275d565b9250506020612a12858286016129c7565b9150509250929050565b600067ffffffffffffffff821115612a3757612a3661280f565b5b612a4082612625565b9050602081019050919050565b6000612a60612a5b84612a1c565b61286f565b905082815260208101848484011115612a7c57612a7b61280a565b5b612a878482856128bb565b509392505050565b600082601f830112612aa457612aa3612805565b5b8135612ab4848260208601612a4d565b91505092915050565b60008060008060808587031215612ad757612ad6612511565b5b6000612ae58782880161275d565b9450506020612af68782880161275d565b9350506040612b07878288016126a8565b925050606085013567ffffffffffffffff811115612b2857612b27612516565b5b612b3487828801612a8f565b91505092959194509250565b60008060408385031215612b5757612b56612511565b5b6000612b658582860161275d565b9250506020612b768582860161275d565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612bc757607f821691505b602082108103612bda57612bd9612b80565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612c1a826124d3565b9150612c25836124d3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612c5a57612c59612be0565b5b828201905092915050565b7f45786365646573206d617820737570706c792e00000000000000000000000000600082015250565b6000612c9b6013836125e1565b9150612ca682612c65565b602082019050919050565b60006020820190508181036000830152612cca81612c8e565b9050919050565b7f45786365656473206d617820706572207472616e73616374696f6e2e00000000600082015250565b6000612d07601c836125e1565b9150612d1282612cd1565b602082019050919050565b60006020820190508181036000830152612d3681612cfa565b9050919050565b6000612d48826124d3565b9150612d53836124d3565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612d8c57612d8b612be0565b5b828202905092915050565b7f416d6f756e742073656e74206c657373207468616e2074686520636f7374206f60008201527f66206d696e74696e67204e465428732900000000000000000000000000000000602082015250565b6000612df36030836125e1565b9150612dfe82612d97565b604082019050919050565b60006020820190508181036000830152612e2281612de6565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612e5f6020836125e1565b9150612e6a82612e29565b602082019050919050565b60006020820190508181036000830152612e8e81612e52565b9050919050565b600081905092915050565b50565b6000612eb0600083612e95565b9150612ebb82612ea0565b600082019050919050565b6000612ed182612ea3565b9150819050919050565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b6000612f116010836125e1565b9150612f1c82612edb565b602082019050919050565b60006020820190508181036000830152612f4081612f04565b9050919050565b7f546f6b656e20646f6573206e6f742065786973742e0000000000000000000000600082015250565b6000612f7d6015836125e1565b9150612f8882612f47565b602082019050919050565b60006020820190508181036000830152612fac81612f70565b9050919050565b600081905092915050565b60008190508160005260206000209050919050565b60008154612fe081612baf565b612fea8186612fb3565b94506001821660008114613005576001811461301657613049565b60ff19831686528186019350613049565b61301f85612fbe565b60005b8381101561304157815481890152600182019150602081019050613022565b838801955050505b50505092915050565b600061305d826125d6565b6130678185612fb3565b93506130778185602086016125f2565b80840191505092915050565b600061308f8285612fd3565b915061309b8284613052565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006131036026836125e1565b915061310e826130a7565b604082019050919050565b60006020820190508181036000830152613132816130f6565b9050919050565b600081519050919050565b600082825260208201905092915050565b600061316082613139565b61316a8185613144565b935061317a8185602086016125f2565b61318381612625565b840191505092915050565b60006080820190506131a3600083018761271c565b6131b0602083018661271c565b6131bd60408301856124dd565b81810360608301526131cf8184613155565b905095945050505050565b6000815190506131e981612547565b92915050565b60006020828403121561320557613204612511565b5b6000613213848285016131da565b91505092915050565b6000613227826124d3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361325957613258612be0565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061329e826124d3565b91506132a9836124d3565b9250826132b9576132b8613264565b5b828204905092915050565b60006132cf826124d3565b91506132da836124d3565b9250828210156132ed576132ec612be0565b5b828203905092915050565b6000613303826124d3565b915061330e836124d3565b92508261331e5761331d613264565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea264697066735822122039bbb48e059dda947ca83f8c6260cdb8aa5141f641cccf71ed2c7771290ab91164736f6c634300080d003368747470733a2f2f7472697070696e706978656c6170652e636f6d2f6d657461646174612f

Deployed Bytecode

0x6080604052600436106101815760003560e01c806370a08231116100d1578063b88d4fde1161008a578063e985e9c511610064578063e985e9c51461054f578063f2fde38b1461058c578063f43a22dc146105b5578063f4a0a528146105e057610181565b8063b88d4fde146104be578063c002d23d146104e7578063c87b56dd1461051257610181565b806370a08231146103d4578063715018a6146104115780638da5cb5b1461042857806395d89b4114610453578063a22cb4651461047e578063ac446002146104a757610181565b806323b872dd1161013e57806342842e0e1161011857806342842e0e1461031a57806355f804b3146103435780636352211e1461036c5780636c0360eb146103a957610181565b806323b872dd146102aa5780632db11544146102d357806332cb6b0c146102ef57610181565b8063017184d91461018657806301ffc9a7146101b157806306fdde03146101ee578063081812fc14610219578063095ea7b31461025657806318160ddd1461027f575b600080fd5b34801561019257600080fd5b5061019b610609565b6040516101a891906124ec565b60405180910390f35b3480156101bd57600080fd5b506101d860048036038101906101d39190612573565b61060f565b6040516101e591906125bb565b60405180910390f35b3480156101fa57600080fd5b506102036106f1565b604051610210919061266f565b60405180910390f35b34801561022557600080fd5b50610240600480360381019061023b91906126bd565b610783565b60405161024d919061272b565b60405180910390f35b34801561026257600080fd5b5061027d60048036038101906102789190612772565b6107ff565b005b34801561028b57600080fd5b50610294610909565b6040516102a191906124ec565b60405180910390f35b3480156102b657600080fd5b506102d160048036038101906102cc91906127b2565b610920565b005b6102ed60048036038101906102e891906126bd565b610930565b005b3480156102fb57600080fd5b50610304610a80565b60405161031191906124ec565b60405180910390f35b34801561032657600080fd5b50610341600480360381019061033c91906127b2565b610a86565b005b34801561034f57600080fd5b5061036a6004803603810190610365919061293a565b610aa6565b005b34801561037857600080fd5b50610393600480360381019061038e91906126bd565b610b3c565b6040516103a0919061272b565b60405180910390f35b3480156103b557600080fd5b506103be610b52565b6040516103cb919061266f565b60405180910390f35b3480156103e057600080fd5b506103fb60048036038101906103f69190612983565b610be0565b60405161040891906124ec565b60405180910390f35b34801561041d57600080fd5b50610426610caf565b005b34801561043457600080fd5b5061043d610d37565b60405161044a919061272b565b60405180910390f35b34801561045f57600080fd5b50610468610d61565b604051610475919061266f565b60405180910390f35b34801561048a57600080fd5b506104a560048036038101906104a091906129dc565b610df3565b005b3480156104b357600080fd5b506104bc610f6a565b005b3480156104ca57600080fd5b506104e560048036038101906104e09190612abd565b61109c565b005b3480156104f357600080fd5b506104fc611118565b60405161050991906124ec565b60405180910390f35b34801561051e57600080fd5b50610539600480360381019061053491906126bd565b61111e565b604051610546919061266f565b60405180910390f35b34801561055b57600080fd5b5061057660048036038101906105719190612b40565b61119a565b60405161058391906125bb565b60405180910390f35b34801561059857600080fd5b506105b360048036038101906105ae9190612983565b61122e565b005b3480156105c157600080fd5b506105ca611325565b6040516105d791906124ec565b60405180910390f35b3480156105ec57600080fd5b50610607600480360381019061060291906126bd565b61132a565b005b6103e881565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106da57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106ea57506106e9826113b0565b5b9050919050565b60606002805461070090612baf565b80601f016020809104026020016040519081016040528092919081815260200182805461072c90612baf565b80156107795780601f1061074e57610100808354040283529160200191610779565b820191906000526020600020905b81548152906001019060200180831161075c57829003601f168201915b5050505050905090565b600061078e8261141a565b6107c4576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061080a82610b3c565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610871576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610890611468565b73ffffffffffffffffffffffffffffffffffffffff16141580156108c257506108c0816108bb611468565b61119a565b155b156108f9576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610904838383611470565b505050565b6000610913611522565b6001546000540303905090565b61092b838383611527565b505050565b6115b38161093c610909565b6109469190612c0f565b1115610987576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097e90612cb1565b60405180910390fd5b60078111156109cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c290612d1d565b60405180910390fd5b6109d3610d37565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015610a1657506103e8610a14610909565b115b15610a6c57600a5481610a299190612d3d565b341015610a6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6290612e09565b60405180910390fd5b5b610a7d610a77611468565b826119db565b50565b6115b381565b610aa18383836040518060200160405280600081525061109c565b505050565b610aae611468565b73ffffffffffffffffffffffffffffffffffffffff16610acc610d37565b73ffffffffffffffffffffffffffffffffffffffff1614610b22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1990612e75565b60405180910390fd5b8060099080519060200190610b389291906123ed565b5050565b6000610b47826119f9565b600001519050919050565b60098054610b5f90612baf565b80601f0160208091040260200160405190810160405280929190818152602001828054610b8b90612baf565b8015610bd85780601f10610bad57610100808354040283529160200191610bd8565b820191906000526020600020905b815481529060010190602001808311610bbb57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610c47576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b610cb7611468565b73ffffffffffffffffffffffffffffffffffffffff16610cd5610d37565b73ffffffffffffffffffffffffffffffffffffffff1614610d2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2290612e75565b60405180910390fd5b610d356000611c88565b565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060038054610d7090612baf565b80601f0160208091040260200160405190810160405280929190818152602001828054610d9c90612baf565b8015610de95780601f10610dbe57610100808354040283529160200191610de9565b820191906000526020600020905b815481529060010190602001808311610dcc57829003601f168201915b5050505050905090565b610dfb611468565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e5f576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060076000610e6c611468565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610f19611468565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610f5e91906125bb565b60405180910390a35050565b610f72611468565b73ffffffffffffffffffffffffffffffffffffffff16610f90610d37565b73ffffffffffffffffffffffffffffffffffffffff1614610fe6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdd90612e75565b60405180910390fd5b6000610ff0611468565b73ffffffffffffffffffffffffffffffffffffffff164760405161101390612ec6565b60006040518083038185875af1925050503d8060008114611050576040519150601f19603f3d011682016040523d82523d6000602084013e611055565b606091505b5050905080611099576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109090612f27565b60405180910390fd5b50565b6110a7848484611527565b6110c68373ffffffffffffffffffffffffffffffffffffffff16611d4e565b80156110db57506110d984848484611d71565b155b15611112576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b600a5481565b60606111298261141a565b611168576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115f90612f93565b60405180910390fd5b600961117383611ec1565b604051602001611184929190613083565b6040516020818303038152906040529050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611236611468565b73ffffffffffffffffffffffffffffffffffffffff16611254610d37565b73ffffffffffffffffffffffffffffffffffffffff16146112aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a190612e75565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611319576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131090613119565b60405180910390fd5b61132281611c88565b50565b600781565b611332611468565b73ffffffffffffffffffffffffffffffffffffffff16611350610d37565b73ffffffffffffffffffffffffffffffffffffffff16146113a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139d90612e75565b60405180910390fd5b80600a8190555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600081611425611522565b11158015611434575060005482105b8015611461575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600090565b6000611532826119f9565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461159d576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff166115be611468565b73ffffffffffffffffffffffffffffffffffffffff1614806115ed57506115ec856115e7611468565b61119a565b5b8061163257506115fb611468565b73ffffffffffffffffffffffffffffffffffffffff1661161a84610783565b73ffffffffffffffffffffffffffffffffffffffff16145b90508061166b576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036116d1576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116de8585856001612021565b6116ea60008487611470565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361196957600054821461196857878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46119d48585856001612027565b5050505050565b6119f582826040518060200160405280600081525061202d565b5050565b611a01612473565b600082905080611a0f611522565b11158015611a1e575060005481105b15611c51576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151611c4f57600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611b33578092505050611c83565b5b600115611c4e57818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611c49578092505050611c83565b611b34565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611d97611468565b8786866040518563ffffffff1660e01b8152600401611db9949392919061318e565b6020604051808303816000875af1925050508015611df557506040513d601f19601f82011682018060405250810190611df291906131ef565b60015b611e6e573d8060008114611e25576040519150601f19603f3d011682016040523d82523d6000602084013e611e2a565b606091505b506000815103611e66576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b606060008203611f08576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061201c565b600082905060005b60008214611f3a578080611f239061321c565b915050600a82611f339190613293565b9150611f10565b60008167ffffffffffffffff811115611f5657611f5561280f565b5b6040519080825280601f01601f191660200182016040528015611f885781602001600182028036833780820191505090505b5090505b6000851461201557600182611fa191906132c4565b9150600a85611fb091906132f8565b6030611fbc9190612c0f565b60f81b818381518110611fd257611fd1613329565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561200e9190613293565b9450611f8c565b8093505050505b919050565b50505050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612099576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600083036120d3576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120e06000858386612021565b82600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555082600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000819050600084820190506122a18673ffffffffffffffffffffffffffffffffffffffff16611d4e565b15612366575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46123166000878480600101955087611d71565b61234c576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8082036122a757826000541461236157600080fd5b6123d1565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808203612367575b8160008190555050506123e76000858386612027565b50505050565b8280546123f990612baf565b90600052602060002090601f01602090048101928261241b5760008555612462565b82601f1061243457805160ff1916838001178555612462565b82800160010185558215612462579182015b82811115612461578251825591602001919060010190612446565b5b50905061246f91906124b6565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b808211156124cf5760008160009055506001016124b7565b5090565b6000819050919050565b6124e6816124d3565b82525050565b600060208201905061250160008301846124dd565b92915050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6125508161251b565b811461255b57600080fd5b50565b60008135905061256d81612547565b92915050565b60006020828403121561258957612588612511565b5b60006125978482850161255e565b91505092915050565b60008115159050919050565b6125b5816125a0565b82525050565b60006020820190506125d060008301846125ac565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156126105780820151818401526020810190506125f5565b8381111561261f576000848401525b50505050565b6000601f19601f8301169050919050565b6000612641826125d6565b61264b81856125e1565b935061265b8185602086016125f2565b61266481612625565b840191505092915050565b600060208201905081810360008301526126898184612636565b905092915050565b61269a816124d3565b81146126a557600080fd5b50565b6000813590506126b781612691565b92915050565b6000602082840312156126d3576126d2612511565b5b60006126e1848285016126a8565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612715826126ea565b9050919050565b6127258161270a565b82525050565b6000602082019050612740600083018461271c565b92915050565b61274f8161270a565b811461275a57600080fd5b50565b60008135905061276c81612746565b92915050565b6000806040838503121561278957612788612511565b5b60006127978582860161275d565b92505060206127a8858286016126a8565b9150509250929050565b6000806000606084860312156127cb576127ca612511565b5b60006127d98682870161275d565b93505060206127ea8682870161275d565b92505060406127fb868287016126a8565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61284782612625565b810181811067ffffffffffffffff821117156128665761286561280f565b5b80604052505050565b6000612879612507565b9050612885828261283e565b919050565b600067ffffffffffffffff8211156128a5576128a461280f565b5b6128ae82612625565b9050602081019050919050565b82818337600083830152505050565b60006128dd6128d88461288a565b61286f565b9050828152602081018484840111156128f9576128f861280a565b5b6129048482856128bb565b509392505050565b600082601f83011261292157612920612805565b5b81356129318482602086016128ca565b91505092915050565b6000602082840312156129505761294f612511565b5b600082013567ffffffffffffffff81111561296e5761296d612516565b5b61297a8482850161290c565b91505092915050565b60006020828403121561299957612998612511565b5b60006129a78482850161275d565b91505092915050565b6129b9816125a0565b81146129c457600080fd5b50565b6000813590506129d6816129b0565b92915050565b600080604083850312156129f3576129f2612511565b5b6000612a018582860161275d565b9250506020612a12858286016129c7565b9150509250929050565b600067ffffffffffffffff821115612a3757612a3661280f565b5b612a4082612625565b9050602081019050919050565b6000612a60612a5b84612a1c565b61286f565b905082815260208101848484011115612a7c57612a7b61280a565b5b612a878482856128bb565b509392505050565b600082601f830112612aa457612aa3612805565b5b8135612ab4848260208601612a4d565b91505092915050565b60008060008060808587031215612ad757612ad6612511565b5b6000612ae58782880161275d565b9450506020612af68782880161275d565b9350506040612b07878288016126a8565b925050606085013567ffffffffffffffff811115612b2857612b27612516565b5b612b3487828801612a8f565b91505092959194509250565b60008060408385031215612b5757612b56612511565b5b6000612b658582860161275d565b9250506020612b768582860161275d565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612bc757607f821691505b602082108103612bda57612bd9612b80565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612c1a826124d3565b9150612c25836124d3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612c5a57612c59612be0565b5b828201905092915050565b7f45786365646573206d617820737570706c792e00000000000000000000000000600082015250565b6000612c9b6013836125e1565b9150612ca682612c65565b602082019050919050565b60006020820190508181036000830152612cca81612c8e565b9050919050565b7f45786365656473206d617820706572207472616e73616374696f6e2e00000000600082015250565b6000612d07601c836125e1565b9150612d1282612cd1565b602082019050919050565b60006020820190508181036000830152612d3681612cfa565b9050919050565b6000612d48826124d3565b9150612d53836124d3565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612d8c57612d8b612be0565b5b828202905092915050565b7f416d6f756e742073656e74206c657373207468616e2074686520636f7374206f60008201527f66206d696e74696e67204e465428732900000000000000000000000000000000602082015250565b6000612df36030836125e1565b9150612dfe82612d97565b604082019050919050565b60006020820190508181036000830152612e2281612de6565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612e5f6020836125e1565b9150612e6a82612e29565b602082019050919050565b60006020820190508181036000830152612e8e81612e52565b9050919050565b600081905092915050565b50565b6000612eb0600083612e95565b9150612ebb82612ea0565b600082019050919050565b6000612ed182612ea3565b9150819050919050565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b6000612f116010836125e1565b9150612f1c82612edb565b602082019050919050565b60006020820190508181036000830152612f4081612f04565b9050919050565b7f546f6b656e20646f6573206e6f742065786973742e0000000000000000000000600082015250565b6000612f7d6015836125e1565b9150612f8882612f47565b602082019050919050565b60006020820190508181036000830152612fac81612f70565b9050919050565b600081905092915050565b60008190508160005260206000209050919050565b60008154612fe081612baf565b612fea8186612fb3565b94506001821660008114613005576001811461301657613049565b60ff19831686528186019350613049565b61301f85612fbe565b60005b8381101561304157815481890152600182019150602081019050613022565b838801955050505b50505092915050565b600061305d826125d6565b6130678185612fb3565b93506130778185602086016125f2565b80840191505092915050565b600061308f8285612fd3565b915061309b8284613052565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006131036026836125e1565b915061310e826130a7565b604082019050919050565b60006020820190508181036000830152613132816130f6565b9050919050565b600081519050919050565b600082825260208201905092915050565b600061316082613139565b61316a8185613144565b935061317a8185602086016125f2565b61318381612625565b840191505092915050565b60006080820190506131a3600083018761271c565b6131b0602083018661271c565b6131bd60408301856124dd565b81810360608301526131cf8184613155565b905095945050505050565b6000815190506131e981612547565b92915050565b60006020828403121561320557613204612511565b5b6000613213848285016131da565b91505092915050565b6000613227826124d3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361325957613258612be0565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061329e826124d3565b91506132a9836124d3565b9250826132b9576132b8613264565b5b828204905092915050565b60006132cf826124d3565b91506132da836124d3565b9250828210156132ed576132ec612be0565b5b828203905092915050565b6000613303826124d3565b915061330e836124d3565b92508261331e5761331d613264565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea264697066735822122039bbb48e059dda947ca83f8c6260cdb8aa5141f641cccf71ed2c7771290ab91164736f6c634300080d0033

Deployed Bytecode Sourcemap

45926:1473:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46193:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24506:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27619:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29122:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28685:371;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23755:303;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29987:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46769:439;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46054:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30228:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46558:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27427:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45980:63;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24875:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45031:103;;;;;;;;;;;;;:::i;:::-;;44380:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27788:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29398:287;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47216:180;;;;;;;;;;;;;:::i;:::-;;30484:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46102:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46320:230;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29756:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45289:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46148:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46666:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46193:42;46231:4;46193:42;:::o;24506:305::-;24608:4;24660:25;24645:40;;;:11;:40;;;;:105;;;;24717:33;24702:48;;;:11;:48;;;;24645:105;:158;;;;24767:36;24791:11;24767:23;:36::i;:::-;24645:158;24625:178;;24506:305;;;:::o;27619:100::-;27673:13;27706:5;27699:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27619:100;:::o;29122:204::-;29190:7;29215:16;29223:7;29215;:16::i;:::-;29210:64;;29240:34;;;;;;;;;;;;;;29210:64;29294:15;:24;29310:7;29294:24;;;;;;;;;;;;;;;;;;;;;29287:31;;29122:204;;;:::o;28685:371::-;28758:13;28774:24;28790:7;28774:15;:24::i;:::-;28758:40;;28819:5;28813:11;;:2;:11;;;28809:48;;28833:24;;;;;;;;;;;;;;28809:48;28890:5;28874:21;;:12;:10;:12::i;:::-;:21;;;;:63;;;;;28900:37;28917:5;28924:12;:10;:12::i;:::-;28900:16;:37::i;:::-;28899:38;28874:63;28870:138;;;28961:35;;;;;;;;;;;;;;28870:138;29020:28;29029:2;29033:7;29042:5;29020:8;:28::i;:::-;28747:309;28685:371;;:::o;23755:303::-;23799:7;24024:15;:13;:15::i;:::-;24009:12;;23993:13;;:28;:46;23986:53;;23755:303;:::o;29987:170::-;30121:28;30131:4;30137:2;30141:7;30121:9;:28::i;:::-;29987:170;;;:::o;46769:439::-;46091:4;46856:5;46840:13;:11;:13::i;:::-;:21;;;;:::i;:::-;:35;;46832:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;46185:1;46918:5;:19;;46910:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;46999:7;:5;:7::i;:::-;46985:21;;:10;:21;;;;:54;;;;;46231:4;47011:13;:11;:13::i;:::-;:27;46985:54;46981:179;;;47085:10;;47077:5;:18;;;;:::i;:::-;47064:9;:31;;47056:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;46981:179;47170:30;47180:12;:10;:12::i;:::-;47194:5;47170:9;:30::i;:::-;46769:439;:::o;46054:41::-;46091:4;46054:41;:::o;30228:185::-;30366:39;30383:4;30389:2;30393:7;30366:39;;;;;;;;;;;;:16;:39::i;:::-;30228:185;;;:::o;46558:100::-;44611:12;:10;:12::i;:::-;44600:23;;:7;:5;:7::i;:::-;:23;;;44592:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46642:8:::1;46632:7;:18;;;;;;;;;;;;:::i;:::-;;46558:100:::0;:::o;27427:125::-;27491:7;27518:21;27531:7;27518:12;:21::i;:::-;:26;;;27511:33;;27427:125;;;:::o;45980:63::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24875:206::-;24939:7;24980:1;24963:19;;:5;:19;;;24959:60;;24991:28;;;;;;;;;;;;;;24959:60;25045:12;:19;25058:5;25045:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;25037:36;;25030:43;;24875:206;;;:::o;45031:103::-;44611:12;:10;:12::i;:::-;44600:23;;:7;:5;:7::i;:::-;:23;;;44592:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45096:30:::1;45123:1;45096:18;:30::i;:::-;45031:103::o:0;44380:87::-;44426:7;44453:6;;;;;;;;;;;44446:13;;44380:87;:::o;27788:104::-;27844:13;27877:7;27870:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27788:104;:::o;29398:287::-;29509:12;:10;:12::i;:::-;29497:24;;:8;:24;;;29493:54;;29530:17;;;;;;;;;;;;;;29493:54;29605:8;29560:18;:32;29579:12;:10;:12::i;:::-;29560:32;;;;;;;;;;;;;;;:42;29593:8;29560:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;29658:8;29629:48;;29644:12;:10;:12::i;:::-;29629:48;;;29668:8;29629:48;;;;;;:::i;:::-;;;;;;;;29398:287;;:::o;47216:180::-;44611:12;:10;:12::i;:::-;44600:23;;:7;:5;:7::i;:::-;:23;;;44592:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47272:12:::1;47290;:10;:12::i;:::-;:17;;47315:21;47290:51;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47271:70;;;47360:7;47352:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;47260:136;47216:180::o:0;30484:369::-;30651:28;30661:4;30667:2;30671:7;30651:9;:28::i;:::-;30694:15;:2;:13;;;:15::i;:::-;:76;;;;;30714:56;30745:4;30751:2;30755:7;30764:5;30714:30;:56::i;:::-;30713:57;30694:76;30690:156;;;30794:40;;;;;;;;;;;;;;30690:156;30484:369;;;;:::o;46102:39::-;;;;:::o;46320:230::-;46386:13;46420:17;46428:8;46420:7;:17::i;:::-;46412:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;46505:7;46514:26;46531:8;46514:16;:26::i;:::-;46488:53;;;;;;;;;:::i;:::-;;;;;;;;;;;;;46474:68;;46320:230;;;:::o;29756:164::-;29853:4;29877:18;:25;29896:5;29877:25;;;;;;;;;;;;;;;:35;29903:8;29877:35;;;;;;;;;;;;;;;;;;;;;;;;;29870:42;;29756:164;;;;:::o;45289:201::-;44611:12;:10;:12::i;:::-;44600:23;;:7;:5;:7::i;:::-;:23;;;44592:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45398:1:::1;45378:22;;:8;:22;;::::0;45370:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;45454:28;45473:8;45454:18;:28::i;:::-;45289:201:::0;:::o;46148:38::-;46185:1;46148:38;:::o;46666:95::-;44611:12;:10;:12::i;:::-;44600:23;;:7;:5;:7::i;:::-;:23;;;44592:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46747:6:::1;46734:10;:19;;;;46666:95:::0;:::o;13496:157::-;13581:4;13620:25;13605:40;;;:11;:40;;;;13598:47;;13496:157;;;:::o;31108:174::-;31165:4;31208:7;31189:15;:13;:15::i;:::-;:26;;:53;;;;;31229:13;;31219:7;:23;31189:53;:85;;;;;31247:11;:20;31259:7;31247:20;;;;;;;;;;;:27;;;;;;;;;;;;31246:28;31189:85;31182:92;;31108:174;;;:::o;20029:98::-;20082:7;20109:10;20102:17;;20029:98;:::o;40334:196::-;40476:2;40449:15;:24;40465:7;40449:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;40514:7;40510:2;40494:28;;40503:5;40494:28;;;;;;;;;;;;40334:196;;;:::o;23529:92::-;23585:7;23529:92;:::o;35282:2130::-;35397:35;35435:21;35448:7;35435:12;:21::i;:::-;35397:59;;35495:4;35473:26;;:13;:18;;;:26;;;35469:67;;35508:28;;;;;;;;;;;;;;35469:67;35549:22;35591:4;35575:20;;:12;:10;:12::i;:::-;:20;;;:73;;;;35612:36;35629:4;35635:12;:10;:12::i;:::-;35612:16;:36::i;:::-;35575:73;:126;;;;35689:12;:10;:12::i;:::-;35665:36;;:20;35677:7;35665:11;:20::i;:::-;:36;;;35575:126;35549:153;;35720:17;35715:66;;35746:35;;;;;;;;;;;;;;35715:66;35810:1;35796:16;;:2;:16;;;35792:52;;35821:23;;;;;;;;;;;;;;35792:52;35857:43;35879:4;35885:2;35889:7;35898:1;35857:21;:43::i;:::-;35965:35;35982:1;35986:7;35995:4;35965:8;:35::i;:::-;36326:1;36296:12;:18;36309:4;36296:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36370:1;36342:12;:16;36355:2;36342:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36388:31;36422:11;:20;36434:7;36422:20;;;;;;;;;;;36388:54;;36473:2;36457:8;:13;;;:18;;;;;;;;;;;;;;;;;;36523:15;36490:8;:23;;;:49;;;;;;;;;;;;;;;;;;36791:19;36823:1;36813:7;:11;36791:33;;36839:31;36873:11;:24;36885:11;36873:24;;;;;;;;;;;36839:58;;36941:1;36916:27;;:8;:13;;;;;;;;;;;;:27;;;36912:384;;37126:13;;37111:11;:28;37107:174;;37180:4;37164:8;:13;;;:20;;;;;;;;;;;;;;;;;;37233:13;:28;;;37207:8;:23;;;:54;;;;;;;;;;;;;;;;;;37107:174;36912:384;36271:1036;;;37343:7;37339:2;37324:27;;37333:4;37324:27;;;;;;;;;;;;37362:42;37383:4;37389:2;37393:7;37402:1;37362:20;:42::i;:::-;35386:2026;;35282:2130;;;:::o;31366:104::-;31435:27;31445:2;31449:8;31435:27;;;;;;;;;;;;:9;:27::i;:::-;31366:104;;:::o;26256:1109::-;26318:21;;:::i;:::-;26352:12;26367:7;26352:22;;26435:4;26416:15;:13;:15::i;:::-;:23;;:47;;;;;26450:13;;26443:4;:20;26416:47;26412:886;;;26484:31;26518:11;:17;26530:4;26518:17;;;;;;;;;;;26484:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26559:9;:16;;;26554:729;;26630:1;26604:28;;:9;:14;;;:28;;;26600:101;;26668:9;26661:16;;;;;;26600:101;27003:261;27010:4;27003:261;;;27043:6;;;;;;;;27088:11;:17;27100:4;27088:17;;;;;;;;;;;27076:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27162:1;27136:28;;:9;:14;;;:28;;;27132:109;;27204:9;27197:16;;;;;;27132:109;27003:261;;;26554:729;26465:833;26412:886;27326:31;;;;;;;;;;;;;;26256:1109;;;;:::o;45650:191::-;45724:16;45743:6;;;;;;;;;;;45724:25;;45769:8;45760:6;;:17;;;;;;;;;;;;;;;;;;45824:8;45793:40;;45814:8;45793:40;;;;;;;;;;;;45713:128;45650:191;:::o;3390:326::-;3450:4;3707:1;3685:7;:19;;;:23;3678:30;;3390:326;;;:::o;41022:667::-;41185:4;41222:2;41206:36;;;41243:12;:10;:12::i;:::-;41257:4;41263:7;41272:5;41206:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;41202:480;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41457:1;41440:6;:13;:18;41436:235;;41486:40;;;;;;;;;;;;;;41436:235;41629:6;41623:13;41614:6;41610:2;41606:15;41599:38;41202:480;41335:45;;;41325:55;;;:6;:55;;;;41318:62;;;41022:667;;;;;;:::o;398:723::-;454:13;684:1;675:5;:10;671:53;;702:10;;;;;;;;;;;;;;;;;;;;;671:53;734:12;749:5;734:20;;765:14;790:78;805:1;797:4;:9;790:78;;823:8;;;;;:::i;:::-;;;;854:2;846:10;;;;;:::i;:::-;;;790:78;;;878:19;910:6;900:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;878:39;;928:154;944:1;935:5;:10;928:154;;972:1;962:11;;;;;:::i;:::-;;;1039:2;1031:5;:10;;;;:::i;:::-;1018:2;:24;;;;:::i;:::-;1005:39;;988:6;995;988:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1068:2;1059:11;;;;;:::i;:::-;;;928:154;;;1106:6;1092:21;;;;;398:723;;;;:::o;42337:159::-;;;;;:::o;43155:158::-;;;;;:::o;31844:1751::-;31967:20;31990:13;;31967:36;;32032:1;32018:16;;:2;:16;;;32014:48;;32043:19;;;;;;;;;;;;;;32014:48;32089:1;32077:8;:13;32073:44;;32099:18;;;;;;;;;;;;;;32073:44;32130:61;32160:1;32164:2;32168:12;32182:8;32130:21;:61::i;:::-;32503:8;32468:12;:16;32481:2;32468:16;;;;;;;;;;;;;;;:24;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32567:8;32527:12;:16;32540:2;32527:16;;;;;;;;;;;;;;;:29;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32626:2;32593:11;:25;32605:12;32593:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;32693:15;32643:11;:25;32655:12;32643:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;32726:20;32749:12;32726:35;;32776:11;32805:8;32790:12;:23;32776:37;;32834:15;:2;:13;;;:15::i;:::-;32830:633;;;32870:314;32926:12;32922:2;32901:38;;32918:1;32901:38;;;;;;;;;;;;32967:69;33006:1;33010:2;33014:14;;;;;;33030:5;32967:30;:69::i;:::-;32962:174;;33072:40;;;;;;;;;;;;;;32962:174;33179:3;33163:12;:19;32870:314;;33265:12;33248:13;;:29;33244:43;;33279:8;;;33244:43;32830:633;;;33328:120;33384:14;;;;;;33380:2;33359:40;;33376:1;33359:40;;;;;;;;;;;;33443:3;33427:12;:19;33328:120;;32830:633;33493:12;33477:13;:28;;;;32443:1074;;33527:60;33556:1;33560:2;33564:12;33578:8;33527:20;:60::i;:::-;31956:1639;31844:1751;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:75::-;475:6;508:2;502:9;492:19;;442:75;:::o;523:117::-;632:1;629;622:12;646:117;755:1;752;745:12;769:149;805:7;845:66;838:5;834:78;823:89;;769:149;;;:::o;924:120::-;996:23;1013:5;996:23;:::i;:::-;989:5;986:34;976:62;;1034:1;1031;1024:12;976:62;924:120;:::o;1050:137::-;1095:5;1133:6;1120:20;1111:29;;1149:32;1175:5;1149:32;:::i;:::-;1050:137;;;;:::o;1193:327::-;1251:6;1300:2;1288:9;1279:7;1275:23;1271:32;1268:119;;;1306:79;;:::i;:::-;1268:119;1426:1;1451:52;1495:7;1486:6;1475:9;1471:22;1451:52;:::i;:::-;1441:62;;1397:116;1193:327;;;;:::o;1526:90::-;1560:7;1603:5;1596:13;1589:21;1578:32;;1526:90;;;:::o;1622:109::-;1703:21;1718:5;1703:21;:::i;:::-;1698:3;1691:34;1622:109;;:::o;1737:210::-;1824:4;1862:2;1851:9;1847:18;1839:26;;1875:65;1937:1;1926:9;1922:17;1913:6;1875:65;:::i;:::-;1737:210;;;;:::o;1953:99::-;2005:6;2039:5;2033:12;2023:22;;1953:99;;;:::o;2058:169::-;2142:11;2176:6;2171:3;2164:19;2216:4;2211:3;2207:14;2192:29;;2058:169;;;;:::o;2233:307::-;2301:1;2311:113;2325:6;2322:1;2319:13;2311:113;;;2410:1;2405:3;2401:11;2395:18;2391:1;2386:3;2382:11;2375:39;2347:2;2344:1;2340:10;2335:15;;2311:113;;;2442:6;2439:1;2436:13;2433:101;;;2522:1;2513:6;2508:3;2504:16;2497:27;2433:101;2282:258;2233:307;;;:::o;2546:102::-;2587:6;2638:2;2634:7;2629:2;2622:5;2618:14;2614:28;2604:38;;2546:102;;;:::o;2654:364::-;2742:3;2770:39;2803:5;2770:39;:::i;:::-;2825:71;2889:6;2884:3;2825:71;:::i;:::-;2818:78;;2905:52;2950:6;2945:3;2938:4;2931:5;2927:16;2905:52;:::i;:::-;2982:29;3004:6;2982:29;:::i;:::-;2977:3;2973:39;2966:46;;2746:272;2654:364;;;;:::o;3024:313::-;3137:4;3175:2;3164:9;3160:18;3152:26;;3224:9;3218:4;3214:20;3210:1;3199:9;3195:17;3188:47;3252:78;3325:4;3316:6;3252:78;:::i;:::-;3244:86;;3024:313;;;;:::o;3343:122::-;3416:24;3434:5;3416:24;:::i;:::-;3409:5;3406:35;3396:63;;3455:1;3452;3445:12;3396:63;3343:122;:::o;3471:139::-;3517:5;3555:6;3542:20;3533:29;;3571:33;3598:5;3571:33;:::i;:::-;3471:139;;;;:::o;3616:329::-;3675:6;3724:2;3712:9;3703:7;3699:23;3695:32;3692:119;;;3730:79;;:::i;:::-;3692:119;3850:1;3875:53;3920:7;3911:6;3900:9;3896:22;3875:53;:::i;:::-;3865:63;;3821:117;3616:329;;;;:::o;3951:126::-;3988:7;4028:42;4021:5;4017:54;4006:65;;3951:126;;;:::o;4083:96::-;4120:7;4149:24;4167:5;4149:24;:::i;:::-;4138:35;;4083:96;;;:::o;4185:118::-;4272:24;4290:5;4272:24;:::i;:::-;4267:3;4260:37;4185:118;;:::o;4309:222::-;4402:4;4440:2;4429:9;4425:18;4417:26;;4453:71;4521:1;4510:9;4506:17;4497:6;4453:71;:::i;:::-;4309:222;;;;:::o;4537:122::-;4610:24;4628:5;4610:24;:::i;:::-;4603:5;4600:35;4590:63;;4649:1;4646;4639:12;4590:63;4537:122;:::o;4665:139::-;4711:5;4749:6;4736:20;4727:29;;4765:33;4792:5;4765:33;:::i;:::-;4665:139;;;;:::o;4810:474::-;4878:6;4886;4935:2;4923:9;4914:7;4910:23;4906:32;4903:119;;;4941:79;;:::i;:::-;4903:119;5061:1;5086:53;5131:7;5122:6;5111:9;5107:22;5086:53;:::i;:::-;5076:63;;5032:117;5188:2;5214:53;5259:7;5250:6;5239:9;5235:22;5214:53;:::i;:::-;5204:63;;5159:118;4810:474;;;;;:::o;5290:619::-;5367:6;5375;5383;5432:2;5420:9;5411:7;5407:23;5403:32;5400:119;;;5438:79;;:::i;:::-;5400:119;5558:1;5583:53;5628:7;5619:6;5608:9;5604:22;5583:53;:::i;:::-;5573:63;;5529:117;5685:2;5711:53;5756:7;5747:6;5736:9;5732:22;5711:53;:::i;:::-;5701:63;;5656:118;5813:2;5839:53;5884:7;5875:6;5864:9;5860:22;5839:53;:::i;:::-;5829:63;;5784:118;5290:619;;;;;:::o;5915:117::-;6024:1;6021;6014:12;6038:117;6147:1;6144;6137:12;6161:180;6209:77;6206:1;6199:88;6306:4;6303:1;6296:15;6330:4;6327:1;6320:15;6347:281;6430:27;6452:4;6430:27;:::i;:::-;6422:6;6418:40;6560:6;6548:10;6545:22;6524:18;6512:10;6509:34;6506:62;6503:88;;;6571:18;;:::i;:::-;6503:88;6611:10;6607:2;6600:22;6390:238;6347:281;;:::o;6634:129::-;6668:6;6695:20;;:::i;:::-;6685:30;;6724:33;6752:4;6744:6;6724:33;:::i;:::-;6634:129;;;:::o;6769:308::-;6831:4;6921:18;6913:6;6910:30;6907:56;;;6943:18;;:::i;:::-;6907:56;6981:29;7003:6;6981:29;:::i;:::-;6973:37;;7065:4;7059;7055:15;7047:23;;6769:308;;;:::o;7083:154::-;7167:6;7162:3;7157;7144:30;7229:1;7220:6;7215:3;7211:16;7204:27;7083:154;;;:::o;7243:412::-;7321:5;7346:66;7362:49;7404:6;7362:49;:::i;:::-;7346:66;:::i;:::-;7337:75;;7435:6;7428:5;7421:21;7473:4;7466:5;7462:16;7511:3;7502:6;7497:3;7493:16;7490:25;7487:112;;;7518:79;;:::i;:::-;7487:112;7608:41;7642:6;7637:3;7632;7608:41;:::i;:::-;7327:328;7243:412;;;;;:::o;7675:340::-;7731:5;7780:3;7773:4;7765:6;7761:17;7757:27;7747:122;;7788:79;;:::i;:::-;7747:122;7905:6;7892:20;7930:79;8005:3;7997:6;7990:4;7982:6;7978:17;7930:79;:::i;:::-;7921:88;;7737:278;7675:340;;;;:::o;8021:509::-;8090:6;8139:2;8127:9;8118:7;8114:23;8110:32;8107:119;;;8145:79;;:::i;:::-;8107:119;8293:1;8282:9;8278:17;8265:31;8323:18;8315:6;8312:30;8309:117;;;8345:79;;:::i;:::-;8309:117;8450:63;8505:7;8496:6;8485:9;8481:22;8450:63;:::i;:::-;8440:73;;8236:287;8021:509;;;;:::o;8536:329::-;8595:6;8644:2;8632:9;8623:7;8619:23;8615:32;8612:119;;;8650:79;;:::i;:::-;8612:119;8770:1;8795:53;8840:7;8831:6;8820:9;8816:22;8795:53;:::i;:::-;8785:63;;8741:117;8536:329;;;;:::o;8871:116::-;8941:21;8956:5;8941:21;:::i;:::-;8934:5;8931:32;8921:60;;8977:1;8974;8967:12;8921:60;8871:116;:::o;8993:133::-;9036:5;9074:6;9061:20;9052:29;;9090:30;9114:5;9090:30;:::i;:::-;8993:133;;;;:::o;9132:468::-;9197:6;9205;9254:2;9242:9;9233:7;9229:23;9225:32;9222:119;;;9260:79;;:::i;:::-;9222:119;9380:1;9405:53;9450:7;9441:6;9430:9;9426:22;9405:53;:::i;:::-;9395:63;;9351:117;9507:2;9533:50;9575:7;9566:6;9555:9;9551:22;9533:50;:::i;:::-;9523:60;;9478:115;9132:468;;;;;:::o;9606:307::-;9667:4;9757:18;9749:6;9746:30;9743:56;;;9779:18;;:::i;:::-;9743:56;9817:29;9839:6;9817:29;:::i;:::-;9809:37;;9901:4;9895;9891:15;9883:23;;9606:307;;;:::o;9919:410::-;9996:5;10021:65;10037:48;10078:6;10037:48;:::i;:::-;10021:65;:::i;:::-;10012:74;;10109:6;10102:5;10095:21;10147:4;10140:5;10136:16;10185:3;10176:6;10171:3;10167:16;10164:25;10161:112;;;10192:79;;:::i;:::-;10161:112;10282:41;10316:6;10311:3;10306;10282:41;:::i;:::-;10002:327;9919:410;;;;;:::o;10348:338::-;10403:5;10452:3;10445:4;10437:6;10433:17;10429:27;10419:122;;10460:79;;:::i;:::-;10419:122;10577:6;10564:20;10602:78;10676:3;10668:6;10661:4;10653:6;10649:17;10602:78;:::i;:::-;10593:87;;10409:277;10348:338;;;;:::o;10692:943::-;10787:6;10795;10803;10811;10860:3;10848:9;10839:7;10835:23;10831:33;10828:120;;;10867:79;;:::i;:::-;10828:120;10987:1;11012:53;11057:7;11048:6;11037:9;11033:22;11012:53;:::i;:::-;11002:63;;10958:117;11114:2;11140:53;11185:7;11176:6;11165:9;11161:22;11140:53;:::i;:::-;11130:63;;11085:118;11242:2;11268:53;11313:7;11304:6;11293:9;11289:22;11268:53;:::i;:::-;11258:63;;11213:118;11398:2;11387:9;11383:18;11370:32;11429:18;11421:6;11418:30;11415:117;;;11451:79;;:::i;:::-;11415:117;11556:62;11610:7;11601:6;11590:9;11586:22;11556:62;:::i;:::-;11546:72;;11341:287;10692:943;;;;;;;:::o;11641:474::-;11709:6;11717;11766:2;11754:9;11745:7;11741:23;11737:32;11734:119;;;11772:79;;:::i;:::-;11734:119;11892:1;11917:53;11962:7;11953:6;11942:9;11938:22;11917:53;:::i;:::-;11907:63;;11863:117;12019:2;12045:53;12090:7;12081:6;12070:9;12066:22;12045:53;:::i;:::-;12035:63;;11990:118;11641:474;;;;;:::o;12121:180::-;12169:77;12166:1;12159:88;12266:4;12263:1;12256:15;12290:4;12287:1;12280:15;12307:320;12351:6;12388:1;12382:4;12378:12;12368:22;;12435:1;12429:4;12425:12;12456:18;12446:81;;12512:4;12504:6;12500:17;12490:27;;12446:81;12574:2;12566:6;12563:14;12543:18;12540:38;12537:84;;12593:18;;:::i;:::-;12537:84;12358:269;12307:320;;;:::o;12633:180::-;12681:77;12678:1;12671:88;12778:4;12775:1;12768:15;12802:4;12799:1;12792:15;12819:305;12859:3;12878:20;12896:1;12878:20;:::i;:::-;12873:25;;12912:20;12930:1;12912:20;:::i;:::-;12907:25;;13066:1;12998:66;12994:74;12991:1;12988:81;12985:107;;;13072:18;;:::i;:::-;12985:107;13116:1;13113;13109:9;13102:16;;12819:305;;;;:::o;13130:169::-;13270:21;13266:1;13258:6;13254:14;13247:45;13130:169;:::o;13305:366::-;13447:3;13468:67;13532:2;13527:3;13468:67;:::i;:::-;13461:74;;13544:93;13633:3;13544:93;:::i;:::-;13662:2;13657:3;13653:12;13646:19;;13305:366;;;:::o;13677:419::-;13843:4;13881:2;13870:9;13866:18;13858:26;;13930:9;13924:4;13920:20;13916:1;13905:9;13901:17;13894:47;13958:131;14084:4;13958:131;:::i;:::-;13950:139;;13677:419;;;:::o;14102:178::-;14242:30;14238:1;14230:6;14226:14;14219:54;14102:178;:::o;14286:366::-;14428:3;14449:67;14513:2;14508:3;14449:67;:::i;:::-;14442:74;;14525:93;14614:3;14525:93;:::i;:::-;14643:2;14638:3;14634:12;14627:19;;14286:366;;;:::o;14658:419::-;14824:4;14862:2;14851:9;14847:18;14839:26;;14911:9;14905:4;14901:20;14897:1;14886:9;14882:17;14875:47;14939:131;15065:4;14939:131;:::i;:::-;14931:139;;14658:419;;;:::o;15083:348::-;15123:7;15146:20;15164:1;15146:20;:::i;:::-;15141:25;;15180:20;15198:1;15180:20;:::i;:::-;15175:25;;15368:1;15300:66;15296:74;15293:1;15290:81;15285:1;15278:9;15271:17;15267:105;15264:131;;;15375:18;;:::i;:::-;15264:131;15423:1;15420;15416:9;15405:20;;15083:348;;;;:::o;15437:235::-;15577:34;15573:1;15565:6;15561:14;15554:58;15646:18;15641:2;15633:6;15629:15;15622:43;15437:235;:::o;15678:366::-;15820:3;15841:67;15905:2;15900:3;15841:67;:::i;:::-;15834:74;;15917:93;16006:3;15917:93;:::i;:::-;16035:2;16030:3;16026:12;16019:19;;15678:366;;;:::o;16050:419::-;16216:4;16254:2;16243:9;16239:18;16231:26;;16303:9;16297:4;16293:20;16289:1;16278:9;16274:17;16267:47;16331:131;16457:4;16331:131;:::i;:::-;16323:139;;16050:419;;;:::o;16475:182::-;16615:34;16611:1;16603:6;16599:14;16592:58;16475:182;:::o;16663:366::-;16805:3;16826:67;16890:2;16885:3;16826:67;:::i;:::-;16819:74;;16902:93;16991:3;16902:93;:::i;:::-;17020:2;17015:3;17011:12;17004:19;;16663:366;;;:::o;17035:419::-;17201:4;17239:2;17228:9;17224:18;17216:26;;17288:9;17282:4;17278:20;17274:1;17263:9;17259:17;17252:47;17316:131;17442:4;17316:131;:::i;:::-;17308:139;;17035:419;;;:::o;17460:147::-;17561:11;17598:3;17583:18;;17460:147;;;;:::o;17613:114::-;;:::o;17733:398::-;17892:3;17913:83;17994:1;17989:3;17913:83;:::i;:::-;17906:90;;18005:93;18094:3;18005:93;:::i;:::-;18123:1;18118:3;18114:11;18107:18;;17733:398;;;:::o;18137:379::-;18321:3;18343:147;18486:3;18343:147;:::i;:::-;18336:154;;18507:3;18500:10;;18137:379;;;:::o;18522:166::-;18662:18;18658:1;18650:6;18646:14;18639:42;18522:166;:::o;18694:366::-;18836:3;18857:67;18921:2;18916:3;18857:67;:::i;:::-;18850:74;;18933:93;19022:3;18933:93;:::i;:::-;19051:2;19046:3;19042:12;19035:19;;18694:366;;;:::o;19066:419::-;19232:4;19270:2;19259:9;19255:18;19247:26;;19319:9;19313:4;19309:20;19305:1;19294:9;19290:17;19283:47;19347:131;19473:4;19347:131;:::i;:::-;19339:139;;19066:419;;;:::o;19491:171::-;19631:23;19627:1;19619:6;19615:14;19608:47;19491:171;:::o;19668:366::-;19810:3;19831:67;19895:2;19890:3;19831:67;:::i;:::-;19824:74;;19907:93;19996:3;19907:93;:::i;:::-;20025:2;20020:3;20016:12;20009:19;;19668:366;;;:::o;20040:419::-;20206:4;20244:2;20233:9;20229:18;20221:26;;20293:9;20287:4;20283:20;20279:1;20268:9;20264:17;20257:47;20321:131;20447:4;20321:131;:::i;:::-;20313:139;;20040:419;;;:::o;20465:148::-;20567:11;20604:3;20589:18;;20465:148;;;;:::o;20619:141::-;20668:4;20691:3;20683:11;;20714:3;20711:1;20704:14;20748:4;20745:1;20735:18;20727:26;;20619:141;;;:::o;20790:845::-;20893:3;20930:5;20924:12;20959:36;20985:9;20959:36;:::i;:::-;21011:89;21093:6;21088:3;21011:89;:::i;:::-;21004:96;;21131:1;21120:9;21116:17;21147:1;21142:137;;;;21293:1;21288:341;;;;21109:520;;21142:137;21226:4;21222:9;21211;21207:25;21202:3;21195:38;21262:6;21257:3;21253:16;21246:23;;21142:137;;21288:341;21355:38;21387:5;21355:38;:::i;:::-;21415:1;21429:154;21443:6;21440:1;21437:13;21429:154;;;21517:7;21511:14;21507:1;21502:3;21498:11;21491:35;21567:1;21558:7;21554:15;21543:26;;21465:4;21462:1;21458:12;21453:17;;21429:154;;;21612:6;21607:3;21603:16;21596:23;;21295:334;;21109:520;;20897:738;;20790:845;;;;:::o;21641:377::-;21747:3;21775:39;21808:5;21775:39;:::i;:::-;21830:89;21912:6;21907:3;21830:89;:::i;:::-;21823:96;;21928:52;21973:6;21968:3;21961:4;21954:5;21950:16;21928:52;:::i;:::-;22005:6;22000:3;21996:16;21989:23;;21751:267;21641:377;;;;:::o;22024:429::-;22201:3;22223:92;22311:3;22302:6;22223:92;:::i;:::-;22216:99;;22332:95;22423:3;22414:6;22332:95;:::i;:::-;22325:102;;22444:3;22437:10;;22024:429;;;;;:::o;22459:225::-;22599:34;22595:1;22587:6;22583:14;22576:58;22668:8;22663:2;22655:6;22651:15;22644:33;22459:225;:::o;22690:366::-;22832:3;22853:67;22917:2;22912:3;22853:67;:::i;:::-;22846:74;;22929:93;23018:3;22929:93;:::i;:::-;23047:2;23042:3;23038:12;23031:19;;22690:366;;;:::o;23062:419::-;23228:4;23266:2;23255:9;23251:18;23243:26;;23315:9;23309:4;23305:20;23301:1;23290:9;23286:17;23279:47;23343:131;23469:4;23343:131;:::i;:::-;23335:139;;23062:419;;;:::o;23487:98::-;23538:6;23572:5;23566:12;23556:22;;23487:98;;;:::o;23591:168::-;23674:11;23708:6;23703:3;23696:19;23748:4;23743:3;23739:14;23724:29;;23591:168;;;;:::o;23765:360::-;23851:3;23879:38;23911:5;23879:38;:::i;:::-;23933:70;23996:6;23991:3;23933:70;:::i;:::-;23926:77;;24012:52;24057:6;24052:3;24045:4;24038:5;24034:16;24012:52;:::i;:::-;24089:29;24111:6;24089:29;:::i;:::-;24084:3;24080:39;24073:46;;23855:270;23765:360;;;;:::o;24131:640::-;24326:4;24364:3;24353:9;24349:19;24341:27;;24378:71;24446:1;24435:9;24431:17;24422:6;24378:71;:::i;:::-;24459:72;24527:2;24516:9;24512:18;24503:6;24459:72;:::i;:::-;24541;24609:2;24598:9;24594:18;24585:6;24541:72;:::i;:::-;24660:9;24654:4;24650:20;24645:2;24634:9;24630:18;24623:48;24688:76;24759:4;24750:6;24688:76;:::i;:::-;24680:84;;24131:640;;;;;;;:::o;24777:141::-;24833:5;24864:6;24858:13;24849:22;;24880:32;24906:5;24880:32;:::i;:::-;24777:141;;;;:::o;24924:349::-;24993:6;25042:2;25030:9;25021:7;25017:23;25013:32;25010:119;;;25048:79;;:::i;:::-;25010:119;25168:1;25193:63;25248:7;25239:6;25228:9;25224:22;25193:63;:::i;:::-;25183:73;;25139:127;24924:349;;;;:::o;25279:233::-;25318:3;25341:24;25359:5;25341:24;:::i;:::-;25332:33;;25387:66;25380:5;25377:77;25374:103;;25457:18;;:::i;:::-;25374:103;25504:1;25497:5;25493:13;25486:20;;25279:233;;;:::o;25518:180::-;25566:77;25563:1;25556:88;25663:4;25660:1;25653:15;25687:4;25684:1;25677:15;25704:185;25744:1;25761:20;25779:1;25761:20;:::i;:::-;25756:25;;25795:20;25813:1;25795:20;:::i;:::-;25790:25;;25834:1;25824:35;;25839:18;;:::i;:::-;25824:35;25881:1;25878;25874:9;25869:14;;25704:185;;;;:::o;25895:191::-;25935:4;25955:20;25973:1;25955:20;:::i;:::-;25950:25;;25989:20;26007:1;25989:20;:::i;:::-;25984:25;;26028:1;26025;26022:8;26019:34;;;26033:18;;:::i;:::-;26019:34;26078:1;26075;26071:9;26063:17;;25895:191;;;;:::o;26092:176::-;26124:1;26141:20;26159:1;26141:20;:::i;:::-;26136:25;;26175:20;26193:1;26175:20;:::i;:::-;26170:25;;26214:1;26204:35;;26219:18;;:::i;:::-;26204:35;26260:1;26257;26253:9;26248:14;;26092:176;;;;:::o;26274:180::-;26322:77;26319:1;26312:88;26419:4;26416:1;26409:15;26443:4;26440:1;26433:15

Swarm Source

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