Token REKT DOMAIN

 

Overview ERC-721

Total Supply:
0 REKT

Holders:
3,461 addresses
 
Filtered by Token Holder (Polygonscan: Donate)

Balance
8 REKT
0x71c7656ec7ab88b098defb751b7401b5f6d8976f
Loading
[ Download CSV Export  ] 
Loading
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
REKTDomain

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-10-04
*/

//      ___           ___           ___           ___     
//     /\  \         /\  \         /\__\         /\  \    
//    /::\  \       /::\  \       /:/  /         \:\  \   
//   /:/\:\  \     /:/\:\  \     /:/__/           \:\  \  
//  /::\~\:\  \   /::\~\:\  \   /::\__\____       /::\  \ 
// /:/\:\ \:\__\ /:/\:\ \:\__\ /:/\:::::\__\     /:/\:\__\
// \/_|::\/:/  / \:\~\:\ \/__/ \/_|:|~~|~       /:/  \/__/
//    |:|::/  /   \:\ \:\__\      |:|  |       /:/  /     
//    |:|\/__/     \:\ \/__/      |:|  |       \/__/      
//    |:|  |        \:\__\        |:|  |                  
//     \|__|         \/__/         \|__|                  
//
//
// www.REKT.al
//
// REKT DOMAINS
//
// your everlasting decentralized domain name
//
// register once and hold forever, no renewal fees, no timeout
//
// each domain is tradeable as an erc721 NFT
//
// each domain can be reached via classic web www.example.REKT.AL
//
// create/mint a domain by calling DOMAINedit(); with 10 matic
//
// if you already own the domain you can call DOMAINedit(); with 0 ether to update its url
//
//
// get a domains URL by calling DOMAINurl(); with domain name
// get a domains owner by calling DOMAINowner(); with domain name
// get a domain name by calling DOMAIN(); with erc721 tokenId
//
//
















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



pragma solidity ^0.8.0;

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

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

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

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

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

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



pragma solidity ^0.8.0;

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

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

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



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/token/ERC721/IERC721Receiver.sol



pragma solidity ^0.8.0;

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

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



pragma solidity ^0.8.0;

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




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



pragma solidity ^0.8.0;


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





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



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/extensions/IERC721Metadata.sol



pragma solidity ^0.8.0;


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

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

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





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



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) internal _owners;

    // Mapping owner address to token count
    mapping(address => uint256) internal _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: rektdomain.sol

pragma solidity ^0.8.0;



//      ___           ___           ___           ___     
//     /\  \         /\  \         /\__\         /\  \    
//    /::\  \       /::\  \       /:/  /         \:\  \   
//   /:/\:\  \     /:/\:\  \     /:/__/           \:\  \  
//  /::\~\:\  \   /::\~\:\  \   /::\__\____       /::\  \ 
// /:/\:\ \:\__\ /:/\:\ \:\__\ /:/\:::::\__\     /:/\:\__\
// \/_|::\/:/  / \:\~\:\ \/__/ \/_|:|~~|~       /:/  \/__/
//    |:|::/  /   \:\ \:\__\      |:|  |       /:/  /     
//    |:|\/__/     \:\ \/__/      |:|  |       \/__/      
//    |:|  |        \:\__\        |:|  |                  
//     \|__|         \/__/         \|__|                  
//
//
// www.REKT.al
//
// REKT DOMAINS
//
// your everlasting decentralized domain name
//
// register once and hold forever, no renewal fees, no timeout
//
// each domain is tradeable as an erc721 NFT
//
// each domain can be reached via classic web www.example.REKT.AL
//
// create/mint a domain by calling DOMAINedit(); with 10 matic
//
// if you already own the domain you can call DOMAINedit(); with 0 ether to update its url
//
//
// get a domains URL by calling DOMAINurl(); with domain name
// get a domains owner by calling DOMAINowner(); with domain name
// get a domain name by calling DOMAIN(); with erc721 tokenId
//
//


contract REKTDomain is ERC721 {
    
      address donation = 0x719D5F7725a8A8BC92C31552D6e057759Dc935B8;

      mapping(uint256 => string) public urls;
      mapping(uint256 => string) public domain;
      

  
      string public JSONURI ="http://www.rekt.al/domain/?";






function DOMAINedit(string memory _domain, string memory _url) public payable returns (uint256) {

        bool doit = false;

       payable(donation).transfer(msg.value);



        uint256 domhash = uint256(keccak256(abi.encodePacked(_domain)));

        if(_owners[domhash]==address(0)){         if(msg.value >= 1e18){ doit = true;} } else { if(_owners[domhash] == msg.sender){   doit = true;} }

        if(doit){


        urls[domhash] = _url; 
        domain[domhash] = _domain; 



        _balances[msg.sender] += 1;
        _owners[domhash] = msg.sender;

        emit Transfer(address(0), msg.sender, domhash);      
      
      return domhash;

        }

    }



    







function DOMAINurl(string memory _domain) public view returns (string memory) {
        uint256 domhash = uint256(keccak256(abi.encodePacked(_domain)));
        return urls[domhash];
    }

function DOMAINowner(string memory _domain) public view returns (address) {
        uint256 domhash = uint256(keccak256(abi.encodePacked(_domain)));
        return _owners[domhash];
    }


function DOMAIN(uint256 tokenid) public view returns (string memory) {
        return domain[tokenid];
    }







  function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
            require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

                return string(abi.encodePacked(JSONURI, domain[tokenId]));
        }






  constructor()  ERC721("REKT DOMAIN", "REKT") {}




    
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"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":"uint256","name":"tokenid","type":"uint256"}],"name":"DOMAIN","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_domain","type":"string"},{"internalType":"string","name":"_url","type":"string"}],"name":"DOMAINedit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"string","name":"_domain","type":"string"}],"name":"DOMAINowner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_domain","type":"string"}],"name":"DOMAINurl","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"JSONURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"domain","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"uint256","name":"","type":"uint256"}],"name":"urls","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]

