ETH Price: $3,834.00 (+5.08%)

Token

 

Overview

Max Total Supply

3,185

Holders

2,694

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
st-pauli.eth
0x3ddfb199288f7a439dffedc03ae9bc02fafc63f6
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:
IlluminatiNFTbeliever

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 20000 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity Multiple files format)

File 9 of 11: IlluminatiNFTbeliever.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.9;

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

contract IlluminatiNFTbeliever is ERC1155, Ownable {
	using Strings for string;

	mapping(uint256 => uint256) private _totalSupply;

	//constants	
	uint256 public burnedCounter;
	uint256 public totalMinted;

	uint256 constant nft1 = 1;

	event Redeemed(address indexed from, uint256 id, uint256 uuid);

	string public _baseURI;
	string public _contractURI;

	bool saleLive = false;
	bool burnLive = false;

	constructor() ERC1155(_baseURI) {}

	   // airdrop function
    function airdrop(uint256[] calldata qty, address[] calldata addr) public onlyOwner {
        for(uint256 i = 0; i < addr.length; i++) {
            _mint(addr[i], nft1, qty[i], "");
        }
    }

	//redeem function
	function burn(
		address account,
		uint256 id,
		uint256 qty,
		uint256 uuid
	) public virtual {
		require(burnLive, "burn is not enabled");
		require(
			account == _msgSender() || isApprovedForAll(account, _msgSender()),
			"ERC1155: caller is not owner nor approved"
		);
		require(balanceOf(account, id) >= qty, "balance too low");

		burnedCounter = burnedCounter + qty;
		_burn(account, id, qty);
		emit Redeemed(account, id, uuid);
	}

	function setBaseURI(string memory newuri) public onlyOwner {
		_baseURI = newuri;
	}
	function setContractURI(string memory newuri) public onlyOwner {
		_contractURI = newuri;
	}

	function uri(uint256 tokenId) public view override returns (string memory) {
		return string(abi.encodePacked(_baseURI, uint2str(tokenId)));
	}
	function contractURI() public view returns (string memory) {
		return _contractURI;
	}
	function uint2str(uint256 _i) internal pure returns (string memory _uintAsString) {
		if (_i == 0) {return "0";}
			uint256 j = _i;
			uint256 len;
		while (j != 0) {len++; j /= 10;}
			bytes memory bstr = new bytes(len);
			uint256 k = len;
		while (_i != 0) {
			k = k - 1;
			uint8 temp = (48 + uint8(_i - (_i / 10) * 10));
			bytes1 b1 = bytes1(temp);
			bstr[k] = b1;
			_i /= 10;
		}
		return string(bstr);
	}

	function totalSupply(uint256 id) public view virtual returns (uint256) {
		return _totalSupply[id];
	}

	function exists(uint256 id) public view virtual returns (bool) {
		return totalSupply(id) > 0;
	}

	// enables burn
	function setBurnLive(bool _burnLive) external onlyOwner {
		burnLive = _burnLive;
	}

	function withdrawToOwner() external onlyOwner {
		payable(msg.sender).transfer(address(this).balance);
	}
}

