ETH Price: $2,999.48 (+4.05%)
Gas: 2 Gwei

Women of Aradena (WOA)
 

Overview

TokenID

3824

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

A collection of unique Women Warriors residing in the Kingdom of Aradena, the Hub for strategic Play-to-Earn Medieval Fantasy Gaming. https://aradena.io

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
WomenOfAradena

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-11-17
*/

// Sources flattened with hardhat v2.6.8 https://hardhat.org

// File @openzeppelin/contracts/utils/introspection/[email protected]

// SPDX-License-Identifier: MIT

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/token/ERC721/[email protected]



pragma solidity ^0.8.0;

/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

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

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

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

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

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

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

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

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

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

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

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


// File @openzeppelin/contracts/token/ERC721/[email protected]



pragma solidity ^0.8.0;

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


// File @openzeppelin/contracts/token/ERC721/extensions/[email protected]



pragma solidity ^0.8.0;

/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {
    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);

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

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


// File @openzeppelin/contracts/utils/[email protected]



pragma solidity ^0.8.0;

/**
 * @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
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

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

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

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "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/[email protected]



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/utils/[email protected]



pragma solidity ^0.8.0;

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

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

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

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

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


// File @openzeppelin/contracts/utils/introspection/[email protected]



pragma solidity ^0.8.0;

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


// File @openzeppelin/contracts/token/ERC721/[email protected]



pragma solidity ^0.8.0;







/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

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

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

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

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

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

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

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

        require(
            _msgSender() == owner || isApprovedForAll(owner, _msgSender()),
            "ERC721: approve caller is not owner nor approved for all"
        );

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved query for nonexistent token");

        return _tokenApprovals[tokenId];
    }

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

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }

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

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

        _transfer(from, to, tokenId);
    }

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

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _safeTransfer(from, to, tokenId, _data);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

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


// File @openzeppelin/contracts/token/ERC721/extensions/[email protected]



pragma solidity ^0.8.0;

/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {
    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns a token ID owned by `owner` at a given `index` of its token list.
     * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);

    /**
     * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
     * Use along with {totalSupply} to enumerate all tokens.
     */
    function tokenByIndex(uint256 index) external view returns (uint256);
}


// File @openzeppelin/contracts/token/ERC721/extensions/[email protected]



pragma solidity ^0.8.0;


/**
 * @dev This implements an optional extension of {ERC721} defined in the EIP that adds
 * enumerability of all the token ids in the contract as well as all token ids owned by each
 * account.
 */
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    // Mapping from owner to list of owned token IDs
    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;

    // Mapping from token ID to index of the owner tokens list
    mapping(uint256 => uint256) private _ownedTokensIndex;

    // Array with all token ids, used for enumeration
    uint256[] private _allTokens;

    // Mapping from token id to position in the allTokens array
    mapping(uint256 => uint256) private _allTokensIndex;

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

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
        return _ownedTokens[owner][index];
    }

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

    /**
     * @dev See {IERC721Enumerable-tokenByIndex}.
     */
    function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
        return _allTokens[index];
    }

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

        if (from == address(0)) {
            _addTokenToAllTokensEnumeration(tokenId);
        } else if (from != to) {
            _removeTokenFromOwnerEnumeration(from, tokenId);
        }
        if (to == address(0)) {
            _removeTokenFromAllTokensEnumeration(tokenId);
        } else if (to != from) {
            _addTokenToOwnerEnumeration(to, tokenId);
        }
    }

    /**
     * @dev Private function to add a token to this extension's ownership-tracking data structures.
     * @param to address representing the new owner of the given token ID
     * @param tokenId uint256 ID of the token to be added to the tokens list of the given address
     */
    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        uint256 length = ERC721.balanceOf(to);
        _ownedTokens[to][length] = tokenId;
        _ownedTokensIndex[tokenId] = length;
    }

    /**
     * @dev Private function to add a token to this extension's token tracking data structures.
     * @param tokenId uint256 ID of the token to be added to the tokens list
     */
    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }

    /**
     * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
     * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for
     * gas optimizations e.g. when performing a transfer operation (avoiding double writes).
     * This has O(1) time complexity, but alters the order of the _ownedTokens array.
     * @param from address representing the previous owner of the given token ID
     * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
     */
    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
        // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
        uint256 tokenIndex = _ownedTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary
        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

            _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
            _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
        }

        // This also deletes the contents at the last position of the array
        delete _ownedTokensIndex[tokenId];
        delete _ownedTokens[from][lastTokenIndex];
    }

    /**
     * @dev Private function to remove a token from this extension's token tracking data structures.
     * This has O(1) time complexity, but alters the order of the _allTokens array.
     * @param tokenId uint256 ID of the token to be removed from the tokens list
     */
    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
        // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = _allTokens.length - 1;
        uint256 tokenIndex = _allTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
        // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
        // an 'if' statement (like in _removeTokenFromOwnerEnumeration)
        uint256 lastTokenId = _allTokens[lastTokenIndex];

        _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
        _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index

        // This also deletes the contents at the last position of the array
        delete _allTokensIndex[tokenId];
        _allTokens.pop();
    }
}


// File @openzeppelin/contracts/access/[email protected]



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

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

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

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

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

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


// File contracts/woman-warriors/WomanWarriorsOfAradena.sol



pragma solidity ^0.8.0;


