Contract Overview
Balance:
0 FTM
FTM Value:
$0.00
[ Download CSV Export ]
Latest 1 internal transaction
Parent Txn Hash | Block | From | To | Value | |||
---|---|---|---|---|---|---|---|
0xd927911c4f58fb55c93f6852155e41db87a48a2573b24f55ee820862c72524cc | 53503001 | 79 days 8 hrs ago | Wovven: Deployer | Contract Creation | 0 FTM |
[ Download CSV Export ]
Contract Name:
EldritchEvolved
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at FtmScan.com on 2023-01-09 */ //SPDX-License-Identifier: MIT //____ _ ___ ____ _ ___ ____ _ _ ____ _ ____ _ _ _ ____ // //|___ | | \ |__/ | | | |__| |__/ | [__ | |\ | | __ // //|___ |___ |__/ | \ | | |___ | | | \ | ___] | | \| |__] // /////////////////////////////////////////////////////////////////// pragma solidity ^0.8.7; contract ClampedRandomizer { uint256 private _scopeIndex = 0; //Clamping cache for random TokenID generation in the anti-sniping algo uint256 private immutable _scopeCap; //Size of initial randomized number pool & max generated value (zero indexed) mapping(uint256 => uint256) _swappedIDs; //TokenID cache for random TokenID generation in the anti-sniping algo constructor(uint256 scopeCap) { _scopeCap = scopeCap; } function _genClampedNonce() internal virtual returns(uint256) { uint256 scope = _scopeCap-_scopeIndex; uint256 swap; uint256 result; uint256 i = randomNumber() % scope; //Setup the value to swap in for the selected number if (_swappedIDs[scope-1] == 0){ swap = scope-1; } else { swap = _swappedIDs[scope-1]; } //Select a random number, swap it out with an unselected one then shorten the selection range by 1 if (_swappedIDs[i] == 0){ result = i; _swappedIDs[i] = swap; } else { result = _swappedIDs[i]; _swappedIDs[i] = swap; } _scopeIndex++; return result; } function randomNumber() internal view returns(uint256){ return uint256(keccak256(abi.encodePacked(block.difficulty, block.timestamp))); } } // File @openzeppelin/contracts/utils/introspection/[email protected] 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 ""; } function _baseExtension() 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/token/ERC721/extensions/[email protected] pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File @openzeppelin/contracts/token/ERC721/extensions/[email protected] pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require( index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds" ); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require( index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds" ); return _allTokens[index]; } /** * @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 override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File @openzeppelin/contracts/token/ERC721/extensions/[email protected] pragma solidity ^0.8.0; /** * @dev ERC721 token with storage based token URI management. */ abstract contract ERC721URIStorage is ERC721 { using Strings for uint256; // Optional mapping for token URIs mapping(uint256 => string) private _tokenURIs; /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721URIStorage: URI query for nonexistent token" ); string memory base = _baseURI(); string memory ext = _baseExtension(); return string(abi.encodePacked(base, (tokenId).toString(), ext)); } /** * @dev Sets `_tokenURI` as the tokenURI of `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual { require( _exists(tokenId), "ERC721URIStorage: URI set of nonexistent token" ); _tokenURIs[tokenId] = _tokenURI; } /** * @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 override { super._burn(tokenId); if (bytes(_tokenURIs[tokenId]).length != 0) { delete _tokenURIs[tokenId]; } } } // File @openzeppelin/contracts/security/[email protected] pragma solidity ^0.8.0; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } // 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 @openzeppelin/contracts/token/ERC721/extensions/[email protected] pragma solidity ^0.8.0; /** * @title ERC721 Burnable Token * @dev ERC721 Token that can be irreversibly burned (destroyed). */ abstract contract ERC721Burnable is Context, ERC721 { /** * @dev Burns `tokenId`. See {ERC721-_burn}. * * Requirements: * * - The caller must own `tokenId` or be an approved operator. */ function burn(uint256 tokenId) public virtual { //solhint-disable-next-line max-line-length require( _isApprovedOrOwner(_msgSender(), tokenId), "ERC721Burnable: caller is not owner nor approved" ); _burn(tokenId); } } // File @openzeppelin/contracts/utils/[email protected] pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented or decremented by one. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } } pragma solidity ^0.8.7; /** * @dev Interface for the NFT Royalty Standard */ interface IERC2981 is IERC165 { /** * @dev Called with the sale price to determine how much royalty is owed and to whom. * @param tokenId - the NFT asset queried for royalty information * @param salePrice - the sale price of the NFT asset specified by `tokenId` * @return receiver - address of who should be sent the royalty payment * @return royaltyAmount - the royalty payment amount for `salePrice` */ function royaltyInfo(uint256 tokenId, uint256 salePrice) external view returns (address receiver, uint256 royaltyAmount); } interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } pragma solidity ^0.8.0; contract EldritchEvolved is ERC721, ERC721Enumerable, ERC721URIStorage, IERC2981, Pausable, Ownable, ERC721Burnable, ClampedRandomizer { modifier onlyDevs { require(devFees[msg.sender].percent > 0 , "Dev Only: caller is not the developer"); _; } event WithdrawFees(address indexed devAddress, uint256 amount); event WithdrawWrongTokens(address indexed devAddress,address tokenAddress, uint256 amount); event WithdrawWrongNfts(address indexed devAddress,address tokenAddress, uint256 tokenId); event Migration(address indexed _to, uint256 indexed _tokenId); using Counters for Counters.Counter; using SafeMath for uint256; using Address for address; address public royaltyAddress = 0xA77600A3efDC8E071B6acfc85177552f2f427D92; string public baseURI; string public baseExtension = ".json"; // VARIABLES uint256 public maxSupply = 99; uint256 public maxPerTx = 1; uint256 public maxPerPerson = 10; uint256 public price = 0 ether; uint256 public royalty = 750; // COLLECTED FESS struct DevFee { uint256 percent; uint256 amount; } mapping(address => DevFee) public devFees; address[] private devList; bool public whitelistedOnly = true; mapping(address => uint256) public whiteListed; constructor(address[] memory _devList, uint256[] memory _fees) ERC721("Eldritch Rising EVOLVED", "ERAI") ClampedRandomizer(maxSupply) { require(_devList.length == _fees.length, "Error: invalid data"); uint256 totalFee = 0; for(uint8 i = 0; i <_devList.length; i++) { devList.push(_devList[i]); devFees[_devList[i]] = DevFee(_fees[i], 0); totalFee += _fees[i]; } require(totalFee == 10000,"Error: invalid total fee"); _pause(); } function _baseExtension() internal view override returns (string memory) { return baseExtension; } function _baseURI() internal view override returns (string memory) { return baseURI; } function splitFees(uint256 sentAmount) internal { for(uint8 i = 0;i < devList.length; i++) { address devAddress = devList[i]; uint256 devFee = devFees[devAddress].percent; uint256 devFeeAmount = sentAmount.mul(devFee).div(10000); devFees[devAddress].amount += devFeeAmount; } } function mint(uint256 amount) public payable whenNotPaused { uint256 supply = totalSupply(); require(amount > 0 && amount <= maxPerTx,"Error: max par tx limit"); require(balanceOf(msg.sender) + 1 <= maxPerPerson,"Error: max per address limit"); require(msg.value == price * amount, "Error: invalid price"); require(supply + amount - 1 < maxSupply, "Error: cannot mint more than total supply"); if(whitelistedOnly) require(whiteListed[msg.sender] >= amount,"Error: you are not whitelisted or amount is higher than limit"); for (uint256 i = 0; i < amount; i++) { internalMint(msg.sender); if(whitelistedOnly) whiteListed[msg.sender] -= 1; } splitFees(msg.value); } function tokenURI(uint256 tokenId) public view override(ERC721, ERC721URIStorage) returns (string memory) { return super.tokenURI(tokenId); } function Owned(address _owner) external view returns (uint256[] memory) { uint256 tokenCount = balanceOf(_owner); if (tokenCount == 0) { return new uint256[](0); } else { uint256[] memory result = new uint256[](tokenCount); uint256 index; for (index = 0; index < tokenCount; index++) { result[index] = tokenOfOwnerByIndex(_owner, index); } return result; } } function tokenExists(uint256 _id) external view returns (bool) { return (_exists(_id)); } function royaltyInfo(uint256, uint256 _salePrice) external view override returns (address receiver, uint256 royaltyAmount) { return (royaltyAddress, (_salePrice * royalty) / 10000); } //dev function whiteList(address[] memory _addressList, uint256 count) external onlyOwner { require(_addressList.length > 0,"Error: list is empty"); for(uint256 i = 0;i < _addressList.length; i++) { require(_addressList[i] != address(0), "Address cannot be 0."); whiteListed[_addressList[i]] = count; } } function removeWhiteList(address[] memory addressList) external onlyOwner { require(addressList.length > 0,"Error: list is empty"); for(uint256 i = 0;i<addressList.length;i++) whiteListed[addressList[i]] = 0; } function updateWhitelistStatus() external onlyOwner { whitelistedOnly = !whitelistedOnly; } function updatePausedStatus() external onlyOwner { paused() ? _unpause() : _pause(); } function setMaxPerPerson(uint256 newMaxBuy) external onlyOwner { maxPerPerson = newMaxBuy; } function setMaxPerTx(uint256 newMaxBuy) external onlyOwner { maxPerTx = newMaxBuy; } function setBaseURI(string memory newBaseURI) external onlyOwner { baseURI = newBaseURI; } function setPrice(uint256 newPrice) external onlyOwner { price = newPrice; } function setURI(uint256 tokenId, string memory uri) external onlyOwner { _setTokenURI(tokenId, uri); } function setRoyalty(uint16 _royalty) external onlyOwner { require(_royalty >= 0, "Royalty must be greater than or equal to 0%"); require(_royalty <= 750, "Royalty must be greater than or equal to 7,5%" ); royalty = _royalty; } function setRoyaltyAddress(address _royaltyAddress) external onlyOwner { royaltyAddress = _royaltyAddress; } //Overrides function internalMint(address to) internal { uint256 tokenId = _genClampedNonce() + 1; _safeMint(to, tokenId); } function safeMint(address to) public onlyOwner { internalMint(to); } function supportsInterface(bytes4 interfaceId) public view override(ERC721, ERC721Enumerable, IERC165) returns (bool) { return interfaceId == type(IERC2981).interfaceId || super.supportsInterface(interfaceId); } function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal override(ERC721, ERC721Enumerable) whenNotPaused { ERC721Enumerable._beforeTokenTransfer(from, to, tokenId); } function _burn(uint256 tokenId) internal override(ERC721, ERC721URIStorage) { super._burn(tokenId); } /// @dev withdraw fees function withdraw() external onlyDevs { uint256 amount = devFees[msg.sender].amount; require(amount > 0,"Error: no fees :("); payable(msg.sender).transfer(amount); devFees[msg.sender].amount = 0; emit WithdrawFees(msg.sender,amount); } /// @dev emergency withdraw contract balance to the contract owner function emergencyWithdraw() external onlyOwner { uint256 amount = address(this).balance; require(amount > 0,"Error: no fees :("); payable(msg.sender).transfer(amount); for(uint8 i = 0;i < devList.length; i++) { address devAddress = devList[i]; devFees[devAddress].amount = 0; } emit WithdrawFees(msg.sender,amount); } /// @dev withdraw ERC20 tokens function withdrawTokens(address _tokenContract) external onlyOwner { IERC20 tokenContract = IERC20(_tokenContract); uint256 _amount = tokenContract.balanceOf(address(this)); tokenContract.transfer(owner(), _amount); emit WithdrawWrongTokens(msg.sender,_tokenContract,_amount); } function airdropsToken(address[] memory _addr, uint256 amount) public onlyOwner { for (uint256 i = 0; i < _addr.length; i++) { airdropTokenInternal(amount,_addr[i]); } } function airdropTokenInternal(uint256 amount, address _addr) internal { for (uint256 i = 0; i < amount; i++) { internalMint(_addr); } } /// @dev withdraw ERC721 tokens to the contract owner function withdrawNFT(address _tokenContract, uint256[] memory _id) external onlyOwner { IERC721 tokenContract = IERC721(_tokenContract); for (uint256 i = 0; i < _id.length; i++) { tokenContract.safeTransferFrom(address(this), owner(), _id[i]); emit WithdrawWrongNfts(msg.sender,_tokenContract,_id[i]); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address[]","name":"_devList","type":"address[]"},{"internalType":"uint256[]","name":"_fees","type":"uint256[]"}],"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":"_to","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"Migration","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":"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":true,"internalType":"address","name":"devAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"WithdrawFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"devAddress","type":"address"},{"indexed":false,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"WithdrawWrongNfts","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"devAddress","type":"address"},{"indexed":false,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"WithdrawWrongTokens","type":"event"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"Owned","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addr","type":"address[]"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"airdropsToken","outputs":[],"stateMutability":"nonpayable","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":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"devFees","outputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerPerson","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addressList","type":"address[]"}],"name":"removeWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"royalty","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"royaltyAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"_salePrice","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"royaltyAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"safeMint","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":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxBuy","type":"uint256"}],"name":"setMaxPerPerson","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxBuy","type":"uint256"}],"name":"setMaxPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_royalty","type":"uint16"}],"name":"setRoyalty","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_royaltyAddress","type":"address"}],"name":"setRoyaltyAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string","name":"uri","type":"string"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"tokenExists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"updatePausedStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"updateWhitelistStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addressList","type":"address[]"},{"internalType":"uint256","name":"count","type":"uint256"}],"name":"whiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whiteListed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistedOnly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256[]","name":"_id","type":"uint256[]"}],"name":"withdrawNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"}],"name":"withdrawTokens","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6000600c55600e80546001600160a01b03191673a77600a3efdc8e071b6acfc85177552f2f427d9217905560e0604052600560a081905264173539b7b760d91b60c09081526200005391601091906200040e565b50606360115560016012819055600a60135560006014556102ee6015556018805460ff191690911790553480156200008a57600080fd5b506040516200428038038062004280833981016040819052620000ad916200052e565b601154604080518082018252601781527f456c64726974636820526973696e672045564f4c5645440000000000000000006020808301918252835180850190945260048452634552414960e01b90840152815191929162000111916000916200040e565b508051620001279060019060208401906200040e565b5050600b80546001600160a81b0319163361010081029190911790915560405190915081906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506080528051825114620001cf5760405162461bcd60e51b815260206004820152601360248201527f4572726f723a20696e76616c696420646174610000000000000000000000000060448201526064015b60405180910390fd5b6000805b83518160ff1610156200030c576017848260ff1681518110620001fa57620001fa620006fc565b60209081029190910181015182546001810184556000938452919092200180546001600160a01b0319166001600160a01b039092169190911790556040805180820190915283518190859060ff85169081106200025b576200025b620006fc565b60200260200101518152602001600081525060166000868460ff1681518110620002895762000289620006fc565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000206000820151816000015560208201518160010155905050828160ff1681518110620002e057620002e0620006fc565b602002602001015182620002f591906200066b565b9150806200030381620006c3565b915050620001d3565b508061271014620003605760405162461bcd60e51b815260206004820152601860248201527f4572726f723a20696e76616c696420746f74616c2066656500000000000000006044820152606401620001c6565b6200036a62000373565b50505062000728565b600b5460ff1615620003bb5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401620001c6565b600b805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258620003f13390565b6040516001600160a01b03909116815260200160405180910390a1565b8280546200041c9062000686565b90600052602060002090601f0160209004810192826200044057600085556200048b565b82601f106200045b57805160ff19168380011785556200048b565b828001600101855582156200048b579182015b828111156200048b5782518255916020019190600101906200046e565b50620004999291506200049d565b5090565b5b808211156200049957600081556001016200049e565b600082601f830112620004c657600080fd5b81516020620004df620004d98362000645565b62000612565b80838252828201915082860187848660051b89010111156200050057600080fd5b60005b85811015620005215781518452928401929084019060010162000503565b5090979650505050505050565b600080604083850312156200054257600080fd5b82516001600160401b03808211156200055a57600080fd5b818501915085601f8301126200056f57600080fd5b8151602062000582620004d98362000645565b8083825282820191508286018a848660051b8901011115620005a357600080fd5b600096505b84871015620005de5780516001600160a01b0381168114620005c957600080fd5b835260019690960195918301918301620005a8565b5091880151919650909350505080821115620005f957600080fd5b506200060885828601620004b4565b9150509250929050565b604051601f8201601f191681016001600160401b03811182821017156200063d576200063d62000712565b604052919050565b60006001600160401b0382111562000661576200066162000712565b5060051b60200190565b60008219821115620006815762000681620006e6565b500190565b600181811c908216806200069b57607f821691505b60208210811415620006bd57634e487b7160e01b600052602260045260246000fd5b50919050565b600060ff821660ff811415620006dd57620006dd620006e6565b60010192915050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b608051613b3c6200074460003960006128370152613b3c6000f3fe6080604052600436106103195760003560e01c806370a08231116101ab578063ad2f852a116100f7578063d5abeb0111610095578063f147efeb1161006f578063f147efeb1461092b578063f2fde38b14610974578063f968adbe14610994578063fa0fca84146109aa57600080fd5b8063d5abeb01146108b7578063db2e21bc146108cd578063e985e9c5146108e257600080fd5b8063c6682862116100d1578063c668286214610835578063c6f6f2161461084a578063c87b56dd1461086a578063d2f8dd451461088a57600080fd5b8063ad2f852a146107e0578063b88d4fde14610800578063b9bfa0bc1461082057600080fd5b80639186b425116101645780639bdedea51161013e5780639bdedea514610777578063a035b1fe14610797578063a0712d68146107ad578063a22cb465146107c057600080fd5b80639186b4251461072857806391b7f5ed1461074257806395d89b411461076257600080fd5b806370a082311461067a578063715018a61461069a578063768d7138146106af5780637e0586f1146106c5578063862440e2146106e55780638da5cb5b1461070557600080fd5b8063397457911161026a57806349df728c116102235780635c975abb116101fd5780635c975abb146106185780636352211e1461063057806367dded4d146106505780636c0360eb1461066557600080fd5b806349df728c146105b85780634f6ccce7146105d857806355f804b3146105f857600080fd5b806339745791146105035780633ccfd60b1461052357806340d097c31461053857806342842e0e1461055857806342966c6814610578578063483efda21461059857600080fd5b806318160ddd116102d757806329ee566c116102b157806329ee566c1461046e5780632a55205a146104845780632f745c59146104c357806336e79a5a146104e357600080fd5b806318160ddd1461040f57806323b872dd1461042e57806329413b121461044e57600080fd5b8062923f9e1461031e57806301ffc9a71461035357806306d254da1461037357806306fdde0314610395578063081812fc146103b7578063095ea7b3146103ef575b600080fd5b34801561032a57600080fd5b5061033e61033936600461366d565b6109d7565b60405190151581526020015b60405180910390f35b34801561035f57600080fd5b5061033e61036e3660046135da565b6109e8565b34801561037f57600080fd5b5061039361038e366004613331565b610a0d565b005b3480156103a157600080fd5b506103aa610a68565b60405161034a91906137f8565b3480156103c357600080fd5b506103d76103d236600461366d565b610afa565b6040516001600160a01b03909116815260200161034a565b3480156103fb57600080fd5b5061039361040a366004613519565b610b82565b34801561041b57600080fd5b506008545b60405190815260200161034a565b34801561043a57600080fd5b5061039361044936600461337f565b610c98565b34801561045a57600080fd5b50610393610469366004613578565b610cca565b34801561047a57600080fd5b5061042060155481565b34801561049057600080fd5b506104a461049f3660046136e6565b610d3b565b604080516001600160a01b03909316835260208301919091520161034a565b3480156104cf57600080fd5b506104206104de366004613519565b610d75565b3480156104ef57600080fd5b506103936104fe366004613649565b610e0b565b34801561050f57600080fd5b5061039361051e366004613543565b610eb0565b34801561052f57600080fd5b50610393610f8f565b34801561054457600080fd5b50610393610553366004613331565b6110cd565b34801561056457600080fd5b5061039361057336600461337f565b611109565b34801561058457600080fd5b5061039361059336600461366d565b611124565b3480156105a457600080fd5b506103936105b336600461366d565b61119b565b3480156105c457600080fd5b506103936105d3366004613331565b6111d0565b3480156105e457600080fd5b506104206105f336600461366d565b61136f565b34801561060457600080fd5b50610393610613366004613614565b611402565b34801561062457600080fd5b50600b5460ff1661033e565b34801561063c57600080fd5b506103d761064b36600461366d565b611445565b34801561065c57600080fd5b506103936114bc565b34801561067157600080fd5b506103aa611508565b34801561068657600080fd5b50610420610695366004613331565b611596565b3480156106a657600080fd5b5061039361161d565b3480156106bb57600080fd5b5061042060135481565b3480156106d157600080fd5b506103936106e0366004613578565b61169d565b3480156106f157600080fd5b5061039361070036600461369f565b6117ea565b34801561071157600080fd5b50600b5461010090046001600160a01b03166103d7565b34801561073457600080fd5b5060185461033e9060ff1681565b34801561074e57600080fd5b5061039361075d36600461366d565b611824565b34801561076e57600080fd5b506103aa611859565b34801561078357600080fd5b50610393610792366004613437565b611868565b3480156107a357600080fd5b5061042060145481565b6103936107bb36600461366d565b6119d9565b3480156107cc57600080fd5b506103936107db3660046134e2565b611c88565b3480156107ec57600080fd5b50600e546103d7906001600160a01b031681565b34801561080c57600080fd5b5061039361081b3660046133bb565b611d4d565b34801561082c57600080fd5b50610393611d7f565b34801561084157600080fd5b506103aa611dc3565b34801561085657600080fd5b5061039361086536600461366d565b611dd0565b34801561087657600080fd5b506103aa61088536600461366d565b611e05565b34801561089657600080fd5b506108aa6108a5366004613331565b611e10565b60405161034a91906137b4565b3480156108c357600080fd5b5061042060115481565b3480156108d957600080fd5b50610393611ecf565b3480156108ee57600080fd5b5061033e6108fd36600461334c565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561093757600080fd5b5061095f610946366004613331565b6016602052600090815260409020805460019091015482565b6040805192835260208301919091520161034a565b34801561098057600080fd5b5061039361098f366004613331565b612002565b3480156109a057600080fd5b5061042060125481565b3480156109b657600080fd5b506104206109c5366004613331565b60196020526000908152604090205481565b60006109e2826120fe565b92915050565b60006001600160e01b0319821663152a902d60e11b14806109e257506109e28261211b565b600b546001600160a01b03610100909104163314610a465760405162461bcd60e51b8152600401610a3d90613887565b60405180910390fd5b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b606060008054610a77906139f0565b80601f0160208091040260200160405190810160405280929190818152602001828054610aa3906139f0565b8015610af05780601f10610ac557610100808354040283529160200191610af0565b820191906000526020600020905b815481529060010190602001808311610ad357829003601f168201915b5050505050905090565b6000610b05826120fe565b610b665760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610a3d565b506000908152600460205260409020546001600160a01b031690565b6000610b8d82611445565b9050806001600160a01b0316836001600160a01b03161415610bfb5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610a3d565b336001600160a01b0382161480610c175750610c1781336108fd565b610c895760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610a3d565b610c938383612140565b505050565b610ca3335b826121ae565b610cbf5760405162461bcd60e51b8152600401610a3d906138bc565b610c93838383612298565b600b546001600160a01b03610100909104163314610cfa5760405162461bcd60e51b8152600401610a3d90613887565b60005b8251811015610c9357610d2982848381518110610d1c57610d1c613ab6565b6020026020010151612443565b80610d3381613a25565b915050610cfd565b600e5460155460009182916001600160a01b039091169061271090610d60908661398e565b610d6a919061397a565b915091509250929050565b6000610d8083611596565b8210610de25760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610a3d565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600b546001600160a01b03610100909104163314610e3b5760405162461bcd60e51b8152600401610a3d90613887565b6102ee8161ffff161115610ea75760405162461bcd60e51b815260206004820152602d60248201527f526f79616c7479206d7573742062652067726561746572207468616e206f722060448201526c657175616c20746f20372c352560981b6064820152608401610a3d565b61ffff16601555565b600b546001600160a01b03610100909104163314610ee05760405162461bcd60e51b8152600401610a3d90613887565b6000815111610f285760405162461bcd60e51b81526020600482015260146024820152734572726f723a206c69737420697320656d70747960601b6044820152606401610a3d565b60005b8151811015610f8b57600060196000848481518110610f4c57610f4c613ab6565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020819055508080610f8390613a25565b915050610f2b565b5050565b33600090815260166020526040902054610ff95760405162461bcd60e51b815260206004820152602560248201527f446576204f6e6c793a2063616c6c6572206973206e6f742074686520646576656044820152643637b832b960d91b6064820152608401610a3d565b336000908152601660205260409020600101548061104d5760405162461bcd60e51b815260206004820152601160248201527008ae4e4dee47440dcde40cccacae640745607b1b6044820152606401610a3d565b604051339082156108fc029083906000818181858888f1935050505015801561107a573d6000803e3d6000fd5b503360008181526016602052604080822060010191909155517f9bba815921f12cb7b1408e14b5ade745234397d39623ae5e7c82d693cb45815f906110c29084815260200190565b60405180910390a250565b600b546001600160a01b036101009091041633146110fd5760405162461bcd60e51b8152600401610a3d90613887565b61110681612469565b50565b610c9383838360405180602001604052806000815250611d4d565b61112d33610c9d565b6111925760405162461bcd60e51b815260206004820152603060248201527f4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f7760448201526f1b995c881b9bdc88185c1c1c9bdd995960821b6064820152608401610a3d565b6111068161248a565b600b546001600160a01b036101009091041633146111cb5760405162461bcd60e51b8152600401610a3d90613887565b601355565b600b546001600160a01b036101009091041633146112005760405162461bcd60e51b8152600401610a3d90613887565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a082319060240160206040518083038186803b15801561124457600080fd5b505afa158015611258573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061127c9190613686565b9050816001600160a01b031663a9059cbb6112a5600b546001600160a01b036101009091041690565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101849052604401602060405180830381600087803b1580156112ed57600080fd5b505af1158015611301573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061132591906135bd565b50604080516001600160a01b03851681526020810183905233917f5aa586896a67fb05c3b86276f66eecee7da00719d0e7299c403596fa2ec58ca4910160405180910390a2505050565b600061137a60085490565b82106113dd5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610a3d565b600882815481106113f0576113f0613ab6565b90600052602060002001549050919050565b600b546001600160a01b036101009091041633146114325760405162461bcd60e51b8152600401610a3d90613887565b8051610f8b90600f906020840190613155565b6000818152600260205260408120546001600160a01b0316806109e25760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610a3d565b600b546001600160a01b036101009091041633146114ec5760405162461bcd60e51b8152600401610a3d90613887565b600b5460ff16611500576114fe612493565b565b6114fe612508565b600f8054611515906139f0565b80601f0160208091040260200160405190810160405280929190818152602001828054611541906139f0565b801561158e5780601f106115635761010080835404028352916020019161158e565b820191906000526020600020905b81548152906001019060200180831161157157829003601f168201915b505050505081565b60006001600160a01b0382166116015760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610a3d565b506001600160a01b031660009081526003602052604090205490565b600b546001600160a01b0361010090910416331461164d5760405162461bcd60e51b8152600401610a3d90613887565b600b5460405160009161010090046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600b8054610100600160a81b0319169055565b600b546001600160a01b036101009091041633146116cd5760405162461bcd60e51b8152600401610a3d90613887565b60008251116117155760405162461bcd60e51b81526020600482015260146024820152734572726f723a206c69737420697320656d70747960601b6044820152606401610a3d565b60005b8251811015610c935760006001600160a01b031683828151811061173e5761173e613ab6565b60200260200101516001600160a01b031614156117945760405162461bcd60e51b815260206004820152601460248201527320b2323932b9b99031b0b73737ba10313290181760611b6044820152606401610a3d565b81601960008584815181106117ab576117ab613ab6565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000208190555080806117e290613a25565b915050611718565b600b546001600160a01b0361010090910416331461181a5760405162461bcd60e51b8152600401610a3d90613887565b610f8b8282612582565b600b546001600160a01b036101009091041633146118545760405162461bcd60e51b8152600401610a3d90613887565b601455565b606060018054610a77906139f0565b600b546001600160a01b036101009091041633146118985760405162461bcd60e51b8152600401610a3d90613887565b8160005b82518110156119d357816001600160a01b03166342842e0e306118cd600b546001600160a01b036101009091041690565b8685815181106118df576118df613ab6565b60209081029190910101516040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401600060405180830381600087803b15801561193957600080fd5b505af115801561194d573d6000803e3d6000fd5b50505050336001600160a01b03167fb8dbf4ce06446b88ef02ffd28a948c2637ac80fb0bd4d3a31c70878c1046eb7f8585848151811061198f5761198f613ab6565b60200260200101516040516119b99291906001600160a01b03929092168252602082015260400190565b60405180910390a2806119cb81613a25565b91505061189c565b50505050565b600b5460ff16156119fc5760405162461bcd60e51b8152600401610a3d9061385d565b6000611a0760085490565b9050600082118015611a1b57506012548211155b611a675760405162461bcd60e51b815260206004820152601760248201527f4572726f723a206d617820706172207478206c696d69740000000000000000006044820152606401610a3d565b601354611a7333611596565b611a7e906001613962565b1115611acc5760405162461bcd60e51b815260206004820152601c60248201527f4572726f723a206d6178207065722061646472657373206c696d6974000000006044820152606401610a3d565b81601454611ada919061398e565b3414611b1f5760405162461bcd60e51b81526020600482015260146024820152734572726f723a20696e76616c696420707269636560601b6044820152606401610a3d565b6011546001611b2e8484613962565b611b3891906139ad565b10611b975760405162461bcd60e51b815260206004820152602960248201527f4572726f723a2063616e6e6f74206d696e74206d6f7265207468616e20746f74604482015268616c20737570706c7960b81b6064820152608401610a3d565b60185460ff1615611c275733600090815260196020526040902054821115611c275760405162461bcd60e51b815260206004820152603d60248201527f4572726f723a20796f7520617265206e6f742077686974656c6973746564206f60448201527f7220616d6f756e7420697320686967686572207468616e206c696d69740000006064820152608401610a3d565b60005b82811015611c7e57611c3b33612469565b60185460ff1615611c6c57336000908152601960205260408120805460019290611c669084906139ad565b90915550505b80611c7681613a25565b915050611c2a565b50610f8b3461260d565b6001600160a01b038216331415611ce15760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610a3d565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b611d5733836121ae565b611d735760405162461bcd60e51b8152600401610a3d906138bc565b6119d3848484846126c0565b600b546001600160a01b03610100909104163314611daf5760405162461bcd60e51b8152600401610a3d90613887565b6018805460ff19811660ff90911615179055565b60108054611515906139f0565b600b546001600160a01b03610100909104163314611e005760405162461bcd60e51b8152600401610a3d90613887565b601255565b60606109e2826126f3565b60606000611e1d83611596565b905080611e3e5760408051600080825260208201909252905b509392505050565b60008167ffffffffffffffff811115611e5957611e59613acc565b604051908082528060200260200182016040528015611e82578160200160208202803683370190505b50905060005b82811015611e3657611e9a8582610d75565b828281518110611eac57611eac613ab6565b602090810291909101015280611ec181613a25565b915050611e88565b50919050565b600b546001600160a01b03610100909104163314611eff5760405162461bcd60e51b8152600401610a3d90613887565b4780611f415760405162461bcd60e51b815260206004820152601160248201527008ae4e4dee47440dcde40cccacae640745607b1b6044820152606401610a3d565b604051339082156108fc029083906000818181858888f19350505050158015611f6e573d6000803e3d6000fd5b5060005b60175460ff82161015611fcf57600060178260ff1681548110611f9757611f97613ab6565b60009182526020808320909101546001600160a01b031682526016905260408120600101555080611fc781613a40565b915050611f72565b5060405181815233907f9bba815921f12cb7b1408e14b5ade745234397d39623ae5e7c82d693cb45815f906020016110c2565b600b546001600160a01b036101009091041633146120325760405162461bcd60e51b8152600401610a3d90613887565b6001600160a01b0381166120975760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a3d565b600b546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600b80546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6000908152600260205260409020546001600160a01b0316151590565b60006001600160e01b0319821663780e9d6360e01b14806109e257506109e2826127b1565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061217582611445565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006121b9826120fe565b61221a5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610a3d565b600061222583611445565b9050806001600160a01b0316846001600160a01b031614806122605750836001600160a01b031661225584610afa565b6001600160a01b0316145b8061229057506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166122ab82611445565b6001600160a01b0316146123135760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610a3d565b6001600160a01b0382166123755760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610a3d565b612380838383612801565b61238b600082612140565b6001600160a01b03831660009081526003602052604081208054600192906123b49084906139ad565b90915550506001600160a01b03821660009081526003602052604081208054600192906123e2908490613962565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60005b82811015610c935761245782612469565b8061246181613a25565b915050612446565b600061247361282f565b61247e906001613962565b9050610f8b8282612936565b61110681612950565b600b5460ff16156124b65760405162461bcd60e51b8152600401610a3d9061385d565b600b805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586124eb3390565b6040516001600160a01b03909116815260200160405180910390a1565b600b5460ff166125515760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610a3d565b600b805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336124eb565b61258b826120fe565b6125ee5760405162461bcd60e51b815260206004820152602e60248201527f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60448201526d32bc34b9ba32b73a103a37b5b2b760911b6064820152608401610a3d565b6000828152600a602090815260409091208251610c9392840190613155565b60005b60175460ff82161015610f8b57600060178260ff168154811061263557612635613ab6565b60009182526020808320909101546001600160a01b0316808352601690915260408220549092509061267361271061266d8785612990565b90612a16565b6001600160a01b0384166000908152601660205260408120600101805492935083929091906126a3908490613962565b9250508190555050505080806126b890613a40565b915050612610565b6126cb848484612298565b6126d784848484612a58565b6119d35760405162461bcd60e51b8152600401610a3d9061380b565b60606126fe826120fe565b6127645760405162461bcd60e51b815260206004820152603160248201527f45524337323155524953746f726167653a2055524920717565727920666f72206044820152703737b732bc34b9ba32b73a103a37b5b2b760791b6064820152608401610a3d565b600061276e612b65565b9050600061277a612b74565b90508161278685612b83565b8260405160200161279993929190613734565b60405160208183030381529060405292505050919050565b60006001600160e01b031982166380ac58cd60e01b14806127e257506001600160e01b03198216635b5e139f60e01b145b806109e257506301ffc9a760e01b6001600160e01b03198316146109e2565b600b5460ff16156128245760405162461bcd60e51b8152600401610a3d9061385d565b610c93838383612c81565b600080600c547f000000000000000000000000000000000000000000000000000000000000000061286091906139ad565b9050600080600083612870612d39565b61287a9190613a60565b9050600d600061288b6001876139ad565b815260200190815260200160002054600014156128b4576128ad6001856139ad565b92506128d5565b600d60006128c36001876139ad565b81526020019081526020016000205492505b6000818152600d6020526040902054612901576000818152600d60205260409020839055905080612918565b6000818152600d6020526040902080549084905591505b600c805490600061292883613a25565b909155509195945050505050565b610f8b828260405180602001604052806000815250612d75565b61295981612da8565b6000818152600a602052604090208054612972906139f0565b159050611106576000818152600a60205260408120611106916131d9565b60008261299f575060006109e2565b60006129ab838561398e565b9050826129b8858361397a565b14612a0f5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610a3d565b9392505050565b6000612a0f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612e4f565b60006001600160a01b0384163b15612b5a57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612a9c903390899088908890600401613777565b602060405180830381600087803b158015612ab657600080fd5b505af1925050508015612ae6575060408051601f3d908101601f19168201909252612ae3918101906135f7565b60015b612b40573d808015612b14576040519150601f19603f3d011682016040523d82523d6000602084013e612b19565b606091505b508051612b385760405162461bcd60e51b8152600401610a3d9061380b565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612290565b506001949350505050565b6060600f8054610a77906139f0565b606060108054610a77906139f0565b606081612ba75750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612bd15780612bbb81613a25565b9150612bca9050600a8361397a565b9150612bab565b60008167ffffffffffffffff811115612bec57612bec613acc565b6040519080825280601f01601f191660200182016040528015612c16576020820181803683370190505b5090505b841561229057612c2b6001836139ad565b9150612c38600a86613a60565b612c43906030613962565b60f81b818381518110612c5857612c58613ab6565b60200101906001600160f81b031916908160001a905350612c7a600a8661397a565b9450612c1a565b6001600160a01b038316612cdc57612cd781600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b612cff565b816001600160a01b0316836001600160a01b031614612cff57612cff8382612e86565b6001600160a01b038216612d1657610c9381612f23565b826001600160a01b0316826001600160a01b031614610c9357610c938282612fd2565b60004442604051602001612d57929190918252602082015260400190565b6040516020818303038152906040528051906020012060001c905090565b612d7f8383613016565b612d8c6000848484612a58565b610c935760405162461bcd60e51b8152600401610a3d9061380b565b6000612db382611445565b9050612dc181600084612801565b612dcc600083612140565b6001600160a01b0381166000908152600360205260408120805460019290612df59084906139ad565b909155505060008281526002602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b60008183612e705760405162461bcd60e51b8152600401610a3d91906137f8565b506000612e7d848661397a565b95945050505050565b60006001612e9384611596565b612e9d91906139ad565b600083815260076020526040902054909150808214612ef0576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090612f35906001906139ad565b60008381526009602052604081205460088054939450909284908110612f5d57612f5d613ab6565b906000526020600020015490508060088381548110612f7e57612f7e613ab6565b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480612fb657612fb6613aa0565b6001900381819060005260206000200160009055905550505050565b6000612fdd83611596565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b03821661306c5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610a3d565b613075816120fe565b156130c25760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610a3d565b6130ce60008383612801565b6001600160a01b03821660009081526003602052604081208054600192906130f7908490613962565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054613161906139f0565b90600052602060002090601f01602090048101928261318357600085556131c9565b82601f1061319c57805160ff19168380011785556131c9565b828001600101855582156131c9579182015b828111156131c95782518255916020019190600101906131ae565b506131d592915061320f565b5090565b5080546131e5906139f0565b6000825580601f106131f5575050565b601f01602090049060005260206000209081019061110691905b5b808211156131d55760008155600101613210565b600067ffffffffffffffff83111561323e5761323e613acc565b613251601f8401601f191660200161390d565b905082815283838301111561326557600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b038116811461329357600080fd5b919050565b600082601f8301126132a957600080fd5b813560206132be6132b98361393e565b61390d565b80838252828201915082860187848660051b89010111156132de57600080fd5b60005b85811015613304576132f28261327c565b845292840192908401906001016132e1565b5090979650505050505050565b600082601f83011261332257600080fd5b612a0f83833560208501613224565b60006020828403121561334357600080fd5b612a0f8261327c565b6000806040838503121561335f57600080fd5b6133688361327c565b91506133766020840161327c565b90509250929050565b60008060006060848603121561339457600080fd5b61339d8461327c565b92506133ab6020850161327c565b9150604084013590509250925092565b600080600080608085870312156133d157600080fd5b6133da8561327c565b93506133e86020860161327c565b925060408501359150606085013567ffffffffffffffff81111561340b57600080fd5b8501601f8101871361341c57600080fd5b61342b87823560208401613224565b91505092959194509250565b6000806040838503121561344a57600080fd5b6134538361327c565b915060208084013567ffffffffffffffff81111561347057600080fd5b8401601f8101861361348157600080fd5b803561348f6132b98261393e565b80828252848201915084840189868560051b87010111156134af57600080fd5b600094505b838510156134d25780358352600194909401939185019185016134b4565b5080955050505050509250929050565b600080604083850312156134f557600080fd5b6134fe8361327c565b9150602083013561350e81613ae2565b809150509250929050565b6000806040838503121561352c57600080fd5b6135358361327c565b946020939093013593505050565b60006020828403121561355557600080fd5b813567ffffffffffffffff81111561356c57600080fd5b61229084828501613298565b6000806040838503121561358b57600080fd5b823567ffffffffffffffff8111156135a257600080fd5b6135ae85828601613298565b95602094909401359450505050565b6000602082840312156135cf57600080fd5b8151612a0f81613ae2565b6000602082840312156135ec57600080fd5b8135612a0f81613af0565b60006020828403121561360957600080fd5b8151612a0f81613af0565b60006020828403121561362657600080fd5b813567ffffffffffffffff81111561363d57600080fd5b61229084828501613311565b60006020828403121561365b57600080fd5b813561ffff81168114612a0f57600080fd5b60006020828403121561367f57600080fd5b5035919050565b60006020828403121561369857600080fd5b5051919050565b600080604083850312156136b257600080fd5b82359150602083013567ffffffffffffffff8111156136d057600080fd5b6136dc85828601613311565b9150509250929050565b600080604083850312156136f957600080fd5b50508035926020909101359150565b600081518084526137208160208601602086016139c4565b601f01601f19169290920160200192915050565b600084516137468184602089016139c4565b84519083019061375a8183602089016139c4565b845191019061376d8183602088016139c4565b0195945050505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906137aa90830184613708565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156137ec578351835292840192918401916001016137d0565b50909695505050505050565b602081526000612a0f6020830184613708565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff8111828210171561393657613936613acc565b604052919050565b600067ffffffffffffffff82111561395857613958613acc565b5060051b60200190565b6000821982111561397557613975613a74565b500190565b60008261398957613989613a8a565b500490565b60008160001904831182151516156139a8576139a8613a74565b500290565b6000828210156139bf576139bf613a74565b500390565b60005b838110156139df5781810151838201526020016139c7565b838111156119d35750506000910152565b600181811c90821680613a0457607f821691505b60208210811415611ec957634e487b7160e01b600052602260045260246000fd5b6000600019821415613a3957613a39613a74565b5060010190565b600060ff821660ff811415613a5757613a57613a74565b60010192915050565b600082613a6f57613a6f613a8a565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b801515811461110657600080fd5b6001600160e01b03198116811461110657600080fdfea26469706673582212201fbe8b16e193d39cec47f7ecd393529dd8b65706fc872bc0dd8fd20b3ce9684d64736f6c63430008070033000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000a77600a3efdc8e071b6acfc85177552f2f427d9200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000002710
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000a77600a3efdc8e071b6acfc85177552f2f427d9200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000002710
-----Decoded View---------------
Arg [0] : _devList (address[]): 0xa77600a3efdc8e071b6acfc85177552f2f427d92
Arg [1] : _fees (uint256[]): 10000
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [3] : 000000000000000000000000a77600a3efdc8e071b6acfc85177552f2f427d92
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [5] : 0000000000000000000000000000000000000000000000000000000000002710
Deployed ByteCode Sourcemap
56334:9351:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;60498:103;;;;;;;;;;-1:-1:-1;60498:103:0;;;;;:::i;:::-;;:::i;:::-;;;11032:14:1;;11025:22;11007:41;;10995:2;10980:18;60498:103:0;;;;;;;;62973:292;;;;;;;;;;-1:-1:-1;62973:292:0;;;;;:::i;:::-;;:::i;62571:122::-;;;;;;;;;;-1:-1:-1;62571:122:0;;;;;:::i;:::-;;:::i;:::-;;24548:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;26238:308::-;;;;;;;;;;-1:-1:-1;26238:308:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;9034:32:1;;;9016:51;;9004:2;8989:18;26238:308:0;8870:203:1;25761:411:0;;;;;;;;;;-1:-1:-1;25761:411:0;;;;;:::i;:::-;;:::i;39322:113::-;;;;;;;;;;-1:-1:-1;39410:10:0;:17;39322:113;;;24740:25:1;;;24728:2;24713:18;39322:113:0;24594:177:1;27297:376:0;;;;;;;;;;-1:-1:-1;27297:376:0;;;;;:::i;:::-;;:::i;64864:205::-;;;;;;;;;;-1:-1:-1;64864:205:0;;;;;:::i;:::-;;:::i;57443:28::-;;;;;;;;;;;;;;;;60609:238;;;;;;;;;;-1:-1:-1;60609:238:0;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;10143:32:1;;;10125:51;;10207:2;10192:18;;10185:34;;;;10098:18;60609:238:0;9951:274:1;38903:343:0;;;;;;;;;;-1:-1:-1;38903:343:0;;;;;:::i;:::-;;:::i;62301:258::-;;;;;;;;;;-1:-1:-1;62301:258:0;;;;;:::i;:::-;;:::i;61259:242::-;;;;;;;;;;-1:-1:-1;61259:242:0;;;;;:::i;:::-;;:::i;63709:285::-;;;;;;;;;;;;;:::i;62873:82::-;;;;;;;;;;-1:-1:-1;62873:82:0;;;;;:::i;:::-;;:::i;27744:185::-;;;;;;;;;;-1:-1:-1;27744:185:0;;;;;:::i;:::-;;:::i;51774:282::-;;;;;;;;;;-1:-1:-1;51774:282:0;;;;;:::i;:::-;;:::i;61731:106::-;;;;;;;;;;-1:-1:-1;61731:106:0;;;;;:::i;:::-;;:::i;64533:319::-;;;;;;;;;;-1:-1:-1;64533:319:0;;;;;:::i;:::-;;:::i;39512:320::-;;;;;;;;;;-1:-1:-1;39512:320:0;;;;;:::i;:::-;;:::i;61951:104::-;;;;;;;;;;-1:-1:-1;61951:104:0;;;;;:::i;:::-;;:::i;47771:86::-;;;;;;;;;;-1:-1:-1;47842:7:0;;;;47771:86;;24155:326;;;;;;;;;;-1:-1:-1;24155:326:0;;;;;:::i;:::-;;:::i;61622:101::-;;;;;;;;;;;;;:::i;57198:21::-;;;;;;;;;;;;;:::i;23798:295::-;;;;;;;;;;-1:-1:-1;23798:295:0;;;;;:::i;:::-;;:::i;50728:148::-;;;;;;;;;;;;;:::i;57363:32::-;;;;;;;;;;;;;;;;60881:370;;;;;;;;;;-1:-1:-1;60881:370:0;;;;;:::i;:::-;;:::i;62171:116::-;;;;;;;;;;-1:-1:-1;62171:116:0;;;;;:::i;:::-;;:::i;50077:87::-;;;;;;;;;;-1:-1:-1;50150:6:0;;;;;-1:-1:-1;;;;;50150:6:0;50077:87;;57664:34;;;;;;;;;;-1:-1:-1;57664:34:0;;;;;;;;62063:90;;;;;;;;;;-1:-1:-1;62063:90:0;;;;;:::i;:::-;;:::i;24717:104::-;;;;;;;;;;;;;:::i;65319:363::-;;;;;;;;;;-1:-1:-1;65319:363:0;;;;;:::i;:::-;;:::i;57402:30::-;;;;;;;;;;;;;;;;58916:828;;;;;;:::i;:::-;;:::i;26618:327::-;;;;;;;;;;-1:-1:-1;26618:327:0;;;;;:::i;:::-;;:::i;57110:74::-;;;;;;;;;;-1:-1:-1;57110:74:0;;;;-1:-1:-1;;;;;57110:74:0;;;28000:365;;;;;;;;;;-1:-1:-1;28000:365:0;;;;;:::i;:::-;;:::i;61509:105::-;;;;;;;;;;;;;:::i;57226:37::-;;;;;;;;;;;;;:::i;61845:98::-;;;;;;;;;;-1:-1:-1;61845:98:0;;;;;:::i;:::-;;:::i;59760:196::-;;;;;;;;;;-1:-1:-1;59760:196:0;;;;;:::i;:::-;;:::i;59964:526::-;;;;;;;;;;-1:-1:-1;59964:526:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;57293:29::-;;;;;;;;;;;;;;;;64074:403;;;;;;;;;;;;;:::i;27016:214::-;;;;;;;;;;-1:-1:-1;27016:214:0;;;;;:::i;:::-;-1:-1:-1;;;;;27187:25:0;;;27158:4;27187:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;27016:214;57582:41;;;;;;;;;;-1:-1:-1;57582:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;24950:25:1;;;25006:2;24991:18;;24984:34;;;;24923:18;57582:41:0;24776:248:1;51031:281:0;;;;;;;;;;-1:-1:-1;51031:281:0;;;;;:::i;:::-;;:::i;57329:27::-;;;;;;;;;;;;;;;;57705:46;;;;;;;;;;-1:-1:-1;57705:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;60498:103;60555:4;60580:12;60588:3;60580:7;:12::i;:::-;60572:21;60498:103;-1:-1:-1;;60498:103:0:o;62973:292::-;63121:4;-1:-1:-1;;;;;;63163:41:0;;-1:-1:-1;;;63163:41:0;;:94;;;63221:36;63245:11;63221:23;:36::i;62571:122::-;50150:6;;-1:-1:-1;;;;;50150:6:0;;;;;18683:10;50297:23;50289:68;;;;-1:-1:-1;;;50289:68:0;;;;;;;:::i;:::-;;;;;;;;;62653:14:::1;:32:::0;;-1:-1:-1;;;;;;62653:32:0::1;-1:-1:-1::0;;;;;62653:32:0;;;::::1;::::0;;;::::1;::::0;;62571:122::o;24548:100::-;24602:13;24635:5;24628:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24548:100;:::o;26238:308::-;26359:7;26406:16;26414:7;26406;:16::i;:::-;26384:110;;;;-1:-1:-1;;;26384:110:0;;19860:2:1;26384:110:0;;;19842:21:1;19899:2;19879:18;;;19872:30;19938:34;19918:18;;;19911:62;-1:-1:-1;;;19989:18:1;;;19982:42;20041:19;;26384:110:0;19658:408:1;26384:110:0;-1:-1:-1;26514:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;26514:24:0;;26238:308::o;25761:411::-;25842:13;25858:23;25873:7;25858:14;:23::i;:::-;25842:39;;25906:5;-1:-1:-1;;;;;25900:11:0;:2;-1:-1:-1;;;;;25900:11:0;;;25892:57;;;;-1:-1:-1;;;25892:57:0;;21750:2:1;25892:57:0;;;21732:21:1;21789:2;21769:18;;;21762:30;21828:34;21808:18;;;21801:62;-1:-1:-1;;;21879:18:1;;;21872:31;21920:19;;25892:57:0;21548:397:1;25892:57:0;18683:10;-1:-1:-1;;;;;25984:21:0;;;;:62;;-1:-1:-1;26009:37:0;26026:5;18683:10;27016:214;:::i;26009:37::-;25962:168;;;;-1:-1:-1;;;25962:168:0;;16200:2:1;25962:168:0;;;16182:21:1;16239:2;16219:18;;;16212:30;16278:34;16258:18;;;16251:62;16349:26;16329:18;;;16322:54;16393:19;;25962:168:0;15998:420:1;25962:168:0;26143:21;26152:2;26156:7;26143:8;:21::i;:::-;25831:341;25761:411;;:::o;27297:376::-;27506:41;18683:10;27525:12;27539:7;27506:18;:41::i;:::-;27484:140;;;;-1:-1:-1;;;27484:140:0;;;;;;;:::i;:::-;27637:28;27647:4;27653:2;27657:7;27637:9;:28::i;64864:205::-;50150:6;;-1:-1:-1;;;;;50150:6:0;;;;;18683:10;50297:23;50289:68;;;;-1:-1:-1;;;50289:68:0;;;;;;;:::i;:::-;64960:9:::1;64955:107;64979:5;:12;64975:1;:16;64955:107;;;65013:37;65034:6;65041:5;65047:1;65041:8;;;;;;;;:::i;:::-;;;;;;;65013:20;:37::i;:::-;64993:3:::0;::::1;::::0;::::1;:::i;:::-;;;;64955:107;;60609:238:::0;60792:14;;60822:7;;60727:16;;;;-1:-1:-1;;;;;60792:14:0;;;;60833:5;;60809:20;;:10;:20;:::i;:::-;60808:30;;;;:::i;:::-;60784:55;;;;60609:238;;;;;:::o;38903:343::-;39045:7;39100:23;39117:5;39100:16;:23::i;:::-;39092:5;:31;39070:124;;;;-1:-1:-1;;;39070:124:0;;11834:2:1;39070:124:0;;;11816:21:1;11873:2;11853:18;;;11846:30;11912:34;11892:18;;;11885:62;-1:-1:-1;;;11963:18:1;;;11956:41;12014:19;;39070:124:0;11632:407:1;39070:124:0;-1:-1:-1;;;;;;39212:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;38903:343::o;62301:258::-;50150:6;;-1:-1:-1;;;;;50150:6:0;;;;;18683:10;50297:23;50289:68;;;;-1:-1:-1;;;50289:68:0;;;;;;;:::i;:::-;62468:3:::1;62456:8;:15;;;;62448:74;;;::::0;-1:-1:-1;;;62448:74:0;;15441:2:1;62448:74:0::1;::::0;::::1;15423:21:1::0;15480:2;15460:18;;;15453:30;15519:34;15499:18;;;15492:62;-1:-1:-1;;;15570:18:1;;;15563:43;15623:19;;62448:74:0::1;15239:409:1::0;62448:74:0::1;62533:18;;:7;:18:::0;62301:258::o;61259:242::-;50150:6;;-1:-1:-1;;;;;50150:6:0;;;;;18683:10;50297:23;50289:68;;;;-1:-1:-1;;;50289:68:0;;;;;;;:::i;:::-;61373:1:::1;61352:11;:18;:22;61344:54;;;::::0;-1:-1:-1;;;61344:54:0;;22152:2:1;61344:54:0::1;::::0;::::1;22134:21:1::0;22191:2;22171:18;;;22164:30;-1:-1:-1;;;22210:18:1;;;22203:50;22270:18;;61344:54:0::1;21950:344:1::0;61344:54:0::1;61413:9;61409:84;61429:11;:18;61427:1;:20;61409:84;;;61492:1;61462:11;:27;61474:11;61486:1;61474:14;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;61462:27:0::1;-1:-1:-1::0;;;;;61462:27:0::1;;;;;;;;;;;;:31;;;;61448:3;;;;;:::i;:::-;;;;61409:84;;;;61259:242:::0;:::o;63709:285::-;56563:10;56585:1;56555:19;;;:7;:19;;;;;:27;56547:82;;;;-1:-1:-1;;;56547:82:0;;18273:2:1;56547:82:0;;;18255:21:1;18312:2;18292:18;;;18285:30;18351:34;18331:18;;;18324:62;-1:-1:-1;;;18402:18:1;;;18395:35;18447:19;;56547:82:0;18071:401:1;56547:82:0;63783:10:::1;63758:14;63775:19:::0;;;:7:::1;:19;::::0;;;;:26:::1;;::::0;63820:10;63812:39:::1;;;::::0;-1:-1:-1;;;63812:39:0;;24450:2:1;63812:39:0::1;::::0;::::1;24432:21:1::0;24489:2;24469:18;;;24462:30;-1:-1:-1;;;24508:18:1;;;24501:47;24565:18;;63812:39:0::1;24248:341:1::0;63812:39:0::1;63862:36;::::0;63870:10:::1;::::0;63862:36;::::1;;;::::0;63891:6;;63862:36:::1;::::0;;;63891:6;63870:10;63862:36;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;63917:10:0::1;63938:1;63909:19:::0;;;:7:::1;:19;::::0;;;;;:26:::1;;:30:::0;;;;63955:31;::::1;::::0;::::1;::::0;63979:6;24740:25:1;;24728:2;24713:18;;24594:177;63955:31:0::1;;;;;;;;63747:247;63709:285::o:0;62873:82::-;50150:6;;-1:-1:-1;;;;;50150:6:0;;;;;18683:10;50297:23;50289:68;;;;-1:-1:-1;;;50289:68:0;;;;;;;:::i;:::-;62931:16:::1;62944:2;62931:12;:16::i;:::-;62873:82:::0;:::o;27744:185::-;27882:39;27899:4;27905:2;27909:7;27882:39;;;;;;;;;;;;:16;:39::i;51774:282::-;51906:41;18683:10;51925:12;18603:98;51906:41;51884:139;;;;-1:-1:-1;;;51884:139:0;;23684:2:1;51884:139:0;;;23666:21:1;23723:2;23703:18;;;23696:30;23762:34;23742:18;;;23735:62;-1:-1:-1;;;23813:18:1;;;23806:46;23869:19;;51884:139:0;23482:412:1;51884:139:0;52034:14;52040:7;52034:5;:14::i;61731:106::-;50150:6;;-1:-1:-1;;;;;50150:6:0;;;;;18683:10;50297:23;50289:68;;;;-1:-1:-1;;;50289:68:0;;;;;;;:::i;:::-;61805:12:::1;:24:::0;61731:106::o;64533:319::-;50150:6;;-1:-1:-1;;;;;50150:6:0;;;;;18683:10;50297:23;50289:68;;;;-1:-1:-1;;;50289:68:0;;;;;;;:::i;:::-;64685:38:::1;::::0;-1:-1:-1;;;64685:38:0;;64717:4:::1;64685:38;::::0;::::1;9016:51:1::0;64641:14:0;;64611:20:::1;::::0;-1:-1:-1;;;;;64685:23:0;::::1;::::0;::::1;::::0;8989:18:1;;64685:38:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;64667:56;;64734:13;-1:-1:-1::0;;;;;64734:22:0::1;;64757:7;50150:6:::0;;-1:-1:-1;;;;;50150:6:0;;;;;;50077:87;64757:7:::1;64734:40;::::0;-1:-1:-1;;;;;;64734:40:0::1;::::0;;;;;;-1:-1:-1;;;;;10143:32:1;;;64734:40:0::1;::::0;::::1;10125:51:1::0;10192:18;;;10185:34;;;10098:18;;64734:40:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;64790:54:0::1;::::0;;-1:-1:-1;;;;;10143:32:1;;10125:51;;10207:2;10192:18;;10185:34;;;64810:10:0::1;::::0;64790:54:::1;::::0;10098:18:1;64790:54:0::1;;;;;;;64600:252;;64533:319:::0;:::o;39512:320::-;39632:7;39687:30;39410:10;:17;;39322:113;39687:30;39679:5;:38;39657:132;;;;-1:-1:-1;;;39657:132:0;;23271:2:1;39657:132:0;;;23253:21:1;23310:2;23290:18;;;23283:30;23349:34;23329:18;;;23322:62;-1:-1:-1;;;23400:18:1;;;23393:42;23452:19;;39657:132:0;23069:408:1;39657:132:0;39807:10;39818:5;39807:17;;;;;;;;:::i;:::-;;;;;;;;;39800:24;;39512:320;;;:::o;61951:104::-;50150:6;;-1:-1:-1;;;;;50150:6:0;;;;;18683:10;50297:23;50289:68;;;;-1:-1:-1;;;50289:68:0;;;;;;;:::i;:::-;62027:20;;::::1;::::0;:7:::1;::::0;:20:::1;::::0;::::1;::::0;::::1;:::i;24155:326::-:0;24272:7;24313:16;;;:7;:16;;;;;;-1:-1:-1;;;;;24313:16:0;24362:19;24340:110;;;;-1:-1:-1;;;24340:110:0;;17448:2:1;24340:110:0;;;17430:21:1;17487:2;17467:18;;;17460:30;17526:34;17506:18;;;17499:62;-1:-1:-1;;;17577:18:1;;;17570:39;17626:19;;24340:110:0;17246:405:1;61622:101:0;50150:6;;-1:-1:-1;;;;;50150:6:0;;;;;18683:10;50297:23;50289:68;;;;-1:-1:-1;;;50289:68:0;;;;;;;:::i;:::-;47842:7;;;;61682:33:::1;;61707:8;:6;:8::i;:::-;61622:101::o:0;61682:33::-:1;61694:10;:8;:10::i;57198:21::-:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23798:295::-;23915:7;-1:-1:-1;;;;;23962:19:0;;23940:111;;;;-1:-1:-1;;;23940:111:0;;17037:2:1;23940:111:0;;;17019:21:1;17076:2;17056:18;;;17049:30;17115:34;17095:18;;;17088:62;-1:-1:-1;;;17166:18:1;;;17159:40;17216:19;;23940:111:0;16835:406:1;23940:111:0;-1:-1:-1;;;;;;24069:16:0;;;;;:9;:16;;;;;;;23798:295::o;50728:148::-;50150:6;;-1:-1:-1;;;;;50150:6:0;;;;;18683:10;50297:23;50289:68;;;;-1:-1:-1;;;50289:68:0;;;;;;;:::i;:::-;50819:6:::1;::::0;50798:40:::1;::::0;50835:1:::1;::::0;50819:6:::1;::::0;::::1;-1:-1:-1::0;;;;;50819:6:0::1;::::0;50798:40:::1;::::0;50835:1;;50798:40:::1;50849:6;:19:::0;;-1:-1:-1;;;;;;50849:19:0::1;::::0;;50728:148::o;60881:370::-;50150:6;;-1:-1:-1;;;;;50150:6:0;;;;;18683:10;50297:23;50289:68;;;;-1:-1:-1;;;50289:68:0;;;;;;;:::i;:::-;61006:1:::1;60984:12;:19;:23;60976:55;;;::::0;-1:-1:-1;;;60976:55:0;;22152:2:1;60976:55:0::1;::::0;::::1;22134:21:1::0;22191:2;22171:18;;;22164:30;-1:-1:-1;;;22210:18:1;;;22203:50;22270:18;;60976:55:0::1;21950:344:1::0;60976:55:0::1;61048:9;61044:190;61066:12;:19;61062:1;:23;61044:190;;;61143:1;-1:-1:-1::0;;;;;61116:29:0::1;:12;61129:1;61116:15;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;61116:29:0::1;;;61108:62;;;::::0;-1:-1:-1;;;61108:62:0;;24101:2:1;61108:62:0::1;::::0;::::1;24083:21:1::0;24140:2;24120:18;;;24113:30;-1:-1:-1;;;24159:18:1;;;24152:50;24219:18;;61108:62:0::1;23899:344:1::0;61108:62:0::1;61217:5;61186:11;:28;61198:12;61211:1;61198:15;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;61186:28:0::1;-1:-1:-1::0;;;;;61186:28:0::1;;;;;;;;;;;;:36;;;;61087:3;;;;;:::i;:::-;;;;61044:190;;62171:116:::0;50150:6;;-1:-1:-1;;;;;50150:6:0;;;;;18683:10;50297:23;50289:68;;;;-1:-1:-1;;;50289:68:0;;;;;;;:::i;:::-;62253:26:::1;62266:7;62275:3;62253:12;:26::i;62063:90::-:0;50150:6;;-1:-1:-1;;;;;50150:6:0;;;;;18683:10;50297:23;50289:68;;;;-1:-1:-1;;;50289:68:0;;;;;;;:::i;:::-;62129:5:::1;:16:::0;62063:90::o;24717:104::-;24773:13;24806:7;24799:14;;;;;:::i;65319:363::-;50150:6;;-1:-1:-1;;;;;50150:6:0;;;;;18683:10;50297:23;50289:68;;;;-1:-1:-1;;;50289:68:0;;;;;;;:::i;:::-;65448:14;65416:21:::1;65474:201;65498:3;:10;65494:1;:14;65474:201;;;65530:13;-1:-1:-1::0;;;;;65530:30:0::1;;65569:4;65576:7;50150:6:::0;;-1:-1:-1;;;;;50150:6:0;;;;;;50077:87;65576:7:::1;65585:3;65589:1;65585:6;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;65530:62:::1;::::0;-1:-1:-1;;;;;;65530:62:0::1;::::0;;;;;;-1:-1:-1;;;;;9336:15:1;;;65530:62:0::1;::::0;::::1;9318:34:1::0;9388:15;;;;9368:18;;;9361:43;9420:18;;;9413:34;9253:18;;65530:62:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;65630:10;-1:-1:-1::0;;;;;65612:51:0::1;;65641:14;65656:3;65660:1;65656:6;;;;;;;;:::i;:::-;;;;;;;65612:51;;;;;;-1:-1:-1::0;;;;;10143:32:1;;;;10125:51;;10207:2;10192:18;;10185:34;10113:2;10098:18;;9951:274;65612:51:0::1;;;;;;;;65510:3:::0;::::1;::::0;::::1;:::i;:::-;;;;65474:201;;;;65405:277;65319:363:::0;;:::o;58916:828::-;47842:7;;;;48096:9;48088:38;;;;-1:-1:-1;;;48088:38:0;;;;;;;:::i;:::-;58986:14:::1;59003:13;39410:10:::0;:17;;39322:113;59003:13:::1;58986:30;;59044:1;59035:6;:10;:32;;;;;59059:8;;59049:6;:18;;59035:32;59027:67;;;::::0;-1:-1:-1;;;59027:67:0;;22501:2:1;59027:67:0::1;::::0;::::1;22483:21:1::0;22540:2;22520:18;;;22513:30;22579:25;22559:18;;;22552:53;22622:18;;59027:67:0::1;22299:347:1::0;59027:67:0::1;59142:12;;59113:21;59123:10;59113:9;:21::i;:::-;:25;::::0;59137:1:::1;59113:25;:::i;:::-;:41;;59105:81;;;::::0;-1:-1:-1;;;59105:81:0;;21393:2:1;59105:81:0::1;::::0;::::1;21375:21:1::0;21432:2;21412:18;;;21405:30;21471;21451:18;;;21444:58;21519:18;;59105:81:0::1;21191:352:1::0;59105:81:0::1;59226:6;59218:5;;:14;;;;:::i;:::-;59205:9;:27;59197:60;;;::::0;-1:-1:-1;;;59197:60:0;;20273:2:1;59197:60:0::1;::::0;::::1;20255:21:1::0;20312:2;20292:18;;;20285:30;-1:-1:-1;;;20331:18:1;;;20324:50;20391:18;;59197:60:0::1;20071:344:1::0;59197:60:0::1;59298:9;::::0;59294:1:::1;59276:15;59285:6:::0;59276;:15:::1;:::i;:::-;:19;;;;:::i;:::-;:31;59268:85;;;::::0;-1:-1:-1;;;59268:85:0;;14618:2:1;59268:85:0::1;::::0;::::1;14600:21:1::0;14657:2;14637:18;;;14630:30;14696:34;14676:18;;;14669:62;-1:-1:-1;;;14747:18:1;;;14740:39;14796:19;;59268:85:0::1;14416:405:1::0;59268:85:0::1;59367:15;::::0;::::1;;59364:135;;;59413:10;59401:23;::::0;;;:11:::1;:23;::::0;;;;;:33;-1:-1:-1;59401:33:0::1;59393:106;;;::::0;-1:-1:-1;;;59393:106:0;;13429:2:1;59393:106:0::1;::::0;::::1;13411:21:1::0;13468:2;13448:18;;;13441:30;13507:34;13487:18;;;13480:62;13578:31;13558:18;;;13551:59;13627:19;;59393:106:0::1;13227:425:1::0;59393:106:0::1;59535:9;59530:164;59554:6;59550:1;:10;59530:164;;;59582:24;59595:10;59582:12;:24::i;:::-;59624:15;::::0;::::1;;59621:61;;;59666:10;59654:23;::::0;;;:11:::1;:23;::::0;;;;:28;;59681:1:::1;::::0;59654:23;:28:::1;::::0;59681:1;;59654:28:::1;:::i;:::-;::::0;;;-1:-1:-1;;59621:61:0::1;59562:3:::0;::::1;::::0;::::1;:::i;:::-;;;;59530:164;;;;59716:20;59726:9;59716;:20::i;26618:327::-:0;-1:-1:-1;;;;;26753:24:0;;18683:10;26753:24;;26745:62;;;;-1:-1:-1;;;26745:62:0;;14264:2:1;26745:62:0;;;14246:21:1;14303:2;14283:18;;;14276:30;14342:27;14322:18;;;14315:55;14387:18;;26745:62:0;14062:349:1;26745:62:0;18683:10;26820:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;26820:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;26820:53:0;;;;;;;;;;26889:48;;11007:41:1;;;26820:42:0;;18683:10;26889:48;;10980:18:1;26889:48:0;;;;;;;26618:327;;:::o;28000:365::-;28189:41;18683:10;28222:7;28189:18;:41::i;:::-;28167:140;;;;-1:-1:-1;;;28167:140:0;;;;;;;:::i;:::-;28318:39;28332:4;28338:2;28342:7;28351:5;28318:13;:39::i;61509:105::-;50150:6;;-1:-1:-1;;;;;50150:6:0;;;;;18683:10;50297:23;50289:68;;;;-1:-1:-1;;;50289:68:0;;;;;;;:::i;:::-;61591:15:::1;::::0;;-1:-1:-1;;61572:34:0;::::1;61591:15;::::0;;::::1;61590:16;61572:34;::::0;;61509:105::o;57226:37::-;;;;;;;:::i;61845:98::-;50150:6;;-1:-1:-1;;;;;50150:6:0;;;;;18683:10;50297:23;50289:68;;;;-1:-1:-1;;;50289:68:0;;;;;;;:::i;:::-;61915:8:::1;:20:::0;61845:98::o;59760:196::-;59887:13;59925:23;59940:7;59925:14;:23::i;59964:526::-;60045:16;60079:18;60100:17;60110:6;60100:9;:17::i;:::-;60079:38;-1:-1:-1;60132:15:0;60128:355;;60171:16;;;60185:1;60171:16;;;;;;;;;;;-1:-1:-1;60164:23:0;59964:526;-1:-1:-1;;;59964:526:0:o;60128:355::-;60220:23;60260:10;60246:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;60246:25:0;;60220:51;;60286:13;60314:130;60338:10;60330:5;:18;60314:130;;;60394:34;60414:6;60422:5;60394:19;:34::i;:::-;60378:6;60385:5;60378:13;;;;;;;;:::i;:::-;;;;;;;;;;:50;60350:7;;;;:::i;:::-;;;;60314:130;;60128:355;60068:422;59964:526;;;:::o;64074:403::-;50150:6;;-1:-1:-1;;;;;50150:6:0;;;;;18683:10;50297:23;50289:68;;;;-1:-1:-1;;;50289:68:0;;;;;;;:::i;:::-;64150:21:::1;64190:10:::0;64182:39:::1;;;::::0;-1:-1:-1;;;64182:39:0;;24450:2:1;64182:39:0::1;::::0;::::1;24432:21:1::0;24489:2;24469:18;;;24462:30;-1:-1:-1;;;24508:18:1;;;24501:47;24565:18;;64182:39:0::1;24248:341:1::0;64182:39:0::1;64232:36;::::0;64240:10:::1;::::0;64232:36;::::1;;;::::0;64261:6;;64232:36:::1;::::0;;;64261:6;64240:10;64232:36;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;64283:7;64279:144;64299:7;:14:::0;64295:18:::1;::::0;::::1;;64279:144;;;64335:18;64356:7;64364:1;64356:10;;;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;::::1;::::0;-1:-1:-1;;;;;64356:10:0::1;64381:19:::0;;:7:::1;:19:::0;;;;;64356:10;64381:26:::1;:30:::0;-1:-1:-1;64315:3:0;::::1;::::0;::::1;:::i;:::-;;;;64279:144;;;-1:-1:-1::0;64438:31:0::1;::::0;24740:25:1;;;64451:10:0::1;::::0;64438:31:::1;::::0;24728:2:1;24713:18;64438:31:0::1;24594:177:1::0;51031:281:0;50150:6;;-1:-1:-1;;;;;50150:6:0;;;;;18683:10;50297:23;50289:68;;;;-1:-1:-1;;;50289:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;51134:22:0;::::1;51112:110;;;::::0;-1:-1:-1;;;51112:110:0;;12665:2:1;51112:110:0::1;::::0;::::1;12647:21:1::0;12704:2;12684:18;;;12677:30;12743:34;12723:18;;;12716:62;-1:-1:-1;;;12794:18:1;;;12787:36;12840:19;;51112:110:0::1;12463:402:1::0;51112:110:0::1;51259:6;::::0;51238:38:::1;::::0;-1:-1:-1;;;;;51238:38:0;;::::1;::::0;51259:6:::1;::::0;::::1;;::::0;51238:38:::1;::::0;;;::::1;51287:6;:17:::0;;-1:-1:-1;;;;;51287:17:0;;::::1;;;-1:-1:-1::0;;;;;;51287:17:0;;::::1;::::0;;;::::1;::::0;;51031:281::o;29912:127::-;29977:4;30001:16;;;:7;:16;;;;;;-1:-1:-1;;;;;30001:16:0;:30;;;29912:127::o;38519:300::-;38666:4;-1:-1:-1;;;;;;38708:50:0;;-1:-1:-1;;;38708:50:0;;:103;;;38775:36;38799:11;38775:23;:36::i;34035:174::-;34110:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;34110:29:0;-1:-1:-1;;;;;34110:29:0;;;;;;;;:24;;34164:23;34110:24;34164:14;:23::i;:::-;-1:-1:-1;;;;;34155:46:0;;;;;;;;;;;34035:174;;:::o;30206:452::-;30335:4;30379:16;30387:7;30379;:16::i;:::-;30357:110;;;;-1:-1:-1;;;30357:110:0;;15028:2:1;30357:110:0;;;15010:21:1;15067:2;15047:18;;;15040:30;15106:34;15086:18;;;15079:62;-1:-1:-1;;;15157:18:1;;;15150:42;15209:19;;30357:110:0;14826:408:1;30357:110:0;30478:13;30494:23;30509:7;30494:14;:23::i;:::-;30478:39;;30547:5;-1:-1:-1;;;;;30536:16:0;:7;-1:-1:-1;;;;;30536:16:0;;:64;;;;30593:7;-1:-1:-1;;;;;30569:31:0;:20;30581:7;30569:11;:20::i;:::-;-1:-1:-1;;;;;30569:31:0;;30536:64;:113;;;-1:-1:-1;;;;;;27187:25:0;;;27158:4;27187:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;30617:32;30528:122;30206:452;-1:-1:-1;;;;30206:452:0:o;33302:615::-;33475:4;-1:-1:-1;;;;;33448:31:0;:23;33463:7;33448:14;:23::i;:::-;-1:-1:-1;;;;;33448:31:0;;33426:122;;;;-1:-1:-1;;;33426:122:0;;20983:2:1;33426:122:0;;;20965:21:1;21022:2;21002:18;;;20995:30;21061:34;21041:18;;;21034:62;-1:-1:-1;;;21112:18:1;;;21105:39;21161:19;;33426:122:0;20781:405:1;33426:122:0;-1:-1:-1;;;;;33567:16:0;;33559:65;;;;-1:-1:-1;;;33559:65:0;;13859:2:1;33559:65:0;;;13841:21:1;13898:2;13878:18;;;13871:30;13937:34;13917:18;;;13910:62;-1:-1:-1;;;13988:18:1;;;13981:34;14032:19;;33559:65:0;13657:400:1;33559:65:0;33637:39;33658:4;33664:2;33668:7;33637:20;:39::i;:::-;33741:29;33758:1;33762:7;33741:8;:29::i;:::-;-1:-1:-1;;;;;33783:15:0;;;;;;:9;:15;;;;;:20;;33802:1;;33783:15;:20;;33802:1;;33783:20;:::i;:::-;;;;-1:-1:-1;;;;;;;33814:13:0;;;;;;:9;:13;;;;;:18;;33831:1;;33814:13;:18;;33831:1;;33814:18;:::i;:::-;;;;-1:-1:-1;;33843:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;33843:21:0;-1:-1:-1;;;;;33843:21:0;;;;;;;;;33882:27;;33843:16;;33882:27;;;;;;;33302:615;;;:::o;65081:171::-;65167:9;65162:83;65186:6;65182:1;:10;65162:83;;;65214:19;65227:5;65214:12;:19::i;:::-;65194:3;;;;:::i;:::-;;;;65162:83;;62729:136;62784:15;62802:18;:16;:18::i;:::-;:22;;62823:1;62802:22;:::i;:::-;62784:40;;62835:22;62845:2;62849:7;62835:9;:22::i;63533:138::-;63643:20;63655:7;63643:11;:20::i;48571:118::-;47842:7;;;;48096:9;48088:38;;;;-1:-1:-1;;;48088:38:0;;;;;;;:::i;:::-;48631:7:::1;:14:::0;;-1:-1:-1;;48631:14:0::1;48641:4;48631:14;::::0;;48661:20:::1;48668:12;18683:10:::0;;18603:98;48668:12:::1;48661:20;::::0;-1:-1:-1;;;;;9034:32:1;;;9016:51;;9004:2;8989:18;48661:20:0::1;;;;;;;48571:118::o:0;48830:120::-;47842:7;;;;48366:41;;;;-1:-1:-1;;;48366:41:0;;11485:2:1;48366:41:0;;;11467:21:1;11524:2;11504:18;;;11497:30;-1:-1:-1;;;11543:18:1;;;11536:50;11603:18;;48366:41:0;11283:344:1;48366:41:0;48889:7:::1;:15:::0;;-1:-1:-1;;48889:15:0::1;::::0;;48920:22:::1;18683:10:::0;48929:12:::1;18603:98:::0;45978:277;46115:16;46123:7;46115;:16::i;:::-;46093:112;;;;-1:-1:-1;;;46093:112:0;;17858:2:1;46093:112:0;;;17840:21:1;17897:2;17877:18;;;17870:30;17936:34;17916:18;;;17909:62;-1:-1:-1;;;17987:18:1;;;17980:44;18041:19;;46093:112:0;17656:410:1;46093:112:0;46216:19;;;;:10;:19;;;;;;;;:31;;;;;;;;:::i;58545:357::-;58610:7;58606:287;58626:7;:14;58622:18;;;;58606:287;;;58662:18;58683:7;58691:1;58683:10;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;58683:10:0;58726:19;;;:7;:19;;;;;;:27;58683:10;;-1:-1:-1;58726:27:0;58791:33;58818:5;58791:22;:10;58726:27;58791:14;:22::i;:::-;:26;;:33::i;:::-;-1:-1:-1;;;;;58839:19:0;;;;;;:7;:19;;;;;:26;;:42;;58768:56;;-1:-1:-1;58768:56:0;;58839:26;;:19;:42;;58768:56;;58839:42;:::i;:::-;;;;;;;;58647:246;;;58642:3;;;;;:::i;:::-;;;;58606:287;;29247:352;29404:28;29414:4;29420:2;29424:7;29404:9;:28::i;:::-;29465:48;29488:4;29494:2;29498:7;29507:5;29465:22;:48::i;:::-;29443:148;;;;-1:-1:-1;;;29443:148:0;;;;;;;:::i;45361:461::-;45479:13;45532:16;45540:7;45532;:16::i;:::-;45510:115;;;;-1:-1:-1;;;45510:115:0;;19040:2:1;45510:115:0;;;19022:21:1;19079:2;19059:18;;;19052:30;19118:34;19098:18;;;19091:62;-1:-1:-1;;;19169:18:1;;;19162:47;19226:19;;45510:115:0;18838:413:1;45510:115:0;45638:18;45659:10;:8;:10::i;:::-;45638:31;;45680:17;45700:16;:14;:16::i;:::-;45680:36;;45779:4;45785:20;45786:7;45785:18;:20::i;:::-;45807:3;45762:49;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;45748:64;;;;45361:461;;;:::o;23379:355::-;23526:4;-1:-1:-1;;;;;;23568:40:0;;-1:-1:-1;;;23568:40:0;;:105;;-1:-1:-1;;;;;;;23625:48:0;;-1:-1:-1;;;23625:48:0;23568:105;:158;;;-1:-1:-1;;;;;;;;;;22004:40:0;;;23690:36;21845:207;63277:240;47842:7;;;;48096:9;48088:38;;;;-1:-1:-1;;;48088:38:0;;;;;;;:::i;:::-;63453:56:::1;63491:4;63497:2;63501:7;63453:37;:56::i;801:775::-:0;854:7;874:13;900:11;;890:9;:21;;;;:::i;:::-;874:37;;922:12;945:14;972:9;1001:5;984:14;:12;:14::i;:::-;:22;;;;:::i;:::-;972:34;-1:-1:-1;1085:11:0;:20;1097:7;1103:1;1097:5;:7;:::i;:::-;1085:20;;;;;;;;;;;;1109:1;1085:25;1081:131;;;1133:7;1139:1;1133:5;:7;:::i;:::-;1126:14;;1081:131;;;1180:11;:20;1192:7;1198:1;1192:5;:7;:::i;:::-;1180:20;;;;;;;;;;;;1173:27;;1081:131;1336:14;;;;:11;:14;;;;;;1332:189;;1396:14;;;;:11;:14;;;;;:21;;;1380:1;-1:-1:-1;1380:1:0;1332:189;;;1459:14;;;;:11;:14;;;;;;;1488:21;;;;1459:14;-1:-1:-1;1332:189:0;1531:11;:13;;;:11;:13;;;:::i;:::-;;;;-1:-1:-1;1562:6:0;;801:775;-1:-1:-1;;;;;801:775:0:o;31000:110::-;31076:26;31086:2;31090:7;31076:26;;;;;;;;;;;;:9;:26::i;46484:206::-;46553:20;46565:7;46553:11;:20::i;:::-;46596:19;;;;:10;:19;;;;;46590:33;;;;;:::i;:::-;:38;;-1:-1:-1;46586:97:0;;46652:19;;;;:10;:19;;;;;46645:26;;;:::i;55310:250::-;55368:7;55392:6;55388:47;;-1:-1:-1;55422:1:0;55415:8;;55388:47;55447:9;55459:5;55463:1;55459;:5;:::i;:::-;55447:17;-1:-1:-1;55492:1:0;55483:5;55487:1;55447:17;55483:5;:::i;:::-;:10;55475:56;;;;-1:-1:-1;;;55475:56:0;;19458:2:1;55475:56:0;;;19440:21:1;19497:2;19477:18;;;19470:30;19536:34;19516:18;;;19509:62;-1:-1:-1;;;19587:18:1;;;19580:31;19628:19;;55475:56:0;19256:397:1;55475:56:0;55551:1;55310:250;-1:-1:-1;;;55310:250:0:o;55570:132::-;55628:7;55655:39;55659:1;55662;55655:39;;;;;;;;;;;;;;;;;:3;:39::i;34774:1053::-;34929:4;-1:-1:-1;;;;;34950:13:0;;10397:20;10445:8;34946:874;;35003:175;;-1:-1:-1;;;35003:175:0;;-1:-1:-1;;;;;35003:36:0;;;;;:175;;18683:10;;35097:4;;35124:7;;35154:5;;35003:175;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35003:175:0;;;;;;;;-1:-1:-1;;35003:175:0;;;;;;;;;;;;:::i;:::-;;;34982:783;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35365:13:0;;35361:389;;35408:108;;-1:-1:-1;;;35408:108:0;;;;;;;:::i;35361:389::-;35700:6;35694:13;35685:6;35681:2;35677:15;35670:38;34982:783;-1:-1:-1;;;;;;35242:55:0;-1:-1:-1;;;35242:55:0;;-1:-1:-1;35235:62:0;;34946:874;-1:-1:-1;35804:4:0;34774:1053;;;;;;:::o;58432:100::-;58484:13;58517:7;58510:14;;;;;:::i;58310:112::-;58368:13;58401;58394:20;;;;;:::i;19260:723::-;19316:13;19537:10;19533:53;;-1:-1:-1;;19564:10:0;;;;;;;;;;;;-1:-1:-1;;;19564:10:0;;;;;19260:723::o;19533:53::-;19611:5;19596:12;19652:78;19659:9;;19652:78;;19685:8;;;;:::i;:::-;;-1:-1:-1;19708:10:0;;-1:-1:-1;19716:2:0;19708:10;;:::i;:::-;;;19652:78;;;19740:19;19772:6;19762:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19762:17:0;;19740:39;;19790:154;19797:10;;19790:154;;19824:11;19834:1;19824:11;;:::i;:::-;;-1:-1:-1;19893:10:0;19901:2;19893:5;:10;:::i;:::-;19880:24;;:2;:24;:::i;:::-;19867:39;;19850:6;19857;19850:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;19850:56:0;;;;;;;;-1:-1:-1;19921:11:0;19930:2;19921:11;;:::i;:::-;;;19790:154;;40445:589;-1:-1:-1;;;;;40651:18:0;;40647:187;;40686:40;40718:7;41861:10;:17;;41834:24;;;;:15;:24;;;;;:44;;;41889:24;;;;;;;;;;;;41757:164;40686:40;40647:187;;;40756:2;-1:-1:-1;;;;;40748:10:0;:4;-1:-1:-1;;;;;40748:10:0;;40744:90;;40775:47;40808:4;40814:7;40775:32;:47::i;:::-;-1:-1:-1;;;;;40848:16:0;;40844:183;;40881:45;40918:7;40881:36;:45::i;40844:183::-;40954:4;-1:-1:-1;;;;;40948:10:0;:2;-1:-1:-1;;;;;40948:10:0;;40944:83;;40975:40;41003:2;41007:7;40975:27;:40::i;1584:151::-;1630:7;1691:16;1709:15;1674:51;;;;;;;;8775:19:1;;;8819:2;8810:12;;8803:28;8856:2;8847:12;;8618:247;1674:51:0;;;;;;;;;;;;;1664:62;;;;;;1656:71;;1649:78;;1584:151;:::o;31337:321::-;31467:18;31473:2;31477:7;31467:5;:18::i;:::-;31518:54;31549:1;31553:2;31557:7;31566:5;31518:22;:54::i;:::-;31496:154;;;;-1:-1:-1;;;31496:154:0;;;;;;;:::i;32605:360::-;32665:13;32681:23;32696:7;32681:14;:23::i;:::-;32665:39;;32717:48;32738:5;32753:1;32757:7;32717:20;:48::i;:::-;32806:29;32823:1;32827:7;32806:8;:29::i;:::-;-1:-1:-1;;;;;32848:16:0;;;;;;:9;:16;;;;;:21;;32868:1;;32848:16;:21;;32868:1;;32848:21;:::i;:::-;;;;-1:-1:-1;;32887:16:0;;;;:7;:16;;;;;;32880:23;;-1:-1:-1;;;;;;32880:23:0;;;32921:36;32895:7;;32887:16;-1:-1:-1;;;;;32921:36:0;;;;;32887:16;;32921:36;32654:311;32605:360;:::o;55710:278::-;55796:7;55831:12;55824:5;55816:28;;;;-1:-1:-1;;;55816:28:0;;;;;;;;:::i;:::-;-1:-1:-1;55855:9:0;55867:5;55871:1;55867;:5;:::i;:::-;55855:17;55710:278;-1:-1:-1;;;;;55710:278:0:o;42548:1002::-;42828:22;42878:1;42853:22;42870:4;42853:16;:22::i;:::-;:26;;;;:::i;:::-;42890:18;42911:26;;;:17;:26;;;;;;42828:51;;-1:-1:-1;43044:28:0;;;43040:328;;-1:-1:-1;;;;;43111:18:0;;43089:19;43111:18;;;:12;:18;;;;;;;;:34;;;;;;;;;43162:30;;;;;;:44;;;43279:30;;:17;:30;;;;;:43;;;43040:328;-1:-1:-1;43464:26:0;;;;:17;:26;;;;;;;;43457:33;;;-1:-1:-1;;;;;43508:18:0;;;;;:12;:18;;;;;:34;;;;;;;43501:41;42548:1002::o;43845:1079::-;44123:10;:17;44098:22;;44123:21;;44143:1;;44123:21;:::i;:::-;44155:18;44176:24;;;:15;:24;;;;;;44549:10;:26;;44098:46;;-1:-1:-1;44176:24:0;;44098:46;;44549:26;;;;;;:::i;:::-;;;;;;;;;44527:48;;44613:11;44588:10;44599;44588:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;44693:28;;;:15;:28;;;;;;;:41;;;44865:24;;;;;44858:31;44900:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;43916:1008;;;43845:1079;:::o;41335:221::-;41420:14;41437:20;41454:2;41437:16;:20::i;:::-;-1:-1:-1;;;;;41468:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;41513:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;41335:221:0:o;31994:382::-;-1:-1:-1;;;;;32074:16:0;;32066:61;;;;-1:-1:-1;;;32066:61:0;;18679:2:1;32066:61:0;;;18661:21:1;;;18698:18;;;18691:30;18757:34;18737:18;;;18730:62;18809:18;;32066:61:0;18477:356:1;32066:61:0;32147:16;32155:7;32147;:16::i;:::-;32146:17;32138:58;;;;-1:-1:-1;;;32138:58:0;;13072:2:1;32138:58:0;;;13054:21:1;13111:2;13091:18;;;13084:30;13150;13130:18;;;13123:58;13198:18;;32138:58:0;12870:352:1;32138:58:0;32209:45;32238:1;32242:2;32246:7;32209:20;:45::i;:::-;-1:-1:-1;;;;;32267:13:0;;;;;;:9;:13;;;;;:18;;32284:1;;32267:13;:18;;32284:1;;32267:18;:::i;:::-;;;;-1:-1:-1;;32296:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;32296:21:0;-1:-1:-1;;;;;32296:21:0;;;;;;;;32335:33;;32296:16;;;32335:33;;32296:16;;32335:33;31994:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:406:1;78:5;112:18;104:6;101:30;98:56;;;134:18;;:::i;:::-;172:57;217:2;196:15;;-1:-1:-1;;192:29:1;223:4;188:40;172:57;:::i;:::-;163:66;;252:6;245:5;238:21;292:3;283:6;278:3;274:16;271:25;268:45;;;309:1;306;299:12;268:45;358:6;353:3;346:4;339:5;335:16;322:43;412:1;405:4;396:6;389:5;385:18;381:29;374:40;14:406;;;;;:::o;425:173::-;493:20;;-1:-1:-1;;;;;542:31:1;;532:42;;522:70;;588:1;585;578:12;522:70;425:173;;;:::o;603:679::-;657:5;710:3;703:4;695:6;691:17;687:27;677:55;;728:1;725;718:12;677:55;764:6;751:20;790:4;814:60;830:43;870:2;830:43;:::i;:::-;814:60;:::i;:::-;896:3;920:2;915:3;908:15;948:2;943:3;939:12;932:19;;983:2;975:6;971:15;1035:3;1030:2;1024;1021:1;1017:10;1009:6;1005:23;1001:32;998:41;995:61;;;1052:1;1049;1042:12;995:61;1074:1;1084:169;1098:2;1095:1;1092:9;1084:169;;;1155:23;1174:3;1155:23;:::i;:::-;1143:36;;1199:12;;;;1231;;;;1116:1;1109:9;1084:169;;;-1:-1:-1;1271:5:1;;603:679;-1:-1:-1;;;;;;;603:679:1:o;1287:221::-;1330:5;1383:3;1376:4;1368:6;1364:17;1360:27;1350:55;;1401:1;1398;1391:12;1350:55;1423:79;1498:3;1489:6;1476:20;1469:4;1461:6;1457:17;1423:79;:::i;1513:186::-;1572:6;1625:2;1613:9;1604:7;1600:23;1596:32;1593:52;;;1641:1;1638;1631:12;1593:52;1664:29;1683:9;1664:29;:::i;1704:260::-;1772:6;1780;1833:2;1821:9;1812:7;1808:23;1804:32;1801:52;;;1849:1;1846;1839:12;1801:52;1872:29;1891:9;1872:29;:::i;:::-;1862:39;;1920:38;1954:2;1943:9;1939:18;1920:38;:::i;:::-;1910:48;;1704:260;;;;;:::o;1969:328::-;2046:6;2054;2062;2115:2;2103:9;2094:7;2090:23;2086:32;2083:52;;;2131:1;2128;2121:12;2083:52;2154:29;2173:9;2154:29;:::i;:::-;2144:39;;2202:38;2236:2;2225:9;2221:18;2202:38;:::i;:::-;2192:48;;2287:2;2276:9;2272:18;2259:32;2249:42;;1969:328;;;;;:::o;2302:666::-;2397:6;2405;2413;2421;2474:3;2462:9;2453:7;2449:23;2445:33;2442:53;;;2491:1;2488;2481:12;2442:53;2514:29;2533:9;2514:29;:::i;:::-;2504:39;;2562:38;2596:2;2585:9;2581:18;2562:38;:::i;:::-;2552:48;;2647:2;2636:9;2632:18;2619:32;2609:42;;2702:2;2691:9;2687:18;2674:32;2729:18;2721:6;2718:30;2715:50;;;2761:1;2758;2751:12;2715:50;2784:22;;2837:4;2829:13;;2825:27;-1:-1:-1;2815:55:1;;2866:1;2863;2856:12;2815:55;2889:73;2954:7;2949:2;2936:16;2931:2;2927;2923:11;2889:73;:::i;:::-;2879:83;;;2302:666;;;;;;;:::o;2973:976::-;3066:6;3074;3127:2;3115:9;3106:7;3102:23;3098:32;3095:52;;;3143:1;3140;3133:12;3095:52;3166:29;3185:9;3166:29;:::i;:::-;3156:39;;3214:2;3267;3256:9;3252:18;3239:32;3294:18;3286:6;3283:30;3280:50;;;3326:1;3323;3316:12;3280:50;3349:22;;3402:4;3394:13;;3390:27;-1:-1:-1;3380:55:1;;3431:1;3428;3421:12;3380:55;3467:2;3454:16;3490:60;3506:43;3546:2;3506:43;:::i;3490:60::-;3572:3;3596:2;3591:3;3584:15;3624:2;3619:3;3615:12;3608:19;;3655:2;3651;3647:11;3703:7;3698:2;3692;3689:1;3685:10;3681:2;3677:19;3673:28;3670:41;3667:61;;;3724:1;3721;3714:12;3667:61;3746:1;3737:10;;3756:163;3770:2;3767:1;3764:9;3756:163;;;3827:17;;3815:30;;3788:1;3781:9;;;;;3865:12;;;;3897;;3756:163;;;3760:3;3938:5;3928:15;;;;;;;2973:976;;;;;:::o;3954:315::-;4019:6;4027;4080:2;4068:9;4059:7;4055:23;4051:32;4048:52;;;4096:1;4093;4086:12;4048:52;4119:29;4138:9;4119:29;:::i;:::-;4109:39;;4198:2;4187:9;4183:18;4170:32;4211:28;4233:5;4211:28;:::i;:::-;4258:5;4248:15;;;3954:315;;;;;:::o;4274:254::-;4342:6;4350;4403:2;4391:9;4382:7;4378:23;4374:32;4371:52;;;4419:1;4416;4409:12;4371:52;4442:29;4461:9;4442:29;:::i;:::-;4432:39;4518:2;4503:18;;;;4490:32;;-1:-1:-1;;;4274:254:1:o;4533:348::-;4617:6;4670:2;4658:9;4649:7;4645:23;4641:32;4638:52;;;4686:1;4683;4676:12;4638:52;4726:9;4713:23;4759:18;4751:6;4748:30;4745:50;;;4791:1;4788;4781:12;4745:50;4814:61;4867:7;4858:6;4847:9;4843:22;4814:61;:::i;4886:416::-;4979:6;4987;5040:2;5028:9;5019:7;5015:23;5011:32;5008:52;;;5056:1;5053;5046:12;5008:52;5096:9;5083:23;5129:18;5121:6;5118:30;5115:50;;;5161:1;5158;5151:12;5115:50;5184:61;5237:7;5228:6;5217:9;5213:22;5184:61;:::i;:::-;5174:71;5292:2;5277:18;;;;5264:32;;-1:-1:-1;;;;4886:416:1:o;5307:245::-;5374:6;5427:2;5415:9;5406:7;5402:23;5398:32;5395:52;;;5443:1;5440;5433:12;5395:52;5475:9;5469:16;5494:28;5516:5;5494:28;:::i;5557:245::-;5615:6;5668:2;5656:9;5647:7;5643:23;5639:32;5636:52;;;5684:1;5681;5674:12;5636:52;5723:9;5710:23;5742:30;5766:5;5742:30;:::i;5807:249::-;5876:6;5929:2;5917:9;5908:7;5904:23;5900:32;5897:52;;;5945:1;5942;5935:12;5897:52;5977:9;5971:16;5996:30;6020:5;5996:30;:::i;6061:322::-;6130:6;6183:2;6171:9;6162:7;6158:23;6154:32;6151:52;;;6199:1;6196;6189:12;6151:52;6239:9;6226:23;6272:18;6264:6;6261:30;6258:50;;;6304:1;6301;6294:12;6258:50;6327;6369:7;6360:6;6349:9;6345:22;6327:50;:::i;6388:272::-;6446:6;6499:2;6487:9;6478:7;6474:23;6470:32;6467:52;;;6515:1;6512;6505:12;6467:52;6554:9;6541:23;6604:6;6597:5;6593:18;6586:5;6583:29;6573:57;;6626:1;6623;6616:12;6665:180;6724:6;6777:2;6765:9;6756:7;6752:23;6748:32;6745:52;;;6793:1;6790;6783:12;6745:52;-1:-1:-1;6816:23:1;;6665:180;-1:-1:-1;6665:180:1:o;6850:184::-;6920:6;6973:2;6961:9;6952:7;6948:23;6944:32;6941:52;;;6989:1;6986;6979:12;6941:52;-1:-1:-1;7012:16:1;;6850:184;-1:-1:-1;6850:184:1:o;7039:390::-;7117:6;7125;7178:2;7166:9;7157:7;7153:23;7149:32;7146:52;;;7194:1;7191;7184:12;7146:52;7230:9;7217:23;7207:33;;7291:2;7280:9;7276:18;7263:32;7318:18;7310:6;7307:30;7304:50;;;7350:1;7347;7340:12;7304:50;7373;7415:7;7406:6;7395:9;7391:22;7373:50;:::i;:::-;7363:60;;;7039:390;;;;;:::o;7434:248::-;7502:6;7510;7563:2;7551:9;7542:7;7538:23;7534:32;7531:52;;;7579:1;7576;7569:12;7531:52;-1:-1:-1;;7602:23:1;;;7672:2;7657:18;;;7644:32;;-1:-1:-1;7434:248:1:o;7687:257::-;7728:3;7766:5;7760:12;7793:6;7788:3;7781:19;7809:63;7865:6;7858:4;7853:3;7849:14;7842:4;7835:5;7831:16;7809:63;:::i;:::-;7926:2;7905:15;-1:-1:-1;;7901:29:1;7892:39;;;;7933:4;7888:50;;7687:257;-1:-1:-1;;7687:257:1:o;7949:664::-;8176:3;8214:6;8208:13;8230:53;8276:6;8271:3;8264:4;8256:6;8252:17;8230:53;:::i;:::-;8346:13;;8305:16;;;;8368:57;8346:13;8305:16;8402:4;8390:17;;8368:57;:::i;:::-;8492:13;;8447:20;;;8514:57;8492:13;8447:20;8548:4;8536:17;;8514:57;:::i;:::-;8587:20;;7949:664;-1:-1:-1;;;;;7949:664:1:o;9458:488::-;-1:-1:-1;;;;;9727:15:1;;;9709:34;;9779:15;;9774:2;9759:18;;9752:43;9826:2;9811:18;;9804:34;;;9874:3;9869:2;9854:18;;9847:31;;;9652:4;;9895:45;;9920:19;;9912:6;9895:45;:::i;:::-;9887:53;9458:488;-1:-1:-1;;;;;;9458:488:1:o;10230:632::-;10401:2;10453:21;;;10523:13;;10426:18;;;10545:22;;;10372:4;;10401:2;10624:15;;;;10598:2;10583:18;;;10372:4;10667:169;10681:6;10678:1;10675:13;10667:169;;;10742:13;;10730:26;;10811:15;;;;10776:12;;;;10703:1;10696:9;10667:169;;;-1:-1:-1;10853:3:1;;10230:632;-1:-1:-1;;;;;;10230:632:1:o;11059:219::-;11208:2;11197:9;11190:21;11171:4;11228:44;11268:2;11257:9;11253:18;11245:6;11228:44;:::i;12044:414::-;12246:2;12228:21;;;12285:2;12265:18;;;12258:30;12324:34;12319:2;12304:18;;12297:62;-1:-1:-1;;;12390:2:1;12375:18;;12368:48;12448:3;12433:19;;12044:414::o;15653:340::-;15855:2;15837:21;;;15894:2;15874:18;;;15867:30;-1:-1:-1;;;15928:2:1;15913:18;;15906:46;15984:2;15969:18;;15653:340::o;20420:356::-;20622:2;20604:21;;;20641:18;;;20634:30;20700:34;20695:2;20680:18;;20673:62;20767:2;20752:18;;20420:356::o;22651:413::-;22853:2;22835:21;;;22892:2;22872:18;;;22865:30;22931:34;22926:2;22911:18;;22904:62;-1:-1:-1;;;22997:2:1;22982:18;;22975:47;23054:3;23039:19;;22651:413::o;25029:275::-;25100:2;25094:9;25165:2;25146:13;;-1:-1:-1;;25142:27:1;25130:40;;25200:18;25185:34;;25221:22;;;25182:62;25179:88;;;25247:18;;:::i;:::-;25283:2;25276:22;25029:275;;-1:-1:-1;25029:275:1:o;25309:183::-;25369:4;25402:18;25394:6;25391:30;25388:56;;;25424:18;;:::i;:::-;-1:-1:-1;25469:1:1;25465:14;25481:4;25461:25;;25309:183::o;25497:128::-;25537:3;25568:1;25564:6;25561:1;25558:13;25555:39;;;25574:18;;:::i;:::-;-1:-1:-1;25610:9:1;;25497:128::o;25630:120::-;25670:1;25696;25686:35;;25701:18;;:::i;:::-;-1:-1:-1;25735:9:1;;25630:120::o;25755:168::-;25795:7;25861:1;25857;25853:6;25849:14;25846:1;25843:21;25838:1;25831:9;25824:17;25820:45;25817:71;;;25868:18;;:::i;:::-;-1:-1:-1;25908:9:1;;25755:168::o;25928:125::-;25968:4;25996:1;25993;25990:8;25987:34;;;26001:18;;:::i;:::-;-1:-1:-1;26038:9:1;;25928:125::o;26058:258::-;26130:1;26140:113;26154:6;26151:1;26148:13;26140:113;;;26230:11;;;26224:18;26211:11;;;26204:39;26176:2;26169:10;26140:113;;;26271:6;26268:1;26265:13;26262:48;;;-1:-1:-1;;26306:1:1;26288:16;;26281:27;26058:258::o;26321:380::-;26400:1;26396:12;;;;26443;;;26464:61;;26518:4;26510:6;26506:17;26496:27;;26464:61;26571:2;26563:6;26560:14;26540:18;26537:38;26534:161;;;26617:10;26612:3;26608:20;26605:1;26598:31;26652:4;26649:1;26642:15;26680:4;26677:1;26670:15;26706:135;26745:3;-1:-1:-1;;26766:17:1;;26763:43;;;26786:18;;:::i;:::-;-1:-1:-1;26833:1:1;26822:13;;26706:135::o;26846:175::-;26883:3;26927:4;26920:5;26916:16;26956:4;26947:7;26944:17;26941:43;;;26964:18;;:::i;:::-;27013:1;27000:15;;26846:175;-1:-1:-1;;26846:175:1:o;27026:112::-;27058:1;27084;27074:35;;27089:18;;:::i;:::-;-1:-1:-1;27123:9:1;;27026:112::o;27143:127::-;27204:10;27199:3;27195:20;27192:1;27185:31;27235:4;27232:1;27225:15;27259:4;27256:1;27249:15;27275:127;27336:10;27331:3;27327:20;27324:1;27317:31;27367:4;27364:1;27357:15;27391:4;27388:1;27381:15;27407:127;27468:10;27463:3;27459:20;27456:1;27449:31;27499:4;27496:1;27489:15;27523:4;27520:1;27513:15;27539:127;27600:10;27595:3;27591:20;27588:1;27581:31;27631:4;27628:1;27621:15;27655:4;27652:1;27645:15;27671:127;27732:10;27727:3;27723:20;27720:1;27713:31;27763:4;27760:1;27753:15;27787:4;27784:1;27777:15;27803:118;27889:5;27882:13;27875:21;27868:5;27865:32;27855:60;;27911:1;27908;27901:12;27926:131;-1:-1:-1;;;;;;28000:32:1;;27990:43;;27980:71;;28047:1;28044;28037:12
Swarm Source
ipfs://1fbe8b16e193d39cec47f7ecd393529dd8b65706fc872bc0dd8fd20b3ce9684d
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Validator ID :
0 FTM
Amount Staked
0
Amount Delegated
0
Staking Total
0
Staking Start Epoch
0
Staking Start Time
0
Proof of Importance
0
Origination Score
0
Validation Score
0
Active
0
Online
0
Downtime
0 s
Address | Amount | claimed Rewards | Created On Epoch | Created On |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.