Polygon Sponsored slots available. Book your slot here!
Contract Overview
Balance:
0 MATIC
MATIC Value:
$0.00
Txn Hash |
Method
|
Block
|
From
|
To
|
Value | [Txn Fee] | |||
---|---|---|---|---|---|---|---|---|---|
0x5071d2d28b8f0a5150b4446a0c9bb72827b1f3daabe83c718b78f1d72cfc6824 | 0x60806040 | 16762440 | 625 days 11 hrs ago | 0x6667c4d0e699cc2defd32651ab0c2177e81547b0 | IN | Contract Creation | 0 MATIC | 0.006818625 |
[ Download CSV Export ]
Similar Match Source Code
Note: This contract matches the deployed ByteCode of the Source Code for Contract 0x77BD275fF2B3Dc007475aAC9Ce7F408F5A800188
Contract Name:
MCHExtension
Compiler Version
v0.8.3+commit.8d00100c
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2021-07-12 */ // Sources flattened with hardhat v2.1.2 https://hardhat.org // File @openzeppelin/contracts/utils/introspection/[email protected] // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File @openzeppelin/contracts/token/ERC721/[email protected] pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 tokenId) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external; } // File @openzeppelin/contracts/token/ERC721/[email protected] pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4); } // File @openzeppelin/contracts/token/ERC721/extensions/[email protected] pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File @openzeppelin/contracts/utils/[email protected] pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly 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"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (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"); // solhint-disable-next-line avoid-low-level-calls (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"); // solhint-disable-next-line avoid-low-level-calls (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"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File @openzeppelin/contracts/utils/[email protected] pragma solidity ^0.8.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // File @openzeppelin/contracts/utils/[email protected] pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant alphabet = "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] = alphabet[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File @openzeppelin/contracts/utils/introspection/[email protected] pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File @openzeppelin/contracts/token/ERC721/[email protected] pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping (uint256 => address) private _owners; // Mapping owner address to token count mapping (address => uint256) private _balances; // Mapping from token ID to approved address mapping (uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping (address => mapping (address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor (string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ''; } /** * @dev Base URI for computing {tokenURI}. Empty by default, can be overriden * in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require(_msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom(address from, address to, uint256 tokenId) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom(address from, address to, uint256 tokenId) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer(address from, address to, uint256 tokenId, bytes memory _data) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint(address to, uint256 tokenId, bytes memory _data) internal virtual { _mint(to, tokenId); require(_checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer(address from, address to, uint256 tokenId) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { // solhint-disable-next-line no-inline-assembly assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual { } } // File @openzeppelin/contracts/access/[email protected] pragma solidity ^0.8.0; /** * @dev External interface of AccessControl declared to support ERC165 detection. */ interface IAccessControl { function hasRole(bytes32 role, address account) external view returns (bool); function getRoleAdmin(bytes32 role) external view returns (bytes32); function grantRole(bytes32 role, address account) external; function revokeRole(bytes32 role, address account) external; function renounceRole(bytes32 role, address account) external; } /** * @dev Contract module that allows children to implement role-based access * control mechanisms. This is a lightweight version that doesn't allow enumerating role * members except through off-chain means by accessing the contract event logs. Some * applications may benefit from on-chain enumerability, for those cases see * {AccessControlEnumerable}. * * Roles are referred to by their `bytes32` identifier. These should be exposed * in the external API and be unique. The best way to achieve this is by * using `public constant` hash digests: * * ``` * bytes32 public constant MY_ROLE = keccak256("MY_ROLE"); * ``` * * Roles can be used to represent a set of permissions. To restrict access to a * function call, use {hasRole}: * * ``` * function foo() public { * require(hasRole(MY_ROLE, msg.sender)); * ... * } * ``` * * Roles can be granted and revoked dynamically via the {grantRole} and * {revokeRole} functions. Each role has an associated admin role, and only * accounts that have a role's admin role can call {grantRole} and {revokeRole}. * * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means * that only accounts with this role will be able to grant or revoke other * roles. More complex role relationships can be created by using * {_setRoleAdmin}. * * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to * grant and revoke this role. Extra precautions should be taken to secure * accounts that have been granted it. */ abstract contract AccessControl is Context, IAccessControl, ERC165 { struct RoleData { mapping (address => bool) members; bytes32 adminRole; } mapping (bytes32 => RoleData) private _roles; bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00; /** * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` * * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite * {RoleAdminChanged} not being emitted signaling this. * * _Available since v3.1._ */ event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole); /** * @dev Emitted when `account` is granted `role`. * * `sender` is the account that originated the contract call, an admin role * bearer except when using {_setupRole}. */ event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender); /** * @dev Emitted when `account` is revoked `role`. * * `sender` is the account that originated the contract call: * - if using `revokeRole`, it is the admin role bearer * - if using `renounceRole`, it is the role bearer (i.e. `account`) */ event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender); /** * @dev Modifier that checks that an account has a specific role. Reverts * with a standardized message including the required role. * * The format of the revert reason is given by the following regular expression: * * /^AccessControl: account (0x[0-9a-f]{20}) is missing role (0x[0-9a-f]{32})$/ * * _Available since v4.1._ */ modifier onlyRole(bytes32 role) { _checkRole(role, _msgSender()); _; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId); } /** * @dev Returns `true` if `account` has been granted `role`. */ function hasRole(bytes32 role, address account) public view override returns (bool) { return _roles[role].members[account]; } /** * @dev Revert with a standard message if `account` is missing `role`. * * The format of the revert reason is given by the following regular expression: * * /^AccessControl: account (0x[0-9a-f]{20}) is missing role (0x[0-9a-f]{32})$/ */ function _checkRole(bytes32 role, address account) internal view { if(!hasRole(role, account)) { revert(string(abi.encodePacked( "AccessControl: account ", Strings.toHexString(uint160(account), 20), " is missing role ", Strings.toHexString(uint256(role), 32) ))); } } /** * @dev Returns the admin role that controls `role`. See {grantRole} and * {revokeRole}. * * To change a role's admin, use {_setRoleAdmin}. */ function getRoleAdmin(bytes32 role) public view override returns (bytes32) { return _roles[role].adminRole; } /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) { _grantRole(role, account); } /** * @dev Revokes `role` from `account`. * * If `account` had been granted `role`, emits a {RoleRevoked} event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) { _revokeRole(role, account); } /** * @dev Revokes `role` from the calling account. * * Roles are often managed via {grantRole} and {revokeRole}: this function's * purpose is to provide a mechanism for accounts to lose their privileges * if they are compromised (such as when a trusted device is misplaced). * * If the calling account had been granted `role`, emits a {RoleRevoked} * event. * * Requirements: * * - the caller must be `account`. */ function renounceRole(bytes32 role, address account) public virtual override { require(account == _msgSender(), "AccessControl: can only renounce roles for self"); _revokeRole(role, account); } /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. Note that unlike {grantRole}, this function doesn't perform any * checks on the calling account. * * [WARNING] * ==== * This function should only be called from the constructor when setting * up the initial roles for the system. * * Using this function in any other way is effectively circumventing the admin * system imposed by {AccessControl}. * ==== */ function _setupRole(bytes32 role, address account) internal virtual { _grantRole(role, account); } /** * @dev Sets `adminRole` as ``role``'s admin role. * * Emits a {RoleAdminChanged} event. */ function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual { emit RoleAdminChanged(role, getRoleAdmin(role), adminRole); _roles[role].adminRole = adminRole; } function _grantRole(bytes32 role, address account) private { if (!hasRole(role, account)) { _roles[role].members[account] = true; emit RoleGranted(role, account, _msgSender()); } } function _revokeRole(bytes32 role, address account) private { if (hasRole(role, account)) { _roles[role].members[account] = false; emit RoleRevoked(role, account, _msgSender()); } } } // File contracts2/token/ERC721Mintable.sol pragma solidity ^0.8.0; interface IERC721Mintable { function exists(uint256 _tokenId) external view returns (bool); function mint(address _to, uint256 _tokenId) external; } abstract contract ERC721Mintable is ERC721, IERC721Mintable, AccessControl { bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE"); constructor() { _setRoleAdmin(MINTER_ROLE, MINTER_ROLE); _setupRole(MINTER_ROLE, _msgSender()); } function exists(uint256 tokenId) public view override returns (bool) { return super._exists(tokenId); } function mint(address to, uint256 tokenId) public virtual override onlyRole(MINTER_ROLE) { super._mint(to, tokenId); } function supportsInterface(bytes4 interfaceId) public view virtual override(AccessControl, ERC721) returns (bool) { return AccessControl.supportsInterface(interfaceId) || ERC721.supportsInterface(interfaceId); } } // File contracts2/roles/AccessOperatable.sol pragma solidity ^0.8.0; abstract contract AccessOperatable is AccessControl { bytes32 public constant OPERATOR = keccak256("OPERATOR"); event Paused(address account); event Unpaused(address account); bool public _paused; constructor() { _setRoleAdmin(OPERATOR, OPERATOR); _setupRole(OPERATOR, msg.sender); _paused = false; } modifier whenNotPaused() { require(!_paused, "Pausable: paused"); _; } modifier whenPaused() { require(_paused, "Pausable: not paused"); _; } function pause() public onlyRole(OPERATOR) whenNotPaused() { _paused = true; emit Paused(msg.sender); } function unpause() public onlyRole(OPERATOR) whenPaused() { _paused = false; emit Unpaused(msg.sender); } } // File contracts2/IApprovalProxy.sol pragma solidity ^0.8.0; interface IApprovalProxy { function setApprovalForAll(address _owner, address _spender, bool _approved) external; function isApprovedForAll(address _owner, address _spender, bool _original) external view returns (bool); } // File contracts2/token/ERC721ApprovalProxy.sol pragma solidity ^0.8.0; abstract contract ERC721ApprovalProxy is ERC721, AccessOperatable { using Address for address; event UpdateApprovalProxy(address _newProxyContract); IApprovalProxy public approvalProxy; constructor(address _approvalProxy) { setApprovalProxy(_approvalProxy); } function setApprovalProxy(address _new) public onlyRole(OPERATOR) { approvalProxy = IApprovalProxy(_new); emit UpdateApprovalProxy(_new); } function setApprovalForAll(address _spender, bool _approved) override virtual public { if (address(approvalProxy) != address(0x0) && _spender.isContract()) { approvalProxy.setApprovalForAll(msg.sender, _spender, _approved); } super.setApprovalForAll(_spender, _approved); } function isApprovedForAll(address _owner, address _spender) override virtual public view returns (bool) { bool original = super.isApprovedForAll(_owner, _spender); if (address(approvalProxy) != address(0x0)) { return approvalProxy.isApprovedForAll(_owner, _spender, original); } return original; } function supportsInterface(bytes4 interfaceId) public view virtual override(AccessControl, ERC721) returns (bool) { return AccessControl.supportsInterface(interfaceId) || ERC721.supportsInterface(interfaceId); } } // File @openzeppelin/contracts/access/[email protected] pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), 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 { emit OwnershipTransferred(_owner, address(0)); _owner = 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"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // File contracts2/MCHExtension.sol pragma solidity 0.8.3; contract MCHExtension is ERC721Mintable, ERC721ApprovalProxy, Ownable { string public baseURI; constructor(address _approvalProxy) ERC721ApprovalProxy(_approvalProxy) ERC721("MyCryptoHeroes:Extension", "MCHE") { super.setApprovalProxy(_approvalProxy); setBaseURI("https://www.mycryptoheroes.net/metadata/extension/"); } function _baseURI() override view internal returns (string memory) { return baseURI; } function setBaseURI(string memory baseURI_) public onlyRole(OPERATOR) { baseURI = baseURI_; } function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override whenNotPaused() { super._beforeTokenTransfer(from, to, tokenId); } // override function setApprovalForAll(address _spender, bool _approved) override(ERC721ApprovalProxy, ERC721) public { super.setApprovalForAll(_spender, _approved); } function isApprovedForAll(address _owner, address _spender) override(ERC721ApprovalProxy, ERC721) public view returns (bool) { return super.isApprovedForAll(_owner, _spender); } function supportsInterface(bytes4 interfaceId) public view override(ERC721ApprovalProxy, ERC721Mintable) returns (bool) { return super.supportsInterface(interfaceId); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_approvalProxy","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_newProxyContract","type":"address"}],"name":"UpdateApprovalProxy","type":"event"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINTER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"OPERATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"approvalProxy","outputs":[{"internalType":"contract IApprovalProxy","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_spender","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"bool","name":"_approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_new","type":"address"}],"name":"setApprovalProxy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI_","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405162002bc538038062002bc58339810160408190526200003491620006bb565b604080518082018252601881527f4d7943727970746f4865726f65733a457874656e73696f6e00000000000000006020808301918252835180850190945260048452634d43484560e01b90840152815184939162000096916000919062000615565b508051620000ac90600190602084019062000615565b505050620000d060008051602062002ba583398151915280620001bb60201b60201c565b620000eb60008051602062002ba5833981519152336200020f565b6200010660008051602062002b8583398151915280620001bb565b6200012160008051602062002b85833981519152336200020f565b6007805460ff1916905562000136816200021f565b50600880546001600160a01b0319163390811790915560405181906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35062000190816200021f60201b62000c041760201c565b620001b460405180606001604052806032815260200162002b536032913962000299565b506200086f565b600082815260066020526040902060010154819060405184907fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff90600090a460009182526006602052604090912060010155565b6200021b8282620002cf565b5050565b60008051602062002b858339815191526200023c81335b62000373565b60078054610100600160a81b0319166101006001600160a01b038516908102919091179091556040519081527f12be4820d03362d1f48434d870b2fc1549b3a3d16d891eeaac7c3073f3ded8b79060200160405180910390a15050565b60008051602062002b85833981519152620002b5813362000236565b8151620002ca90600990602085019062000615565b505050565b60008281526006602090815260408083206001600160a01b038516845290915290205460ff166200021b5760008281526006602090815260408083206001600160a01b03851684529091529020805460ff191660011790556200032f3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526006602090815260408083206001600160a01b038516845290915290205460ff166200021b57620003bf816001600160a01b031660146200041960201b62000ee41760201c565b620003d583602062000ee462000419821b17811c565b604051602001620003e8929190620006e4565b60408051601f198184030181529082905262461bcd60e51b825262000410916004016200075d565b60405180910390fd5b606060006200042a836002620007ad565b6200043790600262000792565b6001600160401b038111156200045d57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801562000488576020820181803683370190505b509050600360fc1b81600081518110620004b257634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110620004f057634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350600062000516846002620007ad565b6200052390600162000792565b90505b6001811115620005bd576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106200056757634e487b7160e01b600052603260045260246000fd5b1a60f81b8282815181106200058c57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535060049490941c93620005b58162000802565b905062000526565b5083156200060e5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640162000410565b9392505050565b82805462000623906200081c565b90600052602060002090601f01602090048101928262000647576000855562000692565b82601f106200066257805160ff191683800117855562000692565b8280016001018555821562000692579182015b828111156200069257825182559160200191906001019062000675565b50620006a0929150620006a4565b5090565b5b80821115620006a05760008155600101620006a5565b600060208284031215620006cd578081fd5b81516001600160a01b03811681146200060e578182fd5b60007f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000825283516200071e816017850160208801620007cf565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835162000751816028840160208801620007cf565b01602801949350505050565b60006020825282518060208401526200077e816040850160208701620007cf565b601f01601f19169190910160400192915050565b60008219821115620007a857620007a862000859565b500190565b6000816000190483118215151615620007ca57620007ca62000859565b500290565b60005b83811015620007ec578181015183820152602001620007d2565b83811115620007fc576000848401525b50505050565b60008162000814576200081462000859565b506000190190565b600181811c908216806200083157607f821691505b602082108114156200085357634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6122d4806200087f6000396000f3fe608060405234801561001057600080fd5b50600436106101fb5760003560e01c80636c0360eb1161011a5780639bb5c9c3116100ad578063c87b56dd1161007c578063c87b56dd14610420578063d539139314610433578063d547741f1461045a578063e985e9c51461046d578063f2fde38b14610480576101fb565b80639bb5c9c3146103df578063a217fddf146103f2578063a22cb465146103fa578063b88d4fde1461040d576101fb565b80638da5cb5b116100e95780638da5cb5b1461039e57806391d14854146103af57806395d89b41146103c2578063983d2737146103ca576101fb565b80636c0360eb1461037357806370a082311461037b578063715018a61461038e5780638456cb5914610396576101fb565b806336568abe116101925780634dd09f33116101615780634dd09f33146103225780634f558e791461033a57806355f804b31461034d5780636352211e14610360576101fb565b806336568abe146102e15780633f4ba83a146102f457806340c10f19146102fc57806342842e0e1461030f576101fb565b806316c61ccc116101ce57806316c61ccc1461027d57806323b872dd1461028a578063248a9ca31461029d5780632f2ff15d146102ce576101fb565b806301ffc9a71461020057806306fdde0314610228578063081812fc1461023d578063095ea7b314610268575b600080fd5b61021361020e366004611ec5565b610493565b60405190151581526020015b60405180910390f35b6102306104a6565b60405161021f9190612050565b61025061024b366004611e8b565b610538565b6040516001600160a01b03909116815260200161021f565b61027b610276366004611e46565b6105d2565b005b6007546102139060ff1681565b61027b610298366004611d5c565b6106e8565b6102c06102ab366004611e8b565b60009081526006602052604090206001015490565b60405190815260200161021f565b61027b6102dc366004611ea3565b610719565b61027b6102ef366004611ea3565b610740565b61027b6107be565b61027b61030a366004611e46565b610861565b61027b61031d366004611d5c565b610896565b6007546102509061010090046001600160a01b031681565b610213610348366004611e8b565b6108b1565b61027b61035b366004611efd565b6108d0565b61025061036e366004611e8b565b6108fc565b610230610973565b6102c0610389366004611d10565b610a01565b61027b610a88565b61027b610b2c565b6008546001600160a01b0316610250565b6102136103bd366004611ea3565b610bc8565b610230610bf5565b6102c060008051602061227f83398151915281565b61027b6103ed366004611d10565b610c04565b6102c0600081565b61027b610408366004611e10565b610c7a565b61027b61041b366004611d97565b610c84565b61023061042e366004611e8b565b610cbc565b6102c07f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b61027b610468366004611ea3565b610d97565b61021361047b366004611d2a565b610dbd565b61027b61048e366004611d10565b610dc9565b600061049e826110c6565b90505b919050565b6060600080546104b5906121ab565b80601f01602080910402602001604051908101604052809291908181526020018280546104e1906121ab565b801561052e5780601f106105035761010080835404028352916020019161052e565b820191906000526020600020905b81548152906001019060200180831161051157829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166105b65760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b60006105dd826108fc565b9050806001600160a01b0316836001600160a01b0316141561064b5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016105ad565b336001600160a01b03821614806106675750610667813361047b565b6106d95760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016105ad565b6106e383836110e0565b505050565b6106f2338261114e565b61070e5760405162461bcd60e51b81526004016105ad906120b5565b6106e3838383611225565b60008281526006602052604090206001015461073681335b6113d0565b6106e38383611434565b6001600160a01b03811633146107b05760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016105ad565b6107ba82826114ba565b5050565b60008051602061227f8339815191526107d78133610731565b60075460ff166108205760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016105ad565b6007805460ff191690556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a150565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a661088c8133610731565b6106e38383611521565b6106e383838360405180602001604052806000815250610c84565b6000818152600260205260408120546001600160a01b0316151561049e565b60008051602061227f8339815191526108e98133610731565b81516106e3906009906020850190611bea565b6000818152600260205260408120546001600160a01b03168061049e5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016105ad565b60098054610980906121ab565b80601f01602080910402602001604051908101604052809291908181526020018280546109ac906121ab565b80156109f95780601f106109ce576101008083540402835291602001916109f9565b820191906000526020600020905b8154815290600101906020018083116109dc57829003601f168201915b505050505081565b60006001600160a01b038216610a6c5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016105ad565b506001600160a01b031660009081526003602052604090205490565b6008546001600160a01b03163314610ae25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105ad565b6008546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600880546001600160a01b0319169055565b60008051602061227f833981519152610b458133610731565b60075460ff1615610b8b5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016105ad565b6007805460ff191660011790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890602001610856565b60008281526006602090815260408083206001600160a01b038516845290915290205460ff165b92915050565b6060600180546104b5906121ab565b60008051602061227f833981519152610c1d8133610731565b60078054610100600160a81b0319166101006001600160a01b038516908102919091179091556040519081527f12be4820d03362d1f48434d870b2fc1549b3a3d16d891eeaac7c3073f3ded8b79060200160405180910390a15050565b6107ba828261166f565b610c8e338361114e565b610caa5760405162461bcd60e51b81526004016105ad906120b5565b610cb68484848461171a565b50505050565b6000818152600260205260409020546060906001600160a01b0316610d3b5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016105ad565b6000610d4561174d565b90506000815111610d655760405180602001604052806000815250610d90565b80610d6f8461175c565b604051602001610d80929190611f6f565b6040516020818303038152906040525b9392505050565b600082815260066020526040902060010154610db38133610731565b6106e383836114ba565b6000610d908383611877565b6008546001600160a01b03163314610e235760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105ad565b6001600160a01b038116610e885760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105ad565b6008546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600880546001600160a01b0319166001600160a01b0392909216919091179055565b60606000610ef3836002612132565b610efe906002612106565b67ffffffffffffffff811115610f2457634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015610f4e576020820181803683370190505b509050600360fc1b81600081518110610f7757634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110610fb457634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053506000610fd8846002612132565b610fe3906001612106565b90505b6001811115611077576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061102557634e487b7160e01b600052603260045260246000fd5b1a60f81b82828151811061104957634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535060049490941c9361107081612194565b9050610fe6565b508315610d905760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016105ad565b60006110d18261194f565b8061049e575061049e82611970565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611115826108fc565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166111c75760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016105ad565b60006111d2836108fc565b9050806001600160a01b0316846001600160a01b0316148061120d5750836001600160a01b031661120284610538565b6001600160a01b0316145b8061121d575061121d8185610dbd565b949350505050565b826001600160a01b0316611238826108fc565b6001600160a01b0316146112a05760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016105ad565b6001600160a01b0382166113025760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016105ad565b61130d8383836119c0565b6113186000826110e0565b6001600160a01b0383166000908152600360205260408120805460019290611341908490612151565b90915550506001600160a01b038216600090815260036020526040812080546001929061136f908490612106565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6113da8282610bc8565b6107ba576113f2816001600160a01b03166014610ee4565b6113fd836020610ee4565b60405160200161140e929190611f9e565b60408051601f198184030181529082905262461bcd60e51b82526105ad91600401612050565b61143e8282610bc8565b6107ba5760008281526006602090815260408083206001600160a01b03851684529091529020805460ff191660011790556114763390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6114c48282610bc8565b156107ba5760008281526006602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6001600160a01b0382166115775760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016105ad565b6000818152600260205260409020546001600160a01b0316156115dc5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016105ad565b6115e8600083836119c0565b6001600160a01b0382166000908152600360205260408120805460019290611611908490612106565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60075461010090046001600160a01b03161580159061169757506001600160a01b0382163b15155b1561171057600754604051631b3b02e560e11b81523360048201526001600160a01b03848116602483015283151560448301526101009092049091169063367605ca90606401600060405180830381600087803b1580156116f757600080fd5b505af115801561170b573d6000803e3d6000fd5b505050505b6107ba8282611a0b565b611725848484611225565b61173184848484611add565b610cb65760405162461bcd60e51b81526004016105ad90612063565b6060600980546104b5906121ab565b60608161178157506040805180820190915260018152600360fc1b60208201526104a1565b8160005b81156117ab5780611795816121e6565b91506117a49050600a8361211e565b9150611785565b60008167ffffffffffffffff8111156117d457634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156117fe576020820181803683370190505b5090505b841561121d57611813600183612151565b9150611820600a86612201565b61182b906030612106565b60f81b81838151811061184e57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350611870600a8661211e565b9450611802565b6001600160a01b0382811660009081526005602090815260408083208585168452909152812054600754919260ff9091169161010090041615610d90576007546040516346e67e2960e11b81526001600160a01b0386811660048301528581166024830152831515604483015261010090920490911690638dccfc529060640160206040518083038186803b15801561190f57600080fd5b505afa158015611923573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119479190611e6f565b915050610bef565b60006001600160e01b03198216637965db0b60e01b148061049e575061049e825b60006001600160e01b031982166380ac58cd60e01b14806119a157506001600160e01b03198216635b5e139f60e01b145b8061049e57506301ffc9a760e01b6001600160e01b031983161461049e565b60075460ff1615611a065760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016105ad565b6106e3565b6001600160a01b038216331415611a645760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016105ad565b3360008181526005602090815260408083206001600160a01b0387168085529252909120805460ff1916841515179055906001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611ad1911515815260200190565b60405180910390a35050565b60006001600160a01b0384163b15611bdf57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611b21903390899088908890600401612013565b602060405180830381600087803b158015611b3b57600080fd5b505af1925050508015611b6b575060408051601f3d908101601f19168201909252611b6891810190611ee1565b60015b611bc5573d808015611b99576040519150601f19603f3d011682016040523d82523d6000602084013e611b9e565b606091505b508051611bbd5760405162461bcd60e51b81526004016105ad90612063565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061121d565b506001949350505050565b828054611bf6906121ab565b90600052602060002090601f016020900481019282611c185760008555611c5e565b82601f10611c3157805160ff1916838001178555611c5e565b82800160010185558215611c5e579182015b82811115611c5e578251825591602001919060010190611c43565b50611c6a929150611c6e565b5090565b5b80821115611c6a5760008155600101611c6f565b600067ffffffffffffffff80841115611c9e57611c9e612241565b604051601f8501601f19908116603f01168101908282118183101715611cc657611cc6612241565b81604052809350858152868686011115611cdf57600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b03811681146104a157600080fd5b600060208284031215611d21578081fd5b610d9082611cf9565b60008060408385031215611d3c578081fd5b611d4583611cf9565b9150611d5360208401611cf9565b90509250929050565b600080600060608486031215611d70578081fd5b611d7984611cf9565b9250611d8760208501611cf9565b9150604084013590509250925092565b60008060008060808587031215611dac578081fd5b611db585611cf9565b9350611dc360208601611cf9565b925060408501359150606085013567ffffffffffffffff811115611de5578182fd5b8501601f81018713611df5578182fd5b611e0487823560208401611c83565b91505092959194509250565b60008060408385031215611e22578182fd5b611e2b83611cf9565b91506020830135611e3b81612257565b809150509250929050565b60008060408385031215611e58578182fd5b611e6183611cf9565b946020939093013593505050565b600060208284031215611e80578081fd5b8151610d9081612257565b600060208284031215611e9c578081fd5b5035919050565b60008060408385031215611eb5578182fd5b82359150611d5360208401611cf9565b600060208284031215611ed6578081fd5b8135610d9081612268565b600060208284031215611ef2578081fd5b8151610d9081612268565b600060208284031215611f0e578081fd5b813567ffffffffffffffff811115611f24578182fd5b8201601f81018413611f34578182fd5b61121d84823560208401611c83565b60008151808452611f5b816020860160208601612168565b601f01601f19169290920160200192915050565b60008351611f81818460208801612168565b835190830190611f95818360208801612168565b01949350505050565b60007f416363657373436f6e74726f6c3a206163636f756e742000000000000000000082528351611fd6816017850160208801612168565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351612007816028840160208801612168565b01602801949350505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061204690830184611f43565b9695505050505050565b600060208252610d906020830184611f43565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6000821982111561211957612119612215565b500190565b60008261212d5761212d61222b565b500490565b600081600019048311821515161561214c5761214c612215565b500290565b60008282101561216357612163612215565b500390565b60005b8381101561218357818101518382015260200161216b565b83811115610cb65750506000910152565b6000816121a3576121a3612215565b506000190190565b600181811c908216806121bf57607f821691505b602082108114156121e057634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156121fa576121fa612215565b5060010190565b6000826122105761221061222b565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b801515811461226557600080fd5b50565b6001600160e01b03198116811461226557600080fdfe523a704056dcd17bcf83bed8b68c59416dac1119be77755efe3bde0a64e46e0ca2646970667358221220173c0a86ca7935891710730931d47fe6d97e94e45a8681cb2a4ad7ecaa40697964736f6c6343000803003368747470733a2f2f7777772e6d7963727970746f6865726f65732e6e65742f6d657461646174612f657874656e73696f6e2f523a704056dcd17bcf83bed8b68c59416dac1119be77755efe3bde0a64e46e0c9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6000000000000000000000000c81551b5b52c8509be1839845054f5ebcac93107
Deployed ByteCode Sourcemap
47392:1428:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48594:223;;;;;;:::i;:::-;;:::i;:::-;;;7659:14:1;;7652:22;7634:41;;7622:2;7607:18;48594:223:0;;;;;;;;21639:100;;;:::i;:::-;;;;;;;:::i;23099:221::-;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;6567:32:1;;;6549:51;;6537:2;6522:18;23099:221:0;6504:102:1;22636:397:0;;;;;;:::i;:::-;;:::i;:::-;;42515:19;;;;;;;;;23989:305;;;;;;:::i;:::-;;:::i;37936:123::-;;;;;;:::i;:::-;38002:7;38029:12;;;:6;:12;;;;;:22;;;;37936:123;;;;7832:25:1;;;7820:2;7805:18;37936:123:0;7787:76:1;38321:147:0;;;;;;:::i;:::-;;:::i;39369:218::-;;;;;;:::i;:::-;;:::i;43022:128::-;;;:::i;41742:173::-;;;;;;:::i;:::-;;:::i;24365:151::-;;;;;;:::i;:::-;;:::i;43712:35::-;;;;;;;;-1:-1:-1;;;;;43712:35:0;;;41617:117;;;;;;:::i;:::-;;:::i;47864:107::-;;;;;;:::i;:::-;;:::i;21333:239::-;;;;;;:::i;:::-;;:::i;47471:21::-;;;:::i;21063:208::-;;;;;;:::i;:::-;;:::i;46767:148::-;;;:::i;42888:126::-;;;:::i;46116:87::-;46189:6;;-1:-1:-1;;;;;46189:6:0;46116:87;;36934:139;;;;;;:::i;:::-;;:::i;21808:104::-;;;:::i;42374:56::-;;-1:-1:-1;;;;;;;;;;;42374:56:0;;43851:162;;;;;;:::i;:::-;;:::i;34899:49::-;;34944:4;34899:49;;48218:169;;;;;;:::i;:::-;;:::i;24587:285::-;;;;;;:::i;:::-;;:::i;21983:360::-;;;;;;:::i;:::-;;:::i;41418:62::-;;41456:24;41418:62;;38713:149;;;;;;:::i;:::-;;:::i;48395:191::-;;;;;;:::i;:::-;;:::i;47070:244::-;;;;;;:::i;:::-;;:::i;48594:223::-;48744:4;48773:36;48797:11;48773:23;:36::i;:::-;48766:43;;48594:223;;;;:::o;21639:100::-;21693:13;21726:5;21719:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21639:100;:::o;23099:221::-;23175:7;26428:16;;;:7;:16;;;;;;-1:-1:-1;;;;;26428:16:0;23195:73;;;;-1:-1:-1;;;23195:73:0;;13542:2:1;23195:73:0;;;13524:21:1;13581:2;13561:18;;;13554:30;13620:34;13600:18;;;13593:62;-1:-1:-1;;;13671:18:1;;;13664:42;13723:19;;23195:73:0;;;;;;;;;-1:-1:-1;23288:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;23288:24:0;;23099:221::o;22636:397::-;22717:13;22733:23;22748:7;22733:14;:23::i;:::-;22717:39;;22781:5;-1:-1:-1;;;;;22775:11:0;:2;-1:-1:-1;;;;;22775:11:0;;;22767:57;;;;-1:-1:-1;;;22767:57:0;;15142:2:1;22767:57:0;;;15124:21:1;15181:2;15161:18;;;15154:30;15220:34;15200:18;;;15193:62;-1:-1:-1;;;15271:18:1;;;15264:31;15312:19;;22767:57:0;15114:223:1;22767:57:0;16061:10;-1:-1:-1;;;;;22845:21:0;;;;:62;;-1:-1:-1;22870:37:0;22887:5;16061:10;22894:12;15981:98;22870:37;22837:154;;;;-1:-1:-1;;;22837:154:0;;11935:2:1;22837:154:0;;;11917:21:1;11974:2;11954:18;;;11947:30;12013:34;11993:18;;;11986:62;12084:26;12064:18;;;12057:54;12128:19;;22837:154:0;11907:246:1;22837:154:0;23004:21;23013:2;23017:7;23004:8;:21::i;:::-;22636:397;;;:::o;23989:305::-;24150:41;16061:10;24183:7;24150:18;:41::i;:::-;24142:103;;;;-1:-1:-1;;;24142:103:0;;;;;;;:::i;:::-;24258:28;24268:4;24274:2;24278:7;24258:9;:28::i;38321:147::-;38002:7;38029:12;;;:6;:12;;;;;:22;;;36503:30;36514:4;16061:10;36520:12;36503:10;:30::i;:::-;38435:25:::1;38446:4;38452:7;38435:10;:25::i;39369:218::-:0;-1:-1:-1;;;;;39465:23:0;;16061:10;39465:23;39457:83;;;;-1:-1:-1;;;39457:83:0;;15962:2:1;39457:83:0;;;15944:21:1;16001:2;15981:18;;;15974:30;16040:34;16020:18;;;16013:62;-1:-1:-1;;;16091:18:1;;;16084:45;16146:19;;39457:83:0;15934:237:1;39457:83:0;39553:26;39565:4;39571:7;39553:11;:26::i;:::-;39369:218;;:::o;43022:128::-;-1:-1:-1;;;;;;;;;;;36503:30:0;42409:21;16061:10;36520:12;15981:98;36503:30;42828:7:::1;::::0;::::1;;42820:40;;;::::0;-1:-1:-1;;;42820:40:0;;8886:2:1;42820:40:0::1;::::0;::::1;8868:21:1::0;8925:2;8905:18;;;8898:30;-1:-1:-1;;;8944:18:1;;;8937:50;9004:18;;42820:40:0::1;8858:170:1::0;42820:40:0::1;43091:7:::2;:15:::0;;-1:-1:-1;;43091:15:0::2;::::0;;43122:20:::2;::::0;43131:10:::2;6549:51:1::0;;43122:20:0::2;::::0;6537:2:1;6522:18;43122:20:0::2;;;;;;;;43022:128:::0;:::o;41742:173::-;41456:24;36503:30;41456:24;16061:10;36520:12;15981:98;36503:30;41883:24:::1;41895:2;41899:7;41883:11;:24::i;24365:151::-:0;24469:39;24486:4;24492:2;24496:7;24469:39;;;;;;;;;;;;:16;:39::i;41617:117::-;41680:4;26428:16;;;:7;:16;;;;;;-1:-1:-1;;;;;26428:16:0;:30;;41704:22;26339:127;47864:107;-1:-1:-1;;;;;;;;;;;36503:30:0;42409:21;16061:10;36520:12;15981:98;36503:30;47945:18;;::::1;::::0;:7:::1;::::0;:18:::1;::::0;::::1;::::0;::::1;:::i;21333:239::-:0;21405:7;21441:16;;;:7;:16;;;;;;-1:-1:-1;;;;;21441:16:0;21476:19;21468:73;;;;-1:-1:-1;;;21468:73:0;;12771:2:1;21468:73:0;;;12753:21:1;12810:2;12790:18;;;12783:30;12849:34;12829:18;;;12822:62;-1:-1:-1;;;12900:18:1;;;12893:39;12949:19;;21468:73:0;12743:231:1;47471:21:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;21063:208::-;21135:7;-1:-1:-1;;;;;21163:19:0;;21155:74;;;;-1:-1:-1;;;21155:74:0;;12360:2:1;21155:74:0;;;12342:21:1;12399:2;12379:18;;;12372:30;12438:34;12418:18;;;12411:62;-1:-1:-1;;;12489:18:1;;;12482:40;12539:19;;21155:74:0;12332:232:1;21155:74:0;-1:-1:-1;;;;;;21247:16:0;;;;;:9;:16;;;;;;;21063:208::o;46767:148::-;46189:6;;-1:-1:-1;;;;;46189:6:0;16061:10;46336:23;46328:68;;;;-1:-1:-1;;;46328:68:0;;13955:2:1;46328:68:0;;;13937:21:1;;;13974:18;;;13967:30;14033:34;14013:18;;;14006:62;14085:18;;46328:68:0;13927:182:1;46328:68:0;46858:6:::1;::::0;46837:40:::1;::::0;46874:1:::1;::::0;-1:-1:-1;;;;;46858:6:0::1;::::0;46837:40:::1;::::0;46874:1;;46837:40:::1;46888:6;:19:::0;;-1:-1:-1;;;;;;46888:19:0::1;::::0;;46767:148::o;42888:126::-;-1:-1:-1;;;;;;;;;;;36503:30:0;42409:21;16061:10;36520:12;15981:98;36503:30;42731:7:::1;::::0;::::1;;42730:8;42722:37;;;::::0;-1:-1:-1;;;42722:37:0;;11590:2:1;42722:37:0::1;::::0;::::1;11572:21:1::0;11629:2;11609:18;;;11602:30;-1:-1:-1;;;11648:18:1;;;11641:46;11704:18;;42722:37:0::1;11562:166:1::0;42722:37:0::1;42958:7:::2;:14:::0;;-1:-1:-1;;42958:14:0::2;42968:4;42958:14;::::0;;42988:18:::2;::::0;42995:10:::2;6549:51:1::0;;42988:18:0::2;::::0;6537:2:1;6522:18;42988::0::2;6504:102:1::0;36934:139:0;37012:4;37036:12;;;:6;:12;;;;;;;;-1:-1:-1;;;;;37036:29:0;;;;;;;;;;;;36934:139;;;;;:::o;21808:104::-;21864:13;21897:7;21890:14;;;;;:::i;43851:162::-;-1:-1:-1;;;;;;;;;;;36503:30:0;42409:21;16061:10;36520:12;15981:98;36503:30;43928:13:::1;:36:::0;;-1:-1:-1;;;;;;43928:36:0::1;;-1:-1:-1::0;;;;;43928:36:0;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;43980:25:::1;::::0;6549:51:1;;;43980:25:0::1;::::0;6537:2:1;6522:18;43980:25:0::1;;;;;;;43851:162:::0;;:::o;48218:169::-;48335:44;48359:8;48369:9;48335:23;:44::i;24587:285::-;24719:41;16061:10;24752:7;24719:18;:41::i;:::-;24711:103;;;;-1:-1:-1;;;24711:103:0;;;;;;;:::i;:::-;24825:39;24839:4;24845:2;24849:7;24858:5;24825:13;:39::i;:::-;24587:285;;;;:::o;21983:360::-;26404:4;26428:16;;;:7;:16;;;;;;22056:13;;-1:-1:-1;;;;;26428:16:0;22082:76;;;;-1:-1:-1;;;22082:76:0;;14726:2:1;22082:76:0;;;14708:21:1;14765:2;14745:18;;;14738:30;14804:34;14784:18;;;14777:62;-1:-1:-1;;;14855:18:1;;;14848:45;14910:19;;22082:76:0;14698:237:1;22082:76:0;22171:21;22195:10;:8;:10::i;:::-;22171:34;;22247:1;22229:7;22223:21;:25;:112;;;;;;;;;;;;;;;;;22288:7;22297:18;:7;:16;:18::i;:::-;22271:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;22223:112;22216:119;21983:360;-1:-1:-1;;;21983:360:0:o;38713:149::-;38002:7;38029:12;;;:6;:12;;;;;:22;;;36503:30;36514:4;16061:10;36520:12;15981:98;36503:30;38828:26:::1;38840:4;38846:7;38828:11;:26::i;48395:191::-:0;48514:4;48538:40;48561:6;48569:8;48538:22;:40::i;47070:244::-;46189:6;;-1:-1:-1;;;;;46189:6:0;16061:10;46336:23;46328:68;;;;-1:-1:-1;;;46328:68:0;;13955:2:1;46328:68:0;;;13937:21:1;;;13974:18;;;13967:30;14033:34;14013:18;;;14006:62;14085:18;;46328:68:0;13927:182:1;46328:68:0;-1:-1:-1;;;;;47159:22:0;::::1;47151:73;;;::::0;-1:-1:-1;;;47151:73:0;;9654:2:1;47151:73:0::1;::::0;::::1;9636:21:1::0;9693:2;9673:18;;;9666:30;9732:34;9712:18;;;9705:62;-1:-1:-1;;;9783:18:1;;;9776:36;9829:19;;47151:73:0::1;9626:228:1::0;47151:73:0::1;47261:6;::::0;47240:38:::1;::::0;-1:-1:-1;;;;;47240:38:0;;::::1;::::0;47261:6:::1;::::0;47240:38:::1;::::0;47261:6:::1;::::0;47240:38:::1;47289:6;:17:::0;;-1:-1:-1;;;;;;47289:17:0::1;-1:-1:-1::0;;;;;47289:17:0;;;::::1;::::0;;;::::1;::::0;;47070:244::o;17943:447::-;18018:13;18044:19;18076:10;18080:6;18076:1;:10;:::i;:::-;:14;;18089:1;18076:14;:::i;:::-;18066:25;;;;;;-1:-1:-1;;;18066:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18066:25:0;;18044:47;;-1:-1:-1;;;18102:6:0;18109:1;18102:9;;;;;;-1:-1:-1;;;18102:9:0;;;;;;;;;;;;:15;-1:-1:-1;;;;;18102:15:0;;;;;;;;;-1:-1:-1;;;18128:6:0;18135:1;18128:9;;;;;;-1:-1:-1;;;18128:9:0;;;;;;;;;;;;:15;-1:-1:-1;;;;;18128:15:0;;;;;;;;-1:-1:-1;18159:9:0;18171:10;18175:6;18171:1;:10;:::i;:::-;:14;;18184:1;18171:14;:::i;:::-;18159:26;;18154:131;18191:1;18187;:5;18154:131;;;-1:-1:-1;;;18235:5:0;18243:3;18235:11;18226:21;;;;;-1:-1:-1;;;18226:21:0;;;;;;;;;;;;18214:6;18221:1;18214:9;;;;;;-1:-1:-1;;;18214:9:0;;;;;;;;;;;;:33;-1:-1:-1;;;;;18214:33:0;;;;;;;;-1:-1:-1;18272:1:0;18262:11;;;;;18194:3;;;:::i;:::-;;;18154:131;;;-1:-1:-1;18303:10:0;;18295:55;;;;-1:-1:-1;;;18295:55:0;;8525:2:1;18295:55:0;;;8507:21:1;;;8544:18;;;8537:30;8603:34;8583:18;;;8576:62;8655:18;;18295:55:0;8497:182:1;44706:301:0;44859:4;44901:44;44933:11;44901:31;:44::i;:::-;:98;;;;44962:37;44987:11;44962:24;:37::i;30216:174::-;30291:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;30291:29:0;-1:-1:-1;;;;;30291:29:0;;;;;;;;:24;;30345:23;30291:24;30345:14;:23::i;:::-;-1:-1:-1;;;;;30336:46:0;;;;;;;;;;;30216:174;;:::o;26633:348::-;26726:4;26428:16;;;:7;:16;;;;;;-1:-1:-1;;;;;26428:16:0;26743:73;;;;-1:-1:-1;;;26743:73:0;;11177:2:1;26743:73:0;;;11159:21:1;11216:2;11196:18;;;11189:30;11255:34;11235:18;;;11228:62;-1:-1:-1;;;11306:18:1;;;11299:42;11358:19;;26743:73:0;11149:234:1;26743:73:0;26827:13;26843:23;26858:7;26843:14;:23::i;:::-;26827:39;;26896:5;-1:-1:-1;;;;;26885:16:0;:7;-1:-1:-1;;;;;26885:16:0;;:51;;;;26929:7;-1:-1:-1;;;;;26905:31:0;:20;26917:7;26905:11;:20::i;:::-;-1:-1:-1;;;;;26905:31:0;;26885:51;:87;;;;26940:32;26957:5;26964:7;26940:16;:32::i;:::-;26877:96;26633:348;-1:-1:-1;;;;26633:348:0:o;29554:544::-;29679:4;-1:-1:-1;;;;;29652:31:0;:23;29667:7;29652:14;:23::i;:::-;-1:-1:-1;;;;;29652:31:0;;29644:85;;;;-1:-1:-1;;;29644:85:0;;14316:2:1;29644:85:0;;;14298:21:1;14355:2;14335:18;;;14328:30;14394:34;14374:18;;;14367:62;-1:-1:-1;;;14445:18:1;;;14438:39;14494:19;;29644:85:0;14288:231:1;29644:85:0;-1:-1:-1;;;;;29748:16:0;;29740:65;;;;-1:-1:-1;;;29740:65:0;;10418:2:1;29740:65:0;;;10400:21:1;10457:2;10437:18;;;10430:30;10496:34;10476:18;;;10469:62;-1:-1:-1;;;10547:18:1;;;10540:34;10591:19;;29740:65:0;10390:226:1;29740:65:0;29818:39;29839:4;29845:2;29849:7;29818:20;:39::i;:::-;29922:29;29939:1;29943:7;29922:8;:29::i;:::-;-1:-1:-1;;;;;29964:15:0;;;;;;:9;:15;;;;;:20;;29983:1;;29964:15;:20;;29983:1;;29964:20;:::i;:::-;;;;-1:-1:-1;;;;;;;29995:13:0;;;;;;:9;:13;;;;;:18;;30012:1;;29995:13;:18;;30012:1;;29995:18;:::i;:::-;;;;-1:-1:-1;;30024:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;30024:21:0;-1:-1:-1;;;;;30024:21:0;;;;;;;;;30063:27;;30024:16;;30063:27;;;;;;;29554:544;;;:::o;37363:384::-;37443:22;37451:4;37457:7;37443;:22::i;:::-;37439:301;;37575:41;37603:7;-1:-1:-1;;;;;37575:41:0;37613:2;37575:19;:41::i;:::-;37673:38;37701:4;37708:2;37673:19;:38::i;:::-;37496:230;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;37496:230:0;;;;;;;;;;-1:-1:-1;;;37482:246:0;;;;;;;:::i;40617:229::-;40692:22;40700:4;40706:7;40692;:22::i;:::-;40687:152;;40731:12;;;;:6;:12;;;;;;;;-1:-1:-1;;;;;40731:29:0;;;;;;;;;:36;;-1:-1:-1;;40731:36:0;40763:4;40731:36;;;40814:12;16061:10;15981:98;;40814:12;-1:-1:-1;;;;;40787:40:0;40805:7;-1:-1:-1;;;;;40787:40:0;40799:4;40787:40;;;;;;;;;;40617:229;;:::o;40854:230::-;40929:22;40937:4;40943:7;40929;:22::i;:::-;40925:152;;;41000:5;40968:12;;;:6;:12;;;;;;;;-1:-1:-1;;;;;40968:29:0;;;;;;;;;;:37;;-1:-1:-1;;40968:37:0;;;41025:40;16061:10;;40968:12;;41025:40;;41000:5;41025:40;40854:230;;:::o;28246:382::-;-1:-1:-1;;;;;28326:16:0;;28318:61;;;;-1:-1:-1;;;28318:61:0;;13181:2:1;28318:61:0;;;13163:21:1;;;13200:18;;;13193:30;13259:34;13239:18;;;13232:62;13311:18;;28318:61:0;13153:182:1;28318:61:0;26404:4;26428:16;;;:7;:16;;;;;;-1:-1:-1;;;;;26428:16:0;:30;28390:58;;;;-1:-1:-1;;;28390:58:0;;10061:2:1;28390:58:0;;;10043:21:1;10100:2;10080:18;;;10073:30;10139;10119:18;;;10112:58;10187:18;;28390:58:0;10033:178:1;28390:58:0;28461:45;28490:1;28494:2;28498:7;28461:20;:45::i;:::-;-1:-1:-1;;;;;28519:13:0;;;;;;:9;:13;;;;;:18;;28536:1;;28519:13;:18;;28536:1;;28519:18;:::i;:::-;;;;-1:-1:-1;;28548:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;28548:21:0;-1:-1:-1;;;;;28548:21:0;;;;;;;;28587:33;;28548:16;;;28587:33;;28548:16;;28587:33;28246:382;;:::o;44021:318::-;44129:13;;;;;-1:-1:-1;;;;;44129:13:0;44121:38;;;;:63;;-1:-1:-1;;;;;;44163:19:0;;8459:20;8498:8;;44163:21;44117:160;;;44201:13;;:64;;-1:-1:-1;;;44201:64:0;;44233:10;44201:64;;;6845:34:1;-1:-1:-1;;;;;6915:15:1;;;6895:18;;;6888:43;6974:14;;6967:22;6947:18;;;6940:50;44201:13:0;;;;;;;;:31;;6780:18:1;;44201:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44117:160;44287:44;44311:8;44321:9;44287:23;:44::i;25754:272::-;25868:28;25878:4;25884:2;25888:7;25868:9;:28::i;:::-;25915:48;25938:4;25944:2;25948:7;25957:5;25915:22;:48::i;:::-;25907:111;;;;-1:-1:-1;;;25907:111:0;;;;;;;:::i;47756:100::-;47808:13;47841:7;47834:14;;;;;:::i;16642:723::-;16698:13;16919:10;16915:53;;-1:-1:-1;16946:10:0;;;;;;;;;;;;-1:-1:-1;;;16946:10:0;;;;;;16915:53;16993:5;16978:12;17034:78;17041:9;;17034:78;;17067:8;;;;:::i;:::-;;-1:-1:-1;17090:10:0;;-1:-1:-1;17098:2:0;17090:10;;:::i;:::-;;;17034:78;;;17122:19;17154:6;17144:17;;;;;;-1:-1:-1;;;17144:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17144:17:0;;17122:39;;17172:154;17179:10;;17172:154;;17206:11;17216:1;17206:11;;:::i;:::-;;-1:-1:-1;17275:10:0;17283:2;17275:5;:10;:::i;:::-;17262:24;;:2;:24;:::i;:::-;17249:39;;17232:6;17239;17232:14;;;;;;-1:-1:-1;;;17232:14:0;;;;;;;;;;;;:56;-1:-1:-1;;;;;17232:56:0;;;;;;;;-1:-1:-1;17303:11:0;17312:2;17303:11;;:::i;:::-;;;17172:154;;44347:351;-1:-1:-1;;;;;23879:25:0;;;44445:4;23879:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;44541:13;;44445:4;;23879:35;;;;;44541:13;;;;44533:38;44529:136;;44595:13;;:58;;-1:-1:-1;;;44595:58:0;;-1:-1:-1;;;;;6863:15:1;;;44595:58:0;;;6845:34:1;6915:15;;;6895:18;;;6888:43;6974:14;;6967:22;6947:18;;;6940:50;44595:13:0;;;;;;;;:30;;6780:18:1;;44595:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44588:65;;;;;36625:217;36710:4;-1:-1:-1;;;;;;36734:47:0;;-1:-1:-1;;;36734:47:0;;:100;;;36798:36;36822:11;20707:292;20809:4;-1:-1:-1;;;;;;20833:40:0;;-1:-1:-1;;;20833:40:0;;:105;;-1:-1:-1;;;;;;;20890:48:0;;-1:-1:-1;;;20890:48:0;20833:105;:158;;;-1:-1:-1;;;;;;;;;;19310:40:0;;;20955:36;19201:157;47979:213;42731:7;;;;42730:8;42722:37;;;;-1:-1:-1;;;42722:37:0;;11590:2:1;42722:37:0;;;11572:21:1;11629:2;11609:18;;;11602:30;-1:-1:-1;;;11648:18:1;;;11641:46;11704:18;;42722:37:0;11562:166:1;42722:37:0;48139:45:::1;22636:397:::0;23392:295;-1:-1:-1;;;;;23495:24:0;;16061:10;23495:24;;23487:62;;;;-1:-1:-1;;;23487:62:0;;10823:2:1;23487:62:0;;;10805:21:1;10862:2;10842:18;;;10835:30;10901:27;10881:18;;;10874:55;10946:18;;23487:62:0;10795:175:1;23487:62:0;16061:10;23562:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;23562:42:0;;;;;;;;;;:53;;-1:-1:-1;;23562:53:0;;;;;;;:42;-1:-1:-1;;;;;23631:48:0;;23670:8;23631:48;;;;7659:14:1;7652:22;7634:41;;7622:2;7607:18;;7589:92;23631:48:0;;;;;;;;23392:295;;:::o;30955:843::-;31076:4;-1:-1:-1;;;;;31102:13:0;;8459:20;8498:8;31098:693;;31138:72;;-1:-1:-1;;;31138:72:0;;-1:-1:-1;;;;;31138:36:0;;;;;:72;;16061:10;;31189:4;;31195:7;;31204:5;;31138:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31138:72:0;;;;;;;;-1:-1:-1;;31138:72:0;;;;;;;;;;;;:::i;:::-;;;31134:602;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31384:13:0;;31380:341;;31427:60;;-1:-1:-1;;;31427:60:0;;;;;;;:::i;31380:341::-;31671:6;31665:13;31656:6;31652:2;31648:15;31641:38;31134:602;-1:-1:-1;;;;;;31261:55:0;-1:-1:-1;;;31261:55:0;;-1:-1:-1;31254:62:0;;31098:693;-1:-1:-1;31775:4:0;30955:843;;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:631:1;;108:18;149:2;141:6;138:14;135:2;;;155:18;;:::i;:::-;230:2;224:9;198:2;284:15;;-1:-1:-1;;280:24:1;;;306:2;276:33;272:42;260:55;;;330:18;;;350:22;;;327:46;324:2;;;376:18;;:::i;:::-;416:10;412:2;405:22;445:6;436:15;;475:6;467;460:22;515:3;506:6;501:3;497:16;494:25;491:2;;;532:1;529;522:12;491:2;582:6;577:3;570:4;562:6;558:17;545:44;637:1;630:4;621:6;613;609:19;605:30;598:41;;;;88:557;;;;;:::o;650:173::-;718:20;;-1:-1:-1;;;;;767:31:1;;757:42;;747:2;;813:1;810;803:12;828:196;;940:2;928:9;919:7;915:23;911:32;908:2;;;961:6;953;946:22;908:2;989:29;1008:9;989:29;:::i;1029:270::-;;;1158:2;1146:9;1137:7;1133:23;1129:32;1126:2;;;1179:6;1171;1164:22;1126:2;1207:29;1226:9;1207:29;:::i;:::-;1197:39;;1255:38;1289:2;1278:9;1274:18;1255:38;:::i;:::-;1245:48;;1116:183;;;;;:::o;1304:338::-;;;;1450:2;1438:9;1429:7;1425:23;1421:32;1418:2;;;1471:6;1463;1456:22;1418:2;1499:29;1518:9;1499:29;:::i;:::-;1489:39;;1547:38;1581:2;1570:9;1566:18;1547:38;:::i;:::-;1537:48;;1632:2;1621:9;1617:18;1604:32;1594:42;;1408:234;;;;;:::o;1647:696::-;;;;;1819:3;1807:9;1798:7;1794:23;1790:33;1787:2;;;1841:6;1833;1826:22;1787:2;1869:29;1888:9;1869:29;:::i;:::-;1859:39;;1917:38;1951:2;1940:9;1936:18;1917:38;:::i;:::-;1907:48;;2002:2;1991:9;1987:18;1974:32;1964:42;;2057:2;2046:9;2042:18;2029:32;2084:18;2076:6;2073:30;2070:2;;;2121:6;2113;2106:22;2070:2;2149:22;;2202:4;2194:13;;2190:27;-1:-1:-1;2180:2:1;;2236:6;2228;2221:22;2180:2;2264:73;2329:7;2324:2;2311:16;2306:2;2302;2298:11;2264:73;:::i;:::-;2254:83;;;1777:566;;;;;;;:::o;2348:325::-;;;2474:2;2462:9;2453:7;2449:23;2445:32;2442:2;;;2495:6;2487;2480:22;2442:2;2523:29;2542:9;2523:29;:::i;:::-;2513:39;;2602:2;2591:9;2587:18;2574:32;2615:28;2637:5;2615:28;:::i;:::-;2662:5;2652:15;;;2432:241;;;;;:::o;2678:264::-;;;2807:2;2795:9;2786:7;2782:23;2778:32;2775:2;;;2828:6;2820;2813:22;2775:2;2856:29;2875:9;2856:29;:::i;:::-;2846:39;2932:2;2917:18;;;;2904:32;;-1:-1:-1;;;2765:177:1:o;2947:255::-;;3067:2;3055:9;3046:7;3042:23;3038:32;3035:2;;;3088:6;3080;3073:22;3035:2;3125:9;3119:16;3144:28;3166:5;3144:28;:::i;3207:190::-;;3319:2;3307:9;3298:7;3294:23;3290:32;3287:2;;;3340:6;3332;3325:22;3287:2;-1:-1:-1;3368:23:1;;3277:120;-1:-1:-1;3277:120:1:o;3402:264::-;;;3531:2;3519:9;3510:7;3506:23;3502:32;3499:2;;;3552:6;3544;3537:22;3499:2;3593:9;3580:23;3570:33;;3622:38;3656:2;3645:9;3641:18;3622:38;:::i;3671:255::-;;3782:2;3770:9;3761:7;3757:23;3753:32;3750:2;;;3803:6;3795;3788:22;3750:2;3847:9;3834:23;3866:30;3890:5;3866:30;:::i;3931:259::-;;4053:2;4041:9;4032:7;4028:23;4024:32;4021:2;;;4074:6;4066;4059:22;4021:2;4111:9;4105:16;4130:30;4154:5;4130:30;:::i;4195:480::-;;4317:2;4305:9;4296:7;4292:23;4288:32;4285:2;;;4338:6;4330;4323:22;4285:2;4383:9;4370:23;4416:18;4408:6;4405:30;4402:2;;;4453:6;4445;4438:22;4402:2;4481:22;;4534:4;4526:13;;4522:27;-1:-1:-1;4512:2:1;;4568:6;4560;4553:22;4512:2;4596:73;4661:7;4656:2;4643:16;4638:2;4634;4630:11;4596:73;:::i;4875:257::-;;4954:5;4948:12;4981:6;4976:3;4969:19;4997:63;5053:6;5046:4;5041:3;5037:14;5030:4;5023:5;5019:16;4997:63;:::i;:::-;5114:2;5093:15;-1:-1:-1;;5089:29:1;5080:39;;;;5121:4;5076:50;;4924:208;-1:-1:-1;;4924:208:1:o;5137:470::-;;5354:6;5348:13;5370:53;5416:6;5411:3;5404:4;5396:6;5392:17;5370:53;:::i;:::-;5486:13;;5445:16;;;;5508:57;5486:13;5445:16;5542:4;5530:17;;5508:57;:::i;:::-;5581:20;;5324:283;-1:-1:-1;;;;5324:283:1:o;5612:786::-;;6023:25;6018:3;6011:38;6078:6;6072:13;6094:62;6149:6;6144:2;6139:3;6135:12;6128:4;6120:6;6116:17;6094:62;:::i;:::-;-1:-1:-1;;;6215:2:1;6175:16;;;6207:11;;;6200:40;6265:13;;6287:63;6265:13;6336:2;6328:11;;6321:4;6309:17;;6287:63;:::i;:::-;6370:17;6389:2;6366:26;;6001:397;-1:-1:-1;;;;6001:397:1:o;7001:488::-;-1:-1:-1;;;;;7270:15:1;;;7252:34;;7322:15;;7317:2;7302:18;;7295:43;7369:2;7354:18;;7347:34;;;7417:3;7412:2;7397:18;;7390:31;;;7001:488;;7438:45;;7463:19;;7455:6;7438:45;:::i;:::-;7430:53;7204:285;-1:-1:-1;;;;;;7204:285:1:o;8099:219::-;;8248:2;8237:9;8230:21;8268:44;8308:2;8297:9;8293:18;8285:6;8268:44;:::i;9033:414::-;9235:2;9217:21;;;9274:2;9254:18;;;9247:30;9313:34;9308:2;9293:18;;9286:62;-1:-1:-1;;;9379:2:1;9364:18;;9357:48;9437:3;9422:19;;9207:240::o;15342:413::-;15544:2;15526:21;;;15583:2;15563:18;;;15556:30;15622:34;15617:2;15602:18;;15595:62;-1:-1:-1;;;15688:2:1;15673:18;;15666:47;15745:3;15730:19;;15516:239::o;16358:128::-;;16429:1;16425:6;16422:1;16419:13;16416:2;;;16435:18;;:::i;:::-;-1:-1:-1;16471:9:1;;16406:80::o;16491:120::-;;16557:1;16547:2;;16562:18;;:::i;:::-;-1:-1:-1;16596:9:1;;16537:74::o;16616:168::-;;16722:1;16718;16714:6;16710:14;16707:1;16704:21;16699:1;16692:9;16685:17;16681:45;16678:2;;;16729:18;;:::i;:::-;-1:-1:-1;16769:9:1;;16668:116::o;16789:125::-;;16857:1;16854;16851:8;16848:2;;;16862:18;;:::i;:::-;-1:-1:-1;16899:9:1;;16838:76::o;16919:258::-;16991:1;17001:113;17015:6;17012:1;17009:13;17001:113;;;17091:11;;;17085:18;17072:11;;;17065:39;17037:2;17030:10;17001:113;;;17132:6;17129:1;17126:13;17123:2;;;-1:-1:-1;;17167:1:1;17149:16;;17142:27;16972:205::o;17182:136::-;;17249:5;17239:2;;17258:18;;:::i;:::-;-1:-1:-1;;;17294:18:1;;17229:89::o;17323:380::-;17402:1;17398:12;;;;17445;;;17466:2;;17520:4;17512:6;17508:17;17498:27;;17466:2;17573;17565:6;17562:14;17542:18;17539:38;17536:2;;;17619:10;17614:3;17610:20;17607:1;17600:31;17654:4;17651:1;17644:15;17682:4;17679:1;17672:15;17536:2;;17378:325;;;:::o;17708:135::-;;-1:-1:-1;;17768:17:1;;17765:2;;;17788:18;;:::i;:::-;-1:-1:-1;17835:1:1;17824:13;;17755:88::o;17848:112::-;;17906:1;17896:2;;17911:18;;:::i;:::-;-1:-1:-1;17945:9:1;;17886:74::o;17965:127::-;18026:10;18021:3;18017:20;18014:1;18007:31;18057:4;18054:1;18047:15;18081:4;18078:1;18071:15;18097:127;18158:10;18153:3;18149:20;18146:1;18139:31;18189:4;18186:1;18179:15;18213:4;18210:1;18203:15;18229:127;18290:10;18285:3;18281:20;18278:1;18271:31;18321:4;18318:1;18311:15;18345:4;18342:1;18335:15;18361:118;18447:5;18440:13;18433:21;18426:5;18423:32;18413:2;;18469:1;18466;18459:12;18413:2;18403:76;:::o;18484:131::-;-1:-1:-1;;;;;;18558:32:1;;18548:43;;18538:2;;18605:1;18602;18595:12
Swarm Source
ipfs://173c0a86ca7935891710730931d47fe6d97e94e45a8681cb2a4ad7ecaa406979
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.