Feature Tip: Add private address tag to any address under My Name Tag !
ERC-1155
Overview
Max Total Supply
0
Holders
1,328
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
MythicArtifacts
Compiler Version
v0.8.10+commit.fc410830
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-11-16 */ /** *Submitted for verification at Etherscan.io on 2022-08-02 */ // SPDX-License-Identifier: MIT /* .____ .__ .__ .___ | | |__| ________ __|__| __| _/ | | | |/ ____/ | \ |/ __ | | |___| < <_| | | / / /_/ | |_______ \__|\__ |____/|__\____ | \/ |__| \/ Standing on the shoulders of giants -- Yuga Labs & MAYC * Written by Aleph 0ne for the ApeLiquid community * * Liquid Enhancements are in-game items like weapons, etc. * */ // File @openzeppelin/contracts/utils/introspection/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File @openzeppelin/contracts/token/ERC1155/[email protected] // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC1155/IERC1155.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle( address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value ); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll( address indexed account, address indexed operator, bool approved ); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes calldata data ) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data ) external; } // File @openzeppelin/contracts/token/ERC1155/[email protected] // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol) pragma solidity ^0.8.0; /** * @dev _Available since v3.1._ */ interface IERC1155Receiver is IERC165 { /** * @dev Handles the receipt of a single ERC1155 token type. This function is * called at the end of a `safeTransferFrom` after the balance has been updated. * * NOTE: To accept the transfer, this must return * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` * (i.e. 0xf23a6e61, or its own function selector). * * @param operator The address which initiated the transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param id The ID of the token being transferred * @param value The amount of tokens being transferred * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); /** * @dev Handles the receipt of a multiple ERC1155 token types. This function * is called at the end of a `safeBatchTransferFrom` after the balances have * been updated. * * NOTE: To accept the transfer(s), this must return * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` * (i.e. 0xbc197c81, or its own function selector). * * @param operator The address which initiated the batch transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param ids An array containing ids of each token being transferred (order and length must match values array) * @param values An array containing amounts of each token being transferred (order and length must match ids array) * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); } // File @openzeppelin/contracts/token/ERC1155/extensions/[email protected] // OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol) pragma solidity ^0.8.0; /** * @dev Interface of the optional ERC1155MetadataExtension interface, as defined * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP]. * * _Available since v3.1._ */ interface IERC1155MetadataURI is IERC1155 { /** * @dev Returns the URI for token type `id`. * * If the `\{id\}` substring is present in the URI, it must be replaced by * clients with the actual token type ID. */ function uri(uint256 id) external view returns (string memory); } // File @openzeppelin/contracts/utils/[email protected] // OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require( address(this).balance >= amount, "Address: insufficient balance" ); (bool success, ) = recipient.call{value: amount}(""); require( success, "Address: unable to send value, recipient may have reverted" ); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue( target, data, value, "Address: low-level call with value failed" ); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require( address(this).balance >= value, "Address: insufficient balance for call" ); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}( data ); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall( target, data, "Address: low-level static call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall( target, data, "Address: low-level delegate call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File @openzeppelin/contracts/utils/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File @openzeppelin/contracts/utils/introspection/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File @openzeppelin/contracts/token/ERC1155/[email protected] pragma solidity ^0.8.0; /** * @dev Implementation of the basic standard multi-token. * See https://eips.ethereum.org/EIPS/eip-1155 * Originally based on code by Enjin: https://github.com/enjin/erc-1155 * * _Available since v3.1._ */ contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI { using Address for address; // Mapping from token ID to account balances mapping(uint256 => mapping(address => uint256)) private _balances; // Mapping from account to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json string private _uri; /** * @dev See {_setURI}. */ constructor(string memory uri_) { _setURI(uri_); } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC1155).interfaceId || interfaceId == type(IERC1155MetadataURI).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC1155MetadataURI-uri}. * * This implementation returns the same URI for *all* token types. It relies * on the token type ID substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * Clients calling this function must replace the `\{id\}` substring with the * actual token type ID. */ function uri(uint256) public view virtual override returns (string memory) { return _uri; } /** * @dev See {IERC1155-balanceOf}. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) public view virtual override returns (uint256) { require( account != address(0), "ERC1155: address zero is not a valid owner" ); return _balances[id][account]; } /** * @dev See {IERC1155-balanceOfBatch}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] memory accounts, uint256[] memory ids) public view virtual override returns (uint256[] memory) { require( accounts.length == ids.length, "ERC1155: accounts and ids length mismatch" ); uint256[] memory batchBalances = new uint256[](accounts.length); for (uint256 i = 0; i < accounts.length; ++i) { batchBalances[i] = balanceOf(accounts[i], ids[i]); } return batchBalances; } /** * @dev See {IERC1155-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC1155-isApprovedForAll}. */ function isApprovedForAll(address account, address operator) public view virtual override returns (bool) { return _operatorApprovals[account][operator]; } /** * @dev See {IERC1155-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: caller is not token 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: caller is not token 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(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, from, to, ids, amounts, 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); _afterTokenTransfer(operator, from, to, ids, amounts, data); _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); _afterTokenTransfer(operator, from, to, ids, amounts, data); _doSafeBatchTransferAcceptanceCheck( operator, from, to, ids, amounts, data ); } /** * @dev Sets a new URI for all token types, by relying on the token type ID * substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * By this mechanism, any occurrence of the `\{id\}` substring in either the * URI or any of the amounts in the JSON file at said URI will be replaced by * clients with the token type ID. * * For example, the `https://token-cdn-domain/\{id\}.json` URI would be * interpreted by clients as * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json` * for token type ID 0x4cce0. * * See {uri}. * * Because these URIs cannot be meaningfully represented by the {URI} event, * this function emits no events. */ function _setURI(string memory newuri) internal virtual { _uri = newuri; } /** * @dev Creates `amount` tokens of token type `id`, and assigns them to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _mint( address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); address operator = _msgSender(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); _balances[id][to] += amount; emit TransferSingle(operator, address(0), to, id, amount); _afterTokenTransfer(operator, address(0), to, ids, amounts, data); _doSafeTransferAcceptanceCheck( operator, address(0), to, id, amount, data ); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}. * * 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 _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); _afterTokenTransfer(operator, address(0), to, ids, amounts, data); _doSafeBatchTransferAcceptanceCheck( operator, address(0), to, ids, amounts, data ); } /** * @dev Destroys `amount` tokens of token type `id` from `from` * * Emits a {TransferSingle} event. * * Requirements: * * - `from` cannot be the zero address. * - `from` must have at least `amount` tokens of token type `id`. */ function _burn( address from, uint256 id, uint256 amount ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); address operator = _msgSender(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, from, address(0), ids, amounts, ""); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } emit TransferSingle(operator, from, address(0), id, amount); _afterTokenTransfer(operator, from, address(0), ids, amounts, ""); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. */ function _burnBatch( address from, uint256[] memory ids, uint256[] memory amounts ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); require( ids.length == amounts.length, "ERC1155: ids and amounts length mismatch" ); address operator = _msgSender(); _beforeTokenTransfer(operator, from, address(0), ids, amounts, ""); for (uint256 i = 0; i < ids.length; i++) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require( fromBalance >= amount, "ERC1155: burn amount exceeds balance" ); unchecked { _balances[id][from] = fromBalance - amount; } } emit TransferBatch(operator, from, address(0), ids, amounts); _afterTokenTransfer(operator, from, address(0), ids, amounts, ""); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits an {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC1155: setting approval status for self"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Hook that is called before any token transfer. This includes minting * and burning, as well as batched variants. * * The same hook is called on both single and batched variants. For single * transfers, the length of the `ids` and `amounts` 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 {} /** * @dev Hook that is called after 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 _afterTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual {} function _doSafeTransferAcceptanceCheck( address operator, address from, address to, uint256 id, uint256 amount, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155Received( operator, from, id, amount, data ) returns (bytes4 response) { if (response != IERC1155Receiver.onERC1155Received.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _doSafeBatchTransferAcceptanceCheck( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155BatchReceived( operator, from, ids, amounts, data ) returns (bytes4 response) { if ( response != IERC1155Receiver.onERC1155BatchReceived.selector ) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) { uint256[] memory array = new uint256[](1); array[0] = element; return array; } } // File @openzeppelin/contracts/utils/[email protected] // OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @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); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } } // File @openzeppelin/contracts/access/[email protected] // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File @openzeppelin/contracts/token/ERC1155/extensions/[email protected] // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC1155/extensions/ERC1155Supply.sol) pragma solidity ^0.8.0; /** * @dev Extension of ERC1155 that adds tracking of total supply per id. * * Useful for scenarios where Fungible and Non-fungible tokens have to be * clearly identified. Note: While a totalSupply of 1 might mean the * corresponding is an NFT, there is no guarantees that no other token with the * same id are not going to be minted. */ abstract contract ERC1155Supply is ERC1155 { mapping(uint256 => uint256) private _totalSupply; /** * @dev Total amount of tokens in with a given id. */ function totalSupply(uint256 id) public view virtual returns (uint256) { return _totalSupply[id]; } /** * @dev Indicates whether any token exist with a given id, or not. */ function exists(uint256 id) public view virtual returns (bool) { return ERC1155Supply.totalSupply(id) > 0; } /** * @dev See {ERC1155-_beforeTokenTransfer}. */ function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual override { super._beforeTokenTransfer(operator, from, to, ids, amounts, data); if (from == address(0)) { for (uint256 i = 0; i < ids.length; ++i) { _totalSupply[ids[i]] += amounts[i]; } } if (to == address(0)) { for (uint256 i = 0; i < ids.length; ++i) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 supply = _totalSupply[id]; require( supply >= amount, "ERC1155: burn amount exceeds totalSupply" ); unchecked { _totalSupply[id] = supply - amount; } } } } } pragma solidity ^0.8.6; contract MythicArtifacts is ERC1155, Ownable { using Strings for uint256; address private evolutionContract = 0x0B0237aD59e1BbCb611fdf0c9Fa07350C3f41e87; address private gatewayContract = 0xf85906f89aecA56aff6D34790677595aF6B4FBD7; string public baseURI = "https://apeliquid.io/mythicartifacts/json/"; string public name = "Mythic Artifacts"; mapping(uint256 => bool) public validArtifactTypes; event SetBaseURI(string indexed baseURI); constructor(string memory _baseURI) ERC1155(_baseURI) { validArtifactTypes[1] = true; validArtifactTypes[2] = true; validArtifactTypes[3] = true; validArtifactTypes[4] = true; validArtifactTypes[5] = true; validArtifactTypes[6] = true; // artifact 6 validArtifactTypes[7] = true; validArtifactTypes[8] = true; validArtifactTypes[9] = true; validArtifactTypes[10] = true; validArtifactTypes[11] = true; // Divine validArtifactTypes[12] = true; validArtifactTypes[13] = true; validArtifactTypes[14] = true; validArtifactTypes[15] = true; validArtifactTypes[16] = true; validArtifactTypes[17] = true; validArtifactTypes[18] = true; validArtifactTypes[42] = true; // Legendary emit SetBaseURI(baseURI); } /** * @notice Airdrop tokens to multiple addresses at once. * No strict supply is set in the contract. All methods are ownerOnly, * it is up to the owner to control the supply by not minting * past their desired number for each token. * @dev Airdrop tokens to each address in the calldata list, * setting the supply to the length of the list + previously minted (airdropped) supply. * Add an address once per token you would like to send. * @param _tokenIds The tokenIDs to send * @param _addresses address[] list of wallets to send tokens to * @param _qty The qty of each token we are sending */ function airdrop( uint256[] memory _tokenIds, address[] calldata _addresses, uint256[] memory _qty ) external onlyOwner { for (uint256 i = 0; i < _addresses.length; i++) { // Mint address, tokenid, amount _mint(_addresses[i], _tokenIds[i], _qty[i], "Mint-a-palooza!"); } } /** * @notice Sends multiple tokens to a single address * @param _tokenID The id of the token to send * @param _address The address to receive the tokens * @param _quantity How many to send she receiver */ function batchMint( uint256 _tokenID, address _address, uint256 _quantity ) external onlyOwner { _mint(_address, _tokenID, _quantity, ""); } /** * @notice Sets the name of the contract * @param _name the name to set */ function setName(string memory _name) public onlyOwner { name = _name; } /** * @notice Sets the evolution contract address * @param evolutionContractAddress the address to set */ function setEvolutionContract(address evolutionContractAddress) external onlyOwner { evolutionContract = evolutionContractAddress; } /** * @notice Sets the gateway contract address * @param aContractAddress the address to set */ function setGatewayContract(address aContractAddress) external onlyOwner { gatewayContract = aContractAddress; } /** * @notice Burn n artifacts (self burn) * @param tokenId the token to burn * @param totalToBurn how many? */ function burnMyArtifacts( uint256 tokenId, uint256 totalToBurn ) external { require(validArtifactTypes[tokenId], "Invalid token"); require(totalToBurn > 0, "Not enough tokens"); _burn(msg.sender, tokenId, totalToBurn); } /** * @notice Burn n artifacts (Evolution Contract) * @param tokenOwner the address of the owner * @param tokenId the token to burn * @param totalToBurn how many? */ function burnArtifacts( address tokenOwner, uint256 tokenId, uint256 totalToBurn ) external { require(msg.sender == evolutionContract, "Invalid Evolution Contract"); require(validArtifactTypes[tokenId], "Invalid token"); require(totalToBurn > 0, "Not enough tokens"); _burn(tokenOwner, tokenId, totalToBurn); } /** * @notice Burn 1 artifact (Open Mythic Gateway) * @param tokenOwner the address of the owner * @param tokenId the token to burn */ function openGateway( address tokenOwner, uint256 tokenId ) external { require(msg.sender == gatewayContract, "Invalid Gateway Contract"); require(validArtifactTypes[tokenId], "Invalid token"); _burn(tokenOwner, tokenId, 1); } function updateBaseUri(string memory _baseURI) external onlyOwner { baseURI = _baseURI; emit SetBaseURI(baseURI); } function uri(uint256 typeId) public view override returns (string memory) { require( validArtifactTypes[typeId], "URI requested for invalid artifact type" ); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, typeId.toString())) : baseURI; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_baseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"baseURI","type":"string"}],"name":"SetBaseURI","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"},{"internalType":"address[]","name":"_addresses","type":"address[]"},{"internalType":"uint256[]","name":"_qty","type":"uint256[]"}],"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":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenID","type":"uint256"},{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"_quantity","type":"uint256"}],"name":"batchMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenOwner","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"totalToBurn","type":"uint256"}],"name":"burnArtifacts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"totalToBurn","type":"uint256"}],"name":"burnMyArtifacts","outputs":[],"stateMutability":"nonpayable","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":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenOwner","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"openGateway","outputs":[],"stateMutability":"nonpayable","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":"address","name":"evolutionContractAddress","type":"address"}],"name":"setEvolutionContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"aContractAddress","type":"address"}],"name":"setGatewayContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_name","type":"string"}],"name":"setName","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":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseURI","type":"string"}],"name":"updateBaseUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"typeId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"validArtifactTypes","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
6080604052730b0237ad59e1bbcb611fdf0c9fa07350c3f41e87600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073f85906f89aeca56aff6d34790677595af6b4fbd7600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040518060600160405280602a815260200162004a6b602a913960069080519060200190620000df92919062000621565b506040518060400160405280601081526020017f4d79746869632041727469666163747300000000000000000000000000000000815250600790805190602001906200012d92919062000621565b503480156200013b57600080fd5b5060405162004a9538038062004a9583398181016040528101906200016191906200086e565b8062000173816200053760201b60201c565b5062000194620001886200055360201b60201c565b6200055b60201b60201c565b6001600860006001815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860006002815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860006003815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860006004815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860006005815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860006006815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860006007815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860006008815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860006009815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000600a815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000600b815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000600c815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000600d815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000600e815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000600f815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860006010815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860006011815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860006012815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000602a815260200190815260200160002060006101000a81548160ff0219169083151502179055506006604051620004fc9190620009cf565b60405180910390207f23c8c9488efebfd474e85a7956de6f39b17c7ab88502d42a623db2d8e382bbaa60405160405180910390a250620009e8565b80600290805190602001906200054f92919062000621565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200062f90620008ee565b90600052602060002090601f0160209004810192826200065357600085556200069f565b82601f106200066e57805160ff19168380011785556200069f565b828001600101855582156200069f579182015b828111156200069e57825182559160200191906001019062000681565b5b509050620006ae9190620006b2565b5090565b5b80821115620006cd576000816000905550600101620006b3565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200073a82620006ef565b810181811067ffffffffffffffff821117156200075c576200075b62000700565b5b80604052505050565b600062000771620006d1565b90506200077f82826200072f565b919050565b600067ffffffffffffffff821115620007a257620007a162000700565b5b620007ad82620006ef565b9050602081019050919050565b60005b83811015620007da578082015181840152602081019050620007bd565b83811115620007ea576000848401525b50505050565b600062000807620008018462000784565b62000765565b905082815260208101848484011115620008265762000825620006ea565b5b62000833848285620007ba565b509392505050565b600082601f830112620008535762000852620006e5565b5b815162000865848260208601620007f0565b91505092915050565b600060208284031215620008875762000886620006db565b5b600082015167ffffffffffffffff811115620008a857620008a7620006e0565b5b620008b6848285016200083b565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200090757607f821691505b602082108114156200091e576200091d620008bf565b5b50919050565b600081905092915050565b60008190508160005260206000209050919050565b600081546200095381620008ee565b6200095f818662000924565b945060018216600081146200097d57600181146200098f57620009c6565b60ff19831686528186019350620009c6565b6200099a856200092f565b60005b83811015620009be578154818901526001820191506020810190506200099d565b838801955050505b50505092915050565b6000620009dd828462000944565b915081905092915050565b61407380620009f86000396000f3fe608060405234801561001057600080fd5b506004361061014c5760003560e01c806350932cb5116100c3578063c47f00271161007c578063c47f002714610385578063d10507a9146103a1578063d9374a92146103bd578063e985e9c5146103d9578063f242432a14610409578063f2fde38b146104255761014c565b806350932cb5146102d75780636c0360eb146102f3578063715018a6146103115780638da5cb5b1461031b578063a22cb46514610339578063c28329f1146103555761014c565b80632eb2c2d6116101155780632eb2c2d61461021b57806334de1fdf146102375780633567ed3b1461025357806339f7e37f1461026f578063451ccba51461028b5780634e1273f4146102a75761014c565b8062fdd58e1461015157806301ffc9a71461018157806306fdde03146101b15780630e575be6146101cf5780630e89341c146101eb575b600080fd5b61016b60048036038101906101669190612514565b610441565b6040516101789190612563565b60405180910390f35b61019b600480360381019061019691906125d6565b61050a565b6040516101a8919061261e565b60405180910390f35b6101b96105ec565b6040516101c691906126d2565b60405180910390f35b6101e960048036038101906101e49190612514565b61067a565b005b610205600480360381019061020091906126f4565b61077a565b60405161021291906126d2565b60405180910390f35b6102356004803603810190610230919061291e565b6108b5565b005b610251600480360381019061024c91906129ed565b610956565b005b61026d60048036038101906102689190612a40565b610a99565b005b61028960048036038101906102849190612b34565b610ac1565b005b6102a560048036038101906102a09190612b7d565b610b26565b005b6102c160048036038101906102bc9190612c6d565b610b72565b6040516102ce9190612da3565b60405180910390f35b6102f160048036038101906102ec9190612b7d565b610c8b565b005b6102fb610cd7565b60405161030891906126d2565b60405180910390f35b610319610d65565b005b610323610d79565b6040516103309190612dd4565b60405180910390f35b610353600480360381019061034e9190612e1b565b610da3565b005b61036f600480360381019061036a91906126f4565b610db9565b60405161037c919061261e565b60405180910390f35b61039f600480360381019061039a9190612b34565b610dd9565b005b6103bb60048036038101906103b69190612eb6565b610dfb565b005b6103d760048036038101906103d29190612f62565b610ec7565b005b6103f360048036038101906103ee9190612fa2565b610f79565b604051610400919061261e565b60405180910390f35b610423600480360381019061041e9190612fe2565b61100d565b005b61043f600480360381019061043a9190612b7d565b6110ae565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156104b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104a9906130eb565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105d557507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806105e557506105e482611132565b5b9050919050565b600780546105f99061313a565b80601f01602080910402602001604051908101604052809291908181526020018280546106259061313a565b80156106725780601f1061064757610100808354040283529160200191610672565b820191906000526020600020905b81548152906001019060200180831161065557829003601f168201915b505050505081565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461070a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610701906131b8565b60405180910390fd5b6008600082815260200190815260200160002060009054906101000a900460ff1661076a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076190613224565b60405180910390fd5b6107768282600161119c565b5050565b60606008600083815260200190815260200160002060009054906101000a900460ff166107dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107d3906132b6565b60405180910390fd5b6000600680546107eb9061313a565b90501161088257600680546107ff9061313a565b80601f016020809104026020016040519081016040528092919081815260200182805461082b9061313a565b80156108785780601f1061084d57610100808354040283529160200191610878565b820191906000526020600020905b81548152906001019060200180831161085b57829003601f168201915b50505050506108ae565b600661088d836113e3565b60405160200161089e9291906133a6565b6040516020818303038152906040525b9050919050565b6108bd611544565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806109035750610902856108fd611544565b610f79565b5b610942576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109399061343c565b60405180910390fd5b61094f858585858561154c565b5050505050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146109e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109dd906134a8565b60405180910390fd5b6008600083815260200190815260200160002060009054906101000a900460ff16610a46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3d90613224565b60405180910390fd5b60008111610a89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8090613514565b60405180910390fd5b610a9483838361119c565b505050565b610aa161186e565b610abc828483604051806020016040528060008152506118ec565b505050565b610ac961186e565b8060069080519060200190610adf9291906123c9565b506006604051610aef9190613534565b60405180910390207f23c8c9488efebfd474e85a7956de6f39b17c7ab88502d42a623db2d8e382bbaa60405160405180910390a250565b610b2e61186e565b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60608151835114610bb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610baf906135bd565b60405180910390fd5b6000835167ffffffffffffffff811115610bd557610bd4612726565b5b604051908082528060200260200182016040528015610c035781602001602082028036833780820191505090505b50905060005b8451811015610c8057610c50858281518110610c2857610c276135dd565b5b6020026020010151858381518110610c4357610c426135dd565b5b6020026020010151610441565b828281518110610c6357610c626135dd565b5b60200260200101818152505080610c799061363b565b9050610c09565b508091505092915050565b610c9361186e565b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60068054610ce49061313a565b80601f0160208091040260200160405190810160405280929190818152602001828054610d109061313a565b8015610d5d5780601f10610d3257610100808354040283529160200191610d5d565b820191906000526020600020905b815481529060010190602001808311610d4057829003601f168201915b505050505081565b610d6d61186e565b610d776000611a9d565b565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610db5610dae611544565b8383611b63565b5050565b60086020528060005260406000206000915054906101000a900460ff1681565b610de161186e565b8060079080519060200190610df79291906123c9565b5050565b610e0361186e565b60005b83839050811015610ec057610ead848483818110610e2757610e266135dd565b5b9050602002016020810190610e3c9190612b7d565b868381518110610e4f57610e4e6135dd565b5b6020026020010151848481518110610e6a57610e696135dd565b5b60200260200101516040518060400160405280600f81526020017f4d696e742d612d70616c6f6f7a612100000000000000000000000000000000008152506118ec565b8080610eb89061363b565b915050610e06565b5050505050565b6008600083815260200190815260200160002060009054906101000a900460ff16610f27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1e90613224565b60405180910390fd5b60008111610f6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6190613514565b60405180910390fd5b610f7533838361119c565b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611015611544565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061105b575061105a85611055611544565b610f79565b5b61109a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110919061343c565b60405180910390fd5b6110a78585858585611cd0565b5050505050565b6110b661186e565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611126576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111d906136f6565b60405180910390fd5b61112f81611a9d565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561120c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120390613788565b60405180910390fd5b6000611216611544565b9050600061122384611f6c565b9050600061123084611f6c565b905061125083876000858560405180602001604052806000815250611fe6565b600080600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050848110156112e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112de9061381a565b60405180910390fd5b84810360008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6289896040516113b492919061383a565b60405180910390a46113da84886000868660405180602001604052806000815250611fee565b50505050505050565b6060600082141561142b576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061153f565b600082905060005b6000821461145d5780806114469061363b565b915050600a826114569190613892565b9150611433565b60008167ffffffffffffffff81111561147957611478612726565b5b6040519080825280601f01601f1916602001820160405280156114ab5781602001600182028036833780820191505090505b5090505b60008514611538576001826114c491906138c3565b9150600a856114d391906138f7565b60306114df9190613928565b60f81b8183815181106114f5576114f46135dd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856115319190613892565b94506114af565b8093505050505b919050565b600033905090565b8151835114611590576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611587906139f0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611600576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f790613a82565b60405180910390fd5b600061160a611544565b905061161a818787878787611fe6565b60005b84518110156117cb57600085828151811061163b5761163a6135dd565b5b60200260200101519050600085838151811061165a576116596135dd565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156116fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f290613b14565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117b09190613928565b92505081905550505050806117c49061363b565b905061161d565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611842929190613b34565b60405180910390a4611858818787878787611fee565b611866818787878787611ff6565b505050505050565b611876611544565b73ffffffffffffffffffffffffffffffffffffffff16611894610d79565b73ffffffffffffffffffffffffffffffffffffffff16146118ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e190613bb7565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561195c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195390613c49565b60405180910390fd5b6000611966611544565b9050600061197385611f6c565b9050600061198085611f6c565b905061199183600089858589611fe6565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119f09190613928565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051611a6e92919061383a565b60405180910390a4611a8583600089858589611fee565b611a94836000898989896121ce565b50505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611bd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc990613cdb565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611cc3919061261e565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611d40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3790613a82565b60405180910390fd5b6000611d4a611544565b90506000611d5785611f6c565b90506000611d6485611f6c565b9050611d74838989858589611fe6565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015611e0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0290613b14565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ec09190613928565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051611f3d92919061383a565b60405180910390a4611f53848a8a86868a611fee565b611f61848a8a8a8a8a6121ce565b505050505050505050565b60606000600167ffffffffffffffff811115611f8b57611f8a612726565b5b604051908082528060200260200182016040528015611fb95781602001602082028036833780820191505090505b5090508281600081518110611fd157611fd06135dd565b5b60200260200101818152505080915050919050565b505050505050565b505050505050565b6120158473ffffffffffffffffffffffffffffffffffffffff166123a6565b156121c6578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b815260040161205b959493929190613d50565b6020604051808303816000875af192505050801561209757506040513d601f19601f820116820180604052508101906120949190613dcd565b60015b61213d576120a3613e07565b806308c379a0141561210057506120b8613e29565b806120c35750612102565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f791906126d2565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213490613f31565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146121c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121bb90613fc3565b60405180910390fd5b505b505050505050565b6121ed8473ffffffffffffffffffffffffffffffffffffffff166123a6565b1561239e578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612233959493929190613fe3565b6020604051808303816000875af192505050801561226f57506040513d601f19601f8201168201806040525081019061226c9190613dcd565b60015b6123155761227b613e07565b806308c379a014156122d85750612290613e29565b8061229b57506122da565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122cf91906126d2565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230c90613f31565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461239c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239390613fc3565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546123d59061313a565b90600052602060002090601f0160209004810192826123f7576000855561243e565b82601f1061241057805160ff191683800117855561243e565b8280016001018555821561243e579182015b8281111561243d578251825591602001919060010190612422565b5b50905061244b919061244f565b5090565b5b80821115612468576000816000905550600101612450565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006124ab82612480565b9050919050565b6124bb816124a0565b81146124c657600080fd5b50565b6000813590506124d8816124b2565b92915050565b6000819050919050565b6124f1816124de565b81146124fc57600080fd5b50565b60008135905061250e816124e8565b92915050565b6000806040838503121561252b5761252a612476565b5b6000612539858286016124c9565b925050602061254a858286016124ff565b9150509250929050565b61255d816124de565b82525050565b60006020820190506125786000830184612554565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6125b38161257e565b81146125be57600080fd5b50565b6000813590506125d0816125aa565b92915050565b6000602082840312156125ec576125eb612476565b5b60006125fa848285016125c1565b91505092915050565b60008115159050919050565b61261881612603565b82525050565b6000602082019050612633600083018461260f565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612673578082015181840152602081019050612658565b83811115612682576000848401525b50505050565b6000601f19601f8301169050919050565b60006126a482612639565b6126ae8185612644565b93506126be818560208601612655565b6126c781612688565b840191505092915050565b600060208201905081810360008301526126ec8184612699565b905092915050565b60006020828403121561270a57612709612476565b5b6000612718848285016124ff565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61275e82612688565b810181811067ffffffffffffffff8211171561277d5761277c612726565b5b80604052505050565b600061279061246c565b905061279c8282612755565b919050565b600067ffffffffffffffff8211156127bc576127bb612726565b5b602082029050602081019050919050565b600080fd5b60006127e56127e0846127a1565b612786565b90508083825260208201905060208402830185811115612808576128076127cd565b5b835b81811015612831578061281d88826124ff565b84526020840193505060208101905061280a565b5050509392505050565b600082601f8301126128505761284f612721565b5b81356128608482602086016127d2565b91505092915050565b600080fd5b600067ffffffffffffffff82111561288957612888612726565b5b61289282612688565b9050602081019050919050565b82818337600083830152505050565b60006128c16128bc8461286e565b612786565b9050828152602081018484840111156128dd576128dc612869565b5b6128e884828561289f565b509392505050565b600082601f83011261290557612904612721565b5b81356129158482602086016128ae565b91505092915050565b600080600080600060a0868803121561293a57612939612476565b5b6000612948888289016124c9565b9550506020612959888289016124c9565b945050604086013567ffffffffffffffff81111561297a5761297961247b565b5b6129868882890161283b565b935050606086013567ffffffffffffffff8111156129a7576129a661247b565b5b6129b38882890161283b565b925050608086013567ffffffffffffffff8111156129d4576129d361247b565b5b6129e0888289016128f0565b9150509295509295909350565b600080600060608486031215612a0657612a05612476565b5b6000612a14868287016124c9565b9350506020612a25868287016124ff565b9250506040612a36868287016124ff565b9150509250925092565b600080600060608486031215612a5957612a58612476565b5b6000612a67868287016124ff565b9350506020612a78868287016124c9565b9250506040612a89868287016124ff565b9150509250925092565b600067ffffffffffffffff821115612aae57612aad612726565b5b612ab782612688565b9050602081019050919050565b6000612ad7612ad284612a93565b612786565b905082815260208101848484011115612af357612af2612869565b5b612afe84828561289f565b509392505050565b600082601f830112612b1b57612b1a612721565b5b8135612b2b848260208601612ac4565b91505092915050565b600060208284031215612b4a57612b49612476565b5b600082013567ffffffffffffffff811115612b6857612b6761247b565b5b612b7484828501612b06565b91505092915050565b600060208284031215612b9357612b92612476565b5b6000612ba1848285016124c9565b91505092915050565b600067ffffffffffffffff821115612bc557612bc4612726565b5b602082029050602081019050919050565b6000612be9612be484612baa565b612786565b90508083825260208201905060208402830185811115612c0c57612c0b6127cd565b5b835b81811015612c355780612c2188826124c9565b845260208401935050602081019050612c0e565b5050509392505050565b600082601f830112612c5457612c53612721565b5b8135612c64848260208601612bd6565b91505092915050565b60008060408385031215612c8457612c83612476565b5b600083013567ffffffffffffffff811115612ca257612ca161247b565b5b612cae85828601612c3f565b925050602083013567ffffffffffffffff811115612ccf57612cce61247b565b5b612cdb8582860161283b565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612d1a816124de565b82525050565b6000612d2c8383612d11565b60208301905092915050565b6000602082019050919050565b6000612d5082612ce5565b612d5a8185612cf0565b9350612d6583612d01565b8060005b83811015612d96578151612d7d8882612d20565b9750612d8883612d38565b925050600181019050612d69565b5085935050505092915050565b60006020820190508181036000830152612dbd8184612d45565b905092915050565b612dce816124a0565b82525050565b6000602082019050612de96000830184612dc5565b92915050565b612df881612603565b8114612e0357600080fd5b50565b600081359050612e1581612def565b92915050565b60008060408385031215612e3257612e31612476565b5b6000612e40858286016124c9565b9250506020612e5185828601612e06565b9150509250929050565b600080fd5b60008083601f840112612e7657612e75612721565b5b8235905067ffffffffffffffff811115612e9357612e92612e5b565b5b602083019150836020820283011115612eaf57612eae6127cd565b5b9250929050565b60008060008060608587031215612ed057612ecf612476565b5b600085013567ffffffffffffffff811115612eee57612eed61247b565b5b612efa8782880161283b565b945050602085013567ffffffffffffffff811115612f1b57612f1a61247b565b5b612f2787828801612e60565b9350935050604085013567ffffffffffffffff811115612f4a57612f4961247b565b5b612f568782880161283b565b91505092959194509250565b60008060408385031215612f7957612f78612476565b5b6000612f87858286016124ff565b9250506020612f98858286016124ff565b9150509250929050565b60008060408385031215612fb957612fb8612476565b5b6000612fc7858286016124c9565b9250506020612fd8858286016124c9565b9150509250929050565b600080600080600060a08688031215612ffe57612ffd612476565b5b600061300c888289016124c9565b955050602061301d888289016124c9565b945050604061302e888289016124ff565b935050606061303f888289016124ff565b925050608086013567ffffffffffffffff8111156130605761305f61247b565b5b61306c888289016128f0565b9150509295509295909350565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b60006130d5602a83612644565b91506130e082613079565b604082019050919050565b60006020820190508181036000830152613104816130c8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061315257607f821691505b602082108114156131665761316561310b565b5b50919050565b7f496e76616c6964204761746577617920436f6e74726163740000000000000000600082015250565b60006131a2601883612644565b91506131ad8261316c565b602082019050919050565b600060208201905081810360008301526131d181613195565b9050919050565b7f496e76616c696420746f6b656e00000000000000000000000000000000000000600082015250565b600061320e600d83612644565b9150613219826131d8565b602082019050919050565b6000602082019050818103600083015261323d81613201565b9050919050565b7f5552492072657175657374656420666f7220696e76616c69642061727469666160008201527f6374207479706500000000000000000000000000000000000000000000000000602082015250565b60006132a0602783612644565b91506132ab82613244565b604082019050919050565b600060208201905081810360008301526132cf81613293565b9050919050565b600081905092915050565b60008190508160005260206000209050919050565b600081546133038161313a565b61330d81866132d6565b9450600182166000811461332857600181146133395761336c565b60ff1983168652818601935061336c565b613342856132e1565b60005b8381101561336457815481890152600182019150602081019050613345565b838801955050505b50505092915050565b600061338082612639565b61338a81856132d6565b935061339a818560208601612655565b80840191505092915050565b60006133b282856132f6565b91506133be8284613375565b91508190509392505050565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206e6f7220617070726f7665640000000000000000000000000000000000602082015250565b6000613426602f83612644565b9150613431826133ca565b604082019050919050565b6000602082019050818103600083015261345581613419565b9050919050565b7f496e76616c69642045766f6c7574696f6e20436f6e7472616374000000000000600082015250565b6000613492601a83612644565b915061349d8261345c565b602082019050919050565b600060208201905081810360008301526134c181613485565b9050919050565b7f4e6f7420656e6f75676820746f6b656e73000000000000000000000000000000600082015250565b60006134fe601183612644565b9150613509826134c8565b602082019050919050565b6000602082019050818103600083015261352d816134f1565b9050919050565b600061354082846132f6565b915081905092915050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b60006135a7602983612644565b91506135b28261354b565b604082019050919050565b600060208201905081810360008301526135d68161359a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613646826124de565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156136795761367861360c565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006136e0602683612644565b91506136eb82613684565b604082019050919050565b6000602082019050818103600083015261370f816136d3565b9050919050565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613772602383612644565b915061377d82613716565b604082019050919050565b600060208201905081810360008301526137a181613765565b9050919050565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b6000613804602483612644565b915061380f826137a8565b604082019050919050565b60006020820190508181036000830152613833816137f7565b9050919050565b600060408201905061384f6000830185612554565b61385c6020830184612554565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061389d826124de565b91506138a8836124de565b9250826138b8576138b7613863565b5b828204905092915050565b60006138ce826124de565b91506138d9836124de565b9250828210156138ec576138eb61360c565b5b828203905092915050565b6000613902826124de565b915061390d836124de565b92508261391d5761391c613863565b5b828206905092915050565b6000613933826124de565b915061393e836124de565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156139735761397261360c565b5b828201905092915050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b60006139da602883612644565b91506139e58261397e565b604082019050919050565b60006020820190508181036000830152613a09816139cd565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613a6c602583612644565b9150613a7782613a10565b604082019050919050565b60006020820190508181036000830152613a9b81613a5f565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b6000613afe602a83612644565b9150613b0982613aa2565b604082019050919050565b60006020820190508181036000830152613b2d81613af1565b9050919050565b60006040820190508181036000830152613b4e8185612d45565b90508181036020830152613b628184612d45565b90509392505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613ba1602083612644565b9150613bac82613b6b565b602082019050919050565b60006020820190508181036000830152613bd081613b94565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000613c33602183612644565b9150613c3e82613bd7565b604082019050919050565b60006020820190508181036000830152613c6281613c26565b9050919050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000613cc5602983612644565b9150613cd082613c69565b604082019050919050565b60006020820190508181036000830152613cf481613cb8565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000613d2282613cfb565b613d2c8185613d06565b9350613d3c818560208601612655565b613d4581612688565b840191505092915050565b600060a082019050613d656000830188612dc5565b613d726020830187612dc5565b8181036040830152613d848186612d45565b90508181036060830152613d988185612d45565b90508181036080830152613dac8184613d17565b90509695505050505050565b600081519050613dc7816125aa565b92915050565b600060208284031215613de357613de2612476565b5b6000613df184828501613db8565b91505092915050565b60008160e01c9050919050565b600060033d1115613e265760046000803e613e23600051613dfa565b90505b90565b600060443d1015613e3957613ebc565b613e4161246c565b60043d036004823e80513d602482011167ffffffffffffffff82111715613e69575050613ebc565b808201805167ffffffffffffffff811115613e875750505050613ebc565b80602083010160043d038501811115613ea4575050505050613ebc565b613eb382602001850186612755565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b6000613f1b603483612644565b9150613f2682613ebf565b604082019050919050565b60006020820190508181036000830152613f4a81613f0e565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b6000613fad602883612644565b9150613fb882613f51565b604082019050919050565b60006020820190508181036000830152613fdc81613fa0565b9050919050565b600060a082019050613ff86000830188612dc5565b6140056020830187612dc5565b6140126040830186612554565b61401f6060830185612554565b81810360808301526140318184613d17565b9050969550505050505056fea2646970667358221220a8cee9782715bfa2dcc1ef656cf040ae802d51c96f577d65b9a509e687aa4f4764736f6c634300080a003368747470733a2f2f6170656c69717569642e696f2f6d79746869636172746966616374732f6a736f6e2f0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002a68747470733a2f2f6170656c69717569642e696f2f6d79746869636172746966616374732f6a736f6e2f00000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061014c5760003560e01c806350932cb5116100c3578063c47f00271161007c578063c47f002714610385578063d10507a9146103a1578063d9374a92146103bd578063e985e9c5146103d9578063f242432a14610409578063f2fde38b146104255761014c565b806350932cb5146102d75780636c0360eb146102f3578063715018a6146103115780638da5cb5b1461031b578063a22cb46514610339578063c28329f1146103555761014c565b80632eb2c2d6116101155780632eb2c2d61461021b57806334de1fdf146102375780633567ed3b1461025357806339f7e37f1461026f578063451ccba51461028b5780634e1273f4146102a75761014c565b8062fdd58e1461015157806301ffc9a71461018157806306fdde03146101b15780630e575be6146101cf5780630e89341c146101eb575b600080fd5b61016b60048036038101906101669190612514565b610441565b6040516101789190612563565b60405180910390f35b61019b600480360381019061019691906125d6565b61050a565b6040516101a8919061261e565b60405180910390f35b6101b96105ec565b6040516101c691906126d2565b60405180910390f35b6101e960048036038101906101e49190612514565b61067a565b005b610205600480360381019061020091906126f4565b61077a565b60405161021291906126d2565b60405180910390f35b6102356004803603810190610230919061291e565b6108b5565b005b610251600480360381019061024c91906129ed565b610956565b005b61026d60048036038101906102689190612a40565b610a99565b005b61028960048036038101906102849190612b34565b610ac1565b005b6102a560048036038101906102a09190612b7d565b610b26565b005b6102c160048036038101906102bc9190612c6d565b610b72565b6040516102ce9190612da3565b60405180910390f35b6102f160048036038101906102ec9190612b7d565b610c8b565b005b6102fb610cd7565b60405161030891906126d2565b60405180910390f35b610319610d65565b005b610323610d79565b6040516103309190612dd4565b60405180910390f35b610353600480360381019061034e9190612e1b565b610da3565b005b61036f600480360381019061036a91906126f4565b610db9565b60405161037c919061261e565b60405180910390f35b61039f600480360381019061039a9190612b34565b610dd9565b005b6103bb60048036038101906103b69190612eb6565b610dfb565b005b6103d760048036038101906103d29190612f62565b610ec7565b005b6103f360048036038101906103ee9190612fa2565b610f79565b604051610400919061261e565b60405180910390f35b610423600480360381019061041e9190612fe2565b61100d565b005b61043f600480360381019061043a9190612b7d565b6110ae565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156104b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104a9906130eb565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105d557507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806105e557506105e482611132565b5b9050919050565b600780546105f99061313a565b80601f01602080910402602001604051908101604052809291908181526020018280546106259061313a565b80156106725780601f1061064757610100808354040283529160200191610672565b820191906000526020600020905b81548152906001019060200180831161065557829003601f168201915b505050505081565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461070a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610701906131b8565b60405180910390fd5b6008600082815260200190815260200160002060009054906101000a900460ff1661076a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076190613224565b60405180910390fd5b6107768282600161119c565b5050565b60606008600083815260200190815260200160002060009054906101000a900460ff166107dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107d3906132b6565b60405180910390fd5b6000600680546107eb9061313a565b90501161088257600680546107ff9061313a565b80601f016020809104026020016040519081016040528092919081815260200182805461082b9061313a565b80156108785780601f1061084d57610100808354040283529160200191610878565b820191906000526020600020905b81548152906001019060200180831161085b57829003601f168201915b50505050506108ae565b600661088d836113e3565b60405160200161089e9291906133a6565b6040516020818303038152906040525b9050919050565b6108bd611544565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806109035750610902856108fd611544565b610f79565b5b610942576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109399061343c565b60405180910390fd5b61094f858585858561154c565b5050505050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146109e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109dd906134a8565b60405180910390fd5b6008600083815260200190815260200160002060009054906101000a900460ff16610a46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3d90613224565b60405180910390fd5b60008111610a89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8090613514565b60405180910390fd5b610a9483838361119c565b505050565b610aa161186e565b610abc828483604051806020016040528060008152506118ec565b505050565b610ac961186e565b8060069080519060200190610adf9291906123c9565b506006604051610aef9190613534565b60405180910390207f23c8c9488efebfd474e85a7956de6f39b17c7ab88502d42a623db2d8e382bbaa60405160405180910390a250565b610b2e61186e565b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60608151835114610bb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610baf906135bd565b60405180910390fd5b6000835167ffffffffffffffff811115610bd557610bd4612726565b5b604051908082528060200260200182016040528015610c035781602001602082028036833780820191505090505b50905060005b8451811015610c8057610c50858281518110610c2857610c276135dd565b5b6020026020010151858381518110610c4357610c426135dd565b5b6020026020010151610441565b828281518110610c6357610c626135dd565b5b60200260200101818152505080610c799061363b565b9050610c09565b508091505092915050565b610c9361186e565b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60068054610ce49061313a565b80601f0160208091040260200160405190810160405280929190818152602001828054610d109061313a565b8015610d5d5780601f10610d3257610100808354040283529160200191610d5d565b820191906000526020600020905b815481529060010190602001808311610d4057829003601f168201915b505050505081565b610d6d61186e565b610d776000611a9d565b565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610db5610dae611544565b8383611b63565b5050565b60086020528060005260406000206000915054906101000a900460ff1681565b610de161186e565b8060079080519060200190610df79291906123c9565b5050565b610e0361186e565b60005b83839050811015610ec057610ead848483818110610e2757610e266135dd565b5b9050602002016020810190610e3c9190612b7d565b868381518110610e4f57610e4e6135dd565b5b6020026020010151848481518110610e6a57610e696135dd565b5b60200260200101516040518060400160405280600f81526020017f4d696e742d612d70616c6f6f7a612100000000000000000000000000000000008152506118ec565b8080610eb89061363b565b915050610e06565b5050505050565b6008600083815260200190815260200160002060009054906101000a900460ff16610f27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1e90613224565b60405180910390fd5b60008111610f6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6190613514565b60405180910390fd5b610f7533838361119c565b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611015611544565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061105b575061105a85611055611544565b610f79565b5b61109a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110919061343c565b60405180910390fd5b6110a78585858585611cd0565b5050505050565b6110b661186e565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611126576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111d906136f6565b60405180910390fd5b61112f81611a9d565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561120c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120390613788565b60405180910390fd5b6000611216611544565b9050600061122384611f6c565b9050600061123084611f6c565b905061125083876000858560405180602001604052806000815250611fe6565b600080600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050848110156112e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112de9061381a565b60405180910390fd5b84810360008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6289896040516113b492919061383a565b60405180910390a46113da84886000868660405180602001604052806000815250611fee565b50505050505050565b6060600082141561142b576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061153f565b600082905060005b6000821461145d5780806114469061363b565b915050600a826114569190613892565b9150611433565b60008167ffffffffffffffff81111561147957611478612726565b5b6040519080825280601f01601f1916602001820160405280156114ab5781602001600182028036833780820191505090505b5090505b60008514611538576001826114c491906138c3565b9150600a856114d391906138f7565b60306114df9190613928565b60f81b8183815181106114f5576114f46135dd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856115319190613892565b94506114af565b8093505050505b919050565b600033905090565b8151835114611590576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611587906139f0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611600576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f790613a82565b60405180910390fd5b600061160a611544565b905061161a818787878787611fe6565b60005b84518110156117cb57600085828151811061163b5761163a6135dd565b5b60200260200101519050600085838151811061165a576116596135dd565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156116fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f290613b14565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117b09190613928565b92505081905550505050806117c49061363b565b905061161d565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611842929190613b34565b60405180910390a4611858818787878787611fee565b611866818787878787611ff6565b505050505050565b611876611544565b73ffffffffffffffffffffffffffffffffffffffff16611894610d79565b73ffffffffffffffffffffffffffffffffffffffff16146118ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e190613bb7565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561195c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195390613c49565b60405180910390fd5b6000611966611544565b9050600061197385611f6c565b9050600061198085611f6c565b905061199183600089858589611fe6565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119f09190613928565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051611a6e92919061383a565b60405180910390a4611a8583600089858589611fee565b611a94836000898989896121ce565b50505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611bd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc990613cdb565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611cc3919061261e565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611d40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3790613a82565b60405180910390fd5b6000611d4a611544565b90506000611d5785611f6c565b90506000611d6485611f6c565b9050611d74838989858589611fe6565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015611e0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0290613b14565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ec09190613928565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051611f3d92919061383a565b60405180910390a4611f53848a8a86868a611fee565b611f61848a8a8a8a8a6121ce565b505050505050505050565b60606000600167ffffffffffffffff811115611f8b57611f8a612726565b5b604051908082528060200260200182016040528015611fb95781602001602082028036833780820191505090505b5090508281600081518110611fd157611fd06135dd565b5b60200260200101818152505080915050919050565b505050505050565b505050505050565b6120158473ffffffffffffffffffffffffffffffffffffffff166123a6565b156121c6578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b815260040161205b959493929190613d50565b6020604051808303816000875af192505050801561209757506040513d601f19601f820116820180604052508101906120949190613dcd565b60015b61213d576120a3613e07565b806308c379a0141561210057506120b8613e29565b806120c35750612102565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f791906126d2565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213490613f31565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146121c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121bb90613fc3565b60405180910390fd5b505b505050505050565b6121ed8473ffffffffffffffffffffffffffffffffffffffff166123a6565b1561239e578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612233959493929190613fe3565b6020604051808303816000875af192505050801561226f57506040513d601f19601f8201168201806040525081019061226c9190613dcd565b60015b6123155761227b613e07565b806308c379a014156122d85750612290613e29565b8061229b57506122da565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122cf91906126d2565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230c90613f31565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461239c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239390613fc3565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546123d59061313a565b90600052602060002090601f0160209004810192826123f7576000855561243e565b82601f1061241057805160ff191683800117855561243e565b8280016001018555821561243e579182015b8281111561243d578251825591602001919060010190612422565b5b50905061244b919061244f565b5090565b5b80821115612468576000816000905550600101612450565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006124ab82612480565b9050919050565b6124bb816124a0565b81146124c657600080fd5b50565b6000813590506124d8816124b2565b92915050565b6000819050919050565b6124f1816124de565b81146124fc57600080fd5b50565b60008135905061250e816124e8565b92915050565b6000806040838503121561252b5761252a612476565b5b6000612539858286016124c9565b925050602061254a858286016124ff565b9150509250929050565b61255d816124de565b82525050565b60006020820190506125786000830184612554565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6125b38161257e565b81146125be57600080fd5b50565b6000813590506125d0816125aa565b92915050565b6000602082840312156125ec576125eb612476565b5b60006125fa848285016125c1565b91505092915050565b60008115159050919050565b61261881612603565b82525050565b6000602082019050612633600083018461260f565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612673578082015181840152602081019050612658565b83811115612682576000848401525b50505050565b6000601f19601f8301169050919050565b60006126a482612639565b6126ae8185612644565b93506126be818560208601612655565b6126c781612688565b840191505092915050565b600060208201905081810360008301526126ec8184612699565b905092915050565b60006020828403121561270a57612709612476565b5b6000612718848285016124ff565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61275e82612688565b810181811067ffffffffffffffff8211171561277d5761277c612726565b5b80604052505050565b600061279061246c565b905061279c8282612755565b919050565b600067ffffffffffffffff8211156127bc576127bb612726565b5b602082029050602081019050919050565b600080fd5b60006127e56127e0846127a1565b612786565b90508083825260208201905060208402830185811115612808576128076127cd565b5b835b81811015612831578061281d88826124ff565b84526020840193505060208101905061280a565b5050509392505050565b600082601f8301126128505761284f612721565b5b81356128608482602086016127d2565b91505092915050565b600080fd5b600067ffffffffffffffff82111561288957612888612726565b5b61289282612688565b9050602081019050919050565b82818337600083830152505050565b60006128c16128bc8461286e565b612786565b9050828152602081018484840111156128dd576128dc612869565b5b6128e884828561289f565b509392505050565b600082601f83011261290557612904612721565b5b81356129158482602086016128ae565b91505092915050565b600080600080600060a0868803121561293a57612939612476565b5b6000612948888289016124c9565b9550506020612959888289016124c9565b945050604086013567ffffffffffffffff81111561297a5761297961247b565b5b6129868882890161283b565b935050606086013567ffffffffffffffff8111156129a7576129a661247b565b5b6129b38882890161283b565b925050608086013567ffffffffffffffff8111156129d4576129d361247b565b5b6129e0888289016128f0565b9150509295509295909350565b600080600060608486031215612a0657612a05612476565b5b6000612a14868287016124c9565b9350506020612a25868287016124ff565b9250506040612a36868287016124ff565b9150509250925092565b600080600060608486031215612a5957612a58612476565b5b6000612a67868287016124ff565b9350506020612a78868287016124c9565b9250506040612a89868287016124ff565b9150509250925092565b600067ffffffffffffffff821115612aae57612aad612726565b5b612ab782612688565b9050602081019050919050565b6000612ad7612ad284612a93565b612786565b905082815260208101848484011115612af357612af2612869565b5b612afe84828561289f565b509392505050565b600082601f830112612b1b57612b1a612721565b5b8135612b2b848260208601612ac4565b91505092915050565b600060208284031215612b4a57612b49612476565b5b600082013567ffffffffffffffff811115612b6857612b6761247b565b5b612b7484828501612b06565b91505092915050565b600060208284031215612b9357612b92612476565b5b6000612ba1848285016124c9565b91505092915050565b600067ffffffffffffffff821115612bc557612bc4612726565b5b602082029050602081019050919050565b6000612be9612be484612baa565b612786565b90508083825260208201905060208402830185811115612c0c57612c0b6127cd565b5b835b81811015612c355780612c2188826124c9565b845260208401935050602081019050612c0e565b5050509392505050565b600082601f830112612c5457612c53612721565b5b8135612c64848260208601612bd6565b91505092915050565b60008060408385031215612c8457612c83612476565b5b600083013567ffffffffffffffff811115612ca257612ca161247b565b5b612cae85828601612c3f565b925050602083013567ffffffffffffffff811115612ccf57612cce61247b565b5b612cdb8582860161283b565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612d1a816124de565b82525050565b6000612d2c8383612d11565b60208301905092915050565b6000602082019050919050565b6000612d5082612ce5565b612d5a8185612cf0565b9350612d6583612d01565b8060005b83811015612d96578151612d7d8882612d20565b9750612d8883612d38565b925050600181019050612d69565b5085935050505092915050565b60006020820190508181036000830152612dbd8184612d45565b905092915050565b612dce816124a0565b82525050565b6000602082019050612de96000830184612dc5565b92915050565b612df881612603565b8114612e0357600080fd5b50565b600081359050612e1581612def565b92915050565b60008060408385031215612e3257612e31612476565b5b6000612e40858286016124c9565b9250506020612e5185828601612e06565b9150509250929050565b600080fd5b60008083601f840112612e7657612e75612721565b5b8235905067ffffffffffffffff811115612e9357612e92612e5b565b5b602083019150836020820283011115612eaf57612eae6127cd565b5b9250929050565b60008060008060608587031215612ed057612ecf612476565b5b600085013567ffffffffffffffff811115612eee57612eed61247b565b5b612efa8782880161283b565b945050602085013567ffffffffffffffff811115612f1b57612f1a61247b565b5b612f2787828801612e60565b9350935050604085013567ffffffffffffffff811115612f4a57612f4961247b565b5b612f568782880161283b565b91505092959194509250565b60008060408385031215612f7957612f78612476565b5b6000612f87858286016124ff565b9250506020612f98858286016124ff565b9150509250929050565b60008060408385031215612fb957612fb8612476565b5b6000612fc7858286016124c9565b9250506020612fd8858286016124c9565b9150509250929050565b600080600080600060a08688031215612ffe57612ffd612476565b5b600061300c888289016124c9565b955050602061301d888289016124c9565b945050604061302e888289016124ff565b935050606061303f888289016124ff565b925050608086013567ffffffffffffffff8111156130605761305f61247b565b5b61306c888289016128f0565b9150509295509295909350565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b60006130d5602a83612644565b91506130e082613079565b604082019050919050565b60006020820190508181036000830152613104816130c8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061315257607f821691505b602082108114156131665761316561310b565b5b50919050565b7f496e76616c6964204761746577617920436f6e74726163740000000000000000600082015250565b60006131a2601883612644565b91506131ad8261316c565b602082019050919050565b600060208201905081810360008301526131d181613195565b9050919050565b7f496e76616c696420746f6b656e00000000000000000000000000000000000000600082015250565b600061320e600d83612644565b9150613219826131d8565b602082019050919050565b6000602082019050818103600083015261323d81613201565b9050919050565b7f5552492072657175657374656420666f7220696e76616c69642061727469666160008201527f6374207479706500000000000000000000000000000000000000000000000000602082015250565b60006132a0602783612644565b91506132ab82613244565b604082019050919050565b600060208201905081810360008301526132cf81613293565b9050919050565b600081905092915050565b60008190508160005260206000209050919050565b600081546133038161313a565b61330d81866132d6565b9450600182166000811461332857600181146133395761336c565b60ff1983168652818601935061336c565b613342856132e1565b60005b8381101561336457815481890152600182019150602081019050613345565b838801955050505b50505092915050565b600061338082612639565b61338a81856132d6565b935061339a818560208601612655565b80840191505092915050565b60006133b282856132f6565b91506133be8284613375565b91508190509392505050565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206e6f7220617070726f7665640000000000000000000000000000000000602082015250565b6000613426602f83612644565b9150613431826133ca565b604082019050919050565b6000602082019050818103600083015261345581613419565b9050919050565b7f496e76616c69642045766f6c7574696f6e20436f6e7472616374000000000000600082015250565b6000613492601a83612644565b915061349d8261345c565b602082019050919050565b600060208201905081810360008301526134c181613485565b9050919050565b7f4e6f7420656e6f75676820746f6b656e73000000000000000000000000000000600082015250565b60006134fe601183612644565b9150613509826134c8565b602082019050919050565b6000602082019050818103600083015261352d816134f1565b9050919050565b600061354082846132f6565b915081905092915050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b60006135a7602983612644565b91506135b28261354b565b604082019050919050565b600060208201905081810360008301526135d68161359a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613646826124de565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156136795761367861360c565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006136e0602683612644565b91506136eb82613684565b604082019050919050565b6000602082019050818103600083015261370f816136d3565b9050919050565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613772602383612644565b915061377d82613716565b604082019050919050565b600060208201905081810360008301526137a181613765565b9050919050565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b6000613804602483612644565b915061380f826137a8565b604082019050919050565b60006020820190508181036000830152613833816137f7565b9050919050565b600060408201905061384f6000830185612554565b61385c6020830184612554565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061389d826124de565b91506138a8836124de565b9250826138b8576138b7613863565b5b828204905092915050565b60006138ce826124de565b91506138d9836124de565b9250828210156138ec576138eb61360c565b5b828203905092915050565b6000613902826124de565b915061390d836124de565b92508261391d5761391c613863565b5b828206905092915050565b6000613933826124de565b915061393e836124de565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156139735761397261360c565b5b828201905092915050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b60006139da602883612644565b91506139e58261397e565b604082019050919050565b60006020820190508181036000830152613a09816139cd565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613a6c602583612644565b9150613a7782613a10565b604082019050919050565b60006020820190508181036000830152613a9b81613a5f565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b6000613afe602a83612644565b9150613b0982613aa2565b604082019050919050565b60006020820190508181036000830152613b2d81613af1565b9050919050565b60006040820190508181036000830152613b4e8185612d45565b90508181036020830152613b628184612d45565b90509392505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613ba1602083612644565b9150613bac82613b6b565b602082019050919050565b60006020820190508181036000830152613bd081613b94565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000613c33602183612644565b9150613c3e82613bd7565b604082019050919050565b60006020820190508181036000830152613c6281613c26565b9050919050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000613cc5602983612644565b9150613cd082613c69565b604082019050919050565b60006020820190508181036000830152613cf481613cb8565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000613d2282613cfb565b613d2c8185613d06565b9350613d3c818560208601612655565b613d4581612688565b840191505092915050565b600060a082019050613d656000830188612dc5565b613d726020830187612dc5565b8181036040830152613d848186612d45565b90508181036060830152613d988185612d45565b90508181036080830152613dac8184613d17565b90509695505050505050565b600081519050613dc7816125aa565b92915050565b600060208284031215613de357613de2612476565b5b6000613df184828501613db8565b91505092915050565b60008160e01c9050919050565b600060033d1115613e265760046000803e613e23600051613dfa565b90505b90565b600060443d1015613e3957613ebc565b613e4161246c565b60043d036004823e80513d602482011167ffffffffffffffff82111715613e69575050613ebc565b808201805167ffffffffffffffff811115613e875750505050613ebc565b80602083010160043d038501811115613ea4575050505050613ebc565b613eb382602001850186612755565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b6000613f1b603483612644565b9150613f2682613ebf565b604082019050919050565b60006020820190508181036000830152613f4a81613f0e565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b6000613fad602883612644565b9150613fb882613f51565b604082019050919050565b60006020820190508181036000830152613fdc81613fa0565b9050919050565b600060a082019050613ff86000830188612dc5565b6140056020830187612dc5565b6140126040830186612554565b61401f6060830185612554565b81810360808301526140318184613d17565b9050969550505050505056fea2646970667358221220a8cee9782715bfa2dcc1ef656cf040ae802d51c96f577d65b9a509e687aa4f4764736f6c634300080a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002a68747470733a2f2f6170656c69717569642e696f2f6d79746869636172746966616374732f6a736f6e2f00000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _baseURI (string): https://apeliquid.io/mythicartifacts/json/
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 000000000000000000000000000000000000000000000000000000000000002a
Arg [2] : 68747470733a2f2f6170656c69717569642e696f2f6d79746869636172746966
Arg [3] : 616374732f6a736f6e2f00000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
46155:5604:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22094:317;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21067:360;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46486:39;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50958:281;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51393:363;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24244:439;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50403:383;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48807:186;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51247:138;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49325:169;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22577:561;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49621:149;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46411:68;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43127:103;;;:::i;:::-;;42479:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23211:187;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46534:50;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49102:86;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48205:353;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49919:275;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23470:218;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23760:407;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43385:238;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22094:317;22225:7;22291:1;22272:21;;:7;:21;;;;22250:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;22381:9;:13;22391:2;22381:13;;;;;;;;;;;:22;22395:7;22381:22;;;;;;;;;;;;;;;;22374:29;;22094:317;;;;:::o;21067:360::-;21214:4;21271:26;21256:41;;;:11;:41;;;;:110;;;;21329:37;21314:52;;;:11;:52;;;;21256:110;:163;;;;21383:36;21407:11;21383:23;:36::i;:::-;21256:163;21236:183;;21067:360;;;:::o;46486:39::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;50958:281::-;51083:15;;;;;;;;;;;51069:29;;:10;:29;;;51061:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;51146:18;:27;51165:7;51146:27;;;;;;;;;;;;;;;;;;;;;51138:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;51202:29;51208:10;51220:7;51229:1;51202:5;:29::i;:::-;50958:281;;:::o;51393:363::-;51452:13;51500:18;:26;51519:6;51500:26;;;;;;;;;;;;;;;;;;;;;51478:115;;;;;;;;;;;;:::i;:::-;;;;;;;;;51648:1;51630:7;51624:21;;;;;:::i;:::-;;;:25;:124;;51741:7;51624:124;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51693:7;51702:17;:6;:15;:17::i;:::-;51676:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;51624:124;51604:144;;51393:363;;;:::o;24244:439::-;24485:12;:10;:12::i;:::-;24477:20;;:4;:20;;;:60;;;;24501:36;24518:4;24524:12;:10;:12::i;:::-;24501:16;:36::i;:::-;24477:60;24455:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;24623:52;24646:4;24652:2;24656:3;24661:7;24670:4;24623:22;:52::i;:::-;24244:439;;;;;:::o;50403:383::-;50560:17;;;;;;;;;;;50546:31;;:10;:31;;;50538:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;50627:18;:27;50646:7;50627:27;;;;;;;;;;;;;;;;;;;;;50619:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;50705:1;50691:11;:15;50683:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;50739:39;50745:10;50757:7;50766:11;50739:5;:39::i;:::-;50403:383;;;:::o;48807:186::-;42365:13;:11;:13::i;:::-;48945:40:::1;48951:8;48961;48971:9;48945:40;;;;;;;;;;;::::0;:5:::1;:40::i;:::-;48807:186:::0;;;:::o;51247:138::-;42365:13;:11;:13::i;:::-;51334:8:::1;51324:7;:18;;;;;;;;;;;;:::i;:::-;;51369:7;51358:19;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;51247:138:::0;:::o;49325:169::-;42365:13;:11;:13::i;:::-;49462:24:::1;49442:17;;:44;;;;;;;;;;;;;;;;;;49325:169:::0;:::o;22577:561::-;22733:16;22808:3;:10;22789:8;:15;:29;22767:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;22900:30;22947:8;:15;22933:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22900:63;;22981:9;22976:122;23000:8;:15;22996:1;:19;22976:122;;;23056:30;23066:8;23075:1;23066:11;;;;;;;;:::i;:::-;;;;;;;;23079:3;23083:1;23079:6;;;;;;;;:::i;:::-;;;;;;;;23056:9;:30::i;:::-;23037:13;23051:1;23037:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;23017:3;;;;:::i;:::-;;;22976:122;;;;23117:13;23110:20;;;22577:561;;;;:::o;49621:149::-;42365:13;:11;:13::i;:::-;49746:16:::1;49728:15;;:34;;;;;;;;;;;;;;;;;;49621:149:::0;:::o;46411:68::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;43127:103::-;42365:13;:11;:13::i;:::-;43192:30:::1;43219:1;43192:18;:30::i;:::-;43127:103::o:0;42479:87::-;42525:7;42552:6;;;;;;;;;;;42545:13;;42479:87;:::o;23211:187::-;23338:52;23357:12;:10;:12::i;:::-;23371:8;23381;23338:18;:52::i;:::-;23211:187;;:::o;46534:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;49102:86::-;42365:13;:11;:13::i;:::-;49175:5:::1;49168:4;:12;;;;;;;;;;;;:::i;:::-;;49102:86:::0;:::o;48205:353::-;42365:13;:11;:13::i;:::-;48373:9:::1;48368:183;48392:10;;:17;;48388:1;:21;48368:183;;;48477:62;48483:10;;48494:1;48483:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;48498:9;48508:1;48498:12;;;;;;;;:::i;:::-;;;;;;;;48512:4;48517:1;48512:7;;;;;;;;:::i;:::-;;;;;;;;48477:62;;;;;;;;;;;;;;;;::::0;:5:::1;:62::i;:::-;48411:3;;;;;:::i;:::-;;;;48368:183;;;;48205:353:::0;;;;:::o;49919:275::-;50035:18;:27;50054:7;50035:27;;;;;;;;;;;;;;;;;;;;;50027:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;50113:1;50099:11;:15;50091:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;50147:39;50153:10;50165:7;50174:11;50147:5;:39::i;:::-;49919:275;;:::o;23470:218::-;23614:4;23643:18;:27;23662:7;23643:27;;;;;;;;;;;;;;;:37;23671:8;23643:37;;;;;;;;;;;;;;;;;;;;;;;;;23636:44;;23470:218;;;;:::o;23760:407::-;23976:12;:10;:12::i;:::-;23968:20;;:4;:20;;;:60;;;;23992:36;24009:4;24015:12;:10;:12::i;:::-;23992:16;:36::i;:::-;23968:60;23946:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;24114:45;24132:4;24138:2;24142;24146:6;24154:4;24114:17;:45::i;:::-;23760:407;;;;;:::o;43385:238::-;42365:13;:11;:13::i;:::-;43508:1:::1;43488:22;;:8;:22;;;;43466:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;43587:28;43606:8;43587:18;:28::i;:::-;43385:238:::0;:::o;19848:207::-;19978:4;20022:25;20007:40;;;:11;:40;;;;20000:47;;19848:207;;;:::o;31613:808::-;31756:1;31740:18;;:4;:18;;;;31732:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;31811:16;31830:12;:10;:12::i;:::-;31811:31;;31853:20;31876:21;31894:2;31876:17;:21::i;:::-;31853:44;;31908:24;31935:25;31953:6;31935:17;:25::i;:::-;31908:52;;31973:66;31994:8;32004:4;32018:1;32022:3;32027:7;31973:66;;;;;;;;;;;;:20;:66::i;:::-;32052:19;32074:9;:13;32084:2;32074:13;;;;;;;;;;;:19;32088:4;32074:19;;;;;;;;;;;;;;;;32052:41;;32127:6;32112:11;:21;;32104:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;32246:6;32232:11;:20;32210:9;:13;32220:2;32210:13;;;;;;;;;;;:19;32224:4;32210:19;;;;;;;;;;;;;;;:42;;;;32320:1;32281:54;;32306:4;32281:54;;32296:8;32281:54;;;32324:2;32328:6;32281:54;;;;;;;:::i;:::-;;;;;;;;32348:65;32368:8;32378:4;32392:1;32396:3;32401:7;32348:65;;;;;;;;;;;;:19;:65::i;:::-;31721:700;;;;31613:808;;;:::o;39120:723::-;39176:13;39406:1;39397:5;:10;39393:53;;;39424:10;;;;;;;;;;;;;;;;;;;;;39393:53;39456:12;39471:5;39456:20;;39487:14;39512:78;39527:1;39519:4;:9;39512:78;;39545:8;;;;;:::i;:::-;;;;39576:2;39568:10;;;;;:::i;:::-;;;39512:78;;;39600:19;39632:6;39622:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39600:39;;39650:154;39666:1;39657:5;:10;39650:154;;39694:1;39684:11;;;;;:::i;:::-;;;39761:2;39753:5;:10;;;;:::i;:::-;39740:2;:24;;;;:::i;:::-;39727:39;;39710:6;39717;39710:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;39790:2;39781:11;;;;;:::i;:::-;;;39650:154;;;39828:6;39814:21;;;;;39120:723;;;;:::o;18769:98::-;18822:7;18849:10;18842:17;;18769:98;:::o;26516:1321::-;26757:7;:14;26743:3;:10;:28;26721:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;26872:1;26858:16;;:2;:16;;;;26850:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;26929:16;26948:12;:10;:12::i;:::-;26929:31;;26973:60;26994:8;27004:4;27010:2;27014:3;27019:7;27028:4;26973:20;:60::i;:::-;27051:9;27046:470;27070:3;:10;27066:1;:14;27046:470;;;27102:10;27115:3;27119:1;27115:6;;;;;;;;:::i;:::-;;;;;;;;27102:19;;27136:14;27153:7;27161:1;27153:10;;;;;;;;:::i;:::-;;;;;;;;27136:27;;27180:19;27202:9;:13;27212:2;27202:13;;;;;;;;;;;:19;27216:4;27202:19;;;;;;;;;;;;;;;;27180:41;;27277:6;27262:11;:21;;27236:125;;;;;;;;;;;;:::i;:::-;;;;;;;;;27441:6;27427:11;:20;27405:9;:13;27415:2;27405:13;;;;;;;;;;;:19;27419:4;27405:19;;;;;;;;;;;;;;;:42;;;;27498:6;27477:9;:13;27487:2;27477:13;;;;;;;;;;;:17;27491:2;27477:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;27087:429;;;27082:3;;;;:::i;:::-;;;27046:470;;;;27563:2;27533:47;;27557:4;27533:47;;27547:8;27533:47;;;27567:3;27572:7;27533:47;;;;;;;:::i;:::-;;;;;;;;27593:59;27613:8;27623:4;27629:2;27633:3;27638:7;27647:4;27593:19;:59::i;:::-;27665:164;27715:8;27738:4;27757:2;27774:3;27792:7;27814:4;27665:35;:164::i;:::-;26710:1127;26516:1321;;;;;:::o;42644:132::-;42719:12;:10;:12::i;:::-;42708:23;;:7;:5;:7::i;:::-;:23;;;42700:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42644:132::o;29155:818::-;29322:1;29308:16;;:2;:16;;;;29300:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;29375:16;29394:12;:10;:12::i;:::-;29375:31;;29417:20;29440:21;29458:2;29440:17;:21::i;:::-;29417:44;;29472:24;29499:25;29517:6;29499:17;:25::i;:::-;29472:52;;29537:66;29558:8;29576:1;29580:2;29584:3;29589:7;29598:4;29537:20;:66::i;:::-;29637:6;29616:9;:13;29626:2;29616:13;;;;;;;;;;;:17;29630:2;29616:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;29696:2;29659:52;;29692:1;29659:52;;29674:8;29659:52;;;29700:2;29704:6;29659:52;;;;;;;:::i;:::-;;;;;;;;29724:65;29744:8;29762:1;29766:2;29770:3;29775:7;29784:4;29724:19;:65::i;:::-;29802:163;29847:8;29878:1;29895:2;29912;29929:6;29950:4;29802:30;:163::i;:::-;29289:684;;;29155:818;;;;:::o;43783:191::-;43857:16;43876:6;;;;;;;;;;;43857:25;;43902:8;43893:6;;:17;;;;;;;;;;;;;;;;;;43957:8;43926:40;;43947:8;43926:40;;;;;;;;;;;;43846:128;43783:191;:::o;33869:331::-;34024:8;34015:17;;:5;:17;;;;34007:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;34127:8;34089:18;:25;34108:5;34089:25;;;;;;;;;;;;;;;:35;34115:8;34089:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;34173:8;34151:41;;34166:5;34151:41;;;34183:8;34151:41;;;;;;:::i;:::-;;;;;;;;33869:331;;;:::o;25147:1011::-;25349:1;25335:16;;:2;:16;;;;25327:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;25406:16;25425:12;:10;:12::i;:::-;25406:31;;25448:20;25471:21;25489:2;25471:17;:21::i;:::-;25448:44;;25503:24;25530:25;25548:6;25530:17;:25::i;:::-;25503:52;;25568:60;25589:8;25599:4;25605:2;25609:3;25614:7;25623:4;25568:20;:60::i;:::-;25641:19;25663:9;:13;25673:2;25663:13;;;;;;;;;;;:19;25677:4;25663:19;;;;;;;;;;;;;;;;25641:41;;25730:6;25715:11;:21;;25693:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;25878:6;25864:11;:20;25842:9;:13;25852:2;25842:13;;;;;;;;;;;:19;25856:4;25842:19;;;;;;;;;;;;;;;:42;;;;25927:6;25906:9;:13;25916:2;25906:13;;;;;;;;;;;:17;25920:2;25906:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;25982:2;25951:46;;25976:4;25951:46;;25966:8;25951:46;;;25986:2;25990:6;25951:46;;;;;;;:::i;:::-;;;;;;;;26010:59;26030:8;26040:4;26046:2;26050:3;26055:7;26064:4;26010:19;:59::i;:::-;26082:68;26113:8;26123:4;26129:2;26133;26137:6;26145:4;26082:30;:68::i;:::-;25316:842;;;;25147:1011;;;;;:::o;38451:230::-;38544:16;38578:22;38617:1;38603:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38578:41;;38641:7;38630:5;38636:1;38630:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;38668:5;38661:12;;;38451:230;;;:::o;35158:221::-;;;;;;;:::o;36334:220::-;;;;;;;:::o;37468:975::-;37708:15;:2;:13;;;:15::i;:::-;37704:732;;;37778:2;37761:43;;;37827:8;37858:4;37885:3;37911:7;37941:4;37761:203;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37740:685;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;38298:6;38291:14;;;;;;;;;;;:::i;:::-;;;;;;;;37740:685;;;38347:62;;;;;;;;;;:::i;:::-;;;;;;;;37740:685;38061:48;;;38049:60;;;:8;:60;;;;38023:199;;38152:50;;;;;;;;;;:::i;:::-;;;;;;;;38023:199;37978:259;37704:732;37468:975;;;;;;:::o;36562:898::-;36777:15;:2;:13;;;:15::i;:::-;36773:680;;;36847:2;36830:38;;;36891:8;36922:4;36949:2;36974:6;37003:4;36830:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36809:633;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;37315:6;37308:14;;;;;;;;;;;:::i;:::-;;;;;;;;36809:633;;;37364:62;;;;;;;;;;:::i;:::-;;;;;;;;36809:633;37101:43;;;37089:55;;;:8;:55;;;;37085:154;;37169:50;;;;;;;;;;:::i;:::-;;;;;;;;37085:154;37040:214;36773:680;36562:898;;;;;;:::o;10301:326::-;10361:4;10618:1;10596:7;:19;;;:23;10589:30;;10301:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:77::-;878:7;907:5;896:16;;841:77;;;:::o;924:122::-;997:24;1015:5;997:24;:::i;:::-;990:5;987:35;977:63;;1036:1;1033;1026:12;977:63;924:122;:::o;1052:139::-;1098:5;1136:6;1123:20;1114:29;;1152:33;1179:5;1152:33;:::i;:::-;1052:139;;;;:::o;1197:474::-;1265:6;1273;1322:2;1310:9;1301:7;1297:23;1293:32;1290:119;;;1328:79;;:::i;:::-;1290:119;1448:1;1473:53;1518:7;1509:6;1498:9;1494:22;1473:53;:::i;:::-;1463:63;;1419:117;1575:2;1601:53;1646:7;1637:6;1626:9;1622:22;1601:53;:::i;:::-;1591:63;;1546:118;1197:474;;;;;:::o;1677:118::-;1764:24;1782:5;1764:24;:::i;:::-;1759:3;1752:37;1677:118;;:::o;1801:222::-;1894:4;1932:2;1921:9;1917:18;1909:26;;1945:71;2013:1;2002:9;1998:17;1989:6;1945:71;:::i;:::-;1801:222;;;;:::o;2029:149::-;2065:7;2105:66;2098:5;2094:78;2083:89;;2029:149;;;:::o;2184:120::-;2256:23;2273:5;2256:23;:::i;:::-;2249:5;2246:34;2236:62;;2294:1;2291;2284:12;2236:62;2184:120;:::o;2310:137::-;2355:5;2393:6;2380:20;2371:29;;2409:32;2435:5;2409:32;:::i;:::-;2310:137;;;;:::o;2453:327::-;2511:6;2560:2;2548:9;2539:7;2535:23;2531:32;2528:119;;;2566:79;;:::i;:::-;2528:119;2686:1;2711:52;2755:7;2746:6;2735:9;2731:22;2711:52;:::i;:::-;2701:62;;2657:116;2453:327;;;;:::o;2786:90::-;2820:7;2863:5;2856:13;2849:21;2838:32;;2786:90;;;:::o;2882:109::-;2963:21;2978:5;2963:21;:::i;:::-;2958:3;2951:34;2882:109;;:::o;2997:210::-;3084:4;3122:2;3111:9;3107:18;3099:26;;3135:65;3197:1;3186:9;3182:17;3173:6;3135:65;:::i;:::-;2997:210;;;;:::o;3213:99::-;3265:6;3299:5;3293:12;3283:22;;3213:99;;;:::o;3318:169::-;3402:11;3436:6;3431:3;3424:19;3476:4;3471:3;3467:14;3452:29;;3318:169;;;;:::o;3493:307::-;3561:1;3571:113;3585:6;3582:1;3579:13;3571:113;;;3670:1;3665:3;3661:11;3655:18;3651:1;3646:3;3642:11;3635:39;3607:2;3604:1;3600:10;3595:15;;3571:113;;;3702:6;3699:1;3696:13;3693:101;;;3782:1;3773:6;3768:3;3764:16;3757:27;3693:101;3542:258;3493:307;;;:::o;3806:102::-;3847:6;3898:2;3894:7;3889:2;3882:5;3878:14;3874:28;3864:38;;3806:102;;;:::o;3914:364::-;4002:3;4030:39;4063:5;4030:39;:::i;:::-;4085:71;4149:6;4144:3;4085:71;:::i;:::-;4078:78;;4165:52;4210:6;4205:3;4198:4;4191:5;4187:16;4165:52;:::i;:::-;4242:29;4264:6;4242:29;:::i;:::-;4237:3;4233:39;4226:46;;4006:272;3914:364;;;;:::o;4284:313::-;4397:4;4435:2;4424:9;4420:18;4412:26;;4484:9;4478:4;4474:20;4470:1;4459:9;4455:17;4448:47;4512:78;4585:4;4576:6;4512:78;:::i;:::-;4504:86;;4284:313;;;;:::o;4603:329::-;4662:6;4711:2;4699:9;4690:7;4686:23;4682:32;4679:119;;;4717:79;;:::i;:::-;4679:119;4837:1;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4808:117;4603:329;;;;:::o;4938:117::-;5047:1;5044;5037:12;5061:180;5109:77;5106:1;5099:88;5206:4;5203:1;5196:15;5230:4;5227:1;5220:15;5247:281;5330:27;5352:4;5330:27;:::i;:::-;5322:6;5318:40;5460:6;5448:10;5445:22;5424:18;5412:10;5409:34;5406:62;5403:88;;;5471:18;;:::i;:::-;5403:88;5511:10;5507:2;5500:22;5290:238;5247:281;;:::o;5534:129::-;5568:6;5595:20;;:::i;:::-;5585:30;;5624:33;5652:4;5644:6;5624:33;:::i;:::-;5534:129;;;:::o;5669:311::-;5746:4;5836:18;5828:6;5825:30;5822:56;;;5858:18;;:::i;:::-;5822:56;5908:4;5900:6;5896:17;5888:25;;5968:4;5962;5958:15;5950:23;;5669:311;;;:::o;5986:117::-;6095:1;6092;6085:12;6126:710;6222:5;6247:81;6263:64;6320:6;6263:64;:::i;:::-;6247:81;:::i;:::-;6238:90;;6348:5;6377:6;6370:5;6363:21;6411:4;6404:5;6400:16;6393:23;;6464:4;6456:6;6452:17;6444:6;6440:30;6493:3;6485:6;6482:15;6479:122;;;6512:79;;:::i;:::-;6479:122;6627:6;6610:220;6644:6;6639:3;6636:15;6610:220;;;6719:3;6748:37;6781:3;6769:10;6748:37;:::i;:::-;6743:3;6736:50;6815:4;6810:3;6806:14;6799:21;;6686:144;6670:4;6665:3;6661:14;6654:21;;6610:220;;;6614:21;6228:608;;6126:710;;;;;:::o;6859:370::-;6930:5;6979:3;6972:4;6964:6;6960:17;6956:27;6946:122;;6987:79;;:::i;:::-;6946:122;7104:6;7091:20;7129:94;7219:3;7211:6;7204:4;7196:6;7192:17;7129:94;:::i;:::-;7120:103;;6936:293;6859:370;;;;:::o;7235:117::-;7344:1;7341;7334:12;7358:307;7419:4;7509:18;7501:6;7498:30;7495:56;;;7531:18;;:::i;:::-;7495:56;7569:29;7591:6;7569:29;:::i;:::-;7561:37;;7653:4;7647;7643:15;7635:23;;7358:307;;;:::o;7671:154::-;7755:6;7750:3;7745;7732:30;7817:1;7808:6;7803:3;7799:16;7792:27;7671:154;;;:::o;7831:410::-;7908:5;7933:65;7949:48;7990:6;7949:48;:::i;:::-;7933:65;:::i;:::-;7924:74;;8021:6;8014:5;8007:21;8059:4;8052:5;8048:16;8097:3;8088:6;8083:3;8079:16;8076:25;8073:112;;;8104:79;;:::i;:::-;8073:112;8194:41;8228:6;8223:3;8218;8194:41;:::i;:::-;7914:327;7831:410;;;;;:::o;8260:338::-;8315:5;8364:3;8357:4;8349:6;8345:17;8341:27;8331:122;;8372:79;;:::i;:::-;8331:122;8489:6;8476:20;8514:78;8588:3;8580:6;8573:4;8565:6;8561:17;8514:78;:::i;:::-;8505:87;;8321:277;8260:338;;;;:::o;8604:1509::-;8758:6;8766;8774;8782;8790;8839:3;8827:9;8818:7;8814:23;8810:33;8807:120;;;8846:79;;:::i;:::-;8807:120;8966:1;8991:53;9036:7;9027:6;9016:9;9012:22;8991:53;:::i;:::-;8981:63;;8937:117;9093:2;9119:53;9164:7;9155:6;9144:9;9140:22;9119:53;:::i;:::-;9109:63;;9064:118;9249:2;9238:9;9234:18;9221:32;9280:18;9272:6;9269:30;9266:117;;;9302:79;;:::i;:::-;9266:117;9407:78;9477:7;9468:6;9457:9;9453:22;9407:78;:::i;:::-;9397:88;;9192:303;9562:2;9551:9;9547:18;9534:32;9593:18;9585:6;9582:30;9579:117;;;9615:79;;:::i;:::-;9579:117;9720:78;9790:7;9781:6;9770:9;9766:22;9720:78;:::i;:::-;9710:88;;9505:303;9875:3;9864:9;9860:19;9847:33;9907:18;9899:6;9896:30;9893:117;;;9929:79;;:::i;:::-;9893:117;10034:62;10088:7;10079:6;10068:9;10064:22;10034:62;:::i;:::-;10024:72;;9818:288;8604:1509;;;;;;;;:::o;10119:619::-;10196:6;10204;10212;10261:2;10249:9;10240:7;10236:23;10232:32;10229:119;;;10267:79;;:::i;:::-;10229:119;10387:1;10412:53;10457:7;10448:6;10437:9;10433:22;10412:53;:::i;:::-;10402:63;;10358:117;10514:2;10540:53;10585:7;10576:6;10565:9;10561:22;10540:53;:::i;:::-;10530:63;;10485:118;10642:2;10668:53;10713:7;10704:6;10693:9;10689:22;10668:53;:::i;:::-;10658:63;;10613:118;10119:619;;;;;:::o;10744:::-;10821:6;10829;10837;10886:2;10874:9;10865:7;10861:23;10857:32;10854:119;;;10892:79;;:::i;:::-;10854:119;11012:1;11037:53;11082:7;11073:6;11062:9;11058:22;11037:53;:::i;:::-;11027:63;;10983:117;11139:2;11165:53;11210:7;11201:6;11190:9;11186:22;11165:53;:::i;:::-;11155:63;;11110:118;11267:2;11293:53;11338:7;11329:6;11318:9;11314:22;11293:53;:::i;:::-;11283:63;;11238:118;10744:619;;;;;:::o;11369:308::-;11431:4;11521:18;11513:6;11510:30;11507:56;;;11543:18;;:::i;:::-;11507:56;11581:29;11603:6;11581:29;:::i;:::-;11573:37;;11665:4;11659;11655:15;11647:23;;11369:308;;;:::o;11683:412::-;11761:5;11786:66;11802:49;11844:6;11802:49;:::i;:::-;11786:66;:::i;:::-;11777:75;;11875:6;11868:5;11861:21;11913:4;11906:5;11902:16;11951:3;11942:6;11937:3;11933:16;11930:25;11927:112;;;11958:79;;:::i;:::-;11927:112;12048:41;12082:6;12077:3;12072;12048:41;:::i;:::-;11767:328;11683:412;;;;;:::o;12115:340::-;12171:5;12220:3;12213:4;12205:6;12201:17;12197:27;12187:122;;12228:79;;:::i;:::-;12187:122;12345:6;12332:20;12370:79;12445:3;12437:6;12430:4;12422:6;12418:17;12370:79;:::i;:::-;12361:88;;12177:278;12115:340;;;;:::o;12461:509::-;12530:6;12579:2;12567:9;12558:7;12554:23;12550:32;12547:119;;;12585:79;;:::i;:::-;12547:119;12733:1;12722:9;12718:17;12705:31;12763:18;12755:6;12752:30;12749:117;;;12785:79;;:::i;:::-;12749:117;12890:63;12945:7;12936:6;12925:9;12921:22;12890:63;:::i;:::-;12880:73;;12676:287;12461:509;;;;:::o;12976:329::-;13035:6;13084:2;13072:9;13063:7;13059:23;13055:32;13052:119;;;13090:79;;:::i;:::-;13052:119;13210:1;13235:53;13280:7;13271:6;13260:9;13256:22;13235:53;:::i;:::-;13225:63;;13181:117;12976:329;;;;:::o;13311:311::-;13388:4;13478:18;13470:6;13467:30;13464:56;;;13500:18;;:::i;:::-;13464:56;13550:4;13542:6;13538:17;13530:25;;13610:4;13604;13600:15;13592:23;;13311:311;;;:::o;13645:710::-;13741:5;13766:81;13782:64;13839:6;13782:64;:::i;:::-;13766:81;:::i;:::-;13757:90;;13867:5;13896:6;13889:5;13882:21;13930:4;13923:5;13919:16;13912:23;;13983:4;13975:6;13971:17;13963:6;13959:30;14012:3;14004:6;14001:15;13998:122;;;14031:79;;:::i;:::-;13998:122;14146:6;14129:220;14163:6;14158:3;14155:15;14129:220;;;14238:3;14267:37;14300:3;14288:10;14267:37;:::i;:::-;14262:3;14255:50;14334:4;14329:3;14325:14;14318:21;;14205:144;14189:4;14184:3;14180:14;14173:21;;14129:220;;;14133:21;13747:608;;13645:710;;;;;:::o;14378:370::-;14449:5;14498:3;14491:4;14483:6;14479:17;14475:27;14465:122;;14506:79;;:::i;:::-;14465:122;14623:6;14610:20;14648:94;14738:3;14730:6;14723:4;14715:6;14711:17;14648:94;:::i;:::-;14639:103;;14455:293;14378:370;;;;:::o;14754:894::-;14872:6;14880;14929:2;14917:9;14908:7;14904:23;14900:32;14897:119;;;14935:79;;:::i;:::-;14897:119;15083:1;15072:9;15068:17;15055:31;15113:18;15105:6;15102:30;15099:117;;;15135:79;;:::i;:::-;15099:117;15240:78;15310:7;15301:6;15290:9;15286:22;15240:78;:::i;:::-;15230:88;;15026:302;15395:2;15384:9;15380:18;15367:32;15426:18;15418:6;15415:30;15412:117;;;15448:79;;:::i;:::-;15412:117;15553:78;15623:7;15614:6;15603:9;15599:22;15553:78;:::i;:::-;15543:88;;15338:303;14754:894;;;;;:::o;15654:114::-;15721:6;15755:5;15749:12;15739:22;;15654:114;;;:::o;15774:184::-;15873:11;15907:6;15902:3;15895:19;15947:4;15942:3;15938:14;15923:29;;15774:184;;;;:::o;15964:132::-;16031:4;16054:3;16046:11;;16084:4;16079:3;16075:14;16067:22;;15964:132;;;:::o;16102:108::-;16179:24;16197:5;16179:24;:::i;:::-;16174:3;16167:37;16102:108;;:::o;16216:179::-;16285:10;16306:46;16348:3;16340:6;16306:46;:::i;:::-;16384:4;16379:3;16375:14;16361:28;;16216:179;;;;:::o;16401:113::-;16471:4;16503;16498:3;16494:14;16486:22;;16401:113;;;:::o;16550:732::-;16669:3;16698:54;16746:5;16698:54;:::i;:::-;16768:86;16847:6;16842:3;16768:86;:::i;:::-;16761:93;;16878:56;16928:5;16878:56;:::i;:::-;16957:7;16988:1;16973:284;16998:6;16995:1;16992:13;16973:284;;;17074:6;17068:13;17101:63;17160:3;17145:13;17101:63;:::i;:::-;17094:70;;17187:60;17240:6;17187:60;:::i;:::-;17177:70;;17033:224;17020:1;17017;17013:9;17008:14;;16973:284;;;16977:14;17273:3;17266:10;;16674:608;;;16550:732;;;;:::o;17288:373::-;17431:4;17469:2;17458:9;17454:18;17446:26;;17518:9;17512:4;17508:20;17504:1;17493:9;17489:17;17482:47;17546:108;17649:4;17640:6;17546:108;:::i;:::-;17538:116;;17288:373;;;;:::o;17667:118::-;17754:24;17772:5;17754:24;:::i;:::-;17749:3;17742:37;17667:118;;:::o;17791:222::-;17884:4;17922:2;17911:9;17907:18;17899:26;;17935:71;18003:1;17992:9;17988:17;17979:6;17935:71;:::i;:::-;17791:222;;;;:::o;18019:116::-;18089:21;18104:5;18089:21;:::i;:::-;18082:5;18079:32;18069:60;;18125:1;18122;18115:12;18069:60;18019:116;:::o;18141:133::-;18184:5;18222:6;18209:20;18200:29;;18238:30;18262:5;18238:30;:::i;:::-;18141:133;;;;:::o;18280:468::-;18345:6;18353;18402:2;18390:9;18381:7;18377:23;18373:32;18370:119;;;18408:79;;:::i;:::-;18370:119;18528:1;18553:53;18598:7;18589:6;18578:9;18574:22;18553:53;:::i;:::-;18543:63;;18499:117;18655:2;18681:50;18723:7;18714:6;18703:9;18699:22;18681:50;:::i;:::-;18671:60;;18626:115;18280:468;;;;;:::o;18754:117::-;18863:1;18860;18853:12;18894:568;18967:8;18977:6;19027:3;19020:4;19012:6;19008:17;19004:27;18994:122;;19035:79;;:::i;:::-;18994:122;19148:6;19135:20;19125:30;;19178:18;19170:6;19167:30;19164:117;;;19200:79;;:::i;:::-;19164:117;19314:4;19306:6;19302:17;19290:29;;19368:3;19360:4;19352:6;19348:17;19338:8;19334:32;19331:41;19328:128;;;19375:79;;:::i;:::-;19328:128;18894:568;;;;;:::o;19468:1269::-;19622:6;19630;19638;19646;19695:2;19683:9;19674:7;19670:23;19666:32;19663:119;;;19701:79;;:::i;:::-;19663:119;19849:1;19838:9;19834:17;19821:31;19879:18;19871:6;19868:30;19865:117;;;19901:79;;:::i;:::-;19865:117;20006:78;20076:7;20067:6;20056:9;20052:22;20006:78;:::i;:::-;19996:88;;19792:302;20161:2;20150:9;20146:18;20133:32;20192:18;20184:6;20181:30;20178:117;;;20214:79;;:::i;:::-;20178:117;20327:80;20399:7;20390:6;20379:9;20375:22;20327:80;:::i;:::-;20309:98;;;;20104:313;20484:2;20473:9;20469:18;20456:32;20515:18;20507:6;20504:30;20501:117;;;20537:79;;:::i;:::-;20501:117;20642:78;20712:7;20703:6;20692:9;20688:22;20642:78;:::i;:::-;20632:88;;20427:303;19468:1269;;;;;;;:::o;20743:474::-;20811:6;20819;20868:2;20856:9;20847:7;20843:23;20839:32;20836:119;;;20874:79;;:::i;:::-;20836:119;20994:1;21019:53;21064:7;21055:6;21044:9;21040:22;21019:53;:::i;:::-;21009:63;;20965:117;21121:2;21147:53;21192:7;21183:6;21172:9;21168:22;21147:53;:::i;:::-;21137:63;;21092:118;20743:474;;;;;:::o;21223:::-;21291:6;21299;21348:2;21336:9;21327:7;21323:23;21319:32;21316:119;;;21354:79;;:::i;:::-;21316:119;21474:1;21499:53;21544:7;21535:6;21524:9;21520:22;21499:53;:::i;:::-;21489:63;;21445:117;21601:2;21627:53;21672:7;21663:6;21652:9;21648:22;21627:53;:::i;:::-;21617:63;;21572:118;21223:474;;;;;:::o;21703:1089::-;21807:6;21815;21823;21831;21839;21888:3;21876:9;21867:7;21863:23;21859:33;21856:120;;;21895:79;;:::i;:::-;21856:120;22015:1;22040:53;22085:7;22076:6;22065:9;22061:22;22040:53;:::i;:::-;22030:63;;21986:117;22142:2;22168:53;22213:7;22204:6;22193:9;22189:22;22168:53;:::i;:::-;22158:63;;22113:118;22270:2;22296:53;22341:7;22332:6;22321:9;22317:22;22296:53;:::i;:::-;22286:63;;22241:118;22398:2;22424:53;22469:7;22460:6;22449:9;22445:22;22424:53;:::i;:::-;22414:63;;22369:118;22554:3;22543:9;22539:19;22526:33;22586:18;22578:6;22575:30;22572:117;;;22608:79;;:::i;:::-;22572:117;22713:62;22767:7;22758:6;22747:9;22743:22;22713:62;:::i;:::-;22703:72;;22497:288;21703:1089;;;;;;;;:::o;22798:229::-;22938:34;22934:1;22926:6;22922:14;22915:58;23007:12;23002:2;22994:6;22990:15;22983:37;22798:229;:::o;23033:366::-;23175:3;23196:67;23260:2;23255:3;23196:67;:::i;:::-;23189:74;;23272:93;23361:3;23272:93;:::i;:::-;23390:2;23385:3;23381:12;23374:19;;23033:366;;;:::o;23405:419::-;23571:4;23609:2;23598:9;23594:18;23586:26;;23658:9;23652:4;23648:20;23644:1;23633:9;23629:17;23622:47;23686:131;23812:4;23686:131;:::i;:::-;23678:139;;23405:419;;;:::o;23830:180::-;23878:77;23875:1;23868:88;23975:4;23972:1;23965:15;23999:4;23996:1;23989:15;24016:320;24060:6;24097:1;24091:4;24087:12;24077:22;;24144:1;24138:4;24134:12;24165:18;24155:81;;24221:4;24213:6;24209:17;24199:27;;24155:81;24283:2;24275:6;24272:14;24252:18;24249:38;24246:84;;;24302:18;;:::i;:::-;24246:84;24067:269;24016:320;;;:::o;24342:174::-;24482:26;24478:1;24470:6;24466:14;24459:50;24342:174;:::o;24522:366::-;24664:3;24685:67;24749:2;24744:3;24685:67;:::i;:::-;24678:74;;24761:93;24850:3;24761:93;:::i;:::-;24879:2;24874:3;24870:12;24863:19;;24522:366;;;:::o;24894:419::-;25060:4;25098:2;25087:9;25083:18;25075:26;;25147:9;25141:4;25137:20;25133:1;25122:9;25118:17;25111:47;25175:131;25301:4;25175:131;:::i;:::-;25167:139;;24894:419;;;:::o;25319:163::-;25459:15;25455:1;25447:6;25443:14;25436:39;25319:163;:::o;25488:366::-;25630:3;25651:67;25715:2;25710:3;25651:67;:::i;:::-;25644:74;;25727:93;25816:3;25727:93;:::i;:::-;25845:2;25840:3;25836:12;25829:19;;25488:366;;;:::o;25860:419::-;26026:4;26064:2;26053:9;26049:18;26041:26;;26113:9;26107:4;26103:20;26099:1;26088:9;26084:17;26077:47;26141:131;26267:4;26141:131;:::i;:::-;26133:139;;25860:419;;;:::o;26285:226::-;26425:34;26421:1;26413:6;26409:14;26402:58;26494:9;26489:2;26481:6;26477:15;26470:34;26285:226;:::o;26517:366::-;26659:3;26680:67;26744:2;26739:3;26680:67;:::i;:::-;26673:74;;26756:93;26845:3;26756:93;:::i;:::-;26874:2;26869:3;26865:12;26858:19;;26517:366;;;:::o;26889:419::-;27055:4;27093:2;27082:9;27078:18;27070:26;;27142:9;27136:4;27132:20;27128:1;27117:9;27113:17;27106:47;27170:131;27296:4;27170:131;:::i;:::-;27162:139;;26889:419;;;:::o;27314:148::-;27416:11;27453:3;27438:18;;27314:148;;;;:::o;27468:141::-;27517:4;27540:3;27532:11;;27563:3;27560:1;27553:14;27597:4;27594:1;27584:18;27576:26;;27468:141;;;:::o;27639:845::-;27742:3;27779:5;27773:12;27808:36;27834:9;27808:36;:::i;:::-;27860:89;27942:6;27937:3;27860:89;:::i;:::-;27853:96;;27980:1;27969:9;27965:17;27996:1;27991:137;;;;28142:1;28137:341;;;;27958:520;;27991:137;28075:4;28071:9;28060;28056:25;28051:3;28044:38;28111:6;28106:3;28102:16;28095:23;;27991:137;;28137:341;28204:38;28236:5;28204:38;:::i;:::-;28264:1;28278:154;28292:6;28289:1;28286:13;28278:154;;;28366:7;28360:14;28356:1;28351:3;28347:11;28340:35;28416:1;28407:7;28403:15;28392:26;;28314:4;28311:1;28307:12;28302:17;;28278:154;;;28461:6;28456:3;28452:16;28445:23;;28144:334;;27958:520;;27746:738;;27639:845;;;;:::o;28490:377::-;28596:3;28624:39;28657:5;28624:39;:::i;:::-;28679:89;28761:6;28756:3;28679:89;:::i;:::-;28672:96;;28777:52;28822:6;28817:3;28810:4;28803:5;28799:16;28777:52;:::i;:::-;28854:6;28849:3;28845:16;28838:23;;28600:267;28490:377;;;;:::o;28873:429::-;29050:3;29072:92;29160:3;29151:6;29072:92;:::i;:::-;29065:99;;29181:95;29272:3;29263:6;29181:95;:::i;:::-;29174:102;;29293:3;29286:10;;28873:429;;;;;:::o;29308:234::-;29448:34;29444:1;29436:6;29432:14;29425:58;29517:17;29512:2;29504:6;29500:15;29493:42;29308:234;:::o;29548:366::-;29690:3;29711:67;29775:2;29770:3;29711:67;:::i;:::-;29704:74;;29787:93;29876:3;29787:93;:::i;:::-;29905:2;29900:3;29896:12;29889:19;;29548:366;;;:::o;29920:419::-;30086:4;30124:2;30113:9;30109:18;30101:26;;30173:9;30167:4;30163:20;30159:1;30148:9;30144:17;30137:47;30201:131;30327:4;30201:131;:::i;:::-;30193:139;;29920:419;;;:::o;30345:176::-;30485:28;30481:1;30473:6;30469:14;30462:52;30345:176;:::o;30527:366::-;30669:3;30690:67;30754:2;30749:3;30690:67;:::i;:::-;30683:74;;30766:93;30855:3;30766:93;:::i;:::-;30884:2;30879:3;30875:12;30868:19;;30527:366;;;:::o;30899:419::-;31065:4;31103:2;31092:9;31088:18;31080:26;;31152:9;31146:4;31142:20;31138:1;31127:9;31123:17;31116:47;31180:131;31306:4;31180:131;:::i;:::-;31172:139;;30899:419;;;:::o;31324:167::-;31464:19;31460:1;31452:6;31448:14;31441:43;31324:167;:::o;31497:366::-;31639:3;31660:67;31724:2;31719:3;31660:67;:::i;:::-;31653:74;;31736:93;31825:3;31736:93;:::i;:::-;31854:2;31849:3;31845:12;31838:19;;31497:366;;;:::o;31869:419::-;32035:4;32073:2;32062:9;32058:18;32050:26;;32122:9;32116:4;32112:20;32108:1;32097:9;32093:17;32086:47;32150:131;32276:4;32150:131;:::i;:::-;32142:139;;31869:419;;;:::o;32294:269::-;32423:3;32445:92;32533:3;32524:6;32445:92;:::i;:::-;32438:99;;32554:3;32547:10;;32294:269;;;;:::o;32569:228::-;32709:34;32705:1;32697:6;32693:14;32686:58;32778:11;32773:2;32765:6;32761:15;32754:36;32569:228;:::o;32803:366::-;32945:3;32966:67;33030:2;33025:3;32966:67;:::i;:::-;32959:74;;33042:93;33131:3;33042:93;:::i;:::-;33160:2;33155:3;33151:12;33144:19;;32803:366;;;:::o;33175:419::-;33341:4;33379:2;33368:9;33364:18;33356:26;;33428:9;33422:4;33418:20;33414:1;33403:9;33399:17;33392:47;33456:131;33582:4;33456:131;:::i;:::-;33448:139;;33175:419;;;:::o;33600:180::-;33648:77;33645:1;33638:88;33745:4;33742:1;33735:15;33769:4;33766:1;33759:15;33786:180;33834:77;33831:1;33824:88;33931:4;33928:1;33921:15;33955:4;33952:1;33945:15;33972:233;34011:3;34034:24;34052:5;34034:24;:::i;:::-;34025:33;;34080:66;34073:5;34070:77;34067:103;;;34150:18;;:::i;:::-;34067:103;34197:1;34190:5;34186:13;34179:20;;33972:233;;;:::o;34211:225::-;34351:34;34347:1;34339:6;34335:14;34328:58;34420:8;34415:2;34407:6;34403:15;34396:33;34211:225;:::o;34442:366::-;34584:3;34605:67;34669:2;34664:3;34605:67;:::i;:::-;34598:74;;34681:93;34770:3;34681:93;:::i;:::-;34799:2;34794:3;34790:12;34783:19;;34442:366;;;:::o;34814:419::-;34980:4;35018:2;35007:9;35003:18;34995:26;;35067:9;35061:4;35057:20;35053:1;35042:9;35038:17;35031:47;35095:131;35221:4;35095:131;:::i;:::-;35087:139;;34814:419;;;:::o;35239:222::-;35379:34;35375:1;35367:6;35363:14;35356:58;35448:5;35443:2;35435:6;35431:15;35424:30;35239:222;:::o;35467:366::-;35609:3;35630:67;35694:2;35689:3;35630:67;:::i;:::-;35623:74;;35706:93;35795:3;35706:93;:::i;:::-;35824:2;35819:3;35815:12;35808:19;;35467:366;;;:::o;35839:419::-;36005:4;36043:2;36032:9;36028:18;36020:26;;36092:9;36086:4;36082:20;36078:1;36067:9;36063:17;36056:47;36120:131;36246:4;36120:131;:::i;:::-;36112:139;;35839:419;;;:::o;36264:223::-;36404:34;36400:1;36392:6;36388:14;36381:58;36473:6;36468:2;36460:6;36456:15;36449:31;36264:223;:::o;36493:366::-;36635:3;36656:67;36720:2;36715:3;36656:67;:::i;:::-;36649:74;;36732:93;36821:3;36732:93;:::i;:::-;36850:2;36845:3;36841:12;36834:19;;36493:366;;;:::o;36865:419::-;37031:4;37069:2;37058:9;37054:18;37046:26;;37118:9;37112:4;37108:20;37104:1;37093:9;37089:17;37082:47;37146:131;37272:4;37146:131;:::i;:::-;37138:139;;36865:419;;;:::o;37290:332::-;37411:4;37449:2;37438:9;37434:18;37426:26;;37462:71;37530:1;37519:9;37515:17;37506:6;37462:71;:::i;:::-;37543:72;37611:2;37600:9;37596:18;37587:6;37543:72;:::i;:::-;37290:332;;;;;:::o;37628:180::-;37676:77;37673:1;37666:88;37773:4;37770:1;37763:15;37797:4;37794:1;37787:15;37814:185;37854:1;37871:20;37889:1;37871:20;:::i;:::-;37866:25;;37905:20;37923:1;37905:20;:::i;:::-;37900:25;;37944:1;37934:35;;37949:18;;:::i;:::-;37934:35;37991:1;37988;37984:9;37979:14;;37814:185;;;;:::o;38005:191::-;38045:4;38065:20;38083:1;38065:20;:::i;:::-;38060:25;;38099:20;38117:1;38099:20;:::i;:::-;38094:25;;38138:1;38135;38132:8;38129:34;;;38143:18;;:::i;:::-;38129:34;38188:1;38185;38181:9;38173:17;;38005:191;;;;:::o;38202:176::-;38234:1;38251:20;38269:1;38251:20;:::i;:::-;38246:25;;38285:20;38303:1;38285:20;:::i;:::-;38280:25;;38324:1;38314:35;;38329:18;;:::i;:::-;38314:35;38370:1;38367;38363:9;38358:14;;38202:176;;;;:::o;38384:305::-;38424:3;38443:20;38461:1;38443:20;:::i;:::-;38438:25;;38477:20;38495:1;38477:20;:::i;:::-;38472:25;;38631:1;38563:66;38559:74;38556:1;38553:81;38550:107;;;38637:18;;:::i;:::-;38550:107;38681:1;38678;38674:9;38667:16;;38384:305;;;;:::o;38695:227::-;38835:34;38831:1;38823:6;38819:14;38812:58;38904:10;38899:2;38891:6;38887:15;38880:35;38695:227;:::o;38928:366::-;39070:3;39091:67;39155:2;39150:3;39091:67;:::i;:::-;39084:74;;39167:93;39256:3;39167:93;:::i;:::-;39285:2;39280:3;39276:12;39269:19;;38928:366;;;:::o;39300:419::-;39466:4;39504:2;39493:9;39489:18;39481:26;;39553:9;39547:4;39543:20;39539:1;39528:9;39524:17;39517:47;39581:131;39707:4;39581:131;:::i;:::-;39573:139;;39300:419;;;:::o;39725:224::-;39865:34;39861:1;39853:6;39849:14;39842:58;39934:7;39929:2;39921:6;39917:15;39910:32;39725:224;:::o;39955:366::-;40097:3;40118:67;40182:2;40177:3;40118:67;:::i;:::-;40111:74;;40194:93;40283:3;40194:93;:::i;:::-;40312:2;40307:3;40303:12;40296:19;;39955:366;;;:::o;40327:419::-;40493:4;40531:2;40520:9;40516:18;40508:26;;40580:9;40574:4;40570:20;40566:1;40555:9;40551:17;40544:47;40608:131;40734:4;40608:131;:::i;:::-;40600:139;;40327:419;;;:::o;40752:229::-;40892:34;40888:1;40880:6;40876:14;40869:58;40961:12;40956:2;40948:6;40944:15;40937:37;40752:229;:::o;40987:366::-;41129:3;41150:67;41214:2;41209:3;41150:67;:::i;:::-;41143:74;;41226:93;41315:3;41226:93;:::i;:::-;41344:2;41339:3;41335:12;41328:19;;40987:366;;;:::o;41359:419::-;41525:4;41563:2;41552:9;41548:18;41540:26;;41612:9;41606:4;41602:20;41598:1;41587:9;41583:17;41576:47;41640:131;41766:4;41640:131;:::i;:::-;41632:139;;41359:419;;;:::o;41784:634::-;42005:4;42043:2;42032:9;42028:18;42020:26;;42092:9;42086:4;42082:20;42078:1;42067:9;42063:17;42056:47;42120:108;42223:4;42214:6;42120:108;:::i;:::-;42112:116;;42275:9;42269:4;42265:20;42260:2;42249:9;42245:18;42238:48;42303:108;42406:4;42397:6;42303:108;:::i;:::-;42295:116;;41784:634;;;;;:::o;42424:182::-;42564:34;42560:1;42552:6;42548:14;42541:58;42424:182;:::o;42612:366::-;42754:3;42775:67;42839:2;42834:3;42775:67;:::i;:::-;42768:74;;42851:93;42940:3;42851:93;:::i;:::-;42969:2;42964:3;42960:12;42953:19;;42612:366;;;:::o;42984:419::-;43150:4;43188:2;43177:9;43173:18;43165:26;;43237:9;43231:4;43227:20;43223:1;43212:9;43208:17;43201:47;43265:131;43391:4;43265:131;:::i;:::-;43257:139;;42984:419;;;:::o;43409:220::-;43549:34;43545:1;43537:6;43533:14;43526:58;43618:3;43613:2;43605:6;43601:15;43594:28;43409:220;:::o;43635:366::-;43777:3;43798:67;43862:2;43857:3;43798:67;:::i;:::-;43791:74;;43874:93;43963:3;43874:93;:::i;:::-;43992:2;43987:3;43983:12;43976:19;;43635:366;;;:::o;44007:419::-;44173:4;44211:2;44200:9;44196:18;44188:26;;44260:9;44254:4;44250:20;44246:1;44235:9;44231:17;44224:47;44288:131;44414:4;44288:131;:::i;:::-;44280:139;;44007:419;;;:::o;44432:228::-;44572:34;44568:1;44560:6;44556:14;44549:58;44641:11;44636:2;44628:6;44624:15;44617:36;44432:228;:::o;44666:366::-;44808:3;44829:67;44893:2;44888:3;44829:67;:::i;:::-;44822:74;;44905:93;44994:3;44905:93;:::i;:::-;45023:2;45018:3;45014:12;45007:19;;44666:366;;;:::o;45038:419::-;45204:4;45242:2;45231:9;45227:18;45219:26;;45291:9;45285:4;45281:20;45277:1;45266:9;45262:17;45255:47;45319:131;45445:4;45319:131;:::i;:::-;45311:139;;45038:419;;;:::o;45463:98::-;45514:6;45548:5;45542:12;45532:22;;45463:98;;;:::o;45567:168::-;45650:11;45684:6;45679:3;45672:19;45724:4;45719:3;45715:14;45700:29;;45567:168;;;;:::o;45741:360::-;45827:3;45855:38;45887:5;45855:38;:::i;:::-;45909:70;45972:6;45967:3;45909:70;:::i;:::-;45902:77;;45988:52;46033:6;46028:3;46021:4;46014:5;46010:16;45988:52;:::i;:::-;46065:29;46087:6;46065:29;:::i;:::-;46060:3;46056:39;46049:46;;45831:270;45741:360;;;;:::o;46107:1053::-;46430:4;46468:3;46457:9;46453:19;46445:27;;46482:71;46550:1;46539:9;46535:17;46526:6;46482:71;:::i;:::-;46563:72;46631:2;46620:9;46616:18;46607:6;46563:72;:::i;:::-;46682:9;46676:4;46672:20;46667:2;46656:9;46652:18;46645:48;46710:108;46813:4;46804:6;46710:108;:::i;:::-;46702:116;;46865:9;46859:4;46855:20;46850:2;46839:9;46835:18;46828:48;46893:108;46996:4;46987:6;46893:108;:::i;:::-;46885:116;;47049:9;47043:4;47039:20;47033:3;47022:9;47018:19;47011:49;47077:76;47148:4;47139:6;47077:76;:::i;:::-;47069:84;;46107:1053;;;;;;;;:::o;47166:141::-;47222:5;47253:6;47247:13;47238:22;;47269:32;47295:5;47269:32;:::i;:::-;47166:141;;;;:::o;47313:349::-;47382:6;47431:2;47419:9;47410:7;47406:23;47402:32;47399:119;;;47437:79;;:::i;:::-;47399:119;47557:1;47582:63;47637:7;47628:6;47617:9;47613:22;47582:63;:::i;:::-;47572:73;;47528:127;47313:349;;;;:::o;47668:106::-;47712:8;47761:5;47756:3;47752:15;47731:36;;47668:106;;;:::o;47780:183::-;47815:3;47853:1;47835:16;47832:23;47829:128;;;47891:1;47888;47885;47870:23;47913:34;47944:1;47938:8;47913:34;:::i;:::-;47906:41;;47829:128;47780:183;:::o;47969:711::-;48008:3;48046:4;48028:16;48025:26;48022:39;;;48054:5;;48022:39;48083:20;;:::i;:::-;48158:1;48140:16;48136:24;48133:1;48127:4;48112:49;48191:4;48185:11;48290:16;48283:4;48275:6;48271:17;48268:39;48235:18;48227:6;48224:30;48208:113;48205:146;;;48336:5;;;;48205:146;48382:6;48376:4;48372:17;48418:3;48412:10;48445:18;48437:6;48434:30;48431:43;;;48467:5;;;;;;48431:43;48515:6;48508:4;48503:3;48499:14;48495:27;48574:1;48556:16;48552:24;48546:4;48542:35;48537:3;48534:44;48531:57;;;48581:5;;;;;;;48531:57;48598;48646:6;48640:4;48636:17;48628:6;48624:30;48618:4;48598:57;:::i;:::-;48671:3;48664:10;;48012:668;;;;;47969:711;;:::o;48686:239::-;48826:34;48822:1;48814:6;48810:14;48803:58;48895:22;48890:2;48882:6;48878:15;48871:47;48686:239;:::o;48931:366::-;49073:3;49094:67;49158:2;49153:3;49094:67;:::i;:::-;49087:74;;49170:93;49259:3;49170:93;:::i;:::-;49288:2;49283:3;49279:12;49272:19;;48931:366;;;:::o;49303:419::-;49469:4;49507:2;49496:9;49492:18;49484:26;;49556:9;49550:4;49546:20;49542:1;49531:9;49527:17;49520:47;49584:131;49710:4;49584:131;:::i;:::-;49576:139;;49303:419;;;:::o;49728:227::-;49868:34;49864:1;49856:6;49852:14;49845:58;49937:10;49932:2;49924:6;49920:15;49913:35;49728:227;:::o;49961:366::-;50103:3;50124:67;50188:2;50183:3;50124:67;:::i;:::-;50117:74;;50200:93;50289:3;50200:93;:::i;:::-;50318:2;50313:3;50309:12;50302:19;;49961:366;;;:::o;50333:419::-;50499:4;50537:2;50526:9;50522:18;50514:26;;50586:9;50580:4;50576:20;50572:1;50561:9;50557:17;50550:47;50614:131;50740:4;50614:131;:::i;:::-;50606:139;;50333:419;;;:::o;50758:751::-;50981:4;51019:3;51008:9;51004:19;50996:27;;51033:71;51101:1;51090:9;51086:17;51077:6;51033:71;:::i;:::-;51114:72;51182:2;51171:9;51167:18;51158:6;51114:72;:::i;:::-;51196;51264:2;51253:9;51249:18;51240:6;51196:72;:::i;:::-;51278;51346:2;51335:9;51331:18;51322:6;51278:72;:::i;:::-;51398:9;51392:4;51388:20;51382:3;51371:9;51367:19;51360:49;51426:76;51497:4;51488:6;51426:76;:::i;:::-;51418:84;;50758:751;;;;;;;;:::o
Swarm Source
ipfs://a8cee9782715bfa2dcc1ef656cf040ae802d51c96f577d65b9a509e687aa4f47
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.