Feature Tip: Add private address tag to any address under My Name Tag !
ERC-1155
Overview
Max Total Supply
473
Holders
473
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:
ViralCryptoERC1155
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-02-12 */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } 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); } abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } interface IERC1155Receiver is IERC165 { /** @dev Handles the receipt of a single ERC1155 token type. This function is called at the end of a `safeTransferFrom` after the balance has been updated. To accept the transfer, this must return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` (i.e. 0xf23a6e61, or its own function selector). @param operator The address which initiated the transfer (i.e. msg.sender) @param from The address which previously owned the token @param id The ID of the token being transferred @param value The amount of tokens being transferred @param data Additional data with no specified format @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); /** @dev Handles the receipt of a multiple ERC1155 token types. This function is called at the end of a `safeBatchTransferFrom` after the balances have been updated. To accept the transfer(s), this must return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` (i.e. 0xbc197c81, or its own function selector). @param operator The address which initiated the batch transfer (i.e. msg.sender) @param from The address which previously owned the token @param ids An array containing ids of each token being transferred (order and length must match values array) @param values An array containing amounts of each token being transferred (order and length must match ids array) @param data Additional data with no specified format @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); } interface IERC1155 is IERC165 { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes calldata data ) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data ) external; } 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); } contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI { using Address for address; // Mapping from token ID to account balances mapping(uint256 => mapping(address => uint256)) private _balances; // Mapping from account to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json string private _uri; /** * @dev See {_setURI}. */ constructor(string memory uri_) { _setURI(uri_); } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC1155).interfaceId || interfaceId == type(IERC1155MetadataURI).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC1155MetadataURI-uri}. * * This implementation returns the same URI for *all* token types. It relies * on the token type ID substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * Clients calling this function must replace the `\{id\}` substring with the * actual token type ID. */ function uri(uint256) public view virtual override returns (string memory) { return _uri; } /** * @dev See {IERC1155-balanceOf}. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) public view virtual override returns (uint256) { require(account != address(0), "ERC1155: balance query for the zero address"); return _balances[id][account]; } /** * @dev See {IERC1155-balanceOfBatch}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] memory accounts, uint256[] memory ids) public view virtual override returns (uint256[] memory) { require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch"); uint256[] memory batchBalances = new uint256[](accounts.length); for (uint256 i = 0; i < accounts.length; ++i) { batchBalances[i] = balanceOf(accounts[i], ids[i]); } return batchBalances; } /** * @dev See {IERC1155-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC1155-isApprovedForAll}. */ function isApprovedForAll(address account, address operator) public view virtual override returns (bool) { return _operatorApprovals[account][operator]; } /** * @dev See {IERC1155-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: caller is not owner nor approved" ); _safeTransferFrom(from, to, id, amount, data); } /** * @dev See {IERC1155-safeBatchTransferFrom}. */ function safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: transfer caller is not owner nor approved" ); _safeBatchTransferFrom(from, to, ids, amounts, data); } /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; emit TransferSingle(operator, from, to, id, amount); _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, ids, amounts, data); for (uint256 i = 0; i < ids.length; ++i) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; } emit TransferBatch(operator, from, to, ids, amounts); _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data); } /** * @dev Sets a new URI for all token types, by relying on the token type ID * substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * By this mechanism, any occurrence of the `\{id\}` substring in either the * URI or any of the amounts in the JSON file at said URI will be replaced by * clients with the token type ID. * * For example, the `https://token-cdn-domain/\{id\}.json` URI would be * interpreted by clients as * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json` * for token type ID 0x4cce0. * * See {uri}. * * Because these URIs cannot be meaningfully represented by the {URI} event, * this function emits no events. */ function _setURI(string memory newuri) internal virtual { _uri = newuri; } /** * @dev Creates `amount` tokens of token type `id`, and assigns them to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _mint( address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), to, _asSingletonArray(id), _asSingletonArray(amount), data); _balances[id][to] += amount; emit TransferSingle(operator, address(0), to, id, amount); _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _mintBatch( address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); for (uint256 i = 0; i < ids.length; i++) { _balances[ids[i]][to] += amounts[i]; } emit TransferBatch(operator, address(0), to, ids, amounts); _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data); } /** * @dev Destroys `amount` tokens of token type `id` from `from` * * Requirements: * * - `from` cannot be the zero address. * - `from` must have at least `amount` tokens of token type `id`. */ function _burn( address from, uint256 id, uint256 amount ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, address(0), _asSingletonArray(id), _asSingletonArray(amount), ""); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } emit TransferSingle(operator, from, address(0), id, amount); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}. * * Requirements: * * - `ids` and `amounts` must have the same length. */ function _burnBatch( address from, uint256[] memory ids, uint256[] memory amounts ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, address(0), ids, amounts, ""); for (uint256 i = 0; i < ids.length; i++) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } } emit TransferBatch(operator, from, address(0), ids, amounts); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC1155: setting approval status for self"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Hook that is called before any token transfer. This includes minting * and burning, as well as batched variants. * * The same hook is called on both single and batched variants. For single * transfers, the length of the `id` and `amount` arrays will be 1. * * Calling conditions (for each `id` and `amount` pair): * * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens * of token type `id` will be transferred to `to`. * - When `from` is zero, `amount` tokens of token type `id` will be minted * for `to`. * - when `to` is zero, `amount` of ``from``'s tokens of token type `id` * will be burned. * - `from` and `to` are never both zero. * - `ids` and `amounts` have the same, non-zero length. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual {} function _doSafeTransferAcceptanceCheck( address operator, address from, address to, uint256 id, uint256 amount, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) { if (response != IERC1155Receiver.onERC1155Received.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _doSafeBatchTransferAcceptanceCheck( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns ( bytes4 response ) { if (response != IERC1155Receiver.onERC1155BatchReceived.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) { uint256[] memory array = new uint256[](1); array[0] = element; return array; } } // SPDX-License-Identifier: MIT pragma solidity ^0.8.2; contract ViralCryptoERC1155 is ERC1155, Ownable { bool public mintEnabled; bool public burnEnabled; uint256 public minted; uint256 public burned; uint256 public maxSupply = 1200; uint256 public mintCost = 80000000000000000; mapping(address => bool) public hasBurned; mapping(address => bool) public hasMinted; constructor() ERC1155("https://bafybeiepcmiye7flni7xtnsq555f466sglo3wqykkn25mywfzqnd2qpfmi.ipfs.dweb.link/{id}.json") {} function setURI(string memory newuri) public onlyOwner { _setURI(newuri); } function mint(bytes memory data) public payable { require(mintEnabled, "Minting not enabled"); require(hasMinted[msg.sender] == false, "Can only mint 1"); require(minted <= maxSupply, "Only 1200 minted"); require(msg.value == mintCost, "Not enough ETH sent"); uint256 id = 0; uint256 amount = 1; minted += 1; hasMinted[msg.sender] = true; _mint(msg.sender, id, amount, data); } function burn(uint256 id) public payable { require(burnEnabled, "Burning not enabled"); require(hasBurned[msg.sender] == false, "Can only burn once"); require(balanceOf(msg.sender, id) == 1, "Not owner of"); uint256 amount = 1; burned += 1; hasBurned[msg.sender] = true; _burn(msg.sender, id, amount); } function enableMinting(bool _bool) external onlyOwner { mintEnabled = _bool; } function enableBurning(bool _bool) external onlyOwner { burnEnabled = _bool; } function uri(uint256 _tokenId) override public pure returns(string memory) { _tokenId = 0; return string( abi.encodePacked( "https://bafybeiepcmiye7flni7xtnsq555f466sglo3wqykkn25mywfzqnd2qpfmi.ipfs.dweb.link/", Strings.toString(_tokenId), ".json" ) ); } function extract(address payable _address) external onlyOwner { _address.transfer(address(this).balance); } receive() external payable {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"burnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_bool","type":"bool"}],"name":"enableBurning","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_bool","type":"bool"}],"name":"enableMinting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_address","type":"address"}],"name":"extract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"hasBurned","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"hasMinted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newuri","type":"string"}],"name":"setURI","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":"uint256","name":"_tokenId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526104b060065567011c37937e0800006007553480156200002357600080fd5b506040518060800160405280605c8152602001620044a0605c91396200004f816200007660201b60201c565b5062000070620000646200009260201b60201c565b6200009a60201b60201c565b62000275565b80600290805190602001906200008e92919062000160565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200016e9062000210565b90600052602060002090601f016020900481019282620001925760008555620001de565b82601f10620001ad57805160ff1916838001178555620001de565b82800160010185558215620001de579182015b82811115620001dd578251825591602001919060010190620001c0565b5b509050620001ed9190620001f1565b5090565b5b808211156200020c576000816000905550600101620001f2565b5090565b600060028204905060018216806200022957607f821691505b6020821081141562000240576200023f62000246565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61421b80620002856000396000f3fe6080604052600436106101695760003560e01c806373f42561116100d1578063bdb4b8481161008a578063d5abeb0111610064578063d5abeb011461052a578063e985e9c514610555578063f242432a14610592578063f2fde38b146105bb57610170565b8063bdb4b848146104ab578063c7a5d285146104d6578063d1239730146104ff57610170565b806373f42561146103be57806378acea1e146103e95780637ba0e2e7146104125780638da5cb5b1461042e578063a22cb46514610459578063b45dd8731461048257610170565b806338e21cce1161012357806338e21cce146102bb57806342966c68146102f85780634e1273f4146103145780634f02c420146103515780635dc96d161461037c578063715018a6146103a757610170565b8062fdd58e1461017557806301ffc9a7146101b257806302fe5305146101ef5780630e89341c1461021857806326cbd9d9146102555780632eb2c2d61461029257610170565b3661017057005b600080fd5b34801561018157600080fd5b5061019c60048036038101906101979190612a66565b6105e4565b6040516101a99190613561565b60405180910390f35b3480156101be57600080fd5b506101d960048036038101906101d49190612b4b565b6106ad565b6040516101e69190613264565b60405180910390f35b3480156101fb57600080fd5b5061021660048036038101906102119190612bee565b61078f565b005b34801561022457600080fd5b5061023f600480360381019061023a9190612c37565b610817565b60405161024c919061327f565b60405180910390f35b34801561026157600080fd5b5061027c60048036038101906102779190612826565b61084c565b6040516102899190613264565b60405180910390f35b34801561029e57600080fd5b506102b960048036038101906102b491906128c0565b61086c565b005b3480156102c757600080fd5b506102e260048036038101906102dd9190612826565b61090d565b6040516102ef9190613264565b60405180910390f35b610312600480360381019061030d9190612c37565b61092d565b005b34801561032057600080fd5b5061033b60048036038101906103369190612aa6565b610ae2565b604051610348919061320b565b60405180910390f35b34801561035d57600080fd5b50610366610bfb565b6040516103739190613561565b60405180910390f35b34801561038857600080fd5b50610391610c01565b60405161039e9190613264565b60405180910390f35b3480156103b357600080fd5b506103bc610c14565b005b3480156103ca57600080fd5b506103d3610c9c565b6040516103e09190613561565b60405180910390f35b3480156103f557600080fd5b50610410600480360381019061040b9190612b1e565b610ca2565b005b61042c60048036038101906104279190612ba5565b610d3b565b005b34801561043a57600080fd5b50610443610f32565b604051610450919061312e565b60405180910390f35b34801561046557600080fd5b50610480600480360381019061047b9190612a26565b610f5c565b005b34801561048e57600080fd5b506104a960048036038101906104a49190612b1e565b610f72565b005b3480156104b757600080fd5b506104c061100b565b6040516104cd9190613561565b60405180910390f35b3480156104e257600080fd5b506104fd60048036038101906104f89190612853565b611011565b005b34801561050b57600080fd5b506105146110d7565b6040516105219190613264565b60405180910390f35b34801561053657600080fd5b5061053f6110ea565b60405161054c9190613561565b60405180910390f35b34801561056157600080fd5b5061057c60048036038101906105779190612880565b6110f0565b6040516105899190613264565b60405180910390f35b34801561059e57600080fd5b506105b960048036038101906105b4919061298f565b611184565b005b3480156105c757600080fd5b506105e260048036038101906105dd9190612826565b611225565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610655576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064c90613301565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061077857507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061078857506107878261131d565b5b9050919050565b610797611387565b73ffffffffffffffffffffffffffffffffffffffff166107b5610f32565b73ffffffffffffffffffffffffffffffffffffffff161461080b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080290613441565b60405180910390fd5b6108148161138f565b50565b606060009150610826826113a9565b6040516020016108369190613101565b6040516020818303038152906040529050919050565b60086020528060005260406000206000915054906101000a900460ff1681565b610874611387565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806108ba57506108b9856108b4611387565b6110f0565b5b6108f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f0906133c1565b60405180910390fd5b610906858585858561150a565b5050505050565b60096020528060005260406000206000915054906101000a900460ff1681565b600360159054906101000a900460ff1661097c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610973906132e1565b60405180910390fd5b60001515600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514610a0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0690613501565b60405180910390fd5b6001610a1b33836105e4565b14610a5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a52906134a1565b60405180910390fd5b600060019050600160056000828254610a749190613700565b925050819055506001600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610ade33838361181e565b5050565b60608151835114610b28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1f906134e1565b60405180910390fd5b6000835167ffffffffffffffff811115610b4557610b44613a1c565b5b604051908082528060200260200182016040528015610b735781602001602082028036833780820191505090505b50905060005b8451811015610bf057610bc0858281518110610b9857610b976139ed565b5b6020026020010151858381518110610bb357610bb26139ed565b5b60200260200101516105e4565b828281518110610bd357610bd26139ed565b5b60200260200101818152505080610be9906138e6565b9050610b79565b508091505092915050565b60045481565b600360159054906101000a900460ff1681565b610c1c611387565b73ffffffffffffffffffffffffffffffffffffffff16610c3a610f32565b73ffffffffffffffffffffffffffffffffffffffff1614610c90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8790613441565b60405180910390fd5b610c9a6000611a3b565b565b60055481565b610caa611387565b73ffffffffffffffffffffffffffffffffffffffff16610cc8610f32565b73ffffffffffffffffffffffffffffffffffffffff1614610d1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1590613441565b60405180910390fd5b80600360146101000a81548160ff02191690831515021790555050565b600360149054906101000a900460ff16610d8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8190613461565b60405180910390fd5b60001515600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514610e1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1490613381565b60405180910390fd5b6006546004541115610e64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5b906133e1565b60405180910390fd5b6007543414610ea8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9f90613481565b60405180910390fd5b60008060019050600160046000828254610ec29190613700565b925050819055506001600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610f2d33838386611b01565b505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610f6e610f67611387565b8383611c97565b5050565b610f7a611387565b73ffffffffffffffffffffffffffffffffffffffff16610f98610f32565b73ffffffffffffffffffffffffffffffffffffffff1614610fee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe590613441565b60405180910390fd5b80600360156101000a81548160ff02191690831515021790555050565b60075481565b611019611387565b73ffffffffffffffffffffffffffffffffffffffff16611037610f32565b73ffffffffffffffffffffffffffffffffffffffff161461108d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108490613441565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156110d3573d6000803e3d6000fd5b5050565b600360149054906101000a900460ff1681565b60065481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61118c611387565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806111d257506111d1856111cc611387565b6110f0565b5b611211576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120890613361565b60405180910390fd5b61121e8585858585611e04565b5050505050565b61122d611387565b73ffffffffffffffffffffffffffffffffffffffff1661124b610f32565b73ffffffffffffffffffffffffffffffffffffffff16146112a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129890613441565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611311576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130890613321565b60405180910390fd5b61131a81611a3b565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b80600290805190602001906113a59291906124e9565b5050565b606060008214156113f1576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611505565b600082905060005b6000821461142357808061140c906138e6565b915050600a8261141c9190613756565b91506113f9565b60008167ffffffffffffffff81111561143f5761143e613a1c565b5b6040519080825280601f01601f1916602001820160405280156114715781602001600182028036833780820191505090505b5090505b600085146114fe5760018261148a9190613787565b9150600a85611499919061392f565b60306114a59190613700565b60f81b8183815181106114bb576114ba6139ed565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856114f79190613756565b9450611475565b8093505050505b919050565b815183511461154e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154590613521565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156115be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b5906133a1565b60405180910390fd5b60006115c8611387565b90506115d8818787878787612086565b60005b84518110156117895760008582815181106115f9576115f86139ed565b5b602002602001015190506000858381518110611618576116176139ed565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156116b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b090613421565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461176e9190613700565b9250508190555050505080611782906138e6565b90506115db565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161180092919061322d565b60405180910390a461181681878787878761208e565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561188e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188590613401565b60405180910390fd5b6000611898611387565b90506118c8818560006118aa87612275565b6118b387612275565b60405180602001604052806000815250612086565b600080600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561195f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195690613341565b60405180910390fd5b82810360008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051611a2c92919061357c565b60405180910390a45050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611b71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6890613541565b60405180910390fd5b6000611b7b611387565b9050611b9c81600087611b8d88612275565b611b9688612275565b87612086565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611bfb9190613700565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051611c7992919061357c565b60405180910390a4611c90816000878787876122ef565b5050505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611d06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfd906134c1565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611df79190613264565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611e74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6b906133a1565b60405180910390fd5b6000611e7e611387565b9050611e9e818787611e8f88612275565b611e9888612275565b87612086565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611f35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2c90613421565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611fea9190613700565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62888860405161206792919061357c565b60405180910390a461207d8288888888886122ef565b50505050505050565b505050505050565b6120ad8473ffffffffffffffffffffffffffffffffffffffff166124d6565b1561226d578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016120f3959493929190613149565b602060405180830381600087803b15801561210d57600080fd5b505af192505050801561213e57506040513d601f19601f8201168201806040525081019061213b9190612b78565b60015b6121e45761214a613a4b565b806308c379a014156121a7575061215f6140dc565b8061216a57506121a9565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219e919061327f565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121db906132a1565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461226b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612262906132c1565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff81111561229457612293613a1c565b5b6040519080825280602002602001820160405280156122c25781602001602082028036833780820191505090505b50905082816000815181106122da576122d96139ed565b5b60200260200101818152505080915050919050565b61230e8473ffffffffffffffffffffffffffffffffffffffff166124d6565b156124ce578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016123549594939291906131b1565b602060405180830381600087803b15801561236e57600080fd5b505af192505050801561239f57506040513d601f19601f8201168201806040525081019061239c9190612b78565b60015b612445576123ab613a4b565b806308c379a0141561240857506123c06140dc565b806123cb575061240a565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ff919061327f565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243c906132a1565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146124cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c3906132c1565b60405180910390fd5b505b505050505050565b600080823b905060008111915050919050565b8280546124f590613883565b90600052602060002090601f016020900481019282612517576000855561255e565b82601f1061253057805160ff191683800117855561255e565b8280016001018555821561255e579182015b8281111561255d578251825591602001919060010190612542565b5b50905061256b919061256f565b5090565b5b80821115612588576000816000905550600101612570565b5090565b600061259f61259a846135ca565b6135a5565b905080838252602082019050828560208602820111156125c2576125c1613a72565b5b60005b858110156125f257816125d888826126f0565b8452602084019350602083019250506001810190506125c5565b5050509392505050565b600061260f61260a846135f6565b6135a5565b9050808382526020820190508285602086028201111561263257612631613a72565b5b60005b8581101561266257816126488882612811565b845260208401935060208301925050600181019050612635565b5050509392505050565b600061267f61267a84613622565b6135a5565b90508281526020810184848401111561269b5761269a613a77565b5b6126a6848285613841565b509392505050565b60006126c16126bc84613653565b6135a5565b9050828152602081018484840111156126dd576126dc613a77565b5b6126e8848285613841565b509392505050565b6000813590506126ff81614172565b92915050565b60008135905061271481614189565b92915050565b600082601f83011261272f5761272e613a6d565b5b813561273f84826020860161258c565b91505092915050565b600082601f83011261275d5761275c613a6d565b5b813561276d8482602086016125fc565b91505092915050565b600081359050612785816141a0565b92915050565b60008135905061279a816141b7565b92915050565b6000815190506127af816141b7565b92915050565b600082601f8301126127ca576127c9613a6d565b5b81356127da84826020860161266c565b91505092915050565b600082601f8301126127f8576127f7613a6d565b5b81356128088482602086016126ae565b91505092915050565b600081359050612820816141ce565b92915050565b60006020828403121561283c5761283b613a81565b5b600061284a848285016126f0565b91505092915050565b60006020828403121561286957612868613a81565b5b600061287784828501612705565b91505092915050565b6000806040838503121561289757612896613a81565b5b60006128a5858286016126f0565b92505060206128b6858286016126f0565b9150509250929050565b600080600080600060a086880312156128dc576128db613a81565b5b60006128ea888289016126f0565b95505060206128fb888289016126f0565b945050604086013567ffffffffffffffff81111561291c5761291b613a7c565b5b61292888828901612748565b935050606086013567ffffffffffffffff81111561294957612948613a7c565b5b61295588828901612748565b925050608086013567ffffffffffffffff81111561297657612975613a7c565b5b612982888289016127b5565b9150509295509295909350565b600080600080600060a086880312156129ab576129aa613a81565b5b60006129b9888289016126f0565b95505060206129ca888289016126f0565b94505060406129db88828901612811565b93505060606129ec88828901612811565b925050608086013567ffffffffffffffff811115612a0d57612a0c613a7c565b5b612a19888289016127b5565b9150509295509295909350565b60008060408385031215612a3d57612a3c613a81565b5b6000612a4b858286016126f0565b9250506020612a5c85828601612776565b9150509250929050565b60008060408385031215612a7d57612a7c613a81565b5b6000612a8b858286016126f0565b9250506020612a9c85828601612811565b9150509250929050565b60008060408385031215612abd57612abc613a81565b5b600083013567ffffffffffffffff811115612adb57612ada613a7c565b5b612ae78582860161271a565b925050602083013567ffffffffffffffff811115612b0857612b07613a7c565b5b612b1485828601612748565b9150509250929050565b600060208284031215612b3457612b33613a81565b5b6000612b4284828501612776565b91505092915050565b600060208284031215612b6157612b60613a81565b5b6000612b6f8482850161278b565b91505092915050565b600060208284031215612b8e57612b8d613a81565b5b6000612b9c848285016127a0565b91505092915050565b600060208284031215612bbb57612bba613a81565b5b600082013567ffffffffffffffff811115612bd957612bd8613a7c565b5b612be5848285016127b5565b91505092915050565b600060208284031215612c0457612c03613a81565b5b600082013567ffffffffffffffff811115612c2257612c21613a7c565b5b612c2e848285016127e3565b91505092915050565b600060208284031215612c4d57612c4c613a81565b5b6000612c5b84828501612811565b91505092915050565b6000612c7083836130e3565b60208301905092915050565b612c85816137bb565b82525050565b6000612c9682613694565b612ca081856136c2565b9350612cab83613684565b8060005b83811015612cdc578151612cc38882612c64565b9750612cce836136b5565b925050600181019050612caf565b5085935050505092915050565b612cf2816137df565b82525050565b6000612d038261369f565b612d0d81856136d3565b9350612d1d818560208601613850565b612d2681613a86565b840191505092915050565b6000612d3c826136aa565b612d4681856136e4565b9350612d56818560208601613850565b612d5f81613a86565b840191505092915050565b6000612d75826136aa565b612d7f81856136f5565b9350612d8f818560208601613850565b80840191505092915050565b6000612da86034836136e4565b9150612db382613aa4565b604082019050919050565b6000612dcb6028836136e4565b9150612dd682613af3565b604082019050919050565b6000612dee6013836136e4565b9150612df982613b42565b602082019050919050565b6000612e11602b836136e4565b9150612e1c82613b6b565b604082019050919050565b6000612e346026836136e4565b9150612e3f82613bba565b604082019050919050565b6000612e576024836136e4565b9150612e6282613c09565b604082019050919050565b6000612e7a6029836136e4565b9150612e8582613c58565b604082019050919050565b6000612e9d600f836136e4565b9150612ea882613ca7565b602082019050919050565b6000612ec06053836136f5565b9150612ecb82613cd0565b605382019050919050565b6000612ee36025836136e4565b9150612eee82613d45565b604082019050919050565b6000612f066032836136e4565b9150612f1182613d94565b604082019050919050565b6000612f296010836136e4565b9150612f3482613de3565b602082019050919050565b6000612f4c6023836136e4565b9150612f5782613e0c565b604082019050919050565b6000612f6f602a836136e4565b9150612f7a82613e5b565b604082019050919050565b6000612f926005836136f5565b9150612f9d82613eaa565b600582019050919050565b6000612fb56020836136e4565b9150612fc082613ed3565b602082019050919050565b6000612fd86013836136e4565b9150612fe382613efc565b602082019050919050565b6000612ffb6013836136e4565b915061300682613f25565b602082019050919050565b600061301e600c836136e4565b915061302982613f4e565b602082019050919050565b60006130416029836136e4565b915061304c82613f77565b604082019050919050565b60006130646029836136e4565b915061306f82613fc6565b604082019050919050565b60006130876012836136e4565b915061309282614015565b602082019050919050565b60006130aa6028836136e4565b91506130b58261403e565b604082019050919050565b60006130cd6021836136e4565b91506130d88261408d565b604082019050919050565b6130ec81613837565b82525050565b6130fb81613837565b82525050565b600061310c82612eb3565b91506131188284612d6a565b915061312382612f85565b915081905092915050565b60006020820190506131436000830184612c7c565b92915050565b600060a08201905061315e6000830188612c7c565b61316b6020830187612c7c565b818103604083015261317d8186612c8b565b905081810360608301526131918185612c8b565b905081810360808301526131a58184612cf8565b90509695505050505050565b600060a0820190506131c66000830188612c7c565b6131d36020830187612c7c565b6131e060408301866130f2565b6131ed60608301856130f2565b81810360808301526131ff8184612cf8565b90509695505050505050565b600060208201905081810360008301526132258184612c8b565b905092915050565b600060408201905081810360008301526132478185612c8b565b9050818103602083015261325b8184612c8b565b90509392505050565b60006020820190506132796000830184612ce9565b92915050565b600060208201905081810360008301526132998184612d31565b905092915050565b600060208201905081810360008301526132ba81612d9b565b9050919050565b600060208201905081810360008301526132da81612dbe565b9050919050565b600060208201905081810360008301526132fa81612de1565b9050919050565b6000602082019050818103600083015261331a81612e04565b9050919050565b6000602082019050818103600083015261333a81612e27565b9050919050565b6000602082019050818103600083015261335a81612e4a565b9050919050565b6000602082019050818103600083015261337a81612e6d565b9050919050565b6000602082019050818103600083015261339a81612e90565b9050919050565b600060208201905081810360008301526133ba81612ed6565b9050919050565b600060208201905081810360008301526133da81612ef9565b9050919050565b600060208201905081810360008301526133fa81612f1c565b9050919050565b6000602082019050818103600083015261341a81612f3f565b9050919050565b6000602082019050818103600083015261343a81612f62565b9050919050565b6000602082019050818103600083015261345a81612fa8565b9050919050565b6000602082019050818103600083015261347a81612fcb565b9050919050565b6000602082019050818103600083015261349a81612fee565b9050919050565b600060208201905081810360008301526134ba81613011565b9050919050565b600060208201905081810360008301526134da81613034565b9050919050565b600060208201905081810360008301526134fa81613057565b9050919050565b6000602082019050818103600083015261351a8161307a565b9050919050565b6000602082019050818103600083015261353a8161309d565b9050919050565b6000602082019050818103600083015261355a816130c0565b9050919050565b600060208201905061357660008301846130f2565b92915050565b600060408201905061359160008301856130f2565b61359e60208301846130f2565b9392505050565b60006135af6135c0565b90506135bb82826138b5565b919050565b6000604051905090565b600067ffffffffffffffff8211156135e5576135e4613a1c565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561361157613610613a1c565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561363d5761363c613a1c565b5b61364682613a86565b9050602081019050919050565b600067ffffffffffffffff82111561366e5761366d613a1c565b5b61367782613a86565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061370b82613837565b915061371683613837565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561374b5761374a613960565b5b828201905092915050565b600061376182613837565b915061376c83613837565b92508261377c5761377b61398f565b5b828204905092915050565b600061379282613837565b915061379d83613837565b9250828210156137b0576137af613960565b5b828203905092915050565b60006137c682613817565b9050919050565b60006137d882613817565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561386e578082015181840152602081019050613853565b8381111561387d576000848401525b50505050565b6000600282049050600182168061389b57607f821691505b602082108114156138af576138ae6139be565b5b50919050565b6138be82613a86565b810181811067ffffffffffffffff821117156138dd576138dc613a1c565b5b80604052505050565b60006138f182613837565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561392457613923613960565b5b600182019050919050565b600061393a82613837565b915061394583613837565b9250826139555761395461398f565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d1115613a6a5760046000803e613a67600051613a97565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f4275726e696e67206e6f7420656e61626c656400000000000000000000000000600082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f43616e206f6e6c79206d696e7420310000000000000000000000000000000000600082015250565b7f68747470733a2f2f626166796265696570636d69796537666c6e693778746e7360008201527f713535356634363673676c6f337771796b6b6e32356d7977667a716e6432717060208201527f666d692e697066732e647765622e6c696e6b2f00000000000000000000000000604082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f4f6e6c792031323030206d696e74656400000000000000000000000000000000600082015250565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4d696e74696e67206e6f7420656e61626c656400000000000000000000000000600082015250565b7f4e6f7420656e6f756768204554482073656e7400000000000000000000000000600082015250565b7f4e6f74206f776e6572206f660000000000000000000000000000000000000000600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f43616e206f6e6c79206275726e206f6e63650000000000000000000000000000600082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d10156140ec5761416f565b6140f46135c0565b60043d036004823e80513d602482011167ffffffffffffffff8211171561411c57505061416f565b808201805167ffffffffffffffff81111561413a575050505061416f565b80602083010160043d03850181111561415757505050505061416f565b614166826020018501866138b5565b82955050505050505b90565b61417b816137bb565b811461418657600080fd5b50565b614192816137cd565b811461419d57600080fd5b50565b6141a9816137df565b81146141b457600080fd5b50565b6141c0816137eb565b81146141cb57600080fd5b50565b6141d781613837565b81146141e257600080fd5b5056fea26469706673582212201c0998cf0007950ce2d7e767325f499b4aebdbf53621a6e84728af7ebffa9d3d64736f6c6343000807003368747470733a2f2f626166796265696570636d69796537666c6e693778746e73713535356634363673676c6f337771796b6b6e32356d7977667a716e64327170666d692e697066732e647765622e6c696e6b2f7b69647d2e6a736f6e
Deployed Bytecode
0x6080604052600436106101695760003560e01c806373f42561116100d1578063bdb4b8481161008a578063d5abeb0111610064578063d5abeb011461052a578063e985e9c514610555578063f242432a14610592578063f2fde38b146105bb57610170565b8063bdb4b848146104ab578063c7a5d285146104d6578063d1239730146104ff57610170565b806373f42561146103be57806378acea1e146103e95780637ba0e2e7146104125780638da5cb5b1461042e578063a22cb46514610459578063b45dd8731461048257610170565b806338e21cce1161012357806338e21cce146102bb57806342966c68146102f85780634e1273f4146103145780634f02c420146103515780635dc96d161461037c578063715018a6146103a757610170565b8062fdd58e1461017557806301ffc9a7146101b257806302fe5305146101ef5780630e89341c1461021857806326cbd9d9146102555780632eb2c2d61461029257610170565b3661017057005b600080fd5b34801561018157600080fd5b5061019c60048036038101906101979190612a66565b6105e4565b6040516101a99190613561565b60405180910390f35b3480156101be57600080fd5b506101d960048036038101906101d49190612b4b565b6106ad565b6040516101e69190613264565b60405180910390f35b3480156101fb57600080fd5b5061021660048036038101906102119190612bee565b61078f565b005b34801561022457600080fd5b5061023f600480360381019061023a9190612c37565b610817565b60405161024c919061327f565b60405180910390f35b34801561026157600080fd5b5061027c60048036038101906102779190612826565b61084c565b6040516102899190613264565b60405180910390f35b34801561029e57600080fd5b506102b960048036038101906102b491906128c0565b61086c565b005b3480156102c757600080fd5b506102e260048036038101906102dd9190612826565b61090d565b6040516102ef9190613264565b60405180910390f35b610312600480360381019061030d9190612c37565b61092d565b005b34801561032057600080fd5b5061033b60048036038101906103369190612aa6565b610ae2565b604051610348919061320b565b60405180910390f35b34801561035d57600080fd5b50610366610bfb565b6040516103739190613561565b60405180910390f35b34801561038857600080fd5b50610391610c01565b60405161039e9190613264565b60405180910390f35b3480156103b357600080fd5b506103bc610c14565b005b3480156103ca57600080fd5b506103d3610c9c565b6040516103e09190613561565b60405180910390f35b3480156103f557600080fd5b50610410600480360381019061040b9190612b1e565b610ca2565b005b61042c60048036038101906104279190612ba5565b610d3b565b005b34801561043a57600080fd5b50610443610f32565b604051610450919061312e565b60405180910390f35b34801561046557600080fd5b50610480600480360381019061047b9190612a26565b610f5c565b005b34801561048e57600080fd5b506104a960048036038101906104a49190612b1e565b610f72565b005b3480156104b757600080fd5b506104c061100b565b6040516104cd9190613561565b60405180910390f35b3480156104e257600080fd5b506104fd60048036038101906104f89190612853565b611011565b005b34801561050b57600080fd5b506105146110d7565b6040516105219190613264565b60405180910390f35b34801561053657600080fd5b5061053f6110ea565b60405161054c9190613561565b60405180910390f35b34801561056157600080fd5b5061057c60048036038101906105779190612880565b6110f0565b6040516105899190613264565b60405180910390f35b34801561059e57600080fd5b506105b960048036038101906105b4919061298f565b611184565b005b3480156105c757600080fd5b506105e260048036038101906105dd9190612826565b611225565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610655576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064c90613301565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061077857507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061078857506107878261131d565b5b9050919050565b610797611387565b73ffffffffffffffffffffffffffffffffffffffff166107b5610f32565b73ffffffffffffffffffffffffffffffffffffffff161461080b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080290613441565b60405180910390fd5b6108148161138f565b50565b606060009150610826826113a9565b6040516020016108369190613101565b6040516020818303038152906040529050919050565b60086020528060005260406000206000915054906101000a900460ff1681565b610874611387565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806108ba57506108b9856108b4611387565b6110f0565b5b6108f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f0906133c1565b60405180910390fd5b610906858585858561150a565b5050505050565b60096020528060005260406000206000915054906101000a900460ff1681565b600360159054906101000a900460ff1661097c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610973906132e1565b60405180910390fd5b60001515600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514610a0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0690613501565b60405180910390fd5b6001610a1b33836105e4565b14610a5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a52906134a1565b60405180910390fd5b600060019050600160056000828254610a749190613700565b925050819055506001600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610ade33838361181e565b5050565b60608151835114610b28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1f906134e1565b60405180910390fd5b6000835167ffffffffffffffff811115610b4557610b44613a1c565b5b604051908082528060200260200182016040528015610b735781602001602082028036833780820191505090505b50905060005b8451811015610bf057610bc0858281518110610b9857610b976139ed565b5b6020026020010151858381518110610bb357610bb26139ed565b5b60200260200101516105e4565b828281518110610bd357610bd26139ed565b5b60200260200101818152505080610be9906138e6565b9050610b79565b508091505092915050565b60045481565b600360159054906101000a900460ff1681565b610c1c611387565b73ffffffffffffffffffffffffffffffffffffffff16610c3a610f32565b73ffffffffffffffffffffffffffffffffffffffff1614610c90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8790613441565b60405180910390fd5b610c9a6000611a3b565b565b60055481565b610caa611387565b73ffffffffffffffffffffffffffffffffffffffff16610cc8610f32565b73ffffffffffffffffffffffffffffffffffffffff1614610d1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1590613441565b60405180910390fd5b80600360146101000a81548160ff02191690831515021790555050565b600360149054906101000a900460ff16610d8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8190613461565b60405180910390fd5b60001515600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514610e1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1490613381565b60405180910390fd5b6006546004541115610e64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5b906133e1565b60405180910390fd5b6007543414610ea8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9f90613481565b60405180910390fd5b60008060019050600160046000828254610ec29190613700565b925050819055506001600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610f2d33838386611b01565b505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610f6e610f67611387565b8383611c97565b5050565b610f7a611387565b73ffffffffffffffffffffffffffffffffffffffff16610f98610f32565b73ffffffffffffffffffffffffffffffffffffffff1614610fee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe590613441565b60405180910390fd5b80600360156101000a81548160ff02191690831515021790555050565b60075481565b611019611387565b73ffffffffffffffffffffffffffffffffffffffff16611037610f32565b73ffffffffffffffffffffffffffffffffffffffff161461108d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108490613441565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156110d3573d6000803e3d6000fd5b5050565b600360149054906101000a900460ff1681565b60065481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61118c611387565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806111d257506111d1856111cc611387565b6110f0565b5b611211576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120890613361565b60405180910390fd5b61121e8585858585611e04565b5050505050565b61122d611387565b73ffffffffffffffffffffffffffffffffffffffff1661124b610f32565b73ffffffffffffffffffffffffffffffffffffffff16146112a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129890613441565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611311576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130890613321565b60405180910390fd5b61131a81611a3b565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b80600290805190602001906113a59291906124e9565b5050565b606060008214156113f1576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611505565b600082905060005b6000821461142357808061140c906138e6565b915050600a8261141c9190613756565b91506113f9565b60008167ffffffffffffffff81111561143f5761143e613a1c565b5b6040519080825280601f01601f1916602001820160405280156114715781602001600182028036833780820191505090505b5090505b600085146114fe5760018261148a9190613787565b9150600a85611499919061392f565b60306114a59190613700565b60f81b8183815181106114bb576114ba6139ed565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856114f79190613756565b9450611475565b8093505050505b919050565b815183511461154e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154590613521565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156115be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b5906133a1565b60405180910390fd5b60006115c8611387565b90506115d8818787878787612086565b60005b84518110156117895760008582815181106115f9576115f86139ed565b5b602002602001015190506000858381518110611618576116176139ed565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156116b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b090613421565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461176e9190613700565b9250508190555050505080611782906138e6565b90506115db565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161180092919061322d565b60405180910390a461181681878787878761208e565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561188e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188590613401565b60405180910390fd5b6000611898611387565b90506118c8818560006118aa87612275565b6118b387612275565b60405180602001604052806000815250612086565b600080600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561195f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195690613341565b60405180910390fd5b82810360008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051611a2c92919061357c565b60405180910390a45050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611b71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6890613541565b60405180910390fd5b6000611b7b611387565b9050611b9c81600087611b8d88612275565b611b9688612275565b87612086565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611bfb9190613700565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051611c7992919061357c565b60405180910390a4611c90816000878787876122ef565b5050505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611d06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfd906134c1565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611df79190613264565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611e74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6b906133a1565b60405180910390fd5b6000611e7e611387565b9050611e9e818787611e8f88612275565b611e9888612275565b87612086565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611f35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2c90613421565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611fea9190613700565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62888860405161206792919061357c565b60405180910390a461207d8288888888886122ef565b50505050505050565b505050505050565b6120ad8473ffffffffffffffffffffffffffffffffffffffff166124d6565b1561226d578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016120f3959493929190613149565b602060405180830381600087803b15801561210d57600080fd5b505af192505050801561213e57506040513d601f19601f8201168201806040525081019061213b9190612b78565b60015b6121e45761214a613a4b565b806308c379a014156121a7575061215f6140dc565b8061216a57506121a9565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219e919061327f565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121db906132a1565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461226b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612262906132c1565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff81111561229457612293613a1c565b5b6040519080825280602002602001820160405280156122c25781602001602082028036833780820191505090505b50905082816000815181106122da576122d96139ed565b5b60200260200101818152505080915050919050565b61230e8473ffffffffffffffffffffffffffffffffffffffff166124d6565b156124ce578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016123549594939291906131b1565b602060405180830381600087803b15801561236e57600080fd5b505af192505050801561239f57506040513d601f19601f8201168201806040525081019061239c9190612b78565b60015b612445576123ab613a4b565b806308c379a0141561240857506123c06140dc565b806123cb575061240a565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ff919061327f565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243c906132a1565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146124cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c3906132c1565b60405180910390fd5b505b505050505050565b600080823b905060008111915050919050565b8280546124f590613883565b90600052602060002090601f016020900481019282612517576000855561255e565b82601f1061253057805160ff191683800117855561255e565b8280016001018555821561255e579182015b8281111561255d578251825591602001919060010190612542565b5b50905061256b919061256f565b5090565b5b80821115612588576000816000905550600101612570565b5090565b600061259f61259a846135ca565b6135a5565b905080838252602082019050828560208602820111156125c2576125c1613a72565b5b60005b858110156125f257816125d888826126f0565b8452602084019350602083019250506001810190506125c5565b5050509392505050565b600061260f61260a846135f6565b6135a5565b9050808382526020820190508285602086028201111561263257612631613a72565b5b60005b8581101561266257816126488882612811565b845260208401935060208301925050600181019050612635565b5050509392505050565b600061267f61267a84613622565b6135a5565b90508281526020810184848401111561269b5761269a613a77565b5b6126a6848285613841565b509392505050565b60006126c16126bc84613653565b6135a5565b9050828152602081018484840111156126dd576126dc613a77565b5b6126e8848285613841565b509392505050565b6000813590506126ff81614172565b92915050565b60008135905061271481614189565b92915050565b600082601f83011261272f5761272e613a6d565b5b813561273f84826020860161258c565b91505092915050565b600082601f83011261275d5761275c613a6d565b5b813561276d8482602086016125fc565b91505092915050565b600081359050612785816141a0565b92915050565b60008135905061279a816141b7565b92915050565b6000815190506127af816141b7565b92915050565b600082601f8301126127ca576127c9613a6d565b5b81356127da84826020860161266c565b91505092915050565b600082601f8301126127f8576127f7613a6d565b5b81356128088482602086016126ae565b91505092915050565b600081359050612820816141ce565b92915050565b60006020828403121561283c5761283b613a81565b5b600061284a848285016126f0565b91505092915050565b60006020828403121561286957612868613a81565b5b600061287784828501612705565b91505092915050565b6000806040838503121561289757612896613a81565b5b60006128a5858286016126f0565b92505060206128b6858286016126f0565b9150509250929050565b600080600080600060a086880312156128dc576128db613a81565b5b60006128ea888289016126f0565b95505060206128fb888289016126f0565b945050604086013567ffffffffffffffff81111561291c5761291b613a7c565b5b61292888828901612748565b935050606086013567ffffffffffffffff81111561294957612948613a7c565b5b61295588828901612748565b925050608086013567ffffffffffffffff81111561297657612975613a7c565b5b612982888289016127b5565b9150509295509295909350565b600080600080600060a086880312156129ab576129aa613a81565b5b60006129b9888289016126f0565b95505060206129ca888289016126f0565b94505060406129db88828901612811565b93505060606129ec88828901612811565b925050608086013567ffffffffffffffff811115612a0d57612a0c613a7c565b5b612a19888289016127b5565b9150509295509295909350565b60008060408385031215612a3d57612a3c613a81565b5b6000612a4b858286016126f0565b9250506020612a5c85828601612776565b9150509250929050565b60008060408385031215612a7d57612a7c613a81565b5b6000612a8b858286016126f0565b9250506020612a9c85828601612811565b9150509250929050565b60008060408385031215612abd57612abc613a81565b5b600083013567ffffffffffffffff811115612adb57612ada613a7c565b5b612ae78582860161271a565b925050602083013567ffffffffffffffff811115612b0857612b07613a7c565b5b612b1485828601612748565b9150509250929050565b600060208284031215612b3457612b33613a81565b5b6000612b4284828501612776565b91505092915050565b600060208284031215612b6157612b60613a81565b5b6000612b6f8482850161278b565b91505092915050565b600060208284031215612b8e57612b8d613a81565b5b6000612b9c848285016127a0565b91505092915050565b600060208284031215612bbb57612bba613a81565b5b600082013567ffffffffffffffff811115612bd957612bd8613a7c565b5b612be5848285016127b5565b91505092915050565b600060208284031215612c0457612c03613a81565b5b600082013567ffffffffffffffff811115612c2257612c21613a7c565b5b612c2e848285016127e3565b91505092915050565b600060208284031215612c4d57612c4c613a81565b5b6000612c5b84828501612811565b91505092915050565b6000612c7083836130e3565b60208301905092915050565b612c85816137bb565b82525050565b6000612c9682613694565b612ca081856136c2565b9350612cab83613684565b8060005b83811015612cdc578151612cc38882612c64565b9750612cce836136b5565b925050600181019050612caf565b5085935050505092915050565b612cf2816137df565b82525050565b6000612d038261369f565b612d0d81856136d3565b9350612d1d818560208601613850565b612d2681613a86565b840191505092915050565b6000612d3c826136aa565b612d4681856136e4565b9350612d56818560208601613850565b612d5f81613a86565b840191505092915050565b6000612d75826136aa565b612d7f81856136f5565b9350612d8f818560208601613850565b80840191505092915050565b6000612da86034836136e4565b9150612db382613aa4565b604082019050919050565b6000612dcb6028836136e4565b9150612dd682613af3565b604082019050919050565b6000612dee6013836136e4565b9150612df982613b42565b602082019050919050565b6000612e11602b836136e4565b9150612e1c82613b6b565b604082019050919050565b6000612e346026836136e4565b9150612e3f82613bba565b604082019050919050565b6000612e576024836136e4565b9150612e6282613c09565b604082019050919050565b6000612e7a6029836136e4565b9150612e8582613c58565b604082019050919050565b6000612e9d600f836136e4565b9150612ea882613ca7565b602082019050919050565b6000612ec06053836136f5565b9150612ecb82613cd0565b605382019050919050565b6000612ee36025836136e4565b9150612eee82613d45565b604082019050919050565b6000612f066032836136e4565b9150612f1182613d94565b604082019050919050565b6000612f296010836136e4565b9150612f3482613de3565b602082019050919050565b6000612f4c6023836136e4565b9150612f5782613e0c565b604082019050919050565b6000612f6f602a836136e4565b9150612f7a82613e5b565b604082019050919050565b6000612f926005836136f5565b9150612f9d82613eaa565b600582019050919050565b6000612fb56020836136e4565b9150612fc082613ed3565b602082019050919050565b6000612fd86013836136e4565b9150612fe382613efc565b602082019050919050565b6000612ffb6013836136e4565b915061300682613f25565b602082019050919050565b600061301e600c836136e4565b915061302982613f4e565b602082019050919050565b60006130416029836136e4565b915061304c82613f77565b604082019050919050565b60006130646029836136e4565b915061306f82613fc6565b604082019050919050565b60006130876012836136e4565b915061309282614015565b602082019050919050565b60006130aa6028836136e4565b91506130b58261403e565b604082019050919050565b60006130cd6021836136e4565b91506130d88261408d565b604082019050919050565b6130ec81613837565b82525050565b6130fb81613837565b82525050565b600061310c82612eb3565b91506131188284612d6a565b915061312382612f85565b915081905092915050565b60006020820190506131436000830184612c7c565b92915050565b600060a08201905061315e6000830188612c7c565b61316b6020830187612c7c565b818103604083015261317d8186612c8b565b905081810360608301526131918185612c8b565b905081810360808301526131a58184612cf8565b90509695505050505050565b600060a0820190506131c66000830188612c7c565b6131d36020830187612c7c565b6131e060408301866130f2565b6131ed60608301856130f2565b81810360808301526131ff8184612cf8565b90509695505050505050565b600060208201905081810360008301526132258184612c8b565b905092915050565b600060408201905081810360008301526132478185612c8b565b9050818103602083015261325b8184612c8b565b90509392505050565b60006020820190506132796000830184612ce9565b92915050565b600060208201905081810360008301526132998184612d31565b905092915050565b600060208201905081810360008301526132ba81612d9b565b9050919050565b600060208201905081810360008301526132da81612dbe565b9050919050565b600060208201905081810360008301526132fa81612de1565b9050919050565b6000602082019050818103600083015261331a81612e04565b9050919050565b6000602082019050818103600083015261333a81612e27565b9050919050565b6000602082019050818103600083015261335a81612e4a565b9050919050565b6000602082019050818103600083015261337a81612e6d565b9050919050565b6000602082019050818103600083015261339a81612e90565b9050919050565b600060208201905081810360008301526133ba81612ed6565b9050919050565b600060208201905081810360008301526133da81612ef9565b9050919050565b600060208201905081810360008301526133fa81612f1c565b9050919050565b6000602082019050818103600083015261341a81612f3f565b9050919050565b6000602082019050818103600083015261343a81612f62565b9050919050565b6000602082019050818103600083015261345a81612fa8565b9050919050565b6000602082019050818103600083015261347a81612fcb565b9050919050565b6000602082019050818103600083015261349a81612fee565b9050919050565b600060208201905081810360008301526134ba81613011565b9050919050565b600060208201905081810360008301526134da81613034565b9050919050565b600060208201905081810360008301526134fa81613057565b9050919050565b6000602082019050818103600083015261351a8161307a565b9050919050565b6000602082019050818103600083015261353a8161309d565b9050919050565b6000602082019050818103600083015261355a816130c0565b9050919050565b600060208201905061357660008301846130f2565b92915050565b600060408201905061359160008301856130f2565b61359e60208301846130f2565b9392505050565b60006135af6135c0565b90506135bb82826138b5565b919050565b6000604051905090565b600067ffffffffffffffff8211156135e5576135e4613a1c565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561361157613610613a1c565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561363d5761363c613a1c565b5b61364682613a86565b9050602081019050919050565b600067ffffffffffffffff82111561366e5761366d613a1c565b5b61367782613a86565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061370b82613837565b915061371683613837565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561374b5761374a613960565b5b828201905092915050565b600061376182613837565b915061376c83613837565b92508261377c5761377b61398f565b5b828204905092915050565b600061379282613837565b915061379d83613837565b9250828210156137b0576137af613960565b5b828203905092915050565b60006137c682613817565b9050919050565b60006137d882613817565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561386e578082015181840152602081019050613853565b8381111561387d576000848401525b50505050565b6000600282049050600182168061389b57607f821691505b602082108114156138af576138ae6139be565b5b50919050565b6138be82613a86565b810181811067ffffffffffffffff821117156138dd576138dc613a1c565b5b80604052505050565b60006138f182613837565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561392457613923613960565b5b600182019050919050565b600061393a82613837565b915061394583613837565b9250826139555761395461398f565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d1115613a6a5760046000803e613a67600051613a97565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f4275726e696e67206e6f7420656e61626c656400000000000000000000000000600082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f43616e206f6e6c79206d696e7420310000000000000000000000000000000000600082015250565b7f68747470733a2f2f626166796265696570636d69796537666c6e693778746e7360008201527f713535356634363673676c6f337771796b6b6e32356d7977667a716e6432717060208201527f666d692e697066732e647765622e6c696e6b2f00000000000000000000000000604082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f4f6e6c792031323030206d696e74656400000000000000000000000000000000600082015250565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4d696e74696e67206e6f7420656e61626c656400000000000000000000000000600082015250565b7f4e6f7420656e6f756768204554482073656e7400000000000000000000000000600082015250565b7f4e6f74206f776e6572206f660000000000000000000000000000000000000000600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f43616e206f6e6c79206275726e206f6e63650000000000000000000000000000600082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d10156140ec5761416f565b6140f46135c0565b60043d036004823e80513d602482011167ffffffffffffffff8211171561411c57505061416f565b808201805167ffffffffffffffff81111561413a575050505061416f565b80602083010160043d03850181111561415757505050505061416f565b614166826020018501866138b5565b82955050505050505b90565b61417b816137bb565b811461418657600080fd5b50565b614192816137cd565b811461419d57600080fd5b50565b6141a9816137df565b81146141b457600080fd5b50565b6141c0816137eb565b81146141cb57600080fd5b50565b6141d781613837565b81146141e257600080fd5b5056fea26469706673582212201c0998cf0007950ce2d7e767325f499b4aebdbf53621a6e84728af7ebffa9d3d64736f6c63430008070033
Deployed Bytecode Sourcemap
34416:2177:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20851:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19874:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34907:89;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36054:362;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34681:41;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22790:442;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34729:41;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35475:371;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21248:524;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34535:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34503:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3257:103;;;;;;;;;;;;;:::i;:::-;;34563:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35854:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35004:463;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2606:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21845:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35954:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34629:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36428:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34473:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34591:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22072:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22312:401;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3515:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20851:231;20937:7;20984:1;20965:21;;:7;:21;;;;20957:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;21052:9;:13;21062:2;21052:13;;;;;;;;;;;:22;21066:7;21052:22;;;;;;;;;;;;;;;;21045:29;;20851:231;;;;:::o;19874:310::-;19976:4;20028:26;20013:41;;;:11;:41;;;;:110;;;;20086:37;20071:52;;;:11;:52;;;;20013:110;:163;;;;20140:36;20164:11;20140:23;:36::i;:::-;20013:163;19993:183;;19874:310;;;:::o;34907:89::-;2837:12;:10;:12::i;:::-;2826:23;;:7;:5;:7::i;:::-;:23;;;2818:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34973:15:::1;34981:6;34973:7;:15::i;:::-;34907:89:::0;:::o;36054:362::-;36114:13;36151:1;36140:12;;36330:26;36347:8;36330:16;:26::i;:::-;36191:206;;;;;;;;:::i;:::-;;;;;;;;;;;;;36163:245;;36054:362;;;:::o;34681:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;22790:442::-;23031:12;:10;:12::i;:::-;23023:20;;:4;:20;;;:60;;;;23047:36;23064:4;23070:12;:10;:12::i;:::-;23047:16;:36::i;:::-;23023:60;23001:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;23172:52;23195:4;23201:2;23205:3;23210:7;23219:4;23172:22;:52::i;:::-;22790:442;;;;;:::o;34729:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;35475:371::-;35535:11;;;;;;;;;;;35527:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;35614:5;35589:30;;:9;:21;35599:10;35589:21;;;;;;;;;;;;;;;;;;;;;;;;;:30;;;35581:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;35690:1;35661:25;35671:10;35683:2;35661:9;:25::i;:::-;:30;35653:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;35719:14;35736:1;35719:18;;35758:1;35748:6;;:11;;;;;;;:::i;:::-;;;;;;;;35794:4;35770:9;:21;35780:10;35770:21;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;35809:29;35815:10;35827:2;35831:6;35809:5;:29::i;:::-;35516:330;35475:371;:::o;21248:524::-;21404:16;21465:3;:10;21446:8;:15;:29;21438:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;21534:30;21581:8;:15;21567:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21534:63;;21615:9;21610:122;21634:8;:15;21630:1;:19;21610:122;;;21690:30;21700:8;21709:1;21700:11;;;;;;;;:::i;:::-;;;;;;;;21713:3;21717:1;21713:6;;;;;;;;:::i;:::-;;;;;;;;21690:9;:30::i;:::-;21671:13;21685:1;21671:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;21651:3;;;;:::i;:::-;;;21610:122;;;;21751:13;21744:20;;;21248:524;;;;:::o;34535:21::-;;;;:::o;34503:23::-;;;;;;;;;;;;;:::o;3257:103::-;2837:12;:10;:12::i;:::-;2826:23;;:7;:5;:7::i;:::-;:23;;;2818:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3322:30:::1;3349:1;3322:18;:30::i;:::-;3257:103::o:0;34563:21::-;;;;:::o;35854:92::-;2837:12;:10;:12::i;:::-;2826:23;;:7;:5;:7::i;:::-;:23;;;2818:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35933:5:::1;35919:11;;:19;;;;;;;;;;;;;;;;;;35854:92:::0;:::o;35004:463::-;35071:11;;;;;;;;;;;35063:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;35150:5;35125:30;;:9;:21;35135:10;35125:21;;;;;;;;;;;;;;;;;;;;;;;;;:30;;;35117:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;35204:9;;35194:6;;:19;;35186:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;35266:8;;35253:9;:21;35245:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;35309:10;35334:14;35351:1;35334:18;;35373:1;35363:6;;:11;;;;;;;:::i;:::-;;;;;;;;35409:4;35385:9;:21;35395:10;35385:21;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;35424:35;35430:10;35442:2;35446:6;35454:4;35424:5;:35::i;:::-;35052:415;;35004:463;:::o;2606:87::-;2652:7;2679:6;;;;;;;;;;;2672:13;;2606:87;:::o;21845:155::-;21940:52;21959:12;:10;:12::i;:::-;21973:8;21983;21940:18;:52::i;:::-;21845:155;;:::o;35954:92::-;2837:12;:10;:12::i;:::-;2826:23;;:7;:5;:7::i;:::-;:23;;;2818:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36033:5:::1;36019:11;;:19;;;;;;;;;;;;;;;;;;35954:92:::0;:::o;34629:43::-;;;;:::o;36428:121::-;2837:12;:10;:12::i;:::-;2826:23;;:7;:5;:7::i;:::-;:23;;;2818:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36501:8:::1;:17;;:40;36519:21;36501:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;36428:121:::0;:::o;34473:23::-;;;;;;;;;;;;;:::o;34591:31::-;;;;:::o;22072:168::-;22171:4;22195:18;:27;22214:7;22195:27;;;;;;;;;;;;;;;:37;22223:8;22195:37;;;;;;;;;;;;;;;;;;;;;;;;;22188:44;;22072:168;;;;:::o;22312:401::-;22528:12;:10;:12::i;:::-;22520:20;;:4;:20;;;:60;;;;22544:36;22561:4;22567:12;:10;:12::i;:::-;22544:16;:36::i;:::-;22520:60;22498:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;22660:45;22678:4;22684:2;22688;22692:6;22700:4;22660:17;:45::i;:::-;22312:401;;;;;:::o;3515:201::-;2837:12;:10;:12::i;:::-;2826:23;;:7;:5;:7::i;:::-;:23;;;2818:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3624:1:::1;3604:22;;:8;:22;;;;3596:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3680:28;3699:8;3680:18;:28::i;:::-;3515:201:::0;:::o;12577:157::-;12662:4;12701:25;12686:40;;;:11;:40;;;;12679:47;;12577:157;;;:::o;1980:98::-;2033:7;2060:10;2053:17;;1980:98;:::o;26792:88::-;26866:6;26859:4;:13;;;;;;;;;;;;:::i;:::-;;26792:88;:::o;188:723::-;244:13;474:1;465:5;:10;461:53;;;492:10;;;;;;;;;;;;;;;;;;;;;461:53;524:12;539:5;524:20;;555:14;580:78;595:1;587:4;:9;580:78;;613:8;;;;;:::i;:::-;;;;644:2;636:10;;;;;:::i;:::-;;;580:78;;;668:19;700:6;690:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;668:39;;718:154;734:1;725:5;:10;718:154;;762:1;752:11;;;;;:::i;:::-;;;829:2;821:5;:10;;;;:::i;:::-;808:2;:24;;;;:::i;:::-;795:39;;778:6;785;778:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;858:2;849:11;;;;;:::i;:::-;;;718:154;;;896:6;882:21;;;;;188:723;;;;:::o;24874:1074::-;25101:7;:14;25087:3;:10;:28;25079:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;25193:1;25179:16;;:2;:16;;;;25171:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;25250:16;25269:12;:10;:12::i;:::-;25250:31;;25294:60;25315:8;25325:4;25331:2;25335:3;25340:7;25349:4;25294:20;:60::i;:::-;25372:9;25367:421;25391:3;:10;25387:1;:14;25367:421;;;25423:10;25436:3;25440:1;25436:6;;;;;;;;:::i;:::-;;;;;;;;25423:19;;25457:14;25474:7;25482:1;25474:10;;;;;;;;:::i;:::-;;;;;;;;25457:27;;25501:19;25523:9;:13;25533:2;25523:13;;;;;;;;;;;:19;25537:4;25523:19;;;;;;;;;;;;;;;;25501:41;;25580:6;25565:11;:21;;25557:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;25713:6;25699:11;:20;25677:9;:13;25687:2;25677:13;;;;;;;;;;;:19;25691:4;25677:19;;;;;;;;;;;;;;;:42;;;;25770:6;25749:9;:13;25759:2;25749:13;;;;;;;;;;;:17;25763:2;25749:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;25408:380;;;25403:3;;;;:::i;:::-;;;25367:421;;;;25835:2;25805:47;;25829:4;25805:47;;25819:8;25805:47;;;25839:3;25844:7;25805:47;;;;;;;:::i;:::-;;;;;;;;25865:75;25901:8;25911:4;25917:2;25921:3;25926:7;25935:4;25865:35;:75::i;:::-;25068:880;24874:1074;;;;;:::o;29176:648::-;29319:1;29303:18;;:4;:18;;;;29295:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;29374:16;29393:12;:10;:12::i;:::-;29374:31;;29418:102;29439:8;29449:4;29463:1;29467:21;29485:2;29467:17;:21::i;:::-;29490:25;29508:6;29490:17;:25::i;:::-;29418:102;;;;;;;;;;;;:20;:102::i;:::-;29533:19;29555:9;:13;29565:2;29555:13;;;;;;;;;;;:19;29569:4;29555:19;;;;;;;;;;;;;;;;29533:41;;29608:6;29593:11;:21;;29585:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;29727:6;29713:11;:20;29691:9;:13;29701:2;29691:13;;;;;;;;;;;:19;29705:4;29691:19;;;;;;;;;;;;;;;:42;;;;29801:1;29762:54;;29787:4;29762:54;;29777:8;29762:54;;;29805:2;29809:6;29762:54;;;;;;;:::i;:::-;;;;;;;;29284:540;;29176:648;;;:::o;3876:191::-;3950:16;3969:6;;;;;;;;;;;3950:25;;3995:8;3986:6;;:17;;;;;;;;;;;;;;;;;;4050:8;4019:40;;4040:8;4019:40;;;;;;;;;;;;3939:128;3876:191;:::o;27266:569::-;27433:1;27419:16;;:2;:16;;;;27411:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;27486:16;27505:12;:10;:12::i;:::-;27486:31;;27530:102;27551:8;27569:1;27573:2;27577:21;27595:2;27577:17;:21::i;:::-;27600:25;27618:6;27600:17;:25::i;:::-;27627:4;27530:20;:102::i;:::-;27666:6;27645:9;:13;27655:2;27645:13;;;;;;;;;;;:17;27659:2;27645:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;27725:2;27688:52;;27721:1;27688:52;;27703:8;27688:52;;;27729:2;27733:6;27688:52;;;;;;;:::i;:::-;;;;;;;;27753:74;27784:8;27802:1;27806:2;27810;27814:6;27822:4;27753:30;:74::i;:::-;27400:435;27266:569;;;;:::o;31060:331::-;31215:8;31206:17;;:5;:17;;;;31198:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;31318:8;31280:18;:25;31299:5;31280:25;;;;;;;;;;;;;;;:35;31306:8;31280:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;31364:8;31342:41;;31357:5;31342:41;;;31374:8;31342:41;;;;;;:::i;:::-;;;;;;;;31060:331;;;:::o;23696:820::-;23898:1;23884:16;;:2;:16;;;;23876:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;23955:16;23974:12;:10;:12::i;:::-;23955:31;;23999:96;24020:8;24030:4;24036:2;24040:21;24058:2;24040:17;:21::i;:::-;24063:25;24081:6;24063:17;:25::i;:::-;24090:4;23999:20;:96::i;:::-;24108:19;24130:9;:13;24140:2;24130:13;;;;;;;;;;;:19;24144:4;24130:19;;;;;;;;;;;;;;;;24108:41;;24183:6;24168:11;:21;;24160:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;24308:6;24294:11;:20;24272:9;:13;24282:2;24272:13;;;;;;;;;;;:19;24286:4;24272:19;;;;;;;;;;;;;;;:42;;;;24357:6;24336:9;:13;24346:2;24336:13;;;;;;;;;;;:17;24350:2;24336:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;24412:2;24381:46;;24406:4;24381:46;;24396:8;24381:46;;;24416:2;24420:6;24381:46;;;;;;;:::i;:::-;;;;;;;;24440:68;24471:8;24481:4;24487:2;24491;24495:6;24503:4;24440:30;:68::i;:::-;23865:651;;23696:820;;;;;:::o;32347:221::-;;;;;;;:::o;33328:813::-;33568:15;:2;:13;;;:15::i;:::-;33564:570;;;33621:2;33604:43;;;33648:8;33658:4;33664:3;33669:7;33678:4;33604:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;33600:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;33996:6;33989:14;;;;;;;;;;;:::i;:::-;;;;;;;;33600:523;;;34045:62;;;;;;;;;;:::i;:::-;;;;;;;;33600:523;33777:48;;;33765:60;;;:8;:60;;;;33761:159;;33850:50;;;;;;;;;;:::i;:::-;;;;;;;;33761:159;33684:251;33564:570;33328:813;;;;;;:::o;34149:198::-;34215:16;34244:22;34283:1;34269:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34244:41;;34307:7;34296:5;34302:1;34296:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;34334:5;34327:12;;;34149:198;;;:::o;32576:744::-;32791:15;:2;:13;;;:15::i;:::-;32787:526;;;32844:2;32827:38;;;32866:8;32876:4;32882:2;32886:6;32894:4;32827:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32823:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;33175:6;33168:14;;;;;;;;;;;:::i;:::-;;;;;;;;32823:479;;;33224:62;;;;;;;;;;:::i;:::-;;;;;;;;32823:479;32961:43;;;32949:55;;;:8;:55;;;;32945:154;;33029:50;;;;;;;;;;:::i;:::-;;;;;;;;32945:154;32900:214;32787:526;32576:744;;;;;;:::o;4682:387::-;4742:4;4950:12;5017:7;5005:20;4997:28;;5060:1;5053:4;:8;5046:15;;;4682:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;769:::-;865:5;890:81;906:64;963:6;906:64;:::i;:::-;890:81;:::i;:::-;881:90;;991:5;1020:6;1013:5;1006:21;1054:4;1047:5;1043:16;1036:23;;1080:6;1130:3;1122:4;1114:6;1110:17;1105:3;1101:27;1098:36;1095:143;;;1149:79;;:::i;:::-;1095:143;1262:1;1247:238;1272:6;1269:1;1266:13;1247:238;;;1340:3;1369:37;1402:3;1390:10;1369:37;:::i;:::-;1364:3;1357:50;1436:4;1431:3;1427:14;1420:21;;1470:4;1465:3;1461:14;1454:21;;1307:178;1294:1;1291;1287:9;1282:14;;1247:238;;;1251:14;871:620;;769:722;;;;;:::o;1497:410::-;1574:5;1599:65;1615:48;1656:6;1615:48;:::i;:::-;1599:65;:::i;:::-;1590:74;;1687:6;1680:5;1673:21;1725:4;1718:5;1714:16;1763:3;1754:6;1749:3;1745:16;1742:25;1739:112;;;1770:79;;:::i;:::-;1739:112;1860:41;1894:6;1889:3;1884;1860:41;:::i;:::-;1580:327;1497:410;;;;;:::o;1913:412::-;1991:5;2016:66;2032:49;2074:6;2032:49;:::i;:::-;2016:66;:::i;:::-;2007:75;;2105:6;2098:5;2091:21;2143:4;2136:5;2132:16;2181:3;2172:6;2167:3;2163:16;2160:25;2157:112;;;2188:79;;:::i;:::-;2157:112;2278:41;2312:6;2307:3;2302;2278:41;:::i;:::-;1997:328;1913:412;;;;;:::o;2331:139::-;2377:5;2415:6;2402:20;2393:29;;2431:33;2458:5;2431:33;:::i;:::-;2331:139;;;;:::o;2476:155::-;2530:5;2568:6;2555:20;2546:29;;2584:41;2619:5;2584:41;:::i;:::-;2476:155;;;;:::o;2654:370::-;2725:5;2774:3;2767:4;2759:6;2755:17;2751:27;2741:122;;2782:79;;:::i;:::-;2741:122;2899:6;2886:20;2924:94;3014:3;3006:6;2999:4;2991:6;2987:17;2924:94;:::i;:::-;2915:103;;2731:293;2654:370;;;;:::o;3047:::-;3118:5;3167:3;3160:4;3152:6;3148:17;3144:27;3134:122;;3175:79;;:::i;:::-;3134:122;3292:6;3279:20;3317:94;3407:3;3399:6;3392:4;3384:6;3380:17;3317:94;:::i;:::-;3308:103;;3124:293;3047:370;;;;:::o;3423:133::-;3466:5;3504:6;3491:20;3482:29;;3520:30;3544:5;3520:30;:::i;:::-;3423:133;;;;:::o;3562:137::-;3607:5;3645:6;3632:20;3623:29;;3661:32;3687:5;3661:32;:::i;:::-;3562:137;;;;:::o;3705:141::-;3761:5;3792:6;3786:13;3777:22;;3808:32;3834:5;3808:32;:::i;:::-;3705:141;;;;:::o;3865:338::-;3920:5;3969:3;3962:4;3954:6;3950:17;3946:27;3936:122;;3977:79;;:::i;:::-;3936:122;4094:6;4081:20;4119:78;4193:3;4185:6;4178:4;4170:6;4166:17;4119:78;:::i;:::-;4110:87;;3926:277;3865:338;;;;:::o;4223:340::-;4279:5;4328:3;4321:4;4313:6;4309:17;4305:27;4295:122;;4336:79;;:::i;:::-;4295:122;4453:6;4440:20;4478:79;4553:3;4545:6;4538:4;4530:6;4526:17;4478:79;:::i;:::-;4469:88;;4285:278;4223:340;;;;:::o;4569:139::-;4615:5;4653:6;4640:20;4631:29;;4669:33;4696:5;4669:33;:::i;:::-;4569:139;;;;:::o;4714:329::-;4773:6;4822:2;4810:9;4801:7;4797:23;4793:32;4790:119;;;4828:79;;:::i;:::-;4790:119;4948:1;4973:53;5018:7;5009:6;4998:9;4994:22;4973:53;:::i;:::-;4963:63;;4919:117;4714:329;;;;:::o;5049:345::-;5116:6;5165:2;5153:9;5144:7;5140:23;5136:32;5133:119;;;5171:79;;:::i;:::-;5133:119;5291:1;5316:61;5369:7;5360:6;5349:9;5345:22;5316:61;:::i;:::-;5306:71;;5262:125;5049:345;;;;:::o;5400:474::-;5468:6;5476;5525:2;5513:9;5504:7;5500:23;5496:32;5493:119;;;5531:79;;:::i;:::-;5493:119;5651:1;5676:53;5721:7;5712:6;5701:9;5697:22;5676:53;:::i;:::-;5666:63;;5622:117;5778:2;5804:53;5849:7;5840:6;5829:9;5825:22;5804:53;:::i;:::-;5794:63;;5749:118;5400:474;;;;;:::o;5880:1509::-;6034:6;6042;6050;6058;6066;6115:3;6103:9;6094:7;6090:23;6086:33;6083:120;;;6122:79;;:::i;:::-;6083:120;6242:1;6267:53;6312:7;6303:6;6292:9;6288:22;6267:53;:::i;:::-;6257:63;;6213:117;6369:2;6395:53;6440:7;6431:6;6420:9;6416:22;6395:53;:::i;:::-;6385:63;;6340:118;6525:2;6514:9;6510:18;6497:32;6556:18;6548:6;6545:30;6542:117;;;6578:79;;:::i;:::-;6542:117;6683:78;6753:7;6744:6;6733:9;6729:22;6683:78;:::i;:::-;6673:88;;6468:303;6838:2;6827:9;6823:18;6810:32;6869:18;6861:6;6858:30;6855:117;;;6891:79;;:::i;:::-;6855:117;6996:78;7066:7;7057:6;7046:9;7042:22;6996:78;:::i;:::-;6986:88;;6781:303;7151:3;7140:9;7136:19;7123:33;7183:18;7175:6;7172:30;7169:117;;;7205:79;;:::i;:::-;7169:117;7310:62;7364:7;7355:6;7344:9;7340:22;7310:62;:::i;:::-;7300:72;;7094:288;5880:1509;;;;;;;;:::o;7395:1089::-;7499:6;7507;7515;7523;7531;7580:3;7568:9;7559:7;7555:23;7551:33;7548:120;;;7587:79;;:::i;:::-;7548:120;7707:1;7732:53;7777:7;7768:6;7757:9;7753:22;7732:53;:::i;:::-;7722:63;;7678:117;7834:2;7860:53;7905:7;7896:6;7885:9;7881:22;7860:53;:::i;:::-;7850:63;;7805:118;7962:2;7988:53;8033:7;8024:6;8013:9;8009:22;7988:53;:::i;:::-;7978:63;;7933:118;8090:2;8116:53;8161:7;8152:6;8141:9;8137:22;8116:53;:::i;:::-;8106:63;;8061:118;8246:3;8235:9;8231:19;8218:33;8278:18;8270:6;8267:30;8264:117;;;8300:79;;:::i;:::-;8264:117;8405:62;8459:7;8450:6;8439:9;8435:22;8405:62;:::i;:::-;8395:72;;8189:288;7395:1089;;;;;;;;:::o;8490:468::-;8555:6;8563;8612:2;8600:9;8591:7;8587:23;8583:32;8580:119;;;8618:79;;:::i;:::-;8580:119;8738:1;8763:53;8808:7;8799:6;8788:9;8784:22;8763:53;:::i;:::-;8753:63;;8709:117;8865:2;8891:50;8933:7;8924:6;8913:9;8909:22;8891:50;:::i;:::-;8881:60;;8836:115;8490:468;;;;;:::o;8964:474::-;9032:6;9040;9089:2;9077:9;9068:7;9064:23;9060:32;9057:119;;;9095:79;;:::i;:::-;9057:119;9215:1;9240:53;9285:7;9276:6;9265:9;9261:22;9240:53;:::i;:::-;9230:63;;9186:117;9342:2;9368:53;9413:7;9404:6;9393:9;9389:22;9368:53;:::i;:::-;9358:63;;9313:118;8964:474;;;;;:::o;9444:894::-;9562:6;9570;9619:2;9607:9;9598:7;9594:23;9590:32;9587:119;;;9625:79;;:::i;:::-;9587:119;9773:1;9762:9;9758:17;9745:31;9803:18;9795:6;9792:30;9789:117;;;9825:79;;:::i;:::-;9789:117;9930:78;10000:7;9991:6;9980:9;9976:22;9930:78;:::i;:::-;9920:88;;9716:302;10085:2;10074:9;10070:18;10057:32;10116:18;10108:6;10105:30;10102:117;;;10138:79;;:::i;:::-;10102:117;10243:78;10313:7;10304:6;10293:9;10289:22;10243:78;:::i;:::-;10233:88;;10028:303;9444:894;;;;;:::o;10344:323::-;10400:6;10449:2;10437:9;10428:7;10424:23;10420:32;10417:119;;;10455:79;;:::i;:::-;10417:119;10575:1;10600:50;10642:7;10633:6;10622:9;10618:22;10600:50;:::i;:::-;10590:60;;10546:114;10344:323;;;;:::o;10673:327::-;10731:6;10780:2;10768:9;10759:7;10755:23;10751:32;10748:119;;;10786:79;;:::i;:::-;10748:119;10906:1;10931:52;10975:7;10966:6;10955:9;10951:22;10931:52;:::i;:::-;10921:62;;10877:116;10673:327;;;;:::o;11006:349::-;11075:6;11124:2;11112:9;11103:7;11099:23;11095:32;11092:119;;;11130:79;;:::i;:::-;11092:119;11250:1;11275:63;11330:7;11321:6;11310:9;11306:22;11275:63;:::i;:::-;11265:73;;11221:127;11006:349;;;;:::o;11361:507::-;11429:6;11478:2;11466:9;11457:7;11453:23;11449:32;11446:119;;;11484:79;;:::i;:::-;11446:119;11632:1;11621:9;11617:17;11604:31;11662:18;11654:6;11651:30;11648:117;;;11684:79;;:::i;:::-;11648:117;11789:62;11843:7;11834:6;11823:9;11819:22;11789:62;:::i;:::-;11779:72;;11575:286;11361:507;;;;:::o;11874:509::-;11943:6;11992:2;11980:9;11971:7;11967:23;11963:32;11960:119;;;11998:79;;:::i;:::-;11960:119;12146:1;12135:9;12131:17;12118:31;12176:18;12168:6;12165:30;12162:117;;;12198:79;;:::i;:::-;12162:117;12303:63;12358:7;12349:6;12338:9;12334:22;12303:63;:::i;:::-;12293:73;;12089:287;11874:509;;;;:::o;12389:329::-;12448:6;12497:2;12485:9;12476:7;12472:23;12468:32;12465:119;;;12503:79;;:::i;:::-;12465:119;12623:1;12648:53;12693:7;12684:6;12673:9;12669:22;12648:53;:::i;:::-;12638:63;;12594:117;12389:329;;;;:::o;12724:179::-;12793:10;12814:46;12856:3;12848:6;12814:46;:::i;:::-;12892:4;12887:3;12883:14;12869:28;;12724:179;;;;:::o;12909:118::-;12996:24;13014:5;12996:24;:::i;:::-;12991:3;12984:37;12909:118;;:::o;13063:732::-;13182:3;13211:54;13259:5;13211:54;:::i;:::-;13281:86;13360:6;13355:3;13281:86;:::i;:::-;13274:93;;13391:56;13441:5;13391:56;:::i;:::-;13470:7;13501:1;13486:284;13511:6;13508:1;13505:13;13486:284;;;13587:6;13581:13;13614:63;13673:3;13658:13;13614:63;:::i;:::-;13607:70;;13700:60;13753:6;13700:60;:::i;:::-;13690:70;;13546:224;13533:1;13530;13526:9;13521:14;;13486:284;;;13490:14;13786:3;13779:10;;13187:608;;;13063:732;;;;:::o;13801:109::-;13882:21;13897:5;13882:21;:::i;:::-;13877:3;13870:34;13801:109;;:::o;13916:360::-;14002:3;14030:38;14062:5;14030:38;:::i;:::-;14084:70;14147:6;14142:3;14084:70;:::i;:::-;14077:77;;14163:52;14208:6;14203:3;14196:4;14189:5;14185:16;14163:52;:::i;:::-;14240:29;14262:6;14240:29;:::i;:::-;14235:3;14231:39;14224:46;;14006:270;13916:360;;;;:::o;14282:364::-;14370:3;14398:39;14431:5;14398:39;:::i;:::-;14453:71;14517:6;14512:3;14453:71;:::i;:::-;14446:78;;14533:52;14578:6;14573:3;14566:4;14559:5;14555:16;14533:52;:::i;:::-;14610:29;14632:6;14610:29;:::i;:::-;14605:3;14601:39;14594:46;;14374:272;14282:364;;;;:::o;14652:377::-;14758:3;14786:39;14819:5;14786:39;:::i;:::-;14841:89;14923:6;14918:3;14841:89;:::i;:::-;14834:96;;14939:52;14984:6;14979:3;14972:4;14965:5;14961:16;14939:52;:::i;:::-;15016:6;15011:3;15007:16;15000:23;;14762:267;14652:377;;;;:::o;15035:366::-;15177:3;15198:67;15262:2;15257:3;15198:67;:::i;:::-;15191:74;;15274:93;15363:3;15274:93;:::i;:::-;15392:2;15387:3;15383:12;15376:19;;15035:366;;;:::o;15407:::-;15549:3;15570:67;15634:2;15629:3;15570:67;:::i;:::-;15563:74;;15646:93;15735:3;15646:93;:::i;:::-;15764:2;15759:3;15755:12;15748:19;;15407:366;;;:::o;15779:::-;15921:3;15942:67;16006:2;16001:3;15942:67;:::i;:::-;15935:74;;16018:93;16107:3;16018:93;:::i;:::-;16136:2;16131:3;16127:12;16120:19;;15779:366;;;:::o;16151:::-;16293:3;16314:67;16378:2;16373:3;16314:67;:::i;:::-;16307:74;;16390:93;16479:3;16390:93;:::i;:::-;16508:2;16503:3;16499:12;16492:19;;16151:366;;;:::o;16523:::-;16665:3;16686:67;16750:2;16745:3;16686:67;:::i;:::-;16679:74;;16762:93;16851:3;16762:93;:::i;:::-;16880:2;16875:3;16871:12;16864:19;;16523:366;;;:::o;16895:::-;17037:3;17058:67;17122:2;17117:3;17058:67;:::i;:::-;17051:74;;17134:93;17223:3;17134:93;:::i;:::-;17252:2;17247:3;17243:12;17236:19;;16895:366;;;:::o;17267:::-;17409:3;17430:67;17494:2;17489:3;17430:67;:::i;:::-;17423:74;;17506:93;17595:3;17506:93;:::i;:::-;17624:2;17619:3;17615:12;17608:19;;17267:366;;;:::o;17639:::-;17781:3;17802:67;17866:2;17861:3;17802:67;:::i;:::-;17795:74;;17878:93;17967:3;17878:93;:::i;:::-;17996:2;17991:3;17987:12;17980:19;;17639:366;;;:::o;18011:402::-;18171:3;18192:85;18274:2;18269:3;18192:85;:::i;:::-;18185:92;;18286:93;18375:3;18286:93;:::i;:::-;18404:2;18399:3;18395:12;18388:19;;18011:402;;;:::o;18419:366::-;18561:3;18582:67;18646:2;18641:3;18582:67;:::i;:::-;18575:74;;18658:93;18747:3;18658:93;:::i;:::-;18776:2;18771:3;18767:12;18760:19;;18419:366;;;:::o;18791:::-;18933:3;18954:67;19018:2;19013:3;18954:67;:::i;:::-;18947:74;;19030:93;19119:3;19030:93;:::i;:::-;19148:2;19143:3;19139:12;19132:19;;18791:366;;;:::o;19163:::-;19305:3;19326:67;19390:2;19385:3;19326:67;:::i;:::-;19319:74;;19402:93;19491:3;19402:93;:::i;:::-;19520:2;19515:3;19511:12;19504:19;;19163:366;;;:::o;19535:::-;19677:3;19698:67;19762:2;19757:3;19698:67;:::i;:::-;19691:74;;19774:93;19863:3;19774:93;:::i;:::-;19892:2;19887:3;19883:12;19876:19;;19535:366;;;:::o;19907:::-;20049:3;20070:67;20134:2;20129:3;20070:67;:::i;:::-;20063:74;;20146:93;20235:3;20146:93;:::i;:::-;20264:2;20259:3;20255:12;20248:19;;19907:366;;;:::o;20279:400::-;20439:3;20460:84;20542:1;20537:3;20460:84;:::i;:::-;20453:91;;20553:93;20642:3;20553:93;:::i;:::-;20671:1;20666:3;20662:11;20655:18;;20279:400;;;:::o;20685:366::-;20827:3;20848:67;20912:2;20907:3;20848:67;:::i;:::-;20841:74;;20924:93;21013:3;20924:93;:::i;:::-;21042:2;21037:3;21033:12;21026:19;;20685:366;;;:::o;21057:::-;21199:3;21220:67;21284:2;21279:3;21220:67;:::i;:::-;21213:74;;21296:93;21385:3;21296:93;:::i;:::-;21414:2;21409:3;21405:12;21398:19;;21057:366;;;:::o;21429:::-;21571:3;21592:67;21656:2;21651:3;21592:67;:::i;:::-;21585:74;;21668:93;21757:3;21668:93;:::i;:::-;21786:2;21781:3;21777:12;21770:19;;21429:366;;;:::o;21801:::-;21943:3;21964:67;22028:2;22023:3;21964:67;:::i;:::-;21957:74;;22040:93;22129:3;22040:93;:::i;:::-;22158:2;22153:3;22149:12;22142:19;;21801:366;;;:::o;22173:::-;22315:3;22336:67;22400:2;22395:3;22336:67;:::i;:::-;22329:74;;22412:93;22501:3;22412:93;:::i;:::-;22530:2;22525:3;22521:12;22514:19;;22173:366;;;:::o;22545:::-;22687:3;22708:67;22772:2;22767:3;22708:67;:::i;:::-;22701:74;;22784:93;22873:3;22784:93;:::i;:::-;22902:2;22897:3;22893:12;22886:19;;22545:366;;;:::o;22917:::-;23059:3;23080:67;23144:2;23139:3;23080:67;:::i;:::-;23073:74;;23156:93;23245:3;23156:93;:::i;:::-;23274:2;23269:3;23265:12;23258:19;;22917:366;;;:::o;23289:::-;23431:3;23452:67;23516:2;23511:3;23452:67;:::i;:::-;23445:74;;23528:93;23617:3;23528:93;:::i;:::-;23646:2;23641:3;23637:12;23630:19;;23289:366;;;:::o;23661:::-;23803:3;23824:67;23888:2;23883:3;23824:67;:::i;:::-;23817:74;;23900:93;23989:3;23900:93;:::i;:::-;24018:2;24013:3;24009:12;24002:19;;23661:366;;;:::o;24033:108::-;24110:24;24128:5;24110:24;:::i;:::-;24105:3;24098:37;24033:108;;:::o;24147:118::-;24234:24;24252:5;24234:24;:::i;:::-;24229:3;24222:37;24147:118;;:::o;24271:807::-;24605:3;24627:148;24771:3;24627:148;:::i;:::-;24620:155;;24792:95;24883:3;24874:6;24792:95;:::i;:::-;24785:102;;24904:148;25048:3;24904:148;:::i;:::-;24897:155;;25069:3;25062:10;;24271:807;;;;:::o;25084:222::-;25177:4;25215:2;25204:9;25200:18;25192:26;;25228:71;25296:1;25285:9;25281:17;25272:6;25228:71;:::i;:::-;25084:222;;;;:::o;25312:1053::-;25635:4;25673:3;25662:9;25658:19;25650:27;;25687:71;25755:1;25744:9;25740:17;25731:6;25687:71;:::i;:::-;25768:72;25836:2;25825:9;25821:18;25812:6;25768:72;:::i;:::-;25887:9;25881:4;25877:20;25872:2;25861:9;25857:18;25850:48;25915:108;26018:4;26009:6;25915:108;:::i;:::-;25907:116;;26070:9;26064:4;26060:20;26055:2;26044:9;26040:18;26033:48;26098:108;26201:4;26192:6;26098:108;:::i;:::-;26090:116;;26254:9;26248:4;26244:20;26238:3;26227:9;26223:19;26216:49;26282:76;26353:4;26344:6;26282:76;:::i;:::-;26274:84;;25312:1053;;;;;;;;:::o;26371:751::-;26594:4;26632:3;26621:9;26617:19;26609:27;;26646:71;26714:1;26703:9;26699:17;26690:6;26646:71;:::i;:::-;26727:72;26795:2;26784:9;26780:18;26771:6;26727:72;:::i;:::-;26809;26877:2;26866:9;26862:18;26853:6;26809:72;:::i;:::-;26891;26959:2;26948:9;26944:18;26935:6;26891:72;:::i;:::-;27011:9;27005:4;27001:20;26995:3;26984:9;26980:19;26973:49;27039:76;27110:4;27101:6;27039:76;:::i;:::-;27031:84;;26371:751;;;;;;;;:::o;27128:373::-;27271:4;27309:2;27298:9;27294:18;27286:26;;27358:9;27352:4;27348:20;27344:1;27333:9;27329:17;27322:47;27386:108;27489:4;27480:6;27386:108;:::i;:::-;27378:116;;27128:373;;;;:::o;27507:634::-;27728:4;27766:2;27755:9;27751:18;27743:26;;27815:9;27809:4;27805:20;27801:1;27790:9;27786:17;27779:47;27843:108;27946:4;27937:6;27843:108;:::i;:::-;27835:116;;27998:9;27992:4;27988:20;27983:2;27972:9;27968:18;27961:48;28026:108;28129:4;28120:6;28026:108;:::i;:::-;28018:116;;27507:634;;;;;:::o;28147:210::-;28234:4;28272:2;28261:9;28257:18;28249:26;;28285:65;28347:1;28336:9;28332:17;28323:6;28285:65;:::i;:::-;28147:210;;;;:::o;28363:313::-;28476:4;28514:2;28503:9;28499:18;28491:26;;28563:9;28557:4;28553:20;28549:1;28538:9;28534:17;28527:47;28591:78;28664:4;28655:6;28591:78;:::i;:::-;28583:86;;28363:313;;;;:::o;28682:419::-;28848:4;28886:2;28875:9;28871:18;28863:26;;28935:9;28929:4;28925:20;28921:1;28910:9;28906:17;28899:47;28963:131;29089:4;28963:131;:::i;:::-;28955:139;;28682:419;;;:::o;29107:::-;29273:4;29311:2;29300:9;29296:18;29288:26;;29360:9;29354:4;29350:20;29346:1;29335:9;29331:17;29324:47;29388:131;29514:4;29388:131;:::i;:::-;29380:139;;29107:419;;;:::o;29532:::-;29698:4;29736:2;29725:9;29721:18;29713:26;;29785:9;29779:4;29775:20;29771:1;29760:9;29756:17;29749:47;29813:131;29939:4;29813:131;:::i;:::-;29805:139;;29532:419;;;:::o;29957:::-;30123:4;30161:2;30150:9;30146:18;30138:26;;30210:9;30204:4;30200:20;30196:1;30185:9;30181:17;30174:47;30238:131;30364:4;30238:131;:::i;:::-;30230:139;;29957:419;;;:::o;30382:::-;30548:4;30586:2;30575:9;30571:18;30563:26;;30635:9;30629:4;30625:20;30621:1;30610:9;30606:17;30599:47;30663:131;30789:4;30663:131;:::i;:::-;30655:139;;30382:419;;;:::o;30807:::-;30973:4;31011:2;31000:9;30996:18;30988:26;;31060:9;31054:4;31050:20;31046:1;31035:9;31031:17;31024:47;31088:131;31214:4;31088:131;:::i;:::-;31080:139;;30807:419;;;:::o;31232:::-;31398:4;31436:2;31425:9;31421:18;31413:26;;31485:9;31479:4;31475:20;31471:1;31460:9;31456:17;31449:47;31513:131;31639:4;31513:131;:::i;:::-;31505:139;;31232:419;;;:::o;31657:::-;31823:4;31861:2;31850:9;31846:18;31838:26;;31910:9;31904:4;31900:20;31896:1;31885:9;31881:17;31874:47;31938:131;32064:4;31938:131;:::i;:::-;31930:139;;31657:419;;;:::o;32082:::-;32248:4;32286:2;32275:9;32271:18;32263:26;;32335:9;32329:4;32325:20;32321:1;32310:9;32306:17;32299:47;32363:131;32489:4;32363:131;:::i;:::-;32355:139;;32082:419;;;:::o;32507:::-;32673:4;32711:2;32700:9;32696:18;32688:26;;32760:9;32754:4;32750:20;32746:1;32735:9;32731:17;32724:47;32788:131;32914:4;32788:131;:::i;:::-;32780:139;;32507:419;;;:::o;32932:::-;33098:4;33136:2;33125:9;33121:18;33113:26;;33185:9;33179:4;33175:20;33171:1;33160:9;33156:17;33149:47;33213:131;33339:4;33213:131;:::i;:::-;33205:139;;32932:419;;;:::o;33357:::-;33523:4;33561:2;33550:9;33546:18;33538:26;;33610:9;33604:4;33600:20;33596:1;33585:9;33581:17;33574:47;33638:131;33764:4;33638:131;:::i;:::-;33630:139;;33357:419;;;:::o;33782:::-;33948:4;33986:2;33975:9;33971:18;33963:26;;34035:9;34029:4;34025:20;34021:1;34010:9;34006:17;33999:47;34063:131;34189:4;34063:131;:::i;:::-;34055:139;;33782:419;;;:::o;34207:::-;34373:4;34411:2;34400:9;34396:18;34388:26;;34460:9;34454:4;34450:20;34446:1;34435:9;34431:17;34424:47;34488:131;34614:4;34488:131;:::i;:::-;34480:139;;34207:419;;;:::o;34632:::-;34798:4;34836:2;34825:9;34821:18;34813:26;;34885:9;34879:4;34875:20;34871:1;34860:9;34856:17;34849:47;34913:131;35039:4;34913:131;:::i;:::-;34905:139;;34632:419;;;:::o;35057:::-;35223:4;35261:2;35250:9;35246:18;35238:26;;35310:9;35304:4;35300:20;35296:1;35285:9;35281:17;35274:47;35338:131;35464:4;35338:131;:::i;:::-;35330:139;;35057:419;;;:::o;35482:::-;35648:4;35686:2;35675:9;35671:18;35663:26;;35735:9;35729:4;35725:20;35721:1;35710:9;35706:17;35699:47;35763:131;35889:4;35763:131;:::i;:::-;35755:139;;35482:419;;;:::o;35907:::-;36073:4;36111:2;36100:9;36096:18;36088:26;;36160:9;36154:4;36150:20;36146:1;36135:9;36131:17;36124:47;36188:131;36314:4;36188:131;:::i;:::-;36180:139;;35907:419;;;:::o;36332:::-;36498:4;36536:2;36525:9;36521:18;36513:26;;36585:9;36579:4;36575:20;36571:1;36560:9;36556:17;36549:47;36613:131;36739:4;36613:131;:::i;:::-;36605:139;;36332:419;;;:::o;36757:::-;36923:4;36961:2;36950:9;36946:18;36938:26;;37010:9;37004:4;37000:20;36996:1;36985:9;36981:17;36974:47;37038:131;37164:4;37038:131;:::i;:::-;37030:139;;36757:419;;;:::o;37182:::-;37348:4;37386:2;37375:9;37371:18;37363:26;;37435:9;37429:4;37425:20;37421:1;37410:9;37406:17;37399:47;37463:131;37589:4;37463:131;:::i;:::-;37455:139;;37182:419;;;:::o;37607:::-;37773:4;37811:2;37800:9;37796:18;37788:26;;37860:9;37854:4;37850:20;37846:1;37835:9;37831:17;37824:47;37888:131;38014:4;37888:131;:::i;:::-;37880:139;;37607:419;;;:::o;38032:222::-;38125:4;38163:2;38152:9;38148:18;38140:26;;38176:71;38244:1;38233:9;38229:17;38220:6;38176:71;:::i;:::-;38032:222;;;;:::o;38260:332::-;38381:4;38419:2;38408:9;38404:18;38396:26;;38432:71;38500:1;38489:9;38485:17;38476:6;38432:71;:::i;:::-;38513:72;38581:2;38570:9;38566:18;38557:6;38513:72;:::i;:::-;38260:332;;;;;:::o;38598:129::-;38632:6;38659:20;;:::i;:::-;38649:30;;38688:33;38716:4;38708:6;38688:33;:::i;:::-;38598:129;;;:::o;38733:75::-;38766:6;38799:2;38793:9;38783:19;;38733:75;:::o;38814:311::-;38891:4;38981:18;38973:6;38970:30;38967:56;;;39003:18;;:::i;:::-;38967:56;39053:4;39045:6;39041:17;39033:25;;39113:4;39107;39103:15;39095:23;;38814:311;;;:::o;39131:::-;39208:4;39298:18;39290:6;39287:30;39284:56;;;39320:18;;:::i;:::-;39284:56;39370:4;39362:6;39358:17;39350:25;;39430:4;39424;39420:15;39412:23;;39131:311;;;:::o;39448:307::-;39509:4;39599:18;39591:6;39588:30;39585:56;;;39621:18;;:::i;:::-;39585:56;39659:29;39681:6;39659:29;:::i;:::-;39651:37;;39743:4;39737;39733:15;39725:23;;39448:307;;;:::o;39761:308::-;39823:4;39913:18;39905:6;39902:30;39899:56;;;39935:18;;:::i;:::-;39899:56;39973:29;39995:6;39973:29;:::i;:::-;39965:37;;40057:4;40051;40047:15;40039:23;;39761:308;;;:::o;40075:132::-;40142:4;40165:3;40157:11;;40195:4;40190:3;40186:14;40178:22;;40075:132;;;:::o;40213:114::-;40280:6;40314:5;40308:12;40298:22;;40213:114;;;:::o;40333:98::-;40384:6;40418:5;40412:12;40402:22;;40333:98;;;:::o;40437:99::-;40489:6;40523:5;40517:12;40507:22;;40437:99;;;:::o;40542:113::-;40612:4;40644;40639:3;40635:14;40627:22;;40542:113;;;:::o;40661:184::-;40760:11;40794:6;40789:3;40782:19;40834:4;40829:3;40825:14;40810:29;;40661:184;;;;:::o;40851:168::-;40934:11;40968:6;40963:3;40956:19;41008:4;41003:3;40999:14;40984:29;;40851:168;;;;:::o;41025:169::-;41109:11;41143:6;41138:3;41131:19;41183:4;41178:3;41174:14;41159:29;;41025:169;;;;:::o;41200:148::-;41302:11;41339:3;41324:18;;41200:148;;;;:::o;41354:305::-;41394:3;41413:20;41431:1;41413:20;:::i;:::-;41408:25;;41447:20;41465:1;41447:20;:::i;:::-;41442:25;;41601:1;41533:66;41529:74;41526:1;41523:81;41520:107;;;41607:18;;:::i;:::-;41520:107;41651:1;41648;41644:9;41637:16;;41354:305;;;;:::o;41665:185::-;41705:1;41722:20;41740:1;41722:20;:::i;:::-;41717:25;;41756:20;41774:1;41756:20;:::i;:::-;41751:25;;41795:1;41785:35;;41800:18;;:::i;:::-;41785:35;41842:1;41839;41835:9;41830:14;;41665:185;;;;:::o;41856:191::-;41896:4;41916:20;41934:1;41916:20;:::i;:::-;41911:25;;41950:20;41968:1;41950:20;:::i;:::-;41945:25;;41989:1;41986;41983:8;41980:34;;;41994:18;;:::i;:::-;41980:34;42039:1;42036;42032:9;42024:17;;41856:191;;;;:::o;42053:96::-;42090:7;42119:24;42137:5;42119:24;:::i;:::-;42108:35;;42053:96;;;:::o;42155:104::-;42200:7;42229:24;42247:5;42229:24;:::i;:::-;42218:35;;42155:104;;;:::o;42265:90::-;42299:7;42342:5;42335:13;42328:21;42317:32;;42265:90;;;:::o;42361:149::-;42397:7;42437:66;42430:5;42426:78;42415:89;;42361:149;;;:::o;42516:126::-;42553:7;42593:42;42586:5;42582:54;42571:65;;42516:126;;;:::o;42648:77::-;42685:7;42714:5;42703:16;;42648:77;;;:::o;42731:154::-;42815:6;42810:3;42805;42792:30;42877:1;42868:6;42863:3;42859:16;42852:27;42731:154;;;:::o;42891:307::-;42959:1;42969:113;42983:6;42980:1;42977:13;42969:113;;;43068:1;43063:3;43059:11;43053:18;43049:1;43044:3;43040:11;43033:39;43005:2;43002:1;42998:10;42993:15;;42969:113;;;43100:6;43097:1;43094:13;43091:101;;;43180:1;43171:6;43166:3;43162:16;43155:27;43091:101;42940:258;42891:307;;;:::o;43204:320::-;43248:6;43285:1;43279:4;43275:12;43265:22;;43332:1;43326:4;43322:12;43353:18;43343:81;;43409:4;43401:6;43397:17;43387:27;;43343:81;43471:2;43463:6;43460:14;43440:18;43437:38;43434:84;;;43490:18;;:::i;:::-;43434:84;43255:269;43204:320;;;:::o;43530:281::-;43613:27;43635:4;43613:27;:::i;:::-;43605:6;43601:40;43743:6;43731:10;43728:22;43707:18;43695:10;43692:34;43689:62;43686:88;;;43754:18;;:::i;:::-;43686:88;43794:10;43790:2;43783:22;43573:238;43530:281;;:::o;43817:233::-;43856:3;43879:24;43897:5;43879:24;:::i;:::-;43870:33;;43925:66;43918:5;43915:77;43912:103;;;43995:18;;:::i;:::-;43912:103;44042:1;44035:5;44031:13;44024:20;;43817:233;;;:::o;44056:176::-;44088:1;44105:20;44123:1;44105:20;:::i;:::-;44100:25;;44139:20;44157:1;44139:20;:::i;:::-;44134:25;;44178:1;44168:35;;44183:18;;:::i;:::-;44168:35;44224:1;44221;44217:9;44212:14;;44056:176;;;;:::o;44238:180::-;44286:77;44283:1;44276:88;44383:4;44380:1;44373:15;44407:4;44404:1;44397:15;44424:180;44472:77;44469:1;44462:88;44569:4;44566:1;44559:15;44593:4;44590:1;44583:15;44610:180;44658:77;44655:1;44648:88;44755:4;44752:1;44745:15;44779:4;44776:1;44769:15;44796:180;44844:77;44841:1;44834:88;44941:4;44938:1;44931:15;44965:4;44962:1;44955:15;44982:180;45030:77;45027:1;45020:88;45127:4;45124:1;45117:15;45151:4;45148:1;45141:15;45168:183;45203:3;45241:1;45223:16;45220:23;45217:128;;;45279:1;45276;45273;45258:23;45301:34;45332:1;45326:8;45301:34;:::i;:::-;45294:41;;45217:128;45168:183;:::o;45357:117::-;45466:1;45463;45456:12;45480:117;45589:1;45586;45579:12;45603:117;45712:1;45709;45702:12;45726:117;45835:1;45832;45825:12;45849:117;45958:1;45955;45948:12;45972:102;46013:6;46064:2;46060:7;46055:2;46048:5;46044:14;46040:28;46030:38;;45972:102;;;:::o;46080:106::-;46124:8;46173:5;46168:3;46164:15;46143:36;;46080:106;;;:::o;46192:239::-;46332:34;46328:1;46320:6;46316:14;46309:58;46401:22;46396:2;46388:6;46384:15;46377:47;46192:239;:::o;46437:227::-;46577:34;46573:1;46565:6;46561:14;46554:58;46646:10;46641:2;46633:6;46629:15;46622:35;46437:227;:::o;46670:169::-;46810:21;46806:1;46798:6;46794:14;46787:45;46670:169;:::o;46845:230::-;46985:34;46981:1;46973:6;46969:14;46962:58;47054:13;47049:2;47041:6;47037:15;47030:38;46845:230;:::o;47081:225::-;47221:34;47217:1;47209:6;47205:14;47198:58;47290:8;47285:2;47277:6;47273:15;47266:33;47081:225;:::o;47312:223::-;47452:34;47448:1;47440:6;47436:14;47429:58;47521:6;47516:2;47508:6;47504:15;47497:31;47312:223;:::o;47541:228::-;47681:34;47677:1;47669:6;47665:14;47658:58;47750:11;47745:2;47737:6;47733:15;47726:36;47541:228;:::o;47775:165::-;47915:17;47911:1;47903:6;47899:14;47892:41;47775:165;:::o;47946:319::-;48086:34;48082:1;48074:6;48070:14;48063:58;48159:34;48154:2;48146:6;48142:15;48135:59;48232:21;48227:2;48219:6;48215:15;48208:46;47946:319;:::o;48275:236::-;48419:34;48415:1;48407:6;48403:14;48396:58;48492:7;48487:2;48479:6;48475:15;48468:32;48275:236;:::o;48521:249::-;48665:34;48661:1;48653:6;48649:14;48642:58;48738:20;48733:2;48725:6;48721:15;48714:45;48521:249;:::o;48780:174::-;48924:18;48920:1;48912:6;48908:14;48901:42;48780:174;:::o;48964:234::-;49108:34;49104:1;49096:6;49092:14;49085:58;49181:5;49176:2;49168:6;49164:15;49157:30;48964:234;:::o;49208:241::-;49352:34;49348:1;49340:6;49336:14;49329:58;49425:12;49420:2;49412:6;49408:15;49401:37;49208:241;:::o;49459:163::-;49603:7;49599:1;49591:6;49587:14;49580:31;49459:163;:::o;49632:190::-;49776:34;49772:1;49764:6;49760:14;49753:58;49632:190;:::o;49832:177::-;49976:21;49972:1;49964:6;49960:14;49953:45;49832:177;:::o;50019:::-;50163:21;50159:1;50151:6;50147:14;50140:45;50019:177;:::o;50206:170::-;50350:14;50346:1;50338:6;50334:14;50327:38;50206:170;:::o;50386:240::-;50530:34;50526:1;50518:6;50514:14;50507:58;50603:11;50598:2;50590:6;50586:15;50579:36;50386:240;:::o;50636:::-;50780:34;50776:1;50768:6;50764:14;50757:58;50853:11;50848:2;50840:6;50836:15;50829:36;50636:240;:::o;50886:176::-;51030:20;51026:1;51018:6;51014:14;51007:44;50886:176;:::o;51072:239::-;51216:34;51212:1;51204:6;51200:14;51193:58;51289:10;51284:2;51276:6;51272:15;51265:35;51072:239;:::o;51321:232::-;51465:34;51461:1;51453:6;51449:14;51442:58;51538:3;51533:2;51525:6;51521:15;51514:28;51321:232;:::o;51563:783::-;51602:3;51644:4;51626:16;51623:26;51620:39;;;51652:5;;51620:39;51685:20;;:::i;:::-;51764:1;51746:16;51742:24;51739:1;51733:4;51718:49;51801:4;51795:11;51912:16;51905:4;51897:6;51893:17;51890:39;51853:18;51845:6;51842:30;51822:125;51819:166;;;51966:5;;;;51819:166;52020:6;52014:4;52010:17;52060:3;52054:10;52091:18;52083:6;52080:30;52077:43;;;52113:5;;;;;;52077:43;52165:6;52158:4;52153:3;52149:14;52145:27;52228:1;52210:16;52206:24;52200:4;52196:35;52191:3;52188:44;52185:57;;;52235:5;;;;;;;52185:57;52256;52304:6;52298:4;52294:17;52286:6;52282:30;52276:4;52256:57;:::i;:::-;52333:3;52326:10;;51606:740;;;;;51563:783;;:::o;52356:130::-;52433:24;52451:5;52433:24;:::i;:::-;52426:5;52423:35;52413:63;;52472:1;52469;52462:12;52413:63;52356:130;:::o;52496:146::-;52581:32;52607:5;52581:32;:::i;:::-;52574:5;52571:43;52561:71;;52628:1;52625;52618:12;52561:71;52496:146;:::o;52652:124::-;52726:21;52741:5;52726:21;:::i;:::-;52719:5;52716:32;52706:60;;52762:1;52759;52752:12;52706:60;52652:124;:::o;52786:128::-;52862:23;52879:5;52862:23;:::i;:::-;52855:5;52852:34;52842:62;;52900:1;52897;52890:12;52842:62;52786:128;:::o;52924:130::-;53001:24;53019:5;53001:24;:::i;:::-;52994:5;52991:35;52981:63;;53040:1;53037;53030:12;52981:63;52924:130;:::o
Swarm Source
ipfs://1c0998cf0007950ce2d7e767325f499b4aebdbf53621a6e84728af7ebffa9d3d
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.