608060405273719d5f7725a8a8bc92c31552d6e057759dc935b8600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040518060400160405280601b81526020017f687474703a2f2f7777772e72656b742e616c2f646f6d61696e2f3f000000000081525060099080519060200190620000a69291906200015b565b50348015620000b457600080fd5b506040518060400160405280600b81526020017f52454b5420444f4d41494e0000000000000000000000000000000000000000008152506040518060400160405280600481526020017f52454b54000000000000000000000000000000000000000000000000000000008152508160009080519060200190620001399291906200015b565b508060019080519060200190620001529291906200015b565b50505062000270565b82805462000169906200020b565b90600052602060002090601f0160209004810192826200018d5760008555620001d9565b82601f10620001a857805160ff1916838001178555620001d9565b82800160010185558215620001d9579182015b82811115620001d8578251825591602001919060010190620001bb565b5b509050620001e89190620001ec565b5090565b5b8082111562000207576000816000905550600101620001ed565b5090565b600060028204905060018216806200022457607f821691505b602082108114156200023b576200023a62000241565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b612d0b80620002806000396000f3fe60806040526004361061011f5760003560e01c8063796676be116100a0578063b88d4fde11610064578063b88d4fde14610436578063bc29387f1461045f578063c00ec1f41461049c578063c87b56dd146104c7578063e985e9c5146105045761011f565b8063796676be1461032b57806395d89b4114610368578063a22cb46514610393578063a3f54110146103bc578063b4210e42146103f95761011f565b806327b35ed6116100e757806327b35ed61461021b57806342842e0e146102585780635139ca9e146102815780636352211e146102b157806370a08231146102ee5761011f565b806301ffc9a71461012457806306fdde0314610161578063081812fc1461018c578063095ea7b3146101c957806323b872dd146101f2575b600080fd5b34801561013057600080fd5b5061014b60048036038101906101469190611f02565b610541565b60405161015891906123df565b60405180910390f35b34801561016d57600080fd5b50610176610623565b60405161018391906123fa565b60405180910390f35b34801561019857600080fd5b506101b360048036038101906101ae919061201d565b6106b5565b6040516101c09190612378565b60405180910390f35b3480156101d557600080fd5b506101f060048036038101906101eb9190611ec2565b61073a565b005b3480156101fe57600080fd5b5061021960048036038101906102149190611dac565b610852565b005b34801561022757600080fd5b50610242600480360381019061023d919061201d565b6108b2565b60405161024f91906123fa565b60405180910390f35b34801561026457600080fd5b5061027f600480360381019061027a9190611dac565b610957565b005b61029b60048036038101906102969190611fa5565b610977565b6040516102a8919061259c565b60405180910390f35b3480156102bd57600080fd5b506102d860048036038101906102d3919061201d565b610c71565b6040516102e59190612378565b60405180910390f35b3480156102fa57600080fd5b5061031560048036038101906103109190611d3f565b610d23565b604051610322919061259c565b60405180910390f35b34801561033757600080fd5b50610352600480360381019061034d919061201d565b610ddb565b60405161035f91906123fa565b60405180910390f35b34801561037457600080fd5b5061037d610e7b565b60405161038a91906123fa565b60405180910390f35b34801561039f57600080fd5b506103ba60048036038101906103b59190611e82565b610f0d565b005b3480156103c857600080fd5b506103e360048036038101906103de9190611f5c565b61108e565b6040516103f091906123fa565b60405180910390f35b34801561040557600080fd5b50610420600480360381019061041b9190611f5c565b611162565b60405161042d9190612378565b60405180910390f35b34801561044257600080fd5b5061045d60048036038101906104589190611dff565b6111cd565b005b34801561046b57600080fd5b506104866004803603810190610481919061201d565b61122f565b60405161049391906123fa565b60405180910390f35b3480156104a857600080fd5b506104b16112cf565b6040516104be91906123fa565b60405180910390f35b3480156104d357600080fd5b506104ee60048036038101906104e9919061201d565b61135d565b6040516104fb91906123fa565b60405180910390f35b34801561051057600080fd5b5061052b60048036038101906105269190611d6c565b6113e3565b60405161053891906123df565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061060c57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061061c575061061b82611477565b5b9050919050565b606060008054610632906127d6565b80601f016020809104026020016040519081016040528092919081815260200182805461065e906127d6565b80156106ab5780601f10610680576101008083540402835291602001916106ab565b820191906000526020600020905b81548152906001019060200180831161068e57829003601f168201915b5050505050905090565b60006106c0826114e1565b6106ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f6906124fc565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061074582610c71565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156107b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ad9061255c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166107d561154d565b73ffffffffffffffffffffffffffffffffffffffff1614806108045750610803816107fe61154d565b6113e3565b5b610843576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083a9061249c565b60405180910390fd5b61084d8383611555565b505050565b61086361085d61154d565b8261160e565b6108a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108999061257c565b60405180910390fd5b6108ad8383836116ec565b505050565b60606008600083815260200190815260200160002080546108d2906127d6565b80601f01602080910402602001604051908101604052809291908181526020018280546108fe906127d6565b801561094b5780601f106109205761010080835404028352916020019161094b565b820191906000526020600020905b81548152906001019060200180831161092e57829003601f168201915b50505050509050919050565b610972838383604051806020016040528060008152506111cd565b505050565b60008060009050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f193505050501580156109e6573d6000803e3d6000fd5b506000846040516020016109fa919061233d565b6040516020818303038152906040528051906020012060001c9050600073ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610a9657670de0b6b3a76400003410610a9157600191505b610b03565b3373ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610b0257600191505b5b8115610c685783600760008381526020019081526020016000209080519060200190610b30929190611b53565b5084600860008381526020019081526020016000209080519060200190610b58929190611b53565b506001600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610ba99190612696565b92505081905550336002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550803373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48092505050610c6b565b50505b92915050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d11906124dc565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8b906124bc565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60076020528060005260406000206000915090508054610dfa906127d6565b80601f0160208091040260200160405190810160405280929190818152602001828054610e26906127d6565b8015610e735780601f10610e4857610100808354040283529160200191610e73565b820191906000526020600020905b815481529060010190602001808311610e5657829003601f168201915b505050505081565b606060018054610e8a906127d6565b80601f0160208091040260200160405190810160405280929190818152602001828054610eb6906127d6565b8015610f035780601f10610ed857610100808354040283529160200191610f03565b820191906000526020600020905b815481529060010190602001808311610ee657829003601f168201915b5050505050905090565b610f1561154d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7a9061245c565b60405180910390fd5b8060056000610f9061154d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661103d61154d565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161108291906123df565b60405180910390a35050565b60606000826040516020016110a3919061233d565b6040516020818303038152906040528051906020012060001c90506007600082815260200190815260200160002080546110dc906127d6565b80601f0160208091040260200160405190810160405280929190818152602001828054611108906127d6565b80156111555780601f1061112a57610100808354040283529160200191611155565b820191906000526020600020905b81548152906001019060200180831161113857829003601f168201915b5050505050915050919050565b60008082604051602001611176919061233d565b6040516020818303038152906040528051906020012060001c90506002600082815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915050919050565b6111de6111d861154d565b8361160e565b61121d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112149061257c565b60405180910390fd5b61122984848484611948565b50505050565b6008602052806000526040600020600091509050805461124e906127d6565b80601f016020809104026020016040519081016040528092919081815260200182805461127a906127d6565b80156112c75780601f1061129c576101008083540402835291602001916112c7565b820191906000526020600020905b8154815290600101906020018083116112aa57829003601f168201915b505050505081565b600980546112dc906127d6565b80601f0160208091040260200160405190810160405280929190818152602001828054611308906127d6565b80156113555780601f1061132a57610100808354040283529160200191611355565b820191906000526020600020905b81548152906001019060200180831161133857829003601f168201915b505050505081565b6060611368826114e1565b6113a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139e9061253c565b60405180910390fd5b6009600860008481526020019081526020016000206040516020016113cd929190612354565b6040516020818303038152906040529050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166115c883610c71565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611619826114e1565b611658576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164f9061247c565b60405180910390fd5b600061166383610c71565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806116d257508373ffffffffffffffffffffffffffffffffffffffff166116ba846106b5565b73ffffffffffffffffffffffffffffffffffffffff16145b806116e357506116e281856113e3565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661170c82610c71565b73ffffffffffffffffffffffffffffffffffffffff1614611762576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117599061251c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c99061243c565b60405180910390fd5b6117dd8383836119a4565b6117e8600082611555565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461183891906126ec565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461188f9190612696565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6119538484846116ec565b61195f848484846119a9565b61199e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119959061241c565b60405180910390fd5b50505050565b505050565b60006119ca8473ffffffffffffffffffffffffffffffffffffffff16611b40565b15611b33578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026119f361154d565b8786866040518563ffffffff1660e01b8152600401611a159493929190612393565b602060405180830381600087803b158015611a2f57600080fd5b505af1925050508015611a6057506040513d601f19601f82011682018060405250810190611a5d9190611f2f565b60015b611ae3573d8060008114611a90576040519150601f19603f3d011682016040523d82523d6000602084013e611a95565b606091505b50600081511415611adb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad29061241c565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611b38565b600190505b949350505050565b600080823b905060008111915050919050565b828054611b5f906127d6565b90600052602060002090601f016020900481019282611b815760008555611bc8565b82601f10611b9a57805160ff1916838001178555611bc8565b82800160010185558215611bc8579182015b82811115611bc7578251825591602001919060010190611bac565b5b509050611bd59190611bd9565b5090565b5b80821115611bf2576000816000905550600101611bda565b5090565b6000611c09611c04846125dc565b6125b7565b905082815260208101848484011115611c2557611c246128cb565b5b611c30848285612794565b509392505050565b6000611c4b611c468461260d565b6125b7565b905082815260208101848484011115611c6757611c666128cb565b5b611c72848285612794565b509392505050565b600081359050611c8981612c79565b92915050565b600081359050611c9e81612c90565b92915050565b600081359050611cb381612ca7565b92915050565b600081519050611cc881612ca7565b92915050565b600082601f830112611ce357611ce26128c6565b5b8135611cf3848260208601611bf6565b91505092915050565b600082601f830112611d1157611d106128c6565b5b8135611d21848260208601611c38565b91505092915050565b600081359050611d3981612cbe565b92915050565b600060208284031215611d5557611d546128d5565b5b6000611d6384828501611c7a565b91505092915050565b60008060408385031215611d8357611d826128d5565b5b6000611d9185828601611c7a565b9250506020611da285828601611c7a565b9150509250929050565b600080600060608486031215611dc557611dc46128d5565b5b6000611dd386828701611c7a565b9350506020611de486828701611c7a565b9250506040611df586828701611d2a565b9150509250925092565b60008060008060808587031215611e1957611e186128d5565b5b6000611e2787828801611c7a565b9450506020611e3887828801611c7a565b9350506040611e4987828801611d2a565b925050606085013567ffffffffffffffff811115611e6a57611e696128d0565b5b611e7687828801611cce565b91505092959194509250565b60008060408385031215611e9957611e986128d5565b5b6000611ea785828601611c7a565b9250506020611eb885828601611c8f565b9150509250929050565b60008060408385031215611ed957611ed86128d5565b5b6000611ee785828601611c7a565b9250506020611ef885828601611d2a565b9150509250929050565b600060208284031215611f1857611f176128d5565b5b6000611f2684828501611ca4565b91505092915050565b600060208284031215611f4557611f446128d5565b5b6000611f5384828501611cb9565b91505092915050565b600060208284031215611f7257611f716128d5565b5b600082013567ffffffffffffffff811115611f9057611f8f6128d0565b5b611f9c84828501611cfc565b91505092915050565b60008060408385031215611fbc57611fbb6128d5565b5b600083013567ffffffffffffffff811115611fda57611fd96128d0565b5b611fe685828601611cfc565b925050602083013567ffffffffffffffff811115612007576120066128d0565b5b61201385828601611cfc565b9150509250929050565b600060208284031215612033576120326128d5565b5b600061204184828501611d2a565b91505092915050565b61205381612720565b82525050565b61206281612732565b82525050565b600061207382612653565b61207d8185612669565b935061208d8185602086016127a3565b612096816128da565b840191505092915050565b60006120ac8261265e565b6120b6818561267a565b93506120c68185602086016127a3565b6120cf816128da565b840191505092915050565b60006120e58261265e565b6120ef818561268b565b93506120ff8185602086016127a3565b80840191505092915050565b60008154612118816127d6565b612122818661268b565b9450600182166000811461213d576001811461214e57612181565b60ff19831686528186019350612181565b6121578561263e565b60005b838110156121795781548189015260018201915060208101905061215a565b838801955050505b50505092915050565b600061219760328361267a565b91506121a2826128eb565b604082019050919050565b60006121ba60248361267a565b91506121c58261293a565b604082019050919050565b60006121dd60198361267a565b91506121e882612989565b602082019050919050565b6000612200602c8361267a565b915061220b826129b2565b604082019050919050565b600061222360388361267a565b915061222e82612a01565b604082019050919050565b6000612246602a8361267a565b915061225182612a50565b604082019050919050565b600061226960298361267a565b915061227482612a9f565b604082019050919050565b600061228c602c8361267a565b915061229782612aee565b604082019050919050565b60006122af60298361267a565b91506122ba82612b3d565b604082019050919050565b60006122d2602f8361267a565b91506122dd82612b8c565b604082019050919050565b60006122f560218361267a565b915061230082612bdb565b604082019050919050565b600061231860318361267a565b915061232382612c2a565b604082019050919050565b6123378161278a565b82525050565b600061234982846120da565b915081905092915050565b6000612360828561210b565b915061236c828461210b565b91508190509392505050565b600060208201905061238d600083018461204a565b92915050565b60006080820190506123a8600083018761204a565b6123b5602083018661204a565b6123c2604083018561232e565b81810360608301526123d48184612068565b905095945050505050565b60006020820190506123f46000830184612059565b92915050565b6000602082019050818103600083015261241481846120a1565b905092915050565b600060208201905081810360008301526124358161218a565b9050919050565b60006020820190508181036000830152612455816121ad565b9050919050565b60006020820190508181036000830152612475816121d0565b9050919050565b60006020820190508181036000830152612495816121f3565b9050919050565b600060208201905081810360008301526124b581612216565b9050919050565b600060208201905081810360008301526124d581612239565b9050919050565b600060208201905081810360008301526124f58161225c565b9050919050565b600060208201905081810360008301526125158161227f565b9050919050565b60006020820190508181036000830152612535816122a2565b9050919050565b60006020820190508181036000830152612555816122c5565b9050919050565b60006020820190508181036000830152612575816122e8565b9050919050565b600060208201905081810360008301526125958161230b565b9050919050565b60006020820190506125b1600083018461232e565b92915050565b60006125c16125d2565b90506125cd8282612808565b919050565b6000604051905090565b600067ffffffffffffffff8211156125f7576125f6612897565b5b612600826128da565b9050602081019050919050565b600067ffffffffffffffff82111561262857612627612897565b5b612631826128da565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006126a18261278a565b91506126ac8361278a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156126e1576126e0612839565b5b828201905092915050565b60006126f78261278a565b91506127028361278a565b92508282101561271557612714612839565b5b828203905092915050565b600061272b8261276a565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156127c15780820151818401526020810190506127a6565b838111156127d0576000848401525b50505050565b600060028204905060018216806127ee57607f821691505b6020821081141561280257612801612868565b5b50919050565b612811826128da565b810181811067ffffffffffffffff821117156128305761282f612897565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b612c8281612720565b8114612c8d57600080fd5b50565b612c9981612732565b8114612ca457600080fd5b50565b612cb08161273e565b8114612cbb57600080fd5b50565b612cc78161278a565b8114612cd257600080fd5b5056fea26469706673582212202c912216dee4ef8bb9630f2f0ed0b7703345ecffe99ea3ad224099d823d901b164736f6c63430008070033