File 1 of 11: Address.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function _verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) private 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

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

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 {
        require(_msgSender() != operator, "ERC1155: setting approval status for self");

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_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 `account`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - If `account` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _mint(
        address account,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(account != address(0), "ERC1155: mint to the zero address");

        address operator = _msgSender();

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

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

        _doSafeTransferAcceptanceCheck(operator, address(0), account, 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 `account`
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens of token type `id`.
     */
    function _burn(
        address account,
        uint256 id,
        uint256 amount
    ) internal virtual {
        require(account != address(0), "ERC1155: burn from the zero address");

        address operator = _msgSender();

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

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

        emit TransferSingle(operator, account, 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 account,
        uint256[] memory ids,
        uint256[] memory amounts
    ) internal virtual {
        require(account != address(0), "ERC1155: burn from the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

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

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

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

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

    /**
     * @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(to).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(to).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

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

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

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

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.
        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. 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

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

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

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

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

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

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

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

File 11 of 11: Strings.sol
// SPDX-License-Identifier: MIT

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":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"uuid","type":"uint256"}],"name":"Redeemed","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":"_baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"qty","type":"uint256[]"},{"internalType":"address[]","name":"addr","type":"address[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"qty","type":"uint256"},{"internalType":"uint256","name":"uuid","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"burnedCounter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newuri","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_burnLive","type":"bool"}],"name":"setBurnLive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newuri","type":"string"}],"name":"setContractURI","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":"totalMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawToOwner","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526009805461ffff191690553480156200001c57600080fd5b50600780546200002c90620001e4565b80601f01602080910402602001604051908101604052809291908181526020018280546200005a90620001e4565b8015620000ab5780601f106200007f57610100808354040283529160200191620000ab565b820191906000526020600020905b8154815290600101906020018083116200008d57829003601f168201915b5050505050620000c181620000d360201b60201c565b50620000cd33620000ec565b62000221565b8051620000e89060029060208401906200013e565b5050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200014c90620001e4565b90600052602060002090601f016020900481019282620001705760008555620001bb565b82601f106200018b57805160ff1916838001178555620001bb565b82800160010185558215620001bb579182015b82811115620001bb5782518255916020019190600101906200019e565b50620001c9929150620001cd565b5090565b5b80821115620001c95760008155600101620001ce565b600181811c90821680620001f957607f821691505b602082108114156200021b57634e487b7160e01b600052602260045260246000fd5b50919050565b612b0f80620002316000396000f3fe608060405234801561001057600080fd5b50600436106101975760003560e01c80638da5cb5b116100e3578063cdb712d81161008c578063e985e9c511610066578063e985e9c514610350578063f242432a14610399578063f2fde38b146103ac57600080fd5b8063cdb712d81461032c578063de7bf0a214610335578063e8a3d4851461034857600080fd5b8063a2309ff8116100bd578063a2309ff8146102fb578063bd85b03914610304578063c0e727401461032457600080fd5b80638da5cb5b146102ad578063938e3d7b146102d5578063a22cb465146102e857600080fd5b80634e1273f4116101455780636673c4c21161011f5780636673c4c21461028a578063715018a61461029d578063743976a0146102a557600080fd5b80634e1273f4146102355780634f558e791461025557806355f804b31461027757600080fd5b80632eb2c2d6116101765780632eb2c2d6146102055780633708a2e51461021a5780633cb40e161461022d57600080fd5b8062fdd58e1461019c57806301ffc9a7146101c25780630e89341c146101e5575b600080fd5b6101af6101aa366004611f8d565b6103bf565b6040519081526020015b60405180910390f35b6101d56101d0366004611fe5565b610482565b60405190151581526020016101b9565b6101f86101f3366004612009565b610567565b6040516101b9919061209c565b61021861021336600461225a565b61059b565b005b610218610228366004612314565b61064a565b6102186106e8565b61024861024336600461232f565b61077e565b6040516101b99190612435565b6101d5610263366004612009565b600090815260046020526040902054151590565b610218610285366004612448565b6108bc565b6102186102983660046124e5565b61093a565b610218610a18565b6101f8610a8b565b60035460405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b9565b6102186102e3366004612448565b610b19565b6102186102f6366004612551565b610b93565b6101af60065481565b6101af610312366004612009565b60009081526004602052604090205490565b6101f8610cb6565b6101af60055481565b610218610343366004612584565b610cc3565b6101f8610e81565b6101d561035e3660046125bd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205460ff1690565b6102186103a73660046125e7565b610f13565b6102186103ba36600461264c565b610fbb565b600073ffffffffffffffffffffffffffffffffffffffff831661044f5760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201527f65726f206164647265737300000000000000000000000000000000000000000060648201526084015b60405180910390fd5b5060009081526020818152604080832073ffffffffffffffffffffffffffffffffffffffff949094168352929052205490565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fd9b67a2600000000000000000000000000000000000000000000000000000000148061051557507fffffffff0000000000000000000000000000000000000000000000000000000082167f0e89341c00000000000000000000000000000000000000000000000000000000145b8061056157507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60606007610574836110b4565b6040516020016105859291906126d7565b6040516020818303038152906040529050919050565b73ffffffffffffffffffffffffffffffffffffffff85163314806105c457506105c4853361035e565b6106365760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f742060448201527f6f776e6572206e6f7220617070726f76656400000000000000000000000000006064820152608401610446565b6106438585858585611211565b5050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633146106b15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610446565b60098054911515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909216919091179055565b60035473ffffffffffffffffffffffffffffffffffffffff16331461074f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610446565b60405133904780156108fc02916000818181858888f1935050505015801561077b573d6000803e3d6000fd5b50565b606081518351146107f75760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e67746860448201527f206d69736d6174636800000000000000000000000000000000000000000000006064820152608401610446565b6000835167ffffffffffffffff811115610813576108136120af565b60405190808252806020026020018201604052801561083c578160200160208202803683370190505b50905060005b84518110156108b457610887858281518110610860576108606127b5565b602002602001015185838151811061087a5761087a6127b5565b60200260200101516103bf565b828281518110610899576108996127b5565b60209081029190910101526108ad81612813565b9050610842565b509392505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633146109235760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610446565b8051610936906007906020840190611ecb565b5050565b60035473ffffffffffffffffffffffffffffffffffffffff1633146109a15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610446565b60005b8181101561064357610a068383838181106109c1576109c16127b5565b90506020020160208101906109d6919061264c565b60018787858181106109ea576109ea6127b5565b90506020020135604051806020016040528060008152506114fd565b80610a1081612813565b9150506109a4565b60035473ffffffffffffffffffffffffffffffffffffffff163314610a7f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610446565b610a89600061164a565b565b60078054610a9890612667565b80601f0160208091040260200160405190810160405280929190818152602001828054610ac490612667565b8015610b115780601f10610ae657610100808354040283529160200191610b11565b820191906000526020600020905b815481529060010190602001808311610af457829003601f168201915b505050505081565b60035473ffffffffffffffffffffffffffffffffffffffff163314610b805760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610446565b8051610936906008906020840190611ecb565b3373ffffffffffffffffffffffffffffffffffffffff83161415610c1f5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c2073746174757360448201527f20666f722073656c6600000000000000000000000000000000000000000000006064820152608401610446565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b60088054610a9890612667565b600954610100900460ff16610d1a5760405162461bcd60e51b815260206004820152601360248201527f6275726e206973206e6f7420656e61626c6564000000000000000000000000006044820152606401610446565b73ffffffffffffffffffffffffffffffffffffffff8416331480610d435750610d43843361035e565b610db55760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201527f20617070726f76656400000000000000000000000000000000000000000000006064820152608401610446565b81610dc085856103bf565b1015610e0e5760405162461bcd60e51b815260206004820152600f60248201527f62616c616e636520746f6f206c6f7700000000000000000000000000000000006044820152606401610446565b81600554610e1c919061284c565b600555610e2a8484846116c1565b604080518481526020810183905273ffffffffffffffffffffffffffffffffffffffff8616917ff3a670cd3af7d64b488926880889d08a8585a138ff455227af6737339a1ec262910160405180910390a250505050565b606060088054610e9090612667565b80601f0160208091040260200160405190810160405280929190818152602001828054610ebc90612667565b8015610f095780601f10610ede57610100808354040283529160200191610f09565b820191906000526020600020905b815481529060010190602001808311610eec57829003601f168201915b5050505050905090565b73ffffffffffffffffffffffffffffffffffffffff8516331480610f3c5750610f3c853361035e565b610fae5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201527f20617070726f76656400000000000000000000000000000000000000000000006064820152608401610446565b6106438585858585611895565b60035473ffffffffffffffffffffffffffffffffffffffff1633146110225760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610446565b73ffffffffffffffffffffffffffffffffffffffff81166110ab5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610446565b61077b8161164a565b6060816110f457505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b811561111e578061110881612813565b91506111179050600a83612864565b91506110f8565b60008167ffffffffffffffff811115611139576111396120af565b6040519080825280601f01601f191660200182016040528015611163576020820181803683370190505b509050815b85156112085761117960018261289f565b90506000611188600a88612864565b61119390600a6128b6565b61119d908861289f565b6111a89060306128f3565b905060008160f81b9050808484815181106111c5576111c56127b5565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506111ff600a89612864565b97505050611168565b50949350505050565b81518351146112885760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060448201527f6d69736d617463680000000000000000000000000000000000000000000000006064820152608401610446565b73ffffffffffffffffffffffffffffffffffffffff84166113115760405162461bcd60e51b815260206004820152602560248201527f455243313135353a207472616e7366657220746f20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610446565b3360005b8451811015611468576000858281518110611332576113326127b5565b602002602001015190506000858381518110611350576113506127b5565b6020908102919091018101516000848152808352604080822073ffffffffffffffffffffffffffffffffffffffff8e1683529093529190912054909150818110156114035760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60448201527f72207472616e73666572000000000000000000000000000000000000000000006064820152608401610446565b60008381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8e8116855292528083208585039055908b1682528120805484929061144d90849061284c565b925050819055505050508061146190612813565b9050611315565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516114df929190612918565b60405180910390a46114f5818787878787611a92565b505050505050565b73ffffffffffffffffffffffffffffffffffffffff84166115865760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610446565b336115a08160008761159788611cde565b61064388611cde565b60008481526020818152604080832073ffffffffffffffffffffffffffffffffffffffff89168452909152812080548592906115dd90849061284c565b9091555050604080518581526020810185905273ffffffffffffffffffffffffffffffffffffffff80881692600092918516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461064381600087878787611d29565b6003805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff831661174a5760405162461bcd60e51b815260206004820152602360248201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610446565b3361177a8185600061175b87611cde565b61176487611cde565b5050604080516020810190915260009052505050565b60008381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff881684529091529020548281101561181d5760405162461bcd60e51b8152602060048201526024808201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c60448201527f616e6365000000000000000000000000000000000000000000000000000000006064820152608401610446565b60008481526020818152604080832073ffffffffffffffffffffffffffffffffffffffff898116808652918452828520888703905582518981529384018890529092908616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a45050505050565b73ffffffffffffffffffffffffffffffffffffffff841661191e5760405162461bcd60e51b815260206004820152602560248201527f455243313135353a207472616e7366657220746f20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610446565b3361192e81878761159788611cde565b60008481526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8a168452909152902054838110156119d25760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60448201527f72207472616e73666572000000000000000000000000000000000000000000006064820152608401610446565b60008581526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8b8116855292528083208785039055908816825281208054869290611a1c90849061284c565b9091555050604080518681526020810186905273ffffffffffffffffffffffffffffffffffffffff808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4611a89828888888888611d29565b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff84163b156114f5576040517fbc197c8100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063bc197c8190611b09908990899088908890889060040161293d565b602060405180830381600087803b158015611b2357600080fd5b505af1925050508015611b71575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611b6e918101906129a8565b60015b611c2757611b7d6129c5565b806308c379a01415611bb75750611b926129e1565b80611b9d5750611bb9565b8060405162461bcd60e51b8152600401610446919061209c565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e204552433131353560448201527f526563656976657220696d706c656d656e7465720000000000000000000000006064820152608401610446565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fbc197c810000000000000000000000000000000000000000000000000000000014611a895760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a6563746560448201527f6420746f6b656e730000000000000000000000000000000000000000000000006064820152608401610446565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110611d1857611d186127b5565b602090810291909101015292915050565b73ffffffffffffffffffffffffffffffffffffffff84163b156114f5576040517ff23a6e6100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063f23a6e6190611da09089908990889088908890600401612a89565b602060405180830381600087803b158015611dba57600080fd5b505af1925050508015611e08575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611e05918101906129a8565b60015b611e1457611b7d6129c5565b7fffffffff0000000000000000000000000000000000000000000000000000000081167ff23a6e610000000000000000000000000000000000000000000000000000000014611a895760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a6563746560448201527f6420746f6b656e730000000000000000000000000000000000000000000000006064820152608401610446565b828054611ed790612667565b90600052602060002090601f016020900481019282611ef95760008555611f3f565b82601f10611f1257805160ff1916838001178555611f3f565b82800160010185558215611f3f579182015b82811115611f3f578251825591602001919060010190611f24565b50611f4b929150611f4f565b5090565b5b80821115611f4b5760008155600101611f50565b803573ffffffffffffffffffffffffffffffffffffffff81168114611f8857600080fd5b919050565b60008060408385031215611fa057600080fd5b611fa983611f64565b946020939093013593505050565b7fffffffff000000000000000000000000000000000000000000000000000000008116811461077b57600080fd5b600060208284031215611ff757600080fd5b813561200281611fb7565b9392505050565b60006020828403121561201b57600080fd5b5035919050565b60005b8381101561203d578181015183820152602001612025565b8381111561204c576000848401525b50505050565b6000815180845261206a816020860160208601612022565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006120026020830184612052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f830116810181811067ffffffffffffffff82111715612122576121226120af565b6040525050565b600067ffffffffffffffff821115612143576121436120af565b5060051b60200190565b600082601f83011261215e57600080fd5b8135602061216b82612129565b60405161217882826120de565b83815260059390931b850182019282810191508684111561219857600080fd5b8286015b848110156121b3578035835291830191830161219c565b509695505050505050565b600067ffffffffffffffff8311156121d8576121d86120af565b60405161220d60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f87011601826120de565b80915083815284848401111561222257600080fd5b83836020830137600060208583010152509392505050565b600082601f83011261224b57600080fd5b612002838335602085016121be565b600080600080600060a0868803121561227257600080fd5b61227b86611f64565b945061228960208701611f64565b9350604086013567ffffffffffffffff808211156122a657600080fd5b6122b289838a0161214d565b945060608801359150808211156122c857600080fd5b6122d489838a0161214d565b935060808801359150808211156122ea57600080fd5b506122f78882890161223a565b9150509295509295909350565b80358015158114611f8857600080fd5b60006020828403121561232657600080fd5b61200282612304565b6000806040838503121561234257600080fd5b823567ffffffffffffffff8082111561235a57600080fd5b818501915085601f83011261236e57600080fd5b8135602061237b82612129565b60405161238882826120de565b83815260059390931b85018201928281019150898411156123a857600080fd5b948201945b838610156123cd576123be86611f64565b825294820194908201906123ad565b965050860135925050808211156123e357600080fd5b506123f08582860161214d565b9150509250929050565b600081518084526020808501945080840160005b8381101561242a5781518752958201959082019060010161240e565b509495945050505050565b60208152600061200260208301846123fa565b60006020828403121561245a57600080fd5b813567ffffffffffffffff81111561247157600080fd5b8201601f8101841361248257600080fd5b612491848235602084016121be565b949350505050565b60008083601f8401126124ab57600080fd5b50813567ffffffffffffffff8111156124c357600080fd5b6020830191508360208260051b85010111156124de57600080fd5b9250929050565b600080600080604085870312156124fb57600080fd5b843567ffffffffffffffff8082111561251357600080fd5b61251f88838901612499565b9096509450602087013591508082111561253857600080fd5b5061254587828801612499565b95989497509550505050565b6000806040838503121561256457600080fd5b61256d83611f64565b915061257b60208401612304565b90509250929050565b6000806000806080858703121561259a57600080fd5b6125a385611f64565b966020860135965060408601359560600135945092505050565b600080604083850312156125d057600080fd5b6125d983611f64565b915061257b60208401611f64565b600080600080600060a086880312156125ff57600080fd5b61260886611f64565b945061261660208701611f64565b93506040860135925060608601359150608086013567ffffffffffffffff81111561264057600080fd5b6122f78882890161223a565b60006020828403121561265e57600080fd5b61200282611f64565b600181811c9082168061267b57607f821691505b602082108114156126b5577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600081516126cd818560208601612022565b9290920192915050565b600080845481600182811c9150808316806126f357607f831692505b602080841082141561272c577f4e487b710000000000000000000000000000000000000000000000000000000086526022600452602486fd5b818015612740576001811461276f5761279c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0086168952848901965061279c565b60008b81526020902060005b868110156127945781548b82015290850190830161277b565b505084890196505b5050505050506127ac81856126bb565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612845576128456127e4565b5060010190565b6000821982111561285f5761285f6127e4565b500190565b60008261289a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000828210156128b1576128b16127e4565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156128ee576128ee6127e4565b500290565b600060ff821660ff84168060ff03821115612910576129106127e4565b019392505050565b60408152600061292b60408301856123fa565b82810360208401526127ac81856123fa565b600073ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525060a0604083015261297660a08301866123fa565b828103606084015261298881866123fa565b9050828103608084015261299c8185612052565b98975050505050505050565b6000602082840312156129ba57600080fd5b815161200281611fb7565b600060033d11156129de5760046000803e5060005160e01c5b90565b600060443d10156129ef5790565b6040517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc803d016004833e81513d67ffffffffffffffff8160248401118184111715612a3d57505050505090565b8285019150815181811115612a555750505050505090565b843d8701016020828501011115612a6f5750505050505090565b612a7e602082860101876120de565b509095945050505050565b600073ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525084604083015283606083015260a06080830152612ace60a0830184612052565b97965050505050505056fea264697066735822122045acb33d35f0cfa081fb7b511d89cb27643761717d421c934416f143387d2c9564736f6c63430008090033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101975760003560e01c80638da5cb5b116100e3578063cdb712d81161008c578063e985e9c511610066578063e985e9c514610350578063f242432a14610399578063f2fde38b146103ac57600080fd5b8063cdb712d81461032c578063de7bf0a214610335578063e8a3d4851461034857600080fd5b8063a2309ff8116100bd578063a2309ff8146102fb578063bd85b03914610304578063c0e727401461032457600080fd5b80638da5cb5b146102ad578063938e3d7b146102d5578063a22cb465146102e857600080fd5b80634e1273f4116101455780636673c4c21161011f5780636673c4c21461028a578063715018a61461029d578063743976a0146102a557600080fd5b80634e1273f4146102355780634f558e791461025557806355f804b31461027757600080fd5b80632eb2c2d6116101765780632eb2c2d6146102055780633708a2e51461021a5780633cb40e161461022d57600080fd5b8062fdd58e1461019c57806301ffc9a7146101c25780630e89341c146101e5575b600080fd5b6101af6101aa366004611f8d565b6103bf565b6040519081526020015b60405180910390f35b6101d56101d0366004611fe5565b610482565b60405190151581526020016101b9565b6101f86101f3366004612009565b610567565b6040516101b9919061209c565b61021861021336600461225a565b61059b565b005b610218610228366004612314565b61064a565b6102186106e8565b61024861024336600461232f565b61077e565b6040516101b99190612435565b6101d5610263366004612009565b600090815260046020526040902054151590565b610218610285366004612448565b6108bc565b6102186102983660046124e5565b61093a565b610218610a18565b6101f8610a8b565b60035460405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b9565b6102186102e3366004612448565b610b19565b6102186102f6366004612551565b610b93565b6101af60065481565b6101af610312366004612009565b60009081526004602052604090205490565b6101f8610cb6565b6101af60055481565b610218610343366004612584565b610cc3565b6101f8610e81565b6101d561035e3660046125bd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205460ff1690565b6102186103a73660046125e7565b610f13565b6102186103ba36600461264c565b610fbb565b600073ffffffffffffffffffffffffffffffffffffffff831661044f5760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201527f65726f206164647265737300000000000000000000000000000000000000000060648201526084015b60405180910390fd5b5060009081526020818152604080832073ffffffffffffffffffffffffffffffffffffffff949094168352929052205490565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fd9b67a2600000000000000000000000000000000000000000000000000000000148061051557507fffffffff0000000000000000000000000000000000000000000000000000000082167f0e89341c00000000000000000000000000000000000000000000000000000000145b8061056157507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60606007610574836110b4565b6040516020016105859291906126d7565b6040516020818303038152906040529050919050565b73ffffffffffffffffffffffffffffffffffffffff85163314806105c457506105c4853361035e565b6106365760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f742060448201527f6f776e6572206e6f7220617070726f76656400000000000000000000000000006064820152608401610446565b6106438585858585611211565b5050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633146106b15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610446565b60098054911515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909216919091179055565b60035473ffffffffffffffffffffffffffffffffffffffff16331461074f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610446565b60405133904780156108fc02916000818181858888f1935050505015801561077b573d6000803e3d6000fd5b50565b606081518351146107f75760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e67746860448201527f206d69736d6174636800000000000000000000000000000000000000000000006064820152608401610446565b6000835167ffffffffffffffff811115610813576108136120af565b60405190808252806020026020018201604052801561083c578160200160208202803683370190505b50905060005b84518110156108b457610887858281518110610860576108606127b5565b602002602001015185838151811061087a5761087a6127b5565b60200260200101516103bf565b828281518110610899576108996127b5565b60209081029190910101526108ad81612813565b9050610842565b509392505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633146109235760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610446565b8051610936906007906020840190611ecb565b5050565b60035473ffffffffffffffffffffffffffffffffffffffff1633146109a15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610446565b60005b8181101561064357610a068383838181106109c1576109c16127b5565b90506020020160208101906109d6919061264c565b60018787858181106109ea576109ea6127b5565b90506020020135604051806020016040528060008152506114fd565b80610a1081612813565b9150506109a4565b60035473ffffffffffffffffffffffffffffffffffffffff163314610a7f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610446565b610a89600061164a565b565b60078054610a9890612667565b80601f0160208091040260200160405190810160405280929190818152602001828054610ac490612667565b8015610b115780601f10610ae657610100808354040283529160200191610b11565b820191906000526020600020905b815481529060010190602001808311610af457829003601f168201915b505050505081565b60035473ffffffffffffffffffffffffffffffffffffffff163314610b805760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610446565b8051610936906008906020840190611ecb565b3373ffffffffffffffffffffffffffffffffffffffff83161415610c1f5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c2073746174757360448201527f20666f722073656c6600000000000000000000000000000000000000000000006064820152608401610446565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b60088054610a9890612667565b600954610100900460ff16610d1a5760405162461bcd60e51b815260206004820152601360248201527f6275726e206973206e6f7420656e61626c6564000000000000000000000000006044820152606401610446565b73ffffffffffffffffffffffffffffffffffffffff8416331480610d435750610d43843361035e565b610db55760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201527f20617070726f76656400000000000000000000000000000000000000000000006064820152608401610446565b81610dc085856103bf565b1015610e0e5760405162461bcd60e51b815260206004820152600f60248201527f62616c616e636520746f6f206c6f7700000000000000000000000000000000006044820152606401610446565b81600554610e1c919061284c565b600555610e2a8484846116c1565b604080518481526020810183905273ffffffffffffffffffffffffffffffffffffffff8616917ff3a670cd3af7d64b488926880889d08a8585a138ff455227af6737339a1ec262910160405180910390a250505050565b606060088054610e9090612667565b80601f0160208091040260200160405190810160405280929190818152602001828054610ebc90612667565b8015610f095780601f10610ede57610100808354040283529160200191610f09565b820191906000526020600020905b815481529060010190602001808311610eec57829003601f168201915b5050505050905090565b73ffffffffffffffffffffffffffffffffffffffff8516331480610f3c5750610f3c853361035e565b610fae5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201527f20617070726f76656400000000000000000000000000000000000000000000006064820152608401610446565b6106438585858585611895565b60035473ffffffffffffffffffffffffffffffffffffffff1633146110225760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610446565b73ffffffffffffffffffffffffffffffffffffffff81166110ab5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610446565b61077b8161164a565b6060816110f457505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b811561111e578061110881612813565b91506111179050600a83612864565b91506110f8565b60008167ffffffffffffffff811115611139576111396120af565b6040519080825280601f01601f191660200182016040528015611163576020820181803683370190505b509050815b85156112085761117960018261289f565b90506000611188600a88612864565b61119390600a6128b6565b61119d908861289f565b6111a89060306128f3565b905060008160f81b9050808484815181106111c5576111c56127b5565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506111ff600a89612864565b97505050611168565b50949350505050565b81518351146112885760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060448201527f6d69736d617463680000000000000000000000000000000000000000000000006064820152608401610446565b73ffffffffffffffffffffffffffffffffffffffff84166113115760405162461bcd60e51b815260206004820152602560248201527f455243313135353a207472616e7366657220746f20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610446565b3360005b8451811015611468576000858281518110611332576113326127b5565b602002602001015190506000858381518110611350576113506127b5565b6020908102919091018101516000848152808352604080822073ffffffffffffffffffffffffffffffffffffffff8e1683529093529190912054909150818110156114035760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60448201527f72207472616e73666572000000000000000000000000000000000000000000006064820152608401610446565b60008381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8e8116855292528083208585039055908b1682528120805484929061144d90849061284c565b925050819055505050508061146190612813565b9050611315565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516114df929190612918565b60405180910390a46114f5818787878787611a92565b505050505050565b73ffffffffffffffffffffffffffffffffffffffff84166115865760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610446565b336115a08160008761159788611cde565b61064388611cde565b60008481526020818152604080832073ffffffffffffffffffffffffffffffffffffffff89168452909152812080548592906115dd90849061284c565b9091555050604080518581526020810185905273ffffffffffffffffffffffffffffffffffffffff80881692600092918516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461064381600087878787611d29565b6003805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff831661174a5760405162461bcd60e51b815260206004820152602360248201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610446565b3361177a8185600061175b87611cde565b61176487611cde565b5050604080516020810190915260009052505050565b60008381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff881684529091529020548281101561181d5760405162461bcd60e51b8152602060048201526024808201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c60448201527f616e6365000000000000000000000000000000000000000000000000000000006064820152608401610446565b60008481526020818152604080832073ffffffffffffffffffffffffffffffffffffffff898116808652918452828520888703905582518981529384018890529092908616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a45050505050565b73ffffffffffffffffffffffffffffffffffffffff841661191e5760405162461bcd60e51b815260206004820152602560248201527f455243313135353a207472616e7366657220746f20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610446565b3361192e81878761159788611cde565b60008481526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8a168452909152902054838110156119d25760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60448201527f72207472616e73666572000000000000000000000000000000000000000000006064820152608401610446565b60008581526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8b8116855292528083208785039055908816825281208054869290611a1c90849061284c565b9091555050604080518681526020810186905273ffffffffffffffffffffffffffffffffffffffff808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4611a89828888888888611d29565b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff84163b156114f5576040517fbc197c8100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063bc197c8190611b09908990899088908890889060040161293d565b602060405180830381600087803b158015611b2357600080fd5b505af1925050508015611b71575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611b6e918101906129a8565b60015b611c2757611b7d6129c5565b806308c379a01415611bb75750611b926129e1565b80611b9d5750611bb9565b8060405162461bcd60e51b8152600401610446919061209c565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e204552433131353560448201527f526563656976657220696d706c656d656e7465720000000000000000000000006064820152608401610446565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fbc197c810000000000000000000000000000000000000000000000000000000014611a895760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a6563746560448201527f6420746f6b656e730000000000000000000000000000000000000000000000006064820152608401610446565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110611d1857611d186127b5565b602090810291909101015292915050565b73ffffffffffffffffffffffffffffffffffffffff84163b156114f5576040517ff23a6e6100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063f23a6e6190611da09089908990889088908890600401612a89565b602060405180830381600087803b158015611dba57600080fd5b505af1925050508015611e08575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611e05918101906129a8565b60015b611e1457611b7d6129c5565b7fffffffff0000000000000000000000000000000000000000000000000000000081167ff23a6e610000000000000000000000000000000000000000000000000000000014611a895760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a6563746560448201527f6420746f6b656e730000000000000000000000000000000000000000000000006064820152608401610446565b828054611ed790612667565b90600052602060002090601f016020900481019282611ef95760008555611f3f565b82601f10611f1257805160ff1916838001178555611f3f565b82800160010185558215611f3f579182015b82811115611f3f578251825591602001919060010190611f24565b50611f4b929150611f4f565b5090565b5b80821115611f4b5760008155600101611f50565b803573ffffffffffffffffffffffffffffffffffffffff81168114611f8857600080fd5b919050565b60008060408385031215611fa057600080fd5b611fa983611f64565b946020939093013593505050565b7fffffffff000000000000000000000000000000000000000000000000000000008116811461077b57600080fd5b600060208284031215611ff757600080fd5b813561200281611fb7565b9392505050565b60006020828403121561201b57600080fd5b5035919050565b60005b8381101561203d578181015183820152602001612025565b8381111561204c576000848401525b50505050565b6000815180845261206a816020860160208601612022565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006120026020830184612052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f830116810181811067ffffffffffffffff82111715612122576121226120af565b6040525050565b600067ffffffffffffffff821115612143576121436120af565b5060051b60200190565b600082601f83011261215e57600080fd5b8135602061216b82612129565b60405161217882826120de565b83815260059390931b850182019282810191508684111561219857600080fd5b8286015b848110156121b3578035835291830191830161219c565b509695505050505050565b600067ffffffffffffffff8311156121d8576121d86120af565b60405161220d60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f87011601826120de565b80915083815284848401111561222257600080fd5b83836020830137600060208583010152509392505050565b600082601f83011261224b57600080fd5b612002838335602085016121be565b600080600080600060a0868803121561227257600080fd5b61227b86611f64565b945061228960208701611f64565b9350604086013567ffffffffffffffff808211156122a657600080fd5b6122b289838a0161214d565b945060608801359150808211156122c857600080fd5b6122d489838a0161214d565b935060808801359150808211156122ea57600080fd5b506122f78882890161223a565b9150509295509295909350565b80358015158114611f8857600080fd5b60006020828403121561232657600080fd5b61200282612304565b6000806040838503121561234257600080fd5b823567ffffffffffffffff8082111561235a57600080fd5b818501915085601f83011261236e57600080fd5b8135602061237b82612129565b60405161238882826120de565b83815260059390931b85018201928281019150898411156123a857600080fd5b948201945b838610156123cd576123be86611f64565b825294820194908201906123ad565b965050860135925050808211156123e357600080fd5b506123f08582860161214d565b9150509250929050565b600081518084526020808501945080840160005b8381101561242a5781518752958201959082019060010161240e565b509495945050505050565b60208152600061200260208301846123fa565b60006020828403121561245a57600080fd5b813567ffffffffffffffff81111561247157600080fd5b8201601f8101841361248257600080fd5b612491848235602084016121be565b949350505050565b60008083601f8401126124ab57600080fd5b50813567ffffffffffffffff8111156124c357600080fd5b6020830191508360208260051b85010111156124de57600080fd5b9250929050565b600080600080604085870312156124fb57600080fd5b843567ffffffffffffffff8082111561251357600080fd5b61251f88838901612499565b9096509450602087013591508082111561253857600080fd5b5061254587828801612499565b95989497509550505050565b6000806040838503121561256457600080fd5b61256d83611f64565b915061257b60208401612304565b90509250929050565b6000806000806080858703121561259a57600080fd5b6125a385611f64565b966020860135965060408601359560600135945092505050565b600080604083850312156125d057600080fd5b6125d983611f64565b915061257b60208401611f64565b600080600080600060a086880312156125ff57600080fd5b61260886611f64565b945061261660208701611f64565b93506040860135925060608601359150608086013567ffffffffffffffff81111561264057600080fd5b6122f78882890161223a565b60006020828403121561265e57600080fd5b61200282611f64565b600181811c9082168061267b57607f821691505b602082108114156126b5577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600081516126cd818560208601612022565b9290920192915050565b600080845481600182811c9150808316806126f357607f831692505b602080841082141561272c577f4e487b710000000000000000000000000000000000000000000000000000000086526022600452602486fd5b818015612740576001811461276f5761279c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0086168952848901965061279c565b60008b81526020902060005b868110156127945781548b82015290850190830161277b565b505084890196505b5050505050506127ac81856126bb565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612845576128456127e4565b5060010190565b6000821982111561285f5761285f6127e4565b500190565b60008261289a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000828210156128b1576128b16127e4565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156128ee576128ee6127e4565b500290565b600060ff821660ff84168060ff03821115612910576129106127e4565b019392505050565b60408152600061292b60408301856123fa565b82810360208401526127ac81856123fa565b600073ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525060a0604083015261297660a08301866123fa565b828103606084015261298881866123fa565b9050828103608084015261299c8185612052565b98975050505050505050565b6000602082840312156129ba57600080fd5b815161200281611fb7565b600060033d11156129de5760046000803e5060005160e01c5b90565b600060443d10156129ef5790565b6040517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc803d016004833e81513d67ffffffffffffffff8160248401118184111715612a3d57505050505090565b8285019150815181811115612a555750505050505090565b843d8701016020828501011115612a6f5750505050505090565b612a7e602082860101876120de565b509095945050505050565b600073ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525084604083015283606083015260a06080830152612ace60a0830184612052565b97965050505050505056fea264697066735822122045acb33d35f0cfa081fb7b511d89cb27643761717d421c934416f143387d2c9564736f6c63430008090033

Deployed Bytecode Sourcemap

162:2477:8:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2122:231:2;;;;;;:::i;:::-;;:::i;:::-;;;620:25:11;;;608:2;593:18;2122:231:2;;;;;;;;1145:310;;;;;;:::i;:::-;;:::i;:::-;;;1253:14:11;;1246:22;1228:41;;1216:2;1201:18;1145:310:2;1088:187:11;1533:145:8;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;4217:442:2:-;;;;;;:::i;:::-;;:::i;:::-;;2438:86:8;;;;;;:::i;:::-;;:::i;2529:107::-;;;:::i;2519:524:2:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;2316:99:8:-;;;;;;:::i;:::-;2373:4;2290:16;;;:12;:16;;;;;;-1:-1:-1;;;2316:99:8;1345:86;;;;;;:::i;:::-;;:::i;656:201::-;;;;;;:::i;:::-;;:::i;1650:94:9:-;;;:::i;479:22:8:-;;;:::i;999:87:9:-;1072:6;;999:87;;1072:6;;;;9441:74:11;;9429:2;9414:18;999:87:9;9295:226:11;1434:94:8;;;;;;:::i;:::-;;:::i;3116:311:2:-;;;;;;:::i;:::-;;:::i;348:26:8:-;;;;;;2207:104;;;;;;:::i;:::-;2269:7;2290:16;;;:12;:16;;;;;;;2207:104;505:26;;;:::i;316:28::-;;;;;;882:458;;;;;;:::i;:::-;;:::i;1681:88::-;;;:::i;3499:168:2:-;;;;;;:::i;:::-;3622:27;;;;3598:4;3622:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;3499:168;3739:401;;;;;;:::i;:::-;;:::i;1899:192:9:-;;;;;;:::i;:::-;;:::i;2122:231:2:-;2208:7;2236:21;;;2228:77;;;;-1:-1:-1;;;2228:77:2;;11450:2:11;2228:77:2;;;11432:21:11;11489:2;11469:18;;;11462:30;11528:34;11508:18;;;11501:62;11599:13;11579:18;;;11572:41;11630:19;;2228:77:2;;;;;;;;;-1:-1:-1;2323:9:2;:13;;;;;;;;;;;:22;;;;;;;;;;;;;2122:231::o;1145:310::-;1247:4;1284:41;;;1299:26;1284:41;;:110;;-1:-1:-1;1342:52:2;;;1357:37;1342:52;1284:110;:163;;;-1:-1:-1;911:25:3;896:40;;;;1411:36:2;1264:183;1145:310;-1:-1:-1;;1145:310:2:o;1533:145:8:-;1593:13;1644:8;1654:17;1663:7;1654:8;:17::i;:::-;1627:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1613:60;;1533:145;;;:::o;4217:442:2:-;4450:20;;;681:10:1;4450:20:2;;:60;;-1:-1:-1;4474:36:2;4491:4;681:10:1;3499:168:2;:::i;4474:36::-;4428:160;;;;-1:-1:-1;;;4428:160:2;;13914:2:11;4428:160:2;;;13896:21:11;13953:2;13933:18;;;13926:30;13992:34;13972:18;;;13965:62;14063:20;14043:18;;;14036:48;14101:19;;4428:160:2;13712:414:11;4428:160:2;4599:52;4622:4;4628:2;4632:3;4637:7;4646:4;4599:22;:52::i;:::-;4217:442;;;;;:::o;2438:86:8:-;1072:6:9;;1219:23;1072:6;681:10:1;1219:23:9;1211:68;;;;-1:-1:-1;;;1211:68:9;;14333:2:11;1211:68:9;;;14315:21:11;;;14352:18;;;14345:30;14411:34;14391:18;;;14384:62;14463:18;;1211:68:9;14131:356:11;1211:68:9;2499:8:8::1;:20:::0;;;::::1;;;;::::0;;;::::1;::::0;;;::::1;::::0;;2438:86::o;2529:107::-;1072:6:9;;1219:23;1072:6;681:10:1;1219:23:9;1211:68;;;;-1:-1:-1;;;1211:68:9;;14333:2:11;1211:68:9;;;14315:21:11;;;14352:18;;;14345:30;14411:34;14391:18;;;14384:62;14463:18;;1211:68:9;14131:356:11;1211:68:9;2580:51:8::1;::::0;2588:10:::1;::::0;2609:21:::1;2580:51:::0;::::1;;;::::0;::::1;::::0;;;2609:21;2588:10;2580:51;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;2529:107::o:0;2519:524:2:-;2675:16;2736:3;:10;2717:8;:15;:29;2709:83;;;;-1:-1:-1;;;2709:83:2;;14694:2:11;2709:83:2;;;14676:21:11;14733:2;14713:18;;;14706:30;14772:34;14752:18;;;14745:62;14843:11;14823:18;;;14816:39;14872:19;;2709:83:2;14492:405:11;2709:83:2;2805:30;2852:8;:15;2838:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2838:30:2;;2805:63;;2886:9;2881:122;2905:8;:15;2901:1;:19;2881:122;;;2961:30;2971:8;2980:1;2971:11;;;;;;;;:::i;:::-;;;;;;;2984:3;2988:1;2984:6;;;;;;;;:::i;:::-;;;;;;;2961:9;:30::i;:::-;2942:13;2956:1;2942:16;;;;;;;;:::i;:::-;;;;;;;;;;:49;2922:3;;;:::i;:::-;;;2881:122;;;-1:-1:-1;3022:13:2;2519:524;-1:-1:-1;;;2519:524:2:o;1345:86:8:-;1072:6:9;;1219:23;1072:6;681:10:1;1219:23:9;1211:68;;;;-1:-1:-1;;;1211:68:9;;14333:2:11;1211:68:9;;;14315:21:11;;;14352:18;;;14345:30;14411:34;14391:18;;;14384:62;14463:18;;1211:68:9;14131:356:11;1211:68:9;1409:17:8;;::::1;::::0;:8:::1;::::0;:17:::1;::::0;::::1;::::0;::::1;:::i;:::-;;1345:86:::0;:::o;656:201::-;1072:6:9;;1219:23;1072:6;681:10:1;1219:23:9;1211:68;;;;-1:-1:-1;;;1211:68:9;;14333:2:11;1211:68:9;;;14315:21:11;;;14352:18;;;14345:30;14411:34;14391:18;;;14384:62;14463:18;;1211:68:9;14131:356:11;1211:68:9;754:9:8::1;750:100;769:15:::0;;::::1;750:100;;;806:32;812:4;;817:1;812:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;404:1;827:3;;831:1;827:6;;;;;;;:::i;:::-;;;;;;;806:32;;;;;;;;;;;::::0;:5:::1;:32::i;:::-;786:3:::0;::::1;::::0;::::1;:::i;:::-;;;;750:100;;1650:94:9::0;1072:6;;1219:23;1072:6;681:10:1;1219:23:9;1211:68;;;;-1:-1:-1;;;1211:68:9;;14333:2:11;1211:68:9;;;14315:21:11;;;14352:18;;;14345:30;14411:34;14391:18;;;14384:62;14463:18;;1211:68:9;14131:356:11;1211:68:9;1715:21:::1;1733:1;1715:9;:21::i;:::-;1650:94::o:0;479:22:8:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1434:94::-;1072:6:9;;1219:23;1072:6;681:10:1;1219:23:9;1211:68;;;;-1:-1:-1;;;1211:68:9;;14333:2:11;1211:68:9;;;14315:21:11;;;14352:18;;;14345:30;14411:34;14391:18;;;14384:62;14463:18;;1211:68:9;14131:356:11;1211:68:9;1502:21:8;;::::1;::::0;:12:::1;::::0;:21:::1;::::0;::::1;::::0;::::1;:::i;3116:311:2:-:0;681:10:1;3219:24:2;;;;;3211:78;;;;-1:-1:-1;;;3211:78:2;;15682:2:11;3211:78:2;;;15664:21:11;15721:2;15701:18;;;15694:30;15760:34;15740:18;;;15733:62;15831:11;15811:18;;;15804:39;15860:19;;3211:78:2;15480:405:11;3211:78:2;681:10:1;3302:32:2;;;;:18;:32;;;;;;;;;:42;;;;;;;;;;;;:53;;;;;;;;;;;;;3371:48;;1228:41:11;;;3302:42:2;;681:10:1;3371:48:2;;1201:18:11;3371:48:2;;;;;;;3116:311;;:::o;505:26:8:-;;;;;;;:::i;882:458::-;996:8;;;;;;;988:40;;;;-1:-1:-1;;;988:40:8;;16092:2:11;988:40:8;;;16074:21:11;16131:2;16111:18;;;16104:30;16170:21;16150:18;;;16143:49;16209:18;;988:40:8;15890:343:11;988:40:8;1046:23;;;681:10:1;1046:23:8;;:66;;-1:-1:-1;1073:39:8;1090:7;681:10:1;3499:168:2;:::i;1073:39:8:-;1033:133;;;;-1:-1:-1;;;1033:133:8;;16440:2:11;1033:133:8;;;16422:21:11;16479:2;16459:18;;;16452:30;16518:34;16498:18;;;16491:62;16589:11;16569:18;;;16562:39;16618:19;;1033:133:8;16238:405:11;1033:133:8;1205:3;1179:22;1189:7;1198:2;1179:9;:22::i;:::-;:29;;1171:57;;;;-1:-1:-1;;;1171:57:8;;16850:2:11;1171:57:8;;;16832:21:11;16889:2;16869:18;;;16862:30;16928:17;16908:18;;;16901:45;16963:18;;1171:57:8;16648:339:11;1171:57:8;1267:3;1251:13;;:19;;;;:::i;:::-;1235:13;:35;1275:23;1281:7;1290:2;1294:3;1275:5;:23::i;:::-;1308:27;;;17299:25:11;;;17355:2;17340:18;;17333:34;;;1308:27:8;;;;;;17272:18:11;1308:27:8;;;;;;;882:458;;;;:::o;1681:88::-;1725:13;1752:12;1745:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1681:88;:::o;3739:401:2:-;3947:20;;;681:10:1;3947:20:2;;:60;;-1:-1:-1;3971:36:2;3988:4;681:10:1;3499:168:2;:::i;3971:36::-;3925:151;;;;-1:-1:-1;;;3925:151:2;;16440:2:11;3925:151:2;;;16422:21:11;16479:2;16459:18;;;16452:30;16518:34;16498:18;;;16491:62;16589:11;16569:18;;;16562:39;16618:19;;3925:151:2;16238:405:11;3925:151:2;4087:45;4105:4;4111:2;4115;4119:6;4127:4;4087:17;:45::i;1899:192:9:-;1072:6;;1219:23;1072:6;681:10:1;1219:23:9;1211:68;;;;-1:-1:-1;;;1211:68:9;;14333:2:11;1211:68:9;;;14315:21:11;;;14352:18;;;14345:30;14411:34;14391:18;;;14384:62;14463:18;;1211:68:9;14131:356:11;1211:68:9;1988:22:::1;::::0;::::1;1980:73;;;::::0;-1:-1:-1;;;1980:73:9;;17580:2:11;1980:73:9::1;::::0;::::1;17562:21:11::0;17619:2;17599:18;;;17592:30;17658:34;17638:18;;;17631:62;17729:8;17709:18;;;17702:36;17755:19;;1980:73:9::1;17378:402:11::0;1980:73:9::1;2064:19;2074:8;2064:9;:19::i;1772:430:8:-:0;1825:27;1863:7;1859:26;;-1:-1:-1;;1873:10:8;;;;;;;;;;;;;;;;;;1772:430::o;1859:26::-;1902:2;1890:9;1926:32;1933:6;;1926:32;;1942:5;;;;:::i;:::-;;-1:-1:-1;1949:7:8;;-1:-1:-1;1954:2:8;1949:7;;:::i;:::-;;;1926:32;;;1963:17;1993:3;1983:14;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1983:14:8;-1:-1:-1;1963:34:8;-1:-1:-1;2015:3:8;2023:151;2030:7;;2023:151;;2049:5;2053:1;2049;:5;:::i;:::-;2045:9;-1:-1:-1;2060:10:8;2091:7;2096:2;2091;:7;:::i;:::-;2090:14;;2102:2;2090:14;:::i;:::-;2085:19;;:2;:19;:::i;:::-;2074:31;;:2;:31;:::i;:::-;2060:46;;2112:9;2131:4;2124:12;;2112:24;;2152:2;2142:4;2147:1;2142:7;;;;;;;;:::i;:::-;;;;:12;;;;;;;;;;-1:-1:-1;2160:8:8;2166:2;2160:8;;:::i;:::-;;;2039:135;;2023:151;;;-1:-1:-1;2192:4:8;1772:430;-1:-1:-1;;;;1772:430:8:o;6301:1074:2:-;6528:7;:14;6514:3;:10;:28;6506:81;;;;-1:-1:-1;;;6506:81:2;;18838:2:11;6506:81:2;;;18820:21:11;18877:2;18857:18;;;18850:30;18916:34;18896:18;;;18889:62;18987:10;18967:18;;;18960:38;19015:19;;6506:81:2;18636:404:11;6506:81:2;6606:16;;;6598:66;;;;-1:-1:-1;;;6598:66:2;;19247:2:11;6598:66:2;;;19229:21:11;19286:2;19266:18;;;19259:30;19325:34;19305:18;;;19298:62;19396:7;19376:18;;;19369:35;19421:19;;6598:66:2;19045:401:11;6598:66:2;681:10:1;6677:16:2;6794:421;6818:3;:10;6814:1;:14;6794:421;;;6850:10;6863:3;6867:1;6863:6;;;;;;;;:::i;:::-;;;;;;;6850:19;;6884:14;6901:7;6909:1;6901:10;;;;;;;;:::i;:::-;;;;;;;;;;;;6928:19;6950:13;;;;;;;;;;:19;;;;;;;;;;;;;6901:10;;-1:-1:-1;6992:21:2;;;;6984:76;;;;-1:-1:-1;;;6984:76:2;;19653:2:11;6984:76:2;;;19635:21:11;19692:2;19672:18;;;19665:30;19731:34;19711:18;;;19704:62;19802:12;19782:18;;;19775:40;19832:19;;6984:76:2;19451:406:11;6984:76:2;7104:9;:13;;;;;;;;;;;:19;;;;;;;;;;;7126:20;;;7104:42;;7176:17;;;;;;;:27;;7126:20;;7104:9;7176:27;;7126:20;;7176:27;:::i;:::-;;;;;;;;6835:380;;;6830:3;;;;:::i;:::-;;;6794:421;;;;7262:2;7232:47;;7256:4;7232:47;;7246:8;7232:47;;;7266:3;7271:7;7232:47;;;;;;;:::i;:::-;;;;;;;;7292:75;7328:8;7338:4;7344:2;7348:3;7353:7;7362:4;7292:35;:75::i;:::-;6495:880;6301:1074;;;;;:::o;8708:599::-;8866:21;;;8858:67;;;;-1:-1:-1;;;8858:67:2;;20534:2:11;8858:67:2;;;20516:21:11;20573:2;20553:18;;;20546:30;20612:34;20592:18;;;20585:62;20683:3;20663:18;;;20656:31;20704:19;;8858:67:2;20332:397:11;8858:67:2;681:10:1;8982:107:2;681:10:1;8938:16:2;9025:7;9034:21;9052:2;9034:17;:21::i;:::-;9057:25;9075:6;9057:17;:25::i;8982:107::-;9102:9;:13;;;;;;;;;;;:22;;;;;;;;;;:32;;9128:6;;9102:9;:32;;9128:6;;9102:32;:::i;:::-;;;;-1:-1:-1;;9150:57:2;;;17299:25:11;;;17355:2;17340:18;;17333:34;;;9150:57:2;;;;;9183:1;;9150:57;;;;;;17272:18:11;9150:57:2;;;;;;;9220:79;9251:8;9269:1;9273:7;9282:2;9286:6;9294:4;9220:30;:79::i;2099:173:9:-;2174:6;;;;2191:17;;;;;;;;;;;2224:40;;2174:6;;;2191:17;2174:6;;2224:40;;2155:16;;2224:40;2144:128;2099:173;:::o;10657:675:2:-;10787:21;;;10779:69;;;;-1:-1:-1;;;10779:69:2;;20936:2:11;10779:69:2;;;20918:21:11;20975:2;20955:18;;;20948:30;21014:34;20994:18;;;20987:62;21085:5;21065:18;;;21058:33;21108:19;;10779:69:2;20734:399:11;10779:69:2;681:10:1;10905:105:2;681:10:1;10936:7:2;10861:16;10957:21;10975:2;10957:17;:21::i;:::-;10980:25;10998:6;10980:17;:25::i;:::-;-1:-1:-1;;10905:105:2;;;;;;;;;-1:-1:-1;10905:105:2;;-1:-1:-1;;;6301:1074:2;10905:105;11023:22;11048:13;;;;;;;;;;;:22;;;;;;;;;;;11089:24;;;;11081:73;;;;-1:-1:-1;;;11081:73:2;;21340:2:11;11081:73:2;;;21322:21:11;21379:2;21359:18;;;21352:30;21418:34;21398:18;;;21391:62;21489:6;21469:18;;;21462:34;21513:19;;11081:73:2;21138:400:11;11081:73:2;11190:9;:13;;;;;;;;;;;:22;;;;;;;;;;;;;11215:23;;;11190:48;;11267:57;;17299:25:11;;;17340:18;;;17333:34;;;11190:22:2;;11267:57;;;;;;17272:18:11;11267:57:2;;;;;;;10768:564;;10657:675;;;:::o;5123:820::-;5311:16;;;5303:66;;;;-1:-1:-1;;;5303:66:2;;19247:2:11;5303:66:2;;;19229:21:11;19286:2;19266:18;;;19259:30;19325:34;19305:18;;;19298:62;19396:7;19376:18;;;19369:35;19421:19;;5303:66:2;19045:401:11;5303:66:2;681:10:1;5426:96:2;681:10:1;5457:4:2;5463:2;5467:21;5485:2;5467:17;:21::i;5426:96::-;5535:19;5557:13;;;;;;;;;;;:19;;;;;;;;;;;5595:21;;;;5587:76;;;;-1:-1:-1;;;5587:76:2;;19653:2:11;5587:76:2;;;19635:21:11;19692:2;19672:18;;;19665:30;19731:34;19711:18;;;19704:62;19802:12;19782:18;;;19775:40;19832:19;;5587:76:2;19451:406:11;5587:76:2;5699:9;:13;;;;;;;;;;;:19;;;;;;;;;;;5721:20;;;5699:42;;5763:17;;;;;;;:27;;5721:20;;5699:9;5763:27;;5721:20;;5763:27;:::i;:::-;;;;-1:-1:-1;;5808:46:2;;;17299:25:11;;;17355:2;17340:18;;17333:34;;;5808:46:2;;;;;;;;;;;;;;;17272:18:11;5808:46:2;;;;;;;5867:68;5898:8;5908:4;5914:2;5918;5922:6;5930:4;5867:30;:68::i;:::-;5292:651;;5123:820;;;;;:::o;14394:817::-;14634:13;;;1066:20:0;1114:8;14630:574:2;;14670:79;;;;;:43;;;;;;:79;;14714:8;;14724:4;;14730:3;;14735:7;;14744:4;;14670:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14670:79:2;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;14666:527;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;15066:6;15059:14;;-1:-1:-1;;;15059:14:2;;;;;;;;:::i;14666:527::-;;;15115:62;;-1:-1:-1;;;15115:62:2;;23785:2:11;15115:62:2;;;23767:21:11;23824:2;23804:18;;;23797:30;23863:34;23843:18;;;23836:62;23934:22;23914:18;;;23907:50;23974:19;;15115:62:2;23583:416:11;14666:527:2;14831:64;;;14843:52;14831:64;14827:163;;14920:50;;-1:-1:-1;;;14920:50:2;;24206:2:11;14920:50:2;;;24188:21:11;24245:2;24225:18;;;24218:30;24284:34;24264:18;;;24257:62;24355:10;24335:18;;;24328:38;24383:19;;14920:50:2;24004:404:11;15219:198:2;15339:16;;;15353:1;15339:16;;;;;;;;;15285;;15314:22;;15339:16;;;;;;;;;;;;-1:-1:-1;15339:16:2;15314:41;;15377:7;15366:5;15372:1;15366:8;;;;;;;;:::i;:::-;;;;;;;;;;:18;15404:5;15219:198;-1:-1:-1;;15219:198:2:o;13638:748::-;13853:13;;;1066:20:0;1114:8;13849:530:2;;13889:72;;;;;:38;;;;;;:72;;13928:8;;13938:4;;13944:2;;13948:6;;13956:4;;13889:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13889:72:2;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;13885:483;;;;:::i;:::-;14011:59;;;14023:47;14011:59;14007:158;;14095:50;;-1:-1:-1;;;14095:50:2;;24206:2:11;14095:50:2;;;24188:21:11;24245:2;24225:18;;;24218:30;24284:34;24264:18;;;24257:62;24355:10;24335:18;;;24328:38;24383:19;;14095:50:2;24004:404:11;-1:-1:-1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:196:11;82:20;;142:42;131:54;;121:65;;111:93;;200:1;197;190:12;111:93;14:196;;;:::o;215:254::-;283:6;291;344:2;332:9;323:7;319:23;315:32;312:52;;;360:1;357;350:12;312:52;383:29;402:9;383:29;:::i;:::-;373:39;459:2;444:18;;;;431:32;;-1:-1:-1;;;215:254:11:o;656:177::-;741:66;734:5;730:78;723:5;720:89;710:117;;823:1;820;813:12;838:245;896:6;949:2;937:9;928:7;924:23;920:32;917:52;;;965:1;962;955:12;917:52;1004:9;991:23;1023:30;1047:5;1023:30;:::i;:::-;1072:5;838:245;-1:-1:-1;;;838:245:11:o;1280:180::-;1339:6;1392:2;1380:9;1371:7;1367:23;1363:32;1360:52;;;1408:1;1405;1398:12;1360:52;-1:-1:-1;1431:23:11;;1280:180;-1:-1:-1;1280:180:11:o;1465:258::-;1537:1;1547:113;1561:6;1558:1;1555:13;1547:113;;;1637:11;;;1631:18;1618:11;;;1611:39;1583:2;1576:10;1547:113;;;1678:6;1675:1;1672:13;1669:48;;;1713:1;1704:6;1699:3;1695:16;1688:27;1669:48;;1465:258;;;:::o;1728:328::-;1781:3;1819:5;1813:12;1846:6;1841:3;1834:19;1862:63;1918:6;1911:4;1906:3;1902:14;1895:4;1888:5;1884:16;1862:63;:::i;:::-;1970:2;1958:15;1975:66;1954:88;1945:98;;;;2045:4;1941:109;;1728:328;-1:-1:-1;;1728:328:11:o;2061:231::-;2210:2;2199:9;2192:21;2173:4;2230:56;2282:2;2271:9;2267:18;2259:6;2230:56;:::i;2297:184::-;2349:77;2346:1;2339:88;2446:4;2443:1;2436:15;2470:4;2467:1;2460:15;2486:308;2592:66;2587:2;2581:4;2577:13;2573:86;2565:6;2561:99;2726:6;2714:10;2711:22;2690:18;2678:10;2675:34;2672:62;2669:88;;;2737:18;;:::i;:::-;2773:2;2766:22;-1:-1:-1;;2486:308:11:o;2799:183::-;2859:4;2892:18;2884:6;2881:30;2878:56;;;2914:18;;:::i;:::-;-1:-1:-1;2959:1:11;2955:14;2971:4;2951:25;;2799:183::o;2987:724::-;3041:5;3094:3;3087:4;3079:6;3075:17;3071:27;3061:55;;3112:1;3109;3102:12;3061:55;3148:6;3135:20;3174:4;3197:43;3237:2;3197:43;:::i;:::-;3269:2;3263:9;3281:31;3309:2;3301:6;3281:31;:::i;:::-;3347:18;;;3439:1;3435:10;;;;3423:23;;3419:32;;;3381:15;;;;-1:-1:-1;3463:15:11;;;3460:35;;;3491:1;3488;3481:12;3460:35;3527:2;3519:6;3515:15;3539:142;3555:6;3550:3;3547:15;3539:142;;;3621:17;;3609:30;;3659:12;;;;3572;;3539:142;;;-1:-1:-1;3699:6:11;2987:724;-1:-1:-1;;;;;;2987:724:11:o;3716:527::-;3780:5;3814:18;3806:6;3803:30;3800:56;;;3836:18;;:::i;:::-;3885:2;3879:9;3897:128;4019:4;3950:66;3945:2;3937:6;3933:15;3929:88;3925:99;3917:6;3897:128;:::i;:::-;4043:6;4034:15;;4073:6;4065;4058:22;4113:3;4104:6;4099:3;4095:16;4092:25;4089:45;;;4130:1;4127;4120:12;4089:45;4180:6;4175:3;4168:4;4160:6;4156:17;4143:44;4235:1;4228:4;4219:6;4211;4207:19;4203:30;4196:41;;3716:527;;;;;:::o;4248:220::-;4290:5;4343:3;4336:4;4328:6;4324:17;4320:27;4310:55;;4361:1;4358;4351:12;4310:55;4383:79;4458:3;4449:6;4436:20;4429:4;4421:6;4417:17;4383:79;:::i;4473:943::-;4627:6;4635;4643;4651;4659;4712:3;4700:9;4691:7;4687:23;4683:33;4680:53;;;4729:1;4726;4719:12;4680:53;4752:29;4771:9;4752:29;:::i;:::-;4742:39;;4800:38;4834:2;4823:9;4819:18;4800:38;:::i;:::-;4790:48;;4889:2;4878:9;4874:18;4861:32;4912:18;4953:2;4945:6;4942:14;4939:34;;;4969:1;4966;4959:12;4939:34;4992:61;5045:7;5036:6;5025:9;5021:22;4992:61;:::i;:::-;4982:71;;5106:2;5095:9;5091:18;5078:32;5062:48;;5135:2;5125:8;5122:16;5119:36;;;5151:1;5148;5141:12;5119:36;5174:63;5229:7;5218:8;5207:9;5203:24;5174:63;:::i;:::-;5164:73;;5290:3;5279:9;5275:19;5262:33;5246:49;;5320:2;5310:8;5307:16;5304:36;;;5336:1;5333;5326:12;5304:36;;5359:51;5402:7;5391:8;5380:9;5376:24;5359:51;:::i;:::-;5349:61;;;4473:943;;;;;;;;:::o;5421:160::-;5486:20;;5542:13;;5535:21;5525:32;;5515:60;;5571:1;5568;5561:12;5586:180;5642:6;5695:2;5683:9;5674:7;5670:23;5666:32;5663:52;;;5711:1;5708;5701:12;5663:52;5734:26;5750:9;5734:26;:::i;5771:1208::-;5889:6;5897;5950:2;5938:9;5929:7;5925:23;5921:32;5918:52;;;5966:1;5963;5956:12;5918:52;6006:9;5993:23;6035:18;6076:2;6068:6;6065:14;6062:34;;;6092:1;6089;6082:12;6062:34;6130:6;6119:9;6115:22;6105:32;;6175:7;6168:4;6164:2;6160:13;6156:27;6146:55;;6197:1;6194;6187:12;6146:55;6233:2;6220:16;6255:4;6278:43;6318:2;6278:43;:::i;:::-;6350:2;6344:9;6362:31;6390:2;6382:6;6362:31;:::i;:::-;6428:18;;;6516:1;6512:10;;;;6504:19;;6500:28;;;6462:15;;;;-1:-1:-1;6540:19:11;;;6537:39;;;6572:1;6569;6562:12;6537:39;6596:11;;;;6616:148;6632:6;6627:3;6624:15;6616:148;;;6698:23;6717:3;6698:23;:::i;:::-;6686:36;;6649:12;;;;6742;;;;6616:148;;;6783:6;-1:-1:-1;;6827:18:11;;6814:32;;-1:-1:-1;;6858:16:11;;;6855:36;;;6887:1;6884;6877:12;6855:36;;6910:63;6965:7;6954:8;6943:9;6939:24;6910:63;:::i;:::-;6900:73;;;5771:1208;;;;;:::o;6984:435::-;7037:3;7075:5;7069:12;7102:6;7097:3;7090:19;7128:4;7157:2;7152:3;7148:12;7141:19;;7194:2;7187:5;7183:14;7215:1;7225:169;7239:6;7236:1;7233:13;7225:169;;;7300:13;;7288:26;;7334:12;;;;7369:15;;;;7261:1;7254:9;7225:169;;;-1:-1:-1;7410:3:11;;6984:435;-1:-1:-1;;;;;6984:435:11:o;7424:261::-;7603:2;7592:9;7585:21;7566:4;7623:56;7675:2;7664:9;7660:18;7652:6;7623:56;:::i;7690:450::-;7759:6;7812:2;7800:9;7791:7;7787:23;7783:32;7780:52;;;7828:1;7825;7818:12;7780:52;7868:9;7855:23;7901:18;7893:6;7890:30;7887:50;;;7933:1;7930;7923:12;7887:50;7956:22;;8009:4;8001:13;;7997:27;-1:-1:-1;7987:55:11;;8038:1;8035;8028:12;7987:55;8061:73;8126:7;8121:2;8108:16;8103:2;8099;8095:11;8061:73;:::i;:::-;8051:83;7690:450;-1:-1:-1;;;;7690:450:11:o;8145:367::-;8208:8;8218:6;8272:3;8265:4;8257:6;8253:17;8249:27;8239:55;;8290:1;8287;8280:12;8239:55;-1:-1:-1;8313:20:11;;8356:18;8345:30;;8342:50;;;8388:1;8385;8378:12;8342:50;8425:4;8417:6;8413:17;8401:29;;8485:3;8478:4;8468:6;8465:1;8461:14;8453:6;8449:27;8445:38;8442:47;8439:67;;;8502:1;8499;8492:12;8439:67;8145:367;;;;;:::o;8517:773::-;8639:6;8647;8655;8663;8716:2;8704:9;8695:7;8691:23;8687:32;8684:52;;;8732:1;8729;8722:12;8684:52;8772:9;8759:23;8801:18;8842:2;8834:6;8831:14;8828:34;;;8858:1;8855;8848:12;8828:34;8897:70;8959:7;8950:6;8939:9;8935:22;8897:70;:::i;:::-;8986:8;;-1:-1:-1;8871:96:11;-1:-1:-1;9074:2:11;9059:18;;9046:32;;-1:-1:-1;9090:16:11;;;9087:36;;;9119:1;9116;9109:12;9087:36;;9158:72;9222:7;9211:8;9200:9;9196:24;9158:72;:::i;:::-;8517:773;;;;-1:-1:-1;9249:8:11;-1:-1:-1;;;;8517:773:11:o;9526:254::-;9591:6;9599;9652:2;9640:9;9631:7;9627:23;9623:32;9620:52;;;9668:1;9665;9658:12;9620:52;9691:29;9710:9;9691:29;:::i;:::-;9681:39;;9739:35;9770:2;9759:9;9755:18;9739:35;:::i;:::-;9729:45;;9526:254;;;;;:::o;9785:391::-;9871:6;9879;9887;9895;9948:3;9936:9;9927:7;9923:23;9919:33;9916:53;;;9965:1;9962;9955:12;9916:53;9988:29;10007:9;9988:29;:::i;:::-;9978:39;10064:2;10049:18;;10036:32;;-1:-1:-1;10115:2:11;10100:18;;10087:32;;10166:2;10151:18;10138:32;;-1:-1:-1;9785:391:11;-1:-1:-1;;;9785:391:11:o;10181:260::-;10249:6;10257;10310:2;10298:9;10289:7;10285:23;10281:32;10278:52;;;10326:1;10323;10316:12;10278:52;10349:29;10368:9;10349:29;:::i;:::-;10339:39;;10397:38;10431:2;10420:9;10416:18;10397:38;:::i;10446:606::-;10550:6;10558;10566;10574;10582;10635:3;10623:9;10614:7;10610:23;10606:33;10603:53;;;10652:1;10649;10642:12;10603:53;10675:29;10694:9;10675:29;:::i;:::-;10665:39;;10723:38;10757:2;10746:9;10742:18;10723:38;:::i;:::-;10713:48;;10808:2;10797:9;10793:18;10780:32;10770:42;;10859:2;10848:9;10844:18;10831:32;10821:42;;10914:3;10903:9;10899:19;10886:33;10942:18;10934:6;10931:30;10928:50;;;10974:1;10971;10964:12;10928:50;10997:49;11038:7;11029:6;11018:9;11014:22;10997:49;:::i;11057:186::-;11116:6;11169:2;11157:9;11148:7;11144:23;11140:32;11137:52;;;11185:1;11182;11175:12;11137:52;11208:29;11227:9;11208:29;:::i;11660:437::-;11739:1;11735:12;;;;11782;;;11803:61;;11857:4;11849:6;11845:17;11835:27;;11803:61;11910:2;11902:6;11899:14;11879:18;11876:38;11873:218;;;11947:77;11944:1;11937:88;12048:4;12045:1;12038:15;12076:4;12073:1;12066:15;11873:218;;11660:437;;;:::o;12228:185::-;12270:3;12308:5;12302:12;12323:52;12368:6;12363:3;12356:4;12349:5;12345:16;12323:52;:::i;:::-;12391:16;;;;;12228:185;-1:-1:-1;;12228:185:11:o;12418:1289::-;12594:3;12623:1;12656:6;12650:13;12686:3;12708:1;12736:9;12732:2;12728:18;12718:28;;12796:2;12785:9;12781:18;12818;12808:61;;12862:4;12854:6;12850:17;12840:27;;12808:61;12888:2;12936;12928:6;12925:14;12905:18;12902:38;12899:222;;;12975:77;12970:3;12963:90;13076:4;13073:1;13066:15;13106:4;13101:3;13094:17;12899:222;13137:18;13164:162;;;;13340:1;13335:320;;;;13130:525;;13164:162;13212:66;13201:9;13197:82;13192:3;13185:95;13309:6;13304:3;13300:16;13293:23;;13164:162;;13335:320;12175:1;12168:14;;;12212:4;12199:18;;13430:1;13444:165;13458:6;13455:1;13452:13;13444:165;;;13536:14;;13523:11;;;13516:35;13579:16;;;;13473:10;;13444:165;;;13448:3;;13638:6;13633:3;13629:16;13622:23;;13130:525;;;;;;;13671:30;13697:3;13689:6;13671:30;:::i;:::-;13664:37;12418:1289;-1:-1:-1;;;;;12418:1289:11:o;14902:184::-;14954:77;14951:1;14944:88;15051:4;15048:1;15041:15;15075:4;15072:1;15065:15;15091:184;15143:77;15140:1;15133:88;15240:4;15237:1;15230:15;15264:4;15261:1;15254:15;15280:195;15319:3;15350:66;15343:5;15340:77;15337:103;;;15420:18;;:::i;:::-;-1:-1:-1;15467:1:11;15456:13;;15280:195::o;16992:128::-;17032:3;17063:1;17059:6;17056:1;17053:13;17050:39;;;17069:18;;:::i;:::-;-1:-1:-1;17105:9:11;;16992:128::o;17785:274::-;17825:1;17851;17841:189;;17886:77;17883:1;17876:88;17987:4;17984:1;17977:15;18015:4;18012:1;18005:15;17841:189;-1:-1:-1;18044:9:11;;17785:274::o;18064:125::-;18104:4;18132:1;18129;18126:8;18123:34;;;18137:18;;:::i;:::-;-1:-1:-1;18174:9:11;;18064:125::o;18194:228::-;18234:7;18360:1;18292:66;18288:74;18285:1;18282:81;18277:1;18270:9;18263:17;18259:105;18256:131;;;18367:18;;:::i;:::-;-1:-1:-1;18407:9:11;;18194:228::o;18427:204::-;18465:3;18501:4;18498:1;18494:12;18533:4;18530:1;18526:12;18568:3;18562:4;18558:14;18553:3;18550:23;18547:49;;;18576:18;;:::i;:::-;18612:13;;18427:204;-1:-1:-1;;;18427:204:11:o;19862:465::-;20119:2;20108:9;20101:21;20082:4;20145:56;20197:2;20186:9;20182:18;20174:6;20145:56;:::i;:::-;20249:9;20241:6;20237:22;20232:2;20221:9;20217:18;20210:50;20277:44;20314:6;20306;20277:44;:::i;21543:861::-;21865:4;21894:42;21975:2;21967:6;21963:15;21952:9;21945:34;22027:2;22019:6;22015:15;22010:2;21999:9;21995:18;21988:43;;22067:3;22062:2;22051:9;22047:18;22040:31;22094:57;22146:3;22135:9;22131:19;22123:6;22094:57;:::i;:::-;22199:9;22191:6;22187:22;22182:2;22171:9;22167:18;22160:50;22233:44;22270:6;22262;22233:44;:::i;:::-;22219:58;;22326:9;22318:6;22314:22;22308:3;22297:9;22293:19;22286:51;22354:44;22391:6;22383;22354:44;:::i;:::-;22346:52;21543:861;-1:-1:-1;;;;;;;;21543:861:11:o;22409:249::-;22478:6;22531:2;22519:9;22510:7;22506:23;22502:32;22499:52;;;22547:1;22544;22537:12;22499:52;22579:9;22573:16;22598:30;22622:5;22598:30;:::i;22663:179::-;22698:3;22740:1;22722:16;22719:23;22716:120;;;22786:1;22783;22780;22765:23;-1:-1:-1;22823:1:11;22817:8;22812:3;22808:18;22716:120;22663:179;:::o;22847:731::-;22886:3;22928:4;22910:16;22907:26;22904:39;;;22847:731;:::o;22904:39::-;22970:2;22964:9;22992:66;23113:2;23095:16;23091:25;23088:1;23082:4;23067:50;23146:4;23140:11;23170:16;23205:18;23276:2;23269:4;23261:6;23257:17;23254:25;23249:2;23241:6;23238:14;23235:45;23232:58;;;23283:5;;;;;22847:731;:::o;23232:58::-;23320:6;23314:4;23310:17;23299:28;;23356:3;23350:10;23383:2;23375:6;23372:14;23369:27;;;23389:5;;;;;;22847:731;:::o;23369:27::-;23473:2;23454:16;23448:4;23444:27;23440:36;23433:4;23424:6;23419:3;23415:16;23411:27;23408:69;23405:82;;;23480:5;;;;;;22847:731;:::o;23405:82::-;23496:57;23547:4;23538:6;23530;23526:19;23522:30;23516:4;23496:57;:::i;:::-;-1:-1:-1;23569:3:11;;22847:731;-1:-1:-1;;;;;22847:731:11:o;24413:595::-;24635:4;24664:42;24745:2;24737:6;24733:15;24722:9;24715:34;24797:2;24789:6;24785:15;24780:2;24769:9;24765:18;24758:43;;24837:6;24832:2;24821:9;24817:18;24810:34;24880:6;24875:2;24864:9;24860:18;24853:34;24924:3;24918;24907:9;24903:19;24896:32;24945:57;24997:3;24986:9;24982:19;24974:6;24945:57;:::i;:::-;24937:65;24413:595;-1:-1:-1;;;;;;;24413:595:11:o

Swarm Source

ipfs://45acb33d35f0cfa081fb7b511d89cb27643761717d421c934416f143387d2c95
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.