contract WomenOfAradena is ERC721Enumerable, Ownable {

  /**
   * @dev URI base for tokenURI function. Token URI is constructed as _baseTokenURI + tokenId.
   */
  string public baseTokenURI;

  /**
   * @dev Mapping of WOA used IDs.
   */
  mapping (uint256 => bool) public usedWOA;

  /**
   * @dev Time when the drop starts
   */
  uint256 public dropStart;

  /**
   * @dev If drop is paused or not.
   */
  bool public isPaused = false;

  /**
   * @dev The length of drop.
   */
  uint256 dropLength = 10 days;

  /**
   * @dev Amount of reserved tokens that can get minted in case all women warriors are not claimed.
   */
  uint16 public reserve = 500;

  /**
   * @dev Address of Warriors of Aradena smart contract.
   */
  IERC721 WOAaddress;

  /**
   * @dev Implements ERC721 contract and sets default values. 
   */
  constructor(
    string memory baseURI,
    address _WOAaddress,
    uint256 _dropStart
  )
    ERC721("Women of Aradena", "WOA")
  {
    baseTokenURI = baseURI;
    WOAaddress = IERC721(_WOAaddress);
    dropStart = _dropStart;
  }

  /**
   * @dev Sets metadata base uri.
   */
  function setBaseURI(
    string memory baseURI
  )
    public
    onlyOwner
  {
    baseTokenURI = baseURI;
  }

  /**
   * @dev Overrides _baseURI function so we define the URI base we will be using.
   */
  function _baseURI()
    internal
    view
    virtual
    override
    returns (string memory)
  {
    return baseTokenURI;
  }

  /**
   * @dev Mints women warriors based on male warriors.
   */
  function mint(
    uint256[] calldata claimIDs
  )
    external
  {
    require(block.timestamp >= dropStart, "Drop not yet available.");
    require(block.timestamp < dropStart + dropLength, "Drop is over.");
    require(claimIDs.length < 21, "Max 20 WWOA can be minted at the same time.");
    require(!isPaused, "Drop is not active.");

    for (uint i = 0; i < claimIDs.length; i++) {
      require(!usedWOA[claimIDs[i]], "Warrior already claimed.");
      require(WOAaddress.ownerOf(claimIDs[i]) == msg.sender, "Cannot claim a warrior that is not yours.");
      usedWOA[claimIDs[i]] = true;
      _safeMint(msg.sender, totalSupply());
    }
  }

  /**
   * @dev Mint tokens reserved for owner in case all women warriors are not claimed.
   * Can only be called after the drop is over for 48 hours, max 500 up to total supply of 8000.
   * @param _quantity Amount of reserve tokens to mint.
   * @param _receiver Receiver of the tokens.
   */
  function mintReserve(
    uint16 _quantity,
    address _receiver
  )
    external
    onlyOwner
  {
    require(_quantity <= reserve, "The quantity exceeds the reserve.");
    require(block.timestamp > dropStart + dropLength, "Drop is still active.");
    require(block.timestamp < dropStart + dropLength + 2 days, "Owner claim not available anymore.");
    require(totalSupply() + _quantity <= 8000); // Max 8000.
    reserve -= _quantity;
    for (uint i = 0; i < _quantity; i++) {
      _safeMint(_receiver, totalSupply());
    }
  }

  /**
   * @dev Changes pause state.
   */
  function flipPauseStatus()
    external
    onlyOwner
  {
    isPaused = !isPaused;
  }

  /**
   * @dev Gets all nftIDs of the owner.
   */
  function tokensOfOwner(address _owner)
    public
    view
    returns (uint256[] memory)
  {
    uint256 count = balanceOf(_owner);
    uint256[] memory result = new uint256[](count);
    for (uint256 index = 0; index < count; index++) {
      result[index] = tokenOfOwnerByIndex(_owner, index);
    }
    return result;
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"baseURI","type":"string"},{"internalType":"address","name":"_WOAaddress","type":"address"},{"internalType":"uint256","name":"_dropStart","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dropStart","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flipPauseStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"claimIDs","type":"uint256[]"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_quantity","type":"uint16"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"mintReserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reserve","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"usedWOA","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]

60806040526000600e60006101000a81548160ff021916908315150217905550620d2f00600f556101f4601060006101000a81548161ffff021916908361ffff1602179055503480156200005257600080fd5b5060405162004bf238038062004bf283398181016040528101906200007891906200055d565b6040518060400160405280601081526020017f576f6d656e206f662041726164656e61000000000000000000000000000000008152506040518060400160405280600381526020017f574f4100000000000000000000000000000000000000000000000000000000008152508160009080519060200190620000fc92919062000270565b5080600190805190602001906200011592919062000270565b505050620001386200012c620001a260201b60201c565b620001aa60201b60201c565b82600b90805190602001906200015092919062000270565b5081601060026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600d819055505050506200063d565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200027e9062000607565b90600052602060002090601f016020900481019282620002a25760008555620002ee565b82601f10620002bd57805160ff1916838001178555620002ee565b82800160010185558215620002ee579182015b82811115620002ed578251825591602001919060010190620002d0565b5b509050620002fd919062000301565b5090565b5b808211156200031c57600081600090555060010162000302565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b62000389826200033e565b810181811067ffffffffffffffff82111715620003ab57620003aa6200034f565b5b80604052505050565b6000620003c062000320565b9050620003ce82826200037e565b919050565b600067ffffffffffffffff821115620003f157620003f06200034f565b5b620003fc826200033e565b9050602081019050919050565b60005b83811015620004295780820151818401526020810190506200040c565b8381111562000439576000848401525b50505050565b6000620004566200045084620003d3565b620003b4565b90508281526020810184848401111562000475576200047462000339565b5b6200048284828562000409565b509392505050565b600082601f830112620004a257620004a162000334565b5b8151620004b48482602086016200043f565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620004ea82620004bd565b9050919050565b620004fc81620004dd565b81146200050857600080fd5b50565b6000815190506200051c81620004f1565b92915050565b6000819050919050565b620005378162000522565b81146200054357600080fd5b50565b60008151905062000557816200052c565b92915050565b6000806000606084860312156200057957620005786200032a565b5b600084015167ffffffffffffffff8111156200059a57620005996200032f565b5b620005a8868287016200048a565b9350506020620005bb868287016200050b565b9250506040620005ce8682870162000546565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200062057607f821691505b60208210811415620006375762000636620005d8565b5b50919050565b6145a5806200064d6000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c80637632459711610104578063c87b56dd116100a2578063f25e248411610071578063f25e248414610542578063f2fde38b14610572578063f8e93ef91461058e578063fa62884c146105aa576101cf565b8063c87b56dd146104a6578063cd3293de146104d6578063d547cfb7146104f4578063e985e9c514610512576101cf565b806395d89b41116100de57806395d89b4114610432578063a22cb46514610450578063b187bd261461046c578063b88d4fde1461048a576101cf565b806376324597146103c65780638462151c146103e45780638da5cb5b14610414576101cf565b806342842e0e116101715780636352211e1161014b5780636352211e1461034057806366d0b0901461037057806370a082311461038c578063715018a6146103bc576101cf565b806342842e0e146102d85780634f6ccce7146102f457806355f804b314610324576101cf565b8063095ea7b3116101ad578063095ea7b31461025257806318160ddd1461026e57806323b872dd1461028c5780632f745c59146102a8576101cf565b806301ffc9a7146101d457806306fdde0314610204578063081812fc14610222575b600080fd5b6101ee60048036038101906101e99190612ae2565b6105b4565b6040516101fb9190612b2a565b60405180910390f35b61020c61062e565b6040516102199190612bde565b60405180910390f35b61023c60048036038101906102379190612c36565b6106c0565b6040516102499190612ca4565b60405180910390f35b61026c60048036038101906102679190612ceb565b610745565b005b61027661085d565b6040516102839190612d3a565b60405180910390f35b6102a660048036038101906102a19190612d55565b61086a565b005b6102c260048036038101906102bd9190612ceb565b6108ca565b6040516102cf9190612d3a565b60405180910390f35b6102f260048036038101906102ed9190612d55565b61096f565b005b61030e60048036038101906103099190612c36565b61098f565b60405161031b9190612d3a565b60405180910390f35b61033e60048036038101906103399190612edd565b610a00565b005b61035a60048036038101906103559190612c36565b610a96565b6040516103679190612ca4565b60405180910390f35b61038a60048036038101906103859190612f60565b610b48565b005b6103a660048036038101906103a19190612fa0565b610d65565b6040516103b39190612d3a565b60405180910390f35b6103c4610e1d565b005b6103ce610ea5565b6040516103db9190612d3a565b60405180910390f35b6103fe60048036038101906103f99190612fa0565b610eab565b60405161040b919061308b565b60405180910390f35b61041c610f59565b6040516104299190612ca4565b60405180910390f35b61043a610f83565b6040516104479190612bde565b60405180910390f35b61046a600480360381019061046591906130d9565b611015565b005b610474611196565b6040516104819190612b2a565b60405180910390f35b6104a4600480360381019061049f91906131ba565b6111a9565b005b6104c060048036038101906104bb9190612c36565b61120b565b6040516104cd9190612bde565b60405180910390f35b6104de6112b2565b6040516104eb919061324c565b60405180910390f35b6104fc6112c6565b6040516105099190612bde565b60405180910390f35b61052c60048036038101906105279190613267565b611354565b6040516105399190612b2a565b60405180910390f35b61055c60048036038101906105579190612c36565b6113e8565b6040516105699190612b2a565b60405180910390f35b61058c60048036038101906105879190612fa0565b611408565b005b6105a860048036038101906105a39190613307565b611500565b005b6105b2611853565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106275750610626826118fb565b5b9050919050565b60606000805461063d90613383565b80601f016020809104026020016040519081016040528092919081815260200182805461066990613383565b80156106b65780601f1061068b576101008083540402835291602001916106b6565b820191906000526020600020905b81548152906001019060200180831161069957829003601f168201915b5050505050905090565b60006106cb826119dd565b61070a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070190613427565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061075082610a96565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156107c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b8906134b9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166107e0611a49565b73ffffffffffffffffffffffffffffffffffffffff16148061080f575061080e81610809611a49565b611354565b5b61084e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108459061354b565b60405180910390fd5b6108588383611a51565b505050565b6000600880549050905090565b61087b610875611a49565b82611b0a565b6108ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b1906135dd565b60405180910390fd5b6108c5838383611be8565b505050565b60006108d583610d65565b8210610916576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090d9061366f565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b61098a838383604051806020016040528060008152506111a9565b505050565b600061099961085d565b82106109da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d190613701565b60405180910390fd5b600882815481106109ee576109ed613721565b5b90600052602060002001549050919050565b610a08611a49565b73ffffffffffffffffffffffffffffffffffffffff16610a26610f59565b73ffffffffffffffffffffffffffffffffffffffff1614610a7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a739061379c565b60405180910390fd5b80600b9080519060200190610a929291906129d3565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610b3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b369061382e565b60405180910390fd5b80915050919050565b610b50611a49565b73ffffffffffffffffffffffffffffffffffffffff16610b6e610f59565b73ffffffffffffffffffffffffffffffffffffffff1614610bc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbb9061379c565b60405180910390fd5b601060009054906101000a900461ffff1661ffff168261ffff161115610c1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c16906138c0565b60405180910390fd5b600f54600d54610c2f919061390f565b4211610c70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c67906139b1565b60405180910390fd5b6202a300600f54600d54610c84919061390f565b610c8e919061390f565b4210610ccf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc690613a43565b60405180910390fd5b611f408261ffff16610cdf61085d565b610ce9919061390f565b1115610cf457600080fd5b81601060008282829054906101000a900461ffff16610d139190613a63565b92506101000a81548161ffff021916908361ffff16021790555060005b8261ffff16811015610d6057610d4d82610d4861085d565b611e44565b8080610d5890613a97565b915050610d30565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610dd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dcd90613b52565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e25611a49565b73ffffffffffffffffffffffffffffffffffffffff16610e43610f59565b73ffffffffffffffffffffffffffffffffffffffff1614610e99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e909061379c565b60405180910390fd5b610ea36000611e62565b565b600d5481565b60606000610eb883610d65565b905060008167ffffffffffffffff811115610ed657610ed5612db2565b5b604051908082528060200260200182016040528015610f045781602001602082028036833780820191505090505b50905060005b82811015610f4e57610f1c85826108ca565b828281518110610f2f57610f2e613721565b5b6020026020010181815250508080610f4690613a97565b915050610f0a565b508092505050919050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610f9290613383565b80601f0160208091040260200160405190810160405280929190818152602001828054610fbe90613383565b801561100b5780601f10610fe05761010080835404028352916020019161100b565b820191906000526020600020905b815481529060010190602001808311610fee57829003601f168201915b5050505050905090565b61101d611a49565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561108b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108290613bbe565b60405180910390fd5b8060056000611098611a49565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611145611a49565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161118a9190612b2a565b60405180910390a35050565b600e60009054906101000a900460ff1681565b6111ba6111b4611a49565b83611b0a565b6111f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f0906135dd565b60405180910390fd5b61120584848484611f28565b50505050565b6060611216826119dd565b611255576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124c90613c50565b60405180910390fd5b600061125f611f84565b9050600081511161127f57604051806020016040528060008152506112aa565b8061128984612016565b60405160200161129a929190613cac565b6040516020818303038152906040525b915050919050565b601060009054906101000a900461ffff1681565b600b80546112d390613383565b80601f01602080910402602001604051908101604052809291908181526020018280546112ff90613383565b801561134c5780601f106113215761010080835404028352916020019161134c565b820191906000526020600020905b81548152906001019060200180831161132f57829003601f168201915b505050505081565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600c6020528060005260406000206000915054906101000a900460ff1681565b611410611a49565b73ffffffffffffffffffffffffffffffffffffffff1661142e610f59565b73ffffffffffffffffffffffffffffffffffffffff1614611484576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147b9061379c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156114f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114eb90613d42565b60405180910390fd5b6114fd81611e62565b50565b600d54421015611545576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153c90613dae565b60405180910390fd5b600f54600d54611555919061390f565b4210611596576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158d90613e1a565b60405180910390fd5b601582829050106115dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d390613eac565b60405180910390fd5b600e60009054906101000a900460ff161561162c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162390613f18565b60405180910390fd5b60005b8282905081101561184e57600c600084848481811061165157611650613721565b5b90506020020135815260200190815260200160002060009054906101000a900460ff16156116b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ab90613f84565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16601060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e85858581811061171c5761171b613721565b5b905060200201356040518263ffffffff1660e01b815260040161173f9190612d3a565b60206040518083038186803b15801561175757600080fd5b505afa15801561176b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178f9190613fb9565b73ffffffffffffffffffffffffffffffffffffffff16146117e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117dc90614058565b60405180910390fd5b6001600c60008585858181106117fe576117fd613721565b5b90506020020135815260200190815260200160002060006101000a81548160ff02191690831515021790555061183b3361183661085d565b611e44565b808061184690613a97565b91505061162f565b505050565b61185b611a49565b73ffffffffffffffffffffffffffffffffffffffff16611879610f59565b73ffffffffffffffffffffffffffffffffffffffff16146118cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c69061379c565b60405180910390fd5b600e60009054906101000a900460ff1615600e60006101000a81548160ff021916908315150217905550565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806119c657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806119d657506119d582612177565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611ac483610a96565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611b15826119dd565b611b54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4b906140ea565b60405180910390fd5b6000611b5f83610a96565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611bce57508373ffffffffffffffffffffffffffffffffffffffff16611bb6846106c0565b73ffffffffffffffffffffffffffffffffffffffff16145b80611bdf5750611bde8185611354565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611c0882610a96565b73ffffffffffffffffffffffffffffffffffffffff1614611c5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c559061417c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611cce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc59061420e565b60405180910390fd5b611cd98383836121e1565b611ce4600082611a51565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d34919061422e565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d8b919061390f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b611e5e8282604051806020016040528060008152506122f5565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611f33848484611be8565b611f3f84848484612350565b611f7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f75906142d4565b60405180910390fd5b50505050565b6060600b8054611f9390613383565b80601f0160208091040260200160405190810160405280929190818152602001828054611fbf90613383565b801561200c5780601f10611fe15761010080835404028352916020019161200c565b820191906000526020600020905b815481529060010190602001808311611fef57829003601f168201915b5050505050905090565b6060600082141561205e576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612172565b600082905060005b6000821461209057808061207990613a97565b915050600a826120899190614323565b9150612066565b60008167ffffffffffffffff8111156120ac576120ab612db2565b5b6040519080825280601f01601f1916602001820160405280156120de5781602001600182028036833780820191505090505b5090505b6000851461216b576001826120f7919061422e565b9150600a856121069190614354565b6030612112919061390f565b60f81b81838151811061212857612127613721565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856121649190614323565b94506120e2565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6121ec8383836124e7565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561222f5761222a816124ec565b61226e565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461226d5761226c8382612535565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122b1576122ac816126a2565b6122f0565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146122ef576122ee8282612773565b5b5b505050565b6122ff83836127f2565b61230c6000848484612350565b61234b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612342906142d4565b60405180910390fd5b505050565b60006123718473ffffffffffffffffffffffffffffffffffffffff166129c0565b156124da578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261239a611a49565b8786866040518563ffffffff1660e01b81526004016123bc94939291906143da565b602060405180830381600087803b1580156123d657600080fd5b505af192505050801561240757506040513d601f19601f82011682018060405250810190612404919061443b565b60015b61248a573d8060008114612437576040519150601f19603f3d011682016040523d82523d6000602084013e61243c565b606091505b50600081511415612482576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612479906142d4565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506124df565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161254284610d65565b61254c919061422e565b9050600060076000848152602001908152602001600020549050818114612631576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506126b6919061422e565b90506000600960008481526020019081526020016000205490506000600883815481106126e6576126e5613721565b5b90600052602060002001549050806008838154811061270857612707613721565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061275757612756614468565b5b6001900381819060005260206000200160009055905550505050565b600061277e83610d65565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612862576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612859906144e3565b60405180910390fd5b61286b816119dd565b156128ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a29061454f565b60405180910390fd5b6128b7600083836121e1565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612907919061390f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b8280546129df90613383565b90600052602060002090601f016020900481019282612a015760008555612a48565b82601f10612a1a57805160ff1916838001178555612a48565b82800160010185558215612a48579182015b82811115612a47578251825591602001919060010190612a2c565b5b509050612a559190612a59565b5090565b5b80821115612a72576000816000905550600101612a5a565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612abf81612a8a565b8114612aca57600080fd5b50565b600081359050612adc81612ab6565b92915050565b600060208284031215612af857612af7612a80565b5b6000612b0684828501612acd565b91505092915050565b60008115159050919050565b612b2481612b0f565b82525050565b6000602082019050612b3f6000830184612b1b565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612b7f578082015181840152602081019050612b64565b83811115612b8e576000848401525b50505050565b6000601f19601f8301169050919050565b6000612bb082612b45565b612bba8185612b50565b9350612bca818560208601612b61565b612bd381612b94565b840191505092915050565b60006020820190508181036000830152612bf88184612ba5565b905092915050565b6000819050919050565b612c1381612c00565b8114612c1e57600080fd5b50565b600081359050612c3081612c0a565b92915050565b600060208284031215612c4c57612c4b612a80565b5b6000612c5a84828501612c21565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612c8e82612c63565b9050919050565b612c9e81612c83565b82525050565b6000602082019050612cb96000830184612c95565b92915050565b612cc881612c83565b8114612cd357600080fd5b50565b600081359050612ce581612cbf565b92915050565b60008060408385031215612d0257612d01612a80565b5b6000612d1085828601612cd6565b9250506020612d2185828601612c21565b9150509250929050565b612d3481612c00565b82525050565b6000602082019050612d4f6000830184612d2b565b92915050565b600080600060608486031215612d6e57612d6d612a80565b5b6000612d7c86828701612cd6565b9350506020612d8d86828701612cd6565b9250506040612d9e86828701612c21565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612dea82612b94565b810181811067ffffffffffffffff82111715612e0957612e08612db2565b5b80604052505050565b6000612e1c612a76565b9050612e288282612de1565b919050565b600067ffffffffffffffff821115612e4857612e47612db2565b5b612e5182612b94565b9050602081019050919050565b82818337600083830152505050565b6000612e80612e7b84612e2d565b612e12565b905082815260208101848484011115612e9c57612e9b612dad565b5b612ea7848285612e5e565b509392505050565b600082601f830112612ec457612ec3612da8565b5b8135612ed4848260208601612e6d565b91505092915050565b600060208284031215612ef357612ef2612a80565b5b600082013567ffffffffffffffff811115612f1157612f10612a85565b5b612f1d84828501612eaf565b91505092915050565b600061ffff82169050919050565b612f3d81612f26565b8114612f4857600080fd5b50565b600081359050612f5a81612f34565b92915050565b60008060408385031215612f7757612f76612a80565b5b6000612f8585828601612f4b565b9250506020612f9685828601612cd6565b9150509250929050565b600060208284031215612fb657612fb5612a80565b5b6000612fc484828501612cd6565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61300281612c00565b82525050565b60006130148383612ff9565b60208301905092915050565b6000602082019050919050565b600061303882612fcd565b6130428185612fd8565b935061304d83612fe9565b8060005b8381101561307e5781516130658882613008565b975061307083613020565b925050600181019050613051565b5085935050505092915050565b600060208201905081810360008301526130a5818461302d565b905092915050565b6130b681612b0f565b81146130c157600080fd5b50565b6000813590506130d3816130ad565b92915050565b600080604083850312156130f0576130ef612a80565b5b60006130fe85828601612cd6565b925050602061310f858286016130c4565b9150509250929050565b600067ffffffffffffffff82111561313457613133612db2565b5b61313d82612b94565b9050602081019050919050565b600061315d61315884613119565b612e12565b90508281526020810184848401111561317957613178612dad565b5b613184848285612e5e565b509392505050565b600082601f8301126131a1576131a0612da8565b5b81356131b184826020860161314a565b91505092915050565b600080600080608085870312156131d4576131d3612a80565b5b60006131e287828801612cd6565b94505060206131f387828801612cd6565b935050604061320487828801612c21565b925050606085013567ffffffffffffffff81111561322557613224612a85565b5b6132318782880161318c565b91505092959194509250565b61324681612f26565b82525050565b6000602082019050613261600083018461323d565b92915050565b6000806040838503121561327e5761327d612a80565b5b600061328c85828601612cd6565b925050602061329d85828601612cd6565b9150509250929050565b600080fd5b600080fd5b60008083601f8401126132c7576132c6612da8565b5b8235905067ffffffffffffffff8111156132e4576132e36132a7565b5b602083019150836020820283011115613300576132ff6132ac565b5b9250929050565b6000806020838503121561331e5761331d612a80565b5b600083013567ffffffffffffffff81111561333c5761333b612a85565b5b613348858286016132b1565b92509250509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061339b57607f821691505b602082108114156133af576133ae613354565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613411602c83612b50565b915061341c826133b5565b604082019050919050565b6000602082019050818103600083015261344081613404565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006134a3602183612b50565b91506134ae82613447565b604082019050919050565b600060208201905081810360008301526134d281613496565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613535603883612b50565b9150613540826134d9565b604082019050919050565b6000602082019050818103600083015261356481613528565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b60006135c7603183612b50565b91506135d28261356b565b604082019050919050565b600060208201905081810360008301526135f6816135ba565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000613659602b83612b50565b9150613664826135fd565b604082019050919050565b600060208201905081810360008301526136888161364c565b9050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b60006136eb602c83612b50565b91506136f68261368f565b604082019050919050565b6000602082019050818103600083015261371a816136de565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613786602083612b50565b915061379182613750565b602082019050919050565b600060208201905081810360008301526137b581613779565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000613818602983612b50565b9150613823826137bc565b604082019050919050565b600060208201905081810360008301526138478161380b565b9050919050565b7f546865207175616e74697479206578636565647320746865207265736572766560008201527f2e00000000000000000000000000000000000000000000000000000000000000602082015250565b60006138aa602183612b50565b91506138b58261384e565b604082019050919050565b600060208201905081810360008301526138d98161389d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061391a82612c00565b915061392583612c00565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561395a576139596138e0565b5b828201905092915050565b7f44726f70206973207374696c6c206163746976652e0000000000000000000000600082015250565b600061399b601583612b50565b91506139a682613965565b602082019050919050565b600060208201905081810360008301526139ca8161398e565b9050919050565b7f4f776e657220636c61696d206e6f7420617661696c61626c6520616e796d6f7260008201527f652e000000000000000000000000000000000000000000000000000000000000602082015250565b6000613a2d602283612b50565b9150613a38826139d1565b604082019050919050565b60006020820190508181036000830152613a5c81613a20565b9050919050565b6000613a6e82612f26565b9150613a7983612f26565b925082821015613a8c57613a8b6138e0565b5b828203905092915050565b6000613aa282612c00565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613ad557613ad46138e0565b5b600182019050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000613b3c602a83612b50565b9150613b4782613ae0565b604082019050919050565b60006020820190508181036000830152613b6b81613b2f565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000613ba8601983612b50565b9150613bb382613b72565b602082019050919050565b60006020820190508181036000830152613bd781613b9b565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000613c3a602f83612b50565b9150613c4582613bde565b604082019050919050565b60006020820190508181036000830152613c6981613c2d565b9050919050565b600081905092915050565b6000613c8682612b45565b613c908185613c70565b9350613ca0818560208601612b61565b80840191505092915050565b6000613cb88285613c7b565b9150613cc48284613c7b565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613d2c602683612b50565b9150613d3782613cd0565b604082019050919050565b60006020820190508181036000830152613d5b81613d1f565b9050919050565b7f44726f70206e6f742079657420617661696c61626c652e000000000000000000600082015250565b6000613d98601783612b50565b9150613da382613d62565b602082019050919050565b60006020820190508181036000830152613dc781613d8b565b9050919050565b7f44726f70206973206f7665722e00000000000000000000000000000000000000600082015250565b6000613e04600d83612b50565b9150613e0f82613dce565b602082019050919050565b60006020820190508181036000830152613e3381613df7565b9050919050565b7f4d61782032302057574f412063616e206265206d696e7465642061742074686560008201527f2073616d652074696d652e000000000000000000000000000000000000000000602082015250565b6000613e96602b83612b50565b9150613ea182613e3a565b604082019050919050565b60006020820190508181036000830152613ec581613e89565b9050919050565b7f44726f70206973206e6f74206163746976652e00000000000000000000000000600082015250565b6000613f02601383612b50565b9150613f0d82613ecc565b602082019050919050565b60006020820190508181036000830152613f3181613ef5565b9050919050565b7f57617272696f7220616c726561647920636c61696d65642e0000000000000000600082015250565b6000613f6e601883612b50565b9150613f7982613f38565b602082019050919050565b60006020820190508181036000830152613f9d81613f61565b9050919050565b600081519050613fb381612cbf565b92915050565b600060208284031215613fcf57613fce612a80565b5b6000613fdd84828501613fa4565b91505092915050565b7f43616e6e6f7420636c61696d20612077617272696f722074686174206973206e60008201527f6f7420796f7572732e0000000000000000000000000000000000000000000000602082015250565b6000614042602983612b50565b915061404d82613fe6565b604082019050919050565b6000602082019050818103600083015261407181614035565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006140d4602c83612b50565b91506140df82614078565b604082019050919050565b60006020820190508181036000830152614103816140c7565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000614166602983612b50565b91506141718261410a565b604082019050919050565b6000602082019050818103600083015261419581614159565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006141f8602483612b50565b91506142038261419c565b604082019050919050565b60006020820190508181036000830152614227816141eb565b9050919050565b600061423982612c00565b915061424483612c00565b925082821015614257576142566138e0565b5b828203905092915050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006142be603283612b50565b91506142c982614262565b604082019050919050565b600060208201905081810360008301526142ed816142b1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061432e82612c00565b915061433983612c00565b925082614349576143486142f4565b5b828204905092915050565b600061435f82612c00565b915061436a83612c00565b92508261437a576143796142f4565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b60006143ac82614385565b6143b68185614390565b93506143c6818560208601612b61565b6143cf81612b94565b840191505092915050565b60006080820190506143ef6000830187612c95565b6143fc6020830186612c95565b6144096040830185612d2b565b818103606083015261441b81846143a1565b905095945050505050565b60008151905061443581612ab6565b92915050565b60006020828403121561445157614450612a80565b5b600061445f84828501614426565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006144cd602083612b50565b91506144d882614497565b602082019050919050565b600060208201905081810360008301526144fc816144c0565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614539601c83612b50565b915061454482614503565b602082019050919050565b600060208201905081810360008301526145688161452c565b905091905056fea2646970667358221220d702eb7ea932143b3f8d68b28239364f7b11a076203f53ce0bbb3b60437b32a364736f6c634300080900330000000000000000000000000000000000000000000000000000000000000060000000000000000000000000ef9c21e3ba31a74910fc7e7cb3fc814ad842ad6e00000000000000000000000000000000000000000000000000000000619597bc000000000000000000000000000000000000000000000000000000000000002068747470733a2f2f6170692e61726164656e612e696f2f746f6b656e732f322f

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101cf5760003560e01c80637632459711610104578063c87b56dd116100a2578063f25e248411610071578063f25e248414610542578063f2fde38b14610572578063f8e93ef91461058e578063fa62884c146105aa576101cf565b8063c87b56dd146104a6578063cd3293de146104d6578063d547cfb7146104f4578063e985e9c514610512576101cf565b806395d89b41116100de57806395d89b4114610432578063a22cb46514610450578063b187bd261461046c578063b88d4fde1461048a576101cf565b806376324597146103c65780638462151c146103e45780638da5cb5b14610414576101cf565b806342842e0e116101715780636352211e1161014b5780636352211e1461034057806366d0b0901461037057806370a082311461038c578063715018a6146103bc576101cf565b806342842e0e146102d85780634f6ccce7146102f457806355f804b314610324576101cf565b8063095ea7b3116101ad578063095ea7b31461025257806318160ddd1461026e57806323b872dd1461028c5780632f745c59146102a8576101cf565b806301ffc9a7146101d457806306fdde0314610204578063081812fc14610222575b600080fd5b6101ee60048036038101906101e99190612ae2565b6105b4565b6040516101fb9190612b2a565b60405180910390f35b61020c61062e565b6040516102199190612bde565b60405180910390f35b61023c60048036038101906102379190612c36565b6106c0565b6040516102499190612ca4565b60405180910390f35b61026c60048036038101906102679190612ceb565b610745565b005b61027661085d565b6040516102839190612d3a565b60405180910390f35b6102a660048036038101906102a19190612d55565b61086a565b005b6102c260048036038101906102bd9190612ceb565b6108ca565b6040516102cf9190612d3a565b60405180910390f35b6102f260048036038101906102ed9190612d55565b61096f565b005b61030e60048036038101906103099190612c36565b61098f565b60405161031b9190612d3a565b60405180910390f35b61033e60048036038101906103399190612edd565b610a00565b005b61035a60048036038101906103559190612c36565b610a96565b6040516103679190612ca4565b60405180910390f35b61038a60048036038101906103859190612f60565b610b48565b005b6103a660048036038101906103a19190612fa0565b610d65565b6040516103b39190612d3a565b60405180910390f35b6103c4610e1d565b005b6103ce610ea5565b6040516103db9190612d3a565b60405180910390f35b6103fe60048036038101906103f99190612fa0565b610eab565b60405161040b919061308b565b60405180910390f35b61041c610f59565b6040516104299190612ca4565b60405180910390f35b61043a610f83565b6040516104479190612bde565b60405180910390f35b61046a600480360381019061046591906130d9565b611015565b005b610474611196565b6040516104819190612b2a565b60405180910390f35b6104a4600480360381019061049f91906131ba565b6111a9565b005b6104c060048036038101906104bb9190612c36565b61120b565b6040516104cd9190612bde565b60405180910390f35b6104de6112b2565b6040516104eb919061324c565b60405180910390f35b6104fc6112c6565b6040516105099190612bde565b60405180910390f35b61052c60048036038101906105279190613267565b611354565b6040516105399190612b2a565b60405180910390f35b61055c60048036038101906105579190612c36565b6113e8565b6040516105699190612b2a565b60405180910390f35b61058c60048036038101906105879190612fa0565b611408565b005b6105a860048036038101906105a39190613307565b611500565b005b6105b2611853565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106275750610626826118fb565b5b9050919050565b60606000805461063d90613383565b80601f016020809104026020016040519081016040528092919081815260200182805461066990613383565b80156106b65780601f1061068b576101008083540402835291602001916106b6565b820191906000526020600020905b81548152906001019060200180831161069957829003601f168201915b5050505050905090565b60006106cb826119dd565b61070a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070190613427565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061075082610a96565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156107c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b8906134b9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166107e0611a49565b73ffffffffffffffffffffffffffffffffffffffff16148061080f575061080e81610809611a49565b611354565b5b61084e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108459061354b565b60405180910390fd5b6108588383611a51565b505050565b6000600880549050905090565b61087b610875611a49565b82611b0a565b6108ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b1906135dd565b60405180910390fd5b6108c5838383611be8565b505050565b60006108d583610d65565b8210610916576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090d9061366f565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b61098a838383604051806020016040528060008152506111a9565b505050565b600061099961085d565b82106109da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d190613701565b60405180910390fd5b600882815481106109ee576109ed613721565b5b90600052602060002001549050919050565b610a08611a49565b73ffffffffffffffffffffffffffffffffffffffff16610a26610f59565b73ffffffffffffffffffffffffffffffffffffffff1614610a7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a739061379c565b60405180910390fd5b80600b9080519060200190610a929291906129d3565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610b3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b369061382e565b60405180910390fd5b80915050919050565b610b50611a49565b73ffffffffffffffffffffffffffffffffffffffff16610b6e610f59565b73ffffffffffffffffffffffffffffffffffffffff1614610bc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbb9061379c565b60405180910390fd5b601060009054906101000a900461ffff1661ffff168261ffff161115610c1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c16906138c0565b60405180910390fd5b600f54600d54610c2f919061390f565b4211610c70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c67906139b1565b60405180910390fd5b6202a300600f54600d54610c84919061390f565b610c8e919061390f565b4210610ccf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc690613a43565b60405180910390fd5b611f408261ffff16610cdf61085d565b610ce9919061390f565b1115610cf457600080fd5b81601060008282829054906101000a900461ffff16610d139190613a63565b92506101000a81548161ffff021916908361ffff16021790555060005b8261ffff16811015610d6057610d4d82610d4861085d565b611e44565b8080610d5890613a97565b915050610d30565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610dd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dcd90613b52565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e25611a49565b73ffffffffffffffffffffffffffffffffffffffff16610e43610f59565b73ffffffffffffffffffffffffffffffffffffffff1614610e99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e909061379c565b60405180910390fd5b610ea36000611e62565b565b600d5481565b60606000610eb883610d65565b905060008167ffffffffffffffff811115610ed657610ed5612db2565b5b604051908082528060200260200182016040528015610f045781602001602082028036833780820191505090505b50905060005b82811015610f4e57610f1c85826108ca565b828281518110610f2f57610f2e613721565b5b6020026020010181815250508080610f4690613a97565b915050610f0a565b508092505050919050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610f9290613383565b80601f0160208091040260200160405190810160405280929190818152602001828054610fbe90613383565b801561100b5780601f10610fe05761010080835404028352916020019161100b565b820191906000526020600020905b815481529060010190602001808311610fee57829003601f168201915b5050505050905090565b61101d611a49565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561108b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108290613bbe565b60405180910390fd5b8060056000611098611a49565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611145611a49565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161118a9190612b2a565b60405180910390a35050565b600e60009054906101000a900460ff1681565b6111ba6111b4611a49565b83611b0a565b6111f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f0906135dd565b60405180910390fd5b61120584848484611f28565b50505050565b6060611216826119dd565b611255576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124c90613c50565b60405180910390fd5b600061125f611f84565b9050600081511161127f57604051806020016040528060008152506112aa565b8061128984612016565b60405160200161129a929190613cac565b6040516020818303038152906040525b915050919050565b601060009054906101000a900461ffff1681565b600b80546112d390613383565b80601f01602080910402602001604051908101604052809291908181526020018280546112ff90613383565b801561134c5780601f106113215761010080835404028352916020019161134c565b820191906000526020600020905b81548152906001019060200180831161132f57829003601f168201915b505050505081565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600c6020528060005260406000206000915054906101000a900460ff1681565b611410611a49565b73ffffffffffffffffffffffffffffffffffffffff1661142e610f59565b73ffffffffffffffffffffffffffffffffffffffff1614611484576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147b9061379c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156114f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114eb90613d42565b60405180910390fd5b6114fd81611e62565b50565b600d54421015611545576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153c90613dae565b60405180910390fd5b600f54600d54611555919061390f565b4210611596576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158d90613e1a565b60405180910390fd5b601582829050106115dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d390613eac565b60405180910390fd5b600e60009054906101000a900460ff161561162c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162390613f18565b60405180910390fd5b60005b8282905081101561184e57600c600084848481811061165157611650613721565b5b90506020020135815260200190815260200160002060009054906101000a900460ff16156116b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ab90613f84565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16601060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e85858581811061171c5761171b613721565b5b905060200201356040518263ffffffff1660e01b815260040161173f9190612d3a565b60206040518083038186803b15801561175757600080fd5b505afa15801561176b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178f9190613fb9565b73ffffffffffffffffffffffffffffffffffffffff16146117e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117dc90614058565b60405180910390fd5b6001600c60008585858181106117fe576117fd613721565b5b90506020020135815260200190815260200160002060006101000a81548160ff02191690831515021790555061183b3361183661085d565b611e44565b808061184690613a97565b91505061162f565b505050565b61185b611a49565b73ffffffffffffffffffffffffffffffffffffffff16611879610f59565b73ffffffffffffffffffffffffffffffffffffffff16146118cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c69061379c565b60405180910390fd5b600e60009054906101000a900460ff1615600e60006101000a81548160ff021916908315150217905550565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806119c657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806119d657506119d582612177565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611ac483610a96565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611b15826119dd565b611b54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4b906140ea565b60405180910390fd5b6000611b5f83610a96565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611bce57508373ffffffffffffffffffffffffffffffffffffffff16611bb6846106c0565b73ffffffffffffffffffffffffffffffffffffffff16145b80611bdf5750611bde8185611354565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611c0882610a96565b73ffffffffffffffffffffffffffffffffffffffff1614611c5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c559061417c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611cce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc59061420e565b60405180910390fd5b611cd98383836121e1565b611ce4600082611a51565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d34919061422e565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d8b919061390f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b611e5e8282604051806020016040528060008152506122f5565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611f33848484611be8565b611f3f84848484612350565b611f7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f75906142d4565b60405180910390fd5b50505050565b6060600b8054611f9390613383565b80601f0160208091040260200160405190810160405280929190818152602001828054611fbf90613383565b801561200c5780601f10611fe15761010080835404028352916020019161200c565b820191906000526020600020905b815481529060010190602001808311611fef57829003601f168201915b5050505050905090565b6060600082141561205e576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612172565b600082905060005b6000821461209057808061207990613a97565b915050600a826120899190614323565b9150612066565b60008167ffffffffffffffff8111156120ac576120ab612db2565b5b6040519080825280601f01601f1916602001820160405280156120de5781602001600182028036833780820191505090505b5090505b6000851461216b576001826120f7919061422e565b9150600a856121069190614354565b6030612112919061390f565b60f81b81838151811061212857612127613721565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856121649190614323565b94506120e2565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6121ec8383836124e7565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561222f5761222a816124ec565b61226e565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461226d5761226c8382612535565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122b1576122ac816126a2565b6122f0565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146122ef576122ee8282612773565b5b5b505050565b6122ff83836127f2565b61230c6000848484612350565b61234b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612342906142d4565b60405180910390fd5b505050565b60006123718473ffffffffffffffffffffffffffffffffffffffff166129c0565b156124da578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261239a611a49565b8786866040518563ffffffff1660e01b81526004016123bc94939291906143da565b602060405180830381600087803b1580156123d657600080fd5b505af192505050801561240757506040513d601f19601f82011682018060405250810190612404919061443b565b60015b61248a573d8060008114612437576040519150601f19603f3d011682016040523d82523d6000602084013e61243c565b606091505b50600081511415612482576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612479906142d4565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506124df565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161254284610d65565b61254c919061422e565b9050600060076000848152602001908152602001600020549050818114612631576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506126b6919061422e565b90506000600960008481526020019081526020016000205490506000600883815481106126e6576126e5613721565b5b90600052602060002001549050806008838154811061270857612707613721565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061275757612756614468565b5b6001900381819060005260206000200160009055905550505050565b600061277e83610d65565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612862576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612859906144e3565b60405180910390fd5b61286b816119dd565b156128ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a29061454f565b60405180910390fd5b6128b7600083836121e1565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612907919061390f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b8280546129df90613383565b90600052602060002090601f016020900481019282612a015760008555612a48565b82601f10612a1a57805160ff1916838001178555612a48565b82800160010185558215612a48579182015b82811115612a47578251825591602001919060010190612a2c565b5b509050612a559190612a59565b5090565b5b80821115612a72576000816000905550600101612a5a565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612abf81612a8a565b8114612aca57600080fd5b50565b600081359050612adc81612ab6565b92915050565b600060208284031215612af857612af7612a80565b5b6000612b0684828501612acd565b91505092915050565b60008115159050919050565b612b2481612b0f565b82525050565b6000602082019050612b3f6000830184612b1b565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612b7f578082015181840152602081019050612b64565b83811115612b8e576000848401525b50505050565b6000601f19601f8301169050919050565b6000612bb082612b45565b612bba8185612b50565b9350612bca818560208601612b61565b612bd381612b94565b840191505092915050565b60006020820190508181036000830152612bf88184612ba5565b905092915050565b6000819050919050565b612c1381612c00565b8114612c1e57600080fd5b50565b600081359050612c3081612c0a565b92915050565b600060208284031215612c4c57612c4b612a80565b5b6000612c5a84828501612c21565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612c8e82612c63565b9050919050565b612c9e81612c83565b82525050565b6000602082019050612cb96000830184612c95565b92915050565b612cc881612c83565b8114612cd357600080fd5b50565b600081359050612ce581612cbf565b92915050565b60008060408385031215612d0257612d01612a80565b5b6000612d1085828601612cd6565b9250506020612d2185828601612c21565b9150509250929050565b612d3481612c00565b82525050565b6000602082019050612d4f6000830184612d2b565b92915050565b600080600060608486031215612d6e57612d6d612a80565b5b6000612d7c86828701612cd6565b9350506020612d8d86828701612cd6565b9250506040612d9e86828701612c21565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612dea82612b94565b810181811067ffffffffffffffff82111715612e0957612e08612db2565b5b80604052505050565b6000612e1c612a76565b9050612e288282612de1565b919050565b600067ffffffffffffffff821115612e4857612e47612db2565b5b612e5182612b94565b9050602081019050919050565b82818337600083830152505050565b6000612e80612e7b84612e2d565b612e12565b905082815260208101848484011115612e9c57612e9b612dad565b5b612ea7848285612e5e565b509392505050565b600082601f830112612ec457612ec3612da8565b5b8135612ed4848260208601612e6d565b91505092915050565b600060208284031215612ef357612ef2612a80565b5b600082013567ffffffffffffffff811115612f1157612f10612a85565b5b612f1d84828501612eaf565b91505092915050565b600061ffff82169050919050565b612f3d81612f26565b8114612f4857600080fd5b50565b600081359050612f5a81612f34565b92915050565b60008060408385031215612f7757612f76612a80565b5b6000612f8585828601612f4b565b9250506020612f9685828601612cd6565b9150509250929050565b600060208284031215612fb657612fb5612a80565b5b6000612fc484828501612cd6565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61300281612c00565b82525050565b60006130148383612ff9565b60208301905092915050565b6000602082019050919050565b600061303882612fcd565b6130428185612fd8565b935061304d83612fe9565b8060005b8381101561307e5781516130658882613008565b975061307083613020565b925050600181019050613051565b5085935050505092915050565b600060208201905081810360008301526130a5818461302d565b905092915050565b6130b681612b0f565b81146130c157600080fd5b50565b6000813590506130d3816130ad565b92915050565b600080604083850312156130f0576130ef612a80565b5b60006130fe85828601612cd6565b925050602061310f858286016130c4565b9150509250929050565b600067ffffffffffffffff82111561313457613133612db2565b5b61313d82612b94565b9050602081019050919050565b600061315d61315884613119565b612e12565b90508281526020810184848401111561317957613178612dad565b5b613184848285612e5e565b509392505050565b600082601f8301126131a1576131a0612da8565b5b81356131b184826020860161314a565b91505092915050565b600080600080608085870312156131d4576131d3612a80565b5b60006131e287828801612cd6565b94505060206131f387828801612cd6565b935050604061320487828801612c21565b925050606085013567ffffffffffffffff81111561322557613224612a85565b5b6132318782880161318c565b91505092959194509250565b61324681612f26565b82525050565b6000602082019050613261600083018461323d565b92915050565b6000806040838503121561327e5761327d612a80565b5b600061328c85828601612cd6565b925050602061329d85828601612cd6565b9150509250929050565b600080fd5b600080fd5b60008083601f8401126132c7576132c6612da8565b5b8235905067ffffffffffffffff8111156132e4576132e36132a7565b5b602083019150836020820283011115613300576132ff6132ac565b5b9250929050565b6000806020838503121561331e5761331d612a80565b5b600083013567ffffffffffffffff81111561333c5761333b612a85565b5b613348858286016132b1565b92509250509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061339b57607f821691505b602082108114156133af576133ae613354565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613411602c83612b50565b915061341c826133b5565b604082019050919050565b6000602082019050818103600083015261344081613404565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006134a3602183612b50565b91506134ae82613447565b604082019050919050565b600060208201905081810360008301526134d281613496565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613535603883612b50565b9150613540826134d9565b604082019050919050565b6000602082019050818103600083015261356481613528565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b60006135c7603183612b50565b91506135d28261356b565b604082019050919050565b600060208201905081810360008301526135f6816135ba565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000613659602b83612b50565b9150613664826135fd565b604082019050919050565b600060208201905081810360008301526136888161364c565b9050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b60006136eb602c83612b50565b91506136f68261368f565b604082019050919050565b6000602082019050818103600083015261371a816136de565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613786602083612b50565b915061379182613750565b602082019050919050565b600060208201905081810360008301526137b581613779565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000613818602983612b50565b9150613823826137bc565b604082019050919050565b600060208201905081810360008301526138478161380b565b9050919050565b7f546865207175616e74697479206578636565647320746865207265736572766560008201527f2e00000000000000000000000000000000000000000000000000000000000000602082015250565b60006138aa602183612b50565b91506138b58261384e565b604082019050919050565b600060208201905081810360008301526138d98161389d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061391a82612c00565b915061392583612c00565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561395a576139596138e0565b5b828201905092915050565b7f44726f70206973207374696c6c206163746976652e0000000000000000000000600082015250565b600061399b601583612b50565b91506139a682613965565b602082019050919050565b600060208201905081810360008301526139ca8161398e565b9050919050565b7f4f776e657220636c61696d206e6f7420617661696c61626c6520616e796d6f7260008201527f652e000000000000000000000000000000000000000000000000000000000000602082015250565b6000613a2d602283612b50565b9150613a38826139d1565b604082019050919050565b60006020820190508181036000830152613a5c81613a20565b9050919050565b6000613a6e82612f26565b9150613a7983612f26565b925082821015613a8c57613a8b6138e0565b5b828203905092915050565b6000613aa282612c00565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613ad557613ad46138e0565b5b600182019050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000613b3c602a83612b50565b9150613b4782613ae0565b604082019050919050565b60006020820190508181036000830152613b6b81613b2f565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000613ba8601983612b50565b9150613bb382613b72565b602082019050919050565b60006020820190508181036000830152613bd781613b9b565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000613c3a602f83612b50565b9150613c4582613bde565b604082019050919050565b60006020820190508181036000830152613c6981613c2d565b9050919050565b600081905092915050565b6000613c8682612b45565b613c908185613c70565b9350613ca0818560208601612b61565b80840191505092915050565b6000613cb88285613c7b565b9150613cc48284613c7b565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613d2c602683612b50565b9150613d3782613cd0565b604082019050919050565b60006020820190508181036000830152613d5b81613d1f565b9050919050565b7f44726f70206e6f742079657420617661696c61626c652e000000000000000000600082015250565b6000613d98601783612b50565b9150613da382613d62565b602082019050919050565b60006020820190508181036000830152613dc781613d8b565b9050919050565b7f44726f70206973206f7665722e00000000000000000000000000000000000000600082015250565b6000613e04600d83612b50565b9150613e0f82613dce565b602082019050919050565b60006020820190508181036000830152613e3381613df7565b9050919050565b7f4d61782032302057574f412063616e206265206d696e7465642061742074686560008201527f2073616d652074696d652e000000000000000000000000000000000000000000602082015250565b6000613e96602b83612b50565b9150613ea182613e3a565b604082019050919050565b60006020820190508181036000830152613ec581613e89565b9050919050565b7f44726f70206973206e6f74206163746976652e00000000000000000000000000600082015250565b6000613f02601383612b50565b9150613f0d82613ecc565b602082019050919050565b60006020820190508181036000830152613f3181613ef5565b9050919050565b7f57617272696f7220616c726561647920636c61696d65642e0000000000000000600082015250565b6000613f6e601883612b50565b9150613f7982613f38565b602082019050919050565b60006020820190508181036000830152613f9d81613f61565b9050919050565b600081519050613fb381612cbf565b92915050565b600060208284031215613fcf57613fce612a80565b5b6000613fdd84828501613fa4565b91505092915050565b7f43616e6e6f7420636c61696d20612077617272696f722074686174206973206e60008201527f6f7420796f7572732e0000000000000000000000000000000000000000000000602082015250565b6000614042602983612b50565b915061404d82613fe6565b604082019050919050565b6000602082019050818103600083015261407181614035565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006140d4602c83612b50565b91506140df82614078565b604082019050919050565b60006020820190508181036000830152614103816140c7565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000614166602983612b50565b91506141718261410a565b604082019050919050565b6000602082019050818103600083015261419581614159565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006141f8602483612b50565b91506142038261419c565b604082019050919050565b60006020820190508181036000830152614227816141eb565b9050919050565b600061423982612c00565b915061424483612c00565b925082821015614257576142566138e0565b5b828203905092915050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006142be603283612b50565b91506142c982614262565b604082019050919050565b600060208201905081810360008301526142ed816142b1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061432e82612c00565b915061433983612c00565b925082614349576143486142f4565b5b828204905092915050565b600061435f82612c00565b915061436a83612c00565b92508261437a576143796142f4565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b60006143ac82614385565b6143b68185614390565b93506143c6818560208601612b61565b6143cf81612b94565b840191505092915050565b60006080820190506143ef6000830187612c95565b6143fc6020830186612c95565b6144096040830185612d2b565b818103606083015261441b81846143a1565b905095945050505050565b60008151905061443581612ab6565b92915050565b60006020828403121561445157614450612a80565b5b600061445f84828501614426565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006144cd602083612b50565b91506144d882614497565b602082019050919050565b600060208201905081810360008301526144fc816144c0565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614539601c83612b50565b915061454482614503565b602082019050919050565b600060208201905081810360008301526145688161452c565b905091905056fea2646970667358221220d702eb7ea932143b3f8d68b28239364f7b11a076203f53ce0bbb3b60437b32a364736f6c63430008090033

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

0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000ef9c21e3ba31a74910fc7e7cb3fc814ad842ad6e00000000000000000000000000000000000000000000000000000000619597bc000000000000000000000000000000000000000000000000000000000000002068747470733a2f2f6170692e61726164656e612e696f2f746f6b656e732f322f

-----Decoded View---------------
Arg [0] : baseURI (string): https://api.aradena.io/tokens/2/
Arg [1] : _WOAaddress (address): 0xEF9c21e3Ba31a74910fc7e7cB3fc814AD842AD6e
Arg [2] : _dropStart (uint256): 1637193660

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 000000000000000000000000ef9c21e3ba31a74910fc7e7cb3fc814ad842ad6e
Arg [2] : 00000000000000000000000000000000000000000000000000000000619597bc
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [4] : 68747470733a2f2f6170692e61726164656e612e696f2f746f6b656e732f322f


Deployed Bytecode Sourcemap

43388:3671:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34858:224;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21747:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23306:221;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22829:411;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35498:113;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24196:339;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35166:256;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24606:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35688:233;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44557:118;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21441:239;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45963:552;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21171:208;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42661:94;;;:::i;:::-;;43739:24;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46720:336;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42010:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21916:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23599:295;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43821:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24862:328;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22091:334;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44051:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43558:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23965:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43641:40;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42910:192;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44989:666;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46567:92;;;:::i;:::-;;34858:224;34960:4;34999:35;34984:50;;;:11;:50;;;;:90;;;;35038:36;35062:11;35038:23;:36::i;:::-;34984:90;34977:97;;34858:224;;;:::o;21747:100::-;21801:13;21834:5;21827:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21747:100;:::o;23306:221::-;23382:7;23410:16;23418:7;23410;:16::i;:::-;23402:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23495:15;:24;23511:7;23495:24;;;;;;;;;;;;;;;;;;;;;23488:31;;23306:221;;;:::o;22829:411::-;22910:13;22926:23;22941:7;22926:14;:23::i;:::-;22910:39;;22974:5;22968:11;;:2;:11;;;;22960:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;23068:5;23052:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;23077:37;23094:5;23101:12;:10;:12::i;:::-;23077:16;:37::i;:::-;23052:62;23030:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;23211:21;23220:2;23224:7;23211:8;:21::i;:::-;22899:341;22829:411;;:::o;35498:113::-;35559:7;35586:10;:17;;;;35579:24;;35498:113;:::o;24196:339::-;24391:41;24410:12;:10;:12::i;:::-;24424:7;24391:18;:41::i;:::-;24383:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24499:28;24509:4;24515:2;24519:7;24499:9;:28::i;:::-;24196:339;;;:::o;35166:256::-;35263:7;35299:23;35316:5;35299:16;:23::i;:::-;35291:5;:31;35283:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;35388:12;:19;35401:5;35388:19;;;;;;;;;;;;;;;:26;35408:5;35388:26;;;;;;;;;;;;35381:33;;35166:256;;;;:::o;24606:185::-;24744:39;24761:4;24767:2;24771:7;24744:39;;;;;;;;;;;;:16;:39::i;:::-;24606:185;;;:::o;35688:233::-;35763:7;35799:30;:28;:30::i;:::-;35791:5;:38;35783:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;35896:10;35907:5;35896:17;;;;;;;;:::i;:::-;;;;;;;;;;35889:24;;35688:233;;;:::o;44557:118::-;42241:12;:10;:12::i;:::-;42230:23;;:7;:5;:7::i;:::-;:23;;;42222:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44662:7:::1;44647:12;:22;;;;;;;;;;;;:::i;:::-;;44557:118:::0;:::o;21441:239::-;21513:7;21533:13;21549:7;:16;21557:7;21549:16;;;;;;;;;;;;;;;;;;;;;21533:32;;21601:1;21584:19;;:5;:19;;;;21576:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21667:5;21660:12;;;21441:239;;;:::o;45963:552::-;42241:12;:10;:12::i;:::-;42230:23;;:7;:5;:7::i;:::-;:23;;;42222:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46096:7:::1;;;;;;;;;;;46083:20;;:9;:20;;;;46075:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;46186:10;;46174:9;;:22;;;;:::i;:::-;46156:15;:40;46148:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;46280:6;46267:10;;46255:9;;:22;;;;:::i;:::-;:31;;;;:::i;:::-;46237:15;:49;46229:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;46369:4;46356:9;46340:25;;:13;:11;:13::i;:::-;:25;;;;:::i;:::-;:33;;46332:42;;;::::0;::::1;;46405:9;46394:7;;:20;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;46426:6;46421:89;46442:9;46438:13;;:1;:13;46421:89;;;46467:35;46477:9;46488:13;:11;:13::i;:::-;46467:9;:35::i;:::-;46453:3;;;;;:::i;:::-;;;;46421:89;;;;45963:552:::0;;:::o;21171:208::-;21243:7;21288:1;21271:19;;:5;:19;;;;21263:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;21355:9;:16;21365:5;21355:16;;;;;;;;;;;;;;;;21348:23;;21171:208;;;:::o;42661:94::-;42241:12;:10;:12::i;:::-;42230:23;;:7;:5;:7::i;:::-;:23;;;42222:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42726:21:::1;42744:1;42726:9;:21::i;:::-;42661:94::o:0;43739:24::-;;;;:::o;46720:336::-;46795:16;46823:13;46839:17;46849:6;46839:9;:17::i;:::-;46823:33;;46863:23;46903:5;46889:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46863:46;;46921:13;46916:115;46948:5;46940;:13;46916:115;;;46989:34;47009:6;47017:5;46989:19;:34::i;:::-;46973:6;46980:5;46973:13;;;;;;;;:::i;:::-;;;;;;;:50;;;;;46955:7;;;;;:::i;:::-;;;;46916:115;;;;47044:6;47037:13;;;;46720:336;;;:::o;42010:87::-;42056:7;42083:6;;;;;;;;;;;42076:13;;42010:87;:::o;21916:104::-;21972:13;22005:7;21998:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21916:104;:::o;23599:295::-;23714:12;:10;:12::i;:::-;23702:24;;:8;:24;;;;23694:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;23814:8;23769:18;:32;23788:12;:10;:12::i;:::-;23769:32;;;;;;;;;;;;;;;:42;23802:8;23769:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;23867:8;23838:48;;23853:12;:10;:12::i;:::-;23838:48;;;23877:8;23838:48;;;;;;:::i;:::-;;;;;;;;23599:295;;:::o;43821:28::-;;;;;;;;;;;;;:::o;24862:328::-;25037:41;25056:12;:10;:12::i;:::-;25070:7;25037:18;:41::i;:::-;25029:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25143:39;25157:4;25163:2;25167:7;25176:5;25143:13;:39::i;:::-;24862:328;;;;:::o;22091:334::-;22164:13;22198:16;22206:7;22198;:16::i;:::-;22190:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;22279:21;22303:10;:8;:10::i;:::-;22279:34;;22355:1;22337:7;22331:21;:25;:86;;;;;;;;;;;;;;;;;22383:7;22392:18;:7;:16;:18::i;:::-;22366:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;22331:86;22324:93;;;22091:334;;;:::o;44051:27::-;;;;;;;;;;;;;:::o;43558:26::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23965:164::-;24062:4;24086:18;:25;24105:5;24086:25;;;;;;;;;;;;;;;:35;24112:8;24086:35;;;;;;;;;;;;;;;;;;;;;;;;;24079:42;;23965:164;;;;:::o;43641:40::-;;;;;;;;;;;;;;;;;;;;;;:::o;42910:192::-;42241:12;:10;:12::i;:::-;42230:23;;:7;:5;:7::i;:::-;:23;;;42222:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43019:1:::1;42999:22;;:8;:22;;;;42991:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;43075:19;43085:8;43075:9;:19::i;:::-;42910:192:::0;:::o;44989:666::-;45093:9;;45074:15;:28;;45066:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;45175:10;;45163:9;;:22;;;;:::i;:::-;45145:15;:40;45137:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;45236:2;45218:8;;:15;;:20;45210:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;45302:8;;;;;;;;;;;45301:9;45293:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;45348:6;45343:307;45364:8;;:15;;45360:1;:19;45343:307;;;45404:7;:20;45412:8;;45421:1;45412:11;;;;;;;:::i;:::-;;;;;;;;45404:20;;;;;;;;;;;;;;;;;;;;;45403:21;45395:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;45505:10;45470:45;;:10;;;;;;;;;;;:18;;;45489:8;;45498:1;45489:11;;;;;;;:::i;:::-;;;;;;;;45470:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:45;;;45462:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;45593:4;45570:7;:20;45578:8;;45587:1;45578:11;;;;;;;:::i;:::-;;;;;;;;45570:20;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;45606:36;45616:10;45628:13;:11;:13::i;:::-;45606:9;:36::i;:::-;45381:3;;;;;:::i;:::-;;;;45343:307;;;;44989:666;;:::o;46567:92::-;42241:12;:10;:12::i;:::-;42230:23;;:7;:5;:7::i;:::-;:23;;;42222:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46645:8:::1;;;;;;;;;;;46644:9;46633:8;;:20;;;;;;;;;;;;;;;;;;46567:92::o:0;20802:305::-;20904:4;20956:25;20941:40;;;:11;:40;;;;:105;;;;21013:33;20998:48;;;:11;:48;;;;20941:105;:158;;;;21063:36;21087:11;21063:23;:36::i;:::-;20941:158;20921:178;;20802:305;;;:::o;26700:127::-;26765:4;26817:1;26789:30;;:7;:16;26797:7;26789:16;;;;;;;;;;;;;;;;;;;;;:30;;;;26782:37;;26700:127;;;:::o;16204:98::-;16257:7;16284:10;16277:17;;16204:98;:::o;30682:174::-;30784:2;30757:15;:24;30773:7;30757:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;30840:7;30836:2;30802:46;;30811:23;30826:7;30811:14;:23::i;:::-;30802:46;;;;;;;;;;;;30682:174;;:::o;26994:348::-;27087:4;27112:16;27120:7;27112;:16::i;:::-;27104:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27188:13;27204:23;27219:7;27204:14;:23::i;:::-;27188:39;;27257:5;27246:16;;:7;:16;;;:51;;;;27290:7;27266:31;;:20;27278:7;27266:11;:20::i;:::-;:31;;;27246:51;:87;;;;27301:32;27318:5;27325:7;27301:16;:32::i;:::-;27246:87;27238:96;;;26994:348;;;;:::o;29986:578::-;30145:4;30118:31;;:23;30133:7;30118:14;:23::i;:::-;:31;;;30110:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;30228:1;30214:16;;:2;:16;;;;30206:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;30284:39;30305:4;30311:2;30315:7;30284:20;:39::i;:::-;30388:29;30405:1;30409:7;30388:8;:29::i;:::-;30449:1;30430:9;:15;30440:4;30430:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;30478:1;30461:9;:13;30471:2;30461:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30509:2;30490:7;:16;30498:7;30490:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30548:7;30544:2;30529:27;;30538:4;30529:27;;;;;;;;;;;;29986:578;;;:::o;27684:110::-;27760:26;27770:2;27774:7;27760:26;;;;;;;;;;;;:9;:26::i;:::-;27684:110;;:::o;43110:173::-;43166:16;43185:6;;;;;;;;;;;43166:25;;43211:8;43202:6;;:17;;;;;;;;;;;;;;;;;;43266:8;43235:40;;43256:8;43235:40;;;;;;;;;;;;43155:128;43110:173;:::o;26072:315::-;26229:28;26239:4;26245:2;26249:7;26229:9;:28::i;:::-;26276:48;26299:4;26305:2;26309:7;26318:5;26276:22;:48::i;:::-;26268:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;26072:315;;;;:::o;44778:135::-;44863:13;44895:12;44888:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44778:135;:::o;16737:723::-;16793:13;17023:1;17014:5;:10;17010:53;;;17041:10;;;;;;;;;;;;;;;;;;;;;17010:53;17073:12;17088:5;17073:20;;17104:14;17129:78;17144:1;17136:4;:9;17129:78;;17162:8;;;;;:::i;:::-;;;;17193:2;17185:10;;;;;:::i;:::-;;;17129:78;;;17217:19;17249:6;17239:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17217:39;;17267:154;17283:1;17274:5;:10;17267:154;;17311:1;17301:11;;;;;:::i;:::-;;;17378:2;17370:5;:10;;;;:::i;:::-;17357:2;:24;;;;:::i;:::-;17344:39;;17327:6;17334;17327:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;17407:2;17398:11;;;;;:::i;:::-;;;17267:154;;;17445:6;17431:21;;;;;16737:723;;;;:::o;19300:157::-;19385:4;19424:25;19409:40;;;:11;:40;;;;19402:47;;19300:157;;;:::o;36534:589::-;36678:45;36705:4;36711:2;36715:7;36678:26;:45::i;:::-;36756:1;36740:18;;:4;:18;;;36736:187;;;36775:40;36807:7;36775:31;:40::i;:::-;36736:187;;;36845:2;36837:10;;:4;:10;;;36833:90;;36864:47;36897:4;36903:7;36864:32;:47::i;:::-;36833:90;36736:187;36951:1;36937:16;;:2;:16;;;36933:183;;;36970:45;37007:7;36970:36;:45::i;:::-;36933:183;;;37043:4;37037:10;;:2;:10;;;37033:83;;37064:40;37092:2;37096:7;37064:27;:40::i;:::-;37033:83;36933:183;36534:589;;;:::o;28021:321::-;28151:18;28157:2;28161:7;28151:5;:18::i;:::-;28202:54;28233:1;28237:2;28241:7;28250:5;28202:22;:54::i;:::-;28180:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;28021:321;;;:::o;31421:799::-;31576:4;31597:15;:2;:13;;;:15::i;:::-;31593:620;;;31649:2;31633:36;;;31670:12;:10;:12::i;:::-;31684:4;31690:7;31699:5;31633:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;31629:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31892:1;31875:6;:13;:18;31871:272;;;31918:60;;;;;;;;;;:::i;:::-;;;;;;;;31871:272;32093:6;32087:13;32078:6;32074:2;32070:15;32063:38;31629:529;31766:41;;;31756:51;;;:6;:51;;;;31749:58;;;;;31593:620;32197:4;32190:11;;31421:799;;;;;;;:::o;32792:126::-;;;;:::o;37846:164::-;37950:10;:17;;;;37923:15;:24;37939:7;37923:24;;;;;;;;;;;:44;;;;37978:10;37994:7;37978:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37846:164;:::o;38637:988::-;38903:22;38953:1;38928:22;38945:4;38928:16;:22::i;:::-;:26;;;;:::i;:::-;38903:51;;38965:18;38986:17;:26;39004:7;38986:26;;;;;;;;;;;;38965:47;;39133:14;39119:10;:28;39115:328;;39164:19;39186:12;:18;39199:4;39186:18;;;;;;;;;;;;;;;:34;39205:14;39186:34;;;;;;;;;;;;39164:56;;39270:11;39237:12;:18;39250:4;39237:18;;;;;;;;;;;;;;;:30;39256:10;39237:30;;;;;;;;;;;:44;;;;39387:10;39354:17;:30;39372:11;39354:30;;;;;;;;;;;:43;;;;39149:294;39115:328;39539:17;:26;39557:7;39539:26;;;;;;;;;;;39532:33;;;39583:12;:18;39596:4;39583:18;;;;;;;;;;;;;;;:34;39602:14;39583:34;;;;;;;;;;;39576:41;;;38718:907;;38637:988;;:::o;39920:1079::-;40173:22;40218:1;40198:10;:17;;;;:21;;;;:::i;:::-;40173:46;;40230:18;40251:15;:24;40267:7;40251:24;;;;;;;;;;;;40230:45;;40602:19;40624:10;40635:14;40624:26;;;;;;;;:::i;:::-;;;;;;;;;;40602:48;;40688:11;40663:10;40674;40663:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;40799:10;40768:15;:28;40784:11;40768:28;;;;;;;;;;;:41;;;;40940:15;:24;40956:7;40940:24;;;;;;;;;;;40933:31;;;40975:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;39991:1008;;;39920:1079;:::o;37424:221::-;37509:14;37526:20;37543:2;37526:16;:20::i;:::-;37509:37;;37584:7;37557:12;:16;37570:2;37557:16;;;;;;;;;;;;;;;:24;37574:6;37557:24;;;;;;;;;;;:34;;;;37631:6;37602:17;:26;37620:7;37602:26;;;;;;;;;;;:35;;;;37498:147;37424:221;;:::o;28678:382::-;28772:1;28758:16;;:2;:16;;;;28750:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;28831:16;28839:7;28831;:16::i;:::-;28830:17;28822:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28893:45;28922:1;28926:2;28930:7;28893:20;:45::i;:::-;28968:1;28951:9;:13;28961:2;28951:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;28999:2;28980:7;:16;28988:7;28980:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29044:7;29040:2;29019:33;;29036:1;29019:33;;;;;;;;;;;;28678:382;;:::o;8240:387::-;8300:4;8508:12;8575:7;8563:20;8555:28;;8618:1;8611:4;:8;8604:15;;;8240:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:307::-;1866:1;1876:113;1890:6;1887:1;1884:13;1876:113;;;1975:1;1970:3;1966:11;1960:18;1956:1;1951:3;1947:11;1940:39;1912:2;1909:1;1905:10;1900:15;;1876:113;;;2007:6;2004:1;2001:13;1998:101;;;2087:1;2078:6;2073:3;2069:16;2062:27;1998:101;1847:258;1798:307;;;:::o;2111:102::-;2152:6;2203:2;2199:7;2194:2;2187:5;2183:14;2179:28;2169:38;;2111:102;;;:::o;2219:364::-;2307:3;2335:39;2368:5;2335:39;:::i;:::-;2390:71;2454:6;2449:3;2390:71;:::i;:::-;2383:78;;2470:52;2515:6;2510:3;2503:4;2496:5;2492:16;2470:52;:::i;:::-;2547:29;2569:6;2547:29;:::i;:::-;2542:3;2538:39;2531:46;;2311:272;2219:364;;;;:::o;2589:313::-;2702:4;2740:2;2729:9;2725:18;2717:26;;2789:9;2783:4;2779:20;2775:1;2764:9;2760:17;2753:47;2817:78;2890:4;2881:6;2817:78;:::i;:::-;2809:86;;2589:313;;;;:::o;2908:77::-;2945:7;2974:5;2963:16;;2908:77;;;:::o;2991:122::-;3064:24;3082:5;3064:24;:::i;:::-;3057:5;3054:35;3044:63;;3103:1;3100;3093:12;3044:63;2991:122;:::o;3119:139::-;3165:5;3203:6;3190:20;3181:29;;3219:33;3246:5;3219:33;:::i;:::-;3119:139;;;;:::o;3264:329::-;3323:6;3372:2;3360:9;3351:7;3347:23;3343:32;3340:119;;;3378:79;;:::i;:::-;3340:119;3498:1;3523:53;3568:7;3559:6;3548:9;3544:22;3523:53;:::i;:::-;3513:63;;3469:117;3264:329;;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:118::-;3920:24;3938:5;3920:24;:::i;:::-;3915:3;3908:37;3833:118;;:::o;3957:222::-;4050:4;4088:2;4077:9;4073:18;4065:26;;4101:71;4169:1;4158:9;4154:17;4145:6;4101:71;:::i;:::-;3957:222;;;;:::o;4185:122::-;4258:24;4276:5;4258:24;:::i;:::-;4251:5;4248:35;4238:63;;4297:1;4294;4287:12;4238:63;4185:122;:::o;4313:139::-;4359:5;4397:6;4384:20;4375:29;;4413:33;4440:5;4413:33;:::i;:::-;4313:139;;;;:::o;4458:474::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4807:118;4458:474;;;;;:::o;4938:118::-;5025:24;5043:5;5025:24;:::i;:::-;5020:3;5013:37;4938:118;;:::o;5062:222::-;5155:4;5193:2;5182:9;5178:18;5170:26;;5206:71;5274:1;5263:9;5259:17;5250:6;5206:71;:::i;:::-;5062:222;;;;:::o;5290:619::-;5367:6;5375;5383;5432:2;5420:9;5411:7;5407:23;5403:32;5400:119;;;5438:79;;:::i;:::-;5400:119;5558:1;5583:53;5628:7;5619:6;5608:9;5604:22;5583:53;:::i;:::-;5573:63;;5529:117;5685:2;5711:53;5756:7;5747:6;5736:9;5732:22;5711:53;:::i;:::-;5701:63;;5656:118;5813:2;5839:53;5884:7;5875:6;5864:9;5860:22;5839:53;:::i;:::-;5829:63;;5784:118;5290:619;;;;;:::o;5915:117::-;6024:1;6021;6014:12;6038:117;6147:1;6144;6137:12;6161:180;6209:77;6206:1;6199:88;6306:4;6303:1;6296:15;6330:4;6327:1;6320:15;6347:281;6430:27;6452:4;6430:27;:::i;:::-;6422:6;6418:40;6560:6;6548:10;6545:22;6524:18;6512:10;6509:34;6506:62;6503:88;;;6571:18;;:::i;:::-;6503:88;6611:10;6607:2;6600:22;6390:238;6347:281;;:::o;6634:129::-;6668:6;6695:20;;:::i;:::-;6685:30;;6724:33;6752:4;6744:6;6724:33;:::i;:::-;6634:129;;;:::o;6769:308::-;6831:4;6921:18;6913:6;6910:30;6907:56;;;6943:18;;:::i;:::-;6907:56;6981:29;7003:6;6981:29;:::i;:::-;6973:37;;7065:4;7059;7055:15;7047:23;;6769:308;;;:::o;7083:154::-;7167:6;7162:3;7157;7144:30;7229:1;7220:6;7215:3;7211:16;7204:27;7083:154;;;:::o;7243:412::-;7321:5;7346:66;7362:49;7404:6;7362:49;:::i;:::-;7346:66;:::i;:::-;7337:75;;7435:6;7428:5;7421:21;7473:4;7466:5;7462:16;7511:3;7502:6;7497:3;7493:16;7490:25;7487:112;;;7518:79;;:::i;:::-;7487:112;7608:41;7642:6;7637:3;7632;7608:41;:::i;:::-;7327:328;7243:412;;;;;:::o;7675:340::-;7731:5;7780:3;7773:4;7765:6;7761:17;7757:27;7747:122;;7788:79;;:::i;:::-;7747:122;7905:6;7892:20;7930:79;8005:3;7997:6;7990:4;7982:6;7978:17;7930:79;:::i;:::-;7921:88;;7737:278;7675:340;;;;:::o;8021:509::-;8090:6;8139:2;8127:9;8118:7;8114:23;8110:32;8107:119;;;8145:79;;:::i;:::-;8107:119;8293:1;8282:9;8278:17;8265:31;8323:18;8315:6;8312:30;8309:117;;;8345:79;;:::i;:::-;8309:117;8450:63;8505:7;8496:6;8485:9;8481:22;8450:63;:::i;:::-;8440:73;;8236:287;8021:509;;;;:::o;8536:89::-;8572:7;8612:6;8605:5;8601:18;8590:29;;8536:89;;;:::o;8631:120::-;8703:23;8720:5;8703:23;:::i;:::-;8696:5;8693:34;8683:62;;8741:1;8738;8731:12;8683:62;8631:120;:::o;8757:137::-;8802:5;8840:6;8827:20;8818:29;;8856:32;8882:5;8856:32;:::i;:::-;8757:137;;;;:::o;8900:472::-;8967:6;8975;9024:2;9012:9;9003:7;8999:23;8995:32;8992:119;;;9030:79;;:::i;:::-;8992:119;9150:1;9175:52;9219:7;9210:6;9199:9;9195:22;9175:52;:::i;:::-;9165:62;;9121:116;9276:2;9302:53;9347:7;9338:6;9327:9;9323:22;9302:53;:::i;:::-;9292:63;;9247:118;8900:472;;;;;:::o;9378:329::-;9437:6;9486:2;9474:9;9465:7;9461:23;9457:32;9454:119;;;9492:79;;:::i;:::-;9454:119;9612:1;9637:53;9682:7;9673:6;9662:9;9658:22;9637:53;:::i;:::-;9627:63;;9583:117;9378:329;;;;:::o;9713:114::-;9780:6;9814:5;9808:12;9798:22;;9713:114;;;:::o;9833:184::-;9932:11;9966:6;9961:3;9954:19;10006:4;10001:3;9997:14;9982:29;;9833:184;;;;:::o;10023:132::-;10090:4;10113:3;10105:11;;10143:4;10138:3;10134:14;10126:22;;10023:132;;;:::o;10161:108::-;10238:24;10256:5;10238:24;:::i;:::-;10233:3;10226:37;10161:108;;:::o;10275:179::-;10344:10;10365:46;10407:3;10399:6;10365:46;:::i;:::-;10443:4;10438:3;10434:14;10420:28;;10275:179;;;;:::o;10460:113::-;10530:4;10562;10557:3;10553:14;10545:22;;10460:113;;;:::o;10609:732::-;10728:3;10757:54;10805:5;10757:54;:::i;:::-;10827:86;10906:6;10901:3;10827:86;:::i;:::-;10820:93;;10937:56;10987:5;10937:56;:::i;:::-;11016:7;11047:1;11032:284;11057:6;11054:1;11051:13;11032:284;;;11133:6;11127:13;11160:63;11219:3;11204:13;11160:63;:::i;:::-;11153:70;;11246:60;11299:6;11246:60;:::i;:::-;11236:70;;11092:224;11079:1;11076;11072:9;11067:14;;11032:284;;;11036:14;11332:3;11325:10;;10733:608;;;10609:732;;;;:::o;11347:373::-;11490:4;11528:2;11517:9;11513:18;11505:26;;11577:9;11571:4;11567:20;11563:1;11552:9;11548:17;11541:47;11605:108;11708:4;11699:6;11605:108;:::i;:::-;11597:116;;11347:373;;;;:::o;11726:116::-;11796:21;11811:5;11796:21;:::i;:::-;11789:5;11786:32;11776:60;;11832:1;11829;11822:12;11776:60;11726:116;:::o;11848:133::-;11891:5;11929:6;11916:20;11907:29;;11945:30;11969:5;11945:30;:::i;:::-;11848:133;;;;:::o;11987:468::-;12052:6;12060;12109:2;12097:9;12088:7;12084:23;12080:32;12077:119;;;12115:79;;:::i;:::-;12077:119;12235:1;12260:53;12305:7;12296:6;12285:9;12281:22;12260:53;:::i;:::-;12250:63;;12206:117;12362:2;12388:50;12430:7;12421:6;12410:9;12406:22;12388:50;:::i;:::-;12378:60;;12333:115;11987:468;;;;;:::o;12461:307::-;12522:4;12612:18;12604:6;12601:30;12598:56;;;12634:18;;:::i;:::-;12598:56;12672:29;12694:6;12672:29;:::i;:::-;12664:37;;12756:4;12750;12746:15;12738:23;;12461:307;;;:::o;12774:410::-;12851:5;12876:65;12892:48;12933:6;12892:48;:::i;:::-;12876:65;:::i;:::-;12867:74;;12964:6;12957:5;12950:21;13002:4;12995:5;12991:16;13040:3;13031:6;13026:3;13022:16;13019:25;13016:112;;;13047:79;;:::i;:::-;13016:112;13137:41;13171:6;13166:3;13161;13137:41;:::i;:::-;12857:327;12774:410;;;;;:::o;13203:338::-;13258:5;13307:3;13300:4;13292:6;13288:17;13284:27;13274:122;;13315:79;;:::i;:::-;13274:122;13432:6;13419:20;13457:78;13531:3;13523:6;13516:4;13508:6;13504:17;13457:78;:::i;:::-;13448:87;;13264:277;13203:338;;;;:::o;13547:943::-;13642:6;13650;13658;13666;13715:3;13703:9;13694:7;13690:23;13686:33;13683:120;;;13722:79;;:::i;:::-;13683:120;13842:1;13867:53;13912:7;13903:6;13892:9;13888:22;13867:53;:::i;:::-;13857:63;;13813:117;13969:2;13995:53;14040:7;14031:6;14020:9;14016:22;13995:53;:::i;:::-;13985:63;;13940:118;14097:2;14123:53;14168:7;14159:6;14148:9;14144:22;14123:53;:::i;:::-;14113:63;;14068:118;14253:2;14242:9;14238:18;14225:32;14284:18;14276:6;14273:30;14270:117;;;14306:79;;:::i;:::-;14270:117;14411:62;14465:7;14456:6;14445:9;14441:22;14411:62;:::i;:::-;14401:72;;14196:287;13547:943;;;;;;;:::o;14496:115::-;14581:23;14598:5;14581:23;:::i;:::-;14576:3;14569:36;14496:115;;:::o;14617:218::-;14708:4;14746:2;14735:9;14731:18;14723:26;;14759:69;14825:1;14814:9;14810:17;14801:6;14759:69;:::i;:::-;14617:218;;;;:::o;14841:474::-;14909:6;14917;14966:2;14954:9;14945:7;14941:23;14937:32;14934:119;;;14972:79;;:::i;:::-;14934:119;15092:1;15117:53;15162:7;15153:6;15142:9;15138:22;15117:53;:::i;:::-;15107:63;;15063:117;15219:2;15245:53;15290:7;15281:6;15270:9;15266:22;15245:53;:::i;:::-;15235:63;;15190:118;14841:474;;;;;:::o;15321:117::-;15430:1;15427;15420:12;15444:117;15553:1;15550;15543:12;15584:568;15657:8;15667:6;15717:3;15710:4;15702:6;15698:17;15694:27;15684:122;;15725:79;;:::i;:::-;15684:122;15838:6;15825:20;15815:30;;15868:18;15860:6;15857:30;15854:117;;;15890:79;;:::i;:::-;15854:117;16004:4;15996:6;15992:17;15980:29;;16058:3;16050:4;16042:6;16038:17;16028:8;16024:32;16021:41;16018:128;;;16065:79;;:::i;:::-;16018:128;15584:568;;;;;:::o;16158:559::-;16244:6;16252;16301:2;16289:9;16280:7;16276:23;16272:32;16269:119;;;16307:79;;:::i;:::-;16269:119;16455:1;16444:9;16440:17;16427:31;16485:18;16477:6;16474:30;16471:117;;;16507:79;;:::i;:::-;16471:117;16620:80;16692:7;16683:6;16672:9;16668:22;16620:80;:::i;:::-;16602:98;;;;16398:312;16158:559;;;;;:::o;16723:180::-;16771:77;16768:1;16761:88;16868:4;16865:1;16858:15;16892:4;16889:1;16882:15;16909:320;16953:6;16990:1;16984:4;16980:12;16970:22;;17037:1;17031:4;17027:12;17058:18;17048:81;;17114:4;17106:6;17102:17;17092:27;;17048:81;17176:2;17168:6;17165:14;17145:18;17142:38;17139:84;;;17195:18;;:::i;:::-;17139:84;16960:269;16909:320;;;:::o;17235:231::-;17375:34;17371:1;17363:6;17359:14;17352:58;17444:14;17439:2;17431:6;17427:15;17420:39;17235:231;:::o;17472:366::-;17614:3;17635:67;17699:2;17694:3;17635:67;:::i;:::-;17628:74;;17711:93;17800:3;17711:93;:::i;:::-;17829:2;17824:3;17820:12;17813:19;;17472:366;;;:::o;17844:419::-;18010:4;18048:2;18037:9;18033:18;18025:26;;18097:9;18091:4;18087:20;18083:1;18072:9;18068:17;18061:47;18125:131;18251:4;18125:131;:::i;:::-;18117:139;;17844:419;;;:::o;18269:220::-;18409:34;18405:1;18397:6;18393:14;18386:58;18478:3;18473:2;18465:6;18461:15;18454:28;18269:220;:::o;18495:366::-;18637:3;18658:67;18722:2;18717:3;18658:67;:::i;:::-;18651:74;;18734:93;18823:3;18734:93;:::i;:::-;18852:2;18847:3;18843:12;18836:19;;18495:366;;;:::o;18867:419::-;19033:4;19071:2;19060:9;19056:18;19048:26;;19120:9;19114:4;19110:20;19106:1;19095:9;19091:17;19084:47;19148:131;19274:4;19148:131;:::i;:::-;19140:139;;18867:419;;;:::o;19292:243::-;19432:34;19428:1;19420:6;19416:14;19409:58;19501:26;19496:2;19488:6;19484:15;19477:51;19292:243;:::o;19541:366::-;19683:3;19704:67;19768:2;19763:3;19704:67;:::i;:::-;19697:74;;19780:93;19869:3;19780:93;:::i;:::-;19898:2;19893:3;19889:12;19882:19;;19541:366;;;:::o;19913:419::-;20079:4;20117:2;20106:9;20102:18;20094:26;;20166:9;20160:4;20156:20;20152:1;20141:9;20137:17;20130:47;20194:131;20320:4;20194:131;:::i;:::-;20186:139;;19913:419;;;:::o;20338:236::-;20478:34;20474:1;20466:6;20462:14;20455:58;20547:19;20542:2;20534:6;20530:15;20523:44;20338:236;:::o;20580:366::-;20722:3;20743:67;20807:2;20802:3;20743:67;:::i;:::-;20736:74;;20819:93;20908:3;20819:93;:::i;:::-;20937:2;20932:3;20928:12;20921:19;;20580:366;;;:::o;20952:419::-;21118:4;21156:2;21145:9;21141:18;21133:26;;21205:9;21199:4;21195:20;21191:1;21180:9;21176:17;21169:47;21233:131;21359:4;21233:131;:::i;:::-;21225:139;;20952:419;;;:::o;21377:230::-;21517:34;21513:1;21505:6;21501:14;21494:58;21586:13;21581:2;21573:6;21569:15;21562:38;21377:230;:::o;21613:366::-;21755:3;21776:67;21840:2;21835:3;21776:67;:::i;:::-;21769:74;;21852:93;21941:3;21852:93;:::i;:::-;21970:2;21965:3;21961:12;21954:19;;21613:366;;;:::o;21985:419::-;22151:4;22189:2;22178:9;22174:18;22166:26;;22238:9;22232:4;22228:20;22224:1;22213:9;22209:17;22202:47;22266:131;22392:4;22266:131;:::i;:::-;22258:139;;21985:419;;;:::o;22410:231::-;22550:34;22546:1;22538:6;22534:14;22527:58;22619:14;22614:2;22606:6;22602:15;22595:39;22410:231;:::o;22647:366::-;22789:3;22810:67;22874:2;22869:3;22810:67;:::i;:::-;22803:74;;22886:93;22975:3;22886:93;:::i;:::-;23004:2;22999:3;22995:12;22988:19;;22647:366;;;:::o;23019:419::-;23185:4;23223:2;23212:9;23208:18;23200:26;;23272:9;23266:4;23262:20;23258:1;23247:9;23243:17;23236:47;23300:131;23426:4;23300:131;:::i;:::-;23292:139;;23019:419;;;:::o;23444:180::-;23492:77;23489:1;23482:88;23589:4;23586:1;23579:15;23613:4;23610:1;23603:15;23630:182;23770:34;23766:1;23758:6;23754:14;23747:58;23630:182;:::o;23818:366::-;23960:3;23981:67;24045:2;24040:3;23981:67;:::i;:::-;23974:74;;24057:93;24146:3;24057:93;:::i;:::-;24175:2;24170:3;24166:12;24159:19;;23818:366;;;:::o;24190:419::-;24356:4;24394:2;24383:9;24379:18;24371:26;;24443:9;24437:4;24433:20;24429:1;24418:9;24414:17;24407:47;24471:131;24597:4;24471:131;:::i;:::-;24463:139;;24190:419;;;:::o;24615:228::-;24755:34;24751:1;24743:6;24739:14;24732:58;24824:11;24819:2;24811:6;24807:15;24800:36;24615:228;:::o;24849:366::-;24991:3;25012:67;25076:2;25071:3;25012:67;:::i;:::-;25005:74;;25088:93;25177:3;25088:93;:::i;:::-;25206:2;25201:3;25197:12;25190:19;;24849:366;;;:::o;25221:419::-;25387:4;25425:2;25414:9;25410:18;25402:26;;25474:9;25468:4;25464:20;25460:1;25449:9;25445:17;25438:47;25502:131;25628:4;25502:131;:::i;:::-;25494:139;;25221:419;;;:::o;25646:220::-;25786:34;25782:1;25774:6;25770:14;25763:58;25855:3;25850:2;25842:6;25838:15;25831:28;25646:220;:::o;25872:366::-;26014:3;26035:67;26099:2;26094:3;26035:67;:::i;:::-;26028:74;;26111:93;26200:3;26111:93;:::i;:::-;26229:2;26224:3;26220:12;26213:19;;25872:366;;;:::o;26244:419::-;26410:4;26448:2;26437:9;26433:18;26425:26;;26497:9;26491:4;26487:20;26483:1;26472:9;26468:17;26461:47;26525:131;26651:4;26525:131;:::i;:::-;26517:139;;26244:419;;;:::o;26669:180::-;26717:77;26714:1;26707:88;26814:4;26811:1;26804:15;26838:4;26835:1;26828:15;26855:305;26895:3;26914:20;26932:1;26914:20;:::i;:::-;26909:25;;26948:20;26966:1;26948:20;:::i;:::-;26943:25;;27102:1;27034:66;27030:74;27027:1;27024:81;27021:107;;;27108:18;;:::i;:::-;27021:107;27152:1;27149;27145:9;27138:16;;26855:305;;;;:::o;27166:171::-;27306:23;27302:1;27294:6;27290:14;27283:47;27166:171;:::o;27343:366::-;27485:3;27506:67;27570:2;27565:3;27506:67;:::i;:::-;27499:74;;27582:93;27671:3;27582:93;:::i;:::-;27700:2;27695:3;27691:12;27684:19;;27343:366;;;:::o;27715:419::-;27881:4;27919:2;27908:9;27904:18;27896:26;;27968:9;27962:4;27958:20;27954:1;27943:9;27939:17;27932:47;27996:131;28122:4;27996:131;:::i;:::-;27988:139;;27715:419;;;:::o;28140:221::-;28280:34;28276:1;28268:6;28264:14;28257:58;28349:4;28344:2;28336:6;28332:15;28325:29;28140:221;:::o;28367:366::-;28509:3;28530:67;28594:2;28589:3;28530:67;:::i;:::-;28523:74;;28606:93;28695:3;28606:93;:::i;:::-;28724:2;28719:3;28715:12;28708:19;;28367:366;;;:::o;28739:419::-;28905:4;28943:2;28932:9;28928:18;28920:26;;28992:9;28986:4;28982:20;28978:1;28967:9;28963:17;28956:47;29020:131;29146:4;29020:131;:::i;:::-;29012:139;;28739:419;;;:::o;29164:188::-;29203:4;29223:19;29240:1;29223:19;:::i;:::-;29218:24;;29256:19;29273:1;29256:19;:::i;:::-;29251:24;;29294:1;29291;29288:8;29285:34;;;29299:18;;:::i;:::-;29285:34;29344:1;29341;29337:9;29329:17;;29164:188;;;;:::o;29358:233::-;29397:3;29420:24;29438:5;29420:24;:::i;:::-;29411:33;;29466:66;29459:5;29456:77;29453:103;;;29536:18;;:::i;:::-;29453:103;29583:1;29576:5;29572:13;29565:20;;29358:233;;;:::o;29597:229::-;29737:34;29733:1;29725:6;29721:14;29714:58;29806:12;29801:2;29793:6;29789:15;29782:37;29597:229;:::o;29832:366::-;29974:3;29995:67;30059:2;30054:3;29995:67;:::i;:::-;29988:74;;30071:93;30160:3;30071:93;:::i;:::-;30189:2;30184:3;30180:12;30173:19;;29832:366;;;:::o;30204:419::-;30370:4;30408:2;30397:9;30393:18;30385:26;;30457:9;30451:4;30447:20;30443:1;30432:9;30428:17;30421:47;30485:131;30611:4;30485:131;:::i;:::-;30477:139;;30204:419;;;:::o;30629:175::-;30769:27;30765:1;30757:6;30753:14;30746:51;30629:175;:::o;30810:366::-;30952:3;30973:67;31037:2;31032:3;30973:67;:::i;:::-;30966:74;;31049:93;31138:3;31049:93;:::i;:::-;31167:2;31162:3;31158:12;31151:19;;30810:366;;;:::o;31182:419::-;31348:4;31386:2;31375:9;31371:18;31363:26;;31435:9;31429:4;31425:20;31421:1;31410:9;31406:17;31399:47;31463:131;31589:4;31463:131;:::i;:::-;31455:139;;31182:419;;;:::o;31607:234::-;31747:34;31743:1;31735:6;31731:14;31724:58;31816:17;31811:2;31803:6;31799:15;31792:42;31607:234;:::o;31847:366::-;31989:3;32010:67;32074:2;32069:3;32010:67;:::i;:::-;32003:74;;32086:93;32175:3;32086:93;:::i;:::-;32204:2;32199:3;32195:12;32188:19;;31847:366;;;:::o;32219:419::-;32385:4;32423:2;32412:9;32408:18;32400:26;;32472:9;32466:4;32462:20;32458:1;32447:9;32443:17;32436:47;32500:131;32626:4;32500:131;:::i;:::-;32492:139;;32219:419;;;:::o;32644:148::-;32746:11;32783:3;32768:18;;32644:148;;;;:::o;32798:377::-;32904:3;32932:39;32965:5;32932:39;:::i;:::-;32987:89;33069:6;33064:3;32987:89;:::i;:::-;32980:96;;33085:52;33130:6;33125:3;33118:4;33111:5;33107:16;33085:52;:::i;:::-;33162:6;33157:3;33153:16;33146:23;;32908:267;32798:377;;;;:::o;33181:435::-;33361:3;33383:95;33474:3;33465:6;33383:95;:::i;:::-;33376:102;;33495:95;33586:3;33577:6;33495:95;:::i;:::-;33488:102;;33607:3;33600:10;;33181:435;;;;;:::o;33622:225::-;33762:34;33758:1;33750:6;33746:14;33739:58;33831:8;33826:2;33818:6;33814:15;33807:33;33622:225;:::o;33853:366::-;33995:3;34016:67;34080:2;34075:3;34016:67;:::i;:::-;34009:74;;34092:93;34181:3;34092:93;:::i;:::-;34210:2;34205:3;34201:12;34194:19;;33853:366;;;:::o;34225:419::-;34391:4;34429:2;34418:9;34414:18;34406:26;;34478:9;34472:4;34468:20;34464:1;34453:9;34449:17;34442:47;34506:131;34632:4;34506:131;:::i;:::-;34498:139;;34225:419;;;:::o;34650:173::-;34790:25;34786:1;34778:6;34774:14;34767:49;34650:173;:::o;34829:366::-;34971:3;34992:67;35056:2;35051:3;34992:67;:::i;:::-;34985:74;;35068:93;35157:3;35068:93;:::i;:::-;35186:2;35181:3;35177:12;35170:19;;34829:366;;;:::o;35201:419::-;35367:4;35405:2;35394:9;35390:18;35382:26;;35454:9;35448:4;35444:20;35440:1;35429:9;35425:17;35418:47;35482:131;35608:4;35482:131;:::i;:::-;35474:139;;35201:419;;;:::o;35626:163::-;35766:15;35762:1;35754:6;35750:14;35743:39;35626:163;:::o;35795:366::-;35937:3;35958:67;36022:2;36017:3;35958:67;:::i;:::-;35951:74;;36034:93;36123:3;36034:93;:::i;:::-;36152:2;36147:3;36143:12;36136:19;;35795:366;;;:::o;36167:419::-;36333:4;36371:2;36360:9;36356:18;36348:26;;36420:9;36414:4;36410:20;36406:1;36395:9;36391:17;36384:47;36448:131;36574:4;36448:131;:::i;:::-;36440:139;;36167:419;;;:::o;36592:230::-;36732:34;36728:1;36720:6;36716:14;36709:58;36801:13;36796:2;36788:6;36784:15;36777:38;36592:230;:::o;36828:366::-;36970:3;36991:67;37055:2;37050:3;36991:67;:::i;:::-;36984:74;;37067:93;37156:3;37067:93;:::i;:::-;37185:2;37180:3;37176:12;37169:19;;36828:366;;;:::o;37200:419::-;37366:4;37404:2;37393:9;37389:18;37381:26;;37453:9;37447:4;37443:20;37439:1;37428:9;37424:17;37417:47;37481:131;37607:4;37481:131;:::i;:::-;37473:139;;37200:419;;;:::o;37625:169::-;37765:21;37761:1;37753:6;37749:14;37742:45;37625:169;:::o;37800:366::-;37942:3;37963:67;38027:2;38022:3;37963:67;:::i;:::-;37956:74;;38039:93;38128:3;38039:93;:::i;:::-;38157:2;38152:3;38148:12;38141:19;;37800:366;;;:::o;38172:419::-;38338:4;38376:2;38365:9;38361:18;38353:26;;38425:9;38419:4;38415:20;38411:1;38400:9;38396:17;38389:47;38453:131;38579:4;38453:131;:::i;:::-;38445:139;;38172:419;;;:::o;38597:174::-;38737:26;38733:1;38725:6;38721:14;38714:50;38597:174;:::o;38777:366::-;38919:3;38940:67;39004:2;38999:3;38940:67;:::i;:::-;38933:74;;39016:93;39105:3;39016:93;:::i;:::-;39134:2;39129:3;39125:12;39118:19;;38777:366;;;:::o;39149:419::-;39315:4;39353:2;39342:9;39338:18;39330:26;;39402:9;39396:4;39392:20;39388:1;39377:9;39373:17;39366:47;39430:131;39556:4;39430:131;:::i;:::-;39422:139;;39149:419;;;:::o;39574:143::-;39631:5;39662:6;39656:13;39647:22;;39678:33;39705:5;39678:33;:::i;:::-;39574:143;;;;:::o;39723:351::-;39793:6;39842:2;39830:9;39821:7;39817:23;39813:32;39810:119;;;39848:79;;:::i;:::-;39810:119;39968:1;39993:64;40049:7;40040:6;40029:9;40025:22;39993:64;:::i;:::-;39983:74;;39939:128;39723:351;;;;:::o;40080:228::-;40220:34;40216:1;40208:6;40204:14;40197:58;40289:11;40284:2;40276:6;40272:15;40265:36;40080:228;:::o;40314:366::-;40456:3;40477:67;40541:2;40536:3;40477:67;:::i;:::-;40470:74;;40553:93;40642:3;40553:93;:::i;:::-;40671:2;40666:3;40662:12;40655:19;;40314:366;;;:::o;40686:419::-;40852:4;40890:2;40879:9;40875:18;40867:26;;40939:9;40933:4;40929:20;40925:1;40914:9;40910:17;40903:47;40967:131;41093:4;40967:131;:::i;:::-;40959:139;;40686:419;;;:::o;41111:231::-;41251:34;41247:1;41239:6;41235:14;41228:58;41320:14;41315:2;41307:6;41303:15;41296:39;41111:231;:::o;41348:366::-;41490:3;41511:67;41575:2;41570:3;41511:67;:::i;:::-;41504:74;;41587:93;41676:3;41587:93;:::i;:::-;41705:2;41700:3;41696:12;41689:19;;41348:366;;;:::o;41720:419::-;41886:4;41924:2;41913:9;41909:18;41901:26;;41973:9;41967:4;41963:20;41959:1;41948:9;41944:17;41937:47;42001:131;42127:4;42001:131;:::i;:::-;41993:139;;41720:419;;;:::o;42145:228::-;42285:34;42281:1;42273:6;42269:14;42262:58;42354:11;42349:2;42341:6;42337:15;42330:36;42145:228;:::o;42379:366::-;42521:3;42542:67;42606:2;42601:3;42542:67;:::i;:::-;42535:74;;42618:93;42707:3;42618:93;:::i;:::-;42736:2;42731:3;42727:12;42720:19;;42379:366;;;:::o;42751:419::-;42917:4;42955:2;42944:9;42940:18;42932:26;;43004:9;42998:4;42994:20;42990:1;42979:9;42975:17;42968:47;43032:131;43158:4;43032:131;:::i;:::-;43024:139;;42751:419;;;:::o;43176:223::-;43316:34;43312:1;43304:6;43300:14;43293:58;43385:6;43380:2;43372:6;43368:15;43361:31;43176:223;:::o;43405:366::-;43547:3;43568:67;43632:2;43627:3;43568:67;:::i;:::-;43561:74;;43644:93;43733:3;43644:93;:::i;:::-;43762:2;43757:3;43753:12;43746:19;;43405:366;;;:::o;43777:419::-;43943:4;43981:2;43970:9;43966:18;43958:26;;44030:9;44024:4;44020:20;44016:1;44005:9;44001:17;43994:47;44058:131;44184:4;44058:131;:::i;:::-;44050:139;;43777:419;;;:::o;44202:191::-;44242:4;44262:20;44280:1;44262:20;:::i;:::-;44257:25;;44296:20;44314:1;44296:20;:::i;:::-;44291:25;;44335:1;44332;44329:8;44326:34;;;44340:18;;:::i;:::-;44326:34;44385:1;44382;44378:9;44370:17;;44202:191;;;;:::o;44399:237::-;44539:34;44535:1;44527:6;44523:14;44516:58;44608:20;44603:2;44595:6;44591:15;44584:45;44399:237;:::o;44642:366::-;44784:3;44805:67;44869:2;44864:3;44805:67;:::i;:::-;44798:74;;44881:93;44970:3;44881:93;:::i;:::-;44999:2;44994:3;44990:12;44983:19;;44642:366;;;:::o;45014:419::-;45180:4;45218:2;45207:9;45203:18;45195:26;;45267:9;45261:4;45257:20;45253:1;45242:9;45238:17;45231:47;45295:131;45421:4;45295:131;:::i;:::-;45287:139;;45014:419;;;:::o;45439:180::-;45487:77;45484:1;45477:88;45584:4;45581:1;45574:15;45608:4;45605:1;45598:15;45625:185;45665:1;45682:20;45700:1;45682:20;:::i;:::-;45677:25;;45716:20;45734:1;45716:20;:::i;:::-;45711:25;;45755:1;45745:35;;45760:18;;:::i;:::-;45745:35;45802:1;45799;45795:9;45790:14;;45625:185;;;;:::o;45816:176::-;45848:1;45865:20;45883:1;45865:20;:::i;:::-;45860:25;;45899:20;45917:1;45899:20;:::i;:::-;45894:25;;45938:1;45928:35;;45943:18;;:::i;:::-;45928:35;45984:1;45981;45977:9;45972:14;;45816:176;;;;:::o;45998:98::-;46049:6;46083:5;46077:12;46067:22;;45998:98;;;:::o;46102:168::-;46185:11;46219:6;46214:3;46207:19;46259:4;46254:3;46250:14;46235:29;;46102:168;;;;:::o;46276:360::-;46362:3;46390:38;46422:5;46390:38;:::i;:::-;46444:70;46507:6;46502:3;46444:70;:::i;:::-;46437:77;;46523:52;46568:6;46563:3;46556:4;46549:5;46545:16;46523:52;:::i;:::-;46600:29;46622:6;46600:29;:::i;:::-;46595:3;46591:39;46584:46;;46366:270;46276:360;;;;:::o;46642:640::-;46837:4;46875:3;46864:9;46860:19;46852:27;;46889:71;46957:1;46946:9;46942:17;46933:6;46889:71;:::i;:::-;46970:72;47038:2;47027:9;47023:18;47014:6;46970:72;:::i;:::-;47052;47120:2;47109:9;47105:18;47096:6;47052:72;:::i;:::-;47171:9;47165:4;47161:20;47156:2;47145:9;47141:18;47134:48;47199:76;47270:4;47261:6;47199:76;:::i;:::-;47191:84;;46642:640;;;;;;;:::o;47288:141::-;47344:5;47375:6;47369:13;47360:22;;47391:32;47417:5;47391:32;:::i;:::-;47288:141;;;;:::o;47435:349::-;47504:6;47553:2;47541:9;47532:7;47528:23;47524:32;47521:119;;;47559:79;;:::i;:::-;47521:119;47679:1;47704:63;47759:7;47750:6;47739:9;47735:22;47704:63;:::i;:::-;47694:73;;47650:127;47435:349;;;;:::o;47790:180::-;47838:77;47835:1;47828:88;47935:4;47932:1;47925:15;47959:4;47956:1;47949:15;47976:182;48116:34;48112:1;48104:6;48100:14;48093:58;47976:182;:::o;48164:366::-;48306:3;48327:67;48391:2;48386:3;48327:67;:::i;:::-;48320:74;;48403:93;48492:3;48403:93;:::i;:::-;48521:2;48516:3;48512:12;48505:19;;48164:366;;;:::o;48536:419::-;48702:4;48740:2;48729:9;48725:18;48717:26;;48789:9;48783:4;48779:20;48775:1;48764:9;48760:17;48753:47;48817:131;48943:4;48817:131;:::i;:::-;48809:139;;48536:419;;;:::o;48961:178::-;49101:30;49097:1;49089:6;49085:14;49078:54;48961:178;:::o;49145:366::-;49287:3;49308:67;49372:2;49367:3;49308:67;:::i;:::-;49301:74;;49384:93;49473:3;49384:93;:::i;:::-;49502:2;49497:3;49493:12;49486:19;;49145:366;;;:::o;49517:419::-;49683:4;49721:2;49710:9;49706:18;49698:26;;49770:9;49764:4;49760:20;49756:1;49745:9;49741:17;49734:47;49798:131;49924:4;49798:131;:::i;:::-;49790:139;;49517:419;;;:::o

Swarm Source

ipfs://d702eb7ea932143b3f8d68b28239364f7b11a076203f53ce0bbb3b60437b32a3
Loading...
Loading
Loading...
Loading
[ 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.