ETH Price: $2,626.82 (-0.46%)

Token

NFTaxes (NFT)
 

Overview

Max Total Supply

5 NFT

Holders

1

Total Transfers

-

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
NFTaxes

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 9 of 11: NFTaxes.sol
/// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;

/**

**/

import "./Ownable.sol";
import "./Strings.sol";
import "./ERC1155.sol";

contract NFTaxes is ERC1155, Ownable {
    using Strings for uint256;

    string public baseURI;
    string public name = "NFTaxes";
    string public symbol = "NFT";
    uint256 public currentEdition = 2022;
    uint256 public editionReleaseTimestamp;
    uint256 public price = 0.30 ether;
    uint256 public constant THIRTY_DAYS = 30 days;

    mapping(uint256 => string) internal URIofToken;
    
    constructor() ERC1155(baseURI) {
    }

    function releaseEdition(string memory _uriOfToken) external onlyOwner {
        currentEdition += 1;
        editionReleaseTimestamp = block.timestamp;
        URIofToken[currentEdition] = _uriOfToken;
    }

   function mint(uint256 _quantity) external payable {
        require(currentEdition > 2022, "The sale hasn't started yet.");
        require(getPrice() != price, "The sale is over.");
        require(msg.value == getPrice() * _quantity, "Incorrect Ether sent");
        require(_quantity < 6, "You can only mint 5 at a time.");
        _mint(msg.sender, currentEdition, _quantity, "");
    }

    function getPrice() public view returns (uint256) {
        uint256 timeSinceRelease = block.timestamp - editionReleaseTimestamp;

        if (timeSinceRelease < THIRTY_DAYS) {
            return (price * 70) / 100;  // 30% discount
        } else if (timeSinceRelease < 2 * THIRTY_DAYS) {
            return (price * 80) / 100;  // 20% discount
        } else if (timeSinceRelease < 3 * THIRTY_DAYS) {
            return (price * 90) / 100;  // 10% discount
        } else {
            return price;  // No discount
        }
    }

    function uri(uint256 _tokenId) public view virtual override returns (string memory tokenURI) {
        string memory TokenURI = URIofToken[_tokenId];
        return bytes(TokenURI).length > 0 ? string(abi.encodePacked(TokenURI)) : "";
    }

    function changePrice(uint256 _newPrice) external onlyOwner {
        price = _newPrice;
    }


    function fixMetadata(uint256 _tokenId, string memory _uriOfToken) external onlyOwner {
        URIofToken[_tokenId] = _uriOfToken;
    }

    function withdraw() external onlyOwner {
        uint256 balance = address(this).balance;
        payable(owner()).transfer(balance);
    }
    
}

File 1 of 11: Address.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

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

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

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

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

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

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

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

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

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

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

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

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

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

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

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

File 2 of 11: Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

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

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

File 3 of 11: ERC1155.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC1155/ERC1155.sol)

pragma solidity ^0.8.0;

import "./IERC1155.sol";
import "./IERC1155Receiver.sol";
import "./IERC1155MetadataURI.sol";
import "./Address.sol";
import "./Context.sol";
import "./ERC165.sol";

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

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

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

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

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

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

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

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

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

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

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

        return batchBalances;
    }

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

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

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

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

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

        return array;
    }
}

File 4 of 11: ERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;

import "./IERC165.sol";

