Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
679 HA2
Holders
100
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
2 HA2Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
HollywoodApesV2
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-01-21 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/contracts/utils/introspection/IERC165.sol pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol 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/utils/introspection/ERC165.sol pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/utils/Strings.sol pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { /** * @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); } } // File: @openzeppelin/contracts/utils/Address.sol pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } function toString(address account) internal pure returns (string memory) { bytes memory s = new bytes(40); for (uint i = 0; i < 20; i++) { bytes1 b = bytes1(uint8(uint(uint160(account)) / (2**(8*(19 - i))))); bytes1 hi = bytes1(uint8(b) / 16); bytes1 lo = bytes1(uint8(b) - 16 * uint8(hi)); s[2*i] = char(hi); s[2*i+1] = char(lo); } return string(abi.encodePacked("0x", s)); } function char(bytes1 b) internal pure returns (bytes1 c) { if (uint8(b) < 10) return bytes1(uint8(b) + 0x30); else return bytes1(uint8(b) + 0x57); } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require( address(this).balance >= amount, "Address: insufficient balance" ); (bool success, ) = recipient.call{value: amount}(""); require( success, "Address: unable to send value, recipient may have reverted" ); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue( target, data, value, "Address: low-level call with value failed" ); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require( address(this).balance >= value, "Address: insufficient balance for call" ); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}( data ); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall( target, data, "Address: low-level static call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall( target, data, "Address: low-level delegate call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // OpenZeppelin Contracts v4.4.1 (utils/cryptography/MerkleProof.sol) pragma solidity ^0.8.0; /** * @dev These functions deal with verification of Merkle Trees proofs. * * The proofs can be generated using the JavaScript library * https://github.com/miguelmota/merkletreejs[merkletreejs]. * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled. * * See `test/utils/cryptography/MerkleProof.test.js` for some examples. */ library MerkleProof { /** * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree * defined by `root`. For this, a `proof` must be provided, containing * sibling hashes on the branch from the leaf to the root of the tree. Each * pair of leaves and each pair of pre-images are assumed to be sorted. */ function verify( bytes32[] memory proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { return processProof(proof, leaf) == root; } /** * @dev Returns the rebuilt hash obtained by traversing a Merklee tree up * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt * hash matches the root of the tree. When processing the proof, the pairs * of leafs & pre-images are assumed to be sorted. * * _Available since v4.4._ */ function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { bytes32 proofElement = proof[i]; if (computedHash <= proofElement) { // Hash(current computed hash + current element of the proof) computedHash = _efficientHash(computedHash, proofElement); } else { // Hash(current element of the proof + current computed hash) computedHash = _efficientHash(proofElement, computedHash); } } return computedHash; } function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) { assembly { mstore(0x00, a) mstore(0x20, b) value := keccak256(0x00, 0x40) } } } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol 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/token/ERC721/IERC721Receiver.sol 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/utils/Context.sol pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol 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 owner address to token count mapping(address => uint256) internal _balances; // Mapping from token ID to owner address mapping(uint256 => address) internal _owners; // 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}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require( _exists(tokenId), "ERC721: approved query for nonexistent token" ); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require( _isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved" ); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require( _isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved" ); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require( _checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require( _exists(tokenId), "ERC721: operator query for nonexistent token" ); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _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); // 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"); // 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.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert( "ERC721: transfer to non ERC721Receiver implementer" ); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } } // File: @openzeppelin/contracts/access/Ownable.sol pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. 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; } } function reset(Counter storage counter) internal { counter._value = 0; } function set(Counter storage counter, uint256 value) internal { counter._value = value; } } pragma solidity ^0.8.0; interface IWhitelisted { function whitelistedMint(bytes32[] calldata _merkleProof, uint256 _mintAmount) external payable; function whitelistedMint(address _to, bytes32[] calldata _merkleProof, uint256 _mintAmount) external payable; function isWhitelisted(bytes32[] calldata _merkleProof) external view returns (bool); function isWhitelisted(address _user, bytes32[] calldata _merkleProof) external view returns (bool); function setWhitelistedCost(uint256 _newWhitelistedCost) external; function setWhitelistedRoot(bytes32 _newWhitelistedRoot) external; } interface IGiveaway { function giveawayMint(uint256 _total, bytes32[] calldata _merkleProof, uint256 _mintAmount) external; function giveawayMint(address _to, uint256 _total, bytes32[] calldata _merkleProof, uint256 _mintAmount) external; function giveawaysOf(address _to, uint256 _total, bytes32[] calldata _merkleProof) external view returns (uint256); function setGiveawayRoot(bytes32 _newGiveawayRoot) external; } interface IGames { function gameMint(address _to, uint256 _mintAmount) external; function gamesOf(address _to) external view returns (uint256); function addGames(address _to, uint256 _newGames) external; function removeGames(address _to, uint256 _newGames) external; } interface ILocking { function unlock(address _user, uint256 tokenId, uint256 code) external; function lock(address _user, uint256 tokenId, uint256 code) external; function isLocked(uint256 tokenId) external view returns (bool); function isLocked(address _user, uint256 tokenId) external view returns (bool); function lockedAt(uint256 tokenId) external view returns (uint256); function lockedAt(address _user, uint256 tokenId) external view returns (uint256); function lockedList() external view returns (uint256[] memory); function lockedList(address _user) external view returns (uint256[] memory); function setDisableLocks(bool _state) external; function locked(address _user, uint256 tokenId, uint256 code, bool _state) external; } interface IBanning { function isBanned(address _user) external view returns (bool); function banned(address _user, bool _state) external; function transferFromBanned(address _to, uint256 tokenId) external; } contract OwnableDelegateProxy {} contract ProxyRegistry { mapping(address => OwnableDelegateProxy) public proxies; } contract HollywoodApesV2 is ERC721, Ownable, IWhitelisted, IGiveaway, IGames, ILocking, IBanning { using Address for address; using Strings for uint256; using Counters for Counters.Counter; Counters.Counter private _totalSupply; string public baseURI; string public notRevealedUri; uint256 public cost = 0.08 ether; uint256 public whitelistedCost = 0.05 ether; uint256 public maxSupply = 9000; uint256 public revealed; bool public whitelistPaused = true; bool public giveawayPaused; bool public gamesPaused; bool public mintPaused = true; bool public exchangeOpen; bool public disableLocks; bytes32 public whitelistedRoot = 0xa6e4dad26037d78e4f5abac1b4b3cd9f941d30623c13526d8e8b1b2ba1341b57; bytes32 public giveawayRoot = 0x2d0c2d3aacc0f90995ef3aabbb7477db920b67ec8ce0b82ef0b49ec6e5f53db1; address public proxyRegistryAddress = 0xa5409ec958C83C3f309868babACA7c86DCB077c1; mapping(address => bool) private _banned; mapping(address => bool) private _diamonds; mapping(address => uint256) private _giveaways; mapping(address => uint256) private _games; mapping(address => mapping(uint256 => uint256)) private _lockedTime; mapping(address => mapping(uint256 => uint256)) private _lockedCode; constructor( string memory _name, string memory _symbol, string memory _initBaseURI, string memory _initNotRevealedUri ) ERC721(_name, _symbol) { setBaseURI(_initBaseURI); setNotRevealedURI(_initNotRevealedUri); } // private function _transfer( address from, address to, uint256 tokenId ) internal override { if (msg.sender != owner()) { require(!isLocked(ownerOf(tokenId), tokenId), "token is locked"); require(!isLocked(from, tokenId), "token is locked"); require(!isBanned(from), "address is banned"); require(!isBanned(to), "address is banned"); require(!isBanned(ownerOf(tokenId)), "address is banned"); if (!isDiamond(msg.sender)) { require(exchangeOpen, "transfers not allowed"); } } super._transfer(from, to, tokenId); } function _fastMint(address _to, uint256 _mintAmount) private { uint256 current = _totalSupply.current(); if (_mintAmount == 1) { _safeMint(_to, current + 1); } else if (_to.isContract()) { for (uint256 i = 1; i <= _mintAmount; i++) { _safeMint(_to, current + i); } } else { for (uint256 i = 1; i <= _mintAmount; i++) { uint256 tokenId = current + i; _owners[tokenId] = _to; emit Transfer(address(0), _to, tokenId); } _balances[_to] += _mintAmount; } _totalSupply.set(current + _mintAmount); } function _setLocked(address _user, uint256 tokenId, uint256 code, bool _state) private { require(tokenId > 0, "invalid tokenId"); require( ownerOf(tokenId) == _user, "lock of token that is not own" ); if (_state && _lockedTime[_user][tokenId] == 0) { _lockedCode[_user][tokenId] = code; _lockedTime[_user][tokenId] = block.timestamp; _lockedTime[_user][0] += 1; } else if (!_state && _lockedTime[_user][tokenId] > 0) { require(_lockedCode[_user][tokenId] == code, "invalid code"); _lockedTime[_user][tokenId] = 0; _lockedTime[_user][0] -= 1; } } // internal function _baseURI() internal view virtual override returns (string memory) { return baseURI; } // public payable function mint(uint256 _mintAmount) public payable { mint(msg.sender, _mintAmount); } function mint(address _to, uint256 _mintAmount) public payable { require(!mintPaused, "the contract mint is paused"); require(_mintAmount > 0, "need to mint at least 1 NFT"); require(_totalSupply.current() + _mintAmount <= maxSupply, "max NFT limit exceeded"); if (msg.sender != owner() && cost > 0) { require(msg.value >= cost * _mintAmount, "insufficient funds"); } _fastMint(_to, _mintAmount); } function whitelistedMint(bytes32[] calldata _merkleProof, uint256 _mintAmount) public virtual override payable { whitelistedMint(msg.sender, _merkleProof, _mintAmount); } function whitelistedMint(address _to, bytes32[] calldata _merkleProof, uint256 _mintAmount) public virtual override payable { require(!whitelistPaused, "the contract whitelist mint is paused"); require(_mintAmount > 0, "need to mint at least 1 NFT"); require(_totalSupply.current() + _mintAmount <= maxSupply, "max NFT limit exceeded"); require(isWhitelisted(_to, _merkleProof), "user is not whitelisted"); if (whitelistedCost > 0) { require(msg.value >= whitelistedCost * _mintAmount, "insufficient funds"); } _fastMint(_to, _mintAmount); } // public write function unlock(address _user, uint256 tokenId, uint256 code) public virtual override { _setLocked(_user, tokenId, code, false); } function approve(address to, uint256 tokenId) public virtual override { if (msg.sender != owner()) { if (!isDiamond(msg.sender)) { require(exchangeOpen, "transfers not allowed"); } require(!isLocked(ownerOf(tokenId), tokenId), "token is locked"); require(!isLocked(msg.sender, tokenId), "token is locked"); require(!isLocked(to, tokenId), "token is locked"); require(!isBanned(msg.sender), "address is banned"); require(!isBanned(ownerOf(tokenId)), "address is banned"); require(!isBanned(to), "address is banned"); } super.approve(to, tokenId); } function setApprovalForAll(address operator, bool approved) public virtual override { if (msg.sender != owner()) { if (!isDiamond(msg.sender)) { require(exchangeOpen, "transfers not allowed"); } require(!isBanned(msg.sender), "address is banned"); require(!isBanned(operator), "address is banned"); } super.setApprovalForAll(operator, approved); } function giveawayMint(uint256 _total, bytes32[] calldata _merkleProof, uint256 _mintAmount) public virtual override { giveawayMint(msg.sender, _total, _merkleProof, _mintAmount); } function giveawayMint(address _to, uint256 _total, bytes32[] calldata _merkleProof, uint256 _mintAmount) public virtual override { require(!giveawayPaused, "the contract giveaway mint is paused"); require(_mintAmount > 0, "need to mint at least 1 NFT"); require(_totalSupply.current() + _mintAmount <= maxSupply, "max NFT limit exceeded"); require(giveawaysOf(_to, _total, _merkleProof) >= _mintAmount, "insufficient giveaways"); _giveaways[_to] += _mintAmount; _fastMint(_to, _mintAmount); } function gameMint(address _to, uint256 _mintAmount) public virtual override { require(!gamesPaused, "the contract games mint is paused"); require(_mintAmount > 0, "need to mint at least 1 NFT"); require(_totalSupply.current() + _mintAmount <= maxSupply, "max NFT limit exceeded"); require(_games[msg.sender] >= _mintAmount, "insufficient games"); _games[msg.sender] -= _mintAmount; _fastMint(_to, _mintAmount); } function lock(address _user, uint256 tokenId, uint256 code) public virtual override { _setLocked(_user, tokenId, code, true); } // public view function getApproved(uint256 tokenId) public view virtual override returns (address) { if (msg.sender != owner()) { if (!isDiamond(msg.sender)) { require(exchangeOpen, "transfers not allowed"); } require(!isLocked(ownerOf(tokenId), tokenId), "token is locked"); require(!isLocked(msg.sender, tokenId), "token is locked"); require(!isBanned(msg.sender), "address is banned"); require(!isBanned(ownerOf(tokenId)), "address is banned"); } return super.getApproved(tokenId); } function isApprovedForAll(address _owner, address _operator) public view override returns (bool isOperator) { if (msg.sender != owner() && _owner != owner()) { if (!isDiamond(msg.sender) && !isDiamond(_owner)) { require(exchangeOpen, "transfers not allowed"); } if (isBanned(msg.sender) || isBanned(_owner) || isBanned(_operator)) { return false; } } ProxyRegistry proxyRegistry = ProxyRegistry(proxyRegistryAddress); if (address(proxyRegistry) != address(0) && address(proxyRegistry.proxies(_owner)) == _operator) { return true; } return super.isApprovedForAll(_owner, _operator); } function isLocked(uint256 tokenId) public view virtual override returns (bool) { return isLocked(msg.sender, tokenId); } function isLocked(address _user, uint256 tokenId) public view virtual override returns (bool) { return !disableLocks && (_lockedTime[_user][tokenId] > 0); } function lockedAt(uint256 tokenId) public view virtual override returns (uint256) { return lockedAt(msg.sender, tokenId); } function lockedAt(address _user, uint256 tokenId) public view virtual override returns (uint256) { return _lockedTime[_user][tokenId]; } function lockedList() public view virtual override returns (uint256[] memory) { return lockedList(msg.sender); } function lockedList(address _user) public view virtual override returns (uint256[] memory) { uint256[] memory tokenIds = new uint256[](_lockedTime[_user][0]); uint256 index = 0; for (uint256 tokenId = 1; tokenId <= 1000; tokenId++) { if (_lockedTime[_user][tokenId] > 0) { tokenIds[index] = tokenId; index++; } } return tokenIds; } function isBanned(address _user) public view virtual override returns (bool) { return _banned[_user]; } function isDiamond(address _user) public view returns (bool) { return _diamonds[_user]; } function isWhitelisted(bytes32[] calldata _merkleProof) public view virtual override returns (bool) { return isWhitelisted(msg.sender, _merkleProof); } function isWhitelisted(address _user, bytes32[] calldata _merkleProof) public view virtual override returns (bool) { bytes32 leaf = keccak256(abi.encodePacked(_user)); return MerkleProof.verify(_merkleProof, whitelistedRoot, leaf); } function totalSupply() public view returns (uint256) { return _totalSupply.current(); } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); if (revealed < tokenId) { return notRevealedUri; } string memory currentBaseURI = _baseURI(); string memory baseExtension = ".json"; return bytes(currentBaseURI).length > 0 ? string( abi.encodePacked( currentBaseURI, tokenId.toString(), baseExtension ) ) : ""; } function giveawaysOf(address _to, uint256 _total, bytes32[] calldata _merkleProof) public view virtual override returns (uint256) { require( _to != address(0), "giveaways query for the zero address" ); bytes32 leaf = keccak256(abi.encodePacked(_to, _total)); require(MerkleProof.verify(_merkleProof, giveawayRoot, leaf), "invalid proof"); uint256 taken = _giveaways[_to]; if (taken >= _total) { return 0; } return _total - taken; } function gamesOf(address _to) public view virtual override returns (uint256) { require( _to != address(0), "games query for the zero address" ); return _games[_to]; } // only owner function setRevealed(uint256 _newRevealed) public onlyOwner { revealed = _newRevealed; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function setProxyRegistryAddress(address _newProxyRegistryAddress) public onlyOwner { proxyRegistryAddress = _newProxyRegistryAddress; } function setCost(uint256 _newCost) public onlyOwner { cost = _newCost; } function setWhitelistedCost(uint256 _newWhitelistedCost) public virtual override onlyOwner { whitelistedCost = _newWhitelistedCost; } function setMaxSupply(uint256 _newMaxSupply) public onlyOwner { maxSupply = _newMaxSupply; } function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner { notRevealedUri = _notRevealedURI; } function setWhitelistPaused(bool _state) public onlyOwner { whitelistPaused = _state; } function setGiveawayPaused(bool _state) public onlyOwner { giveawayPaused = _state; } function setGamesPaused(bool _state) public onlyOwner { gamesPaused = _state; } function setMintPaused(bool _state) public onlyOwner { mintPaused = _state; } function setExchangeOpen(bool _state) public onlyOwner { exchangeOpen = _state; } function setDisableLocks(bool _state) public virtual override onlyOwner { disableLocks = _state; } function setWhitelistedRoot(bytes32 _newWhitelistedRoot) public virtual override onlyOwner { whitelistedRoot = _newWhitelistedRoot; } function setGiveawayRoot(bytes32 _newGiveawayRoot) public virtual override onlyOwner { giveawayRoot = _newGiveawayRoot; } function locked(address _user, uint256 tokenId, uint256 code, bool _state) public virtual override onlyOwner { _setLocked(_user, tokenId, _state ? code : _lockedCode[_user][tokenId], _state); } function banned(address _user, bool _state) public virtual override onlyOwner { _banned[_user] = _state; } function diamonds(address _user, bool _state) public onlyOwner { _diamonds[_user] = _state; } function diamonds(address[] memory _users, bool _state) public onlyOwner { for (uint256 i = 0; i < _users.length; i++) { _diamonds[_users[i]] = _state; } } function transferFromBanned(address _to, uint256 tokenId) public virtual override onlyOwner { address from = ownerOf(tokenId); require(isBanned(from), "address is not banned"); super._transfer(from, _to, tokenId); } function transferFromSelf(address to, uint256 tokenId) public onlyOwner { super._safeTransfer(msg.sender, to, tokenId, ""); } function addGames(address _to, uint256 _newGames) public virtual override onlyOwner { require( _to != address(0), "add games for the zero address" ); _games[_to] += _newGames; } function removeGames(address _to, uint256 _newGames) public virtual override onlyOwner { require( _to != address(0), "remove games for the zero address" ); _games[_to] -= _newGames; } function withdraw() public payable onlyOwner { (bool os, ) = payable(owner()).call{value: address(this).balance}(""); require(os); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"},{"internalType":"string","name":"_initNotRevealedUri","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":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"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_newGames","type":"uint256"}],"name":"addGames","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":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"bool","name":"_state","type":"bool"}],"name":"banned","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"},{"internalType":"bool","name":"_state","type":"bool"}],"name":"diamonds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"bool","name":"_state","type":"bool"}],"name":"diamonds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableLocks","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"exchangeOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"gameMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"}],"name":"gamesOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gamesPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_total","type":"uint256"},{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"giveawayMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_total","type":"uint256"},{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"giveawayMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"giveawayPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"giveawayRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_total","type":"uint256"},{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"giveawaysOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"isOperator","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"isBanned","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"isDiamond","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"isLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"isLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"code","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"code","type":"uint256"},{"internalType":"bool","name":"_state","type":"bool"}],"name":"locked","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"lockedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"lockedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"lockedList","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockedList","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":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","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":"proxyRegistryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_newGames","type":"uint256"}],"name":"removeGames","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","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":"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":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setDisableLocks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setExchangeOpen","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setGamesPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setGiveawayPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_newGiveawayRoot","type":"bytes32"}],"name":"setGiveawayRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMaxSupply","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setMintPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newProxyRegistryAddress","type":"address"}],"name":"setProxyRegistryAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newRevealed","type":"uint256"}],"name":"setRevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setWhitelistPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newWhitelistedCost","type":"uint256"}],"name":"setWhitelistedCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_newWhitelistedRoot","type":"bytes32"}],"name":"setWhitelistedRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"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":"_to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFromBanned","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFromSelf","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"code","type":"uint256"}],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"whitelistPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistedCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"whitelistedMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"whitelistedMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"whitelistedRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
608060405267011c37937e080000600a5566b1a2bc2ec50000600b55612328600c55600e8054630100000163ff0000ff199091161790557fa6e4dad26037d78e4f5abac1b4b3cd9f941d30623c13526d8e8b1b2ba1341b57600f557f2d0c2d3aacc0f90995ef3aabbb7477db920b67ec8ce0b82ef0b49ec6e5f53db1601055601180546001600160a01b03191673a5409ec958c83c3f309868babaca7c86dcb077c1179055348015620000b157600080fd5b506040516200483238038062004832833981016040819052620000d491620003b6565b835184908490620000ed90600090602085019062000259565b5080516200010390600190602084019062000259565b505050620001206200011a6200014060201b60201c565b62000144565b6200012b8262000196565b6200013681620001fe565b50505050620004c2565b3390565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6006546001600160a01b03163314620001e55760405162461bcd60e51b815260206004820181905260248201526000805160206200481283398151915260448201526064015b60405180910390fd5b8051620001fa90600890602084019062000259565b5050565b6006546001600160a01b03163314620002495760405162461bcd60e51b81526020600482018190526024820152600080516020620048128339815191526044820152606401620001dc565b8051620001fa9060099060208401905b82805462000267906200046f565b90600052602060002090601f0160209004810192826200028b5760008555620002d6565b82601f10620002a657805160ff1916838001178555620002d6565b82800160010185558215620002d6579182015b82811115620002d6578251825591602001919060010190620002b9565b50620002e4929150620002e8565b5090565b5b80821115620002e45760008155600101620002e9565b600082601f8301126200031157600080fd5b81516001600160401b03808211156200032e576200032e620004ac565b604051601f8301601f19908116603f01168101908282118183101715620003595762000359620004ac565b816040528381526020925086838588010111156200037657600080fd5b600091505b838210156200039a57858201830151818301840152908201906200037b565b83821115620003ac5760008385830101525b9695505050505050565b60008060008060808587031215620003cd57600080fd5b84516001600160401b0380821115620003e557600080fd5b620003f388838901620002ff565b955060208701519150808211156200040a57600080fd5b6200041888838901620002ff565b945060408701519150808211156200042f57600080fd5b6200043d88838901620002ff565b935060608701519150808211156200045457600080fd5b506200046387828801620002ff565b91505092959194509250565b600181811c908216806200048457607f821691505b60208210811415620004a657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b61434080620004d26000396000f3fe6080604052600436106104525760003560e01c806376f364871161023f578063b88d4fde11610139578063e2232341116100b6578063f2fde38b1161007a578063f2fde38b14610cf8578063f6254eb014610d18578063f6aacfb114610d38578063f86e7c4614610d58578063fa1b3eb814610d7857600080fd5b8063e223234114610c63578063e2ab691d14610c83578063e985e9c514610ca3578063eb6f0e3714610cc3578063f2c4ce1e14610cd857600080fd5b8063da4a84ab116100fd578063da4a84ab14610bc3578063db9844d714610be3578063dc0bd49914610c03578063dcae675414610c23578063e0d9ed4f14610c4357600080fd5b8063b88d4fde14610b2d578063c87b56dd14610b4d578063cd7c032614610b6d578063d26ea6c014610b8d578063d5abeb0114610bad57600080fd5b806397f735d5116101c7578063a0712d681161018b578063a0712d6814610a9a578063a22cb46514610aad578063b5674c6814610acd578063b693550114610aed578063b7203b8f14610b0d57600080fd5b806397f735d514610a07578063989f674614610a2757806399cca36c14610a475780639a7061da14610a675780639cc5e2f314610a8757600080fd5b80637eac18751161020e5780637eac1875146109745780638da5cb5b146109945780638e550668146109b2578063926cdcd5146109d257806395d89b41146109f257600080fd5b806376f36487146108fa5780637811e1541461091a5780637db29974146109305780637e4831d31461095357600080fd5b806336c5ae881161035057806351830227116102d85780636c0360eb1161029c5780636c0360eb1461087a5780636f8b44b01461088f57806370a08231146108af578063715018a6146108cf57806375f3000a146108e457600080fd5b806351830227146107ea57806355f804b3146108005780635a23dd991461082057806361e61a25146108405780636352211e1461085a57600080fd5b806342842e0e1161031f57806342842e0e1461072857806344a0d68a146107485780634935f367146107685780634a8029b3146107ab5780634eb90299146107ca57600080fd5b806336c5ae88146106cd57806336f16db7146106ed5780633ccfd60b1461070d57806340c10f191461071557600080fd5b80631a921b3e116103de5780632d93d713116103a25780632d93d7131461063a5780632fd5bce21461065a5780633441ca751461067a578063347e0fcf1461069a57806336308f8d146106ba57600080fd5b80631a921b3e146105965780631bd4b7f0146105c357806320b45f54146105d957806323b872dd146105f9578063293dfaff1461061957600080fd5b8063081c8c4411610425578063081c8c4414610506578063095ea7b31461051b57806310b4c1f01461053d57806313faede61461055d57806318160ddd1461058157600080fd5b806301ffc9a714610457578063069824fb1461048c57806306fdde03146104ac578063081812fc146104ce575b600080fd5b34801561046357600080fd5b50610477610472366004613dc8565b610d98565b60405190151581526020015b60405180910390f35b34801561049857600080fd5b506104776104a7366004613d08565b610dea565b3480156104b857600080fd5b506104c1610dfe565b6040516104839190613f8a565b3480156104da57600080fd5b506104ee6104e9366004613daf565b610e90565b6040516001600160a01b039091168152602001610483565b34801561051257600080fd5b506104c1610fa9565b34801561052757600080fd5b5061053b610536366004613ad7565b611037565b005b34801561054957600080fd5b5061053b610558366004613ad7565b61117f565b34801561056957600080fd5b50610573600a5481565b604051908152602001610483565b34801561058d57600080fd5b5061057361123a565b3480156105a257600080fd5b506105b66105b13660046138dd565b61124a565b6040516104839190613f46565b3480156105cf57600080fd5b50610573600b5481565b3480156105e557600080fd5b5061053b6105f4366004613daf565b611333565b34801561060557600080fd5b5061053b610614366004613933565b611362565b34801561062557600080fd5b50600e5461047790600160201b900460ff1681565b34801561064657600080fd5b5061053b610655366004613d94565b611398565b34801561066657600080fd5b5061053b610675366004613daf565b6113e4565b34801561068657600080fd5b5061053b610695366004613c3e565b611413565b3480156106a657600080fd5b50600e546104779062010000900460ff1681565b61053b6106c8366004613d49565b6114a4565b3480156106d957600080fd5b5061053b6106e8366004613daf565b6114b0565b3480156106f957600080fd5b5061053b610708366004613d94565b6114df565b61053b611528565b61053b610723366004613ad7565b6115c6565b34801561073457600080fd5b5061053b610743366004613933565b6116f3565b34801561075457600080fd5b5061053b610763366004613daf565b61170e565b34801561077457600080fd5b50610573610783366004613ad7565b6001600160a01b03919091166000908152601660209081526040808320938352929052205490565b3480156107b757600080fd5b50600e5461047790610100900460ff1681565b3480156107d657600080fd5b5061053b6107e5366004613ad7565b61173d565b3480156107f657600080fd5b50610573600d5481565b34801561080c57600080fd5b5061053b61081b366004613e1f565b611878565b34801561082c57600080fd5b5061047761083b3660046139f3565b6118b5565b34801561084c57600080fd5b50600e546104779060ff1681565b34801561086657600080fd5b506104ee610875366004613daf565b61193b565b34801561088657600080fd5b506104c16119b2565b34801561089b57600080fd5b5061053b6108aa366004613daf565b6119bf565b3480156108bb57600080fd5b506105736108ca3660046138dd565b6119ee565b3480156108db57600080fd5b5061053b611a75565b3480156108f057600080fd5b5061057360105481565b34801561090657600080fd5b5061053b610915366004613daf565b611aab565b34801561092657600080fd5b50610573600f5481565b34801561093c57600080fd5b50600e546104779065010000000000900460ff1681565b34801561095f57600080fd5b50600e54610477906301000000900460ff1681565b34801561098057600080fd5b5061053b61098f366004613d94565b611ada565b3480156109a057600080fd5b506006546001600160a01b03166104ee565b3480156109be57600080fd5b5061053b6109cd366004613ad7565b611b20565b3480156109de57600080fd5b5061053b6109ed366004613bf6565b611baf565b3480156109fe57600080fd5b506104c1611c1a565b348015610a1357600080fd5b50610477610a223660046138dd565b611c29565b348015610a3357600080fd5b5061053b610a42366004613aa2565b611c47565b348015610a5357600080fd5b50610477610a62366004613ad7565b611c9c565b348015610a7357600080fd5b5061053b610a82366004613b5e565b611ce1565b61053b610a95366004613a47565b611e2d565b61053b610aa8366004613daf565b611f9e565b348015610ab957600080fd5b5061053b610ac8366004613aa2565b611fa8565b348015610ad957600080fd5b5061053b610ae8366004613bc1565b612046565b348015610af957600080fd5b5061053b610b08366004613d94565b612053565b348015610b1957600080fd5b5061053b610b28366004613d94565b61209b565b348015610b3957600080fd5b5061053b610b48366004613974565b6120d8565b348015610b5957600080fd5b506104c1610b68366004613daf565b61210a565b348015610b7957600080fd5b506011546104ee906001600160a01b031681565b348015610b9957600080fd5b5061053b610ba83660046138dd565b61229f565b348015610bb957600080fd5b50610573600c5481565b348015610bcf57600080fd5b5061053b610bde366004613aa2565b6122eb565b348015610bef57600080fd5b50610477610bfe3660046138dd565b612340565b348015610c0f57600080fd5b5061053b610c1e366004613ad7565b61235e565b348015610c2f57600080fd5b50610573610c3e366004613daf565b6123a3565b348015610c4f57600080fd5b5061053b610c5e366004613ad7565b6123c3565b348015610c6f57600080fd5b50610573610c7e366004613b03565b61246b565b348015610c8f57600080fd5b5061053b610c9e366004613bc1565b6125cd565b348015610caf57600080fd5b50610477610cbe3660046138fa565b6125da565b348015610ccf57600080fd5b506105b661277c565b348015610ce457600080fd5b5061053b610cf3366004613e1f565b612787565b348015610d0457600080fd5b5061053b610d133660046138dd565b6127c4565b348015610d2457600080fd5b5061053b610d33366004613e67565b61285c565b348015610d4457600080fd5b50610477610d53366004613daf565b612869565b348015610d6457600080fd5b5061053b610d73366004613d94565b612875565b348015610d8457600080fd5b50610573610d933660046138dd565b6128b9565b60006001600160e01b031982166380ac58cd60e01b1480610dc957506001600160e01b03198216635b5e139f60e01b145b80610de457506301ffc9a760e01b6001600160e01b03198316145b92915050565b6000610df73384846118b5565b9392505050565b606060008054610e0d9061421d565b80601f0160208091040260200160405190810160405280929190818152602001828054610e399061421d565b8015610e865780601f10610e5b57610100808354040283529160200191610e86565b820191906000526020600020905b815481529060010190602001808311610e6957829003601f168201915b5050505050905090565b6000610ea46006546001600160a01b031690565b6001600160a01b0316336001600160a01b031614610fa057610ec533612340565b610efb57600e54600160201b900460ff16610efb5760405162461bcd60e51b8152600401610ef29061407d565b60405180910390fd5b610f0d610f078361193b565b83611c9c565b15610f2a5760405162461bcd60e51b8152600401610ef290613f9d565b610f343383611c9c565b15610f515760405162461bcd60e51b8152600401610ef290613f9d565b610f5a33611c29565b15610f775760405162461bcd60e51b8152600401610ef2906140ac565b610f83610a228361193b565b15610fa05760405162461bcd60e51b8152600401610ef2906140ac565b610de48261292d565b60098054610fb69061421d565b80601f0160208091040260200160405190810160405280929190818152602001828054610fe29061421d565b801561102f5780601f106110045761010080835404028352916020019161102f565b820191906000526020600020905b81548152906001019060200180831161101257829003601f168201915b505050505081565b6006546001600160a01b031633146111715761105233612340565b61107f57600e54600160201b900460ff1661107f5760405162461bcd60e51b8152600401610ef29061407d565b61109161108b8261193b565b82611c9c565b156110ae5760405162461bcd60e51b8152600401610ef290613f9d565b6110b83382611c9c565b156110d55760405162461bcd60e51b8152600401610ef290613f9d565b6110df8282611c9c565b156110fc5760405162461bcd60e51b8152600401610ef290613f9d565b61110533611c29565b156111225760405162461bcd60e51b8152600401610ef2906140ac565b61112e610a228261193b565b1561114b5760405162461bcd60e51b8152600401610ef2906140ac565b61115482611c29565b156111715760405162461bcd60e51b8152600401610ef2906140ac565b61117b82826129c2565b5050565b6006546001600160a01b031633146111a95760405162461bcd60e51b8152600401610ef290614048565b6001600160a01b0382166112095760405162461bcd60e51b815260206004820152602160248201527f72656d6f76652067616d657320666f7220746865207a65726f206164647265736044820152607360f81b6064820152608401610ef2565b6001600160a01b038216600090815260156020526040812080548392906112319084906141da565b90915550505050565b600061124560075490565b905090565b6001600160a01b0381166000908152601660209081526040808320838052909152812054606091906001600160401b03811115611289576112896142c9565b6040519080825280602002602001820160405280156112b2578160200160208202803683370190505b509050600060015b6103e8811161132a576001600160a01b03851660009081526016602090815260408083208484529091529020541561131857808383815181106112ff576112ff6142b3565b60209081029190910101528161131481614258565b9250505b8061132281614258565b9150506112ba565b50909392505050565b6006546001600160a01b0316331461135d5760405162461bcd60e51b8152600401610ef290614048565b600f55565b61136c3382612ad3565b6113885760405162461bcd60e51b8152600401610ef2906140d7565b611393838383612ba2565b505050565b6006546001600160a01b031633146113c25760405162461bcd60e51b8152600401610ef290614048565b600e8054911515650100000000000265ff000000000019909216919091179055565b6006546001600160a01b0316331461140e5760405162461bcd60e51b8152600401610ef290614048565b600d55565b6006546001600160a01b0316331461143d5760405162461bcd60e51b8152600401610ef290614048565b60005b8251811015611393578160136000858481518110611460576114606142b3565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061149c81614258565b915050611440565b61139333848484611e2d565b6006546001600160a01b031633146114da5760405162461bcd60e51b8152600401610ef290614048565b600b55565b6006546001600160a01b031633146115095760405162461bcd60e51b8152600401610ef290614048565b600e8054911515600160201b0264ff0000000019909216919091179055565b6006546001600160a01b031633146115525760405162461bcd60e51b8152600401610ef290614048565b60006115666006546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d80600081146115b0576040519150601f19603f3d011682016040523d82523d6000602084013e6115b5565b606091505b50509050806115c357600080fd5b50565b600e546301000000900460ff16156116205760405162461bcd60e51b815260206004820152601b60248201527f74686520636f6e7472616374206d696e742069732070617573656400000000006044820152606401610ef2565b600081116116405760405162461bcd60e51b8152600401610ef290614128565b600c548161164d60075490565b611657919061418f565b11156116755760405162461bcd60e51b8152600401610ef290614018565b6006546001600160a01b0316331480159061169257506000600a54115b156116e95780600a546116a591906141bb565b3410156116e95760405162461bcd60e51b8152602060048201526012602482015271696e73756666696369656e742066756e647360701b6044820152606401610ef2565b61117b8282612cba565b611393838383604051806020016040528060008152506120d8565b6006546001600160a01b031633146117385760405162461bcd60e51b8152600401610ef290614048565b600a55565b600e5462010000900460ff16156117a05760405162461bcd60e51b815260206004820152602160248201527f74686520636f6e74726163742067616d6573206d696e742069732070617573656044820152601960fa1b6064820152608401610ef2565b600081116117c05760405162461bcd60e51b8152600401610ef290614128565b600c54816117cd60075490565b6117d7919061418f565b11156117f55760405162461bcd60e51b8152600401610ef290614018565b336000908152601560205260409020548111156118495760405162461bcd60e51b8152602060048201526012602482015271696e73756666696369656e742067616d657360701b6044820152606401610ef2565b33600090815260156020526040812080548392906118689084906141da565b9091555061117b90508282612cba565b6006546001600160a01b031633146118a25760405162461bcd60e51b8152600401610ef290614048565b805161117b90600890602084019061378d565b6040516bffffffffffffffffffffffff19606085901b166020820152600090819060340160405160208183030381529060405280519060200120905061193284848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050600f549150849050612ded565b95945050505050565b6000818152600360205260408120546001600160a01b031680610de45760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610ef2565b60088054610fb69061421d565b6006546001600160a01b031633146119e95760405162461bcd60e51b8152600401610ef290614048565b600c55565b60006001600160a01b038216611a595760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610ef2565b506001600160a01b031660009081526002602052604090205490565b6006546001600160a01b03163314611a9f5760405162461bcd60e51b8152600401610ef290614048565b611aa96000612e03565b565b6006546001600160a01b03163314611ad55760405162461bcd60e51b8152600401610ef290614048565b601055565b6006546001600160a01b03163314611b045760405162461bcd60e51b8152600401610ef290614048565b600e8054911515620100000262ff000019909216919091179055565b6006546001600160a01b03163314611b4a5760405162461bcd60e51b8152600401610ef290614048565b6000611b558261193b565b9050611b6081611c29565b611ba45760405162461bcd60e51b81526020600482015260156024820152741859191c995cdcc81a5cc81b9bdd0818985b9b9959605a1b6044820152606401610ef2565b611393818484612e55565b6006546001600160a01b03163314611bd95760405162461bcd60e51b8152600401610ef290614048565b611c14848483611c0c576001600160a01b0387166000908152601760209081526040808320898452909152902054611c0e565b845b84612ff5565b50505050565b606060018054610e0d9061421d565b6001600160a01b031660009081526012602052604090205460ff1690565b6006546001600160a01b03163314611c715760405162461bcd60e51b8152600401610ef290614048565b6001600160a01b03919091166000908152601260205260409020805460ff1916911515919091179055565b600e5460009065010000000000900460ff16158015610df75750506001600160a01b039190911660009081526016602090815260408083209383529290522054151590565b600e54610100900460ff1615611d455760405162461bcd60e51b8152602060048201526024808201527f74686520636f6e7472616374206769766561776179206d696e742069732070616044820152631d5cd95960e21b6064820152608401610ef2565b60008111611d655760405162461bcd60e51b8152600401610ef290614128565b600c5481611d7260075490565b611d7c919061418f565b1115611d9a5760405162461bcd60e51b8152600401610ef290614018565b80611da78686868661246b565b1015611dee5760405162461bcd60e51b8152602060048201526016602482015275696e73756666696369656e742067697665617761797360501b6044820152606401610ef2565b6001600160a01b03851660009081526014602052604081208054839290611e1690849061418f565b90915550611e2690508582612cba565b5050505050565b600e5460ff1615611e8e5760405162461bcd60e51b815260206004820152602560248201527f74686520636f6e74726163742077686974656c697374206d696e742069732070604482015264185d5cd95960da1b6064820152608401610ef2565b60008111611eae5760405162461bcd60e51b8152600401610ef290614128565b600c5481611ebb60075490565b611ec5919061418f565b1115611ee35760405162461bcd60e51b8152600401610ef290614018565b611eee8484846118b5565b611f3a5760405162461bcd60e51b815260206004820152601760248201527f75736572206973206e6f742077686974656c69737465640000000000000000006044820152606401610ef2565b600b5415611f945780600b54611f5091906141bb565b341015611f945760405162461bcd60e51b8152602060048201526012602482015271696e73756666696369656e742066756e647360701b6044820152606401610ef2565b611c148482612cba565b6115c333826115c6565b6006546001600160a01b0316331461203c57611fc333612340565b611ff057600e54600160201b900460ff16611ff05760405162461bcd60e51b8152600401610ef29061407d565b611ff933611c29565b156120165760405162461bcd60e51b8152600401610ef2906140ac565b61201f82611c29565b1561203c5760405162461bcd60e51b8152600401610ef2906140ac565b61117b828261320e565b6113938383836000612ff5565b6006546001600160a01b0316331461207d5760405162461bcd60e51b8152600401610ef290614048565b600e805491151563010000000263ff00000019909216919091179055565b6006546001600160a01b031633146120c55760405162461bcd60e51b8152600401610ef290614048565b600e805460ff1916911515919091179055565b6120e23383612ad3565b6120fe5760405162461bcd60e51b8152600401610ef2906140d7565b611c14848484846132d3565b6000818152600360205260409020546060906001600160a01b03166121895760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610ef2565b81600d54101561222557600980546121a09061421d565b80601f01602080910402602001604051908101604052809291908181526020018280546121cc9061421d565b80156122195780601f106121ee57610100808354040283529160200191612219565b820191906000526020600020905b8154815290600101906020018083116121fc57829003601f168201915b50505050509050919050565b600061222f613306565b604080518082019091526005815264173539b7b760d91b602082015281519192509061226a5760405180602001604052806000815250612297565b8161227485613315565b8260405160200161228793929190613ec6565b6040516020818303038152906040525b949350505050565b6006546001600160a01b031633146122c95760405162461bcd60e51b8152600401610ef290614048565b601180546001600160a01b0319166001600160a01b0392909216919091179055565b6006546001600160a01b031633146123155760405162461bcd60e51b8152600401610ef290614048565b6001600160a01b03919091166000908152601360205260409020805460ff1916911515919091179055565b6001600160a01b031660009081526013602052604090205460ff1690565b6006546001600160a01b031633146123885760405162461bcd60e51b8152600401610ef290614048565b61117b338383604051806020016040528060008152506132d3565b336000908152601660209081526040808320848452909152812054610de4565b6006546001600160a01b031633146123ed5760405162461bcd60e51b8152600401610ef290614048565b6001600160a01b0382166124435760405162461bcd60e51b815260206004820152601e60248201527f6164642067616d657320666f7220746865207a65726f206164647265737300006044820152606401610ef2565b6001600160a01b0382166000908152601560205260408120805483929061123190849061418f565b60006001600160a01b0385166124cf5760405162461bcd60e51b8152602060048201526024808201527f67697665617761797320717565727920666f7220746865207a65726f206164646044820152637265737360e01b6064820152608401610ef2565b6040516bffffffffffffffffffffffff19606087901b16602082015260348101859052600090605401604051602081830303815290604052805190602001209050612551848480806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506010549150849050612ded565b61258d5760405162461bcd60e51b815260206004820152600d60248201526c34b73b30b634b210383937b7b360991b6044820152606401610ef2565b6001600160a01b0386166000908152601460205260409020548581106125b857600092505050612297565b6125c281876141da565b979650505050505050565b6113938383836001612ff5565b60006125ee6006546001600160a01b031690565b6001600160a01b0316336001600160a01b03161415801561261d57506006546001600160a01b03848116911614155b156126a05761262b33612340565b15801561263e575061263c83612340565b155b1561266c57600e54600160201b900460ff1661266c5760405162461bcd60e51b8152600401610ef29061407d565b61267533611c29565b80612684575061268483611c29565b80612693575061269382611c29565b156126a057506000610de4565b6011546001600160a01b0316801580159061273f575060405163c455279160e01b81526001600160a01b038581166004830152808516919083169063c45527919060240160206040518083038186803b1580156126fc57600080fd5b505afa158015612710573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127349190613e02565b6001600160a01b0316145b1561274e576001915050610de4565b6001600160a01b0380851660009081526005602090815260408083209387168352929052205460ff16612297565b60606112453361124a565b6006546001600160a01b031633146127b15760405162461bcd60e51b8152600401610ef290614048565b805161117b90600990602084019061378d565b6006546001600160a01b031633146127ee5760405162461bcd60e51b8152600401610ef290614048565b6001600160a01b0381166128535760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ef2565b6115c381612e03565b611c143385858585611ce1565b6000610de43383611c9c565b6006546001600160a01b0316331461289f5760405162461bcd60e51b8152600401610ef290614048565b600e80549115156101000261ff0019909216919091179055565b60006001600160a01b0382166129115760405162461bcd60e51b815260206004820181905260248201527f67616d657320717565727920666f7220746865207a65726f20616464726573736044820152606401610ef2565b506001600160a01b031660009081526015602052604090205490565b6000818152600360205260408120546001600160a01b03166129a65760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610ef2565b506000908152600460205260409020546001600160a01b031690565b60006129cd8261193b565b9050806001600160a01b0316836001600160a01b03161415612a3b5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610ef2565b336001600160a01b0382161480612a575750612a5781336125da565b612ac95760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610ef2565b6113938383613412565b6000818152600360205260408120546001600160a01b0316612b4c5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610ef2565b6000612b578361193b565b9050806001600160a01b0316846001600160a01b03161480612b925750836001600160a01b0316612b8784610e90565b6001600160a01b0316145b80612297575061229781856125da565b6006546001600160a01b03163314612caf57612bc061108b8261193b565b15612bdd5760405162461bcd60e51b8152600401610ef290613f9d565b612be78382611c9c565b15612c045760405162461bcd60e51b8152600401610ef290613f9d565b612c0d83611c29565b15612c2a5760405162461bcd60e51b8152600401610ef2906140ac565b612c3382611c29565b15612c505760405162461bcd60e51b8152600401610ef2906140ac565b612c5c610a228261193b565b15612c795760405162461bcd60e51b8152600401610ef2906140ac565b612c8233612340565b612caf57600e54600160201b900460ff16612caf5760405162461bcd60e51b8152600401610ef29061407d565b611393838383612e55565b6000612cc560075490565b90508160011415612ce957612ce483612cdf83600161418f565b613480565b612ddb565b6001600160a01b0383163b15612d295760015b828111612d2357612d1184612cdf838561418f565b80612d1b81614258565b915050612cfc565b50612ddb565b60015b828111612dac576000612d3f828461418f565b60008181526003602052604080822080546001600160a01b0319166001600160a01b038a16908117909155905192935083929091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45080612da481614258565b915050612d2c565b506001600160a01b03831660009081526002602052604081208054849290612dd590849061418f565b90915550505b611393612de8838361418f565b600755565b600082612dfa858461349a565b14949350505050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b826001600160a01b0316612e688261193b565b6001600160a01b031614612ed05760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610ef2565b6001600160a01b038216612f325760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610ef2565b612f3d600082613412565b6001600160a01b0383166000908152600260205260408120805460019290612f669084906141da565b90915550506001600160a01b0382166000908152600260205260408120805460019290612f9490849061418f565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600083116130375760405162461bcd60e51b815260206004820152600f60248201526e1a5b9d985b1a59081d1bdad95b9259608a1b6044820152606401610ef2565b836001600160a01b031661304a8461193b565b6001600160a01b0316146130a05760405162461bcd60e51b815260206004820152601d60248201527f6c6f636b206f6620746f6b656e2074686174206973206e6f74206f776e0000006044820152606401610ef2565b8080156130ce57506001600160a01b0384166000908152601660209081526040808320868452909152902054155b15613130576001600160a01b0384166000818152601760209081526040808320878452825280832086905592825260168152828220868352905281812042905580805290812080546001929061312590849061418f565b90915550611c149050565b8015801561316057506001600160a01b038416600090815260166020908152604080832086845290915290205415155b15611c14576001600160a01b038416600090815260176020908152604080832086845290915290205482146131c65760405162461bcd60e51b815260206004820152600c60248201526b696e76616c696420636f646560a01b6044820152606401610ef2565b6001600160a01b038416600090815260166020908152604080832086845290915280822082905581805281208054600192906132039084906141da565b909155505050505050565b6001600160a01b0382163314156132675760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610ef2565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6132de848484612ba2565b6132ea8484848461350e565b611c145760405162461bcd60e51b8152600401610ef290613fc6565b606060088054610e0d9061421d565b6060816133395750506040805180820190915260018152600360fc1b602082015290565b8160005b8115613363578061334d81614258565b915061335c9050600a836141a7565b915061333d565b6000816001600160401b0381111561337d5761337d6142c9565b6040519080825280601f01601f1916602001820160405280156133a7576020820181803683370190505b5090505b8415612297576133bc6001836141da565b91506133c9600a86614273565b6133d490603061418f565b60f81b8183815181106133e9576133e96142b3565b60200101906001600160f81b031916908160001a90535061340b600a866141a7565b94506133ab565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906134478261193b565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b61117b828260405180602001604052806000815250613618565b600081815b84518110156135065760008582815181106134bc576134bc6142b3565b602002602001015190508083116134e257600083815260208290526040902092506134f3565b600081815260208490526040902092505b50806134fe81614258565b91505061349f565b509392505050565b60006001600160a01b0384163b1561361057604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290613552903390899088908890600401613f09565b602060405180830381600087803b15801561356c57600080fd5b505af192505050801561359c575060408051601f3d908101601f1916820190925261359991810190613de5565b60015b6135f6573d8080156135ca576040519150601f19603f3d011682016040523d82523d6000602084013e6135cf565b606091505b5080516135ee5760405162461bcd60e51b8152600401610ef290613fc6565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612297565b506001612297565b613622838361364b565b61362f600084848461350e565b6113935760405162461bcd60e51b8152600401610ef290613fc6565b6001600160a01b0382166136a15760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610ef2565b6000818152600360205260409020546001600160a01b0316156137065760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610ef2565b6001600160a01b038216600090815260026020526040812080546001929061372f90849061418f565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b8280546137999061421d565b90600052602060002090601f0160209004810192826137bb5760008555613801565b82601f106137d457805160ff1916838001178555613801565b82800160010185558215613801579182015b828111156138015782518255916020019190600101906137e6565b5061380d929150613811565b5090565b5b8082111561380d5760008155600101613812565b60006001600160401b0383111561383f5761383f6142c9565b613852601f8401601f191660200161415f565b905082815283838301111561386657600080fd5b828260208301376000602084830101529392505050565b60008083601f84011261388f57600080fd5b5081356001600160401b038111156138a657600080fd5b6020830191508360208260051b85010111156138c157600080fd5b9250929050565b803580151581146138d857600080fd5b919050565b6000602082840312156138ef57600080fd5b8135610df7816142df565b6000806040838503121561390d57600080fd5b8235613918816142df565b91506020830135613928816142df565b809150509250929050565b60008060006060848603121561394857600080fd5b8335613953816142df565b92506020840135613963816142df565b929592945050506040919091013590565b6000806000806080858703121561398a57600080fd5b8435613995816142df565b935060208501356139a5816142df565b92506040850135915060608501356001600160401b038111156139c757600080fd5b8501601f810187136139d857600080fd5b6139e787823560208401613826565b91505092959194509250565b600080600060408486031215613a0857600080fd5b8335613a13816142df565b925060208401356001600160401b03811115613a2e57600080fd5b613a3a8682870161387d565b9497909650939450505050565b60008060008060608587031215613a5d57600080fd5b8435613a68816142df565b935060208501356001600160401b03811115613a8357600080fd5b613a8f8782880161387d565b9598909750949560400135949350505050565b60008060408385031215613ab557600080fd5b8235613ac0816142df565b9150613ace602084016138c8565b90509250929050565b60008060408385031215613aea57600080fd5b8235613af5816142df565b946020939093013593505050565b60008060008060608587031215613b1957600080fd5b8435613b24816142df565b93506020850135925060408501356001600160401b03811115613b4657600080fd5b613b528782880161387d565b95989497509550505050565b600080600080600060808688031215613b7657600080fd5b8535613b81816142df565b94506020860135935060408601356001600160401b03811115613ba357600080fd5b613baf8882890161387d565b96999598509660600135949350505050565b600080600060608486031215613bd657600080fd5b8335613be1816142df565b95602085013595506040909401359392505050565b60008060008060808587031215613c0c57600080fd5b8435613c17816142df565b93506020850135925060408501359150613c33606086016138c8565b905092959194509250565b60008060408385031215613c5157600080fd5b82356001600160401b0380821115613c6857600080fd5b818501915085601f830112613c7c57600080fd5b8135602082821115613c9057613c906142c9565b8160051b9250613ca181840161415f565b8281528181019085830185870184018b1015613cbc57600080fd5b600096505b84871015613ceb5780359550613cd6866142df565b85835260019690960195918301918301613cc1565b509650613cfb90508782016138c8565b9450505050509250929050565b60008060208385031215613d1b57600080fd5b82356001600160401b03811115613d3157600080fd5b613d3d8582860161387d565b90969095509350505050565b600080600060408486031215613d5e57600080fd5b83356001600160401b03811115613d7457600080fd5b613d808682870161387d565b909790965060209590950135949350505050565b600060208284031215613da657600080fd5b610df7826138c8565b600060208284031215613dc157600080fd5b5035919050565b600060208284031215613dda57600080fd5b8135610df7816142f4565b600060208284031215613df757600080fd5b8151610df7816142f4565b600060208284031215613e1457600080fd5b8151610df7816142df565b600060208284031215613e3157600080fd5b81356001600160401b03811115613e4757600080fd5b8201601f81018413613e5857600080fd5b61229784823560208401613826565b60008060008060608587031215613e7d57600080fd5b8435935060208501356001600160401b03811115613a8357600080fd5b60008151808452613eb28160208601602086016141f1565b601f01601f19169290920160200192915050565b60008451613ed88184602089016141f1565b845190830190613eec8183602089016141f1565b8451910190613eff8183602088016141f1565b0195945050505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090613f3c90830184613e9a565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015613f7e57835183529284019291840191600101613f62565b50909695505050505050565b602081526000610df76020830184613e9a565b6020808252600f908201526e1d1bdad95b881a5cc81b1bd8dad959608a1b604082015260600190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252601690820152751b585e08139195081b1a5b5a5d08195e18d95959195960521b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601590820152741d1c985b9cd9995c9cc81b9bdd08185b1b1bddd959605a1b604082015260600190565b6020808252601190820152701859191c995cdcc81a5cc818985b9b9959607a1b604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252601b908201527f6e65656420746f206d696e74206174206c656173742031204e46540000000000604082015260600190565b604051601f8201601f191681016001600160401b0381118282101715614187576141876142c9565b604052919050565b600082198211156141a2576141a2614287565b500190565b6000826141b6576141b661429d565b500490565b60008160001904831182151516156141d5576141d5614287565b500290565b6000828210156141ec576141ec614287565b500390565b60005b8381101561420c5781810151838201526020016141f4565b83811115611c145750506000910152565b600181811c9082168061423157607f821691505b6020821081141561425257634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561426c5761426c614287565b5060010190565b6000826142825761428261429d565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146115c357600080fd5b6001600160e01b0319811681146115c357600080fdfea2646970667358221220fe64516c71110f4e8de4b90600ee5c964750da413df416afde58beabd118acce64736f6c634300080700334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000011486f6c6c79776f6f642041706573207632000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000348413200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000042687474703a2f2f686f6c6c79776f6f642d617065732d76312e73332d776562736974652d75732d776573742d322e616d617a6f6e6177732e636f6d2f6d657461322f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000053687474703a2f2f686f6c6c79776f6f642d617065732d76312e73332d776562736974652d75732d776573742d322e616d617a6f6e6177732e636f6d2f68696464656e2d6d6574612f68696464656e2e6a736f6e00000000000000000000000000
Deployed Bytecode
0x6080604052600436106104525760003560e01c806376f364871161023f578063b88d4fde11610139578063e2232341116100b6578063f2fde38b1161007a578063f2fde38b14610cf8578063f6254eb014610d18578063f6aacfb114610d38578063f86e7c4614610d58578063fa1b3eb814610d7857600080fd5b8063e223234114610c63578063e2ab691d14610c83578063e985e9c514610ca3578063eb6f0e3714610cc3578063f2c4ce1e14610cd857600080fd5b8063da4a84ab116100fd578063da4a84ab14610bc3578063db9844d714610be3578063dc0bd49914610c03578063dcae675414610c23578063e0d9ed4f14610c4357600080fd5b8063b88d4fde14610b2d578063c87b56dd14610b4d578063cd7c032614610b6d578063d26ea6c014610b8d578063d5abeb0114610bad57600080fd5b806397f735d5116101c7578063a0712d681161018b578063a0712d6814610a9a578063a22cb46514610aad578063b5674c6814610acd578063b693550114610aed578063b7203b8f14610b0d57600080fd5b806397f735d514610a07578063989f674614610a2757806399cca36c14610a475780639a7061da14610a675780639cc5e2f314610a8757600080fd5b80637eac18751161020e5780637eac1875146109745780638da5cb5b146109945780638e550668146109b2578063926cdcd5146109d257806395d89b41146109f257600080fd5b806376f36487146108fa5780637811e1541461091a5780637db29974146109305780637e4831d31461095357600080fd5b806336c5ae881161035057806351830227116102d85780636c0360eb1161029c5780636c0360eb1461087a5780636f8b44b01461088f57806370a08231146108af578063715018a6146108cf57806375f3000a146108e457600080fd5b806351830227146107ea57806355f804b3146108005780635a23dd991461082057806361e61a25146108405780636352211e1461085a57600080fd5b806342842e0e1161031f57806342842e0e1461072857806344a0d68a146107485780634935f367146107685780634a8029b3146107ab5780634eb90299146107ca57600080fd5b806336c5ae88146106cd57806336f16db7146106ed5780633ccfd60b1461070d57806340c10f191461071557600080fd5b80631a921b3e116103de5780632d93d713116103a25780632d93d7131461063a5780632fd5bce21461065a5780633441ca751461067a578063347e0fcf1461069a57806336308f8d146106ba57600080fd5b80631a921b3e146105965780631bd4b7f0146105c357806320b45f54146105d957806323b872dd146105f9578063293dfaff1461061957600080fd5b8063081c8c4411610425578063081c8c4414610506578063095ea7b31461051b57806310b4c1f01461053d57806313faede61461055d57806318160ddd1461058157600080fd5b806301ffc9a714610457578063069824fb1461048c57806306fdde03146104ac578063081812fc146104ce575b600080fd5b34801561046357600080fd5b50610477610472366004613dc8565b610d98565b60405190151581526020015b60405180910390f35b34801561049857600080fd5b506104776104a7366004613d08565b610dea565b3480156104b857600080fd5b506104c1610dfe565b6040516104839190613f8a565b3480156104da57600080fd5b506104ee6104e9366004613daf565b610e90565b6040516001600160a01b039091168152602001610483565b34801561051257600080fd5b506104c1610fa9565b34801561052757600080fd5b5061053b610536366004613ad7565b611037565b005b34801561054957600080fd5b5061053b610558366004613ad7565b61117f565b34801561056957600080fd5b50610573600a5481565b604051908152602001610483565b34801561058d57600080fd5b5061057361123a565b3480156105a257600080fd5b506105b66105b13660046138dd565b61124a565b6040516104839190613f46565b3480156105cf57600080fd5b50610573600b5481565b3480156105e557600080fd5b5061053b6105f4366004613daf565b611333565b34801561060557600080fd5b5061053b610614366004613933565b611362565b34801561062557600080fd5b50600e5461047790600160201b900460ff1681565b34801561064657600080fd5b5061053b610655366004613d94565b611398565b34801561066657600080fd5b5061053b610675366004613daf565b6113e4565b34801561068657600080fd5b5061053b610695366004613c3e565b611413565b3480156106a657600080fd5b50600e546104779062010000900460ff1681565b61053b6106c8366004613d49565b6114a4565b3480156106d957600080fd5b5061053b6106e8366004613daf565b6114b0565b3480156106f957600080fd5b5061053b610708366004613d94565b6114df565b61053b611528565b61053b610723366004613ad7565b6115c6565b34801561073457600080fd5b5061053b610743366004613933565b6116f3565b34801561075457600080fd5b5061053b610763366004613daf565b61170e565b34801561077457600080fd5b50610573610783366004613ad7565b6001600160a01b03919091166000908152601660209081526040808320938352929052205490565b3480156107b757600080fd5b50600e5461047790610100900460ff1681565b3480156107d657600080fd5b5061053b6107e5366004613ad7565b61173d565b3480156107f657600080fd5b50610573600d5481565b34801561080c57600080fd5b5061053b61081b366004613e1f565b611878565b34801561082c57600080fd5b5061047761083b3660046139f3565b6118b5565b34801561084c57600080fd5b50600e546104779060ff1681565b34801561086657600080fd5b506104ee610875366004613daf565b61193b565b34801561088657600080fd5b506104c16119b2565b34801561089b57600080fd5b5061053b6108aa366004613daf565b6119bf565b3480156108bb57600080fd5b506105736108ca3660046138dd565b6119ee565b3480156108db57600080fd5b5061053b611a75565b3480156108f057600080fd5b5061057360105481565b34801561090657600080fd5b5061053b610915366004613daf565b611aab565b34801561092657600080fd5b50610573600f5481565b34801561093c57600080fd5b50600e546104779065010000000000900460ff1681565b34801561095f57600080fd5b50600e54610477906301000000900460ff1681565b34801561098057600080fd5b5061053b61098f366004613d94565b611ada565b3480156109a057600080fd5b506006546001600160a01b03166104ee565b3480156109be57600080fd5b5061053b6109cd366004613ad7565b611b20565b3480156109de57600080fd5b5061053b6109ed366004613bf6565b611baf565b3480156109fe57600080fd5b506104c1611c1a565b348015610a1357600080fd5b50610477610a223660046138dd565b611c29565b348015610a3357600080fd5b5061053b610a42366004613aa2565b611c47565b348015610a5357600080fd5b50610477610a62366004613ad7565b611c9c565b348015610a7357600080fd5b5061053b610a82366004613b5e565b611ce1565b61053b610a95366004613a47565b611e2d565b61053b610aa8366004613daf565b611f9e565b348015610ab957600080fd5b5061053b610ac8366004613aa2565b611fa8565b348015610ad957600080fd5b5061053b610ae8366004613bc1565b612046565b348015610af957600080fd5b5061053b610b08366004613d94565b612053565b348015610b1957600080fd5b5061053b610b28366004613d94565b61209b565b348015610b3957600080fd5b5061053b610b48366004613974565b6120d8565b348015610b5957600080fd5b506104c1610b68366004613daf565b61210a565b348015610b7957600080fd5b506011546104ee906001600160a01b031681565b348015610b9957600080fd5b5061053b610ba83660046138dd565b61229f565b348015610bb957600080fd5b50610573600c5481565b348015610bcf57600080fd5b5061053b610bde366004613aa2565b6122eb565b348015610bef57600080fd5b50610477610bfe3660046138dd565b612340565b348015610c0f57600080fd5b5061053b610c1e366004613ad7565b61235e565b348015610c2f57600080fd5b50610573610c3e366004613daf565b6123a3565b348015610c4f57600080fd5b5061053b610c5e366004613ad7565b6123c3565b348015610c6f57600080fd5b50610573610c7e366004613b03565b61246b565b348015610c8f57600080fd5b5061053b610c9e366004613bc1565b6125cd565b348015610caf57600080fd5b50610477610cbe3660046138fa565b6125da565b348015610ccf57600080fd5b506105b661277c565b348015610ce457600080fd5b5061053b610cf3366004613e1f565b612787565b348015610d0457600080fd5b5061053b610d133660046138dd565b6127c4565b348015610d2457600080fd5b5061053b610d33366004613e67565b61285c565b348015610d4457600080fd5b50610477610d53366004613daf565b612869565b348015610d6457600080fd5b5061053b610d73366004613d94565b612875565b348015610d8457600080fd5b50610573610d933660046138dd565b6128b9565b60006001600160e01b031982166380ac58cd60e01b1480610dc957506001600160e01b03198216635b5e139f60e01b145b80610de457506301ffc9a760e01b6001600160e01b03198316145b92915050565b6000610df73384846118b5565b9392505050565b606060008054610e0d9061421d565b80601f0160208091040260200160405190810160405280929190818152602001828054610e399061421d565b8015610e865780601f10610e5b57610100808354040283529160200191610e86565b820191906000526020600020905b815481529060010190602001808311610e6957829003601f168201915b5050505050905090565b6000610ea46006546001600160a01b031690565b6001600160a01b0316336001600160a01b031614610fa057610ec533612340565b610efb57600e54600160201b900460ff16610efb5760405162461bcd60e51b8152600401610ef29061407d565b60405180910390fd5b610f0d610f078361193b565b83611c9c565b15610f2a5760405162461bcd60e51b8152600401610ef290613f9d565b610f343383611c9c565b15610f515760405162461bcd60e51b8152600401610ef290613f9d565b610f5a33611c29565b15610f775760405162461bcd60e51b8152600401610ef2906140ac565b610f83610a228361193b565b15610fa05760405162461bcd60e51b8152600401610ef2906140ac565b610de48261292d565b60098054610fb69061421d565b80601f0160208091040260200160405190810160405280929190818152602001828054610fe29061421d565b801561102f5780601f106110045761010080835404028352916020019161102f565b820191906000526020600020905b81548152906001019060200180831161101257829003601f168201915b505050505081565b6006546001600160a01b031633146111715761105233612340565b61107f57600e54600160201b900460ff1661107f5760405162461bcd60e51b8152600401610ef29061407d565b61109161108b8261193b565b82611c9c565b156110ae5760405162461bcd60e51b8152600401610ef290613f9d565b6110b83382611c9c565b156110d55760405162461bcd60e51b8152600401610ef290613f9d565b6110df8282611c9c565b156110fc5760405162461bcd60e51b8152600401610ef290613f9d565b61110533611c29565b156111225760405162461bcd60e51b8152600401610ef2906140ac565b61112e610a228261193b565b1561114b5760405162461bcd60e51b8152600401610ef2906140ac565b61115482611c29565b156111715760405162461bcd60e51b8152600401610ef2906140ac565b61117b82826129c2565b5050565b6006546001600160a01b031633146111a95760405162461bcd60e51b8152600401610ef290614048565b6001600160a01b0382166112095760405162461bcd60e51b815260206004820152602160248201527f72656d6f76652067616d657320666f7220746865207a65726f206164647265736044820152607360f81b6064820152608401610ef2565b6001600160a01b038216600090815260156020526040812080548392906112319084906141da565b90915550505050565b600061124560075490565b905090565b6001600160a01b0381166000908152601660209081526040808320838052909152812054606091906001600160401b03811115611289576112896142c9565b6040519080825280602002602001820160405280156112b2578160200160208202803683370190505b509050600060015b6103e8811161132a576001600160a01b03851660009081526016602090815260408083208484529091529020541561131857808383815181106112ff576112ff6142b3565b60209081029190910101528161131481614258565b9250505b8061132281614258565b9150506112ba565b50909392505050565b6006546001600160a01b0316331461135d5760405162461bcd60e51b8152600401610ef290614048565b600f55565b61136c3382612ad3565b6113885760405162461bcd60e51b8152600401610ef2906140d7565b611393838383612ba2565b505050565b6006546001600160a01b031633146113c25760405162461bcd60e51b8152600401610ef290614048565b600e8054911515650100000000000265ff000000000019909216919091179055565b6006546001600160a01b0316331461140e5760405162461bcd60e51b8152600401610ef290614048565b600d55565b6006546001600160a01b0316331461143d5760405162461bcd60e51b8152600401610ef290614048565b60005b8251811015611393578160136000858481518110611460576114606142b3565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061149c81614258565b915050611440565b61139333848484611e2d565b6006546001600160a01b031633146114da5760405162461bcd60e51b8152600401610ef290614048565b600b55565b6006546001600160a01b031633146115095760405162461bcd60e51b8152600401610ef290614048565b600e8054911515600160201b0264ff0000000019909216919091179055565b6006546001600160a01b031633146115525760405162461bcd60e51b8152600401610ef290614048565b60006115666006546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d80600081146115b0576040519150601f19603f3d011682016040523d82523d6000602084013e6115b5565b606091505b50509050806115c357600080fd5b50565b600e546301000000900460ff16156116205760405162461bcd60e51b815260206004820152601b60248201527f74686520636f6e7472616374206d696e742069732070617573656400000000006044820152606401610ef2565b600081116116405760405162461bcd60e51b8152600401610ef290614128565b600c548161164d60075490565b611657919061418f565b11156116755760405162461bcd60e51b8152600401610ef290614018565b6006546001600160a01b0316331480159061169257506000600a54115b156116e95780600a546116a591906141bb565b3410156116e95760405162461bcd60e51b8152602060048201526012602482015271696e73756666696369656e742066756e647360701b6044820152606401610ef2565b61117b8282612cba565b611393838383604051806020016040528060008152506120d8565b6006546001600160a01b031633146117385760405162461bcd60e51b8152600401610ef290614048565b600a55565b600e5462010000900460ff16156117a05760405162461bcd60e51b815260206004820152602160248201527f74686520636f6e74726163742067616d6573206d696e742069732070617573656044820152601960fa1b6064820152608401610ef2565b600081116117c05760405162461bcd60e51b8152600401610ef290614128565b600c54816117cd60075490565b6117d7919061418f565b11156117f55760405162461bcd60e51b8152600401610ef290614018565b336000908152601560205260409020548111156118495760405162461bcd60e51b8152602060048201526012602482015271696e73756666696369656e742067616d657360701b6044820152606401610ef2565b33600090815260156020526040812080548392906118689084906141da565b9091555061117b90508282612cba565b6006546001600160a01b031633146118a25760405162461bcd60e51b8152600401610ef290614048565b805161117b90600890602084019061378d565b6040516bffffffffffffffffffffffff19606085901b166020820152600090819060340160405160208183030381529060405280519060200120905061193284848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050600f549150849050612ded565b95945050505050565b6000818152600360205260408120546001600160a01b031680610de45760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610ef2565b60088054610fb69061421d565b6006546001600160a01b031633146119e95760405162461bcd60e51b8152600401610ef290614048565b600c55565b60006001600160a01b038216611a595760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610ef2565b506001600160a01b031660009081526002602052604090205490565b6006546001600160a01b03163314611a9f5760405162461bcd60e51b8152600401610ef290614048565b611aa96000612e03565b565b6006546001600160a01b03163314611ad55760405162461bcd60e51b8152600401610ef290614048565b601055565b6006546001600160a01b03163314611b045760405162461bcd60e51b8152600401610ef290614048565b600e8054911515620100000262ff000019909216919091179055565b6006546001600160a01b03163314611b4a5760405162461bcd60e51b8152600401610ef290614048565b6000611b558261193b565b9050611b6081611c29565b611ba45760405162461bcd60e51b81526020600482015260156024820152741859191c995cdcc81a5cc81b9bdd0818985b9b9959605a1b6044820152606401610ef2565b611393818484612e55565b6006546001600160a01b03163314611bd95760405162461bcd60e51b8152600401610ef290614048565b611c14848483611c0c576001600160a01b0387166000908152601760209081526040808320898452909152902054611c0e565b845b84612ff5565b50505050565b606060018054610e0d9061421d565b6001600160a01b031660009081526012602052604090205460ff1690565b6006546001600160a01b03163314611c715760405162461bcd60e51b8152600401610ef290614048565b6001600160a01b03919091166000908152601260205260409020805460ff1916911515919091179055565b600e5460009065010000000000900460ff16158015610df75750506001600160a01b039190911660009081526016602090815260408083209383529290522054151590565b600e54610100900460ff1615611d455760405162461bcd60e51b8152602060048201526024808201527f74686520636f6e7472616374206769766561776179206d696e742069732070616044820152631d5cd95960e21b6064820152608401610ef2565b60008111611d655760405162461bcd60e51b8152600401610ef290614128565b600c5481611d7260075490565b611d7c919061418f565b1115611d9a5760405162461bcd60e51b8152600401610ef290614018565b80611da78686868661246b565b1015611dee5760405162461bcd60e51b8152602060048201526016602482015275696e73756666696369656e742067697665617761797360501b6044820152606401610ef2565b6001600160a01b03851660009081526014602052604081208054839290611e1690849061418f565b90915550611e2690508582612cba565b5050505050565b600e5460ff1615611e8e5760405162461bcd60e51b815260206004820152602560248201527f74686520636f6e74726163742077686974656c697374206d696e742069732070604482015264185d5cd95960da1b6064820152608401610ef2565b60008111611eae5760405162461bcd60e51b8152600401610ef290614128565b600c5481611ebb60075490565b611ec5919061418f565b1115611ee35760405162461bcd60e51b8152600401610ef290614018565b611eee8484846118b5565b611f3a5760405162461bcd60e51b815260206004820152601760248201527f75736572206973206e6f742077686974656c69737465640000000000000000006044820152606401610ef2565b600b5415611f945780600b54611f5091906141bb565b341015611f945760405162461bcd60e51b8152602060048201526012602482015271696e73756666696369656e742066756e647360701b6044820152606401610ef2565b611c148482612cba565b6115c333826115c6565b6006546001600160a01b0316331461203c57611fc333612340565b611ff057600e54600160201b900460ff16611ff05760405162461bcd60e51b8152600401610ef29061407d565b611ff933611c29565b156120165760405162461bcd60e51b8152600401610ef2906140ac565b61201f82611c29565b1561203c5760405162461bcd60e51b8152600401610ef2906140ac565b61117b828261320e565b6113938383836000612ff5565b6006546001600160a01b0316331461207d5760405162461bcd60e51b8152600401610ef290614048565b600e805491151563010000000263ff00000019909216919091179055565b6006546001600160a01b031633146120c55760405162461bcd60e51b8152600401610ef290614048565b600e805460ff1916911515919091179055565b6120e23383612ad3565b6120fe5760405162461bcd60e51b8152600401610ef2906140d7565b611c14848484846132d3565b6000818152600360205260409020546060906001600160a01b03166121895760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610ef2565b81600d54101561222557600980546121a09061421d565b80601f01602080910402602001604051908101604052809291908181526020018280546121cc9061421d565b80156122195780601f106121ee57610100808354040283529160200191612219565b820191906000526020600020905b8154815290600101906020018083116121fc57829003601f168201915b50505050509050919050565b600061222f613306565b604080518082019091526005815264173539b7b760d91b602082015281519192509061226a5760405180602001604052806000815250612297565b8161227485613315565b8260405160200161228793929190613ec6565b6040516020818303038152906040525b949350505050565b6006546001600160a01b031633146122c95760405162461bcd60e51b8152600401610ef290614048565b601180546001600160a01b0319166001600160a01b0392909216919091179055565b6006546001600160a01b031633146123155760405162461bcd60e51b8152600401610ef290614048565b6001600160a01b03919091166000908152601360205260409020805460ff1916911515919091179055565b6001600160a01b031660009081526013602052604090205460ff1690565b6006546001600160a01b031633146123885760405162461bcd60e51b8152600401610ef290614048565b61117b338383604051806020016040528060008152506132d3565b336000908152601660209081526040808320848452909152812054610de4565b6006546001600160a01b031633146123ed5760405162461bcd60e51b8152600401610ef290614048565b6001600160a01b0382166124435760405162461bcd60e51b815260206004820152601e60248201527f6164642067616d657320666f7220746865207a65726f206164647265737300006044820152606401610ef2565b6001600160a01b0382166000908152601560205260408120805483929061123190849061418f565b60006001600160a01b0385166124cf5760405162461bcd60e51b8152602060048201526024808201527f67697665617761797320717565727920666f7220746865207a65726f206164646044820152637265737360e01b6064820152608401610ef2565b6040516bffffffffffffffffffffffff19606087901b16602082015260348101859052600090605401604051602081830303815290604052805190602001209050612551848480806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506010549150849050612ded565b61258d5760405162461bcd60e51b815260206004820152600d60248201526c34b73b30b634b210383937b7b360991b6044820152606401610ef2565b6001600160a01b0386166000908152601460205260409020548581106125b857600092505050612297565b6125c281876141da565b979650505050505050565b6113938383836001612ff5565b60006125ee6006546001600160a01b031690565b6001600160a01b0316336001600160a01b03161415801561261d57506006546001600160a01b03848116911614155b156126a05761262b33612340565b15801561263e575061263c83612340565b155b1561266c57600e54600160201b900460ff1661266c5760405162461bcd60e51b8152600401610ef29061407d565b61267533611c29565b80612684575061268483611c29565b80612693575061269382611c29565b156126a057506000610de4565b6011546001600160a01b0316801580159061273f575060405163c455279160e01b81526001600160a01b038581166004830152808516919083169063c45527919060240160206040518083038186803b1580156126fc57600080fd5b505afa158015612710573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127349190613e02565b6001600160a01b0316145b1561274e576001915050610de4565b6001600160a01b0380851660009081526005602090815260408083209387168352929052205460ff16612297565b60606112453361124a565b6006546001600160a01b031633146127b15760405162461bcd60e51b8152600401610ef290614048565b805161117b90600990602084019061378d565b6006546001600160a01b031633146127ee5760405162461bcd60e51b8152600401610ef290614048565b6001600160a01b0381166128535760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ef2565b6115c381612e03565b611c143385858585611ce1565b6000610de43383611c9c565b6006546001600160a01b0316331461289f5760405162461bcd60e51b8152600401610ef290614048565b600e80549115156101000261ff0019909216919091179055565b60006001600160a01b0382166129115760405162461bcd60e51b815260206004820181905260248201527f67616d657320717565727920666f7220746865207a65726f20616464726573736044820152606401610ef2565b506001600160a01b031660009081526015602052604090205490565b6000818152600360205260408120546001600160a01b03166129a65760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610ef2565b506000908152600460205260409020546001600160a01b031690565b60006129cd8261193b565b9050806001600160a01b0316836001600160a01b03161415612a3b5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610ef2565b336001600160a01b0382161480612a575750612a5781336125da565b612ac95760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610ef2565b6113938383613412565b6000818152600360205260408120546001600160a01b0316612b4c5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610ef2565b6000612b578361193b565b9050806001600160a01b0316846001600160a01b03161480612b925750836001600160a01b0316612b8784610e90565b6001600160a01b0316145b80612297575061229781856125da565b6006546001600160a01b03163314612caf57612bc061108b8261193b565b15612bdd5760405162461bcd60e51b8152600401610ef290613f9d565b612be78382611c9c565b15612c045760405162461bcd60e51b8152600401610ef290613f9d565b612c0d83611c29565b15612c2a5760405162461bcd60e51b8152600401610ef2906140ac565b612c3382611c29565b15612c505760405162461bcd60e51b8152600401610ef2906140ac565b612c5c610a228261193b565b15612c795760405162461bcd60e51b8152600401610ef2906140ac565b612c8233612340565b612caf57600e54600160201b900460ff16612caf5760405162461bcd60e51b8152600401610ef29061407d565b611393838383612e55565b6000612cc560075490565b90508160011415612ce957612ce483612cdf83600161418f565b613480565b612ddb565b6001600160a01b0383163b15612d295760015b828111612d2357612d1184612cdf838561418f565b80612d1b81614258565b915050612cfc565b50612ddb565b60015b828111612dac576000612d3f828461418f565b60008181526003602052604080822080546001600160a01b0319166001600160a01b038a16908117909155905192935083929091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45080612da481614258565b915050612d2c565b506001600160a01b03831660009081526002602052604081208054849290612dd590849061418f565b90915550505b611393612de8838361418f565b600755565b600082612dfa858461349a565b14949350505050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b826001600160a01b0316612e688261193b565b6001600160a01b031614612ed05760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610ef2565b6001600160a01b038216612f325760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610ef2565b612f3d600082613412565b6001600160a01b0383166000908152600260205260408120805460019290612f669084906141da565b90915550506001600160a01b0382166000908152600260205260408120805460019290612f9490849061418f565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600083116130375760405162461bcd60e51b815260206004820152600f60248201526e1a5b9d985b1a59081d1bdad95b9259608a1b6044820152606401610ef2565b836001600160a01b031661304a8461193b565b6001600160a01b0316146130a05760405162461bcd60e51b815260206004820152601d60248201527f6c6f636b206f6620746f6b656e2074686174206973206e6f74206f776e0000006044820152606401610ef2565b8080156130ce57506001600160a01b0384166000908152601660209081526040808320868452909152902054155b15613130576001600160a01b0384166000818152601760209081526040808320878452825280832086905592825260168152828220868352905281812042905580805290812080546001929061312590849061418f565b90915550611c149050565b8015801561316057506001600160a01b038416600090815260166020908152604080832086845290915290205415155b15611c14576001600160a01b038416600090815260176020908152604080832086845290915290205482146131c65760405162461bcd60e51b815260206004820152600c60248201526b696e76616c696420636f646560a01b6044820152606401610ef2565b6001600160a01b038416600090815260166020908152604080832086845290915280822082905581805281208054600192906132039084906141da565b909155505050505050565b6001600160a01b0382163314156132675760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610ef2565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6132de848484612ba2565b6132ea8484848461350e565b611c145760405162461bcd60e51b8152600401610ef290613fc6565b606060088054610e0d9061421d565b6060816133395750506040805180820190915260018152600360fc1b602082015290565b8160005b8115613363578061334d81614258565b915061335c9050600a836141a7565b915061333d565b6000816001600160401b0381111561337d5761337d6142c9565b6040519080825280601f01601f1916602001820160405280156133a7576020820181803683370190505b5090505b8415612297576133bc6001836141da565b91506133c9600a86614273565b6133d490603061418f565b60f81b8183815181106133e9576133e96142b3565b60200101906001600160f81b031916908160001a90535061340b600a866141a7565b94506133ab565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906134478261193b565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b61117b828260405180602001604052806000815250613618565b600081815b84518110156135065760008582815181106134bc576134bc6142b3565b602002602001015190508083116134e257600083815260208290526040902092506134f3565b600081815260208490526040902092505b50806134fe81614258565b91505061349f565b509392505050565b60006001600160a01b0384163b1561361057604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290613552903390899088908890600401613f09565b602060405180830381600087803b15801561356c57600080fd5b505af192505050801561359c575060408051601f3d908101601f1916820190925261359991810190613de5565b60015b6135f6573d8080156135ca576040519150601f19603f3d011682016040523d82523d6000602084013e6135cf565b606091505b5080516135ee5760405162461bcd60e51b8152600401610ef290613fc6565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612297565b506001612297565b613622838361364b565b61362f600084848461350e565b6113935760405162461bcd60e51b8152600401610ef290613fc6565b6001600160a01b0382166136a15760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610ef2565b6000818152600360205260409020546001600160a01b0316156137065760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610ef2565b6001600160a01b038216600090815260026020526040812080546001929061372f90849061418f565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b8280546137999061421d565b90600052602060002090601f0160209004810192826137bb5760008555613801565b82601f106137d457805160ff1916838001178555613801565b82800160010185558215613801579182015b828111156138015782518255916020019190600101906137e6565b5061380d929150613811565b5090565b5b8082111561380d5760008155600101613812565b60006001600160401b0383111561383f5761383f6142c9565b613852601f8401601f191660200161415f565b905082815283838301111561386657600080fd5b828260208301376000602084830101529392505050565b60008083601f84011261388f57600080fd5b5081356001600160401b038111156138a657600080fd5b6020830191508360208260051b85010111156138c157600080fd5b9250929050565b803580151581146138d857600080fd5b919050565b6000602082840312156138ef57600080fd5b8135610df7816142df565b6000806040838503121561390d57600080fd5b8235613918816142df565b91506020830135613928816142df565b809150509250929050565b60008060006060848603121561394857600080fd5b8335613953816142df565b92506020840135613963816142df565b929592945050506040919091013590565b6000806000806080858703121561398a57600080fd5b8435613995816142df565b935060208501356139a5816142df565b92506040850135915060608501356001600160401b038111156139c757600080fd5b8501601f810187136139d857600080fd5b6139e787823560208401613826565b91505092959194509250565b600080600060408486031215613a0857600080fd5b8335613a13816142df565b925060208401356001600160401b03811115613a2e57600080fd5b613a3a8682870161387d565b9497909650939450505050565b60008060008060608587031215613a5d57600080fd5b8435613a68816142df565b935060208501356001600160401b03811115613a8357600080fd5b613a8f8782880161387d565b9598909750949560400135949350505050565b60008060408385031215613ab557600080fd5b8235613ac0816142df565b9150613ace602084016138c8565b90509250929050565b60008060408385031215613aea57600080fd5b8235613af5816142df565b946020939093013593505050565b60008060008060608587031215613b1957600080fd5b8435613b24816142df565b93506020850135925060408501356001600160401b03811115613b4657600080fd5b613b528782880161387d565b95989497509550505050565b600080600080600060808688031215613b7657600080fd5b8535613b81816142df565b94506020860135935060408601356001600160401b03811115613ba357600080fd5b613baf8882890161387d565b96999598509660600135949350505050565b600080600060608486031215613bd657600080fd5b8335613be1816142df565b95602085013595506040909401359392505050565b60008060008060808587031215613c0c57600080fd5b8435613c17816142df565b93506020850135925060408501359150613c33606086016138c8565b905092959194509250565b60008060408385031215613c5157600080fd5b82356001600160401b0380821115613c6857600080fd5b818501915085601f830112613c7c57600080fd5b8135602082821115613c9057613c906142c9565b8160051b9250613ca181840161415f565b8281528181019085830185870184018b1015613cbc57600080fd5b600096505b84871015613ceb5780359550613cd6866142df565b85835260019690960195918301918301613cc1565b509650613cfb90508782016138c8565b9450505050509250929050565b60008060208385031215613d1b57600080fd5b82356001600160401b03811115613d3157600080fd5b613d3d8582860161387d565b90969095509350505050565b600080600060408486031215613d5e57600080fd5b83356001600160401b03811115613d7457600080fd5b613d808682870161387d565b909790965060209590950135949350505050565b600060208284031215613da657600080fd5b610df7826138c8565b600060208284031215613dc157600080fd5b5035919050565b600060208284031215613dda57600080fd5b8135610df7816142f4565b600060208284031215613df757600080fd5b8151610df7816142f4565b600060208284031215613e1457600080fd5b8151610df7816142df565b600060208284031215613e3157600080fd5b81356001600160401b03811115613e4757600080fd5b8201601f81018413613e5857600080fd5b61229784823560208401613826565b60008060008060608587031215613e7d57600080fd5b8435935060208501356001600160401b03811115613a8357600080fd5b60008151808452613eb28160208601602086016141f1565b601f01601f19169290920160200192915050565b60008451613ed88184602089016141f1565b845190830190613eec8183602089016141f1565b8451910190613eff8183602088016141f1565b0195945050505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090613f3c90830184613e9a565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015613f7e57835183529284019291840191600101613f62565b50909695505050505050565b602081526000610df76020830184613e9a565b6020808252600f908201526e1d1bdad95b881a5cc81b1bd8dad959608a1b604082015260600190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252601690820152751b585e08139195081b1a5b5a5d08195e18d95959195960521b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601590820152741d1c985b9cd9995c9cc81b9bdd08185b1b1bddd959605a1b604082015260600190565b6020808252601190820152701859191c995cdcc81a5cc818985b9b9959607a1b604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252601b908201527f6e65656420746f206d696e74206174206c656173742031204e46540000000000604082015260600190565b604051601f8201601f191681016001600160401b0381118282101715614187576141876142c9565b604052919050565b600082198211156141a2576141a2614287565b500190565b6000826141b6576141b661429d565b500490565b60008160001904831182151516156141d5576141d5614287565b500290565b6000828210156141ec576141ec614287565b500390565b60005b8381101561420c5781810151838201526020016141f4565b83811115611c145750506000910152565b600181811c9082168061423157607f821691505b6020821081141561425257634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561426c5761426c614287565b5060010190565b6000826142825761428261429d565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146115c357600080fd5b6001600160e01b0319811681146115c357600080fdfea2646970667358221220fe64516c71110f4e8de4b90600ee5c964750da413df416afde58beabd118acce64736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000011486f6c6c79776f6f642041706573207632000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000348413200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000042687474703a2f2f686f6c6c79776f6f642d617065732d76312e73332d776562736974652d75732d776573742d322e616d617a6f6e6177732e636f6d2f6d657461322f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000053687474703a2f2f686f6c6c79776f6f642d617065732d76312e73332d776562736974652d75732d776573742d322e616d617a6f6e6177732e636f6d2f68696464656e2d6d6574612f68696464656e2e6a736f6e00000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): Hollywood Apes v2
Arg [1] : _symbol (string): HA2
Arg [2] : _initBaseURI (string): http://hollywood-apes-v1.s3-website-us-west-2.amazonaws.com/meta2/
Arg [3] : _initNotRevealedUri (string): http://hollywood-apes-v1.s3-website-us-west-2.amazonaws.com/hidden-meta/hidden.json
-----Encoded View---------------
16 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000180
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000011
Arg [5] : 486f6c6c79776f6f642041706573207632000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [7] : 4841320000000000000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000042
Arg [9] : 687474703a2f2f686f6c6c79776f6f642d617065732d76312e73332d77656273
Arg [10] : 6974652d75732d776573742d322e616d617a6f6e6177732e636f6d2f6d657461
Arg [11] : 322f000000000000000000000000000000000000000000000000000000000000
Arg [12] : 0000000000000000000000000000000000000000000000000000000000000053
Arg [13] : 687474703a2f2f686f6c6c79776f6f642d617065732d76312e73332d77656273
Arg [14] : 6974652d75732d776573742d322e616d617a6f6e6177732e636f6d2f68696464
Arg [15] : 656e2d6d6574612f68696464656e2e6a736f6e00000000000000000000000000
Deployed Bytecode Sourcemap
41679:16530:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23175:355;;;;;;;;;;-1:-1:-1;23175:355:0;;;;;:::i;:::-;;:::i;:::-;;;14546:14:1;;14539:22;14521:41;;14509:2;14494:18;23175:355:0;;;;;;;;52592:165;;;;;;;;;;-1:-1:-1;52592:165:0;;;;;:::i;:::-;;:::i;24344:100::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;49752:601::-;;;;;;;;;;-1:-1:-1;49752:601:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;13207:32:1;;;13189:51;;13177:2;13162:18;49752:601:0;13043:203:1;41965:28:0;;;;;;;;;;;;;:::i;47169:702::-;;;;;;;;;;-1:-1:-1;47169:702:0;;;;;:::i;:::-;;:::i;:::-;;57802:241;;;;;;;;;;-1:-1:-1;57802:241:0;;;;;:::i;:::-;;:::i;42000:32::-;;;;;;;;;;;;;;;;;;;14719:25:1;;;14707:2;14692:18;42000:32:0;14573:177:1;53031:101:0;;;;;;;;;;;;;:::i;51907:441::-;;;;;;;;;;-1:-1:-1;51907:441:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;42039:43::-;;;;;;;;;;;;;;;;56200:147;;;;;;;;;;-1:-1:-1;56200:147:0;;;;;:::i;:::-;;:::i;27096:376::-;;;;;;;;;;-1:-1:-1;27096:376:0;;;;;:::i;:::-;;:::i;42297:24::-;;;;;;;;;;-1:-1:-1;42297:24:0;;;;-1:-1:-1;;;42297:24:0;;;;;;56080:112;;;;;;;;;;-1:-1:-1;56080:112:0;;;;;:::i;:::-;;:::i;54684:102::-;;;;;;;;;;-1:-1:-1;54684:102:0;;;;;:::i;:::-;;:::i;56956:191::-;;;;;;;;;;-1:-1:-1;56956:191:0;;;;;:::i;:::-;;:::i;42231:23::-;;;;;;;;;;-1:-1:-1;42231:23:0;;;;;;;;;;;46170:184;;;;;;:::i;:::-;;:::i;55158:147::-;;;;;;;;;;-1:-1:-1;55158:147:0;;;;;:::i;:::-;;:::i;55977:95::-;;;;;;;;;;-1:-1:-1;55977:95:0;;;;;:::i;:::-;;:::i;58051:155::-;;;:::i;45688:474::-;;;;;;:::i;:::-;;:::i;27543:185::-;;;;;;;;;;-1:-1:-1;27543:185:0;;;;;:::i;:::-;;:::i;55064:86::-;;;;;;;;;;-1:-1:-1;55064:86:0;;;;;:::i;:::-;;:::i;51615:150::-;;;;;;;;;;-1:-1:-1;51615:150:0;;;;;:::i;:::-;-1:-1:-1;;;;;51730:18:0;;;;51703:7;51730:18;;;:11;:18;;;;;;;;:27;;;;;;;;;51615:150;42198:26;;;;;;;;;;-1:-1:-1;42198:26:0;;;;;;;;;;;49100:475;;;;;;;;;;-1:-1:-1;49100:475:0;;;;;:::i;:::-;;:::i;42127:23::-;;;;;;;;;;;;;;;;54794:104;;;;;;;;;;-1:-1:-1;54794:104:0;;;;;:::i;:::-;;:::i;52765:258::-;;;;;;;;;;-1:-1:-1;52765:258:0;;;;;:::i;:::-;;:::i;42157:34::-;;;;;;;;;;-1:-1:-1;42157:34:0;;;;;;;;23951:326;;;;;;;;;;-1:-1:-1;23951:326:0;;;;;:::i;:::-;;:::i;41937:21::-;;;;;;;;;;;;;:::i;55313:106::-;;;;;;;;;;-1:-1:-1;55313:106:0;;;;;:::i;:::-;;:::i;23594:295::-;;;;;;;;;;-1:-1:-1;23594:295:0;;;;;:::i;:::-;;:::i;37055:94::-;;;;;;;;;;;;;:::i;42465:96::-;;;;;;;;;;;;;;;;56355:135;;;;;;;;;;-1:-1:-1;56355:135:0;;;;;:::i;:::-;;:::i;42359:99::-;;;;;;;;;;;;;;;;42328:24;;;;;;;;;;-1:-1:-1;42328:24:0;;;;;;;;;;;42261:29;;;;;;;;;;-1:-1:-1;42261:29:0;;;;;;;;;;;55777:93;;;;;;;;;;-1:-1:-1;55777:93:0;;;;;:::i;:::-;;:::i;36404:87::-;;;;;;;;;;-1:-1:-1;36477:6:0;;-1:-1:-1;;;;;36477:6:0;36404:87;;57155:249;;;;;;;;;;-1:-1:-1;57155:249:0;;;;;:::i;:::-;;:::i;56498:207::-;;;;;;;;;;-1:-1:-1;56498:207:0;;;;;:::i;:::-;;:::i;24513:104::-;;;;;;;;;;;;;:::i;52356:117::-;;;;;;;;;;-1:-1:-1;52356:117:0;;;;;:::i;:::-;;:::i;56713:120::-;;;;;;;;;;-1:-1:-1;56713:120:0;;;;;:::i;:::-;;:::i;51292:170::-;;;;;;;;;;-1:-1:-1;51292:170:0;;;;;:::i;:::-;;:::i;48537:555::-;;;;;;;;;;-1:-1:-1;48537:555:0;;;;;:::i;:::-;;:::i;46362:626::-;;;;;;:::i;:::-;;:::i;45582:98::-;;;;;;:::i;:::-;;:::i;47879:448::-;;;;;;;;;;-1:-1:-1;47879:448:0;;;;;:::i;:::-;;:::i;47017:144::-;;;;;;;;;;-1:-1:-1;47017:144:0;;;;;:::i;:::-;;:::i;55878:91::-;;;;;;;;;;-1:-1:-1;55878:91:0;;;;;:::i;:::-;;:::i;55561:101::-;;;;;;;;;;-1:-1:-1;55561:101:0;;;;;:::i;:::-;;:::i;27799:365::-;;;;;;;;;;-1:-1:-1;27799:365:0;;;;;:::i;:::-;;:::i;53140:724::-;;;;;;;;;;-1:-1:-1;53140:724:0;;;;;:::i;:::-;;:::i;42568:80::-;;;;;;;;;;-1:-1:-1;42568:80:0;;;;-1:-1:-1;;;;;42568:80:0;;;54906:150;;;;;;;;;;-1:-1:-1;54906:150:0;;;;;:::i;:::-;;:::i;42089:31::-;;;;;;;;;;;;;;;;56841:107;;;;;;;;;;-1:-1:-1;56841:107:0;;;;;:::i;:::-;;:::i;52481:103::-;;;;;;;;;;-1:-1:-1;52481:103:0;;;;;:::i;:::-;;:::i;57412:139::-;;;;;;;;;;-1:-1:-1;57412:139:0;;;;;:::i;:::-;;:::i;51470:137::-;;;;;;;;;;-1:-1:-1;51470:137:0;;;;;:::i;:::-;;:::i;57559:235::-;;;;;;;;;;-1:-1:-1;57559:235:0;;;;;:::i;:::-;;:::i;53872:553::-;;;;;;;;;;-1:-1:-1;53872:553:0;;;;;:::i;:::-;;:::i;49583:141::-;;;;;;;;;;-1:-1:-1;49583:141:0;;;;;:::i;:::-;;:::i;50361:781::-;;;;;;;;;;-1:-1:-1;50361:781:0;;;;;:::i;:::-;;:::i;51773:126::-;;;;;;;;;;;;;:::i;55427:::-;;;;;;;;;;-1:-1:-1;55427:126:0;;;;;:::i;:::-;;:::i;37304:229::-;;;;;;;;;;-1:-1:-1;37304:229:0;;;;;:::i;:::-;;:::i;48335:194::-;;;;;;;;;;-1:-1:-1;48335:194:0;;;;;:::i;:::-;;:::i;51150:134::-;;;;;;;;;;-1:-1:-1;51150:134:0;;;;;:::i;:::-;;:::i;55670:99::-;;;;;;;;;;-1:-1:-1;55670:99:0;;;;;:::i;:::-;;:::i;54433:224::-;;;;;;;;;;-1:-1:-1;54433:224:0;;;;;:::i;:::-;;:::i;23175:355::-;23322:4;-1:-1:-1;;;;;;23364:40:0;;-1:-1:-1;;;23364:40:0;;:105;;-1:-1:-1;;;;;;;23421:48:0;;-1:-1:-1;;;23421:48:0;23364:105;:158;;;-1:-1:-1;;;;;;;;;;6776:40:0;;;23486:36;23344:178;23175:355;-1:-1:-1;;23175:355:0:o;52592:165::-;52686:4;52710:39;52724:10;52736:12;;52710:13;:39::i;:::-;52703:46;52592:165;-1:-1:-1;;;52592:165:0:o;24344:100::-;24398:13;24431:5;24424:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24344:100;:::o;49752:601::-;49828:7;49866;36477:6;;-1:-1:-1;;;;;36477:6:0;;36404:87;49866:7;-1:-1:-1;;;;;49852:21:0;:10;-1:-1:-1;;;;;49852:21:0;;49848:452;;49895:21;49905:10;49895:9;:21::i;:::-;49890:109;;49945:12;;-1:-1:-1;;;49945:12:0;;;;49937:46;;;;-1:-1:-1;;;49937:46:0;;;;;;;:::i;:::-;;;;;;;;;50022:35;50031:16;50039:7;50031;:16::i;:::-;50049:7;50022:8;:35::i;:::-;50021:36;50013:64;;;;-1:-1:-1;;;50013:64:0;;;;;;;:::i;:::-;50101:29;50110:10;50122:7;50101:8;:29::i;:::-;50100:30;50092:58;;;;-1:-1:-1;;;50092:58:0;;;;;;;:::i;:::-;50174:20;50183:10;50174:8;:20::i;:::-;50173:21;50165:51;;;;-1:-1:-1;;;50165:51:0;;;;;;;:::i;:::-;50240:26;50249:16;50257:7;50249;:16::i;50240:26::-;50239:27;50231:57;;;;-1:-1:-1;;;50231:57:0;;;;;;;:::i;:::-;50319:26;50337:7;50319:17;:26::i;41965:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;47169:702::-;36477:6;;-1:-1:-1;;;;;36477:6:0;47254:10;:21;47250:575;;47297:21;47307:10;47297:9;:21::i;:::-;47292:109;;47347:12;;-1:-1:-1;;;47347:12:0;;;;47339:46;;;;-1:-1:-1;;;47339:46:0;;;;;;;:::i;:::-;47424:35;47433:16;47441:7;47433;:16::i;:::-;47451:7;47424:8;:35::i;:::-;47423:36;47415:64;;;;-1:-1:-1;;;47415:64:0;;;;;;;:::i;:::-;47503:29;47512:10;47524:7;47503:8;:29::i;:::-;47502:30;47494:58;;;;-1:-1:-1;;;47494:58:0;;;;;;;:::i;:::-;47576:21;47585:2;47589:7;47576:8;:21::i;:::-;47575:22;47567:50;;;;-1:-1:-1;;;47567:50:0;;;;;;;:::i;:::-;47641:20;47650:10;47641:8;:20::i;:::-;47640:21;47632:51;;;;-1:-1:-1;;;47632:51:0;;;;;;;:::i;:::-;47707:26;47716:16;47724:7;47716;:16::i;47707:26::-;47706:27;47698:57;;;;-1:-1:-1;;;47698:57:0;;;;;;;:::i;:::-;47779:12;47788:2;47779:8;:12::i;:::-;47778:13;47770:43;;;;-1:-1:-1;;;47770:43:0;;;;;;;:::i;:::-;47837:26;47851:2;47855:7;47837:13;:26::i;:::-;47169:702;;:::o;57802:241::-;36477:6;;-1:-1:-1;;;;;36477:6:0;21727:10;36624:23;36616:68;;;;-1:-1:-1;;;36616:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;57922:17:0;::::1;57900:100;;;::::0;-1:-1:-1;;;57900:100:0;;16291:2:1;57900:100:0::1;::::0;::::1;16273:21:1::0;16330:2;16310:18;;;16303:30;16369:34;16349:18;;;16342:62;-1:-1:-1;;;16420:18:1;;;16413:31;16461:19;;57900:100:0::1;16089:397:1::0;57900:100:0::1;-1:-1:-1::0;;;;;58011:11:0;::::1;;::::0;;;:6:::1;:11;::::0;;;;:24;;58026:9;;58011:11;:24:::1;::::0;58026:9;;58011:24:::1;:::i;:::-;::::0;;;-1:-1:-1;;;;57802:241:0:o;53031:101::-;53075:7;53102:22;:12;38571:14;;38479:114;53102:22;53095:29;;53031:101;:::o;51907:441::-;-1:-1:-1;;;;;52051:18:0;;52009:25;52051:18;;;:11;:18;;;;;;;;:21;;;;;;;;;51980:16;;52009:25;-1:-1:-1;;;;;52037:36:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;52037:36:0;-1:-1:-1;52009:64:0;-1:-1:-1;52084:13:0;52135:1;52112:203;52149:4;52138:7;:15;52112:203;;-1:-1:-1;;;;;52185:18:0;;52215:1;52185:18;;;:11;:18;;;;;;;;:27;;;;;;;;;:31;52181:123;;52255:7;52237:8;52246:5;52237:15;;;;;;;;:::i;:::-;;;;;;;;;;:25;52281:7;;;;:::i;:::-;;;;52181:123;52155:9;;;;:::i;:::-;;;;52112:203;;;-1:-1:-1;52332:8:0;;51907:441;-1:-1:-1;;;51907:441:0:o;56200:147::-;36477:6;;-1:-1:-1;;;;;36477:6:0;21727:10;36624:23;36616:68;;;;-1:-1:-1;;;36616:68:0;;;;;;;:::i;:::-;56302:15:::1;:37:::0;56200:147::o;27096:376::-;27305:41;21727:10;27338:7;27305:18;:41::i;:::-;27283:140;;;;-1:-1:-1;;;27283:140:0;;;;;;;:::i;:::-;27436:28;27446:4;27452:2;27456:7;27436:9;:28::i;:::-;27096:376;;;:::o;56080:112::-;36477:6;;-1:-1:-1;;;;;36477:6:0;21727:10;36624:23;36616:68;;;;-1:-1:-1;;;36616:68:0;;;;;;;:::i;:::-;56163:12:::1;:21:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;56163:21:0;;::::1;::::0;;;::::1;::::0;;56080:112::o;54684:102::-;36477:6;;-1:-1:-1;;;;;36477:6:0;21727:10;36624:23;36616:68;;;;-1:-1:-1;;;36616:68:0;;;;;;;:::i;:::-;54755:8:::1;:23:::0;54684:102::o;56956:191::-;36477:6;;-1:-1:-1;;;;;36477:6:0;21727:10;36624:23;36616:68;;;;-1:-1:-1;;;36616:68:0;;;;;;;:::i;:::-;57045:9:::1;57040:100;57064:6;:13;57060:1;:17;57040:100;;;57122:6;57099:9;:20;57109:6;57116:1;57109:9;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;57099:20:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;57099:20:0;:29;;-1:-1:-1;;57099:29:0::1;::::0;::::1;;::::0;;;::::1;::::0;;57079:3;::::1;::::0;::::1;:::i;:::-;;;;57040:100;;46170:184:::0;46292:54;46308:10;46320:12;;46334:11;46292:15;:54::i;55158:147::-;36477:6;;-1:-1:-1;;;;;36477:6:0;21727:10;36624:23;36616:68;;;;-1:-1:-1;;;36616:68:0;;;;;;;:::i;:::-;55260:15:::1;:37:::0;55158:147::o;55977:95::-;36477:6;;-1:-1:-1;;;;;36477:6:0;21727:10;36624:23;36616:68;;;;-1:-1:-1;;;36616:68:0;;;;;;;:::i;:::-;56043:12:::1;:21:::0;;;::::1;;-1:-1:-1::0;;;56043:21:0::1;-1:-1:-1::0;;56043:21:0;;::::1;::::0;;;::::1;::::0;;55977:95::o;58051:155::-;36477:6;;-1:-1:-1;;;;;36477:6:0;21727:10;36624:23;36616:68;;;;-1:-1:-1;;;36616:68:0;;;;;;;:::i;:::-;58108:7:::1;58129;36477:6:::0;;-1:-1:-1;;;;;36477:6:0;;36404:87;58129:7:::1;-1:-1:-1::0;;;;;58121:21:0::1;58150;58121:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;58107:69;;;58195:2;58187:11;;;::::0;::::1;;58096:110;58051:155::o:0;45688:474::-;45771:10;;;;;;;45770:11;45762:51;;;;-1:-1:-1;;;45762:51:0;;28066:2:1;45762:51:0;;;28048:21:1;28105:2;28085:18;;;28078:30;28144:29;28124:18;;;28117:57;28191:18;;45762:51:0;27864:351:1;45762:51:0;45846:1;45832:11;:15;45824:55;;;;-1:-1:-1;;;45824:55:0;;;;;;;:::i;:::-;45938:9;;45923:11;45898:22;:12;38571:14;;38479:114;45898:22;:36;;;;:::i;:::-;:49;;45890:84;;;;-1:-1:-1;;;45890:84:0;;;;;;;:::i;:::-;36477:6;;-1:-1:-1;;;;;36477:6:0;45991:10;:21;;;;:33;;;46023:1;46016:4;;:8;45991:33;45987:128;;;46069:11;46062:4;;:18;;;;:::i;:::-;46049:9;:31;;46041:62;;;;-1:-1:-1;;;46041:62:0;;26202:2:1;46041:62:0;;;26184:21:1;26241:2;26221:18;;;26214:30;-1:-1:-1;;;26260:18:1;;;26253:48;26318:18;;46041:62:0;26000:342:1;46041:62:0;46127:27;46137:3;46142:11;46127:9;:27::i;27543:185::-;27681:39;27698:4;27704:2;27708:7;27681:39;;;;;;;;;;;;:16;:39::i;55064:86::-;36477:6;;-1:-1:-1;;;;;36477:6:0;21727:10;36624:23;36616:68;;;;-1:-1:-1;;;36616:68:0;;;;;;;:::i;:::-;55127:4:::1;:15:::0;55064:86::o;49100:475::-;49196:11;;;;;;;49195:12;49187:58;;;;-1:-1:-1;;;49187:58:0;;28422:2:1;49187:58:0;;;28404:21:1;28461:2;28441:18;;;28434:30;28500:34;28480:18;;;28473:62;-1:-1:-1;;;28551:18:1;;;28544:31;28592:19;;49187:58:0;28220:397:1;49187:58:0;49278:1;49264:11;:15;49256:55;;;;-1:-1:-1;;;49256:55:0;;;;;;;:::i;:::-;49370:9;;49355:11;49330:22;:12;38571:14;;38479:114;49330:22;:36;;;;:::i;:::-;:49;;49322:84;;;;-1:-1:-1;;;49322:84:0;;;;;;;:::i;:::-;49432:10;49425:18;;;;:6;:18;;;;;;:33;-1:-1:-1;49425:33:0;49417:64;;;;-1:-1:-1;;;49417:64:0;;15525:2:1;49417:64:0;;;15507:21:1;15564:2;15544:18;;;15537:30;-1:-1:-1;;;15583:18:1;;;15576:48;15641:18;;49417:64:0;15323:342:1;49417:64:0;49501:10;49494:18;;;;:6;:18;;;;;:33;;49516:11;;49494:18;:33;;49516:11;;49494:33;:::i;:::-;;;;-1:-1:-1;49540:27:0;;-1:-1:-1;49550:3:0;49555:11;49540:9;:27::i;54794:104::-;36477:6;;-1:-1:-1;;;;;36477:6:0;21727:10;36624:23;36616:68;;;;-1:-1:-1;;;36616:68:0;;;;;;;:::i;:::-;54869:21;;::::1;::::0;:7:::1;::::0;:21:::1;::::0;::::1;::::0;::::1;:::i;52765:258::-:0;52916:23;;-1:-1:-1;;11780:2:1;11776:15;;;11772:53;52916:23:0;;;11760:66:1;52874:4:0;;;;11842:12:1;;52916:23:0;;;;;;;;;;;;52906:34;;;;;;52891:49;;52960:55;52979:12;;52960:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;52993:15:0;;;-1:-1:-1;53010:4:0;;-1:-1:-1;52960:18:0;:55::i;:::-;52953:62;52765:258;-1:-1:-1;;;;;52765:258:0:o;23951:326::-;24068:7;24109:16;;;:7;:16;;;;;;-1:-1:-1;;;;;24109:16:0;24158:19;24136:110;;;;-1:-1:-1;;;24136:110:0;;20525:2:1;24136:110:0;;;20507:21:1;20564:2;20544:18;;;20537:30;20603:34;20583:18;;;20576:62;-1:-1:-1;;;20654:18:1;;;20647:39;20703:19;;24136:110:0;20323:405:1;41937:21:0;;;;;;;:::i;55313:106::-;36477:6;;-1:-1:-1;;;;;36477:6:0;21727:10;36624:23;36616:68;;;;-1:-1:-1;;;36616:68:0;;;;;;;:::i;:::-;55386:9:::1;:25:::0;55313:106::o;23594:295::-;23711:7;-1:-1:-1;;;;;23758:19:0;;23736:111;;;;-1:-1:-1;;;23736:111:0;;20114:2:1;23736:111:0;;;20096:21:1;20153:2;20133:18;;;20126:30;20192:34;20172:18;;;20165:62;-1:-1:-1;;;20243:18:1;;;20236:40;20293:19;;23736:111:0;19912:406:1;23736:111:0;-1:-1:-1;;;;;;23865:16:0;;;;;:9;:16;;;;;;;23594:295::o;37055:94::-;36477:6;;-1:-1:-1;;;;;36477:6:0;21727:10;36624:23;36616:68;;;;-1:-1:-1;;;36616:68:0;;;;;;;:::i;:::-;37120:21:::1;37138:1;37120:9;:21::i;:::-;37055:94::o:0;56355:135::-;36477:6;;-1:-1:-1;;;;;36477:6:0;21727:10;36624:23;36616:68;;;;-1:-1:-1;;;36616:68:0;;;;;;;:::i;:::-;56451:12:::1;:31:::0;56355:135::o;55777:93::-;36477:6;;-1:-1:-1;;;;;36477:6:0;21727:10;36624:23;36616:68;;;;-1:-1:-1;;;36616:68:0;;;;;;;:::i;:::-;55842:11:::1;:20:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;55842:20:0;;::::1;::::0;;;::::1;::::0;;55777:93::o;57155:249::-;36477:6;;-1:-1:-1;;;;;36477:6:0;21727:10;36624:23;36616:68;;;;-1:-1:-1;;;36616:68:0;;;;;;;:::i;:::-;57258:12:::1;57273:16;57281:7;57273;:16::i;:::-;57258:31;;57308:14;57317:4;57308:8;:14::i;:::-;57300:48;;;::::0;-1:-1:-1;;;57300:48:0;;18980:2:1;57300:48:0::1;::::0;::::1;18962:21:1::0;19019:2;18999:18;;;18992:30;-1:-1:-1;;;19038:18:1;;;19031:51;19099:18;;57300:48:0::1;18778:345:1::0;57300:48:0::1;57361:35;57377:4;57383:3;57388:7;57361:15;:35::i;56498:207::-:0;36477:6;;-1:-1:-1;;;;;36477:6:0;21727:10;36624:23;36616:68;;;;-1:-1:-1;;;36616:68:0;;;;;;;:::i;:::-;56618:79:::1;56629:5;56636:7;56645:6;:43;;-1:-1:-1::0;;;;;56661:18:0;::::1;;::::0;;;:11:::1;:18;::::0;;;;;;;:27;;;;;;;;;56645:43:::1;;;56654:4;56645:43;56690:6;56618:10;:79::i;:::-;56498:207:::0;;;;:::o;24513:104::-;24569:13;24602:7;24595:14;;;;;:::i;52356:117::-;-1:-1:-1;;;;;52451:14:0;52427:4;52451:14;;;:7;:14;;;;;;;;;52356:117::o;56713:120::-;36477:6;;-1:-1:-1;;;;;36477:6:0;21727:10;36624:23;36616:68;;;;-1:-1:-1;;;36616:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;56802:14:0;;;::::1;;::::0;;;:7:::1;:14;::::0;;;;:23;;-1:-1:-1;;56802:23:0::1;::::0;::::1;;::::0;;;::::1;::::0;;56713:120::o;51292:170::-;51405:12;;51380:4;;51405:12;;;;;51404:13;:50;;;;-1:-1:-1;;;;;;;51422:18:0;;;;51452:1;51422:18;;;:11;:18;;;;;;;;:27;;;;;;;;:31;;;51292:170::o;48537:555::-;48686:14;;;;;;;48685:15;48677:64;;;;-1:-1:-1;;;48677:64:0;;27309:2:1;48677:64:0;;;27291:21:1;27348:2;27328:18;;;27321:30;27387:34;27367:18;;;27360:62;-1:-1:-1;;;27438:18:1;;;27431:34;27482:19;;48677:64:0;27107:400:1;48677:64:0;48774:1;48760:11;:15;48752:55;;;;-1:-1:-1;;;48752:55:0;;;;;;;:::i;:::-;48866:9;;48851:11;48826:22;:12;38571:14;;38479:114;48826:22;:36;;;;:::i;:::-;:49;;48818:84;;;;-1:-1:-1;;;48818:84:0;;;;;;;:::i;:::-;48963:11;48921:38;48933:3;48938:6;48946:12;;48921:11;:38::i;:::-;:53;;48913:88;;;;-1:-1:-1;;;48913:88:0;;17457:2:1;48913:88:0;;;17439:21:1;17496:2;17476:18;;;17469:30;-1:-1:-1;;;17515:18:1;;;17508:52;17577:18;;48913:88:0;17255:346:1;48913:88:0;-1:-1:-1;;;;;49014:15:0;;;;;;:10;:15;;;;;:30;;49033:11;;49014:15;:30;;49033:11;;49014:30;:::i;:::-;;;;-1:-1:-1;49057:27:0;;-1:-1:-1;49067:3:0;49072:11;49057:9;:27::i;:::-;48537:555;;;;;:::o;46362:626::-;46506:15;;;;46505:16;46497:66;;;;-1:-1:-1;;;46497:66:0;;21991:2:1;46497:66:0;;;21973:21:1;22030:2;22010:18;;;22003:30;22069:34;22049:18;;;22042:62;-1:-1:-1;;;22120:18:1;;;22113:35;22165:19;;46497:66:0;21789:401:1;46497:66:0;46596:1;46582:11;:15;46574:55;;;;-1:-1:-1;;;46574:55:0;;;;;;;:::i;:::-;46688:9;;46673:11;46648:22;:12;38571:14;;38479:114;46648:22;:36;;;;:::i;:::-;:49;;46640:84;;;;-1:-1:-1;;;46640:84:0;;;;;;;:::i;:::-;46743:32;46757:3;46762:12;;46743:13;:32::i;:::-;46735:68;;;;-1:-1:-1;;;46735:68:0;;27714:2:1;46735:68:0;;;27696:21:1;27753:2;27733:18;;;27726:30;27792:25;27772:18;;;27765:53;27835:18;;46735:68:0;27512:347:1;46735:68:0;46820:15;;:19;46816:125;;46895:11;46877:15;;:29;;;;:::i;:::-;46864:9;:42;;46856:73;;;;-1:-1:-1;;;46856:73:0;;26202:2:1;46856:73:0;;;26184:21:1;26241:2;26221:18;;;26214:30;-1:-1:-1;;;26260:18:1;;;26253:48;26318:18;;46856:73:0;26000:342:1;46856:73:0;46953:27;46963:3;46968:11;46953:9;:27::i;45582:98::-;45643:29;45648:10;45660:11;45643:4;:29::i;47879:448::-;36477:6;;-1:-1:-1;;;;;36477:6:0;47978:10;:21;47974:292;;48021:21;48031:10;48021:9;:21::i;:::-;48016:109;;48071:12;;-1:-1:-1;;;48071:12:0;;;;48063:46;;;;-1:-1:-1;;;48063:46:0;;;;;;;:::i;:::-;48148:20;48157:10;48148:8;:20::i;:::-;48147:21;48139:51;;;;-1:-1:-1;;;48139:51:0;;;;;;;:::i;:::-;48214:18;48223:8;48214;:18::i;:::-;48213:19;48205:49;;;;-1:-1:-1;;;48205:49:0;;;;;;;:::i;:::-;48276:43;48300:8;48310;48276:23;:43::i;47017:144::-;47114:39;47125:5;47132:7;47141:4;47147:5;47114:10;:39::i;55878:91::-;36477:6;;-1:-1:-1;;;;;36477:6:0;21727:10;36624:23;36616:68;;;;-1:-1:-1;;;36616:68:0;;;;;;;:::i;:::-;55942:10:::1;:19:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;55942:19:0;;::::1;::::0;;;::::1;::::0;;55878:91::o;55561:101::-;36477:6;;-1:-1:-1;;;;;36477:6:0;21727:10;36624:23;36616:68;;;;-1:-1:-1;;;36616:68:0;;;;;;;:::i;:::-;55630:15:::1;:24:::0;;-1:-1:-1;;55630:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;55561:101::o;27799:365::-;27988:41;21727:10;28021:7;27988:18;:41::i;:::-;27966:140;;;;-1:-1:-1;;;27966:140:0;;;;;;;:::i;:::-;28117:39;28131:4;28137:2;28141:7;28150:5;28117:13;:39::i;53140:724::-;29776:4;29800:16;;;:7;:16;;;;;;53213:13;;-1:-1:-1;;;;;29800:16:0;53239:113;;;;-1:-1:-1;;;53239:113:0;;24633:2:1;53239:113:0;;;24615:21:1;24672:2;24652:18;;;24645:30;24711:34;24691:18;;;24684:62;-1:-1:-1;;;24762:18:1;;;24755:45;24817:19;;53239:113:0;24431:411:1;53239:113:0;53380:7;53369:8;;:18;53365:72;;;53411:14;53404:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53140:724;;;:::o;53365:72::-;53449:28;53480:10;:8;:10::i;:::-;53501:37;;;;;;;;;;;;-1:-1:-1;;;53501:37:0;;;;53569:28;;53449:41;;-1:-1:-1;53501:37:0;53569:287;;;;;;;;;;;;;;;;;53693:14;53734:18;:7;:16;:18::i;:::-;53779:13;53650:165;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;53569:287;53549:307;53140:724;-1:-1:-1;;;;53140:724:0:o;54906:150::-;36477:6;;-1:-1:-1;;;;;36477:6:0;21727:10;36624:23;36616:68;;;;-1:-1:-1;;;36616:68:0;;;;;;;:::i;:::-;55001:20:::1;:47:::0;;-1:-1:-1;;;;;;55001:47:0::1;-1:-1:-1::0;;;;;55001:47:0;;;::::1;::::0;;;::::1;::::0;;54906:150::o;56841:107::-;36477:6;;-1:-1:-1;;;;;36477:6:0;21727:10;36624:23;36616:68;;;;-1:-1:-1;;;36616:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;56915:16:0;;;::::1;;::::0;;;:9:::1;:16;::::0;;;;:25;;-1:-1:-1;;56915:25:0::1;::::0;::::1;;::::0;;;::::1;::::0;;56841:107::o;52481:103::-;-1:-1:-1;;;;;52560:16:0;52536:4;52560:16;;;:9;:16;;;;;;;;;52481:103::o;57412:139::-;36477:6;;-1:-1:-1;;;;;36477:6:0;21727:10;36624:23;36616:68;;;;-1:-1:-1;;;36616:68:0;;;;;;;:::i;:::-;57495:48:::1;57515:10;57527:2;57531:7;57495:48;;;;;;;;;;;::::0;:19:::1;:48::i;51470:137::-:0;51579:10;51543:7;51730:18;;;:11;:18;;;;;;;;:27;;;;;;;;;51570:29;51615:150;57559:235;36477:6;;-1:-1:-1;;;;;36477:6:0;21727:10;36624:23;36616:68;;;;-1:-1:-1;;;36616:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;57676:17:0;::::1;57654:97;;;::::0;-1:-1:-1;;;57654:97:0;;19330:2:1;57654:97:0::1;::::0;::::1;19312:21:1::0;19369:2;19349:18;;;19342:30;19408:32;19388:18;;;19381:60;19458:18;;57654:97:0::1;19128:354:1::0;57654:97:0::1;-1:-1:-1::0;;;;;57762:11:0;::::1;;::::0;;;:6:::1;:11;::::0;;;;:24;;57777:9;;57762:11;:24:::1;::::0;57777:9;;57762:24:::1;:::i;53872:553::-:0;53993:7;-1:-1:-1;;;;;54035:17:0;;54013:103;;;;-1:-1:-1;;;54013:103:0;;25049:2:1;54013:103:0;;;25031:21:1;25088:2;25068:18;;;25061:30;25127:34;25107:18;;;25100:62;-1:-1:-1;;;25178:18:1;;;25171:34;25222:19;;54013:103:0;24847:400:1;54013:103:0;54154:29;;-1:-1:-1;;12042:2:1;12038:15;;;12034:53;54154:29:0;;;12022:66:1;12104:12;;;12097:28;;;54129:12:0;;12141::1;;54154:29:0;;;;;;;;;;;;54144:40;;;;;;54129:55;;54203:52;54222:12;;54203:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;54236:12:0;;;-1:-1:-1;54250:4:0;;-1:-1:-1;54203:18:0;:52::i;:::-;54195:78;;;;-1:-1:-1;;;54195:78:0;;26967:2:1;54195:78:0;;;26949:21:1;27006:2;26986:18;;;26979:30;-1:-1:-1;;;27025:18:1;;;27018:43;27078:18;;54195:78:0;26765:337:1;54195:78:0;-1:-1:-1;;;;;54302:15:0;;54286:13;54302:15;;;:10;:15;;;;;;54332;;;54328:56;;54371:1;54364:8;;;;;;54328:56;54403:14;54412:5;54403:6;:14;:::i;:::-;54396:21;53872:553;-1:-1:-1;;;;;;;53872:553:0:o;49583:141::-;49678:38;49689:5;49696:7;49705:4;49711;49678:10;:38::i;50361:781::-;50452:15;50498:7;36477:6;;-1:-1:-1;;;;;36477:6:0;;36404:87;50498:7;-1:-1:-1;;;;;50484:21:0;:10;-1:-1:-1;;;;;50484:21:0;;;:42;;;;-1:-1:-1;36477:6:0;;-1:-1:-1;;;;;50509:17:0;;;36477:6;;50509:17;;50484:42;50480:371;;;50548:21;50558:10;50548:9;:21::i;:::-;50547:22;:44;;;;;50574:17;50584:6;50574:9;:17::i;:::-;50573:18;50547:44;50543:131;;;50620:12;;-1:-1:-1;;;50620:12:0;;;;50612:46;;;;-1:-1:-1;;;50612:46:0;;;;;;;:::i;:::-;50694:20;50703:10;50694:8;:20::i;:::-;:57;;;;50735:16;50744:6;50735:8;:16::i;:::-;50694:97;;;;50772:19;50781:9;50772:8;:19::i;:::-;50690:150;;;-1:-1:-1;50819:5:0;50812:12;;50690:150;50907:20;;-1:-1:-1;;;;;50907:20:0;50943:36;;;;;:91;;-1:-1:-1;50991:29:0;;-1:-1:-1;;;50991:29:0;;-1:-1:-1;;;;;13207:32:1;;;50991:29:0;;;13189:51:1;50983::0;;;;50991:21;;;;;;13162:18:1;;50991:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;50983:51:0;;50943:91;50939:135;;;51058:4;51051:11;;;;;50939:135;-1:-1:-1;;;;;26986:25:0;;;26957:4;26986:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;51093:41;26815:214;51773:126;51833:16;51869:22;51880:10;51869;:22::i;55427:126::-;36477:6;;-1:-1:-1;;;;;36477:6:0;21727:10;36624:23;36616:68;;;;-1:-1:-1;;;36616:68:0;;;;;;;:::i;:::-;55513:32;;::::1;::::0;:14:::1;::::0;:32:::1;::::0;::::1;::::0;::::1;:::i;37304:229::-:0;36477:6;;-1:-1:-1;;;;;36477:6:0;21727:10;36624:23;36616:68;;;;-1:-1:-1;;;36616:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37407:22:0;::::1;37385:110;;;::::0;-1:-1:-1;;;37385:110:0;;16693:2:1;37385:110:0::1;::::0;::::1;16675:21:1::0;16732:2;16712:18;;;16705:30;16771:34;16751:18;;;16744:62;-1:-1:-1;;;16822:18:1;;;16815:36;16868:19;;37385:110:0::1;16491:402:1::0;37385:110:0::1;37506:19;37516:8;37506:9;:19::i;48335:194::-:0;48462:59;48475:10;48487:6;48495:12;;48509:11;48462:12;:59::i;51150:134::-;51223:4;51247:29;51256:10;51268:7;51247:8;:29::i;55670:99::-;36477:6;;-1:-1:-1;;;;;36477:6:0;21727:10;36624:23;36616:68;;;;-1:-1:-1;;;36616:68:0;;;;;;;:::i;:::-;55738:14:::1;:23:::0;;;::::1;;;;-1:-1:-1::0;;55738:23:0;;::::1;::::0;;;::::1;::::0;;55670:99::o;54433:224::-;54501:7;-1:-1:-1;;;;;54543:17:0;;54521:99;;;;-1:-1:-1;;;54521:99:0;;20935:2:1;54521:99:0;;;20917:21:1;;;20954:18;;;20947:30;21013:34;20993:18;;;20986:62;21065:18;;54521:99:0;20733:356:1;54521:99:0;-1:-1:-1;;;;;;54638:11:0;;;;;:6;:11;;;;;;;54433:224::o;26037:308::-;26158:7;29800:16;;;:7;:16;;;;;;-1:-1:-1;;;;;29800:16:0;26183:110;;;;-1:-1:-1;;;26183:110:0;;23099:2:1;26183:110:0;;;23081:21:1;23138:2;23118:18;;;23111:30;23177:34;23157:18;;;23150:62;-1:-1:-1;;;23228:18:1;;;23221:42;23280:19;;26183:110:0;22897:408:1;26183:110:0;-1:-1:-1;26313:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;26313:24:0;;26037:308::o;25560:411::-;25641:13;25657:23;25672:7;25657:14;:23::i;:::-;25641:39;;25705:5;-1:-1:-1;;;;;25699:11:0;:2;-1:-1:-1;;;;;25699:11:0;;;25691:57;;;;-1:-1:-1;;;25691:57:0;;25800:2:1;25691:57:0;;;25782:21:1;25839:2;25819:18;;;25812:30;25878:34;25858:18;;;25851:62;-1:-1:-1;;;25929:18:1;;;25922:31;25970:19;;25691:57:0;25598:397:1;25691:57:0;21727:10;-1:-1:-1;;;;;25783:21:0;;;;:62;;-1:-1:-1;25808:37:0;25825:5;21727:10;50361:781;:::i;25808:37::-;25761:168;;;;-1:-1:-1;;;25761:168:0;;19689:2:1;25761:168:0;;;19671:21:1;19728:2;19708:18;;;19701:30;19767:34;19747:18;;;19740:62;19838:26;19818:18;;;19811:54;19882:19;;25761:168:0;19487:420:1;25761:168:0;25942:21;25951:2;25955:7;25942:8;:21::i;30005:452::-;30134:4;29800:16;;;:7;:16;;;;;;-1:-1:-1;;;;;29800:16:0;30156:110;;;;-1:-1:-1;;;30156:110:0;;18567:2:1;30156:110:0;;;18549:21:1;18606:2;18586:18;;;18579:30;18645:34;18625:18;;;18618:62;-1:-1:-1;;;18696:18:1;;;18689:42;18748:19;;30156:110:0;18365:408:1;30156:110:0;30277:13;30293:23;30308:7;30293:14;:23::i;:::-;30277:39;;30346:5;-1:-1:-1;;;;;30335:16:0;:7;-1:-1:-1;;;;;30335:16:0;;:64;;;;30392:7;-1:-1:-1;;;;;30368:31:0;:20;30380:7;30368:11;:20::i;:::-;-1:-1:-1;;;;;30368:31:0;;30335:64;:113;;;;30416:32;30433:5;30440:7;30416:16;:32::i;43306:679::-;36477:6;;-1:-1:-1;;;;;36477:6:0;43435:10;:21;43431:500;;43482:35;43491:16;43499:7;43491;:16::i;43482:35::-;43481:36;43473:64;;;;-1:-1:-1;;;43473:64:0;;;;;;;:::i;:::-;43561:23;43570:4;43576:7;43561:8;:23::i;:::-;43560:24;43552:52;;;;-1:-1:-1;;;43552:52:0;;;;;;;:::i;:::-;43628:14;43637:4;43628:8;:14::i;:::-;43627:15;43619:45;;;;-1:-1:-1;;;43619:45:0;;;;;;;:::i;:::-;43688:12;43697:2;43688:8;:12::i;:::-;43687:13;43679:43;;;;-1:-1:-1;;;43679:43:0;;;;;;;:::i;:::-;43746:26;43755:16;43763:7;43755;:16::i;43746:26::-;43745:27;43737:57;;;;-1:-1:-1;;;43737:57:0;;;;;;;:::i;:::-;43816:21;43826:10;43816:9;:21::i;:::-;43811:109;;43866:12;;-1:-1:-1;;;43866:12:0;;;;43858:46;;;;-1:-1:-1;;;43858:46:0;;;;;;;:::i;:::-;43943:34;43959:4;43965:2;43969:7;43943:15;:34::i;43993:705::-;44065:15;44083:22;:12;38571:14;;38479:114;44083:22;44065:40;;44122:11;44137:1;44122:16;44118:521;;;44155:27;44165:3;44170:11;:7;44180:1;44170:11;:::i;:::-;44155:9;:27::i;:::-;44118:521;;;-1:-1:-1;;;;;44204:14:0;;8886:20;8934:8;44200:439;;44254:1;44237:105;44262:11;44257:1;:16;44237:105;;44299:27;44309:3;44314:11;44324:1;44314:7;:11;:::i;44299:27::-;44275:3;;;;:::i;:::-;;;;44237:105;;;;44200:439;;;44391:1;44374:210;44399:11;44394:1;:16;44374:210;;44436:15;44454:11;44464:1;44454:7;:11;:::i;:::-;44486:16;;;;:7;:16;;;;;;:22;;-1:-1:-1;;;;;;44486:22:0;-1:-1:-1;;;;;44486:22:0;;;;;;;;44534:34;;44486:16;;-1:-1:-1;44486:16:0;;:22;;:16;44534:34;;44486:16;;44534:34;-1:-1:-1;44412:3:0;;;;:::i;:::-;;;;44374:210;;;-1:-1:-1;;;;;;44598:14:0;;;;;;:9;:14;;;;;:29;;44616:11;;44598:14;:29;;44616:11;;44598:29;:::i;:::-;;;;-1:-1:-1;;44200:439:0;44651:39;44668:21;44678:11;44668:7;:21;:::i;:::-;44651:12;39146:22;39073:103;17877:190;18002:4;18055;18026:25;18039:5;18046:4;18026:12;:25::i;:::-;:33;;17877:190;-1:-1:-1;;;;17877:190:0:o;37541:173::-;37616:6;;;-1:-1:-1;;;;;37633:17:0;;;-1:-1:-1;;;;;;37633:17:0;;;;;;;37666:40;;37616:6;;;37633:17;37616:6;;37666:40;;37597:16;;37666:40;37586:128;37541:173;:::o;32982:563::-;33155:4;-1:-1:-1;;;;;33128:31:0;:23;33143:7;33128:14;:23::i;:::-;-1:-1:-1;;;;;33128:31:0;;33106:122;;;;-1:-1:-1;;;33106:122:0;;24223:2:1;33106:122:0;;;24205:21:1;24262:2;24242:18;;;24235:30;24301:34;24281:18;;;24274:62;-1:-1:-1;;;24352:18:1;;;24345:39;24401:19;;33106:122:0;24021:405:1;33106:122:0;-1:-1:-1;;;;;33247:16:0;;33239:65;;;;-1:-1:-1;;;33239:65:0;;17808:2:1;33239:65:0;;;17790:21:1;17847:2;17827:18;;;17820:30;17886:34;17866:18;;;17859:62;-1:-1:-1;;;17937:18:1;;;17930:34;17981:19;;33239:65:0;17606:400:1;33239:65:0;33369:29;33386:1;33390:7;33369:8;:29::i;:::-;-1:-1:-1;;;;;33411:15:0;;;;;;:9;:15;;;;;:20;;33430:1;;33411:15;:20;;33430:1;;33411:20;:::i;:::-;;;;-1:-1:-1;;;;;;;33442:13:0;;;;;;:9;:13;;;;;:18;;33459:1;;33442:13;:18;;33459:1;;33442:18;:::i;:::-;;;;-1:-1:-1;;33471:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;33471:21:0;-1:-1:-1;;;;;33471:21:0;;;;;;;;;33510:27;;33471:16;;33510:27;;;;;;;32982:563;;;:::o;44706:712::-;44822:1;44812:7;:11;44804:39;;;;-1:-1:-1;;;44804:39:0;;21296:2:1;44804:39:0;;;21278:21:1;21335:2;21315:18;;;21308:30;-1:-1:-1;;;21354:18:1;;;21347:45;21409:18;;44804:39:0;21094:339:1;44804:39:0;44896:5;-1:-1:-1;;;;;44876:25:0;:16;44884:7;44876;:16::i;:::-;-1:-1:-1;;;;;44876:25:0;;44854:104;;;;-1:-1:-1;;;44854:104:0;;28824:2:1;44854:104:0;;;28806:21:1;28863:2;28843:18;;;28836:30;28902:31;28882:18;;;28875:59;28951:18;;44854:104:0;28622:353:1;44854:104:0;44975:6;:42;;;;-1:-1:-1;;;;;;44985:18:0;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;:32;44975:42;44971:440;;;-1:-1:-1;;;;;45034:18:0;;;;;;:11;:18;;;;;;;;:27;;;;;;;;:34;;;45083:18;;;:11;:18;;;;;:27;;;;;;;;45113:15;45083:45;;45143:21;;;;;;:26;;45168:1;;45034:18;45143:26;;45168:1;;45143:26;:::i;:::-;;;;-1:-1:-1;44971:440:0;;-1:-1:-1;44971:440:0;;45192:6;45191:7;:42;;;;-1:-1:-1;;;;;;45202:18:0;;45232:1;45202:18;;;:11;:18;;;;;;;;:27;;;;;;;;;:31;;45191:42;45187:224;;;-1:-1:-1;;;;;45258:18:0;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;:35;;45250:60;;;;-1:-1:-1;;;45250:60:0;;22397:2:1;45250:60:0;;;22379:21:1;22436:2;22416:18;;;22409:30;-1:-1:-1;;;22455:18:1;;;22448:42;22507:18;;45250:60:0;22195:336:1;45250:60:0;-1:-1:-1;;;;;45327:18:0;;45357:1;45327:18;;;:11;:18;;;;;;;;:27;;;;;;;;;:31;;;45373:21;;;;;:26;;45398:1;;45357;45373:26;;45398:1;;45373:26;:::i;:::-;;;;-1:-1:-1;;44706:712:0;;;;:::o;26417:327::-;-1:-1:-1;;;;;26552:24:0;;21727:10;26552:24;;26544:62;;;;-1:-1:-1;;;26544:62:0;;18213:2:1;26544:62:0;;;18195:21:1;18252:2;18232:18;;;18225:30;18291:27;18271:18;;;18264:55;18336:18;;26544:62:0;18011:349:1;26544:62:0;21727:10;26619:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;26619:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;26619:53:0;;;;;;;;;;26688:48;;14521:41:1;;;26619:42:0;;21727:10;26688:48;;14494:18:1;26688:48:0;;;;;;;26417:327;;:::o;29046:352::-;29203:28;29213:4;29219:2;29223:7;29203:9;:28::i;:::-;29264:48;29287:4;29293:2;29297:7;29306:5;29264:22;:48::i;:::-;29242:148;;;;-1:-1:-1;;;29242:148:0;;;;;;;:::i;45443:108::-;45503:13;45536:7;45529:14;;;;;:::i;7071:723::-;7127:13;7348:10;7344:53;;-1:-1:-1;;7375:10:0;;;;;;;;;;;;-1:-1:-1;;;7375:10:0;;;;;7071:723::o;7344:53::-;7422:5;7407:12;7463:78;7470:9;;7463:78;;7496:8;;;;:::i;:::-;;-1:-1:-1;7519:10:0;;-1:-1:-1;7527:2:0;7519:10;;:::i;:::-;;;7463:78;;;7551:19;7583:6;-1:-1:-1;;;;;7573:17:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7573:17:0;;7551:39;;7601:154;7608:10;;7601:154;;7635:11;7645:1;7635:11;;:::i;:::-;;-1:-1:-1;7704:10:0;7712:2;7704:5;:10;:::i;:::-;7691:24;;:2;:24;:::i;:::-;7678:39;;7661:6;7668;7661:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;7661:56:0;;;;;;;;-1:-1:-1;7732:11:0;7741:2;7732:11;;:::i;:::-;;;7601:154;;33663:174;33738:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;33738:29:0;-1:-1:-1;;;;;33738:29:0;;;;;;;;:24;;33792:23;33738:24;33792:14;:23::i;:::-;-1:-1:-1;;;;;33783:46:0;;;;;;;;;;;33663:174;;:::o;30799:110::-;30875:26;30885:2;30889:7;30875:26;;;;;;;;;;;;:9;:26::i;18429:675::-;18512:7;18555:4;18512:7;18570:497;18594:5;:12;18590:1;:16;18570:497;;;18628:20;18651:5;18657:1;18651:8;;;;;;;;:::i;:::-;;;;;;;18628:31;;18694:12;18678;:28;18674:382;;19180:13;19230:15;;;19266:4;19259:15;;;19313:4;19297:21;;18806:57;;18674:382;;;19180:13;19230:15;;;19266:4;19259:15;;;19313:4;19297:21;;18983:57;;18674:382;-1:-1:-1;18608:3:0;;;;:::i;:::-;;;;18570:497;;;-1:-1:-1;19084:12:0;18429:675;-1:-1:-1;;;18429:675:0:o;34402:980::-;34557:4;-1:-1:-1;;;;;34578:13:0;;8886:20;8934:8;34574:801;;34631:175;;-1:-1:-1;;;34631:175:0;;-1:-1:-1;;;;;34631:36:0;;;;;:175;;21727:10;;34725:4;;34752:7;;34782:5;;34631:175;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34631:175:0;;;;;;;;-1:-1:-1;;34631:175:0;;;;;;;;;;;;:::i;:::-;;;34610:710;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34989:13:0;;34985:320;;35032:108;;-1:-1:-1;;;35032:108:0;;;;;;;:::i;34985:320::-;35255:6;35249:13;35240:6;35236:2;35232:15;35225:38;34610:710;-1:-1:-1;;;;;;34870:51:0;-1:-1:-1;;;34870:51:0;;-1:-1:-1;34863:58:0;;34574:801;-1:-1:-1;35359:4:0;35352:11;;31136:321;31266:18;31272:2;31276:7;31266:5;:18::i;:::-;31317:54;31348:1;31352:2;31356:7;31365:5;31317:22;:54::i;:::-;31295:154;;;;-1:-1:-1;;;31295:154:0;;;;;;;:::i;31793:324::-;-1:-1:-1;;;;;31873:16:0;;31865:61;;;;-1:-1:-1;;;31865:61:0;;22738:2:1;31865:61:0;;;22720:21:1;;;22757:18;;;22750:30;22816:34;22796:18;;;22789:62;22868:18;;31865:61:0;22536:356:1;31865:61:0;29776:4;29800:16;;;:7;:16;;;;;;-1:-1:-1;;;;;29800:16:0;:30;31937:58;;;;-1:-1:-1;;;31937:58:0;;17100:2:1;31937:58:0;;;17082:21:1;17139:2;17119:18;;;17112:30;17178;17158:18;;;17151:58;17226:18;;31937:58:0;16898:352:1;31937:58:0;-1:-1:-1;;;;;32008:13:0;;;;;;:9;:13;;;;;:18;;32025:1;;32008:13;:18;;32025:1;;32008:18;:::i;:::-;;;;-1:-1:-1;;32037:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;32037:21:0;-1:-1:-1;;;;;32037:21:0;;;;;;;;32076:33;;32037:16;;;32076:33;;32037:16;;32076:33;31793:324;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:406:1;78:5;-1:-1:-1;;;;;104:6:1;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:367::-;488:8;498:6;552:3;545:4;537:6;533:17;529:27;519:55;;570:1;567;560:12;519:55;-1:-1:-1;593:20:1;;-1:-1:-1;;;;;625:30:1;;622:50;;;668:1;665;658:12;622:50;705:4;697:6;693:17;681:29;;765:3;758:4;748:6;745:1;741:14;733:6;729:27;725:38;722:47;719:67;;;782:1;779;772:12;719:67;425:367;;;;;:::o;797:160::-;862:20;;918:13;;911:21;901:32;;891:60;;947:1;944;937:12;891:60;797:160;;;:::o;962:247::-;1021:6;1074:2;1062:9;1053:7;1049:23;1045:32;1042:52;;;1090:1;1087;1080:12;1042:52;1129:9;1116:23;1148:31;1173:5;1148:31;:::i;1214:388::-;1282:6;1290;1343:2;1331:9;1322:7;1318:23;1314:32;1311:52;;;1359:1;1356;1349:12;1311:52;1398:9;1385:23;1417:31;1442:5;1417:31;:::i;:::-;1467:5;-1:-1:-1;1524:2:1;1509:18;;1496:32;1537:33;1496:32;1537:33;:::i;:::-;1589:7;1579:17;;;1214:388;;;;;:::o;1607:456::-;1684:6;1692;1700;1753:2;1741:9;1732:7;1728:23;1724:32;1721:52;;;1769:1;1766;1759:12;1721:52;1808:9;1795:23;1827:31;1852:5;1827:31;:::i;:::-;1877:5;-1:-1:-1;1934:2:1;1919:18;;1906:32;1947:33;1906:32;1947:33;:::i;:::-;1607:456;;1999:7;;-1:-1:-1;;;2053:2:1;2038:18;;;;2025:32;;1607:456::o;2068:794::-;2163:6;2171;2179;2187;2240:3;2228:9;2219:7;2215:23;2211:33;2208:53;;;2257:1;2254;2247:12;2208:53;2296:9;2283:23;2315:31;2340:5;2315:31;:::i;:::-;2365:5;-1:-1:-1;2422:2:1;2407:18;;2394:32;2435:33;2394:32;2435:33;:::i;:::-;2487:7;-1:-1:-1;2541:2:1;2526:18;;2513:32;;-1:-1:-1;2596:2:1;2581:18;;2568:32;-1:-1:-1;;;;;2612:30:1;;2609:50;;;2655:1;2652;2645:12;2609:50;2678:22;;2731:4;2723:13;;2719:27;-1:-1:-1;2709:55:1;;2760:1;2757;2750:12;2709:55;2783:73;2848:7;2843:2;2830:16;2825:2;2821;2817:11;2783:73;:::i;:::-;2773:83;;;2068:794;;;;;;;:::o;2867:572::-;2962:6;2970;2978;3031:2;3019:9;3010:7;3006:23;3002:32;2999:52;;;3047:1;3044;3037:12;2999:52;3086:9;3073:23;3105:31;3130:5;3105:31;:::i;:::-;3155:5;-1:-1:-1;3211:2:1;3196:18;;3183:32;-1:-1:-1;;;;;3227:30:1;;3224:50;;;3270:1;3267;3260:12;3224:50;3309:70;3371:7;3362:6;3351:9;3347:22;3309:70;:::i;:::-;2867:572;;3398:8;;-1:-1:-1;3283:96:1;;-1:-1:-1;;;;2867:572:1:o;3444:640::-;3548:6;3556;3564;3572;3625:2;3613:9;3604:7;3600:23;3596:32;3593:52;;;3641:1;3638;3631:12;3593:52;3680:9;3667:23;3699:31;3724:5;3699:31;:::i;:::-;3749:5;-1:-1:-1;3805:2:1;3790:18;;3777:32;-1:-1:-1;;;;;3821:30:1;;3818:50;;;3864:1;3861;3854:12;3818:50;3903:70;3965:7;3956:6;3945:9;3941:22;3903:70;:::i;:::-;3444:640;;3992:8;;-1:-1:-1;3877:96:1;;4074:2;4059:18;4046:32;;3444:640;-1:-1:-1;;;;3444:640:1:o;4089:315::-;4154:6;4162;4215:2;4203:9;4194:7;4190:23;4186:32;4183:52;;;4231:1;4228;4221:12;4183:52;4270:9;4257:23;4289:31;4314:5;4289:31;:::i;:::-;4339:5;-1:-1:-1;4363:35:1;4394:2;4379:18;;4363:35;:::i;:::-;4353:45;;4089:315;;;;;:::o;4409:::-;4477:6;4485;4538:2;4526:9;4517:7;4513:23;4509:32;4506:52;;;4554:1;4551;4544:12;4506:52;4593:9;4580:23;4612:31;4637:5;4612:31;:::i;:::-;4662:5;4714:2;4699:18;;;;4686:32;;-1:-1:-1;;;4409:315:1:o;4729:640::-;4833:6;4841;4849;4857;4910:2;4898:9;4889:7;4885:23;4881:32;4878:52;;;4926:1;4923;4916:12;4878:52;4965:9;4952:23;4984:31;5009:5;4984:31;:::i;:::-;5034:5;-1:-1:-1;5086:2:1;5071:18;;5058:32;;-1:-1:-1;5141:2:1;5126:18;;5113:32;-1:-1:-1;;;;;5157:30:1;;5154:50;;;5200:1;5197;5190:12;5154:50;5239:70;5301:7;5292:6;5281:9;5277:22;5239:70;:::i;:::-;4729:640;;;;-1:-1:-1;5328:8:1;-1:-1:-1;;;;4729:640:1:o;5374:709::-;5487:6;5495;5503;5511;5519;5572:3;5560:9;5551:7;5547:23;5543:33;5540:53;;;5589:1;5586;5579:12;5540:53;5628:9;5615:23;5647:31;5672:5;5647:31;:::i;:::-;5697:5;-1:-1:-1;5749:2:1;5734:18;;5721:32;;-1:-1:-1;5804:2:1;5789:18;;5776:32;-1:-1:-1;;;;;5820:30:1;;5817:50;;;5863:1;5860;5853:12;5817:50;5902:70;5964:7;5955:6;5944:9;5940:22;5902:70;:::i;:::-;5374:709;;;;-1:-1:-1;5991:8:1;6073:2;6058:18;6045:32;;5374:709;-1:-1:-1;;;;5374:709:1:o;6088:383::-;6165:6;6173;6181;6234:2;6222:9;6213:7;6209:23;6205:32;6202:52;;;6250:1;6247;6240:12;6202:52;6289:9;6276:23;6308:31;6333:5;6308:31;:::i;:::-;6358:5;6410:2;6395:18;;6382:32;;-1:-1:-1;6461:2:1;6446:18;;;6433:32;;6088:383;-1:-1:-1;;;6088:383:1:o;6476:452::-;6559:6;6567;6575;6583;6636:3;6624:9;6615:7;6611:23;6607:33;6604:53;;;6653:1;6650;6643:12;6604:53;6692:9;6679:23;6711:31;6736:5;6711:31;:::i;:::-;6761:5;-1:-1:-1;6813:2:1;6798:18;;6785:32;;-1:-1:-1;6864:2:1;6849:18;;6836:32;;-1:-1:-1;6887:35:1;6918:2;6903:18;;6887:35;:::i;:::-;6877:45;;6476:452;;;;;;;:::o;6933:1102::-;7023:6;7031;7084:2;7072:9;7063:7;7059:23;7055:32;7052:52;;;7100:1;7097;7090:12;7052:52;7140:9;7127:23;-1:-1:-1;;;;;7210:2:1;7202:6;7199:14;7196:34;;;7226:1;7223;7216:12;7196:34;7264:6;7253:9;7249:22;7239:32;;7309:7;7302:4;7298:2;7294:13;7290:27;7280:55;;7331:1;7328;7321:12;7280:55;7367:2;7354:16;7389:4;7412:2;7408;7405:10;7402:36;;;7418:18;;:::i;:::-;7464:2;7461:1;7457:10;7447:20;;7487:28;7511:2;7507;7503:11;7487:28;:::i;:::-;7549:15;;;7580:12;;;;7612:11;;;7642;;;7638:20;;7635:33;-1:-1:-1;7632:53:1;;;7681:1;7678;7671:12;7632:53;7703:1;7694:10;;7713:238;7727:2;7724:1;7721:9;7713:238;;;7798:3;7785:17;7772:30;;7815:31;7840:5;7815:31;:::i;:::-;7859:18;;;7745:1;7738:9;;;;;7897:12;;;;7929;;7713:238;;;-1:-1:-1;7970:5:1;-1:-1:-1;7994:35:1;;-1:-1:-1;8010:18:1;;;7994:35;:::i;:::-;7984:45;;;;;;6933:1102;;;;;:::o;8040:437::-;8126:6;8134;8187:2;8175:9;8166:7;8162:23;8158:32;8155:52;;;8203:1;8200;8193:12;8155:52;8243:9;8230:23;-1:-1:-1;;;;;8268:6:1;8265:30;8262:50;;;8308:1;8305;8298:12;8262:50;8347:70;8409:7;8400:6;8389:9;8385:22;8347:70;:::i;:::-;8436:8;;8321:96;;-1:-1:-1;8040:437:1;-1:-1:-1;;;;8040:437:1:o;8482:505::-;8577:6;8585;8593;8646:2;8634:9;8625:7;8621:23;8617:32;8614:52;;;8662:1;8659;8652:12;8614:52;8702:9;8689:23;-1:-1:-1;;;;;8727:6:1;8724:30;8721:50;;;8767:1;8764;8757:12;8721:50;8806:70;8868:7;8859:6;8848:9;8844:22;8806:70;:::i;:::-;8895:8;;8780:96;;-1:-1:-1;8977:2:1;8962:18;;;;8949:32;;8482:505;-1:-1:-1;;;;8482:505:1:o;8992:180::-;9048:6;9101:2;9089:9;9080:7;9076:23;9072:32;9069:52;;;9117:1;9114;9107:12;9069:52;9140:26;9156:9;9140:26;:::i;9177:180::-;9236:6;9289:2;9277:9;9268:7;9264:23;9260:32;9257:52;;;9305:1;9302;9295:12;9257:52;-1:-1:-1;9328:23:1;;9177:180;-1:-1:-1;9177:180:1:o;9362:245::-;9420:6;9473:2;9461:9;9452:7;9448:23;9444:32;9441:52;;;9489:1;9486;9479:12;9441:52;9528:9;9515:23;9547:30;9571:5;9547:30;:::i;9612:249::-;9681:6;9734:2;9722:9;9713:7;9709:23;9705:32;9702:52;;;9750:1;9747;9740:12;9702:52;9782:9;9776:16;9801:30;9825:5;9801:30;:::i;9866:280::-;9965:6;10018:2;10006:9;9997:7;9993:23;9989:32;9986:52;;;10034:1;10031;10024:12;9986:52;10066:9;10060:16;10085:31;10110:5;10085:31;:::i;10151:450::-;10220:6;10273:2;10261:9;10252:7;10248:23;10244:32;10241:52;;;10289:1;10286;10279:12;10241:52;10329:9;10316:23;-1:-1:-1;;;;;10354:6:1;10351:30;10348:50;;;10394:1;10391;10384:12;10348:50;10417:22;;10470:4;10462:13;;10458:27;-1:-1:-1;10448:55:1;;10499:1;10496;10489:12;10448:55;10522:73;10587:7;10582:2;10569:16;10564:2;10560;10556:11;10522:73;:::i;10791:573::-;10895:6;10903;10911;10919;10972:2;10960:9;10951:7;10947:23;10943:32;10940:52;;;10988:1;10985;10978:12;10940:52;11024:9;11011:23;11001:33;;11085:2;11074:9;11070:18;11057:32;-1:-1:-1;;;;;11104:6:1;11101:30;11098:50;;;11144:1;11141;11134:12;11369:257;11410:3;11448:5;11442:12;11475:6;11470:3;11463:19;11491:63;11547:6;11540:4;11535:3;11531:14;11524:4;11517:5;11513:16;11491:63;:::i;:::-;11608:2;11587:15;-1:-1:-1;;11583:29:1;11574:39;;;;11615:4;11570:50;;11369:257;-1:-1:-1;;11369:257:1:o;12164:664::-;12391:3;12429:6;12423:13;12445:53;12491:6;12486:3;12479:4;12471:6;12467:17;12445:53;:::i;:::-;12561:13;;12520:16;;;;12583:57;12561:13;12520:16;12617:4;12605:17;;12583:57;:::i;:::-;12707:13;;12662:20;;;12729:57;12707:13;12662:20;12763:4;12751:17;;12729:57;:::i;:::-;12802:20;;12164:664;-1:-1:-1;;;;;12164:664:1:o;13251:488::-;-1:-1:-1;;;;;13520:15:1;;;13502:34;;13572:15;;13567:2;13552:18;;13545:43;13619:2;13604:18;;13597:34;;;13667:3;13662:2;13647:18;;13640:31;;;13445:4;;13688:45;;13713:19;;13705:6;13688:45;:::i;:::-;13680:53;13251:488;-1:-1:-1;;;;;;13251:488:1:o;13744:632::-;13915:2;13967:21;;;14037:13;;13940:18;;;14059:22;;;13886:4;;13915:2;14138:15;;;;14112:2;14097:18;;;13886:4;14181:169;14195:6;14192:1;14189:13;14181:169;;;14256:13;;14244:26;;14325:15;;;;14290:12;;;;14217:1;14210:9;14181:169;;;-1:-1:-1;14367:3:1;;13744:632;-1:-1:-1;;;;;;13744:632:1:o;14755:219::-;14904:2;14893:9;14886:21;14867:4;14924:44;14964:2;14953:9;14949:18;14941:6;14924:44;:::i;14979:339::-;15181:2;15163:21;;;15220:2;15200:18;;;15193:30;-1:-1:-1;;;15254:2:1;15239:18;;15232:45;15309:2;15294:18;;14979:339::o;15670:414::-;15872:2;15854:21;;;15911:2;15891:18;;;15884:30;15950:34;15945:2;15930:18;;15923:62;-1:-1:-1;;;16016:2:1;16001:18;;15994:48;16074:3;16059:19;;15670:414::o;21438:346::-;21640:2;21622:21;;;21679:2;21659:18;;;21652:30;-1:-1:-1;;;21713:2:1;21698:18;;21691:52;21775:2;21760:18;;21438:346::o;23310:356::-;23512:2;23494:21;;;23531:18;;;23524:30;23590:34;23585:2;23570:18;;23563:62;23657:2;23642:18;;23310:356::o;23671:345::-;23873:2;23855:21;;;23912:2;23892:18;;;23885:30;-1:-1:-1;;;23946:2:1;23931:18;;23924:51;24007:2;23992:18;;23671:345::o;25252:341::-;25454:2;25436:21;;;25493:2;25473:18;;;25466:30;-1:-1:-1;;;25527:2:1;25512:18;;25505:47;25584:2;25569:18;;25252:341::o;26347:413::-;26549:2;26531:21;;;26588:2;26568:18;;;26561:30;26627:34;26622:2;26607:18;;26600:62;-1:-1:-1;;;26693:2:1;26678:18;;26671:47;26750:3;26735:19;;26347:413::o;28980:351::-;29182:2;29164:21;;;29221:2;29201:18;;;29194:30;29260:29;29255:2;29240:18;;29233:57;29322:2;29307:18;;28980:351::o;29518:275::-;29589:2;29583:9;29654:2;29635:13;;-1:-1:-1;;29631:27:1;29619:40;;-1:-1:-1;;;;;29674:34:1;;29710:22;;;29671:62;29668:88;;;29736:18;;:::i;:::-;29772:2;29765:22;29518:275;;-1:-1:-1;29518:275:1:o;29798:128::-;29838:3;29869:1;29865:6;29862:1;29859:13;29856:39;;;29875:18;;:::i;:::-;-1:-1:-1;29911:9:1;;29798:128::o;29931:120::-;29971:1;29997;29987:35;;30002:18;;:::i;:::-;-1:-1:-1;30036:9:1;;29931:120::o;30056:168::-;30096:7;30162:1;30158;30154:6;30150:14;30147:1;30144:21;30139:1;30132:9;30125:17;30121:45;30118:71;;;30169:18;;:::i;:::-;-1:-1:-1;30209:9:1;;30056:168::o;30229:125::-;30269:4;30297:1;30294;30291:8;30288:34;;;30302:18;;:::i;:::-;-1:-1:-1;30339:9:1;;30229:125::o;30359:258::-;30431:1;30441:113;30455:6;30452:1;30449:13;30441:113;;;30531:11;;;30525:18;30512:11;;;30505:39;30477:2;30470:10;30441:113;;;30572:6;30569:1;30566:13;30563:48;;;-1:-1:-1;;30607:1:1;30589:16;;30582:27;30359:258::o;30622:380::-;30701:1;30697:12;;;;30744;;;30765:61;;30819:4;30811:6;30807:17;30797:27;;30765:61;30872:2;30864:6;30861:14;30841:18;30838:38;30835:161;;;30918:10;30913:3;30909:20;30906:1;30899:31;30953:4;30950:1;30943:15;30981:4;30978:1;30971:15;30835:161;;30622:380;;;:::o;31007:135::-;31046:3;-1:-1:-1;;31067:17:1;;31064:43;;;31087:18;;:::i;:::-;-1:-1:-1;31134:1:1;31123:13;;31007:135::o;31147:112::-;31179:1;31205;31195:35;;31210:18;;:::i;:::-;-1:-1:-1;31244:9:1;;31147:112::o;31264:127::-;31325:10;31320:3;31316:20;31313:1;31306:31;31356:4;31353:1;31346:15;31380:4;31377:1;31370:15;31396:127;31457:10;31452:3;31448:20;31445:1;31438:31;31488:4;31485:1;31478:15;31512:4;31509:1;31502:15;31528:127;31589:10;31584:3;31580:20;31577:1;31570:31;31620:4;31617:1;31610:15;31644:4;31641:1;31634:15;31660:127;31721:10;31716:3;31712:20;31709:1;31702:31;31752:4;31749:1;31742:15;31776:4;31773:1;31766:15;31792:131;-1:-1:-1;;;;;31867:31:1;;31857:42;;31847:70;;31913:1;31910;31903:12;31928:131;-1:-1:-1;;;;;;32002:32:1;;31992:43;;31982:71;;32049:1;32046;32039:12
Swarm Source
ipfs://fe64516c71110f4e8de4b90600ee5c964750da413df416afde58beabd118acce
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.