ETH Price: $2,417.88 (+0.52%)

Token

Humans Are Aliens (HAA)
 

Overview

Max Total Supply

55 HAA

Holders

6

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
0x356d9563002a7a14860603afe258a60828e127b3
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:
HumansAreAliens

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

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


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

pragma solidity ^0.8.0;

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

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

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


// OpenZeppelin Contracts 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: @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/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/ERC1155/IERC1155Receiver.sol


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol)

pragma solidity ^0.8.0;


/**
 * @dev _Available since v3.1._
 */
interface IERC1155Receiver is IERC165 {
    /**
     * @dev Handles the receipt of a single ERC1155 token type. This function is
     * called at the end of a `safeTransferFrom` after the balance has been updated.
     *
     * NOTE: To accept the transfer, this must return
     * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`
     * (i.e. 0xf23a6e61, or its own function selector).
     *
     * @param operator The address which initiated the transfer (i.e. msg.sender)
     * @param from The address which previously owned the token
     * @param id The ID of the token being transferred
     * @param value The amount of tokens being transferred
     * @param data Additional data with no specified format
     * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed
     */
    function onERC1155Received(
        address operator,
        address from,
        uint256 id,
        uint256 value,
        bytes calldata data
    ) external returns (bytes4);

    /**
     * @dev Handles the receipt of a multiple ERC1155 token types. This function
     * is called at the end of a `safeBatchTransferFrom` after the balances have
     * been updated.
     *
     * NOTE: To accept the transfer(s), this must return
     * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))`
     * (i.e. 0xbc197c81, or its own function selector).
     *
     * @param operator The address which initiated the batch transfer (i.e. msg.sender)
     * @param from The address which previously owned the token
     * @param ids An array containing ids of each token being transferred (order and length must match values array)
     * @param values An array containing amounts of each token being transferred (order and length must match ids array)
     * @param data Additional data with no specified format
     * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed
     */
    function onERC1155BatchReceived(
        address operator,
        address from,
        uint256[] calldata ids,
        uint256[] calldata values,
        bytes calldata data
    ) external returns (bytes4);
}

// File: @openzeppelin/contracts/token/ERC1155/IERC1155.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155.sol)

pragma solidity ^0.8.0;


/**
 * @dev Required interface of an ERC1155 compliant contract, as defined in the
 * https://eips.ethereum.org/EIPS/eip-1155[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155 is IERC165 {
    /**
     * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.
     */
    event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);

    /**
     * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all
     * transfers.
     */
    event TransferBatch(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256[] ids,
        uint256[] values
    );

    /**
     * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to
     * `approved`.
     */
    event ApprovalForAll(address indexed account, address indexed operator, bool approved);

    /**
     * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.
     *
     * If an {URI} event was emitted for `id`, the standard
     * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value
     * returned by {IERC1155MetadataURI-uri}.
     */
    event URI(string value, uint256 indexed id);

    /**
     * @dev Returns the amount of tokens of token type `id` owned by `account`.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) external view returns (uint256);

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids)
        external
        view
        returns (uint256[] memory);

    /**
     * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,
     *
     * Emits an {ApprovalForAll} event.
     *
     * Requirements:
     *
     * - `operator` cannot be the caller.
     */
    function setApprovalForAll(address operator, bool approved) external;

    /**
     * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.
     *
     * See {setApprovalForAll}.
     */
    function isApprovedForAll(address account, address operator) external view returns (bool);

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes calldata data
    ) external;

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] calldata ids,
        uint256[] calldata amounts,
        bytes calldata data
    ) external;
}

// File: @openzeppelin/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol)

pragma solidity ^0.8.0;


/**
 * @dev Interface of the optional ERC1155MetadataExtension interface, as defined
 * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155MetadataURI is IERC1155 {
    /**
     * @dev Returns the URI for token type `id`.
     *
     * If the `\{id\}` substring is present in the URI, it must be replaced by
     * clients with the actual token type ID.
     */
    function uri(uint256 id) external view returns (string memory);
}

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


// OpenZeppelin Contracts v4.4.1 (token/ERC1155/ERC1155.sol)

pragma solidity ^0.8.0;







/**
 * @dev Implementation of the basic standard multi-token.
 * See https://eips.ethereum.org/EIPS/eip-1155
 * Originally based on code by Enjin: https://github.com/enjin/erc-1155
 *
 * _Available since v3.1._
 */
contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI {
    using Address for address;

    // Mapping from token ID to account balances
    mapping(uint256 => mapping(address => uint256)) private _balances;

    // Mapping from account to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json
    string private _uri;

    /**
     * @dev See {_setURI}.
     */
    constructor(string memory uri_) {
        _setURI(uri_);
    }

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

    /**
     * @dev See {IERC1155MetadataURI-uri}.
     *
     * This implementation returns the same URI for *all* token types. It relies
     * on the token type ID substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * Clients calling this function must replace the `\{id\}` substring with the
     * actual token type ID.
     */
    function uri(uint256) public view virtual override returns (string memory) {
        return _uri;
    }

    /**
     * @dev See {IERC1155-balanceOf}.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {
        require(account != address(0), "ERC1155: balance query for the zero address");
        return _balances[id][account];
    }

    /**
     * @dev See {IERC1155-balanceOfBatch}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] memory accounts, uint256[] memory ids)
        public
        view
        virtual
        override
        returns (uint256[] memory)
    {
        require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch");

        uint256[] memory batchBalances = new uint256[](accounts.length);

        for (uint256 i = 0; i < accounts.length; ++i) {
            batchBalances[i] = balanceOf(accounts[i], ids[i]);
        }

        return batchBalances;
    }

    /**
     * @dev See {IERC1155-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

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

    /**
     * @dev See {IERC1155-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: caller is not owner nor approved"
        );
        _safeTransferFrom(from, to, id, amount, data);
    }

    /**
     * @dev See {IERC1155-safeBatchTransferFrom}.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: transfer caller is not owner nor approved"
        );
        _safeBatchTransferFrom(from, to, ids, amounts, data);
    }

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);

        uint256 fromBalance = _balances[id][from];
        require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
        unchecked {
            _balances[id][from] = fromBalance - amount;
        }
        _balances[id][to] += amount;

        emit TransferSingle(operator, from, to, id, amount);

        _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function _safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, to, ids, amounts, data);

        for (uint256 i = 0; i < ids.length; ++i) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

            uint256 fromBalance = _balances[id][from];
            require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
            unchecked {
                _balances[id][from] = fromBalance - amount;
            }
            _balances[id][to] += amount;
        }

        emit TransferBatch(operator, from, to, ids, amounts);

        _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);
    }

    /**
     * @dev Sets a new URI for all token types, by relying on the token type ID
     * substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * By this mechanism, any occurrence of the `\{id\}` substring in either the
     * URI or any of the amounts in the JSON file at said URI will be replaced by
     * clients with the token type ID.
     *
     * For example, the `https://token-cdn-domain/\{id\}.json` URI would be
     * interpreted by clients as
     * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`
     * for token type ID 0x4cce0.
     *
     * See {uri}.
     *
     * Because these URIs cannot be meaningfully represented by the {URI} event,
     * this function emits no events.
     */
    function _setURI(string memory newuri) internal virtual {
        _uri = newuri;
    }

    /**
     * @dev Creates `amount` tokens of token type `id`, and assigns them to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _mint(
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, address(0), to, _asSingletonArray(id), _asSingletonArray(amount), data);

        _balances[id][to] += amount;
        emit TransferSingle(operator, address(0), to, id, amount);

        _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function _mintBatch(
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);

        for (uint256 i = 0; i < ids.length; i++) {
            _balances[ids[i]][to] += amounts[i];
        }

        emit TransferBatch(operator, address(0), to, ids, amounts);

        _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);
    }

    /**
     * @dev Destroys `amount` tokens of token type `id` from `from`
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `from` must have at least `amount` tokens of token type `id`.
     */
    function _burn(
        address from,
        uint256 id,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC1155: burn from the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, address(0), _asSingletonArray(id), _asSingletonArray(amount), "");

        uint256 fromBalance = _balances[id][from];
        require(fromBalance >= amount, "ERC1155: burn amount exceeds balance");
        unchecked {
            _balances[id][from] = fromBalance - amount;
        }

        emit TransferSingle(operator, from, address(0), id, amount);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     */
    function _burnBatch(
        address from,
        uint256[] memory ids,
        uint256[] memory amounts
    ) internal virtual {
        require(from != address(0), "ERC1155: burn from the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, address(0), ids, amounts, "");

        for (uint256 i = 0; i < ids.length; i++) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

            uint256 fromBalance = _balances[id][from];
            require(fromBalance >= amount, "ERC1155: burn amount exceeds balance");
            unchecked {
                _balances[id][from] = fromBalance - amount;
            }
        }

        emit TransferBatch(operator, from, address(0), ids, amounts);
    }

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits a {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC1155: setting approval status for self");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning, as well as batched variants.
     *
     * The same hook is called on both single and batched variants. For single
     * transfers, the length of the `id` and `amount` arrays will be 1.
     *
     * Calling conditions (for each `id` and `amount` pair):
     *
     * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * of token type `id` will be  transferred to `to`.
     * - When `from` is zero, `amount` tokens of token type `id` will be minted
     * for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`
     * will be burned.
     * - `from` and `to` are never both zero.
     * - `ids` and `amounts` have the same, non-zero length.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {}

    function _doSafeTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {
                if (response != IERC1155Receiver.onERC1155Received.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _doSafeBatchTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (
                bytes4 response
            ) {
                if (response != IERC1155Receiver.onERC1155BatchReceived.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) {
        uint256[] memory array = new uint256[](1);
        array[0] = element;

        return array;
    }
}

// File: HumansAreAliens.sol


pragma solidity ^0.8.0;



contract HumansAreAliens is ERC1155, Ownable {
    string public constant name = "Humans Are Aliens";
    string public constant symbol = "HAA";

    uint32 public totalSupply = 0;
    uint32 public constant maxSupply = 1500;

    uint32 public saleStart = 1650794400;
    uint256 public unitPrice = 0.0777 ether;

    constructor(string memory _uri) ERC1155(_uri) {}

    function setURI(string memory _uri) external onlyOwner {
        _setURI(_uri);
    }

    function setSaleStart(uint32 _saleStart) external onlyOwner {
        saleStart = _saleStart;
    }

    function setUnitPrice(uint256 _unitPrice) external onlyOwner {
        unitPrice = _unitPrice;
    }

    function saleIsActive() public view returns (bool) {
        return saleStart <= block.timestamp;
    }

    function mint(address _to, uint32 _count) internal {
        require(_count > 0, "Count must be greater than 0.");
        require(
            totalSupply + _count <= maxSupply,
            "Count exceeds the maximum allowed supply."
        );

        totalSupply += _count;

        if (_count > 1) {
            uint256[] memory ids = new uint256[](uint256(_count));
            uint256[] memory amounts = new uint256[](uint256(_count));

            for (uint32 i = 0; i < _count; i++) {
                ids[i] = totalSupply - _count + i;
                amounts[i] = 1;
            }

            _mintBatch(_to, ids, amounts, "");
        } else {
            _mint(_to, totalSupply - 1, 1, "");
        }
    }

    function mint(uint32 _count) external payable {
        require(saleIsActive(), "Sale is not active.");
        require(msg.value >= unitPrice * _count, "Not enough ether.");

        mint(msg.sender, _count);
    }

    function airdrop(address[] memory _addresses) external onlyOwner {
        for (uint256 i = 0; i < _addresses.length; i++) {
            mint(_addresses[i], 1);
        }
    }

    function withdraw(bool _skip) external onlyOwner {
        uint256 balance = address(this).balance;

        if (_skip) {
            (bool success, bytes memory data) = owner().call{value: balance}(
                ""
            );
            require(success, "Failed to send transaction.");
            return;
        }

        address[4] memory addresses = [
            0xf0c174cBC9511f0102838DFd2Fb3b86147712bD6,
            0xf1b301CC1D1D205DF78232e95495F6636aFB87Ec,
            0x119F5c2ace3AB6BDEB7B2b4b5E5537379eEf31d8,
            0x209a656954c60828400f641599768484beA4d5F3
        ];

        uint32[4] memory shares = [
            uint32(1000),
            uint32(4000),
            uint32(1000),
            uint32(4000)
        ];

        for (uint32 i = 0; i < addresses.length; i++) {
            uint256 amount = i == addresses.length - 1
                ? address(this).balance
                : (balance * shares[i]) / 10000;

            (bool success, bytes memory data) = owner().call{value: amount}("");
            require(success, "Failed to send transaction.");
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_uri","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","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":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_count","type":"uint32"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"saleStart","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_saleStart","type":"uint32"}],"name":"setSaleStart","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uri","type":"string"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_unitPrice","type":"uint256"}],"name":"setUnitPrice","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":[],"name":"totalSupply","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unitPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_skip","type":"bool"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526000600360146101000a81548163ffffffff021916908363ffffffff1602179055506362651fa0600360186101000a81548163ffffffff021916908363ffffffff1602179055506701140bbd030c40006004553480156200006457600080fd5b50604051620047953803806200479583398181016040528101906200008a9190620002dc565b806200009c81620000c460201b60201c565b50620000bd620000b1620000e060201b60201c565b620000e860201b60201c565b50620004b1565b8060029080519060200190620000dc929190620001ae565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001bc90620003c2565b90600052602060002090601f016020900481019282620001e057600085556200022c565b82601f10620001fb57805160ff19168380011785556200022c565b828001600101855582156200022c579182015b828111156200022b5782518255916020019190600101906200020e565b5b5090506200023b91906200023f565b5090565b5b808211156200025a57600081600090555060010162000240565b5090565b6000620002756200026f8462000356565b6200032d565b90508281526020810184848401111562000294576200029362000491565b5b620002a18482856200038c565b509392505050565b600082601f830112620002c157620002c06200048c565b5b8151620002d38482602086016200025e565b91505092915050565b600060208284031215620002f557620002f46200049b565b5b600082015167ffffffffffffffff81111562000316576200031562000496565b5b6200032484828501620002a9565b91505092915050565b6000620003396200034c565b9050620003478282620003f8565b919050565b6000604051905090565b600067ffffffffffffffff8211156200037457620003736200045d565b5b6200037f82620004a0565b9050602081019050919050565b60005b83811015620003ac5780820151818401526020810190506200038f565b83811115620003bc576000848401525b50505050565b60006002820490506001821680620003db57607f821691505b60208210811415620003f257620003f16200042e565b5b50919050565b6200040382620004a0565b810181811067ffffffffffffffff821117156200042557620004246200045d565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b6142d480620004c16000396000f3fe60806040526004361061014a5760003560e01c8063a22cb465116100b6578063dc1b73281161006f578063dc1b73281461046e578063e73faa2d14610497578063e985e9c5146104c2578063eb8d2444146104ff578063f242432a1461052a578063f2fde38b146105535761014a565b8063a22cb46514610381578063a71bbebe146103aa578063a741ae1e146103c6578063a810a54c146103ef578063ab0bcc4114610418578063d5abeb01146104435761014a565b80632eb2c2d6116101085780632eb2c2d6146102855780634e1273f4146102ae578063715018a6146102eb578063729ad39e146103025780638da5cb5b1461032b57806395d89b41146103565761014a565b8062fdd58e1461014f57806301ffc9a71461018c57806302fe5305146101c957806306fdde03146101f25780630e89341c1461021d57806318160ddd1461025a575b600080fd5b34801561015b57600080fd5b5061017660048036038101906101719190612ce3565b61057c565b60405161018391906136a2565b60405180910390f35b34801561019857600080fd5b506101b360048036038101906101ae9190612e11565b610645565b6040516101c09190613425565b60405180910390f35b3480156101d557600080fd5b506101f060048036038101906101eb9190612e6b565b610727565b005b3480156101fe57600080fd5b506102076107af565b6040516102149190613440565b60405180910390f35b34801561022957600080fd5b50610244600480360381019061023f9190612eb4565b6107e8565b6040516102519190613440565b60405180910390f35b34801561026657600080fd5b5061026f61087c565b60405161027c91906136e6565b60405180910390f35b34801561029157600080fd5b506102ac60048036038101906102a79190612b3d565b610892565b005b3480156102ba57600080fd5b506102d560048036038101906102d09190612d6c565b610933565b6040516102e291906133cc565b60405180910390f35b3480156102f757600080fd5b50610300610a4c565b005b34801561030e57600080fd5b5061032960048036038101906103249190612d23565b610ad4565b005b34801561033757600080fd5b50610340610b98565b60405161034d91906132ef565b60405180910390f35b34801561036257600080fd5b5061036b610bc2565b6040516103789190613440565b60405180910390f35b34801561038d57600080fd5b506103a860048036038101906103a39190612ca3565b610bfb565b005b6103c460048036038101906103bf9190612ee1565b610c11565b005b3480156103d257600080fd5b506103ed60048036038101906103e89190612ee1565b610cbb565b005b3480156103fb57600080fd5b5061041660048036038101906104119190612de4565b610d5b565b005b34801561042457600080fd5b5061042d611167565b60405161043a91906136e6565b60405180910390f35b34801561044f57600080fd5b5061045861117d565b60405161046591906136e6565b60405180910390f35b34801561047a57600080fd5b5061049560048036038101906104909190612eb4565b611183565b005b3480156104a357600080fd5b506104ac611209565b6040516104b991906136a2565b60405180910390f35b3480156104ce57600080fd5b506104e960048036038101906104e49190612afd565b61120f565b6040516104f69190613425565b60405180910390f35b34801561050b57600080fd5b506105146112a3565b6040516105219190613425565b60405180910390f35b34801561053657600080fd5b50610551600480360381019061054c9190612c0c565b6112c6565b005b34801561055f57600080fd5b5061057a60048036038101906105759190612ad0565b611367565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156105ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105e4906134a2565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061071057507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610720575061071f8261145f565b5b9050919050565b61072f6114c9565b73ffffffffffffffffffffffffffffffffffffffff1661074d610b98565b73ffffffffffffffffffffffffffffffffffffffff16146107a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079a906135c2565b60405180910390fd5b6107ac816114d1565b50565b6040518060400160405280601181526020017f48756d616e732041726520416c69656e7300000000000000000000000000000081525081565b6060600280546107f790613aa5565b80601f016020809104026020016040519081016040528092919081815260200182805461082390613aa5565b80156108705780601f1061084557610100808354040283529160200191610870565b820191906000526020600020905b81548152906001019060200180831161085357829003601f168201915b50505050509050919050565b600360149054906101000a900463ffffffff1681565b61089a6114c9565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806108e057506108df856108da6114c9565b61120f565b5b61091f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091690613562565b60405180910390fd5b61092c85858585856114eb565b5050505050565b60608151835114610979576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097090613642565b60405180910390fd5b6000835167ffffffffffffffff81111561099657610995613c3a565b5b6040519080825280602002602001820160405280156109c45781602001602082028036833780820191505090505b50905060005b8451811015610a4157610a118582815181106109e9576109e8613c0b565b5b6020026020010151858381518110610a0457610a03613c0b565b5b602002602001015161057c565b828281518110610a2457610a23613c0b565b5b60200260200101818152505080610a3a90613b08565b90506109ca565b508091505092915050565b610a546114c9565b73ffffffffffffffffffffffffffffffffffffffff16610a72610b98565b73ffffffffffffffffffffffffffffffffffffffff1614610ac8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abf906135c2565b60405180910390fd5b610ad260006117ff565b565b610adc6114c9565b73ffffffffffffffffffffffffffffffffffffffff16610afa610b98565b73ffffffffffffffffffffffffffffffffffffffff1614610b50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b47906135c2565b60405180910390fd5b60005b8151811015610b9457610b81828281518110610b7257610b71613c0b565b5b602002602001015160016118c5565b8080610b8c90613b08565b915050610b53565b5050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6040518060400160405280600381526020017f484141000000000000000000000000000000000000000000000000000000000081525081565b610c0d610c066114c9565b8383611b7d565b5050565b610c196112a3565b610c58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4f906135e2565b60405180910390fd5b8063ffffffff16600454610c6c919061391d565b341015610cae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca590613522565b60405180910390fd5b610cb833826118c5565b50565b610cc36114c9565b73ffffffffffffffffffffffffffffffffffffffff16610ce1610b98565b73ffffffffffffffffffffffffffffffffffffffff1614610d37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2e906135c2565b60405180910390fd5b80600360186101000a81548163ffffffff021916908363ffffffff16021790555050565b610d636114c9565b73ffffffffffffffffffffffffffffffffffffffff16610d81610b98565b73ffffffffffffffffffffffffffffffffffffffff1614610dd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dce906135c2565b60405180910390fd5b60004790508115610e9f57600080610ded610b98565b73ffffffffffffffffffffffffffffffffffffffff1683604051610e10906132da565b60006040518083038185875af1925050503d8060008114610e4d576040519150601f19603f3d011682016040523d82523d6000602084013e610e52565b606091505b509150915081610e97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8e90613602565b60405180910390fd5b505050611164565b6000604051806080016040528073f0c174cbc9511f0102838dfd2fb3b86147712bd673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173f1b301cc1d1d205df78232e95495f6636afb87ec73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173119f5c2ace3ab6bdeb7b2b4b5e5537379eef31d873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173209a656954c60828400f641599768484bea4d5f373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152509050600060405180608001604052806103e863ffffffff1663ffffffff168152602001610fa063ffffffff1663ffffffff1681526020016103e863ffffffff1663ffffffff168152602001610fa063ffffffff1663ffffffff16815250905060005b60048163ffffffff16101561115f576000600160046110439190613977565b8263ffffffff161461109057612710838363ffffffff166004811061106b5761106a613c0b565b5b602002015163ffffffff1686611081919061391d565b61108b91906138ec565b611092565b475b905060008061109f610b98565b73ffffffffffffffffffffffffffffffffffffffff16836040516110c2906132da565b60006040518083038185875af1925050503d80600081146110ff576040519150601f19603f3d011682016040523d82523d6000602084013e611104565b606091505b509150915081611149576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114090613602565b60405180910390fd5b505050808061115790613b51565b915050611024565b505050505b50565b600360189054906101000a900463ffffffff1681565b6105dc81565b61118b6114c9565b73ffffffffffffffffffffffffffffffffffffffff166111a9610b98565b73ffffffffffffffffffffffffffffffffffffffff16146111ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f6906135c2565b60405180910390fd5b8060048190555050565b60045481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600042600360189054906101000a900463ffffffff1663ffffffff161115905090565b6112ce6114c9565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061131457506113138561130e6114c9565b61120f565b5b611353576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134a906134e2565b60405180910390fd5b6113608585858585611cea565b5050505050565b61136f6114c9565b73ffffffffffffffffffffffffffffffffffffffff1661138d610b98565b73ffffffffffffffffffffffffffffffffffffffff16146113e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113da906135c2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611453576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144a906134c2565b60405180910390fd5b61145c816117ff565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b80600290805190602001906114e7929190612793565b5050565b815183511461152f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152690613662565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561159f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159690613542565b60405180910390fd5b60006115a96114c9565b90506115b9818787878787611f6c565b60005b845181101561176a5760008582815181106115da576115d9613c0b565b5b6020026020010151905060008583815181106115f9576115f8613c0b565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561169a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169190613582565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461174f919061385c565b925050819055505050508061176390613b08565b90506115bc565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516117e19291906133ee565b60405180910390a46117f7818787878787611f74565b505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008163ffffffff161161190e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190590613502565b60405180910390fd5b6105dc63ffffffff1681600360149054906101000a900463ffffffff1661193591906138b2565b63ffffffff16111561197c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611973906135a2565b60405180910390fd5b80600360148282829054906101000a900463ffffffff1661199d91906138b2565b92506101000a81548163ffffffff021916908363ffffffff16021790555060018163ffffffff161115611b385760008163ffffffff1667ffffffffffffffff8111156119ec576119eb613c3a565b5b604051908082528060200260200182016040528015611a1a5781602001602082028036833780820191505090505b50905060008263ffffffff1667ffffffffffffffff811115611a3f57611a3e613c3a565b5b604051908082528060200260200182016040528015611a6d5781602001602082028036833780820191505090505b50905060005b8363ffffffff168163ffffffff161015611b15578084600360149054906101000a900463ffffffff16611aa691906139ab565b611ab091906138b2565b63ffffffff16838263ffffffff1681518110611acf57611ace613c0b565b5b6020026020010181815250506001828263ffffffff1681518110611af657611af5613c0b565b5b6020026020010181815250508080611b0d90613b51565b915050611a73565b50611b318483836040518060200160405280600081525061215b565b5050611b79565b611b78826001600360149054906101000a900463ffffffff16611b5b91906139ab565b63ffffffff16600160405180602001604052806000815250612379565b5b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611bec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be390613622565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611cdd9190613425565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611d5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5190613542565b60405180910390fd5b6000611d646114c9565b9050611d84818787611d758861250f565b611d7e8861250f565b87611f6c565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611e1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1290613582565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ed0919061385c565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051611f4d9291906136bd565b60405180910390a4611f63828888888888612589565b50505050505050565b505050505050565b611f938473ffffffffffffffffffffffffffffffffffffffff16612770565b15612153578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611fd995949392919061330a565b602060405180830381600087803b158015611ff357600080fd5b505af192505050801561202457506040513d601f19601f820116820180604052508101906120219190612e3e565b60015b6120ca57612030613c69565b806308c379a0141561208d5750612045614195565b80612050575061208f565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120849190613440565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c190613462565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612151576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214890613482565b60405180910390fd5b505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156121cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c290613682565b60405180910390fd5b815183511461220f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220690613662565b60405180910390fd5b60006122196114c9565b905061222a81600087878787611f6c565b60005b84518110156122e35783818151811061224957612248613c0b565b5b602002602001015160008087848151811061226757612266613c0b565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122c9919061385c565b9250508190555080806122db90613b08565b91505061222d565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161235b9291906133ee565b60405180910390a461237281600087878787611f74565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156123e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e090613682565b60405180910390fd5b60006123f36114c9565b9050612414816000876124058861250f565b61240e8861250f565b87611f6c565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612473919061385c565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6287876040516124f19291906136bd565b60405180910390a461250881600087878787612589565b5050505050565b60606000600167ffffffffffffffff81111561252e5761252d613c3a565b5b60405190808252806020026020018201604052801561255c5781602001602082028036833780820191505090505b509050828160008151811061257457612573613c0b565b5b60200260200101818152505080915050919050565b6125a88473ffffffffffffffffffffffffffffffffffffffff16612770565b15612768578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016125ee959493929190613372565b602060405180830381600087803b15801561260857600080fd5b505af192505050801561263957506040513d601f19601f820116820180604052508101906126369190612e3e565b60015b6126df57612645613c69565b806308c379a014156126a2575061265a614195565b8061266557506126a4565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126999190613440565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d690613462565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612766576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275d90613482565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82805461279f90613aa5565b90600052602060002090601f0160209004810192826127c15760008555612808565b82601f106127da57805160ff1916838001178555612808565b82800160010185558215612808579182015b828111156128075782518255916020019190600101906127ec565b5b5090506128159190612819565b5090565b5b8082111561283257600081600090555060010161281a565b5090565b600061284961284484613726565b613701565b9050808382526020820190508285602086028201111561286c5761286b613c90565b5b60005b8581101561289c5781612882888261299a565b84526020840193506020830192505060018101905061286f565b5050509392505050565b60006128b96128b484613752565b613701565b905080838252602082019050828560208602820111156128dc576128db613c90565b5b60005b8581101561290c57816128f28882612aa6565b8452602084019350602083019250506001810190506128df565b5050509392505050565b60006129296129248461377e565b613701565b90508281526020810184848401111561294557612944613c95565b5b612950848285613a63565b509392505050565b600061296b612966846137af565b613701565b90508281526020810184848401111561298757612986613c95565b5b612992848285613a63565b509392505050565b6000813590506129a98161422b565b92915050565b600082601f8301126129c4576129c3613c8b565b5b81356129d4848260208601612836565b91505092915050565b600082601f8301126129f2576129f1613c8b565b5b8135612a028482602086016128a6565b91505092915050565b600081359050612a1a81614242565b92915050565b600081359050612a2f81614259565b92915050565b600081519050612a4481614259565b92915050565b600082601f830112612a5f57612a5e613c8b565b5b8135612a6f848260208601612916565b91505092915050565b600082601f830112612a8d57612a8c613c8b565b5b8135612a9d848260208601612958565b91505092915050565b600081359050612ab581614270565b92915050565b600081359050612aca81614287565b92915050565b600060208284031215612ae657612ae5613c9f565b5b6000612af48482850161299a565b91505092915050565b60008060408385031215612b1457612b13613c9f565b5b6000612b228582860161299a565b9250506020612b338582860161299a565b9150509250929050565b600080600080600060a08688031215612b5957612b58613c9f565b5b6000612b678882890161299a565b9550506020612b788882890161299a565b945050604086013567ffffffffffffffff811115612b9957612b98613c9a565b5b612ba5888289016129dd565b935050606086013567ffffffffffffffff811115612bc657612bc5613c9a565b5b612bd2888289016129dd565b925050608086013567ffffffffffffffff811115612bf357612bf2613c9a565b5b612bff88828901612a4a565b9150509295509295909350565b600080600080600060a08688031215612c2857612c27613c9f565b5b6000612c368882890161299a565b9550506020612c478882890161299a565b9450506040612c5888828901612aa6565b9350506060612c6988828901612aa6565b925050608086013567ffffffffffffffff811115612c8a57612c89613c9a565b5b612c9688828901612a4a565b9150509295509295909350565b60008060408385031215612cba57612cb9613c9f565b5b6000612cc88582860161299a565b9250506020612cd985828601612a0b565b9150509250929050565b60008060408385031215612cfa57612cf9613c9f565b5b6000612d088582860161299a565b9250506020612d1985828601612aa6565b9150509250929050565b600060208284031215612d3957612d38613c9f565b5b600082013567ffffffffffffffff811115612d5757612d56613c9a565b5b612d63848285016129af565b91505092915050565b60008060408385031215612d8357612d82613c9f565b5b600083013567ffffffffffffffff811115612da157612da0613c9a565b5b612dad858286016129af565b925050602083013567ffffffffffffffff811115612dce57612dcd613c9a565b5b612dda858286016129dd565b9150509250929050565b600060208284031215612dfa57612df9613c9f565b5b6000612e0884828501612a0b565b91505092915050565b600060208284031215612e2757612e26613c9f565b5b6000612e3584828501612a20565b91505092915050565b600060208284031215612e5457612e53613c9f565b5b6000612e6284828501612a35565b91505092915050565b600060208284031215612e8157612e80613c9f565b5b600082013567ffffffffffffffff811115612e9f57612e9e613c9a565b5b612eab84828501612a78565b91505092915050565b600060208284031215612eca57612ec9613c9f565b5b6000612ed884828501612aa6565b91505092915050565b600060208284031215612ef757612ef6613c9f565b5b6000612f0584828501612abb565b91505092915050565b6000612f1a83836132ad565b60208301905092915050565b612f2f816139df565b82525050565b6000612f40826137f0565b612f4a818561381e565b9350612f55836137e0565b8060005b83811015612f86578151612f6d8882612f0e565b9750612f7883613811565b925050600181019050612f59565b5085935050505092915050565b612f9c816139f1565b82525050565b6000612fad826137fb565b612fb7818561382f565b9350612fc7818560208601613a72565b612fd081613ca4565b840191505092915050565b6000612fe682613806565b612ff0818561384b565b9350613000818560208601613a72565b61300981613ca4565b840191505092915050565b600061302160348361384b565b915061302c82613cc2565b604082019050919050565b600061304460288361384b565b915061304f82613d11565b604082019050919050565b6000613067602b8361384b565b915061307282613d60565b604082019050919050565b600061308a60268361384b565b915061309582613daf565b604082019050919050565b60006130ad60298361384b565b91506130b882613dfe565b604082019050919050565b60006130d0601d8361384b565b91506130db82613e4d565b602082019050919050565b60006130f360118361384b565b91506130fe82613e76565b602082019050919050565b600061311660258361384b565b915061312182613e9f565b604082019050919050565b600061313960328361384b565b915061314482613eee565b604082019050919050565b600061315c602a8361384b565b915061316782613f3d565b604082019050919050565b600061317f60298361384b565b915061318a82613f8c565b604082019050919050565b60006131a260208361384b565b91506131ad82613fdb565b602082019050919050565b60006131c560138361384b565b91506131d082614004565b602082019050919050565b60006131e8601b8361384b565b91506131f38261402d565b602082019050919050565b600061320b600083613840565b915061321682614056565b600082019050919050565b600061322e60298361384b565b915061323982614059565b604082019050919050565b600061325160298361384b565b915061325c826140a8565b604082019050919050565b600061327460288361384b565b915061327f826140f7565b604082019050919050565b600061329760218361384b565b91506132a282614146565b604082019050919050565b6132b681613a49565b82525050565b6132c581613a49565b82525050565b6132d481613a53565b82525050565b60006132e5826131fe565b9150819050919050565b60006020820190506133046000830184612f26565b92915050565b600060a08201905061331f6000830188612f26565b61332c6020830187612f26565b818103604083015261333e8186612f35565b905081810360608301526133528185612f35565b905081810360808301526133668184612fa2565b90509695505050505050565b600060a0820190506133876000830188612f26565b6133946020830187612f26565b6133a160408301866132bc565b6133ae60608301856132bc565b81810360808301526133c08184612fa2565b90509695505050505050565b600060208201905081810360008301526133e68184612f35565b905092915050565b600060408201905081810360008301526134088185612f35565b9050818103602083015261341c8184612f35565b90509392505050565b600060208201905061343a6000830184612f93565b92915050565b6000602082019050818103600083015261345a8184612fdb565b905092915050565b6000602082019050818103600083015261347b81613014565b9050919050565b6000602082019050818103600083015261349b81613037565b9050919050565b600060208201905081810360008301526134bb8161305a565b9050919050565b600060208201905081810360008301526134db8161307d565b9050919050565b600060208201905081810360008301526134fb816130a0565b9050919050565b6000602082019050818103600083015261351b816130c3565b9050919050565b6000602082019050818103600083015261353b816130e6565b9050919050565b6000602082019050818103600083015261355b81613109565b9050919050565b6000602082019050818103600083015261357b8161312c565b9050919050565b6000602082019050818103600083015261359b8161314f565b9050919050565b600060208201905081810360008301526135bb81613172565b9050919050565b600060208201905081810360008301526135db81613195565b9050919050565b600060208201905081810360008301526135fb816131b8565b9050919050565b6000602082019050818103600083015261361b816131db565b9050919050565b6000602082019050818103600083015261363b81613221565b9050919050565b6000602082019050818103600083015261365b81613244565b9050919050565b6000602082019050818103600083015261367b81613267565b9050919050565b6000602082019050818103600083015261369b8161328a565b9050919050565b60006020820190506136b760008301846132bc565b92915050565b60006040820190506136d260008301856132bc565b6136df60208301846132bc565b9392505050565b60006020820190506136fb60008301846132cb565b92915050565b600061370b61371c565b90506137178282613ad7565b919050565b6000604051905090565b600067ffffffffffffffff82111561374157613740613c3a565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561376d5761376c613c3a565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561379957613798613c3a565b5b6137a282613ca4565b9050602081019050919050565b600067ffffffffffffffff8211156137ca576137c9613c3a565b5b6137d382613ca4565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600061386782613a49565b915061387283613a49565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156138a7576138a6613b7e565b5b828201905092915050565b60006138bd82613a53565b91506138c883613a53565b92508263ffffffff038211156138e1576138e0613b7e565b5b828201905092915050565b60006138f782613a49565b915061390283613a49565b92508261391257613911613bad565b5b828204905092915050565b600061392882613a49565b915061393383613a49565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561396c5761396b613b7e565b5b828202905092915050565b600061398282613a49565b915061398d83613a49565b9250828210156139a05761399f613b7e565b5b828203905092915050565b60006139b682613a53565b91506139c183613a53565b9250828210156139d4576139d3613b7e565b5b828203905092915050565b60006139ea82613a29565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b82818337600083830152505050565b60005b83811015613a90578082015181840152602081019050613a75565b83811115613a9f576000848401525b50505050565b60006002820490506001821680613abd57607f821691505b60208210811415613ad157613ad0613bdc565b5b50919050565b613ae082613ca4565b810181811067ffffffffffffffff82111715613aff57613afe613c3a565b5b80604052505050565b6000613b1382613a49565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613b4657613b45613b7e565b5b600182019050919050565b6000613b5c82613a53565b915063ffffffff821415613b7357613b72613b7e565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d1115613c885760046000803e613c85600051613cb5565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f436f756e74206d7573742062652067726561746572207468616e20302e000000600082015250565b7f4e6f7420656e6f7567682065746865722e000000000000000000000000000000600082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f436f756e74206578636565647320746865206d6178696d756d20616c6c6f776560008201527f6420737570706c792e0000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f53616c65206973206e6f74206163746976652e00000000000000000000000000600082015250565b7f4661696c656420746f2073656e64207472616e73616374696f6e2e0000000000600082015250565b50565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d10156141a557614228565b6141ad61371c565b60043d036004823e80513d602482011167ffffffffffffffff821117156141d5575050614228565b808201805167ffffffffffffffff8111156141f35750505050614228565b80602083010160043d038501811115614210575050505050614228565b61421f82602001850186613ad7565b82955050505050505b90565b614234816139df565b811461423f57600080fd5b50565b61424b816139f1565b811461425657600080fd5b50565b614262816139fd565b811461426d57600080fd5b50565b61427981613a49565b811461428457600080fd5b50565b61429081613a53565b811461429b57600080fd5b5056fea26469706673582212208590eb9eca58e97af2a8477e341331837c2cbd8ab3fee0979a43761e78f28b9d64736f6c634300080700330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000005c68747470733a2f2f6275636b6574732e6d7970696e6174612e636c6f75642f697066732f516d52636439653564716f557863766737566a456d77514a3369526266696664427a694b4e7859506f72517566532f7b69647d2e6a736f6e00000000

Deployed Bytecode

0x60806040526004361061014a5760003560e01c8063a22cb465116100b6578063dc1b73281161006f578063dc1b73281461046e578063e73faa2d14610497578063e985e9c5146104c2578063eb8d2444146104ff578063f242432a1461052a578063f2fde38b146105535761014a565b8063a22cb46514610381578063a71bbebe146103aa578063a741ae1e146103c6578063a810a54c146103ef578063ab0bcc4114610418578063d5abeb01146104435761014a565b80632eb2c2d6116101085780632eb2c2d6146102855780634e1273f4146102ae578063715018a6146102eb578063729ad39e146103025780638da5cb5b1461032b57806395d89b41146103565761014a565b8062fdd58e1461014f57806301ffc9a71461018c57806302fe5305146101c957806306fdde03146101f25780630e89341c1461021d57806318160ddd1461025a575b600080fd5b34801561015b57600080fd5b5061017660048036038101906101719190612ce3565b61057c565b60405161018391906136a2565b60405180910390f35b34801561019857600080fd5b506101b360048036038101906101ae9190612e11565b610645565b6040516101c09190613425565b60405180910390f35b3480156101d557600080fd5b506101f060048036038101906101eb9190612e6b565b610727565b005b3480156101fe57600080fd5b506102076107af565b6040516102149190613440565b60405180910390f35b34801561022957600080fd5b50610244600480360381019061023f9190612eb4565b6107e8565b6040516102519190613440565b60405180910390f35b34801561026657600080fd5b5061026f61087c565b60405161027c91906136e6565b60405180910390f35b34801561029157600080fd5b506102ac60048036038101906102a79190612b3d565b610892565b005b3480156102ba57600080fd5b506102d560048036038101906102d09190612d6c565b610933565b6040516102e291906133cc565b60405180910390f35b3480156102f757600080fd5b50610300610a4c565b005b34801561030e57600080fd5b5061032960048036038101906103249190612d23565b610ad4565b005b34801561033757600080fd5b50610340610b98565b60405161034d91906132ef565b60405180910390f35b34801561036257600080fd5b5061036b610bc2565b6040516103789190613440565b60405180910390f35b34801561038d57600080fd5b506103a860048036038101906103a39190612ca3565b610bfb565b005b6103c460048036038101906103bf9190612ee1565b610c11565b005b3480156103d257600080fd5b506103ed60048036038101906103e89190612ee1565b610cbb565b005b3480156103fb57600080fd5b5061041660048036038101906104119190612de4565b610d5b565b005b34801561042457600080fd5b5061042d611167565b60405161043a91906136e6565b60405180910390f35b34801561044f57600080fd5b5061045861117d565b60405161046591906136e6565b60405180910390f35b34801561047a57600080fd5b5061049560048036038101906104909190612eb4565b611183565b005b3480156104a357600080fd5b506104ac611209565b6040516104b991906136a2565b60405180910390f35b3480156104ce57600080fd5b506104e960048036038101906104e49190612afd565b61120f565b6040516104f69190613425565b60405180910390f35b34801561050b57600080fd5b506105146112a3565b6040516105219190613425565b60405180910390f35b34801561053657600080fd5b50610551600480360381019061054c9190612c0c565b6112c6565b005b34801561055f57600080fd5b5061057a60048036038101906105759190612ad0565b611367565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156105ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105e4906134a2565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061071057507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610720575061071f8261145f565b5b9050919050565b61072f6114c9565b73ffffffffffffffffffffffffffffffffffffffff1661074d610b98565b73ffffffffffffffffffffffffffffffffffffffff16146107a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079a906135c2565b60405180910390fd5b6107ac816114d1565b50565b6040518060400160405280601181526020017f48756d616e732041726520416c69656e7300000000000000000000000000000081525081565b6060600280546107f790613aa5565b80601f016020809104026020016040519081016040528092919081815260200182805461082390613aa5565b80156108705780601f1061084557610100808354040283529160200191610870565b820191906000526020600020905b81548152906001019060200180831161085357829003601f168201915b50505050509050919050565b600360149054906101000a900463ffffffff1681565b61089a6114c9565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806108e057506108df856108da6114c9565b61120f565b5b61091f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091690613562565b60405180910390fd5b61092c85858585856114eb565b5050505050565b60608151835114610979576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097090613642565b60405180910390fd5b6000835167ffffffffffffffff81111561099657610995613c3a565b5b6040519080825280602002602001820160405280156109c45781602001602082028036833780820191505090505b50905060005b8451811015610a4157610a118582815181106109e9576109e8613c0b565b5b6020026020010151858381518110610a0457610a03613c0b565b5b602002602001015161057c565b828281518110610a2457610a23613c0b565b5b60200260200101818152505080610a3a90613b08565b90506109ca565b508091505092915050565b610a546114c9565b73ffffffffffffffffffffffffffffffffffffffff16610a72610b98565b73ffffffffffffffffffffffffffffffffffffffff1614610ac8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abf906135c2565b60405180910390fd5b610ad260006117ff565b565b610adc6114c9565b73ffffffffffffffffffffffffffffffffffffffff16610afa610b98565b73ffffffffffffffffffffffffffffffffffffffff1614610b50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b47906135c2565b60405180910390fd5b60005b8151811015610b9457610b81828281518110610b7257610b71613c0b565b5b602002602001015160016118c5565b8080610b8c90613b08565b915050610b53565b5050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6040518060400160405280600381526020017f484141000000000000000000000000000000000000000000000000000000000081525081565b610c0d610c066114c9565b8383611b7d565b5050565b610c196112a3565b610c58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4f906135e2565b60405180910390fd5b8063ffffffff16600454610c6c919061391d565b341015610cae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca590613522565b60405180910390fd5b610cb833826118c5565b50565b610cc36114c9565b73ffffffffffffffffffffffffffffffffffffffff16610ce1610b98565b73ffffffffffffffffffffffffffffffffffffffff1614610d37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2e906135c2565b60405180910390fd5b80600360186101000a81548163ffffffff021916908363ffffffff16021790555050565b610d636114c9565b73ffffffffffffffffffffffffffffffffffffffff16610d81610b98565b73ffffffffffffffffffffffffffffffffffffffff1614610dd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dce906135c2565b60405180910390fd5b60004790508115610e9f57600080610ded610b98565b73ffffffffffffffffffffffffffffffffffffffff1683604051610e10906132da565b60006040518083038185875af1925050503d8060008114610e4d576040519150601f19603f3d011682016040523d82523d6000602084013e610e52565b606091505b509150915081610e97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8e90613602565b60405180910390fd5b505050611164565b6000604051806080016040528073f0c174cbc9511f0102838dfd2fb3b86147712bd673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173f1b301cc1d1d205df78232e95495f6636afb87ec73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173119f5c2ace3ab6bdeb7b2b4b5e5537379eef31d873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173209a656954c60828400f641599768484bea4d5f373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152509050600060405180608001604052806103e863ffffffff1663ffffffff168152602001610fa063ffffffff1663ffffffff1681526020016103e863ffffffff1663ffffffff168152602001610fa063ffffffff1663ffffffff16815250905060005b60048163ffffffff16101561115f576000600160046110439190613977565b8263ffffffff161461109057612710838363ffffffff166004811061106b5761106a613c0b565b5b602002015163ffffffff1686611081919061391d565b61108b91906138ec565b611092565b475b905060008061109f610b98565b73ffffffffffffffffffffffffffffffffffffffff16836040516110c2906132da565b60006040518083038185875af1925050503d80600081146110ff576040519150601f19603f3d011682016040523d82523d6000602084013e611104565b606091505b509150915081611149576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114090613602565b60405180910390fd5b505050808061115790613b51565b915050611024565b505050505b50565b600360189054906101000a900463ffffffff1681565b6105dc81565b61118b6114c9565b73ffffffffffffffffffffffffffffffffffffffff166111a9610b98565b73ffffffffffffffffffffffffffffffffffffffff16146111ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f6906135c2565b60405180910390fd5b8060048190555050565b60045481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600042600360189054906101000a900463ffffffff1663ffffffff161115905090565b6112ce6114c9565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061131457506113138561130e6114c9565b61120f565b5b611353576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134a906134e2565b60405180910390fd5b6113608585858585611cea565b5050505050565b61136f6114c9565b73ffffffffffffffffffffffffffffffffffffffff1661138d610b98565b73ffffffffffffffffffffffffffffffffffffffff16146113e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113da906135c2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611453576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144a906134c2565b60405180910390fd5b61145c816117ff565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b80600290805190602001906114e7929190612793565b5050565b815183511461152f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152690613662565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561159f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159690613542565b60405180910390fd5b60006115a96114c9565b90506115b9818787878787611f6c565b60005b845181101561176a5760008582815181106115da576115d9613c0b565b5b6020026020010151905060008583815181106115f9576115f8613c0b565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561169a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169190613582565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461174f919061385c565b925050819055505050508061176390613b08565b90506115bc565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516117e19291906133ee565b60405180910390a46117f7818787878787611f74565b505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008163ffffffff161161190e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190590613502565b60405180910390fd5b6105dc63ffffffff1681600360149054906101000a900463ffffffff1661193591906138b2565b63ffffffff16111561197c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611973906135a2565b60405180910390fd5b80600360148282829054906101000a900463ffffffff1661199d91906138b2565b92506101000a81548163ffffffff021916908363ffffffff16021790555060018163ffffffff161115611b385760008163ffffffff1667ffffffffffffffff8111156119ec576119eb613c3a565b5b604051908082528060200260200182016040528015611a1a5781602001602082028036833780820191505090505b50905060008263ffffffff1667ffffffffffffffff811115611a3f57611a3e613c3a565b5b604051908082528060200260200182016040528015611a6d5781602001602082028036833780820191505090505b50905060005b8363ffffffff168163ffffffff161015611b15578084600360149054906101000a900463ffffffff16611aa691906139ab565b611ab091906138b2565b63ffffffff16838263ffffffff1681518110611acf57611ace613c0b565b5b6020026020010181815250506001828263ffffffff1681518110611af657611af5613c0b565b5b6020026020010181815250508080611b0d90613b51565b915050611a73565b50611b318483836040518060200160405280600081525061215b565b5050611b79565b611b78826001600360149054906101000a900463ffffffff16611b5b91906139ab565b63ffffffff16600160405180602001604052806000815250612379565b5b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611bec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be390613622565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611cdd9190613425565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611d5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5190613542565b60405180910390fd5b6000611d646114c9565b9050611d84818787611d758861250f565b611d7e8861250f565b87611f6c565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611e1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1290613582565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ed0919061385c565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051611f4d9291906136bd565b60405180910390a4611f63828888888888612589565b50505050505050565b505050505050565b611f938473ffffffffffffffffffffffffffffffffffffffff16612770565b15612153578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611fd995949392919061330a565b602060405180830381600087803b158015611ff357600080fd5b505af192505050801561202457506040513d601f19601f820116820180604052508101906120219190612e3e565b60015b6120ca57612030613c69565b806308c379a0141561208d5750612045614195565b80612050575061208f565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120849190613440565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c190613462565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612151576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214890613482565b60405180910390fd5b505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156121cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c290613682565b60405180910390fd5b815183511461220f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220690613662565b60405180910390fd5b60006122196114c9565b905061222a81600087878787611f6c565b60005b84518110156122e35783818151811061224957612248613c0b565b5b602002602001015160008087848151811061226757612266613c0b565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122c9919061385c565b9250508190555080806122db90613b08565b91505061222d565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161235b9291906133ee565b60405180910390a461237281600087878787611f74565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156123e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e090613682565b60405180910390fd5b60006123f36114c9565b9050612414816000876124058861250f565b61240e8861250f565b87611f6c565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612473919061385c565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6287876040516124f19291906136bd565b60405180910390a461250881600087878787612589565b5050505050565b60606000600167ffffffffffffffff81111561252e5761252d613c3a565b5b60405190808252806020026020018201604052801561255c5781602001602082028036833780820191505090505b509050828160008151811061257457612573613c0b565b5b60200260200101818152505080915050919050565b6125a88473ffffffffffffffffffffffffffffffffffffffff16612770565b15612768578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016125ee959493929190613372565b602060405180830381600087803b15801561260857600080fd5b505af192505050801561263957506040513d601f19601f820116820180604052508101906126369190612e3e565b60015b6126df57612645613c69565b806308c379a014156126a2575061265a614195565b8061266557506126a4565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126999190613440565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d690613462565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612766576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275d90613482565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82805461279f90613aa5565b90600052602060002090601f0160209004810192826127c15760008555612808565b82601f106127da57805160ff1916838001178555612808565b82800160010185558215612808579182015b828111156128075782518255916020019190600101906127ec565b5b5090506128159190612819565b5090565b5b8082111561283257600081600090555060010161281a565b5090565b600061284961284484613726565b613701565b9050808382526020820190508285602086028201111561286c5761286b613c90565b5b60005b8581101561289c5781612882888261299a565b84526020840193506020830192505060018101905061286f565b5050509392505050565b60006128b96128b484613752565b613701565b905080838252602082019050828560208602820111156128dc576128db613c90565b5b60005b8581101561290c57816128f28882612aa6565b8452602084019350602083019250506001810190506128df565b5050509392505050565b60006129296129248461377e565b613701565b90508281526020810184848401111561294557612944613c95565b5b612950848285613a63565b509392505050565b600061296b612966846137af565b613701565b90508281526020810184848401111561298757612986613c95565b5b612992848285613a63565b509392505050565b6000813590506129a98161422b565b92915050565b600082601f8301126129c4576129c3613c8b565b5b81356129d4848260208601612836565b91505092915050565b600082601f8301126129f2576129f1613c8b565b5b8135612a028482602086016128a6565b91505092915050565b600081359050612a1a81614242565b92915050565b600081359050612a2f81614259565b92915050565b600081519050612a4481614259565b92915050565b600082601f830112612a5f57612a5e613c8b565b5b8135612a6f848260208601612916565b91505092915050565b600082601f830112612a8d57612a8c613c8b565b5b8135612a9d848260208601612958565b91505092915050565b600081359050612ab581614270565b92915050565b600081359050612aca81614287565b92915050565b600060208284031215612ae657612ae5613c9f565b5b6000612af48482850161299a565b91505092915050565b60008060408385031215612b1457612b13613c9f565b5b6000612b228582860161299a565b9250506020612b338582860161299a565b9150509250929050565b600080600080600060a08688031215612b5957612b58613c9f565b5b6000612b678882890161299a565b9550506020612b788882890161299a565b945050604086013567ffffffffffffffff811115612b9957612b98613c9a565b5b612ba5888289016129dd565b935050606086013567ffffffffffffffff811115612bc657612bc5613c9a565b5b612bd2888289016129dd565b925050608086013567ffffffffffffffff811115612bf357612bf2613c9a565b5b612bff88828901612a4a565b9150509295509295909350565b600080600080600060a08688031215612c2857612c27613c9f565b5b6000612c368882890161299a565b9550506020612c478882890161299a565b9450506040612c5888828901612aa6565b9350506060612c6988828901612aa6565b925050608086013567ffffffffffffffff811115612c8a57612c89613c9a565b5b612c9688828901612a4a565b9150509295509295909350565b60008060408385031215612cba57612cb9613c9f565b5b6000612cc88582860161299a565b9250506020612cd985828601612a0b565b9150509250929050565b60008060408385031215612cfa57612cf9613c9f565b5b6000612d088582860161299a565b9250506020612d1985828601612aa6565b9150509250929050565b600060208284031215612d3957612d38613c9f565b5b600082013567ffffffffffffffff811115612d5757612d56613c9a565b5b612d63848285016129af565b91505092915050565b60008060408385031215612d8357612d82613c9f565b5b600083013567ffffffffffffffff811115612da157612da0613c9a565b5b612dad858286016129af565b925050602083013567ffffffffffffffff811115612dce57612dcd613c9a565b5b612dda858286016129dd565b9150509250929050565b600060208284031215612dfa57612df9613c9f565b5b6000612e0884828501612a0b565b91505092915050565b600060208284031215612e2757612e26613c9f565b5b6000612e3584828501612a20565b91505092915050565b600060208284031215612e5457612e53613c9f565b5b6000612e6284828501612a35565b91505092915050565b600060208284031215612e8157612e80613c9f565b5b600082013567ffffffffffffffff811115612e9f57612e9e613c9a565b5b612eab84828501612a78565b91505092915050565b600060208284031215612eca57612ec9613c9f565b5b6000612ed884828501612aa6565b91505092915050565b600060208284031215612ef757612ef6613c9f565b5b6000612f0584828501612abb565b91505092915050565b6000612f1a83836132ad565b60208301905092915050565b612f2f816139df565b82525050565b6000612f40826137f0565b612f4a818561381e565b9350612f55836137e0565b8060005b83811015612f86578151612f6d8882612f0e565b9750612f7883613811565b925050600181019050612f59565b5085935050505092915050565b612f9c816139f1565b82525050565b6000612fad826137fb565b612fb7818561382f565b9350612fc7818560208601613a72565b612fd081613ca4565b840191505092915050565b6000612fe682613806565b612ff0818561384b565b9350613000818560208601613a72565b61300981613ca4565b840191505092915050565b600061302160348361384b565b915061302c82613cc2565b604082019050919050565b600061304460288361384b565b915061304f82613d11565b604082019050919050565b6000613067602b8361384b565b915061307282613d60565b604082019050919050565b600061308a60268361384b565b915061309582613daf565b604082019050919050565b60006130ad60298361384b565b91506130b882613dfe565b604082019050919050565b60006130d0601d8361384b565b91506130db82613e4d565b602082019050919050565b60006130f360118361384b565b91506130fe82613e76565b602082019050919050565b600061311660258361384b565b915061312182613e9f565b604082019050919050565b600061313960328361384b565b915061314482613eee565b604082019050919050565b600061315c602a8361384b565b915061316782613f3d565b604082019050919050565b600061317f60298361384b565b915061318a82613f8c565b604082019050919050565b60006131a260208361384b565b91506131ad82613fdb565b602082019050919050565b60006131c560138361384b565b91506131d082614004565b602082019050919050565b60006131e8601b8361384b565b91506131f38261402d565b602082019050919050565b600061320b600083613840565b915061321682614056565b600082019050919050565b600061322e60298361384b565b915061323982614059565b604082019050919050565b600061325160298361384b565b915061325c826140a8565b604082019050919050565b600061327460288361384b565b915061327f826140f7565b604082019050919050565b600061329760218361384b565b91506132a282614146565b604082019050919050565b6132b681613a49565b82525050565b6132c581613a49565b82525050565b6132d481613a53565b82525050565b60006132e5826131fe565b9150819050919050565b60006020820190506133046000830184612f26565b92915050565b600060a08201905061331f6000830188612f26565b61332c6020830187612f26565b818103604083015261333e8186612f35565b905081810360608301526133528185612f35565b905081810360808301526133668184612fa2565b90509695505050505050565b600060a0820190506133876000830188612f26565b6133946020830187612f26565b6133a160408301866132bc565b6133ae60608301856132bc565b81810360808301526133c08184612fa2565b90509695505050505050565b600060208201905081810360008301526133e68184612f35565b905092915050565b600060408201905081810360008301526134088185612f35565b9050818103602083015261341c8184612f35565b90509392505050565b600060208201905061343a6000830184612f93565b92915050565b6000602082019050818103600083015261345a8184612fdb565b905092915050565b6000602082019050818103600083015261347b81613014565b9050919050565b6000602082019050818103600083015261349b81613037565b9050919050565b600060208201905081810360008301526134bb8161305a565b9050919050565b600060208201905081810360008301526134db8161307d565b9050919050565b600060208201905081810360008301526134fb816130a0565b9050919050565b6000602082019050818103600083015261351b816130c3565b9050919050565b6000602082019050818103600083015261353b816130e6565b9050919050565b6000602082019050818103600083015261355b81613109565b9050919050565b6000602082019050818103600083015261357b8161312c565b9050919050565b6000602082019050818103600083015261359b8161314f565b9050919050565b600060208201905081810360008301526135bb81613172565b9050919050565b600060208201905081810360008301526135db81613195565b9050919050565b600060208201905081810360008301526135fb816131b8565b9050919050565b6000602082019050818103600083015261361b816131db565b9050919050565b6000602082019050818103600083015261363b81613221565b9050919050565b6000602082019050818103600083015261365b81613244565b9050919050565b6000602082019050818103600083015261367b81613267565b9050919050565b6000602082019050818103600083015261369b8161328a565b9050919050565b60006020820190506136b760008301846132bc565b92915050565b60006040820190506136d260008301856132bc565b6136df60208301846132bc565b9392505050565b60006020820190506136fb60008301846132cb565b92915050565b600061370b61371c565b90506137178282613ad7565b919050565b6000604051905090565b600067ffffffffffffffff82111561374157613740613c3a565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561376d5761376c613c3a565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561379957613798613c3a565b5b6137a282613ca4565b9050602081019050919050565b600067ffffffffffffffff8211156137ca576137c9613c3a565b5b6137d382613ca4565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600061386782613a49565b915061387283613a49565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156138a7576138a6613b7e565b5b828201905092915050565b60006138bd82613a53565b91506138c883613a53565b92508263ffffffff038211156138e1576138e0613b7e565b5b828201905092915050565b60006138f782613a49565b915061390283613a49565b92508261391257613911613bad565b5b828204905092915050565b600061392882613a49565b915061393383613a49565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561396c5761396b613b7e565b5b828202905092915050565b600061398282613a49565b915061398d83613a49565b9250828210156139a05761399f613b7e565b5b828203905092915050565b60006139b682613a53565b91506139c183613a53565b9250828210156139d4576139d3613b7e565b5b828203905092915050565b60006139ea82613a29565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b82818337600083830152505050565b60005b83811015613a90578082015181840152602081019050613a75565b83811115613a9f576000848401525b50505050565b60006002820490506001821680613abd57607f821691505b60208210811415613ad157613ad0613bdc565b5b50919050565b613ae082613ca4565b810181811067ffffffffffffffff82111715613aff57613afe613c3a565b5b80604052505050565b6000613b1382613a49565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613b4657613b45613b7e565b5b600182019050919050565b6000613b5c82613a53565b915063ffffffff821415613b7357613b72613b7e565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d1115613c885760046000803e613c85600051613cb5565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f436f756e74206d7573742062652067726561746572207468616e20302e000000600082015250565b7f4e6f7420656e6f7567682065746865722e000000000000000000000000000000600082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f436f756e74206578636565647320746865206d6178696d756d20616c6c6f776560008201527f6420737570706c792e0000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f53616c65206973206e6f74206163746976652e00000000000000000000000000600082015250565b7f4661696c656420746f2073656e64207472616e73616374696f6e2e0000000000600082015250565b50565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d10156141a557614228565b6141ad61371c565b60043d036004823e80513d602482011167ffffffffffffffff821117156141d5575050614228565b808201805167ffffffffffffffff8111156141f35750505050614228565b80602083010160043d038501811115614210575050505050614228565b61421f82602001850186613ad7565b82955050505050505b90565b614234816139df565b811461423f57600080fd5b50565b61424b816139f1565b811461425657600080fd5b50565b614262816139fd565b811461426d57600080fd5b50565b61427981613a49565b811461428457600080fd5b50565b61429081613a53565b811461429b57600080fd5b5056fea26469706673582212208590eb9eca58e97af2a8477e341331837c2cbd8ab3fee0979a43761e78f28b9d64736f6c63430008070033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000005c68747470733a2f2f6275636b6574732e6d7970696e6174612e636c6f75642f697066732f516d52636439653564716f557863766737566a456d77514a3369526266696664427a694b4e7859506f72517566532f7b69647d2e6a736f6e00000000

-----Decoded View---------------
Arg [0] : _uri (string): https://buckets.mypinata.cloud/ipfs/QmRcd9e5dqoUxcvg7VjEmwQJ3iRbfifdBziKNxYPorQufS/{id}.json

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 000000000000000000000000000000000000000000000000000000000000005c
Arg [2] : 68747470733a2f2f6275636b6574732e6d7970696e6174612e636c6f75642f69
Arg [3] : 7066732f516d52636439653564716f557863766737566a456d77514a33695262
Arg [4] : 66696664427a694b4e7859506f72517566532f7b69647d2e6a736f6e00000000


Deployed Bytecode Sourcemap

36945:3123:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23377:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22400:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37330:87;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36997:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23121:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37099:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25316:442;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23774:524;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2606:103;;;;;;;;;;;;;:::i;:::-;;38734:180;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1955:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37053:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24371:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38506:220;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37425:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38922:1143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37183:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37135:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37534:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37226:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24598:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37644:105;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24838:401;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2864:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23377:231;23463:7;23510:1;23491:21;;:7;:21;;;;23483:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;23578:9;:13;23588:2;23578:13;;;;;;;;;;;:22;23592:7;23578:22;;;;;;;;;;;;;;;;23571:29;;23377:231;;;;:::o;22400:310::-;22502:4;22554:26;22539:41;;;:11;:41;;;;:110;;;;22612:37;22597:52;;;:11;:52;;;;22539:110;:163;;;;22666:36;22690:11;22666:23;:36::i;:::-;22539:163;22519:183;;22400:310;;;:::o;37330:87::-;2186:12;:10;:12::i;:::-;2175:23;;:7;:5;:7::i;:::-;:23;;;2167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37396:13:::1;37404:4;37396:7;:13::i;:::-;37330:87:::0;:::o;36997:49::-;;;;;;;;;;;;;;;;;;;:::o;23121:105::-;23181:13;23214:4;23207:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23121:105;;;:::o;37099:29::-;;;;;;;;;;;;;:::o;25316:442::-;25557:12;:10;:12::i;:::-;25549:20;;:4;:20;;;:60;;;;25573:36;25590:4;25596:12;:10;:12::i;:::-;25573:16;:36::i;:::-;25549:60;25527:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;25698:52;25721:4;25727:2;25731:3;25736:7;25745:4;25698:22;:52::i;:::-;25316:442;;;;;:::o;23774:524::-;23930:16;23991:3;:10;23972:8;:15;:29;23964:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;24060:30;24107:8;:15;24093:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24060:63;;24141:9;24136:122;24160:8;:15;24156:1;:19;24136:122;;;24216:30;24226:8;24235:1;24226:11;;;;;;;;:::i;:::-;;;;;;;;24239:3;24243:1;24239:6;;;;;;;;:::i;:::-;;;;;;;;24216:9;:30::i;:::-;24197:13;24211:1;24197:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;24177:3;;;;:::i;:::-;;;24136:122;;;;24277:13;24270:20;;;23774:524;;;;:::o;2606:103::-;2186:12;:10;:12::i;:::-;2175:23;;:7;:5;:7::i;:::-;:23;;;2167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2671:30:::1;2698:1;2671:18;:30::i;:::-;2606:103::o:0;38734:180::-;2186:12;:10;:12::i;:::-;2175:23;;:7;:5;:7::i;:::-;:23;;;2167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38815:9:::1;38810:97;38834:10;:17;38830:1;:21;38810:97;;;38873:22;38878:10;38889:1;38878:13;;;;;;;;:::i;:::-;;;;;;;;38893:1;38873:4;:22::i;:::-;38853:3;;;;;:::i;:::-;;;;38810:97;;;;38734:180:::0;:::o;1955:87::-;2001:7;2028:6;;;;;;;;;;;2021:13;;1955:87;:::o;37053:37::-;;;;;;;;;;;;;;;;;;;:::o;24371:155::-;24466:52;24485:12;:10;:12::i;:::-;24499:8;24509;24466:18;:52::i;:::-;24371:155;;:::o;38506:220::-;38571:14;:12;:14::i;:::-;38563:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;38653:6;38641:18;;:9;;:18;;;;:::i;:::-;38628:9;:31;;38620:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;38694:24;38699:10;38711:6;38694:4;:24::i;:::-;38506:220;:::o;37425:101::-;2186:12;:10;:12::i;:::-;2175:23;;:7;:5;:7::i;:::-;:23;;;2167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37508:10:::1;37496:9;;:22;;;;;;;;;;;;;;;;;;37425:101:::0;:::o;38922:1143::-;2186:12;:10;:12::i;:::-;2175:23;;:7;:5;:7::i;:::-;:23;;;2167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38982:15:::1;39000:21;38982:39;;39038:5;39034:221;;;39061:12;39075:17:::0;39096:7:::1;:5;:7::i;:::-;:12;;39116:7;39096:64;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39060:100;;;;39183:7;39175:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;39237:7;;;;;39034:221;39267:27;:269;;;;;;;;39312:42;39267:269;;;;;;;;39369:42;39267:269;;;;;;;;39426:42;39267:269;;;;;;;;39483:42;39267:269;;;;;;::::0;::::1;;39549:23;:145;;;;;;;;39597:4;39549:145;;;;;;;;39624:4;39549:145;;;;;;;;39651:4;39549:145;;;;;;;;39678:4;39549:145;;;;;;::::0;::::1;;39712:8;39707:351;39730:16;39726:1;:20;;;39707:351;;;39768:14;39809:1;39790:16;:20;;;;:::i;:::-;39785:1;:25;;;:115;;39895:5;39882:6;39889:1;39882:9;;;;;;;;;:::i;:::-;;;;;;39872:19;;:7;:19;;;;:::i;:::-;39871:29;;;;:::i;:::-;39785:115;;;39830:21;39785:115;39768:132;;39918:12;39932:17:::0;39953:7:::1;:5;:7::i;:::-;:12;;39973:6;39953:31;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39917:67;;;;40007:7;39999:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;39753:305;;;39748:3;;;;;:::i;:::-;;;;39707:351;;;;38971:1094;;;2246:1;38922:1143:::0;:::o;37183:36::-;;;;;;;;;;;;;:::o;37135:39::-;37170:4;37135:39;:::o;37534:102::-;2186:12;:10;:12::i;:::-;2175:23;;:7;:5;:7::i;:::-;:23;;;2167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37618:10:::1;37606:9;:22;;;;37534:102:::0;:::o;37226:39::-;;;;:::o;24598:168::-;24697:4;24721:18;:27;24740:7;24721:27;;;;;;;;;;;;;;;:37;24749:8;24721:37;;;;;;;;;;;;;;;;;;;;;;;;;24714:44;;24598:168;;;;:::o;37644:105::-;37689:4;37726:15;37713:9;;;;;;;;;;;:28;;;;37706:35;;37644:105;:::o;24838:401::-;25054:12;:10;:12::i;:::-;25046:20;;:4;:20;;;:60;;;;25070:36;25087:4;25093:12;:10;:12::i;:::-;25070:16;:36::i;:::-;25046:60;25024:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;25186:45;25204:4;25210:2;25214;25218:6;25226:4;25186:17;:45::i;:::-;24838:401;;;;;:::o;2864:201::-;2186:12;:10;:12::i;:::-;2175:23;;:7;:5;:7::i;:::-;:23;;;2167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2973:1:::1;2953:22;;:8;:22;;;;2945:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3029:28;3048:8;3029:18;:28::i;:::-;2864:201:::0;:::o;13708:157::-;13793:4;13832:25;13817:40;;;:11;:40;;;;13810:47;;13708:157;;;:::o;679:98::-;732:7;759:10;752:17;;679:98;:::o;29318:88::-;29392:6;29385:4;:13;;;;;;;;;;;;:::i;:::-;;29318:88;:::o;27400:1074::-;27627:7;:14;27613:3;:10;:28;27605:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;27719:1;27705:16;;:2;:16;;;;27697:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;27776:16;27795:12;:10;:12::i;:::-;27776:31;;27820:60;27841:8;27851:4;27857:2;27861:3;27866:7;27875:4;27820:20;:60::i;:::-;27898:9;27893:421;27917:3;:10;27913:1;:14;27893:421;;;27949:10;27962:3;27966:1;27962:6;;;;;;;;:::i;:::-;;;;;;;;27949:19;;27983:14;28000:7;28008:1;28000:10;;;;;;;;:::i;:::-;;;;;;;;27983:27;;28027:19;28049:9;:13;28059:2;28049:13;;;;;;;;;;;:19;28063:4;28049:19;;;;;;;;;;;;;;;;28027:41;;28106:6;28091:11;:21;;28083:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;28239:6;28225:11;:20;28203:9;:13;28213:2;28203:13;;;;;;;;;;;:19;28217:4;28203:19;;;;;;;;;;;;;;;:42;;;;28296:6;28275:9;:13;28285:2;28275:13;;;;;;;;;;;:17;28289:2;28275:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;27934:380;;;27929:3;;;;:::i;:::-;;;27893:421;;;;28361:2;28331:47;;28355:4;28331:47;;28345:8;28331:47;;;28365:3;28370:7;28331:47;;;;;;;:::i;:::-;;;;;;;;28391:75;28427:8;28437:4;28443:2;28447:3;28452:7;28461:4;28391:35;:75::i;:::-;27594:880;27400:1074;;;;;:::o;3225:191::-;3299:16;3318:6;;;;;;;;;;;3299:25;;3344:8;3335:6;;:17;;;;;;;;;;;;;;;;;;3399:8;3368:40;;3389:8;3368:40;;;;;;;;;;;;3288:128;3225:191;:::o;37757:741::-;37836:1;37827:6;:10;;;37819:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;37170:4;37904:33;;37918:6;37904:11;;;;;;;;;;;:20;;;;:::i;:::-;:33;;;;37882:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;38034:6;38019:11;;:21;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;38066:1;38057:6;:10;;;38053:438;;;38084:20;38129:6;38121:15;;38107:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38084:53;;38152:24;38201:6;38193:15;;38179:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38152:57;;38231:8;38226:137;38249:6;38245:10;;:1;:10;;;38226:137;;;38313:1;38304:6;38290:11;;;;;;;;;;;:20;;;;:::i;:::-;:24;;;;:::i;:::-;38281:33;;:3;38285:1;38281:6;;;;;;;;;;:::i;:::-;;;;;;;:33;;;;;38346:1;38333:7;38341:1;38333:10;;;;;;;;;;:::i;:::-;;;;;;;:14;;;;;38257:3;;;;;:::i;:::-;;;;38226:137;;;;38379:33;38390:3;38395;38400:7;38379:33;;;;;;;;;;;;:10;:33::i;:::-;38069:355;;38053:438;;;38445:34;38451:3;38470:1;38456:11;;;;;;;;;;;:15;;;;:::i;:::-;38445:34;;38473:1;38445:34;;;;;;;;;;;;:5;:34::i;:::-;38053:438;37757:741;;:::o;33586:331::-;33741:8;33732:17;;:5;:17;;;;33724:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;33844:8;33806:18;:25;33825:5;33806:25;;;;;;;;;;;;;;;:35;33832:8;33806:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;33890:8;33868:41;;33883:5;33868:41;;;33900:8;33868:41;;;;;;:::i;:::-;;;;;;;;33586:331;;;:::o;26222:820::-;26424:1;26410:16;;:2;:16;;;;26402:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;26481:16;26500:12;:10;:12::i;:::-;26481:31;;26525:96;26546:8;26556:4;26562:2;26566:21;26584:2;26566:17;:21::i;:::-;26589:25;26607:6;26589:17;:25::i;:::-;26616:4;26525:20;:96::i;:::-;26634:19;26656:9;:13;26666:2;26656:13;;;;;;;;;;;:19;26670:4;26656:19;;;;;;;;;;;;;;;;26634:41;;26709:6;26694:11;:21;;26686:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;26834:6;26820:11;:20;26798:9;:13;26808:2;26798:13;;;;;;;;;;;:19;26812:4;26798:19;;;;;;;;;;;;;;;:42;;;;26883:6;26862:9;:13;26872:2;26862:13;;;;;;;;;;;:17;26876:2;26862:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;26938:2;26907:46;;26932:4;26907:46;;26922:8;26907:46;;;26942:2;26946:6;26907:46;;;;;;;:::i;:::-;;;;;;;;26966:68;26997:8;27007:4;27013:2;27017;27021:6;27029:4;26966:30;:68::i;:::-;26391:651;;26222:820;;;;;:::o;34873:221::-;;;;;;;:::o;35854:813::-;36094:15;:2;:13;;;:15::i;:::-;36090:570;;;36147:2;36130:43;;;36174:8;36184:4;36190:3;36195:7;36204:4;36130:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36126:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;36522:6;36515:14;;;;;;;;;;;:::i;:::-;;;;;;;;36126:523;;;36571:62;;;;;;;;;;:::i;:::-;;;;;;;;36126:523;36303:48;;;36291:60;;;:8;:60;;;;36287:159;;36376:50;;;;;;;;;;:::i;:::-;;;;;;;;36287:159;36210:251;36090:570;35854:813;;;;;;:::o;30717:735::-;30909:1;30895:16;;:2;:16;;;;30887:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;30982:7;:14;30968:3;:10;:28;30960:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;31054:16;31073:12;:10;:12::i;:::-;31054:31;;31098:66;31119:8;31137:1;31141:2;31145:3;31150:7;31159:4;31098:20;:66::i;:::-;31182:9;31177:103;31201:3;:10;31197:1;:14;31177:103;;;31258:7;31266:1;31258:10;;;;;;;;:::i;:::-;;;;;;;;31233:9;:17;31243:3;31247:1;31243:6;;;;;;;;:::i;:::-;;;;;;;;31233:17;;;;;;;;;;;:21;31251:2;31233:21;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;31213:3;;;;;:::i;:::-;;;;31177:103;;;;31333:2;31297:53;;31329:1;31297:53;;31311:8;31297:53;;;31337:3;31342:7;31297:53;;;;;;;:::i;:::-;;;;;;;;31363:81;31399:8;31417:1;31421:2;31425:3;31430:7;31439:4;31363:35;:81::i;:::-;30876:576;30717:735;;;;:::o;29792:569::-;29959:1;29945:16;;:2;:16;;;;29937:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;30012:16;30031:12;:10;:12::i;:::-;30012:31;;30056:102;30077:8;30095:1;30099:2;30103:21;30121:2;30103:17;:21::i;:::-;30126:25;30144:6;30126:17;:25::i;:::-;30153:4;30056:20;:102::i;:::-;30192:6;30171:9;:13;30181:2;30171:13;;;;;;;;;;;:17;30185:2;30171:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;30251:2;30214:52;;30247:1;30214:52;;30229:8;30214:52;;;30255:2;30259:6;30214:52;;;;;;;:::i;:::-;;;;;;;;30279:74;30310:8;30328:1;30332:2;30336;30340:6;30348:4;30279:30;:74::i;:::-;29926:435;29792:569;;;;:::o;36675:198::-;36741:16;36770:22;36809:1;36795:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36770:41;;36833:7;36822:5;36828:1;36822:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;36860:5;36853:12;;;36675:198;;;:::o;35102:744::-;35317:15;:2;:13;;;:15::i;:::-;35313:526;;;35370:2;35353:38;;;35392:8;35402:4;35408:2;35412:6;35420:4;35353:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35349:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;35701:6;35694:14;;;;;;;;;;;:::i;:::-;;;;;;;;35349:479;;;35750:62;;;;;;;;;;:::i;:::-;;;;;;;;35349:479;35487:43;;;35475:55;;;:8;:55;;;;35471:154;;35555:50;;;;;;;;;;:::i;:::-;;;;;;;;35471:154;35426:214;35313:526;35102:744;;;;;;:::o;4656:326::-;4716:4;4973:1;4951:7;:19;;;:23;4944:30;;4656:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;769:::-;865:5;890:81;906:64;963:6;906:64;:::i;:::-;890:81;:::i;:::-;881:90;;991:5;1020:6;1013:5;1006:21;1054:4;1047:5;1043:16;1036:23;;1080:6;1130:3;1122:4;1114:6;1110:17;1105:3;1101:27;1098:36;1095:143;;;1149:79;;:::i;:::-;1095:143;1262:1;1247:238;1272:6;1269:1;1266:13;1247:238;;;1340:3;1369:37;1402:3;1390:10;1369:37;:::i;:::-;1364:3;1357:50;1436:4;1431:3;1427:14;1420:21;;1470:4;1465:3;1461:14;1454:21;;1307:178;1294:1;1291;1287:9;1282:14;;1247:238;;;1251:14;871:620;;769:722;;;;;:::o;1497:410::-;1574:5;1599:65;1615:48;1656:6;1615:48;:::i;:::-;1599:65;:::i;:::-;1590:74;;1687:6;1680:5;1673:21;1725:4;1718:5;1714:16;1763:3;1754:6;1749:3;1745:16;1742:25;1739:112;;;1770:79;;:::i;:::-;1739:112;1860:41;1894:6;1889:3;1884;1860:41;:::i;:::-;1580:327;1497:410;;;;;:::o;1913:412::-;1991:5;2016:66;2032:49;2074:6;2032:49;:::i;:::-;2016:66;:::i;:::-;2007:75;;2105:6;2098:5;2091:21;2143:4;2136:5;2132:16;2181:3;2172:6;2167:3;2163:16;2160:25;2157:112;;;2188:79;;:::i;:::-;2157:112;2278:41;2312:6;2307:3;2302;2278:41;:::i;:::-;1997:328;1913:412;;;;;:::o;2331:139::-;2377:5;2415:6;2402:20;2393:29;;2431:33;2458:5;2431:33;:::i;:::-;2331:139;;;;:::o;2493:370::-;2564:5;2613:3;2606:4;2598:6;2594:17;2590:27;2580:122;;2621:79;;:::i;:::-;2580:122;2738:6;2725:20;2763:94;2853:3;2845:6;2838:4;2830:6;2826:17;2763:94;:::i;:::-;2754:103;;2570:293;2493:370;;;;:::o;2886:::-;2957:5;3006:3;2999:4;2991:6;2987:17;2983:27;2973:122;;3014:79;;:::i;:::-;2973:122;3131:6;3118:20;3156:94;3246:3;3238:6;3231:4;3223:6;3219:17;3156:94;:::i;:::-;3147:103;;2963:293;2886:370;;;;:::o;3262:133::-;3305:5;3343:6;3330:20;3321:29;;3359:30;3383:5;3359:30;:::i;:::-;3262:133;;;;:::o;3401:137::-;3446:5;3484:6;3471:20;3462:29;;3500:32;3526:5;3500:32;:::i;:::-;3401:137;;;;:::o;3544:141::-;3600:5;3631:6;3625:13;3616:22;;3647:32;3673:5;3647:32;:::i;:::-;3544:141;;;;:::o;3704:338::-;3759:5;3808:3;3801:4;3793:6;3789:17;3785:27;3775:122;;3816:79;;:::i;:::-;3775:122;3933:6;3920:20;3958:78;4032:3;4024:6;4017:4;4009:6;4005:17;3958:78;:::i;:::-;3949:87;;3765:277;3704:338;;;;:::o;4062:340::-;4118:5;4167:3;4160:4;4152:6;4148:17;4144:27;4134:122;;4175:79;;:::i;:::-;4134:122;4292:6;4279:20;4317:79;4392:3;4384:6;4377:4;4369:6;4365:17;4317:79;:::i;:::-;4308:88;;4124:278;4062:340;;;;:::o;4408:139::-;4454:5;4492:6;4479:20;4470:29;;4508:33;4535:5;4508:33;:::i;:::-;4408:139;;;;:::o;4553:137::-;4598:5;4636:6;4623:20;4614:29;;4652:32;4678:5;4652:32;:::i;:::-;4553:137;;;;:::o;4696:329::-;4755:6;4804:2;4792:9;4783:7;4779:23;4775:32;4772:119;;;4810:79;;:::i;:::-;4772:119;4930:1;4955:53;5000:7;4991:6;4980:9;4976:22;4955:53;:::i;:::-;4945:63;;4901:117;4696:329;;;;:::o;5031:474::-;5099:6;5107;5156:2;5144:9;5135:7;5131:23;5127:32;5124:119;;;5162:79;;:::i;:::-;5124:119;5282:1;5307:53;5352:7;5343:6;5332:9;5328:22;5307:53;:::i;:::-;5297:63;;5253:117;5409:2;5435:53;5480:7;5471:6;5460:9;5456:22;5435:53;:::i;:::-;5425:63;;5380:118;5031:474;;;;;:::o;5511:1509::-;5665:6;5673;5681;5689;5697;5746:3;5734:9;5725:7;5721:23;5717:33;5714:120;;;5753:79;;:::i;:::-;5714:120;5873:1;5898:53;5943:7;5934:6;5923:9;5919:22;5898:53;:::i;:::-;5888:63;;5844:117;6000:2;6026:53;6071:7;6062:6;6051:9;6047:22;6026:53;:::i;:::-;6016:63;;5971:118;6156:2;6145:9;6141:18;6128:32;6187:18;6179:6;6176:30;6173:117;;;6209:79;;:::i;:::-;6173:117;6314:78;6384:7;6375:6;6364:9;6360:22;6314:78;:::i;:::-;6304:88;;6099:303;6469:2;6458:9;6454:18;6441:32;6500:18;6492:6;6489:30;6486:117;;;6522:79;;:::i;:::-;6486:117;6627:78;6697:7;6688:6;6677:9;6673:22;6627:78;:::i;:::-;6617:88;;6412:303;6782:3;6771:9;6767:19;6754:33;6814:18;6806:6;6803:30;6800:117;;;6836:79;;:::i;:::-;6800:117;6941:62;6995:7;6986:6;6975:9;6971:22;6941:62;:::i;:::-;6931:72;;6725:288;5511:1509;;;;;;;;:::o;7026:1089::-;7130:6;7138;7146;7154;7162;7211:3;7199:9;7190:7;7186:23;7182:33;7179:120;;;7218:79;;:::i;:::-;7179:120;7338:1;7363:53;7408:7;7399:6;7388:9;7384:22;7363:53;:::i;:::-;7353:63;;7309:117;7465:2;7491:53;7536:7;7527:6;7516:9;7512:22;7491:53;:::i;:::-;7481:63;;7436:118;7593:2;7619:53;7664:7;7655:6;7644:9;7640:22;7619:53;:::i;:::-;7609:63;;7564:118;7721:2;7747:53;7792:7;7783:6;7772:9;7768:22;7747:53;:::i;:::-;7737:63;;7692:118;7877:3;7866:9;7862:19;7849:33;7909:18;7901:6;7898:30;7895:117;;;7931:79;;:::i;:::-;7895:117;8036:62;8090:7;8081:6;8070:9;8066:22;8036:62;:::i;:::-;8026:72;;7820:288;7026:1089;;;;;;;;:::o;8121:468::-;8186:6;8194;8243:2;8231:9;8222:7;8218:23;8214:32;8211:119;;;8249:79;;:::i;:::-;8211:119;8369:1;8394:53;8439:7;8430:6;8419:9;8415:22;8394:53;:::i;:::-;8384:63;;8340:117;8496:2;8522:50;8564:7;8555:6;8544:9;8540:22;8522:50;:::i;:::-;8512:60;;8467:115;8121:468;;;;;:::o;8595:474::-;8663:6;8671;8720:2;8708:9;8699:7;8695:23;8691:32;8688:119;;;8726:79;;:::i;:::-;8688:119;8846:1;8871:53;8916:7;8907:6;8896:9;8892:22;8871:53;:::i;:::-;8861:63;;8817:117;8973:2;8999:53;9044:7;9035:6;9024:9;9020:22;8999:53;:::i;:::-;8989:63;;8944:118;8595:474;;;;;:::o;9075:539::-;9159:6;9208:2;9196:9;9187:7;9183:23;9179:32;9176:119;;;9214:79;;:::i;:::-;9176:119;9362:1;9351:9;9347:17;9334:31;9392:18;9384:6;9381:30;9378:117;;;9414:79;;:::i;:::-;9378:117;9519:78;9589:7;9580:6;9569:9;9565:22;9519:78;:::i;:::-;9509:88;;9305:302;9075:539;;;;:::o;9620:894::-;9738:6;9746;9795:2;9783:9;9774:7;9770:23;9766:32;9763:119;;;9801:79;;:::i;:::-;9763:119;9949:1;9938:9;9934:17;9921:31;9979:18;9971:6;9968:30;9965:117;;;10001:79;;:::i;:::-;9965:117;10106:78;10176:7;10167:6;10156:9;10152:22;10106:78;:::i;:::-;10096:88;;9892:302;10261:2;10250:9;10246:18;10233:32;10292:18;10284:6;10281:30;10278:117;;;10314:79;;:::i;:::-;10278:117;10419:78;10489:7;10480:6;10469:9;10465:22;10419:78;:::i;:::-;10409:88;;10204:303;9620:894;;;;;:::o;10520:323::-;10576:6;10625:2;10613:9;10604:7;10600:23;10596:32;10593:119;;;10631:79;;:::i;:::-;10593:119;10751:1;10776:50;10818:7;10809:6;10798:9;10794:22;10776:50;:::i;:::-;10766:60;;10722:114;10520:323;;;;:::o;10849:327::-;10907:6;10956:2;10944:9;10935:7;10931:23;10927:32;10924:119;;;10962:79;;:::i;:::-;10924:119;11082:1;11107:52;11151:7;11142:6;11131:9;11127:22;11107:52;:::i;:::-;11097:62;;11053:116;10849:327;;;;:::o;11182:349::-;11251:6;11300:2;11288:9;11279:7;11275:23;11271:32;11268:119;;;11306:79;;:::i;:::-;11268:119;11426:1;11451:63;11506:7;11497:6;11486:9;11482:22;11451:63;:::i;:::-;11441:73;;11397:127;11182:349;;;;:::o;11537:509::-;11606:6;11655:2;11643:9;11634:7;11630:23;11626:32;11623:119;;;11661:79;;:::i;:::-;11623:119;11809:1;11798:9;11794:17;11781:31;11839:18;11831:6;11828:30;11825:117;;;11861:79;;:::i;:::-;11825:117;11966:63;12021:7;12012:6;12001:9;11997:22;11966:63;:::i;:::-;11956:73;;11752:287;11537:509;;;;:::o;12052:329::-;12111:6;12160:2;12148:9;12139:7;12135:23;12131:32;12128:119;;;12166:79;;:::i;:::-;12128:119;12286:1;12311:53;12356:7;12347:6;12336:9;12332:22;12311:53;:::i;:::-;12301:63;;12257:117;12052:329;;;;:::o;12387:327::-;12445:6;12494:2;12482:9;12473:7;12469:23;12465:32;12462:119;;;12500:79;;:::i;:::-;12462:119;12620:1;12645:52;12689:7;12680:6;12669:9;12665:22;12645:52;:::i;:::-;12635:62;;12591:116;12387:327;;;;:::o;12720:179::-;12789:10;12810:46;12852:3;12844:6;12810:46;:::i;:::-;12888:4;12883:3;12879:14;12865:28;;12720:179;;;;:::o;12905:118::-;12992:24;13010:5;12992:24;:::i;:::-;12987:3;12980:37;12905:118;;:::o;13059:732::-;13178:3;13207:54;13255:5;13207:54;:::i;:::-;13277:86;13356:6;13351:3;13277:86;:::i;:::-;13270:93;;13387:56;13437:5;13387:56;:::i;:::-;13466:7;13497:1;13482:284;13507:6;13504:1;13501:13;13482:284;;;13583:6;13577:13;13610:63;13669:3;13654:13;13610:63;:::i;:::-;13603:70;;13696:60;13749:6;13696:60;:::i;:::-;13686:70;;13542:224;13529:1;13526;13522:9;13517:14;;13482:284;;;13486:14;13782:3;13775:10;;13183:608;;;13059:732;;;;:::o;13797:109::-;13878:21;13893:5;13878:21;:::i;:::-;13873:3;13866:34;13797:109;;:::o;13912:360::-;13998:3;14026:38;14058:5;14026:38;:::i;:::-;14080:70;14143:6;14138:3;14080:70;:::i;:::-;14073:77;;14159:52;14204:6;14199:3;14192:4;14185:5;14181:16;14159:52;:::i;:::-;14236:29;14258:6;14236:29;:::i;:::-;14231:3;14227:39;14220:46;;14002:270;13912:360;;;;:::o;14278:364::-;14366:3;14394:39;14427:5;14394:39;:::i;:::-;14449:71;14513:6;14508:3;14449:71;:::i;:::-;14442:78;;14529:52;14574:6;14569:3;14562:4;14555:5;14551:16;14529:52;:::i;:::-;14606:29;14628:6;14606:29;:::i;:::-;14601:3;14597:39;14590:46;;14370:272;14278:364;;;;:::o;14648:366::-;14790:3;14811:67;14875:2;14870:3;14811:67;:::i;:::-;14804:74;;14887:93;14976:3;14887:93;:::i;:::-;15005:2;15000:3;14996:12;14989:19;;14648:366;;;:::o;15020:::-;15162:3;15183:67;15247:2;15242:3;15183:67;:::i;:::-;15176:74;;15259:93;15348:3;15259:93;:::i;:::-;15377:2;15372:3;15368:12;15361:19;;15020:366;;;:::o;15392:::-;15534:3;15555:67;15619:2;15614:3;15555:67;:::i;:::-;15548:74;;15631:93;15720:3;15631:93;:::i;:::-;15749:2;15744:3;15740:12;15733:19;;15392:366;;;:::o;15764:::-;15906:3;15927:67;15991:2;15986:3;15927:67;:::i;:::-;15920:74;;16003:93;16092:3;16003:93;:::i;:::-;16121:2;16116:3;16112:12;16105:19;;15764:366;;;:::o;16136:::-;16278:3;16299:67;16363:2;16358:3;16299:67;:::i;:::-;16292:74;;16375:93;16464:3;16375:93;:::i;:::-;16493:2;16488:3;16484:12;16477:19;;16136:366;;;:::o;16508:::-;16650:3;16671:67;16735:2;16730:3;16671:67;:::i;:::-;16664:74;;16747:93;16836:3;16747:93;:::i;:::-;16865:2;16860:3;16856:12;16849:19;;16508:366;;;:::o;16880:::-;17022:3;17043:67;17107:2;17102:3;17043:67;:::i;:::-;17036:74;;17119:93;17208:3;17119:93;:::i;:::-;17237:2;17232:3;17228:12;17221:19;;16880:366;;;:::o;17252:::-;17394:3;17415:67;17479:2;17474:3;17415:67;:::i;:::-;17408:74;;17491:93;17580:3;17491:93;:::i;:::-;17609:2;17604:3;17600:12;17593:19;;17252:366;;;:::o;17624:::-;17766:3;17787:67;17851:2;17846:3;17787:67;:::i;:::-;17780:74;;17863:93;17952:3;17863:93;:::i;:::-;17981:2;17976:3;17972:12;17965:19;;17624:366;;;:::o;17996:::-;18138:3;18159:67;18223:2;18218:3;18159:67;:::i;:::-;18152:74;;18235:93;18324:3;18235:93;:::i;:::-;18353:2;18348:3;18344:12;18337:19;;17996:366;;;:::o;18368:::-;18510:3;18531:67;18595:2;18590:3;18531:67;:::i;:::-;18524:74;;18607:93;18696:3;18607:93;:::i;:::-;18725:2;18720:3;18716:12;18709:19;;18368:366;;;:::o;18740:::-;18882:3;18903:67;18967:2;18962:3;18903:67;:::i;:::-;18896:74;;18979:93;19068:3;18979:93;:::i;:::-;19097:2;19092:3;19088:12;19081:19;;18740:366;;;:::o;19112:::-;19254:3;19275:67;19339:2;19334:3;19275:67;:::i;:::-;19268:74;;19351:93;19440:3;19351:93;:::i;:::-;19469:2;19464:3;19460:12;19453:19;;19112:366;;;:::o;19484:::-;19626:3;19647:67;19711:2;19706:3;19647:67;:::i;:::-;19640:74;;19723:93;19812:3;19723:93;:::i;:::-;19841:2;19836:3;19832:12;19825:19;;19484:366;;;:::o;19856:398::-;20015:3;20036:83;20117:1;20112:3;20036:83;:::i;:::-;20029:90;;20128:93;20217:3;20128:93;:::i;:::-;20246:1;20241:3;20237:11;20230:18;;19856:398;;;:::o;20260:366::-;20402:3;20423:67;20487:2;20482:3;20423:67;:::i;:::-;20416:74;;20499:93;20588:3;20499:93;:::i;:::-;20617:2;20612:3;20608:12;20601:19;;20260:366;;;:::o;20632:::-;20774:3;20795:67;20859:2;20854:3;20795:67;:::i;:::-;20788:74;;20871:93;20960:3;20871:93;:::i;:::-;20989:2;20984:3;20980:12;20973:19;;20632:366;;;:::o;21004:::-;21146:3;21167:67;21231:2;21226:3;21167:67;:::i;:::-;21160:74;;21243:93;21332:3;21243:93;:::i;:::-;21361:2;21356:3;21352:12;21345:19;;21004:366;;;:::o;21376:::-;21518:3;21539:67;21603:2;21598:3;21539:67;:::i;:::-;21532:74;;21615:93;21704:3;21615:93;:::i;:::-;21733:2;21728:3;21724:12;21717:19;;21376:366;;;:::o;21748:108::-;21825:24;21843:5;21825:24;:::i;:::-;21820:3;21813:37;21748:108;;:::o;21862:118::-;21949:24;21967:5;21949:24;:::i;:::-;21944:3;21937:37;21862:118;;:::o;21986:115::-;22071:23;22088:5;22071:23;:::i;:::-;22066:3;22059:36;21986:115;;:::o;22107:379::-;22291:3;22313:147;22456:3;22313:147;:::i;:::-;22306:154;;22477:3;22470:10;;22107:379;;;:::o;22492:222::-;22585:4;22623:2;22612:9;22608:18;22600:26;;22636:71;22704:1;22693:9;22689:17;22680:6;22636:71;:::i;:::-;22492:222;;;;:::o;22720:1053::-;23043:4;23081:3;23070:9;23066:19;23058:27;;23095:71;23163:1;23152:9;23148:17;23139:6;23095:71;:::i;:::-;23176:72;23244:2;23233:9;23229:18;23220:6;23176:72;:::i;:::-;23295:9;23289:4;23285:20;23280:2;23269:9;23265:18;23258:48;23323:108;23426:4;23417:6;23323:108;:::i;:::-;23315:116;;23478:9;23472:4;23468:20;23463:2;23452:9;23448:18;23441:48;23506:108;23609:4;23600:6;23506:108;:::i;:::-;23498:116;;23662:9;23656:4;23652:20;23646:3;23635:9;23631:19;23624:49;23690:76;23761:4;23752:6;23690:76;:::i;:::-;23682:84;;22720:1053;;;;;;;;:::o;23779:751::-;24002:4;24040:3;24029:9;24025:19;24017:27;;24054:71;24122:1;24111:9;24107:17;24098:6;24054:71;:::i;:::-;24135:72;24203:2;24192:9;24188:18;24179:6;24135:72;:::i;:::-;24217;24285:2;24274:9;24270:18;24261:6;24217:72;:::i;:::-;24299;24367:2;24356:9;24352:18;24343:6;24299:72;:::i;:::-;24419:9;24413:4;24409:20;24403:3;24392:9;24388:19;24381:49;24447:76;24518:4;24509:6;24447:76;:::i;:::-;24439:84;;23779:751;;;;;;;;:::o;24536:373::-;24679:4;24717:2;24706:9;24702:18;24694:26;;24766:9;24760:4;24756:20;24752:1;24741:9;24737:17;24730:47;24794:108;24897:4;24888:6;24794:108;:::i;:::-;24786:116;;24536:373;;;;:::o;24915:634::-;25136:4;25174:2;25163:9;25159:18;25151:26;;25223:9;25217:4;25213:20;25209:1;25198:9;25194:17;25187:47;25251:108;25354:4;25345:6;25251:108;:::i;:::-;25243:116;;25406:9;25400:4;25396:20;25391:2;25380:9;25376:18;25369:48;25434:108;25537:4;25528:6;25434:108;:::i;:::-;25426:116;;24915:634;;;;;:::o;25555:210::-;25642:4;25680:2;25669:9;25665:18;25657:26;;25693:65;25755:1;25744:9;25740:17;25731:6;25693:65;:::i;:::-;25555:210;;;;:::o;25771:313::-;25884:4;25922:2;25911:9;25907:18;25899:26;;25971:9;25965:4;25961:20;25957:1;25946:9;25942:17;25935:47;25999:78;26072:4;26063:6;25999:78;:::i;:::-;25991:86;;25771:313;;;;:::o;26090:419::-;26256:4;26294:2;26283:9;26279:18;26271:26;;26343:9;26337:4;26333:20;26329:1;26318:9;26314:17;26307:47;26371:131;26497:4;26371:131;:::i;:::-;26363:139;;26090:419;;;:::o;26515:::-;26681:4;26719:2;26708:9;26704:18;26696:26;;26768:9;26762:4;26758:20;26754:1;26743:9;26739:17;26732:47;26796:131;26922:4;26796:131;:::i;:::-;26788:139;;26515:419;;;:::o;26940:::-;27106:4;27144:2;27133:9;27129:18;27121:26;;27193:9;27187:4;27183:20;27179:1;27168:9;27164:17;27157:47;27221:131;27347:4;27221:131;:::i;:::-;27213:139;;26940:419;;;:::o;27365:::-;27531:4;27569:2;27558:9;27554:18;27546:26;;27618:9;27612:4;27608:20;27604:1;27593:9;27589:17;27582:47;27646:131;27772:4;27646:131;:::i;:::-;27638:139;;27365:419;;;:::o;27790:::-;27956:4;27994:2;27983:9;27979:18;27971:26;;28043:9;28037:4;28033:20;28029:1;28018:9;28014:17;28007:47;28071:131;28197:4;28071:131;:::i;:::-;28063:139;;27790:419;;;:::o;28215:::-;28381:4;28419:2;28408:9;28404:18;28396:26;;28468:9;28462:4;28458:20;28454:1;28443:9;28439:17;28432:47;28496:131;28622:4;28496:131;:::i;:::-;28488:139;;28215:419;;;:::o;28640:::-;28806:4;28844:2;28833:9;28829:18;28821:26;;28893:9;28887:4;28883:20;28879:1;28868:9;28864:17;28857:47;28921:131;29047:4;28921:131;:::i;:::-;28913:139;;28640:419;;;:::o;29065:::-;29231:4;29269:2;29258:9;29254:18;29246:26;;29318:9;29312:4;29308:20;29304:1;29293:9;29289:17;29282:47;29346:131;29472:4;29346:131;:::i;:::-;29338:139;;29065:419;;;:::o;29490:::-;29656:4;29694:2;29683:9;29679:18;29671:26;;29743:9;29737:4;29733:20;29729:1;29718:9;29714:17;29707:47;29771:131;29897:4;29771:131;:::i;:::-;29763:139;;29490:419;;;:::o;29915:::-;30081:4;30119:2;30108:9;30104:18;30096:26;;30168:9;30162:4;30158:20;30154:1;30143:9;30139:17;30132:47;30196:131;30322:4;30196:131;:::i;:::-;30188:139;;29915:419;;;:::o;30340:::-;30506:4;30544:2;30533:9;30529:18;30521:26;;30593:9;30587:4;30583:20;30579:1;30568:9;30564:17;30557:47;30621:131;30747:4;30621:131;:::i;:::-;30613:139;;30340:419;;;:::o;30765:::-;30931:4;30969:2;30958:9;30954:18;30946:26;;31018:9;31012:4;31008:20;31004:1;30993:9;30989:17;30982:47;31046:131;31172:4;31046:131;:::i;:::-;31038:139;;30765:419;;;:::o;31190:::-;31356:4;31394:2;31383:9;31379:18;31371:26;;31443:9;31437:4;31433:20;31429:1;31418:9;31414:17;31407:47;31471:131;31597:4;31471:131;:::i;:::-;31463:139;;31190:419;;;:::o;31615:::-;31781:4;31819:2;31808:9;31804:18;31796:26;;31868:9;31862:4;31858:20;31854:1;31843:9;31839:17;31832:47;31896:131;32022:4;31896:131;:::i;:::-;31888:139;;31615:419;;;:::o;32040:::-;32206:4;32244:2;32233:9;32229:18;32221:26;;32293:9;32287:4;32283:20;32279:1;32268:9;32264:17;32257:47;32321:131;32447:4;32321:131;:::i;:::-;32313:139;;32040:419;;;:::o;32465:::-;32631:4;32669:2;32658:9;32654:18;32646:26;;32718:9;32712:4;32708:20;32704:1;32693:9;32689:17;32682:47;32746:131;32872:4;32746:131;:::i;:::-;32738:139;;32465:419;;;:::o;32890:::-;33056:4;33094:2;33083:9;33079:18;33071:26;;33143:9;33137:4;33133:20;33129:1;33118:9;33114:17;33107:47;33171:131;33297:4;33171:131;:::i;:::-;33163:139;;32890:419;;;:::o;33315:::-;33481:4;33519:2;33508:9;33504:18;33496:26;;33568:9;33562:4;33558:20;33554:1;33543:9;33539:17;33532:47;33596:131;33722:4;33596:131;:::i;:::-;33588:139;;33315:419;;;:::o;33740:222::-;33833:4;33871:2;33860:9;33856:18;33848:26;;33884:71;33952:1;33941:9;33937:17;33928:6;33884:71;:::i;:::-;33740:222;;;;:::o;33968:332::-;34089:4;34127:2;34116:9;34112:18;34104:26;;34140:71;34208:1;34197:9;34193:17;34184:6;34140:71;:::i;:::-;34221:72;34289:2;34278:9;34274:18;34265:6;34221:72;:::i;:::-;33968:332;;;;;:::o;34306:218::-;34397:4;34435:2;34424:9;34420:18;34412:26;;34448:69;34514:1;34503:9;34499:17;34490:6;34448:69;:::i;:::-;34306:218;;;;:::o;34530:129::-;34564:6;34591:20;;:::i;:::-;34581:30;;34620:33;34648:4;34640:6;34620:33;:::i;:::-;34530:129;;;:::o;34665:75::-;34698:6;34731:2;34725:9;34715:19;;34665:75;:::o;34746:311::-;34823:4;34913:18;34905:6;34902:30;34899:56;;;34935:18;;:::i;:::-;34899:56;34985:4;34977:6;34973:17;34965:25;;35045:4;35039;35035:15;35027:23;;34746:311;;;:::o;35063:::-;35140:4;35230:18;35222:6;35219:30;35216:56;;;35252:18;;:::i;:::-;35216:56;35302:4;35294:6;35290:17;35282:25;;35362:4;35356;35352:15;35344:23;;35063:311;;;:::o;35380:307::-;35441:4;35531:18;35523:6;35520:30;35517:56;;;35553:18;;:::i;:::-;35517:56;35591:29;35613:6;35591:29;:::i;:::-;35583:37;;35675:4;35669;35665:15;35657:23;;35380:307;;;:::o;35693:308::-;35755:4;35845:18;35837:6;35834:30;35831:56;;;35867:18;;:::i;:::-;35831:56;35905:29;35927:6;35905:29;:::i;:::-;35897:37;;35989:4;35983;35979:15;35971:23;;35693:308;;;:::o;36007:132::-;36074:4;36097:3;36089:11;;36127:4;36122:3;36118:14;36110:22;;36007:132;;;:::o;36145:114::-;36212:6;36246:5;36240:12;36230:22;;36145:114;;;:::o;36265:98::-;36316:6;36350:5;36344:12;36334:22;;36265:98;;;:::o;36369:99::-;36421:6;36455:5;36449:12;36439:22;;36369:99;;;:::o;36474:113::-;36544:4;36576;36571:3;36567:14;36559:22;;36474:113;;;:::o;36593:184::-;36692:11;36726:6;36721:3;36714:19;36766:4;36761:3;36757:14;36742:29;;36593:184;;;;:::o;36783:168::-;36866:11;36900:6;36895:3;36888:19;36940:4;36935:3;36931:14;36916:29;;36783:168;;;;:::o;36957:147::-;37058:11;37095:3;37080:18;;36957:147;;;;:::o;37110:169::-;37194:11;37228:6;37223:3;37216:19;37268:4;37263:3;37259:14;37244:29;;37110:169;;;;:::o;37285:305::-;37325:3;37344:20;37362:1;37344:20;:::i;:::-;37339:25;;37378:20;37396:1;37378:20;:::i;:::-;37373:25;;37532:1;37464:66;37460:74;37457:1;37454:81;37451:107;;;37538:18;;:::i;:::-;37451:107;37582:1;37579;37575:9;37568:16;;37285:305;;;;:::o;37596:246::-;37635:3;37654:19;37671:1;37654:19;:::i;:::-;37649:24;;37687:19;37704:1;37687:19;:::i;:::-;37682:24;;37784:1;37772:10;37768:18;37765:1;37762:25;37759:51;;;37790:18;;:::i;:::-;37759:51;37834:1;37831;37827:9;37820:16;;37596:246;;;;:::o;37848:185::-;37888:1;37905:20;37923:1;37905:20;:::i;:::-;37900:25;;37939:20;37957:1;37939:20;:::i;:::-;37934:25;;37978:1;37968:35;;37983:18;;:::i;:::-;37968:35;38025:1;38022;38018:9;38013:14;;37848:185;;;;:::o;38039:348::-;38079:7;38102:20;38120:1;38102:20;:::i;:::-;38097:25;;38136:20;38154:1;38136:20;:::i;:::-;38131:25;;38324:1;38256:66;38252:74;38249:1;38246:81;38241:1;38234:9;38227:17;38223:105;38220:131;;;38331:18;;:::i;:::-;38220:131;38379:1;38376;38372:9;38361:20;;38039:348;;;;:::o;38393:191::-;38433:4;38453:20;38471:1;38453:20;:::i;:::-;38448:25;;38487:20;38505:1;38487:20;:::i;:::-;38482:25;;38526:1;38523;38520:8;38517:34;;;38531:18;;:::i;:::-;38517:34;38576:1;38573;38569:9;38561:17;;38393:191;;;;:::o;38590:188::-;38629:4;38649:19;38666:1;38649:19;:::i;:::-;38644:24;;38682:19;38699:1;38682:19;:::i;:::-;38677:24;;38720:1;38717;38714:8;38711:34;;;38725:18;;:::i;:::-;38711:34;38770:1;38767;38763:9;38755:17;;38590:188;;;;:::o;38784:96::-;38821:7;38850:24;38868:5;38850:24;:::i;:::-;38839:35;;38784:96;;;:::o;38886:90::-;38920:7;38963:5;38956:13;38949:21;38938:32;;38886:90;;;:::o;38982:149::-;39018:7;39058:66;39051:5;39047:78;39036:89;;38982:149;;;:::o;39137:126::-;39174:7;39214:42;39207:5;39203:54;39192:65;;39137:126;;;:::o;39269:77::-;39306:7;39335:5;39324:16;;39269:77;;;:::o;39352:93::-;39388:7;39428:10;39421:5;39417:22;39406:33;;39352:93;;;:::o;39451:154::-;39535:6;39530:3;39525;39512:30;39597:1;39588:6;39583:3;39579:16;39572:27;39451:154;;;:::o;39611:307::-;39679:1;39689:113;39703:6;39700:1;39697:13;39689:113;;;39788:1;39783:3;39779:11;39773:18;39769:1;39764:3;39760:11;39753:39;39725:2;39722:1;39718:10;39713:15;;39689:113;;;39820:6;39817:1;39814:13;39811:101;;;39900:1;39891:6;39886:3;39882:16;39875:27;39811:101;39660:258;39611:307;;;:::o;39924:320::-;39968:6;40005:1;39999:4;39995:12;39985:22;;40052:1;40046:4;40042:12;40073:18;40063:81;;40129:4;40121:6;40117:17;40107:27;;40063:81;40191:2;40183:6;40180:14;40160:18;40157:38;40154:84;;;40210:18;;:::i;:::-;40154:84;39975:269;39924:320;;;:::o;40250:281::-;40333:27;40355:4;40333:27;:::i;:::-;40325:6;40321:40;40463:6;40451:10;40448:22;40427:18;40415:10;40412:34;40409:62;40406:88;;;40474:18;;:::i;:::-;40406:88;40514:10;40510:2;40503:22;40293:238;40250:281;;:::o;40537:233::-;40576:3;40599:24;40617:5;40599:24;:::i;:::-;40590:33;;40645:66;40638:5;40635:77;40632:103;;;40715:18;;:::i;:::-;40632:103;40762:1;40755:5;40751:13;40744:20;;40537:233;;;:::o;40776:175::-;40814:3;40837:23;40854:5;40837:23;:::i;:::-;40828:32;;40882:10;40875:5;40872:21;40869:47;;;40896:18;;:::i;:::-;40869:47;40943:1;40936:5;40932:13;40925:20;;40776:175;;;:::o;40957:180::-;41005:77;41002:1;40995:88;41102:4;41099:1;41092:15;41126:4;41123:1;41116:15;41143:180;41191:77;41188:1;41181:88;41288:4;41285:1;41278:15;41312:4;41309:1;41302:15;41329:180;41377:77;41374:1;41367:88;41474:4;41471:1;41464:15;41498:4;41495:1;41488:15;41515:180;41563:77;41560:1;41553:88;41660:4;41657:1;41650:15;41684:4;41681:1;41674:15;41701:180;41749:77;41746:1;41739:88;41846:4;41843:1;41836:15;41870:4;41867:1;41860:15;41887:183;41922:3;41960:1;41942:16;41939:23;41936:128;;;41998:1;41995;41992;41977:23;42020:34;42051:1;42045:8;42020:34;:::i;:::-;42013:41;;41936:128;41887:183;:::o;42076:117::-;42185:1;42182;42175:12;42199:117;42308:1;42305;42298:12;42322:117;42431:1;42428;42421:12;42445:117;42554:1;42551;42544:12;42568:117;42677:1;42674;42667:12;42691:102;42732:6;42783:2;42779:7;42774:2;42767:5;42763:14;42759:28;42749:38;;42691:102;;;:::o;42799:106::-;42843:8;42892:5;42887:3;42883:15;42862:36;;42799:106;;;:::o;42911:239::-;43051:34;43047:1;43039:6;43035:14;43028:58;43120:22;43115:2;43107:6;43103:15;43096:47;42911:239;:::o;43156:227::-;43296:34;43292:1;43284:6;43280:14;43273:58;43365:10;43360:2;43352:6;43348:15;43341:35;43156:227;:::o;43389:230::-;43529:34;43525:1;43517:6;43513:14;43506:58;43598:13;43593:2;43585:6;43581:15;43574:38;43389:230;:::o;43625:225::-;43765:34;43761:1;43753:6;43749:14;43742:58;43834:8;43829:2;43821:6;43817:15;43810:33;43625:225;:::o;43856:228::-;43996:34;43992:1;43984:6;43980:14;43973:58;44065:11;44060:2;44052:6;44048:15;44041:36;43856:228;:::o;44090:179::-;44230:31;44226:1;44218:6;44214:14;44207:55;44090:179;:::o;44275:167::-;44415:19;44411:1;44403:6;44399:14;44392:43;44275:167;:::o;44448:224::-;44588:34;44584:1;44576:6;44572:14;44565:58;44657:7;44652:2;44644:6;44640:15;44633:32;44448:224;:::o;44678:237::-;44818:34;44814:1;44806:6;44802:14;44795:58;44887:20;44882:2;44874:6;44870:15;44863:45;44678:237;:::o;44921:229::-;45061:34;45057:1;45049:6;45045:14;45038:58;45130:12;45125:2;45117:6;45113:15;45106:37;44921:229;:::o;45156:228::-;45296:34;45292:1;45284:6;45280:14;45273:58;45365:11;45360:2;45352:6;45348:15;45341:36;45156:228;:::o;45390:182::-;45530:34;45526:1;45518:6;45514:14;45507:58;45390:182;:::o;45578:169::-;45718:21;45714:1;45706:6;45702:14;45695:45;45578:169;:::o;45753:177::-;45893:29;45889:1;45881:6;45877:14;45870:53;45753:177;:::o;45936:114::-;;:::o;46056:228::-;46196:34;46192:1;46184:6;46180:14;46173:58;46265:11;46260:2;46252:6;46248:15;46241:36;46056:228;:::o;46290:::-;46430:34;46426:1;46418:6;46414:14;46407:58;46499:11;46494:2;46486:6;46482:15;46475:36;46290:228;:::o;46524:227::-;46664:34;46660:1;46652:6;46648:14;46641:58;46733:10;46728:2;46720:6;46716:15;46709:35;46524:227;:::o;46757:220::-;46897:34;46893:1;46885:6;46881:14;46874:58;46966:3;46961:2;46953:6;46949:15;46942:28;46757:220;:::o;46983:711::-;47022:3;47060:4;47042:16;47039:26;47036:39;;;47068:5;;47036:39;47097:20;;:::i;:::-;47172:1;47154:16;47150:24;47147:1;47141:4;47126:49;47205:4;47199:11;47304:16;47297:4;47289:6;47285:17;47282:39;47249:18;47241:6;47238:30;47222:113;47219:146;;;47350:5;;;;47219:146;47396:6;47390:4;47386:17;47432:3;47426:10;47459:18;47451:6;47448:30;47445:43;;;47481:5;;;;;;47445:43;47529:6;47522:4;47517:3;47513:14;47509:27;47588:1;47570:16;47566:24;47560:4;47556:35;47551:3;47548:44;47545:57;;;47595:5;;;;;;;47545:57;47612;47660:6;47654:4;47650:17;47642:6;47638:30;47632:4;47612:57;:::i;:::-;47685:3;47678:10;;47026:668;;;;;46983:711;;:::o;47700:122::-;47773:24;47791:5;47773:24;:::i;:::-;47766:5;47763:35;47753:63;;47812:1;47809;47802:12;47753:63;47700:122;:::o;47828:116::-;47898:21;47913:5;47898:21;:::i;:::-;47891:5;47888:32;47878:60;;47934:1;47931;47924:12;47878:60;47828:116;:::o;47950:120::-;48022:23;48039:5;48022:23;:::i;:::-;48015:5;48012:34;48002:62;;48060:1;48057;48050:12;48002:62;47950:120;:::o;48076:122::-;48149:24;48167:5;48149:24;:::i;:::-;48142:5;48139:35;48129:63;;48188:1;48185;48178:12;48129:63;48076:122;:::o;48204:120::-;48276:23;48293:5;48276:23;:::i;:::-;48269:5;48266:34;48256:62;;48314:1;48311;48304:12;48256:62;48204:120;:::o

Swarm Source

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