/**
 * @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 5 of 11: IERC1155.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155.sol)

pragma solidity ^0.8.0;

import "./IERC165.sol";

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

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

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

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

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

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

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

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

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

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

File 6 of 11: IERC1155MetadataURI.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol)

pragma solidity ^0.8.0;

import "./IERC1155.sol";

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

File 7 of 11: IERC1155Receiver.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol)

pragma solidity ^0.8.0;

import "./IERC165.sol";

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

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

File 8 of 11: IERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

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

File 10 of 11: Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;

import "./Context.sol";

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

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

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

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

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

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

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

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

File 11 of 11: Strings.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[],"name":"THIRTY_DAYS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"changePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currentEdition","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"editionReleaseTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"string","name":"_uriOfToken","type":"string"}],"name":"fixMetadata","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_quantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_uriOfToken","type":"string"}],"name":"releaseEdition","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"tokenURI","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526040518060400160405280600781526020017f4e46546178657300000000000000000000000000000000000000000000000000815250600590816200004a9190620004da565b506040518060400160405280600381526020017f4e4654000000000000000000000000000000000000000000000000000000000081525060069081620000919190620004da565b506107e6600755670429d069189e0000600955348015620000b157600080fd5b5060048054620000c190620002c9565b80601f0160208091040260200160405190810160405280929190818152602001828054620000ef90620002c9565b8015620001405780601f10620001145761010080835404028352916020019162000140565b820191906000526020600020905b8154815290600101906020018083116200012257829003601f168201915b505050505062000156816200017d60201b60201c565b50620001776200016b6200019260201b60201c565b6200019a60201b60201c565b620005c1565b80600290816200018e9190620004da565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620002e257607f821691505b602082108103620002f857620002f76200029a565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620003627fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000323565b6200036e868362000323565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620003bb620003b5620003af8462000386565b62000390565b62000386565b9050919050565b6000819050919050565b620003d7836200039a565b620003ef620003e682620003c2565b84845462000330565b825550505050565b600090565b62000406620003f7565b62000413818484620003cc565b505050565b5b818110156200043b576200042f600082620003fc565b60018101905062000419565b5050565b601f8211156200048a576200045481620002fe565b6200045f8462000313565b810160208510156200046f578190505b620004876200047e8562000313565b83018262000418565b50505b505050565b600082821c905092915050565b6000620004af600019846008026200048f565b1980831691505092915050565b6000620004ca83836200049c565b9150826002028217905092915050565b620004e58262000260565b67ffffffffffffffff8111156200050157620005006200026b565b5b6200050d8254620002c9565b6200051a8282856200043f565b600060209050601f8311600181146200055257600084156200053d578287015190505b620005498582620004bc565b865550620005b9565b601f1984166200056286620002fe565b60005b828110156200058c5784890151825560018201915060208501945060208101905062000565565b86831015620005ac5784890151620005a8601f8916826200049c565b8355505b6001600288020188555050505b505050505050565b613c4980620005d16000396000f3fe60806040526004361061014a5760003560e01c806395d89b41116100b6578063a2b40d191161006f578063a2b40d1914610460578063ade6502814610489578063b2750771146104b2578063e985e9c5146104dd578063f242432a1461051a578063f2fde38b146105435761014a565b806395d89b411461036f57806398d5fdca1461039a578063a035b1fe146103c5578063a0712d68146103f0578063a21df9f01461040c578063a22cb465146104375761014a565b80633ccfd60b116101085780633ccfd60b146102855780634e1273f41461029c5780636c0360eb146102d9578063715018a6146103045780638d1879741461031b5780638da5cb5b146103445761014a565b8062fdd58e1461014f57806301ffc9a71461018c57806306fdde03146101c95780630e89341c146101f45780630f97301f146102315780632eb2c2d61461025c575b600080fd5b34801561015b57600080fd5b50610176600480360381019061017191906121fb565b61056c565b604051610183919061224a565b60405180910390f35b34801561019857600080fd5b506101b360048036038101906101ae91906122bd565b610634565b6040516101c09190612305565b60405180910390f35b3480156101d557600080fd5b506101de610716565b6040516101eb91906123b0565b60405180910390f35b34801561020057600080fd5b5061021b600480360381019061021691906123d2565b6107a4565b60405161022891906123b0565b60405180910390f35b34801561023d57600080fd5b5061024661088d565b604051610253919061224a565b60405180910390f35b34801561026857600080fd5b50610283600480360381019061027e91906125fc565b610893565b005b34801561029157600080fd5b5061029a610934565b005b3480156102a857600080fd5b506102c360048036038101906102be919061278e565b610a06565b6040516102d091906128c4565b60405180910390f35b3480156102e557600080fd5b506102ee610b1f565b6040516102fb91906123b0565b60405180910390f35b34801561031057600080fd5b50610319610bad565b005b34801561032757600080fd5b50610342600480360381019061033d9190612987565b610c35565b005b34801561035057600080fd5b50610359610cd6565b60405161036691906129f2565b60405180910390f35b34801561037b57600080fd5b50610384610d00565b60405161039191906123b0565b60405180910390f35b3480156103a657600080fd5b506103af610d8e565b6040516103bc919061224a565b60405180910390f35b3480156103d157600080fd5b506103da610e4d565b6040516103e7919061224a565b60405180910390f35b61040a600480360381019061040591906123d2565b610e53565b005b34801561041857600080fd5b50610421610f9b565b60405161042e919061224a565b60405180910390f35b34801561044357600080fd5b5061045e60048036038101906104599190612a39565b610fa2565b005b34801561046c57600080fd5b50610487600480360381019061048291906123d2565b610fb8565b005b34801561049557600080fd5b506104b060048036038101906104ab9190612a79565b61103e565b005b3480156104be57600080fd5b506104c7611101565b6040516104d4919061224a565b60405180910390f35b3480156104e957600080fd5b5061050460048036038101906104ff9190612ac2565b611107565b6040516105119190612305565b60405180910390f35b34801561052657600080fd5b50610541600480360381019061053c9190612b02565b61119b565b005b34801561054f57600080fd5b5061056a60048036038101906105659190612b99565b61123c565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036105dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105d390612c38565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106ff57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061070f575061070e82611333565b5b9050919050565b6005805461072390612c87565b80601f016020809104026020016040519081016040528092919081815260200182805461074f90612c87565b801561079c5780601f106107715761010080835404028352916020019161079c565b820191906000526020600020905b81548152906001019060200180831161077f57829003601f168201915b505050505081565b60606000600a600084815260200190815260200160002080546107c690612c87565b80601f01602080910402602001604051908101604052809291908181526020018280546107f290612c87565b801561083f5780601f106108145761010080835404028352916020019161083f565b820191906000526020600020905b81548152906001019060200180831161082257829003601f168201915b5050505050905060008151116108645760405180602001604052806000815250610885565b806040516020016108759190612cf4565b6040516020818303038152906040525b915050919050565b60085481565b61089b61139d565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806108e157506108e0856108db61139d565b611107565b5b610920576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091790612d7d565b60405180910390fd5b61092d85858585856113a5565b5050505050565b61093c61139d565b73ffffffffffffffffffffffffffffffffffffffff1661095a610cd6565b73ffffffffffffffffffffffffffffffffffffffff16146109b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a790612de9565b60405180910390fd5b60004790506109bd610cd6565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610a02573d6000803e3d6000fd5b5050565b60608151835114610a4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390612e7b565b60405180910390fd5b6000835167ffffffffffffffff811115610a6957610a68612404565b5b604051908082528060200260200182016040528015610a975781602001602082028036833780820191505090505b50905060005b8451811015610b1457610ae4858281518110610abc57610abb612e9b565b5b6020026020010151858381518110610ad757610ad6612e9b565b5b602002602001015161056c565b828281518110610af757610af6612e9b565b5b60200260200101818152505080610b0d90612ef9565b9050610a9d565b508091505092915050565b60048054610b2c90612c87565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5890612c87565b8015610ba55780601f10610b7a57610100808354040283529160200191610ba5565b820191906000526020600020905b815481529060010190602001808311610b8857829003601f168201915b505050505081565b610bb561139d565b73ffffffffffffffffffffffffffffffffffffffff16610bd3610cd6565b73ffffffffffffffffffffffffffffffffffffffff1614610c29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2090612de9565b60405180910390fd5b610c3360006116b8565b565b610c3d61139d565b73ffffffffffffffffffffffffffffffffffffffff16610c5b610cd6565b73ffffffffffffffffffffffffffffffffffffffff1614610cb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca890612de9565b60405180910390fd5b80600a60008481526020019081526020016000209081610cd191906130ed565b505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60068054610d0d90612c87565b80601f0160208091040260200160405190810160405280929190818152602001828054610d3990612c87565b8015610d865780601f10610d5b57610100808354040283529160200191610d86565b820191906000526020600020905b815481529060010190602001808311610d6957829003601f168201915b505050505081565b60008060085442610d9f91906131bf565b905062278d00811015610dcf5760646046600954610dbd91906131f3565b610dc79190613264565b915050610e4a565b62278d006002610ddf91906131f3565b811015610e095760646050600954610df791906131f3565b610e019190613264565b915050610e4a565b62278d006003610e1991906131f3565b811015610e43576064605a600954610e3191906131f3565b610e3b9190613264565b915050610e4a565b6009549150505b90565b60095481565b6107e660075411610e99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e90906132e1565b60405180910390fd5b600954610ea4610d8e565b03610ee4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edb9061334d565b60405180910390fd5b80610eed610d8e565b610ef791906131f3565b3414610f38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2f906133b9565b60405180910390fd5b60068110610f7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7290613425565b60405180910390fd5b610f9833600754836040518060200160405280600081525061177e565b50565b62278d0081565b610fb4610fad61139d565b8383611913565b5050565b610fc061139d565b73ffffffffffffffffffffffffffffffffffffffff16610fde610cd6565b73ffffffffffffffffffffffffffffffffffffffff1614611034576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102b90612de9565b60405180910390fd5b8060098190555050565b61104661139d565b73ffffffffffffffffffffffffffffffffffffffff16611064610cd6565b73ffffffffffffffffffffffffffffffffffffffff16146110ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b190612de9565b60405180910390fd5b6001600760008282546110cd9190613445565b925050819055504260088190555080600a6000600754815260200190815260200160002090816110fd91906130ed565b5050565b60075481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6111a361139d565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806111e957506111e8856111e361139d565b611107565b5b611228576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121f906134eb565b60405180910390fd5b6112358585858585611a7f565b5050505050565b61124461139d565b73ffffffffffffffffffffffffffffffffffffffff16611262610cd6565b73ffffffffffffffffffffffffffffffffffffffff16146112b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112af90612de9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611327576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131e9061357d565b60405180910390fd5b611330816116b8565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b81518351146113e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e09061360f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611458576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144f906136a1565b60405180910390fd5b600061146261139d565b9050611472818787878787611d00565b60005b845181101561162357600085828151811061149357611492612e9b565b5b6020026020010151905060008583815181106114b2576114b1612e9b565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611553576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154a90613733565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116089190613445565b925050819055505050508061161c90612ef9565b9050611475565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161169a929190613753565b60405180910390a46116b0818787878787611d08565b505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036117ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e4906137fc565b60405180910390fd5b60006117f761139d565b90506118188160008761180988611edf565b61181288611edf565b87611d00565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118779190613445565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6287876040516118f592919061381c565b60405180910390a461190c81600087878787611f59565b5050505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611981576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611978906138b7565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611a729190612305565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611aee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae5906136a1565b60405180910390fd5b6000611af861139d565b9050611b18818787611b0988611edf565b611b1288611edf565b87611d00565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611baf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba690613733565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c649190613445565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051611ce192919061381c565b60405180910390a4611cf7828888888888611f59565b50505050505050565b505050505050565b611d278473ffffffffffffffffffffffffffffffffffffffff16612130565b15611ed7578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611d6d95949392919061392c565b6020604051808303816000875af1925050508015611da957506040513d601f19601f82011682018060405250810190611da691906139a9565b60015b611e4e57611db56139e3565b806308c379a003611e115750611dc9613a05565b80611dd45750611e13565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0891906123b0565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4590613b07565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611ed5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecc90613b99565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff811115611efe57611efd612404565b5b604051908082528060200260200182016040528015611f2c5781602001602082028036833780820191505090505b5090508281600081518110611f4457611f43612e9b565b5b60200260200101818152505080915050919050565b611f788473ffffffffffffffffffffffffffffffffffffffff16612130565b15612128578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401611fbe959493929190613bb9565b6020604051808303816000875af1925050508015611ffa57506040513d601f19601f82011682018060405250810190611ff791906139a9565b60015b61209f576120066139e3565b806308c379a003612062575061201a613a05565b806120255750612064565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205991906123b0565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209690613b07565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612126576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211d90613b99565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061219282612167565b9050919050565b6121a281612187565b81146121ad57600080fd5b50565b6000813590506121bf81612199565b92915050565b6000819050919050565b6121d8816121c5565b81146121e357600080fd5b50565b6000813590506121f5816121cf565b92915050565b600080604083850312156122125761221161215d565b5b6000612220858286016121b0565b9250506020612231858286016121e6565b9150509250929050565b612244816121c5565b82525050565b600060208201905061225f600083018461223b565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61229a81612265565b81146122a557600080fd5b50565b6000813590506122b781612291565b92915050565b6000602082840312156122d3576122d261215d565b5b60006122e1848285016122a8565b91505092915050565b60008115159050919050565b6122ff816122ea565b82525050565b600060208201905061231a60008301846122f6565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561235a57808201518184015260208101905061233f565b60008484015250505050565b6000601f19601f8301169050919050565b600061238282612320565b61238c818561232b565b935061239c81856020860161233c565b6123a581612366565b840191505092915050565b600060208201905081810360008301526123ca8184612377565b905092915050565b6000602082840312156123e8576123e761215d565b5b60006123f6848285016121e6565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61243c82612366565b810181811067ffffffffffffffff8211171561245b5761245a612404565b5b80604052505050565b600061246e612153565b905061247a8282612433565b919050565b600067ffffffffffffffff82111561249a57612499612404565b5b602082029050602081019050919050565b600080fd5b60006124c36124be8461247f565b612464565b905080838252602082019050602084028301858111156124e6576124e56124ab565b5b835b8181101561250f57806124fb88826121e6565b8452602084019350506020810190506124e8565b5050509392505050565b600082601f83011261252e5761252d6123ff565b5b813561253e8482602086016124b0565b91505092915050565b600080fd5b600067ffffffffffffffff82111561256757612566612404565b5b61257082612366565b9050602081019050919050565b82818337600083830152505050565b600061259f61259a8461254c565b612464565b9050828152602081018484840111156125bb576125ba612547565b5b6125c684828561257d565b509392505050565b600082601f8301126125e3576125e26123ff565b5b81356125f384826020860161258c565b91505092915050565b600080600080600060a086880312156126185761261761215d565b5b6000612626888289016121b0565b9550506020612637888289016121b0565b945050604086013567ffffffffffffffff81111561265857612657612162565b5b61266488828901612519565b935050606086013567ffffffffffffffff81111561268557612684612162565b5b61269188828901612519565b925050608086013567ffffffffffffffff8111156126b2576126b1612162565b5b6126be888289016125ce565b9150509295509295909350565b600067ffffffffffffffff8211156126e6576126e5612404565b5b602082029050602081019050919050565b600061270a612705846126cb565b612464565b9050808382526020820190506020840283018581111561272d5761272c6124ab565b5b835b81811015612756578061274288826121b0565b84526020840193505060208101905061272f565b5050509392505050565b600082601f830112612775576127746123ff565b5b81356127858482602086016126f7565b91505092915050565b600080604083850312156127a5576127a461215d565b5b600083013567ffffffffffffffff8111156127c3576127c2612162565b5b6127cf85828601612760565b925050602083013567ffffffffffffffff8111156127f0576127ef612162565b5b6127fc85828601612519565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61283b816121c5565b82525050565b600061284d8383612832565b60208301905092915050565b6000602082019050919050565b600061287182612806565b61287b8185612811565b935061288683612822565b8060005b838110156128b757815161289e8882612841565b97506128a983612859565b92505060018101905061288a565b5085935050505092915050565b600060208201905081810360008301526128de8184612866565b905092915050565b600067ffffffffffffffff82111561290157612900612404565b5b61290a82612366565b9050602081019050919050565b600061292a612925846128e6565b612464565b90508281526020810184848401111561294657612945612547565b5b61295184828561257d565b509392505050565b600082601f83011261296e5761296d6123ff565b5b813561297e848260208601612917565b91505092915050565b6000806040838503121561299e5761299d61215d565b5b60006129ac858286016121e6565b925050602083013567ffffffffffffffff8111156129cd576129cc612162565b5b6129d985828601612959565b9150509250929050565b6129ec81612187565b82525050565b6000602082019050612a0760008301846129e3565b92915050565b612a16816122ea565b8114612a2157600080fd5b50565b600081359050612a3381612a0d565b92915050565b60008060408385031215612a5057612a4f61215d565b5b6000612a5e858286016121b0565b9250506020612a6f85828601612a24565b9150509250929050565b600060208284031215612a8f57612a8e61215d565b5b600082013567ffffffffffffffff811115612aad57612aac612162565b5b612ab984828501612959565b91505092915050565b60008060408385031215612ad957612ad861215d565b5b6000612ae7858286016121b0565b9250506020612af8858286016121b0565b9150509250929050565b600080600080600060a08688031215612b1e57612b1d61215d565b5b6000612b2c888289016121b0565b9550506020612b3d888289016121b0565b9450506040612b4e888289016121e6565b9350506060612b5f888289016121e6565b925050608086013567ffffffffffffffff811115612b8057612b7f612162565b5b612b8c888289016125ce565b9150509295509295909350565b600060208284031215612baf57612bae61215d565b5b6000612bbd848285016121b0565b91505092915050565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000612c22602b8361232b565b9150612c2d82612bc6565b604082019050919050565b60006020820190508181036000830152612c5181612c15565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612c9f57607f821691505b602082108103612cb257612cb1612c58565b5b50919050565b600081905092915050565b6000612cce82612320565b612cd88185612cb8565b9350612ce881856020860161233c565b80840191505092915050565b6000612d008284612cc3565b915081905092915050565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b6000612d6760328361232b565b9150612d7282612d0b565b604082019050919050565b60006020820190508181036000830152612d9681612d5a565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612dd360208361232b565b9150612dde82612d9d565b602082019050919050565b60006020820190508181036000830152612e0281612dc6565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b6000612e6560298361232b565b9150612e7082612e09565b604082019050919050565b60006020820190508181036000830152612e9481612e58565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612f04826121c5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612f3657612f35612eca565b5b600182019050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302612fa37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612f66565b612fad8683612f66565b95508019841693508086168417925050509392505050565b6000819050919050565b6000612fea612fe5612fe0846121c5565b612fc5565b6121c5565b9050919050565b6000819050919050565b61300483612fcf565b61301861301082612ff1565b848454612f73565b825550505050565b600090565b61302d613020565b613038818484612ffb565b505050565b5b8181101561305c57613051600082613025565b60018101905061303e565b5050565b601f8211156130a15761307281612f41565b61307b84612f56565b8101602085101561308a578190505b61309e61309685612f56565b83018261303d565b50505b505050565b600082821c905092915050565b60006130c4600019846008026130a6565b1980831691505092915050565b60006130dd83836130b3565b9150826002028217905092915050565b6130f682612320565b67ffffffffffffffff81111561310f5761310e612404565b5b6131198254612c87565b613124828285613060565b600060209050601f8311600181146131575760008415613145578287015190505b61314f85826130d1565b8655506131b7565b601f19841661316586612f41565b60005b8281101561318d57848901518255600182019150602085019450602081019050613168565b868310156131aa57848901516131a6601f8916826130b3565b8355505b6001600288020188555050505b505050505050565b60006131ca826121c5565b91506131d5836121c5565b92508282039050818111156131ed576131ec612eca565b5b92915050565b60006131fe826121c5565b9150613209836121c5565b9250828202613217816121c5565b9150828204841483151761322e5761322d612eca565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061326f826121c5565b915061327a836121c5565b92508261328a57613289613235565b5b828204905092915050565b7f5468652073616c65206861736e27742073746172746564207965742e00000000600082015250565b60006132cb601c8361232b565b91506132d682613295565b602082019050919050565b600060208201905081810360008301526132fa816132be565b9050919050565b7f5468652073616c65206973206f7665722e000000000000000000000000000000600082015250565b600061333760118361232b565b915061334282613301565b602082019050919050565b600060208201905081810360008301526133668161332a565b9050919050565b7f496e636f72726563742045746865722073656e74000000000000000000000000600082015250565b60006133a360148361232b565b91506133ae8261336d565b602082019050919050565b600060208201905081810360008301526133d281613396565b9050919050565b7f596f752063616e206f6e6c79206d696e74203520617420612074696d652e0000600082015250565b600061340f601e8361232b565b915061341a826133d9565b602082019050919050565b6000602082019050818103600083015261343e81613402565b9050919050565b6000613450826121c5565b915061345b836121c5565b925082820190508082111561347357613472612eca565b5b92915050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b60006134d560298361232b565b91506134e082613479565b604082019050919050565b60006020820190508181036000830152613504816134c8565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061356760268361232b565b91506135728261350b565b604082019050919050565b600060208201905081810360008301526135968161355a565b9050919050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b60006135f960288361232b565b91506136048261359d565b604082019050919050565b60006020820190508181036000830152613628816135ec565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061368b60258361232b565b91506136968261362f565b604082019050919050565b600060208201905081810360008301526136ba8161367e565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b600061371d602a8361232b565b9150613728826136c1565b604082019050919050565b6000602082019050818103600083015261374c81613710565b9050919050565b6000604082019050818103600083015261376d8185612866565b905081810360208301526137818184612866565b90509392505050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006137e660218361232b565b91506137f18261378a565b604082019050919050565b60006020820190508181036000830152613815816137d9565b9050919050565b6000604082019050613831600083018561223b565b61383e602083018461223b565b9392505050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b60006138a160298361232b565b91506138ac82613845565b604082019050919050565b600060208201905081810360008301526138d081613894565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006138fe826138d7565b61390881856138e2565b935061391881856020860161233c565b61392181612366565b840191505092915050565b600060a08201905061394160008301886129e3565b61394e60208301876129e3565b81810360408301526139608186612866565b905081810360608301526139748185612866565b9050818103608083015261398881846138f3565b90509695505050505050565b6000815190506139a381612291565b92915050565b6000602082840312156139bf576139be61215d565b5b60006139cd84828501613994565b91505092915050565b60008160e01c9050919050565b600060033d1115613a025760046000803e6139ff6000516139d6565b90505b90565b600060443d10613a9257613a17612153565b60043d036004823e80513d602482011167ffffffffffffffff82111715613a3f575050613a92565b808201805167ffffffffffffffff811115613a5d5750505050613a92565b80602083010160043d038501811115613a7a575050505050613a92565b613a8982602001850186612433565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b6000613af160348361232b565b9150613afc82613a95565b604082019050919050565b60006020820190508181036000830152613b2081613ae4565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b6000613b8360288361232b565b9150613b8e82613b27565b604082019050919050565b60006020820190508181036000830152613bb281613b76565b9050919050565b600060a082019050613bce60008301886129e3565b613bdb60208301876129e3565b613be8604083018661223b565b613bf5606083018561223b565b8181036080830152613c0781846138f3565b9050969550505050505056fea26469706673582212209248a94d8e1f1a003a2187dbbd63df2bd18076ce2d148625dae599274cadb63f64736f6c63430008120033

Deployed Bytecode

0x60806040526004361061014a5760003560e01c806395d89b41116100b6578063a2b40d191161006f578063a2b40d1914610460578063ade6502814610489578063b2750771146104b2578063e985e9c5146104dd578063f242432a1461051a578063f2fde38b146105435761014a565b806395d89b411461036f57806398d5fdca1461039a578063a035b1fe146103c5578063a0712d68146103f0578063a21df9f01461040c578063a22cb465146104375761014a565b80633ccfd60b116101085780633ccfd60b146102855780634e1273f41461029c5780636c0360eb146102d9578063715018a6146103045780638d1879741461031b5780638da5cb5b146103445761014a565b8062fdd58e1461014f57806301ffc9a71461018c57806306fdde03146101c95780630e89341c146101f45780630f97301f146102315780632eb2c2d61461025c575b600080fd5b34801561015b57600080fd5b50610176600480360381019061017191906121fb565b61056c565b604051610183919061224a565b60405180910390f35b34801561019857600080fd5b506101b360048036038101906101ae91906122bd565b610634565b6040516101c09190612305565b60405180910390f35b3480156101d557600080fd5b506101de610716565b6040516101eb91906123b0565b60405180910390f35b34801561020057600080fd5b5061021b600480360381019061021691906123d2565b6107a4565b60405161022891906123b0565b60405180910390f35b34801561023d57600080fd5b5061024661088d565b604051610253919061224a565b60405180910390f35b34801561026857600080fd5b50610283600480360381019061027e91906125fc565b610893565b005b34801561029157600080fd5b5061029a610934565b005b3480156102a857600080fd5b506102c360048036038101906102be919061278e565b610a06565b6040516102d091906128c4565b60405180910390f35b3480156102e557600080fd5b506102ee610b1f565b6040516102fb91906123b0565b60405180910390f35b34801561031057600080fd5b50610319610bad565b005b34801561032757600080fd5b50610342600480360381019061033d9190612987565b610c35565b005b34801561035057600080fd5b50610359610cd6565b60405161036691906129f2565b60405180910390f35b34801561037b57600080fd5b50610384610d00565b60405161039191906123b0565b60405180910390f35b3480156103a657600080fd5b506103af610d8e565b6040516103bc919061224a565b60405180910390f35b3480156103d157600080fd5b506103da610e4d565b6040516103e7919061224a565b60405180910390f35b61040a600480360381019061040591906123d2565b610e53565b005b34801561041857600080fd5b50610421610f9b565b60405161042e919061224a565b60405180910390f35b34801561044357600080fd5b5061045e60048036038101906104599190612a39565b610fa2565b005b34801561046c57600080fd5b50610487600480360381019061048291906123d2565b610fb8565b005b34801561049557600080fd5b506104b060048036038101906104ab9190612a79565b61103e565b005b3480156104be57600080fd5b506104c7611101565b6040516104d4919061224a565b60405180910390f35b3480156104e957600080fd5b5061050460048036038101906104ff9190612ac2565b611107565b6040516105119190612305565b60405180910390f35b34801561052657600080fd5b50610541600480360381019061053c9190612b02565b61119b565b005b34801561054f57600080fd5b5061056a60048036038101906105659190612b99565b61123c565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036105dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105d390612c38565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106ff57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061070f575061070e82611333565b5b9050919050565b6005805461072390612c87565b80601f016020809104026020016040519081016040528092919081815260200182805461074f90612c87565b801561079c5780601f106107715761010080835404028352916020019161079c565b820191906000526020600020905b81548152906001019060200180831161077f57829003601f168201915b505050505081565b60606000600a600084815260200190815260200160002080546107c690612c87565b80601f01602080910402602001604051908101604052809291908181526020018280546107f290612c87565b801561083f5780601f106108145761010080835404028352916020019161083f565b820191906000526020600020905b81548152906001019060200180831161082257829003601f168201915b5050505050905060008151116108645760405180602001604052806000815250610885565b806040516020016108759190612cf4565b6040516020818303038152906040525b915050919050565b60085481565b61089b61139d565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806108e157506108e0856108db61139d565b611107565b5b610920576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091790612d7d565b60405180910390fd5b61092d85858585856113a5565b5050505050565b61093c61139d565b73ffffffffffffffffffffffffffffffffffffffff1661095a610cd6565b73ffffffffffffffffffffffffffffffffffffffff16146109b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a790612de9565b60405180910390fd5b60004790506109bd610cd6565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610a02573d6000803e3d6000fd5b5050565b60608151835114610a4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390612e7b565b60405180910390fd5b6000835167ffffffffffffffff811115610a6957610a68612404565b5b604051908082528060200260200182016040528015610a975781602001602082028036833780820191505090505b50905060005b8451811015610b1457610ae4858281518110610abc57610abb612e9b565b5b6020026020010151858381518110610ad757610ad6612e9b565b5b602002602001015161056c565b828281518110610af757610af6612e9b565b5b60200260200101818152505080610b0d90612ef9565b9050610a9d565b508091505092915050565b60048054610b2c90612c87565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5890612c87565b8015610ba55780601f10610b7a57610100808354040283529160200191610ba5565b820191906000526020600020905b815481529060010190602001808311610b8857829003601f168201915b505050505081565b610bb561139d565b73ffffffffffffffffffffffffffffffffffffffff16610bd3610cd6565b73ffffffffffffffffffffffffffffffffffffffff1614610c29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2090612de9565b60405180910390fd5b610c3360006116b8565b565b610c3d61139d565b73ffffffffffffffffffffffffffffffffffffffff16610c5b610cd6565b73ffffffffffffffffffffffffffffffffffffffff1614610cb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca890612de9565b60405180910390fd5b80600a60008481526020019081526020016000209081610cd191906130ed565b505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60068054610d0d90612c87565b80601f0160208091040260200160405190810160405280929190818152602001828054610d3990612c87565b8015610d865780601f10610d5b57610100808354040283529160200191610d86565b820191906000526020600020905b815481529060010190602001808311610d6957829003601f168201915b505050505081565b60008060085442610d9f91906131bf565b905062278d00811015610dcf5760646046600954610dbd91906131f3565b610dc79190613264565b915050610e4a565b62278d006002610ddf91906131f3565b811015610e095760646050600954610df791906131f3565b610e019190613264565b915050610e4a565b62278d006003610e1991906131f3565b811015610e43576064605a600954610e3191906131f3565b610e3b9190613264565b915050610e4a565b6009549150505b90565b60095481565b6107e660075411610e99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e90906132e1565b60405180910390fd5b600954610ea4610d8e565b03610ee4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edb9061334d565b60405180910390fd5b80610eed610d8e565b610ef791906131f3565b3414610f38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2f906133b9565b60405180910390fd5b60068110610f7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7290613425565b60405180910390fd5b610f9833600754836040518060200160405280600081525061177e565b50565b62278d0081565b610fb4610fad61139d565b8383611913565b5050565b610fc061139d565b73ffffffffffffffffffffffffffffffffffffffff16610fde610cd6565b73ffffffffffffffffffffffffffffffffffffffff1614611034576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102b90612de9565b60405180910390fd5b8060098190555050565b61104661139d565b73ffffffffffffffffffffffffffffffffffffffff16611064610cd6565b73ffffffffffffffffffffffffffffffffffffffff16146110ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b190612de9565b60405180910390fd5b6001600760008282546110cd9190613445565b925050819055504260088190555080600a6000600754815260200190815260200160002090816110fd91906130ed565b5050565b60075481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6111a361139d565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806111e957506111e8856111e361139d565b611107565b5b611228576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121f906134eb565b60405180910390fd5b6112358585858585611a7f565b5050505050565b61124461139d565b73ffffffffffffffffffffffffffffffffffffffff16611262610cd6565b73ffffffffffffffffffffffffffffffffffffffff16146112b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112af90612de9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611327576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131e9061357d565b60405180910390fd5b611330816116b8565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b81518351146113e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e09061360f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611458576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144f906136a1565b60405180910390fd5b600061146261139d565b9050611472818787878787611d00565b60005b845181101561162357600085828151811061149357611492612e9b565b5b6020026020010151905060008583815181106114b2576114b1612e9b565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611553576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154a90613733565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116089190613445565b925050819055505050508061161c90612ef9565b9050611475565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161169a929190613753565b60405180910390a46116b0818787878787611d08565b505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036117ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e4906137fc565b60405180910390fd5b60006117f761139d565b90506118188160008761180988611edf565b61181288611edf565b87611d00565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118779190613445565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6287876040516118f592919061381c565b60405180910390a461190c81600087878787611f59565b5050505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611981576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611978906138b7565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611a729190612305565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611aee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae5906136a1565b60405180910390fd5b6000611af861139d565b9050611b18818787611b0988611edf565b611b1288611edf565b87611d00565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611baf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba690613733565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c649190613445565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051611ce192919061381c565b60405180910390a4611cf7828888888888611f59565b50505050505050565b505050505050565b611d278473ffffffffffffffffffffffffffffffffffffffff16612130565b15611ed7578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611d6d95949392919061392c565b6020604051808303816000875af1925050508015611da957506040513d601f19601f82011682018060405250810190611da691906139a9565b60015b611e4e57611db56139e3565b806308c379a003611e115750611dc9613a05565b80611dd45750611e13565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0891906123b0565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4590613b07565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611ed5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecc90613b99565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff811115611efe57611efd612404565b5b604051908082528060200260200182016040528015611f2c5781602001602082028036833780820191505090505b5090508281600081518110611f4457611f43612e9b565b5b60200260200101818152505080915050919050565b611f788473ffffffffffffffffffffffffffffffffffffffff16612130565b15612128578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401611fbe959493929190613bb9565b6020604051808303816000875af1925050508015611ffa57506040513d601f19601f82011682018060405250810190611ff791906139a9565b60015b61209f576120066139e3565b806308c379a003612062575061201a613a05565b806120255750612064565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205991906123b0565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209690613b07565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612126576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211d90613b99565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061219282612167565b9050919050565b6121a281612187565b81146121ad57600080fd5b50565b6000813590506121bf81612199565b92915050565b6000819050919050565b6121d8816121c5565b81146121e357600080fd5b50565b6000813590506121f5816121cf565b92915050565b600080604083850312156122125761221161215d565b5b6000612220858286016121b0565b9250506020612231858286016121e6565b9150509250929050565b612244816121c5565b82525050565b600060208201905061225f600083018461223b565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61229a81612265565b81146122a557600080fd5b50565b6000813590506122b781612291565b92915050565b6000602082840312156122d3576122d261215d565b5b60006122e1848285016122a8565b91505092915050565b60008115159050919050565b6122ff816122ea565b82525050565b600060208201905061231a60008301846122f6565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561235a57808201518184015260208101905061233f565b60008484015250505050565b6000601f19601f8301169050919050565b600061238282612320565b61238c818561232b565b935061239c81856020860161233c565b6123a581612366565b840191505092915050565b600060208201905081810360008301526123ca8184612377565b905092915050565b6000602082840312156123e8576123e761215d565b5b60006123f6848285016121e6565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61243c82612366565b810181811067ffffffffffffffff8211171561245b5761245a612404565b5b80604052505050565b600061246e612153565b905061247a8282612433565b919050565b600067ffffffffffffffff82111561249a57612499612404565b5b602082029050602081019050919050565b600080fd5b60006124c36124be8461247f565b612464565b905080838252602082019050602084028301858111156124e6576124e56124ab565b5b835b8181101561250f57806124fb88826121e6565b8452602084019350506020810190506124e8565b5050509392505050565b600082601f83011261252e5761252d6123ff565b5b813561253e8482602086016124b0565b91505092915050565b600080fd5b600067ffffffffffffffff82111561256757612566612404565b5b61257082612366565b9050602081019050919050565b82818337600083830152505050565b600061259f61259a8461254c565b612464565b9050828152602081018484840111156125bb576125ba612547565b5b6125c684828561257d565b509392505050565b600082601f8301126125e3576125e26123ff565b5b81356125f384826020860161258c565b91505092915050565b600080600080600060a086880312156126185761261761215d565b5b6000612626888289016121b0565b9550506020612637888289016121b0565b945050604086013567ffffffffffffffff81111561265857612657612162565b5b61266488828901612519565b935050606086013567ffffffffffffffff81111561268557612684612162565b5b61269188828901612519565b925050608086013567ffffffffffffffff8111156126b2576126b1612162565b5b6126be888289016125ce565b9150509295509295909350565b600067ffffffffffffffff8211156126e6576126e5612404565b5b602082029050602081019050919050565b600061270a612705846126cb565b612464565b9050808382526020820190506020840283018581111561272d5761272c6124ab565b5b835b81811015612756578061274288826121b0565b84526020840193505060208101905061272f565b5050509392505050565b600082601f830112612775576127746123ff565b5b81356127858482602086016126f7565b91505092915050565b600080604083850312156127a5576127a461215d565b5b600083013567ffffffffffffffff8111156127c3576127c2612162565b5b6127cf85828601612760565b925050602083013567ffffffffffffffff8111156127f0576127ef612162565b5b6127fc85828601612519565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61283b816121c5565b82525050565b600061284d8383612832565b60208301905092915050565b6000602082019050919050565b600061287182612806565b61287b8185612811565b935061288683612822565b8060005b838110156128b757815161289e8882612841565b97506128a983612859565b92505060018101905061288a565b5085935050505092915050565b600060208201905081810360008301526128de8184612866565b905092915050565b600067ffffffffffffffff82111561290157612900612404565b5b61290a82612366565b9050602081019050919050565b600061292a612925846128e6565b612464565b90508281526020810184848401111561294657612945612547565b5b61295184828561257d565b509392505050565b600082601f83011261296e5761296d6123ff565b5b813561297e848260208601612917565b91505092915050565b6000806040838503121561299e5761299d61215d565b5b60006129ac858286016121e6565b925050602083013567ffffffffffffffff8111156129cd576129cc612162565b5b6129d985828601612959565b9150509250929050565b6129ec81612187565b82525050565b6000602082019050612a0760008301846129e3565b92915050565b612a16816122ea565b8114612a2157600080fd5b50565b600081359050612a3381612a0d565b92915050565b60008060408385031215612a5057612a4f61215d565b5b6000612a5e858286016121b0565b9250506020612a6f85828601612a24565b9150509250929050565b600060208284031215612a8f57612a8e61215d565b5b600082013567ffffffffffffffff811115612aad57612aac612162565b5b612ab984828501612959565b91505092915050565b60008060408385031215612ad957612ad861215d565b5b6000612ae7858286016121b0565b9250506020612af8858286016121b0565b9150509250929050565b600080600080600060a08688031215612b1e57612b1d61215d565b5b6000612b2c888289016121b0565b9550506020612b3d888289016121b0565b9450506040612b4e888289016121e6565b9350506060612b5f888289016121e6565b925050608086013567ffffffffffffffff811115612b8057612b7f612162565b5b612b8c888289016125ce565b9150509295509295909350565b600060208284031215612baf57612bae61215d565b5b6000612bbd848285016121b0565b91505092915050565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000612c22602b8361232b565b9150612c2d82612bc6565b604082019050919050565b60006020820190508181036000830152612c5181612c15565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612c9f57607f821691505b602082108103612cb257612cb1612c58565b5b50919050565b600081905092915050565b6000612cce82612320565b612cd88185612cb8565b9350612ce881856020860161233c565b80840191505092915050565b6000612d008284612cc3565b915081905092915050565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b6000612d6760328361232b565b9150612d7282612d0b565b604082019050919050565b60006020820190508181036000830152612d9681612d5a565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612dd360208361232b565b9150612dde82612d9d565b602082019050919050565b60006020820190508181036000830152612e0281612dc6565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b6000612e6560298361232b565b9150612e7082612e09565b604082019050919050565b60006020820190508181036000830152612e9481612e58565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612f04826121c5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612f3657612f35612eca565b5b600182019050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302612fa37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612f66565b612fad8683612f66565b95508019841693508086168417925050509392505050565b6000819050919050565b6000612fea612fe5612fe0846121c5565b612fc5565b6121c5565b9050919050565b6000819050919050565b61300483612fcf565b61301861301082612ff1565b848454612f73565b825550505050565b600090565b61302d613020565b613038818484612ffb565b505050565b5b8181101561305c57613051600082613025565b60018101905061303e565b5050565b601f8211156130a15761307281612f41565b61307b84612f56565b8101602085101561308a578190505b61309e61309685612f56565b83018261303d565b50505b505050565b600082821c905092915050565b60006130c4600019846008026130a6565b1980831691505092915050565b60006130dd83836130b3565b9150826002028217905092915050565b6130f682612320565b67ffffffffffffffff81111561310f5761310e612404565b5b6131198254612c87565b613124828285613060565b600060209050601f8311600181146131575760008415613145578287015190505b61314f85826130d1565b8655506131b7565b601f19841661316586612f41565b60005b8281101561318d57848901518255600182019150602085019450602081019050613168565b868310156131aa57848901516131a6601f8916826130b3565b8355505b6001600288020188555050505b505050505050565b60006131ca826121c5565b91506131d5836121c5565b92508282039050818111156131ed576131ec612eca565b5b92915050565b60006131fe826121c5565b9150613209836121c5565b9250828202613217816121c5565b9150828204841483151761322e5761322d612eca565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061326f826121c5565b915061327a836121c5565b92508261328a57613289613235565b5b828204905092915050565b7f5468652073616c65206861736e27742073746172746564207965742e00000000600082015250565b60006132cb601c8361232b565b91506132d682613295565b602082019050919050565b600060208201905081810360008301526132fa816132be565b9050919050565b7f5468652073616c65206973206f7665722e000000000000000000000000000000600082015250565b600061333760118361232b565b915061334282613301565b602082019050919050565b600060208201905081810360008301526133668161332a565b9050919050565b7f496e636f72726563742045746865722073656e74000000000000000000000000600082015250565b60006133a360148361232b565b91506133ae8261336d565b602082019050919050565b600060208201905081810360008301526133d281613396565b9050919050565b7f596f752063616e206f6e6c79206d696e74203520617420612074696d652e0000600082015250565b600061340f601e8361232b565b915061341a826133d9565b602082019050919050565b6000602082019050818103600083015261343e81613402565b9050919050565b6000613450826121c5565b915061345b836121c5565b925082820190508082111561347357613472612eca565b5b92915050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b60006134d560298361232b565b91506134e082613479565b604082019050919050565b60006020820190508181036000830152613504816134c8565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061356760268361232b565b91506135728261350b565b604082019050919050565b600060208201905081810360008301526135968161355a565b9050919050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b60006135f960288361232b565b91506136048261359d565b604082019050919050565b60006020820190508181036000830152613628816135ec565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061368b60258361232b565b91506136968261362f565b604082019050919050565b600060208201905081810360008301526136ba8161367e565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b600061371d602a8361232b565b9150613728826136c1565b604082019050919050565b6000602082019050818103600083015261374c81613710565b9050919050565b6000604082019050818103600083015261376d8185612866565b905081810360208301526137818184612866565b90509392505050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006137e660218361232b565b91506137f18261378a565b604082019050919050565b60006020820190508181036000830152613815816137d9565b9050919050565b6000604082019050613831600083018561223b565b61383e602083018461223b565b9392505050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b60006138a160298361232b565b91506138ac82613845565b604082019050919050565b600060208201905081810360008301526138d081613894565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006138fe826138d7565b61390881856138e2565b935061391881856020860161233c565b61392181612366565b840191505092915050565b600060a08201905061394160008301886129e3565b61394e60208301876129e3565b81810360408301526139608186612866565b905081810360608301526139748185612866565b9050818103608083015261398881846138f3565b90509695505050505050565b6000815190506139a381612291565b92915050565b6000602082840312156139bf576139be61215d565b5b60006139cd84828501613994565b91505092915050565b60008160e01c9050919050565b600060033d1115613a025760046000803e6139ff6000516139d6565b90505b90565b600060443d10613a9257613a17612153565b60043d036004823e80513d602482011167ffffffffffffffff82111715613a3f575050613a92565b808201805167ffffffffffffffff811115613a5d5750505050613a92565b80602083010160043d038501811115613a7a575050505050613a92565b613a8982602001850186612433565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b6000613af160348361232b565b9150613afc82613a95565b604082019050919050565b60006020820190508181036000830152613b2081613ae4565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b6000613b8360288361232b565b9150613b8e82613b27565b604082019050919050565b60006020820190508181036000830152613bb281613b76565b9050919050565b600060a082019050613bce60008301886129e3565b613bdb60208301876129e3565b613be8604083018661223b565b613bf5606083018561223b565b8181036080830152613c0781846138f3565b9050969550505050505056fea26469706673582212209248a94d8e1f1a003a2187dbbd63df2bd18076ce2d148625dae599274cadb63f64736f6c63430008120033

Deployed Bytecode Sourcemap

153:2294:8:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2184:231:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1207:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;259:30:8;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1794:243;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;374:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4123:442:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2296:142:8;;;;;;;;;;;;;:::i;:::-;;2581:524:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;231:21:8;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1714:103:9;;;;;;;;;;;;;:::i;:::-;;2150:138:8;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1063:87:9;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;296:28:8;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1241:545;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;419:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;837:396;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;459:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3178:155:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2045:95:8;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;619:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;331:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3405:168:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3645:401;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1972:201:9;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2184:231:2;2270:7;2317:1;2298:21;;:7;:21;;;2290:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;2385:9;:13;2395:2;2385:13;;;;;;;;;;;:22;2399:7;2385:22;;;;;;;;;;;;;;;;2378:29;;2184:231;;;;:::o;1207:310::-;1309:4;1361:26;1346:41;;;:11;:41;;;;:110;;;;1419:37;1404:52;;;:11;:52;;;;1346:110;:163;;;;1473:36;1497:11;1473:23;:36::i;:::-;1346:163;1326:183;;1207:310;;;:::o;259:30:8:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1794:243::-;1863:22;1898;1923:10;:20;1934:8;1923:20;;;;;;;;;;;1898:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1986:1;1967:8;1961:22;:26;:68;;;;;;;;;;;;;;;;;2014:8;1997:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;1961:68;1954:75;;;1794:243;;;:::o;374:38::-;;;;:::o;4123:442:2:-;4364:12;:10;:12::i;:::-;4356:20;;:4;:20;;;:60;;;;4380:36;4397:4;4403:12;:10;:12::i;:::-;4380:16;:36::i;:::-;4356:60;4334:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;4505:52;4528:4;4534:2;4538:3;4543:7;4552:4;4505:22;:52::i;:::-;4123:442;;;;;:::o;2296:142:8:-;1294:12:9;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2346:15:8::1;2364:21;2346:39;;2404:7;:5;:7::i;:::-;2396:25;;:34;2422:7;2396:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;2335:103;2296:142::o:0;2581:524:2:-;2737:16;2798:3;:10;2779:8;:15;:29;2771:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;2867:30;2914:8;:15;2900:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2867:63;;2948:9;2943:122;2967:8;:15;2963:1;:19;2943:122;;;3023:30;3033:8;3042:1;3033:11;;;;;;;;:::i;:::-;;;;;;;;3046:3;3050:1;3046:6;;;;;;;;:::i;:::-;;;;;;;;3023:9;:30::i;:::-;3004:13;3018:1;3004:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;2984:3;;;;:::i;:::-;;;2943:122;;;;3084:13;3077:20;;;2581:524;;;;:::o;231:21:8:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1714:103:9:-;1294:12;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1779:30:::1;1806:1;1779:18;:30::i;:::-;1714:103::o:0;2150:138:8:-;1294:12:9;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2269:11:8::1;2246:10;:20;2257:8;2246:20;;;;;;;;;;;:34;;;;;;:::i;:::-;;2150:138:::0;;:::o;1063:87:9:-;1109:7;1136:6;;;;;;;;;;;1129:13;;1063:87;:::o;296:28:8:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1241:545::-;1282:7;1302:24;1347:23;;1329:15;:41;;;;:::i;:::-;1302:68;;497:7;1387:16;:30;1383:396;;;1456:3;1450:2;1442:5;;:10;;;;:::i;:::-;1441:18;;;;:::i;:::-;1434:25;;;;;1383:396;497:7;1517:1;:15;;;;:::i;:::-;1498:16;:34;1494:285;;;1571:3;1565:2;1557:5;;:10;;;;:::i;:::-;1556:18;;;;:::i;:::-;1549:25;;;;;1494:285;497:7;1632:1;:15;;;;:::i;:::-;1613:16;:34;1609:170;;;1686:3;1680:2;1672:5;;:10;;;;:::i;:::-;1671:18;;;;:::i;:::-;1664:25;;;;;1609:170;1746:5;;1739:12;;;1241:545;;:::o;419:33::-;;;;:::o;837:396::-;923:4;906:14;;:21;898:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;993:5;;979:10;:8;:10::i;:::-;:19;971:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;1065:9;1052:10;:8;:10::i;:::-;:22;;;;:::i;:::-;1039:9;:35;1031:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1130:1;1118:9;:13;1110:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;1177:48;1183:10;1195:14;;1211:9;1177:48;;;;;;;;;;;;:5;:48::i;:::-;837:396;:::o;459:45::-;497:7;459:45;:::o;3178:155:2:-;3273:52;3292:12;:10;:12::i;:::-;3306:8;3316;3273:18;:52::i;:::-;3178:155;;:::o;2045:95:8:-;1294:12:9;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2123:9:8::1;2115:5;:17;;;;2045:95:::0;:::o;619:211::-;1294:12:9;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;718:1:8::1;700:14;;:19;;;;;;;:::i;:::-;;;;;;;;756:15;730:23;:41;;;;811:11;782:10;:26;793:14;;782:26;;;;;;;;;;;:40;;;;;;:::i;:::-;;619:211:::0;:::o;331:36::-;;;;:::o;3405:168:2:-;3504:4;3528:18;:27;3547:7;3528:27;;;;;;;;;;;;;;;:37;3556:8;3528:37;;;;;;;;;;;;;;;;;;;;;;;;;3521:44;;3405:168;;;;:::o;3645:401::-;3861:12;:10;:12::i;:::-;3853:20;;:4;:20;;;:60;;;;3877:36;3894:4;3900:12;:10;:12::i;:::-;3877:16;:36::i;:::-;3853:60;3831:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;3993:45;4011:4;4017:2;4021;4025:6;4033:4;3993:17;:45::i;:::-;3645:401;;;;;:::o;1972:201:9:-;1294:12;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2081:1:::1;2061:22;;:8;:22;;::::0;2053:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;2137:28;2156:8;2137:18;:28::i;:::-;1972:201:::0;:::o;854:157:3:-;939:4;978:25;963:40;;;:11;:40;;;;956:47;;854:157;;;:::o;656:98:1:-;709:7;736:10;729:17;;656:98;:::o;6207:1074:2:-;6434:7;:14;6420:3;:10;:28;6412:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;6526:1;6512:16;;:2;:16;;;6504:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;6583:16;6602:12;:10;:12::i;:::-;6583:31;;6627:60;6648:8;6658:4;6664:2;6668:3;6673:7;6682:4;6627:20;:60::i;:::-;6705:9;6700:421;6724:3;:10;6720:1;:14;6700:421;;;6756:10;6769:3;6773:1;6769:6;;;;;;;;:::i;:::-;;;;;;;;6756:19;;6790:14;6807:7;6815:1;6807:10;;;;;;;;:::i;:::-;;;;;;;;6790:27;;6834:19;6856:9;:13;6866:2;6856:13;;;;;;;;;;;:19;6870:4;6856:19;;;;;;;;;;;;;;;;6834:41;;6913:6;6898:11;:21;;6890:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;7046:6;7032:11;:20;7010:9;:13;7020:2;7010:13;;;;;;;;;;;:19;7024:4;7010:19;;;;;;;;;;;;;;;:42;;;;7103:6;7082:9;:13;7092:2;7082:13;;;;;;;;;;;:17;7096:2;7082:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;6741:380;;;6736:3;;;;:::i;:::-;;;6700:421;;;;7168:2;7138:47;;7162:4;7138:47;;7152:8;7138:47;;;7172:3;7177:7;7138:47;;;;;;;:::i;:::-;;;;;;;;7198:75;7234:8;7244:4;7250:2;7254:3;7259:7;7268:4;7198:35;:75::i;:::-;6401:880;6207:1074;;;;;:::o;2333:191:9:-;2407:16;2426:6;;;;;;;;;;;2407:25;;2452:8;2443:6;;:17;;;;;;;;;;;;;;;;;;2507:8;2476:40;;2497:8;2476:40;;;;;;;;;;;;2396:128;2333:191;:::o;8599:569:2:-;8766:1;8752:16;;:2;:16;;;8744:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;8819:16;8838:12;:10;:12::i;:::-;8819:31;;8863:102;8884:8;8902:1;8906:2;8910:21;8928:2;8910:17;:21::i;:::-;8933:25;8951:6;8933:17;:25::i;:::-;8960:4;8863:20;:102::i;:::-;8999:6;8978:9;:13;8988:2;8978:13;;;;;;;;;;;:17;8992:2;8978:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;9058:2;9021:52;;9054:1;9021:52;;9036:8;9021:52;;;9062:2;9066:6;9021:52;;;;;;;:::i;:::-;;;;;;;;9086:74;9117:8;9135:1;9139:2;9143;9147:6;9155:4;9086:30;:74::i;:::-;8733:435;8599:569;;;;:::o;12393:331::-;12548:8;12539:17;;:5;:17;;;12531:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12651:8;12613:18;:25;12632:5;12613:25;;;;;;;;;;;;;;;:35;12639:8;12613:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;12697:8;12675:41;;12690:5;12675:41;;;12707:8;12675:41;;;;;;:::i;:::-;;;;;;;;12393:331;;;:::o;5029:820::-;5231:1;5217:16;;:2;:16;;;5209:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;5288:16;5307:12;:10;:12::i;:::-;5288:31;;5332:96;5353:8;5363:4;5369:2;5373:21;5391:2;5373:17;:21::i;:::-;5396:25;5414:6;5396:17;:25::i;:::-;5423:4;5332:20;:96::i;:::-;5441:19;5463:9;:13;5473:2;5463:13;;;;;;;;;;;:19;5477:4;5463:19;;;;;;;;;;;;;;;;5441:41;;5516:6;5501:11;:21;;5493:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;5641:6;5627:11;:20;5605:9;:13;5615:2;5605:13;;;;;;;;;;;:19;5619:4;5605:19;;;;;;;;;;;;;;;:42;;;;5690:6;5669:9;:13;5679:2;5669:13;;;;;;;;;;;:17;5683:2;5669:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;5745:2;5714:46;;5739:4;5714:46;;5729:8;5714:46;;;5749:2;5753:6;5714:46;;;;;;;:::i;:::-;;;;;;;;5773:68;5804:8;5814:4;5820:2;5824;5828:6;5836:4;5773:30;:68::i;:::-;5198:651;;5029:820;;;;;:::o;13680:221::-;;;;;;;:::o;14661:813::-;14901:15;:2;:13;;;:15::i;:::-;14897:570;;;14954:2;14937:43;;;14981:8;14991:4;14997:3;15002:7;15011:4;14937:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;14933:523;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;15329:6;15322:14;;;;;;;;;;;:::i;:::-;;;;;;;;14933:523;;;15378:62;;;;;;;;;;:::i;:::-;;;;;;;;14933:523;15110:48;;;15098:60;;;:8;:60;;;;15094:159;;15183:50;;;;;;;;;;:::i;:::-;;;;;;;;15094:159;15017:251;14897:570;14661:813;;;;;;:::o;15482:198::-;15548:16;15577:22;15616:1;15602:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15577:41;;15640:7;15629:5;15635:1;15629:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;15667:5;15660:12;;;15482:198;;;:::o;13909:744::-;14124:15;:2;:13;;;:15::i;:::-;14120:526;;;14177:2;14160:38;;;14199:8;14209:4;14215:2;14219:6;14227:4;14160:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;14156:479;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;14508:6;14501:14;;;;;;;;;;;:::i;:::-;;;;;;;;14156:479;;;14557:62;;;;;;;;;;:::i;:::-;;;;;;;;14156:479;14294:43;;;14282:55;;;:8;:55;;;;14278:154;;14362:50;;;;;;;;;;:::i;:::-;;;;;;;;14278:154;14233:214;14120:526;13909:744;;;;;;:::o;1210:326:0:-;1270:4;1527:1;1505:7;:19;;;:23;1498:30;;1210:326;;;:::o;7:75:11:-;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:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:77::-;878:7;907:5;896:16;;841:77;;;:::o;924:122::-;997:24;1015:5;997:24;:::i;:::-;990:5;987:35;977:63;;1036:1;1033;1026:12;977:63;924:122;:::o;1052:139::-;1098:5;1136:6;1123:20;1114:29;;1152:33;1179:5;1152:33;:::i;:::-;1052:139;;;;:::o;1197:474::-;1265:6;1273;1322:2;1310:9;1301:7;1297:23;1293:32;1290:119;;;1328:79;;:::i;:::-;1290:119;1448:1;1473:53;1518:7;1509:6;1498:9;1494:22;1473:53;:::i;:::-;1463:63;;1419:117;1575:2;1601:53;1646:7;1637:6;1626:9;1622:22;1601:53;:::i;:::-;1591:63;;1546:118;1197:474;;;;;:::o;1677:118::-;1764:24;1782:5;1764:24;:::i;:::-;1759:3;1752:37;1677:118;;:::o;1801:222::-;1894:4;1932:2;1921:9;1917:18;1909:26;;1945:71;2013:1;2002:9;1998:17;1989:6;1945:71;:::i;:::-;1801:222;;;;:::o;2029:149::-;2065:7;2105:66;2098:5;2094:78;2083:89;;2029:149;;;:::o;2184:120::-;2256:23;2273:5;2256:23;:::i;:::-;2249:5;2246:34;2236:62;;2294:1;2291;2284:12;2236:62;2184:120;:::o;2310:137::-;2355:5;2393:6;2380:20;2371:29;;2409:32;2435:5;2409:32;:::i;:::-;2310:137;;;;:::o;2453:327::-;2511:6;2560:2;2548:9;2539:7;2535:23;2531:32;2528:119;;;2566:79;;:::i;:::-;2528:119;2686:1;2711:52;2755:7;2746:6;2735:9;2731:22;2711:52;:::i;:::-;2701:62;;2657:116;2453:327;;;;:::o;2786:90::-;2820:7;2863:5;2856:13;2849:21;2838:32;;2786:90;;;:::o;2882:109::-;2963:21;2978:5;2963:21;:::i;:::-;2958:3;2951:34;2882:109;;:::o;2997:210::-;3084:4;3122:2;3111:9;3107:18;3099:26;;3135:65;3197:1;3186:9;3182:17;3173:6;3135:65;:::i;:::-;2997:210;;;;:::o;3213:99::-;3265:6;3299:5;3293:12;3283:22;;3213:99;;;:::o;3318:169::-;3402:11;3436:6;3431:3;3424:19;3476:4;3471:3;3467:14;3452:29;;3318:169;;;;:::o;3493:246::-;3574:1;3584:113;3598:6;3595:1;3592:13;3584:113;;;3683:1;3678:3;3674:11;3668:18;3664:1;3659:3;3655:11;3648:39;3620:2;3617:1;3613:10;3608:15;;3584:113;;;3731:1;3722:6;3717:3;3713:16;3706:27;3555:184;3493:246;;;:::o;3745:102::-;3786:6;3837:2;3833:7;3828:2;3821:5;3817:14;3813:28;3803:38;;3745:102;;;:::o;3853:377::-;3941:3;3969:39;4002:5;3969:39;:::i;:::-;4024:71;4088:6;4083:3;4024:71;:::i;:::-;4017:78;;4104:65;4162:6;4157:3;4150:4;4143:5;4139:16;4104:65;:::i;:::-;4194:29;4216:6;4194:29;:::i;:::-;4189:3;4185:39;4178:46;;3945:285;3853:377;;;;:::o;4236:313::-;4349:4;4387:2;4376:9;4372:18;4364:26;;4436:9;4430:4;4426:20;4422:1;4411:9;4407:17;4400:47;4464:78;4537:4;4528:6;4464:78;:::i;:::-;4456:86;;4236:313;;;;:::o;4555:329::-;4614:6;4663:2;4651:9;4642:7;4638:23;4634:32;4631:119;;;4669:79;;:::i;:::-;4631:119;4789:1;4814:53;4859:7;4850:6;4839:9;4835:22;4814:53;:::i;:::-;4804:63;;4760:117;4555:329;;;;:::o;4890:117::-;4999:1;4996;4989:12;5013:180;5061:77;5058:1;5051:88;5158:4;5155:1;5148:15;5182:4;5179:1;5172:15;5199:281;5282:27;5304:4;5282:27;:::i;:::-;5274:6;5270:40;5412:6;5400:10;5397:22;5376:18;5364:10;5361:34;5358:62;5355:88;;;5423:18;;:::i;:::-;5355:88;5463:10;5459:2;5452:22;5242:238;5199:281;;:::o;5486:129::-;5520:6;5547:20;;:::i;:::-;5537:30;;5576:33;5604:4;5596:6;5576:33;:::i;:::-;5486:129;;;:::o;5621:311::-;5698:4;5788:18;5780:6;5777:30;5774:56;;;5810:18;;:::i;:::-;5774:56;5860:4;5852:6;5848:17;5840:25;;5920:4;5914;5910:15;5902:23;;5621:311;;;:::o;5938:117::-;6047:1;6044;6037:12;6078:710;6174:5;6199:81;6215:64;6272:6;6215:64;:::i;:::-;6199:81;:::i;:::-;6190:90;;6300:5;6329:6;6322:5;6315:21;6363:4;6356:5;6352:16;6345:23;;6416:4;6408:6;6404:17;6396:6;6392:30;6445:3;6437:6;6434:15;6431:122;;;6464:79;;:::i;:::-;6431:122;6579:6;6562:220;6596:6;6591:3;6588:15;6562:220;;;6671:3;6700:37;6733:3;6721:10;6700:37;:::i;:::-;6695:3;6688:50;6767:4;6762:3;6758:14;6751:21;;6638:144;6622:4;6617:3;6613:14;6606:21;;6562:220;;;6566:21;6180:608;;6078:710;;;;;:::o;6811:370::-;6882:5;6931:3;6924:4;6916:6;6912:17;6908:27;6898:122;;6939:79;;:::i;:::-;6898:122;7056:6;7043:20;7081:94;7171:3;7163:6;7156:4;7148:6;7144:17;7081:94;:::i;:::-;7072:103;;6888:293;6811:370;;;;:::o;7187:117::-;7296:1;7293;7286:12;7310:307;7371:4;7461:18;7453:6;7450:30;7447:56;;;7483:18;;:::i;:::-;7447:56;7521:29;7543:6;7521:29;:::i;:::-;7513:37;;7605:4;7599;7595:15;7587:23;;7310:307;;;:::o;7623:146::-;7720:6;7715:3;7710;7697:30;7761:1;7752:6;7747:3;7743:16;7736:27;7623:146;;;:::o;7775:423::-;7852:5;7877:65;7893:48;7934:6;7893:48;:::i;:::-;7877:65;:::i;:::-;7868:74;;7965:6;7958:5;7951:21;8003:4;7996:5;7992:16;8041:3;8032:6;8027:3;8023:16;8020:25;8017:112;;;8048:79;;:::i;:::-;8017:112;8138:54;8185:6;8180:3;8175;8138:54;:::i;:::-;7858:340;7775:423;;;;;:::o;8217:338::-;8272:5;8321:3;8314:4;8306:6;8302:17;8298:27;8288:122;;8329:79;;:::i;:::-;8288:122;8446:6;8433:20;8471:78;8545:3;8537:6;8530:4;8522:6;8518:17;8471:78;:::i;:::-;8462:87;;8278:277;8217:338;;;;:::o;8561:1509::-;8715:6;8723;8731;8739;8747;8796:3;8784:9;8775:7;8771:23;8767:33;8764:120;;;8803:79;;:::i;:::-;8764:120;8923:1;8948:53;8993:7;8984:6;8973:9;8969:22;8948:53;:::i;:::-;8938:63;;8894:117;9050:2;9076:53;9121:7;9112:6;9101:9;9097:22;9076:53;:::i;:::-;9066:63;;9021:118;9206:2;9195:9;9191:18;9178:32;9237:18;9229:6;9226:30;9223:117;;;9259:79;;:::i;:::-;9223:117;9364:78;9434:7;9425:6;9414:9;9410:22;9364:78;:::i;:::-;9354:88;;9149:303;9519:2;9508:9;9504:18;9491:32;9550:18;9542:6;9539:30;9536:117;;;9572:79;;:::i;:::-;9536:117;9677:78;9747:7;9738:6;9727:9;9723:22;9677:78;:::i;:::-;9667:88;;9462:303;9832:3;9821:9;9817:19;9804:33;9864:18;9856:6;9853:30;9850:117;;;9886:79;;:::i;:::-;9850:117;9991:62;10045:7;10036:6;10025:9;10021:22;9991:62;:::i;:::-;9981:72;;9775:288;8561:1509;;;;;;;;:::o;10076:311::-;10153:4;10243:18;10235:6;10232:30;10229:56;;;10265:18;;:::i;:::-;10229:56;10315:4;10307:6;10303:17;10295:25;;10375:4;10369;10365:15;10357:23;;10076:311;;;:::o;10410:710::-;10506:5;10531:81;10547:64;10604:6;10547:64;:::i;:::-;10531:81;:::i;:::-;10522:90;;10632:5;10661:6;10654:5;10647:21;10695:4;10688:5;10684:16;10677:23;;10748:4;10740:6;10736:17;10728:6;10724:30;10777:3;10769:6;10766:15;10763:122;;;10796:79;;:::i;:::-;10763:122;10911:6;10894:220;10928:6;10923:3;10920:15;10894:220;;;11003:3;11032:37;11065:3;11053:10;11032:37;:::i;:::-;11027:3;11020:50;11099:4;11094:3;11090:14;11083:21;;10970:144;10954:4;10949:3;10945:14;10938:21;;10894:220;;;10898:21;10512:608;;10410:710;;;;;:::o;11143:370::-;11214:5;11263:3;11256:4;11248:6;11244:17;11240:27;11230:122;;11271:79;;:::i;:::-;11230:122;11388:6;11375:20;11413:94;11503:3;11495:6;11488:4;11480:6;11476:17;11413:94;:::i;:::-;11404:103;;11220:293;11143:370;;;;:::o;11519:894::-;11637:6;11645;11694:2;11682:9;11673:7;11669:23;11665:32;11662:119;;;11700:79;;:::i;:::-;11662:119;11848:1;11837:9;11833:17;11820:31;11878:18;11870:6;11867:30;11864:117;;;11900:79;;:::i;:::-;11864:117;12005:78;12075:7;12066:6;12055:9;12051:22;12005:78;:::i;:::-;11995:88;;11791:302;12160:2;12149:9;12145:18;12132:32;12191:18;12183:6;12180:30;12177:117;;;12213:79;;:::i;:::-;12177:117;12318:78;12388:7;12379:6;12368:9;12364:22;12318:78;:::i;:::-;12308:88;;12103:303;11519:894;;;;;:::o;12419:114::-;12486:6;12520:5;12514:12;12504:22;;12419:114;;;:::o;12539:184::-;12638:11;12672:6;12667:3;12660:19;12712:4;12707:3;12703:14;12688:29;;12539:184;;;;:::o;12729:132::-;12796:4;12819:3;12811:11;;12849:4;12844:3;12840:14;12832:22;;12729:132;;;:::o;12867:108::-;12944:24;12962:5;12944:24;:::i;:::-;12939:3;12932:37;12867:108;;:::o;12981:179::-;13050:10;13071:46;13113:3;13105:6;13071:46;:::i;:::-;13149:4;13144:3;13140:14;13126:28;;12981:179;;;;:::o;13166:113::-;13236:4;13268;13263:3;13259:14;13251:22;;13166:113;;;:::o;13315:732::-;13434:3;13463:54;13511:5;13463:54;:::i;:::-;13533:86;13612:6;13607:3;13533:86;:::i;:::-;13526:93;;13643:56;13693:5;13643:56;:::i;:::-;13722:7;13753:1;13738:284;13763:6;13760:1;13757:13;13738:284;;;13839:6;13833:13;13866:63;13925:3;13910:13;13866:63;:::i;:::-;13859:70;;13952:60;14005:6;13952:60;:::i;:::-;13942:70;;13798:224;13785:1;13782;13778:9;13773:14;;13738:284;;;13742:14;14038:3;14031:10;;13439:608;;;13315:732;;;;:::o;14053:373::-;14196:4;14234:2;14223:9;14219:18;14211:26;;14283:9;14277:4;14273:20;14269:1;14258:9;14254:17;14247:47;14311:108;14414:4;14405:6;14311:108;:::i;:::-;14303:116;;14053:373;;;;:::o;14432:308::-;14494:4;14584:18;14576:6;14573:30;14570:56;;;14606:18;;:::i;:::-;14570:56;14644:29;14666:6;14644:29;:::i;:::-;14636:37;;14728:4;14722;14718:15;14710:23;;14432:308;;;:::o;14746:425::-;14824:5;14849:66;14865:49;14907:6;14865:49;:::i;:::-;14849:66;:::i;:::-;14840:75;;14938:6;14931:5;14924:21;14976:4;14969:5;14965:16;15014:3;15005:6;15000:3;14996:16;14993:25;14990:112;;;15021:79;;:::i;:::-;14990:112;15111:54;15158:6;15153:3;15148;15111:54;:::i;:::-;14830:341;14746:425;;;;;:::o;15191:340::-;15247:5;15296:3;15289:4;15281:6;15277:17;15273:27;15263:122;;15304:79;;:::i;:::-;15263:122;15421:6;15408:20;15446:79;15521:3;15513:6;15506:4;15498:6;15494:17;15446:79;:::i;:::-;15437:88;;15253:278;15191:340;;;;:::o;15537:654::-;15615:6;15623;15672:2;15660:9;15651:7;15647:23;15643:32;15640:119;;;15678:79;;:::i;:::-;15640:119;15798:1;15823:53;15868:7;15859:6;15848:9;15844:22;15823:53;:::i;:::-;15813:63;;15769:117;15953:2;15942:9;15938:18;15925:32;15984:18;15976:6;15973:30;15970:117;;;16006:79;;:::i;:::-;15970:117;16111:63;16166:7;16157:6;16146:9;16142:22;16111:63;:::i;:::-;16101:73;;15896:288;15537:654;;;;;:::o;16197:118::-;16284:24;16302:5;16284:24;:::i;:::-;16279:3;16272:37;16197:118;;:::o;16321:222::-;16414:4;16452:2;16441:9;16437:18;16429:26;;16465:71;16533:1;16522:9;16518:17;16509:6;16465:71;:::i;:::-;16321:222;;;;:::o;16549:116::-;16619:21;16634:5;16619:21;:::i;:::-;16612:5;16609:32;16599:60;;16655:1;16652;16645:12;16599:60;16549:116;:::o;16671:133::-;16714:5;16752:6;16739:20;16730:29;;16768:30;16792:5;16768:30;:::i;:::-;16671:133;;;;:::o;16810:468::-;16875:6;16883;16932:2;16920:9;16911:7;16907:23;16903:32;16900:119;;;16938:79;;:::i;:::-;16900:119;17058:1;17083:53;17128:7;17119:6;17108:9;17104:22;17083:53;:::i;:::-;17073:63;;17029:117;17185:2;17211:50;17253:7;17244:6;17233:9;17229:22;17211:50;:::i;:::-;17201:60;;17156:115;16810:468;;;;;:::o;17284:509::-;17353:6;17402:2;17390:9;17381:7;17377:23;17373:32;17370:119;;;17408:79;;:::i;:::-;17370:119;17556:1;17545:9;17541:17;17528:31;17586:18;17578:6;17575:30;17572:117;;;17608:79;;:::i;:::-;17572:117;17713:63;17768:7;17759:6;17748:9;17744:22;17713:63;:::i;:::-;17703:73;;17499:287;17284:509;;;;:::o;17799:474::-;17867:6;17875;17924:2;17912:9;17903:7;17899:23;17895:32;17892:119;;;17930:79;;:::i;:::-;17892:119;18050:1;18075:53;18120:7;18111:6;18100:9;18096:22;18075:53;:::i;:::-;18065:63;;18021:117;18177:2;18203:53;18248:7;18239:6;18228:9;18224:22;18203:53;:::i;:::-;18193:63;;18148:118;17799:474;;;;;:::o;18279:1089::-;18383:6;18391;18399;18407;18415;18464:3;18452:9;18443:7;18439:23;18435:33;18432:120;;;18471:79;;:::i;:::-;18432:120;18591:1;18616:53;18661:7;18652:6;18641:9;18637:22;18616:53;:::i;:::-;18606:63;;18562:117;18718:2;18744:53;18789:7;18780:6;18769:9;18765:22;18744:53;:::i;:::-;18734:63;;18689:118;18846:2;18872:53;18917:7;18908:6;18897:9;18893:22;18872:53;:::i;:::-;18862:63;;18817:118;18974:2;19000:53;19045:7;19036:6;19025:9;19021:22;19000:53;:::i;:::-;18990:63;;18945:118;19130:3;19119:9;19115:19;19102:33;19162:18;19154:6;19151:30;19148:117;;;19184:79;;:::i;:::-;19148:117;19289:62;19343:7;19334:6;19323:9;19319:22;19289:62;:::i;:::-;19279:72;;19073:288;18279:1089;;;;;;;;:::o;19374:329::-;19433:6;19482:2;19470:9;19461:7;19457:23;19453:32;19450:119;;;19488:79;;:::i;:::-;19450:119;19608:1;19633:53;19678:7;19669:6;19658:9;19654:22;19633:53;:::i;:::-;19623:63;;19579:117;19374:329;;;;:::o;19709:230::-;19849:34;19845:1;19837:6;19833:14;19826:58;19918:13;19913:2;19905:6;19901:15;19894:38;19709:230;:::o;19945:366::-;20087:3;20108:67;20172:2;20167:3;20108:67;:::i;:::-;20101:74;;20184:93;20273:3;20184:93;:::i;:::-;20302:2;20297:3;20293:12;20286:19;;19945:366;;;:::o;20317:419::-;20483:4;20521:2;20510:9;20506:18;20498:26;;20570:9;20564:4;20560:20;20556:1;20545:9;20541:17;20534:47;20598:131;20724:4;20598:131;:::i;:::-;20590:139;;20317:419;;;:::o;20742:180::-;20790:77;20787:1;20780:88;20887:4;20884:1;20877:15;20911:4;20908:1;20901:15;20928:320;20972:6;21009:1;21003:4;20999:12;20989:22;;21056:1;21050:4;21046:12;21077:18;21067:81;;21133:4;21125:6;21121:17;21111:27;;21067:81;21195:2;21187:6;21184:14;21164:18;21161:38;21158:84;;21214:18;;:::i;:::-;21158:84;20979:269;20928:320;;;:::o;21254:148::-;21356:11;21393:3;21378:18;;21254:148;;;;:::o;21408:390::-;21514:3;21542:39;21575:5;21542:39;:::i;:::-;21597:89;21679:6;21674:3;21597:89;:::i;:::-;21590:96;;21695:65;21753:6;21748:3;21741:4;21734:5;21730:16;21695:65;:::i;:::-;21785:6;21780:3;21776:16;21769:23;;21518:280;21408:390;;;;:::o;21804:275::-;21936:3;21958:95;22049:3;22040:6;21958:95;:::i;:::-;21951:102;;22070:3;22063:10;;21804:275;;;;:::o;22085:237::-;22225:34;22221:1;22213:6;22209:14;22202:58;22294:20;22289:2;22281:6;22277:15;22270:45;22085:237;:::o;22328:366::-;22470:3;22491:67;22555:2;22550:3;22491:67;:::i;:::-;22484:74;;22567:93;22656:3;22567:93;:::i;:::-;22685:2;22680:3;22676:12;22669:19;;22328:366;;;:::o;22700:419::-;22866:4;22904:2;22893:9;22889:18;22881:26;;22953:9;22947:4;22943:20;22939:1;22928:9;22924:17;22917:47;22981:131;23107:4;22981:131;:::i;:::-;22973:139;;22700:419;;;:::o;23125:182::-;23265:34;23261:1;23253:6;23249:14;23242:58;23125:182;:::o;23313:366::-;23455:3;23476:67;23540:2;23535:3;23476:67;:::i;:::-;23469:74;;23552:93;23641:3;23552:93;:::i;:::-;23670:2;23665:3;23661:12;23654:19;;23313:366;;;:::o;23685:419::-;23851:4;23889:2;23878:9;23874:18;23866:26;;23938:9;23932:4;23928:20;23924:1;23913:9;23909:17;23902:47;23966:131;24092:4;23966:131;:::i;:::-;23958:139;;23685:419;;;:::o;24110:228::-;24250:34;24246:1;24238:6;24234:14;24227:58;24319:11;24314:2;24306:6;24302:15;24295:36;24110:228;:::o;24344:366::-;24486:3;24507:67;24571:2;24566:3;24507:67;:::i;:::-;24500:74;;24583:93;24672:3;24583:93;:::i;:::-;24701:2;24696:3;24692:12;24685:19;;24344:366;;;:::o;24716:419::-;24882:4;24920:2;24909:9;24905:18;24897:26;;24969:9;24963:4;24959:20;24955:1;24944:9;24940:17;24933:47;24997:131;25123:4;24997:131;:::i;:::-;24989:139;;24716:419;;;:::o;25141:180::-;25189:77;25186:1;25179:88;25286:4;25283:1;25276:15;25310:4;25307:1;25300:15;25327:180;25375:77;25372:1;25365:88;25472:4;25469:1;25462:15;25496:4;25493:1;25486:15;25513:233;25552:3;25575:24;25593:5;25575:24;:::i;:::-;25566:33;;25621:66;25614:5;25611:77;25608:103;;25691:18;;:::i;:::-;25608:103;25738:1;25731:5;25727:13;25720:20;;25513:233;;;:::o;25752:141::-;25801:4;25824:3;25816:11;;25847:3;25844:1;25837:14;25881:4;25878:1;25868:18;25860:26;;25752:141;;;:::o;25899:93::-;25936:6;25983:2;25978;25971:5;25967:14;25963:23;25953:33;;25899:93;;;:::o;25998:107::-;26042:8;26092:5;26086:4;26082:16;26061:37;;25998:107;;;;:::o;26111:393::-;26180:6;26230:1;26218:10;26214:18;26253:97;26283:66;26272:9;26253:97;:::i;:::-;26371:39;26401:8;26390:9;26371:39;:::i;:::-;26359:51;;26443:4;26439:9;26432:5;26428:21;26419:30;;26492:4;26482:8;26478:19;26471:5;26468:30;26458:40;;26187:317;;26111:393;;;;;:::o;26510:60::-;26538:3;26559:5;26552:12;;26510:60;;;:::o;26576:142::-;26626:9;26659:53;26677:34;26686:24;26704:5;26686:24;:::i;:::-;26677:34;:::i;:::-;26659:53;:::i;:::-;26646:66;;26576:142;;;:::o;26724:75::-;26767:3;26788:5;26781:12;;26724:75;;;:::o;26805:269::-;26915:39;26946:7;26915:39;:::i;:::-;26976:91;27025:41;27049:16;27025:41;:::i;:::-;27017:6;27010:4;27004:11;26976:91;:::i;:::-;26970:4;26963:105;26881:193;26805:269;;;:::o;27080:73::-;27125:3;27080:73;:::o;27159:189::-;27236:32;;:::i;:::-;27277:65;27335:6;27327;27321:4;27277:65;:::i;:::-;27212:136;27159:189;;:::o;27354:186::-;27414:120;27431:3;27424:5;27421:14;27414:120;;;27485:39;27522:1;27515:5;27485:39;:::i;:::-;27458:1;27451:5;27447:13;27438:22;;27414:120;;;27354:186;;:::o;27546:543::-;27647:2;27642:3;27639:11;27636:446;;;27681:38;27713:5;27681:38;:::i;:::-;27765:29;27783:10;27765:29;:::i;:::-;27755:8;27751:44;27948:2;27936:10;27933:18;27930:49;;;27969:8;27954:23;;27930:49;27992:80;28048:22;28066:3;28048:22;:::i;:::-;28038:8;28034:37;28021:11;27992:80;:::i;:::-;27651:431;;27636:446;27546:543;;;:::o;28095:117::-;28149:8;28199:5;28193:4;28189:16;28168:37;;28095:117;;;;:::o;28218:169::-;28262:6;28295:51;28343:1;28339:6;28331:5;28328:1;28324:13;28295:51;:::i;:::-;28291:56;28376:4;28370;28366:15;28356:25;;28269:118;28218:169;;;;:::o;28392:295::-;28468:4;28614:29;28639:3;28633:4;28614:29;:::i;:::-;28606:37;;28676:3;28673:1;28669:11;28663:4;28660:21;28652:29;;28392:295;;;;:::o;28692:1395::-;28809:37;28842:3;28809:37;:::i;:::-;28911:18;28903:6;28900:30;28897:56;;;28933:18;;:::i;:::-;28897:56;28977:38;29009:4;29003:11;28977:38;:::i;:::-;29062:67;29122:6;29114;29108:4;29062:67;:::i;:::-;29156:1;29180:4;29167:17;;29212:2;29204:6;29201:14;29229:1;29224:618;;;;29886:1;29903:6;29900:77;;;29952:9;29947:3;29943:19;29937:26;29928:35;;29900:77;30003:67;30063:6;30056:5;30003:67;:::i;:::-;29997:4;29990:81;29859:222;29194:887;;29224:618;29276:4;29272:9;29264:6;29260:22;29310:37;29342:4;29310:37;:::i;:::-;29369:1;29383:208;29397:7;29394:1;29391:14;29383:208;;;29476:9;29471:3;29467:19;29461:26;29453:6;29446:42;29527:1;29519:6;29515:14;29505:24;;29574:2;29563:9;29559:18;29546:31;;29420:4;29417:1;29413:12;29408:17;;29383:208;;;29619:6;29610:7;29607:19;29604:179;;;29677:9;29672:3;29668:19;29662:26;29720:48;29762:4;29754:6;29750:17;29739:9;29720:48;:::i;:::-;29712:6;29705:64;29627:156;29604:179;29829:1;29825;29817:6;29813:14;29809:22;29803:4;29796:36;29231:611;;;29194:887;;28784:1303;;;28692:1395;;:::o;30093:194::-;30133:4;30153:20;30171:1;30153:20;:::i;:::-;30148:25;;30187:20;30205:1;30187:20;:::i;:::-;30182:25;;30231:1;30228;30224:9;30216:17;;30255:1;30249:4;30246:11;30243:37;;;30260:18;;:::i;:::-;30243:37;30093:194;;;;:::o;30293:410::-;30333:7;30356:20;30374:1;30356:20;:::i;:::-;30351:25;;30390:20;30408:1;30390:20;:::i;:::-;30385:25;;30445:1;30442;30438:9;30467:30;30485:11;30467:30;:::i;:::-;30456:41;;30646:1;30637:7;30633:15;30630:1;30627:22;30607:1;30600:9;30580:83;30557:139;;30676:18;;:::i;:::-;30557:139;30341:362;30293:410;;;;:::o;30709:180::-;30757:77;30754:1;30747:88;30854:4;30851:1;30844:15;30878:4;30875:1;30868:15;30895:185;30935:1;30952:20;30970:1;30952:20;:::i;:::-;30947:25;;30986:20;31004:1;30986:20;:::i;:::-;30981:25;;31025:1;31015:35;;31030:18;;:::i;:::-;31015:35;31072:1;31069;31065:9;31060:14;;30895:185;;;;:::o;31086:178::-;31226:30;31222:1;31214:6;31210:14;31203:54;31086:178;:::o;31270:366::-;31412:3;31433:67;31497:2;31492:3;31433:67;:::i;:::-;31426:74;;31509:93;31598:3;31509:93;:::i;:::-;31627:2;31622:3;31618:12;31611:19;;31270:366;;;:::o;31642:419::-;31808:4;31846:2;31835:9;31831:18;31823:26;;31895:9;31889:4;31885:20;31881:1;31870:9;31866:17;31859:47;31923:131;32049:4;31923:131;:::i;:::-;31915:139;;31642:419;;;:::o;32067:167::-;32207:19;32203:1;32195:6;32191:14;32184:43;32067:167;:::o;32240:366::-;32382:3;32403:67;32467:2;32462:3;32403:67;:::i;:::-;32396:74;;32479:93;32568:3;32479:93;:::i;:::-;32597:2;32592:3;32588:12;32581:19;;32240:366;;;:::o;32612:419::-;32778:4;32816:2;32805:9;32801:18;32793:26;;32865:9;32859:4;32855:20;32851:1;32840:9;32836:17;32829:47;32893:131;33019:4;32893:131;:::i;:::-;32885:139;;32612:419;;;:::o;33037:170::-;33177:22;33173:1;33165:6;33161:14;33154:46;33037:170;:::o;33213:366::-;33355:3;33376:67;33440:2;33435:3;33376:67;:::i;:::-;33369:74;;33452:93;33541:3;33452:93;:::i;:::-;33570:2;33565:3;33561:12;33554:19;;33213:366;;;:::o;33585:419::-;33751:4;33789:2;33778:9;33774:18;33766:26;;33838:9;33832:4;33828:20;33824:1;33813:9;33809:17;33802:47;33866:131;33992:4;33866:131;:::i;:::-;33858:139;;33585:419;;;:::o;34010:180::-;34150:32;34146:1;34138:6;34134:14;34127:56;34010:180;:::o;34196:366::-;34338:3;34359:67;34423:2;34418:3;34359:67;:::i;:::-;34352:74;;34435:93;34524:3;34435:93;:::i;:::-;34553:2;34548:3;34544:12;34537:19;;34196:366;;;:::o;34568:419::-;34734:4;34772:2;34761:9;34757:18;34749:26;;34821:9;34815:4;34811:20;34807:1;34796:9;34792:17;34785:47;34849:131;34975:4;34849:131;:::i;:::-;34841:139;;34568:419;;;:::o;34993:191::-;35033:3;35052:20;35070:1;35052:20;:::i;:::-;35047:25;;35086:20;35104:1;35086:20;:::i;:::-;35081:25;;35129:1;35126;35122:9;35115:16;;35150:3;35147:1;35144:10;35141:36;;;35157:18;;:::i;:::-;35141:36;34993:191;;;;:::o;35190:228::-;35330:34;35326:1;35318:6;35314:14;35307:58;35399:11;35394:2;35386:6;35382:15;35375:36;35190:228;:::o;35424:366::-;35566:3;35587:67;35651:2;35646:3;35587:67;:::i;:::-;35580:74;;35663:93;35752:3;35663:93;:::i;:::-;35781:2;35776:3;35772:12;35765:19;;35424:366;;;:::o;35796:419::-;35962:4;36000:2;35989:9;35985:18;35977:26;;36049:9;36043:4;36039:20;36035:1;36024:9;36020:17;36013:47;36077:131;36203:4;36077:131;:::i;:::-;36069:139;;35796:419;;;:::o;36221:225::-;36361:34;36357:1;36349:6;36345:14;36338:58;36430:8;36425:2;36417:6;36413:15;36406:33;36221:225;:::o;36452:366::-;36594:3;36615:67;36679:2;36674:3;36615:67;:::i;:::-;36608:74;;36691:93;36780:3;36691:93;:::i;:::-;36809:2;36804:3;36800:12;36793:19;;36452:366;;;:::o;36824:419::-;36990:4;37028:2;37017:9;37013:18;37005:26;;37077:9;37071:4;37067:20;37063:1;37052:9;37048:17;37041:47;37105:131;37231:4;37105:131;:::i;:::-;37097:139;;36824:419;;;:::o;37249:227::-;37389:34;37385:1;37377:6;37373:14;37366:58;37458:10;37453:2;37445:6;37441:15;37434:35;37249:227;:::o;37482:366::-;37624:3;37645:67;37709:2;37704:3;37645:67;:::i;:::-;37638:74;;37721:93;37810:3;37721:93;:::i;:::-;37839:2;37834:3;37830:12;37823:19;;37482:366;;;:::o;37854:419::-;38020:4;38058:2;38047:9;38043:18;38035:26;;38107:9;38101:4;38097:20;38093:1;38082:9;38078:17;38071:47;38135:131;38261:4;38135:131;:::i;:::-;38127:139;;37854:419;;;:::o;38279:224::-;38419:34;38415:1;38407:6;38403:14;38396:58;38488:7;38483:2;38475:6;38471:15;38464:32;38279:224;:::o;38509:366::-;38651:3;38672:67;38736:2;38731:3;38672:67;:::i;:::-;38665:74;;38748:93;38837:3;38748:93;:::i;:::-;38866:2;38861:3;38857:12;38850:19;;38509:366;;;:::o;38881:419::-;39047:4;39085:2;39074:9;39070:18;39062:26;;39134:9;39128:4;39124:20;39120:1;39109:9;39105:17;39098:47;39162:131;39288:4;39162:131;:::i;:::-;39154:139;;38881:419;;;:::o;39306:229::-;39446:34;39442:1;39434:6;39430:14;39423:58;39515:12;39510:2;39502:6;39498:15;39491:37;39306:229;:::o;39541:366::-;39683:3;39704:67;39768:2;39763:3;39704:67;:::i;:::-;39697:74;;39780:93;39869:3;39780:93;:::i;:::-;39898:2;39893:3;39889:12;39882:19;;39541:366;;;:::o;39913:419::-;40079:4;40117:2;40106:9;40102:18;40094:26;;40166:9;40160:4;40156:20;40152:1;40141:9;40137:17;40130:47;40194:131;40320:4;40194:131;:::i;:::-;40186:139;;39913:419;;;:::o;40338:634::-;40559:4;40597:2;40586:9;40582:18;40574:26;;40646:9;40640:4;40636:20;40632:1;40621:9;40617:17;40610:47;40674:108;40777:4;40768:6;40674:108;:::i;:::-;40666:116;;40829:9;40823:4;40819:20;40814:2;40803:9;40799:18;40792:48;40857:108;40960:4;40951:6;40857:108;:::i;:::-;40849:116;;40338:634;;;;;:::o;40978:220::-;41118:34;41114:1;41106:6;41102:14;41095:58;41187:3;41182:2;41174:6;41170:15;41163:28;40978:220;:::o;41204:366::-;41346:3;41367:67;41431:2;41426:3;41367:67;:::i;:::-;41360:74;;41443:93;41532:3;41443:93;:::i;:::-;41561:2;41556:3;41552:12;41545:19;;41204:366;;;:::o;41576:419::-;41742:4;41780:2;41769:9;41765:18;41757:26;;41829:9;41823:4;41819:20;41815:1;41804:9;41800:17;41793:47;41857:131;41983:4;41857:131;:::i;:::-;41849:139;;41576:419;;;:::o;42001:332::-;42122:4;42160:2;42149:9;42145:18;42137:26;;42173:71;42241:1;42230:9;42226:17;42217:6;42173:71;:::i;:::-;42254:72;42322:2;42311:9;42307:18;42298:6;42254:72;:::i;:::-;42001:332;;;;;:::o;42339:228::-;42479:34;42475:1;42467:6;42463:14;42456:58;42548:11;42543:2;42535:6;42531:15;42524:36;42339:228;:::o;42573:366::-;42715:3;42736:67;42800:2;42795:3;42736:67;:::i;:::-;42729:74;;42812:93;42901:3;42812:93;:::i;:::-;42930:2;42925:3;42921:12;42914:19;;42573:366;;;:::o;42945:419::-;43111:4;43149:2;43138:9;43134:18;43126:26;;43198:9;43192:4;43188:20;43184:1;43173:9;43169:17;43162:47;43226:131;43352:4;43226:131;:::i;:::-;43218:139;;42945:419;;;:::o;43370:98::-;43421:6;43455:5;43449:12;43439:22;;43370:98;;;:::o;43474:168::-;43557:11;43591:6;43586:3;43579:19;43631:4;43626:3;43622:14;43607:29;;43474:168;;;;:::o;43648:373::-;43734:3;43762:38;43794:5;43762:38;:::i;:::-;43816:70;43879:6;43874:3;43816:70;:::i;:::-;43809:77;;43895:65;43953:6;43948:3;43941:4;43934:5;43930:16;43895:65;:::i;:::-;43985:29;44007:6;43985:29;:::i;:::-;43980:3;43976:39;43969:46;;43738:283;43648:373;;;;:::o;44027:1053::-;44350:4;44388:3;44377:9;44373:19;44365:27;;44402:71;44470:1;44459:9;44455:17;44446:6;44402:71;:::i;:::-;44483:72;44551:2;44540:9;44536:18;44527:6;44483:72;:::i;:::-;44602:9;44596:4;44592:20;44587:2;44576:9;44572:18;44565:48;44630:108;44733:4;44724:6;44630:108;:::i;:::-;44622:116;;44785:9;44779:4;44775:20;44770:2;44759:9;44755:18;44748:48;44813:108;44916:4;44907:6;44813:108;:::i;:::-;44805:116;;44969:9;44963:4;44959:20;44953:3;44942:9;44938:19;44931:49;44997:76;45068:4;45059:6;44997:76;:::i;:::-;44989:84;;44027:1053;;;;;;;;:::o;45086:141::-;45142:5;45173:6;45167:13;45158:22;;45189:32;45215:5;45189:32;:::i;:::-;45086:141;;;;:::o;45233:349::-;45302:6;45351:2;45339:9;45330:7;45326:23;45322:32;45319:119;;;45357:79;;:::i;:::-;45319:119;45477:1;45502:63;45557:7;45548:6;45537:9;45533:22;45502:63;:::i;:::-;45492:73;;45448:127;45233:349;;;;:::o;45588:106::-;45632:8;45681:5;45676:3;45672:15;45651:36;;45588:106;;;:::o;45700:183::-;45735:3;45773:1;45755:16;45752:23;45749:128;;;45811:1;45808;45805;45790:23;45833:34;45864:1;45858:8;45833:34;:::i;:::-;45826:41;;45749:128;45700:183;:::o;45889:711::-;45928:3;45966:4;45948:16;45945:26;45974:5;45942:39;46003:20;;:::i;:::-;46078:1;46060:16;46056:24;46053:1;46047:4;46032:49;46111:4;46105:11;46210:16;46203:4;46195:6;46191:17;46188:39;46155:18;46147:6;46144:30;46128:113;46125:146;;;46256:5;;;;46125:146;46302:6;46296:4;46292:17;46338:3;46332:10;46365:18;46357:6;46354:30;46351:43;;;46387:5;;;;;;46351:43;46435:6;46428:4;46423:3;46419:14;46415:27;46494:1;46476:16;46472:24;46466:4;46462:35;46457:3;46454:44;46451:57;;;46501:5;;;;;;;46451:57;46518;46566:6;46560:4;46556:17;46548:6;46544:30;46538:4;46518:57;:::i;:::-;46591:3;46584:10;;45932:668;;;;;45889:711;;:::o;46606:239::-;46746:34;46742:1;46734:6;46730:14;46723:58;46815:22;46810:2;46802:6;46798:15;46791:47;46606:239;:::o;46851:366::-;46993:3;47014:67;47078:2;47073:3;47014:67;:::i;:::-;47007:74;;47090:93;47179:3;47090:93;:::i;:::-;47208:2;47203:3;47199:12;47192:19;;46851:366;;;:::o;47223:419::-;47389:4;47427:2;47416:9;47412:18;47404:26;;47476:9;47470:4;47466:20;47462:1;47451:9;47447:17;47440:47;47504:131;47630:4;47504:131;:::i;:::-;47496:139;;47223:419;;;:::o;47648:227::-;47788:34;47784:1;47776:6;47772:14;47765:58;47857:10;47852:2;47844:6;47840:15;47833:35;47648:227;:::o;47881:366::-;48023:3;48044:67;48108:2;48103:3;48044:67;:::i;:::-;48037:74;;48120:93;48209:3;48120:93;:::i;:::-;48238:2;48233:3;48229:12;48222:19;;47881:366;;;:::o;48253:419::-;48419:4;48457:2;48446:9;48442:18;48434:26;;48506:9;48500:4;48496:20;48492:1;48481:9;48477:17;48470:47;48534:131;48660:4;48534:131;:::i;:::-;48526:139;;48253:419;;;:::o;48678:751::-;48901:4;48939:3;48928:9;48924:19;48916:27;;48953:71;49021:1;49010:9;49006:17;48997:6;48953:71;:::i;:::-;49034:72;49102:2;49091:9;49087:18;49078:6;49034:72;:::i;:::-;49116;49184:2;49173:9;49169:18;49160:6;49116:72;:::i;:::-;49198;49266:2;49255:9;49251:18;49242:6;49198:72;:::i;:::-;49318:9;49312:4;49308:20;49302:3;49291:9;49287:19;49280:49;49346:76;49417:4;49408:6;49346:76;:::i;:::-;49338:84;;48678:751;;;;;;;;:::o

Swarm Source

ipfs://9248a94d8e1f1a003a2187dbbd63df2bd18076ce2d148625dae599274cadb63f
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.