Deployed ByteCode Sourcemap

35530:1894:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22027:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22972:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24531:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24054:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25421:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36947:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25831:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35824:704;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22666:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22396:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35647:38;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23141:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24824:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36556:191;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36751:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26087:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35694:40;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35757:52;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37075:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25190:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22027:305;22129:4;22181:25;22166:40;;;:11;:40;;;;:105;;;;22238:33;22223:48;;;:11;:48;;;;22166:105;:158;;;;22288:36;22312:11;22288:23;:36::i;:::-;22166:158;22146:178;;22027:305;;;:::o;22972:100::-;23026:13;23059:5;23052:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22972:100;:::o;24531:221::-;24607:7;24635:16;24643:7;24635;:16::i;:::-;24627:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24720:15;:24;24736:7;24720:24;;;;;;;;;;;;;;;;;;;;;24713:31;;24531:221;;;:::o;24054:411::-;24135:13;24151:23;24166:7;24151:14;:23::i;:::-;24135:39;;24199:5;24193:11;;:2;:11;;;;24185:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;24293:5;24277:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;24302:37;24319:5;24326:12;:10;:12::i;:::-;24302:16;:37::i;:::-;24277:62;24255:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;24436:21;24445:2;24449:7;24436:8;:21::i;:::-;24124:341;24054:411;;:::o;25421:339::-;25616:41;25635:12;:10;:12::i;:::-;25649:7;25616:18;:41::i;:::-;25608:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25724:28;25734:4;25740:2;25744:7;25724:9;:28::i;:::-;25421:339;;;:::o;36947:110::-;37001:13;37034:6;:15;37041:7;37034:15;;;;;;;;;;;37027:22;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36947:110;;;:::o;25831:185::-;25969:39;25986:4;25992:2;25996:7;25969:39;;;;;;;;;;;;:16;:39::i;:::-;25831:185;;;:::o;35824:704::-;35911:7;35933:9;35945:5;35933:17;;35970:8;;;;;;;;;;;35962:26;;:37;35989:9;35962:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36016:15;36069:7;36052:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;36042:36;;;;;;36034:45;;36016:63;;36121:1;36095:28;;:7;:16;36103:7;36095:16;;;;;;;;;;;;;;;;;;;;;:28;;;36092:141;;;36150:4;36137:9;:17;36134:36;;36164:4;36157:11;;36134:36;36092:141;;;36203:10;36183:30;;:7;:16;36191:7;36183:16;;;;;;;;;;;;;;;;;;;;;:30;;;36180:51;;;36225:4;36218:11;;36180:51;36092:141;36248:4;36245:274;;;36284:4;36268;:13;36273:7;36268:13;;;;;;;;;;;:20;;;;;;;;;;;;:::i;:::-;;36318:7;36300:6;:15;36307:7;36300:15;;;;;;;;;;;:25;;;;;;;;;;;;:::i;:::-;;36368:1;36343:9;:21;36353:10;36343:21;;;;;;;;;;;;;;;;:26;;;;;;;:::i;:::-;;;;;;;;36399:10;36380:7;:16;36388:7;36380:16;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;36460:7;36448:10;36427:41;;36444:1;36427:41;;;;;;;;;;;;36498:7;36491:14;;;;;;36245:274;35920:608;;35824:704;;;;;:::o;22666:239::-;22738:7;22758:13;22774:7;:16;22782:7;22774:16;;;;;;;;;;;;;;;;;;;;;22758:32;;22826:1;22809:19;;:5;:19;;;;22801:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22892:5;22885:12;;;22666:239;;;:::o;22396:208::-;22468:7;22513:1;22496:19;;:5;:19;;;;22488:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;22580:9;:16;22590:5;22580:16;;;;;;;;;;;;;;;;22573:23;;22396:208;;;:::o;35647:38::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23141:104::-;23197:13;23230:7;23223:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23141:104;:::o;24824:295::-;24939:12;:10;:12::i;:::-;24927:24;;:8;:24;;;;24919:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;25039:8;24994:18;:32;25013:12;:10;:12::i;:::-;24994:32;;;;;;;;;;;;;;;:42;25027:8;24994:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;25092:8;25063:48;;25078:12;:10;:12::i;:::-;25063:48;;;25102:8;25063:48;;;;;;:::i;:::-;;;;;;;;24824:295;;:::o;36556:191::-;36619:13;36645:15;36698:7;36681:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;36671:36;;;;;;36663:45;;36645:63;;36726:4;:13;36731:7;36726:13;;;;;;;;;;;36719:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36556:191;;;:::o;36751:190::-;36816:7;36836:15;36889:7;36872:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;36862:36;;;;;;36854:45;;36836:63;;36917:7;:16;36925:7;36917:16;;;;;;;;;;;;;;;;;;;;;36910:23;;;36751:190;;;:::o;26087:328::-;26262:41;26281:12;:10;:12::i;:::-;26295:7;26262:18;:41::i;:::-;26254:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;26368:39;26382:4;26388:2;26392:7;26401:5;26368:13;:39::i;:::-;26087:328;;;;:::o;35694:40::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;35757:52::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;37075:269::-;37148:13;37186:16;37194:7;37186;:16::i;:::-;37178:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;37306:7;37315:6;:15;37322:7;37315:15;;;;;;;;;;;37289:42;;;;;;;;;:::i;:::-;;;;;;;;;;;;;37275:57;;37075:269;;;:::o;25190:164::-;25287:4;25311:18;:25;25330:5;25311:25;;;;;;;;;;;;;;;:35;25337:8;25311:35;;;;;;;;;;;;;;;;;;;;;;;;;25304:42;;25190:164;;;;:::o;14973:157::-;15058:4;15097:25;15082:40;;;:11;:40;;;;15075:47;;14973:157;;;:::o;27925:127::-;27990:4;28042:1;28014:30;;:7;:16;28022:7;28014:16;;;;;;;;;;;;;;;;;;;;;:30;;;;28007:37;;27925:127;;;:::o;4045:98::-;4098:7;4125:10;4118:17;;4045:98;:::o;31907:174::-;32009:2;31982:15;:24;31998:7;31982:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;32065:7;32061:2;32027:46;;32036:23;32051:7;32036:14;:23::i;:::-;32027:46;;;;;;;;;;;;31907:174;;:::o;28219:348::-;28312:4;28337:16;28345:7;28337;:16::i;:::-;28329:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28413:13;28429:23;28444:7;28429:14;:23::i;:::-;28413:39;;28482:5;28471:16;;:7;:16;;;:51;;;;28515:7;28491:31;;:20;28503:7;28491:11;:20::i;:::-;:31;;;28471:51;:87;;;;28526:32;28543:5;28550:7;28526:16;:32::i;:::-;28471:87;28463:96;;;28219:348;;;;:::o;31211:578::-;31370:4;31343:31;;:23;31358:7;31343:14;:23::i;:::-;:31;;;31335:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;31453:1;31439:16;;:2;:16;;;;31431:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;31509:39;31530:4;31536:2;31540:7;31509:20;:39::i;:::-;31613:29;31630:1;31634:7;31613:8;:29::i;:::-;31674:1;31655:9;:15;31665:4;31655:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;31703:1;31686:9;:13;31696:2;31686:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31734:2;31715:7;:16;31723:7;31715:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31773:7;31769:2;31754:27;;31763:4;31754:27;;;;;;;;;;;;31211:578;;;:::o;27297:315::-;27454:28;27464:4;27470:2;27474:7;27454:9;:28::i;:::-;27501:48;27524:4;27530:2;27534:7;27543:5;27501:22;:48::i;:::-;27493:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;27297:315;;;;:::o;34017:126::-;;;;:::o;32646:799::-;32801:4;32822:15;:2;:13;;;:15::i;:::-;32818:620;;;32874:2;32858:36;;;32895:12;:10;:12::i;:::-;32909:4;32915:7;32924:5;32858:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32854:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33117:1;33100:6;:13;:18;33096:272;;;33143:60;;;;;;;;;;:::i;:::-;;;;;;;;33096:272;33318:6;33312:13;33303:6;33299:2;33295:15;33288:38;32854:529;32991:41;;;32981:51;;;:6;:51;;;;32974:58;;;;;32818:620;33422:4;33415:11;;32646:799;;;;;;;:::o;5025:387::-;5085:4;5293:12;5360:7;5348:20;5340:28;;5403:1;5396:4;:8;5389:15;;;5025:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:119;;;2391:79;;:::i;:::-;2353:119;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2277:329;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:119;;;2743:79;;:::i;:::-;2705:119;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2612:474;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:119;;;3240:79;;:::i;:::-;3202:119;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3092:619;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:120;;;3892:79;;:::i;:::-;3853:120;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:117;;;4476:79;;:::i;:::-;4440:117;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3717:943;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:119;;;4794:79;;:::i;:::-;4756:119;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4666:468;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:119;;;5271:79;;:::i;:::-;5233:119;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5140:474;;;;;:::o;5620:327::-;5678:6;5727:2;5715:9;5706:7;5702:23;5698:32;5695:119;;;5733:79;;:::i;:::-;5695:119;5853:1;5878:52;5922:7;5913:6;5902:9;5898:22;5878:52;:::i;:::-;5868:62;;5824:116;5620:327;;;;:::o;5953:349::-;6022:6;6071:2;6059:9;6050:7;6046:23;6042:32;6039:119;;;6077:79;;:::i;:::-;6039:119;6197:1;6222:63;6277:7;6268:6;6257:9;6253:22;6222:63;:::i;:::-;6212:73;;6168:127;5953:349;;;;:::o;6308:509::-;6377:6;6426:2;6414:9;6405:7;6401:23;6397:32;6394:119;;;6432:79;;:::i;:::-;6394:119;6580:1;6569:9;6565:17;6552:31;6610:18;6602:6;6599:30;6596:117;;;6632:79;;:::i;:::-;6596:117;6737:63;6792:7;6783:6;6772:9;6768:22;6737:63;:::i;:::-;6727:73;;6523:287;6308:509;;;;:::o;6823:834::-;6911:6;6919;6968:2;6956:9;6947:7;6943:23;6939:32;6936:119;;;6974:79;;:::i;:::-;6936:119;7122:1;7111:9;7107:17;7094:31;7152:18;7144:6;7141:30;7138:117;;;7174:79;;:::i;:::-;7138:117;7279:63;7334:7;7325:6;7314:9;7310:22;7279:63;:::i;:::-;7269:73;;7065:287;7419:2;7408:9;7404:18;7391:32;7450:18;7442:6;7439:30;7436:117;;;7472:79;;:::i;:::-;7436:117;7577:63;7632:7;7623:6;7612:9;7608:22;7577:63;:::i;:::-;7567:73;;7362:288;6823:834;;;;;:::o;7663:329::-;7722:6;7771:2;7759:9;7750:7;7746:23;7742:32;7739:119;;;7777:79;;:::i;:::-;7739:119;7897:1;7922:53;7967:7;7958:6;7947:9;7943:22;7922:53;:::i;:::-;7912:63;;7868:117;7663:329;;;;:::o;7998:118::-;8085:24;8103:5;8085:24;:::i;:::-;8080:3;8073:37;7998:118;;:::o;8122:109::-;8203:21;8218:5;8203:21;:::i;:::-;8198:3;8191:34;8122:109;;:::o;8237:360::-;8323:3;8351:38;8383:5;8351:38;:::i;:::-;8405:70;8468:6;8463:3;8405:70;:::i;:::-;8398:77;;8484:52;8529:6;8524:3;8517:4;8510:5;8506:16;8484:52;:::i;:::-;8561:29;8583:6;8561:29;:::i;:::-;8556:3;8552:39;8545:46;;8327:270;8237:360;;;;:::o;8603:364::-;8691:3;8719:39;8752:5;8719:39;:::i;:::-;8774:71;8838:6;8833:3;8774:71;:::i;:::-;8767:78;;8854:52;8899:6;8894:3;8887:4;8880:5;8876:16;8854:52;:::i;:::-;8931:29;8953:6;8931:29;:::i;:::-;8926:3;8922:39;8915:46;;8695:272;8603:364;;;;:::o;8973:377::-;9079:3;9107:39;9140:5;9107:39;:::i;:::-;9162:89;9244:6;9239:3;9162:89;:::i;:::-;9155:96;;9260:52;9305:6;9300:3;9293:4;9286:5;9282:16;9260:52;:::i;:::-;9337:6;9332:3;9328:16;9321:23;;9083:267;8973:377;;;;:::o;9380:845::-;9483:3;9520:5;9514:12;9549:36;9575:9;9549:36;:::i;:::-;9601:89;9683:6;9678:3;9601:89;:::i;:::-;9594:96;;9721:1;9710:9;9706:17;9737:1;9732:137;;;;9883:1;9878:341;;;;9699:520;;9732:137;9816:4;9812:9;9801;9797:25;9792:3;9785:38;9852:6;9847:3;9843:16;9836:23;;9732:137;;9878:341;9945:38;9977:5;9945:38;:::i;:::-;10005:1;10019:154;10033:6;10030:1;10027:13;10019:154;;;10107:7;10101:14;10097:1;10092:3;10088:11;10081:35;10157:1;10148:7;10144:15;10133:26;;10055:4;10052:1;10048:12;10043:17;;10019:154;;;10202:6;10197:3;10193:16;10186:23;;9885:334;;9699:520;;9487:738;;9380:845;;;;:::o;10231:366::-;10373:3;10394:67;10458:2;10453:3;10394:67;:::i;:::-;10387:74;;10470:93;10559:3;10470:93;:::i;:::-;10588:2;10583:3;10579:12;10572:19;;10231:366;;;:::o;10603:::-;10745:3;10766:67;10830:2;10825:3;10766:67;:::i;:::-;10759:74;;10842:93;10931:3;10842:93;:::i;:::-;10960:2;10955:3;10951:12;10944:19;;10603:366;;;:::o;10975:::-;11117:3;11138:67;11202:2;11197:3;11138:67;:::i;:::-;11131:74;;11214:93;11303:3;11214:93;:::i;:::-;11332:2;11327:3;11323:12;11316:19;;10975:366;;;:::o;11347:::-;11489:3;11510:67;11574:2;11569:3;11510:67;:::i;:::-;11503:74;;11586:93;11675:3;11586:93;:::i;:::-;11704:2;11699:3;11695:12;11688:19;;11347:366;;;:::o;11719:::-;11861:3;11882:67;11946:2;11941:3;11882:67;:::i;:::-;11875:74;;11958:93;12047:3;11958:93;:::i;:::-;12076:2;12071:3;12067:12;12060:19;;11719:366;;;:::o;12091:::-;12233:3;12254:67;12318:2;12313:3;12254:67;:::i;:::-;12247:74;;12330:93;12419:3;12330:93;:::i;:::-;12448:2;12443:3;12439:12;12432:19;;12091:366;;;:::o;12463:::-;12605:3;12626:67;12690:2;12685:3;12626:67;:::i;:::-;12619:74;;12702:93;12791:3;12702:93;:::i;:::-;12820:2;12815:3;12811:12;12804:19;;12463:366;;;:::o;12835:::-;12977:3;12998:67;13062:2;13057:3;12998:67;:::i;:::-;12991:74;;13074:93;13163:3;13074:93;:::i;:::-;13192:2;13187:3;13183:12;13176:19;;12835:366;;;:::o;13207:::-;13349:3;13370:67;13434:2;13429:3;13370:67;:::i;:::-;13363:74;;13446:93;13535:3;13446:93;:::i;:::-;13564:2;13559:3;13555:12;13548:19;;13207:366;;;:::o;13579:::-;13721:3;13742:67;13806:2;13801:3;13742:67;:::i;:::-;13735:74;;13818:93;13907:3;13818:93;:::i;:::-;13936:2;13931:3;13927:12;13920:19;;13579:366;;;:::o;13951:::-;14093:3;14114:67;14178:2;14173:3;14114:67;:::i;:::-;14107:74;;14190:93;14279:3;14190:93;:::i;:::-;14308:2;14303:3;14299:12;14292:19;;13951:366;;;:::o;14323:::-;14465:3;14486:67;14550:2;14545:3;14486:67;:::i;:::-;14479:74;;14562:93;14651:3;14562:93;:::i;:::-;14680:2;14675:3;14671:12;14664:19;;14323:366;;;:::o;14695:118::-;14782:24;14800:5;14782:24;:::i;:::-;14777:3;14770:37;14695:118;;:::o;14819:275::-;14951:3;14973:95;15064:3;15055:6;14973:95;:::i;:::-;14966:102;;15085:3;15078:10;;14819:275;;;;:::o;15100:423::-;15274:3;15296:92;15384:3;15375:6;15296:92;:::i;:::-;15289:99;;15405:92;15493:3;15484:6;15405:92;:::i;:::-;15398:99;;15514:3;15507:10;;15100:423;;;;;:::o;15529:222::-;15622:4;15660:2;15649:9;15645:18;15637:26;;15673:71;15741:1;15730:9;15726:17;15717:6;15673:71;:::i;:::-;15529:222;;;;:::o;15757:640::-;15952:4;15990:3;15979:9;15975:19;15967:27;;16004:71;16072:1;16061:9;16057:17;16048:6;16004:71;:::i;:::-;16085:72;16153:2;16142:9;16138:18;16129:6;16085:72;:::i;:::-;16167;16235:2;16224:9;16220:18;16211:6;16167:72;:::i;:::-;16286:9;16280:4;16276:20;16271:2;16260:9;16256:18;16249:48;16314:76;16385:4;16376:6;16314:76;:::i;:::-;16306:84;;15757:640;;;;;;;:::o;16403:210::-;16490:4;16528:2;16517:9;16513:18;16505:26;;16541:65;16603:1;16592:9;16588:17;16579:6;16541:65;:::i;:::-;16403:210;;;;:::o;16619:313::-;16732:4;16770:2;16759:9;16755:18;16747:26;;16819:9;16813:4;16809:20;16805:1;16794:9;16790:17;16783:47;16847:78;16920:4;16911:6;16847:78;:::i;:::-;16839:86;;16619:313;;;;:::o;16938:419::-;17104:4;17142:2;17131:9;17127:18;17119:26;;17191:9;17185:4;17181:20;17177:1;17166:9;17162:17;17155:47;17219:131;17345:4;17219:131;:::i;:::-;17211:139;;16938:419;;;:::o;17363:::-;17529:4;17567:2;17556:9;17552:18;17544:26;;17616:9;17610:4;17606:20;17602:1;17591:9;17587:17;17580:47;17644:131;17770:4;17644:131;:::i;:::-;17636:139;;17363:419;;;:::o;17788:::-;17954:4;17992:2;17981:9;17977:18;17969:26;;18041:9;18035:4;18031:20;18027:1;18016:9;18012:17;18005:47;18069:131;18195:4;18069:131;:::i;:::-;18061:139;;17788:419;;;:::o;18213:::-;18379:4;18417:2;18406:9;18402:18;18394:26;;18466:9;18460:4;18456:20;18452:1;18441:9;18437:17;18430:47;18494:131;18620:4;18494:131;:::i;:::-;18486:139;;18213:419;;;:::o;18638:::-;18804:4;18842:2;18831:9;18827:18;18819:26;;18891:9;18885:4;18881:20;18877:1;18866:9;18862:17;18855:47;18919:131;19045:4;18919:131;:::i;:::-;18911:139;;18638:419;;;:::o;19063:::-;19229:4;19267:2;19256:9;19252:18;19244:26;;19316:9;19310:4;19306:20;19302:1;19291:9;19287:17;19280:47;19344:131;19470:4;19344:131;:::i;:::-;19336:139;;19063:419;;;:::o;19488:::-;19654:4;19692:2;19681:9;19677:18;19669:26;;19741:9;19735:4;19731:20;19727:1;19716:9;19712:17;19705:47;19769:131;19895:4;19769:131;:::i;:::-;19761:139;;19488:419;;;:::o;19913:::-;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:::-;20504:4;20542:2;20531:9;20527:18;20519:26;;20591:9;20585:4;20581:20;20577:1;20566:9;20562:17;20555:47;20619:131;20745:4;20619:131;:::i;:::-;20611:139;;20338:419;;;:::o;20763:::-;20929:4;20967:2;20956:9;20952:18;20944:26;;21016:9;21010:4;21006:20;21002:1;20991:9;20987:17;20980:47;21044:131;21170:4;21044:131;:::i;:::-;21036:139;;20763:419;;;:::o;21188:::-;21354:4;21392:2;21381:9;21377:18;21369:26;;21441:9;21435:4;21431:20;21427:1;21416:9;21412:17;21405:47;21469:131;21595:4;21469:131;:::i;:::-;21461:139;;21188:419;;;:::o;21613:::-;21779:4;21817:2;21806:9;21802:18;21794:26;;21866:9;21860:4;21856:20;21852:1;21841:9;21837:17;21830:47;21894:131;22020:4;21894:131;:::i;:::-;21886:139;;21613:419;;;:::o;22038:222::-;22131:4;22169:2;22158:9;22154:18;22146:26;;22182:71;22250:1;22239:9;22235:17;22226:6;22182:71;:::i;:::-;22038:222;;;;:::o;22266:129::-;22300:6;22327:20;;:::i;:::-;22317:30;;22356:33;22384:4;22376:6;22356:33;:::i;:::-;22266:129;;;:::o;22401:75::-;22434:6;22467:2;22461:9;22451:19;;22401:75;:::o;22482:307::-;22543:4;22633:18;22625:6;22622:30;22619:56;;;22655:18;;:::i;:::-;22619:56;22693:29;22715:6;22693:29;:::i;:::-;22685:37;;22777:4;22771;22767:15;22759:23;;22482:307;;;:::o;22795:308::-;22857:4;22947:18;22939:6;22936:30;22933:56;;;22969:18;;:::i;:::-;22933:56;23007:29;23029:6;23007:29;:::i;:::-;22999:37;;23091:4;23085;23081:15;23073:23;;22795:308;;;:::o;23109:141::-;23158:4;23181:3;23173:11;;23204:3;23201:1;23194:14;23238:4;23235:1;23225:18;23217:26;;23109:141;;;:::o;23256:98::-;23307:6;23341:5;23335:12;23325:22;;23256:98;;;:::o;23360:99::-;23412:6;23446:5;23440:12;23430:22;;23360:99;;;:::o;23465:168::-;23548:11;23582:6;23577:3;23570:19;23622:4;23617:3;23613:14;23598:29;;23465:168;;;;:::o;23639:169::-;23723:11;23757:6;23752:3;23745:19;23797:4;23792:3;23788:14;23773:29;;23639:169;;;;:::o;23814:148::-;23916:11;23953:3;23938:18;;23814:148;;;;:::o;23968:305::-;24008:3;24027:20;24045:1;24027:20;:::i;:::-;24022:25;;24061:20;24079:1;24061:20;:::i;:::-;24056:25;;24215:1;24147:66;24143:74;24140:1;24137:81;24134:107;;;24221:18;;:::i;:::-;24134:107;24265:1;24262;24258:9;24251:16;;23968:305;;;;:::o;24279:191::-;24319:4;24339:20;24357:1;24339:20;:::i;:::-;24334:25;;24373:20;24391:1;24373:20;:::i;:::-;24368:25;;24412:1;24409;24406:8;24403:34;;;24417:18;;:::i;:::-;24403:34;24462:1;24459;24455:9;24447:17;;24279:191;;;;:::o;24476:96::-;24513:7;24542:24;24560:5;24542:24;:::i;:::-;24531:35;;24476:96;;;:::o;24578:90::-;24612:7;24655:5;24648:13;24641:21;24630:32;;24578:90;;;:::o;24674:149::-;24710:7;24750:66;24743:5;24739:78;24728:89;;24674:149;;;:::o;24829:126::-;24866:7;24906:42;24899:5;24895:54;24884:65;;24829:126;;;:::o;24961:77::-;24998:7;25027:5;25016:16;;24961:77;;;:::o;25044:154::-;25128:6;25123:3;25118;25105:30;25190:1;25181:6;25176:3;25172:16;25165:27;25044:154;;;:::o;25204:307::-;25272:1;25282:113;25296:6;25293:1;25290:13;25282:113;;;25381:1;25376:3;25372:11;25366:18;25362:1;25357:3;25353:11;25346:39;25318:2;25315:1;25311:10;25306:15;;25282:113;;;25413:6;25410:1;25407:13;25404:101;;;25493:1;25484:6;25479:3;25475:16;25468:27;25404:101;25253:258;25204:307;;;:::o;25517:320::-;25561:6;25598:1;25592:4;25588:12;25578:22;;25645:1;25639:4;25635:12;25666:18;25656:81;;25722:4;25714:6;25710:17;25700:27;;25656:81;25784:2;25776:6;25773:14;25753:18;25750:38;25747:84;;;25803:18;;:::i;:::-;25747:84;25568:269;25517:320;;;:::o;25843:281::-;25926:27;25948:4;25926:27;:::i;:::-;25918:6;25914:40;26056:6;26044:10;26041:22;26020:18;26008:10;26005:34;26002:62;25999:88;;;26067:18;;:::i;:::-;25999:88;26107:10;26103:2;26096:22;25886:238;25843:281;;:::o;26130:180::-;26178:77;26175:1;26168:88;26275:4;26272:1;26265:15;26299:4;26296:1;26289:15;26316:180;26364:77;26361:1;26354:88;26461:4;26458:1;26451:15;26485:4;26482:1;26475:15;26502:180;26550:77;26547:1;26540:88;26647:4;26644:1;26637:15;26671:4;26668:1;26661:15;26688:117;26797:1;26794;26787:12;26811:117;26920:1;26917;26910:12;26934:117;27043:1;27040;27033:12;27057:117;27166:1;27163;27156:12;27180:102;27221:6;27272:2;27268:7;27263:2;27256:5;27252:14;27248:28;27238:38;;27180:102;;;:::o;27288:237::-;27428:34;27424:1;27416:6;27412:14;27405:58;27497:20;27492:2;27484:6;27480:15;27473:45;27288:237;:::o;27531:223::-;27671:34;27667:1;27659:6;27655:14;27648:58;27740:6;27735:2;27727:6;27723:15;27716:31;27531:223;:::o;27760:175::-;27900:27;27896:1;27888:6;27884:14;27877:51;27760:175;:::o;27941:231::-;28081:34;28077:1;28069:6;28065:14;28058:58;28150:14;28145:2;28137:6;28133:15;28126:39;27941:231;:::o;28178:243::-;28318:34;28314:1;28306:6;28302:14;28295:58;28387:26;28382:2;28374:6;28370:15;28363:51;28178:243;:::o;28427:229::-;28567:34;28563:1;28555:6;28551:14;28544:58;28636:12;28631:2;28623:6;28619:15;28612:37;28427:229;:::o;28662:228::-;28802:34;28798:1;28790:6;28786:14;28779:58;28871:11;28866:2;28858:6;28854:15;28847:36;28662:228;:::o;28896:231::-;29036:34;29032:1;29024:6;29020:14;29013:58;29105:14;29100:2;29092:6;29088:15;29081:39;28896:231;:::o;29133:228::-;29273:34;29269:1;29261:6;29257:14;29250:58;29342:11;29337:2;29329:6;29325:15;29318:36;29133:228;:::o;29367:234::-;29507:34;29503:1;29495:6;29491:14;29484:58;29576:17;29571:2;29563:6;29559:15;29552:42;29367:234;:::o;29607:220::-;29747:34;29743:1;29735:6;29731:14;29724:58;29816:3;29811:2;29803:6;29799:15;29792:28;29607:220;:::o;29833:236::-;29973:34;29969:1;29961:6;29957:14;29950:58;30042:19;30037:2;30029:6;30025:15;30018:44;29833:236;:::o;30075:122::-;30148:24;30166:5;30148:24;:::i;:::-;30141:5;30138:35;30128:63;;30187:1;30184;30177:12;30128:63;30075:122;:::o;30203:116::-;30273:21;30288:5;30273:21;:::i;:::-;30266:5;30263:32;30253:60;;30309:1;30306;30299:12;30253:60;30203:116;:::o;30325:120::-;30397:23;30414:5;30397:23;:::i;:::-;30390:5;30387:34;30377:62;;30435:1;30432;30425:12;30377:62;30325:120;:::o;30451:122::-;30524:24;30542:5;30524:24;:::i;:::-;30517:5;30514:35;30504:63;;30563:1;30560;30553:12;30504:63;30451:122;:::o

Swarm Source

ipfs://2c912216dee4ef8bb9630f2f0ed0b7703345ecffe99ea3ad224099d823d901b1
Loading