ERC-721
NFT
Overview
Max Total Supply
5,000 CRYPTOBILIA
Holders
1,211
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Filtered by Token Holder
Crazy Panther Art Collabs: DeployerBalance
130 CRYPTOBILIALoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
CRYPTOBILIA
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-08-17 */ pragma solidity ^0.8.0; // SPDX-License-Identifier: MIT abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _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); } } library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } 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); } 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; } interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } 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); } 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); } library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } abstract contract ERC721P is Context, ERC165, IERC721, IERC721Metadata { using Address for address; string private _name; string private _symbol; address[] internal _owners; mapping(uint256 => address) private _tokenApprovals; mapping(address => mapping(address => bool)) private _operatorApprovals; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); uint count = 0; uint length = _owners.length; for( uint i = 0; i < length; ++i ){ if( owner == _owners[i] ){ ++count; } } delete length; return count; } 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; } function name() public view virtual override returns (string memory) { return _name; } function symbol() public view virtual override returns (string memory) { return _symbol; } function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721P.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); } function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } 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); } function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } 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); } function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } 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); } 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"); } function _exists(uint256 tokenId) internal view virtual returns (bool) { return tokenId < _owners.length && _owners[tokenId] != address(0); } function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721P.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } 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" ); } function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _owners.push(to); emit Transfer(address(0), to, tokenId); } function _burn(uint256 tokenId) internal virtual { address owner = ERC721P.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _owners[tokenId] = address(0); emit Transfer(owner, address(0), tokenId); } function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721P.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _owners[tokenId] = to; emit Transfer(from, to, tokenId); } function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721P.ownerOf(tokenId), to, tokenId); } 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; } } function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } abstract contract ERC721Enum is ERC721P, IERC721Enumerable { function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721P) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } function tokenOfOwnerByIndex(address owner, uint256 index) public view override returns (uint256 tokenId) { require(index < ERC721P.balanceOf(owner), "ERC721Enum: owner ioob"); uint count; for( uint i; i < _owners.length; ++i ){ if( owner == _owners[i] ){ if( count == index ) return i; else ++count; } } require(false, "ERC721Enum: owner ioob"); } function tokensOfOwner(address owner) public view returns (uint256[] memory) { require(0 < ERC721P.balanceOf(owner), "ERC721Enum: owner ioob"); uint256 tokenCount = balanceOf(owner); uint256[] memory tokenIds = new uint256[](tokenCount); for (uint256 i = 0; i < tokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(owner, i); } return tokenIds; } function totalSupply() public view virtual override returns (uint256) { return _owners.length; } function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enum.totalSupply(), "ERC721Enum: global ioob"); return index; } } 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) { 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 = keccak256(abi.encodePacked(computedHash, proofElement)); } else { // Hash(current element of the proof + current computed hash) computedHash = keccak256(abi.encodePacked(proofElement, computedHash)); } } // Check if the computed hash (root) is equal to the provided root return computedHash == root; } } contract CRYPTOBILIA is ERC721Enum, Ownable, ReentrancyGuard { using Strings for uint256; uint256 public SALE_NFT = 4780; uint256 public GIVEAWAY_NFT = 220; uint256 public MAX_MINT_PRESALE = 4780; uint256 public MAX_MINT_SALE = 4780; uint256 public MAX_BY_MINT_IN_TRANSACTION_PRESALE = 3; uint256 public MAX_BY_MINT_IN_TRANSACTION_SALE = 10; uint256 public PRESALE_PRICE = 0.1 ether; uint256 public SALE_PRICE = 0.14 ether; uint256 public SALE_MINTED; uint256 public GIVEAWAY_MINTED; bool public presaleEnable = false; bool public saleEnable = false; string private baseURI; bytes32 public merkleRoot; struct User { uint256 presalemint; uint256 salemint; } mapping (address => User) public users; constructor() ERC721P('CRYPTOBILIA', 'CRYPTOBILIA') {} function _baseURI() internal view virtual returns (string memory) { return baseURI; } function mintGiveawayNFT(address[] calldata _to, uint256[] calldata _count) external onlyOwner nonReentrant{ require(_to.length == _count.length,"Mismatch between Address and count"); for(uint i=0; i < _to.length; i++){ uint256 totalSupply = totalSupply(); require( GIVEAWAY_MINTED + _count[i] <= GIVEAWAY_NFT, "Max limit" ); for (uint256 j = 0; j < _count[i]; j++) { _safeMint(_to[i], totalSupply + j); GIVEAWAY_MINTED++; } } } function mintPreSaleNFT(uint256 _count, bytes32[] calldata merkleProof) public payable nonReentrant{ bytes32 node = keccak256(abi.encodePacked(msg.sender)); uint256 totalSupply = totalSupply(); require( presaleEnable, "Pre-sale is not enable" ); require( SALE_MINTED + _count <= SALE_NFT, "Exceeds max limit" ); require( MerkleProof.verify(merkleProof, merkleRoot, node), "MerkleDistributor: Invalid proof." ); require( users[msg.sender].presalemint + _count <= MAX_MINT_PRESALE, "Exceeds max mint limit per wallet" ); require( _count <= MAX_BY_MINT_IN_TRANSACTION_PRESALE, "Exceeds max mint limit per txn" ); require( msg.value >= PRESALE_PRICE * _count, "Value below price" ); for (uint256 i = 0; i < _count; i++) { _safeMint(msg.sender, totalSupply + i); SALE_MINTED++; } users[msg.sender].presalemint = users[msg.sender].presalemint + _count; } function mintSaleNFT(uint256 _count) public payable nonReentrant{ uint256 totalSupply = totalSupply(); require( saleEnable, "Sale is not enable" ); require( SALE_MINTED + _count <= SALE_NFT, "Exceeds max limit" ); require( users[msg.sender].salemint + _count <= MAX_MINT_SALE, "Exceeds max mint limit per wallet" ); require( _count <= MAX_BY_MINT_IN_TRANSACTION_SALE, "Exceeds max mint limit per txn" ); require( msg.value >= SALE_PRICE * _count, "Value below price" ); for (uint256 i = 0; i < _count; i++) { _safeMint(msg.sender, totalSupply + i); SALE_MINTED++; } users[msg.sender].salemint = users[msg.sender].salemint + _count; } function tokenURI(uint256 _tokenId) external view virtual override returns (string memory) { require(_exists(_tokenId), "ERC721Metadata: Nonexistent token"); string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, _tokenId.toString(), ".json")) : ""; } function transferFrom(address _from, address _to, uint256 _tokenId) public override { ERC721P.transferFrom(_from, _to, _tokenId); } function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes memory _data) public override { ERC721P.safeTransferFrom(_from, _to, _tokenId, _data); } function withdraw() public onlyOwner { uint256 balance = address(this).balance; payable(msg.sender).transfer(balance); } function setBaseURI(string memory newBaseURI) public onlyOwner { baseURI = newBaseURI; } function updateSalePrice(uint256 newPrice) external onlyOwner { SALE_PRICE = newPrice; } function updatePreSalePrice(uint256 newPrice) external onlyOwner { PRESALE_PRICE = newPrice; } function setSaleStatus(bool status) public onlyOwner { require(saleEnable != status); saleEnable = status; } function setPreSaleStatus(bool status) public onlyOwner { require(presaleEnable != status); presaleEnable = status; } function updateSaleMintLimit(uint256 newLimit) external onlyOwner { require(SALE_NFT >= newLimit, "Incorrect value"); MAX_MINT_SALE = newLimit; } function updatePreSaleMintLimit(uint256 newLimit) external onlyOwner { require(SALE_NFT >= newLimit, "Incorrect value"); MAX_MINT_PRESALE = newLimit; } function updateSaleSupply(uint256 newSupply) external onlyOwner { require(newSupply >= SALE_MINTED, "Incorrect value"); SALE_NFT = newSupply; } function updateGiveawaySupply(uint256 newSupply) external onlyOwner { require(newSupply >= GIVEAWAY_MINTED, "Incorrect value"); GIVEAWAY_NFT = newSupply; } function updateMintLimitPerTransactionPreSale(uint256 newLimit) external onlyOwner { require(SALE_NFT >= newLimit, "Incorrect value"); MAX_BY_MINT_IN_TRANSACTION_PRESALE = newLimit; } function updateMintLimitPerTransactionSale(uint256 newLimit) external onlyOwner { require(SALE_NFT >= newLimit, "Incorrect value"); MAX_BY_MINT_IN_TRANSACTION_SALE = newLimit; } function updateMerkleRoot(bytes32 newRoot) external onlyOwner { merkleRoot = newRoot; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"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":[],"name":"GIVEAWAY_MINTED","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GIVEAWAY_NFT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_BY_MINT_IN_TRANSACTION_PRESALE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_BY_MINT_IN_TRANSACTION_SALE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_MINT_PRESALE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_MINT_SALE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRESALE_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SALE_MINTED","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SALE_NFT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SALE_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_to","type":"address[]"},{"internalType":"uint256[]","name":"_count","type":"uint256[]"}],"name":"mintGiveawayNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"},{"internalType":"bytes32[]","name":"merkleProof","type":"bytes32[]"}],"name":"mintPreSaleNFT","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"mintSaleNFT","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleEnable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"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":[],"name":"saleEnable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"bool","name":"status","type":"bool"}],"name":"setPreSaleStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"setSaleStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newSupply","type":"uint256"}],"name":"updateGiveawaySupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"newRoot","type":"bytes32"}],"name":"updateMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"updateMintLimitPerTransactionPreSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"updateMintLimitPerTransactionSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"updatePreSaleMintLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"updatePreSalePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"updateSaleMintLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"updateSalePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newSupply","type":"uint256"}],"name":"updateSaleSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"users","outputs":[{"internalType":"uint256","name":"presalemint","type":"uint256"},{"internalType":"uint256","name":"salemint","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526112ac600781905560dc6008556009819055600a9081556003600b55600c5567016345785d8a0000600d556701f161421c8e0000600e556011805461ffff191690553480156200005357600080fd5b50604080518082018252600b8082526a43525950544f42494c494160a81b6020808401828152855180870190965292855284015281519192916200009a916000916200012e565b508051620000b09060019060208401906200012e565b505050620000cd620000c7620000d860201b60201c565b620000dc565b600160065562000211565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200013c90620001d4565b90600052602060002090601f016020900481019282620001605760008555620001ab565b82601f106200017b57805160ff1916838001178555620001ab565b82800160010185558215620001ab579182015b82811115620001ab5782518255916020019190600101906200018e565b50620001b9929150620001bd565b5090565b5b80821115620001b95760008155600101620001be565b600281046001821680620001e957607f821691505b602082108114156200020b57634e487b7160e01b600052602260045260246000fd5b50919050565b612fc480620002216000396000f3fe6080604052600436106102c95760003560e01c80637ec0912e11610175578063ac0419fd116100dc578063d897833e11610095578063f176baaa1161006f578063f176baaa14610808578063f2fde38b14610828578063f439733514610848578063fe4ca84714610868576102c9565b8063d897833e146107a8578063e0d10618146107c8578063e985e9c5146107e8576102c9565b8063ac0419fd146106fe578063ae5cc1721461071e578063b88d4fde14610733578063c87b56dd14610753578063ccfb63a414610773578063ce22483c14610788576102c9565b8063945242c61161012e578063945242c61461066057806395d89b4114610673578063995b8ef614610688578063a22cb4651461069d578063a87430ba146106bd578063a9526862146106eb576102c9565b80637ec0912e146105b45780637ec18cf6146105d45780637f205a74146105e95780638462151c146105fe5780638da5cb5b1461062b578063941e79fc14610640576102c9565b80634783f0ef1161023457806362dc6e21116101ed57806370a08231116101c757806370a0823114610555578063711cc2ae14610575578063715018a61461058a5780637e95eac41461059f576102c9565b806362dc6e21146105005780636352211e1461051557806365fccb5214610535576102c9565b80634783f0ef14610456578063497865b3146104765780634d7cea161461048b5780634f6ccce7146104a057806355f804b3146104c05780635e326b92146104e0576102c9565b806323b872dd1161028657806323b872dd146103ac5780632eb4a7ab146103cc5780632f745c59146103e1578063379665bd146104015780633ccfd60b1461042157806342842e0e14610436576102c9565b806301ffc9a7146102ce57806306fdde0314610304578063081812fc14610326578063095ea7b3146103535780630990e5341461037557806318160ddd14610397575b600080fd5b3480156102da57600080fd5b506102ee6102e9366004612535565b61087d565b6040516102fb9190612728565b60405180910390f35b34801561031057600080fd5b506103196108aa565b6040516102fb919061273c565b34801561033257600080fd5b5061034661034136600461251d565b61093c565b6040516102fb9190612693565b34801561035f57600080fd5b5061037361036e366004612471565b610988565b005b34801561038157600080fd5b5061038a610a20565b6040516102fb9190612733565b3480156103a357600080fd5b5061038a610a26565b3480156103b857600080fd5b506103736103c7366004612394565b610a2c565b3480156103d857600080fd5b5061038a610a37565b3480156103ed57600080fd5b5061038a6103fc366004612471565b610a3d565b34801561040d57600080fd5b5061037361041c36600461251d565b610b00565b34801561042d57600080fd5b50610373610b66565b34801561044257600080fd5b50610373610451366004612394565b610bd8565b34801561046257600080fd5b5061037361047136600461251d565b610bf3565b34801561048257600080fd5b5061038a610c37565b34801561049757600080fd5b5061038a610c3d565b3480156104ac57600080fd5b5061038a6104bb36600461251d565b610c43565b3480156104cc57600080fd5b506103736104db36600461256d565b610c6f565b3480156104ec57600080fd5b506103736104fb366004612503565b610cc1565b34801561050c57600080fd5b5061038a610d29565b34801561052157600080fd5b5061034661053036600461251d565b610d2f565b34801561054157600080fd5b5061037361055036600461251d565b610d87565b34801561056157600080fd5b5061038a610570366004612348565b610dcb565b34801561058157600080fd5b5061038a610e68565b34801561059657600080fd5b50610373610e6e565b3480156105ab57600080fd5b5061038a610eb9565b3480156105c057600080fd5b506103736105cf36600461251d565b610ebf565b3480156105e057600080fd5b506102ee610f03565b3480156105f557600080fd5b5061038a610f0c565b34801561060a57600080fd5b5061061e610619366004612348565b610f12565b6040516102fb91906126e4565b34801561063757600080fd5b50610346610ff8565b34801561064c57600080fd5b5061037361065b36600461251d565b611007565b61037361066e3660046125b3565b61106d565b34801561067f57600080fd5b50610319611285565b34801561069457600080fd5b5061038a611294565b3480156106a957600080fd5b506103736106b8366004612448565b61129a565b3480156106c957600080fd5b506106dd6106d8366004612348565b611368565b6040516102fb929190612646565b6103736106f936600461251d565b611381565b34801561070a57600080fd5b5061037361071936600461251d565b611519565b34801561072a57600080fd5b5061038a61157f565b34801561073f57600080fd5b5061037361074e3660046123cf565b611585565b34801561075f57600080fd5b5061031961076e36600461251d565b611597565b34801561077f57600080fd5b5061038a61161a565b34801561079457600080fd5b506103736107a336600461251d565b611620565b3480156107b457600080fd5b506103736107c3366004612503565b611686565b3480156107d457600080fd5b506103736107e336600461249a565b6116fb565b3480156107f457600080fd5b506102ee610803366004612362565b6118a9565b34801561081457600080fd5b5061037361082336600461251d565b6118d7565b34801561083457600080fd5b50610373610843366004612348565b61193d565b34801561085457600080fd5b5061037361086336600461251d565b6119ae565b34801561087457600080fd5b506102ee611a14565b60006001600160e01b0319821663780e9d6360e01b14806108a257506108a282611a22565b90505b919050565b6060600080546108b990612ecc565b80601f01602080910402602001604051908101604052809291908181526020018280546108e590612ecc565b80156109325780601f1061090757610100808354040283529160200191610932565b820191906000526020600020905b81548152906001019060200180831161091557829003601f168201915b5050505050905090565b600061094782611a62565b61096c5760405162461bcd60e51b815260040161096390612baf565b60405180910390fd5b506000908152600360205260409020546001600160a01b031690565b600061099382610d2f565b9050806001600160a01b0316836001600160a01b031614156109c75760405162461bcd60e51b815260040161096390612d34565b806001600160a01b03166109d9611aba565b6001600160a01b031614806109f557506109f581610803611aba565b610a115760405162461bcd60e51b815260040161096390612a1d565b610a1b8383611abe565b505050565b600f5481565b60025490565b610a1b838383611b2c565b60135481565b6000610a4883610dcb565b8210610a665760405162461bcd60e51b815260040161096390612ccd565b6000805b600254811015610ae15760028181548110610a9557634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0386811691161415610ad15783821415610ac5579150610afa9050565b610ace82612f07565b91505b610ada81612f07565b9050610a6a565b5060405162461bcd60e51b815260040161096390612ccd565b92915050565b610b08611aba565b6001600160a01b0316610b19610ff8565b6001600160a01b031614610b3f5760405162461bcd60e51b815260040161096390612c24565b601054811015610b615760405162461bcd60e51b815260040161096390612bfb565b600855565b610b6e611aba565b6001600160a01b0316610b7f610ff8565b6001600160a01b031614610ba55760405162461bcd60e51b815260040161096390612c24565b6040514790339082156108fc029083906000818181858888f19350505050158015610bd4573d6000803e3d6000fd5b5050565b610a1b83838360405180602001604052806000815250611585565b610bfb611aba565b6001600160a01b0316610c0c610ff8565b6001600160a01b031614610c325760405162461bcd60e51b815260040161096390612c24565b601355565b60085481565b60105481565b6000610c4d610a26565b8210610c6b5760405162461bcd60e51b815260040161096390612cfd565b5090565b610c77611aba565b6001600160a01b0316610c88610ff8565b6001600160a01b031614610cae5760405162461bcd60e51b815260040161096390612c24565b8051610bd49060129060208401906121d8565b610cc9611aba565b6001600160a01b0316610cda610ff8565b6001600160a01b031614610d005760405162461bcd60e51b815260040161096390612c24565b60115460ff1615158115151415610d1657600080fd5b6011805460ff1916911515919091179055565b600d5481565b60008060028381548110610d5357634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03169050806108a25760405162461bcd60e51b815260040161096390612ac4565b610d8f611aba565b6001600160a01b0316610da0610ff8565b6001600160a01b031614610dc65760405162461bcd60e51b815260040161096390612c24565b600d55565b60006001600160a01b038216610df35760405162461bcd60e51b815260040161096390612a7a565b600254600090815b81811015610e5f5760028181548110610e2457634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0386811691161415610e4f57610e4c83612f07565b92505b610e5881612f07565b9050610dfb565b50909392505050565b600c5481565b610e76611aba565b6001600160a01b0316610e87610ff8565b6001600160a01b031614610ead5760405162461bcd60e51b815260040161096390612c24565b610eb76000611b64565b565b60095481565b610ec7611aba565b6001600160a01b0316610ed8610ff8565b6001600160a01b031614610efe5760405162461bcd60e51b815260040161096390612c24565b600e55565b60115460ff1681565b600e5481565b6060610f1d82610dcb565b600010610f3c5760405162461bcd60e51b815260040161096390612ccd565b6000610f4783610dcb565b905060008167ffffffffffffffff811115610f7257634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610f9b578160200160208202803683370190505b50905060005b82811015610ff057610fb38582610a3d565b828281518110610fd357634e487b7160e01b600052603260045260246000fd5b602090810291909101015280610fe881612f07565b915050610fa1565b509392505050565b6005546001600160a01b031690565b61100f611aba565b6001600160a01b0316611020610ff8565b6001600160a01b0316146110465760405162461bcd60e51b815260040161096390612c24565b8060075410156110685760405162461bcd60e51b815260040161096390612bfb565b600955565b600260065414156110905760405162461bcd60e51b815260040161096390612e07565b60026006556040516000906110a9903390602001612629565b60405160208183030381529060405280519060200120905060006110cb610a26565b60115490915060ff166110f05760405162461bcd60e51b8152600401610963906129ac565b60075485600f546111019190612e3e565b111561111f5760405162461bcd60e51b815260040161096390612b0d565b611160848480806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506013549150859050611bb6565b61117c5760405162461bcd60e51b8152600401610963906129dc565b6009543360009081526014602052604090205461119a908790612e3e565b11156111b85760405162461bcd60e51b815260040161096390612dc6565b600b548511156111da5760405162461bcd60e51b8152600401610963906128da565b84600d546111e89190612e6a565b3410156112075760405162461bcd60e51b815260040161096390612ca2565b60005b8581101561124d57611225336112208385612e3e565b611c71565b600f805490600061123583612f07565b9190505550808061124590612f07565b91505061120a565b5033600090815260146020526040902054611269908690612e3e565b3360009081526014602052604090205550506001600655505050565b6060600180546108b990612ecc565b60075481565b6112a2611aba565b6001600160a01b0316826001600160a01b031614156112d35760405162461bcd60e51b8152600401610963906128a3565b80600460006112e0611aba565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff191692151592909217909155611324611aba565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161135c9190612728565b60405180910390a35050565b6014602052600090815260409020805460019091015482565b600260065414156113a45760405162461bcd60e51b815260040161096390612e07565b600260065560006113b3610a26565b601154909150610100900460ff166113dd5760405162461bcd60e51b815260040161096390612934565b60075482600f546113ee9190612e3e565b111561140c5760405162461bcd60e51b815260040161096390612b0d565b600a543360009081526014602052604090206001015461142d908490612e3e565b111561144b5760405162461bcd60e51b815260040161096390612dc6565b600c5482111561146d5760405162461bcd60e51b8152600401610963906128da565b81600e5461147b9190612e6a565b34101561149a5760405162461bcd60e51b815260040161096390612ca2565b60005b828110156114db576114b3336112208385612e3e565b600f80549060006114c383612f07565b919050555080806114d390612f07565b91505061149d565b50336000908152601460205260409020600101546114fa908390612e3e565b3360009081526014602052604090206001908101919091556006555050565b611521611aba565b6001600160a01b0316611532610ff8565b6001600160a01b0316146115585760405162461bcd60e51b815260040161096390612c24565b80600754101561157a5760405162461bcd60e51b815260040161096390612bfb565b600b55565b600a5481565b61159184848484611c8b565b50505050565b60606115a282611a62565b6115be5760405162461bcd60e51b81526004016109639061274f565b60006115c8611cc4565b905060008151116115e85760405180602001604052806000815250611613565b806115f284611cd3565b604051602001611603929190612654565b6040516020818303038152906040525b9392505050565b600b5481565b611628611aba565b6001600160a01b0316611639610ff8565b6001600160a01b03161461165f5760405162461bcd60e51b815260040161096390612c24565b8060075410156116815760405162461bcd60e51b815260040161096390612bfb565b600c55565b61168e611aba565b6001600160a01b031661169f610ff8565b6001600160a01b0316146116c55760405162461bcd60e51b815260040161096390612c24565b60115460ff61010090910416151581151514156116e157600080fd5b601180549115156101000261ff0019909216919091179055565b611703611aba565b6001600160a01b0316611714610ff8565b6001600160a01b03161461173a5760405162461bcd60e51b815260040161096390612c24565b6002600654141561175d5760405162461bcd60e51b815260040161096390612e07565b60026006558281146117815760405162461bcd60e51b815260040161096390612b38565b60005b8381101561189d576000611796610a26565b90506008548484848181106117bb57634e487b7160e01b600052603260045260246000fd5b905060200201356010546117cf9190612e3e565b11156117ed5760405162461bcd60e51b815260040161096390612911565b60005b84848481811061181057634e487b7160e01b600052603260045260246000fd5b905060200201358110156118885761186087878581811061184157634e487b7160e01b600052603260045260246000fd5b90506020020160208101906118569190612348565b6112208385612e3e565b6010805490600061187083612f07565b9190505550808061188090612f07565b9150506117f0565b5050808061189590612f07565b915050611784565b50506001600655505050565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205460ff1690565b6118df611aba565b6001600160a01b03166118f0610ff8565b6001600160a01b0316146119165760405162461bcd60e51b815260040161096390612c24565b8060075410156119385760405162461bcd60e51b815260040161096390612bfb565b600a55565b611945611aba565b6001600160a01b0316611956610ff8565b6001600160a01b03161461197c5760405162461bcd60e51b815260040161096390612c24565b6001600160a01b0381166119a25760405162461bcd60e51b8152600401610963906127e2565b6119ab81611b64565b50565b6119b6611aba565b6001600160a01b03166119c7610ff8565b6001600160a01b0316146119ed5760405162461bcd60e51b815260040161096390612c24565b600f54811015611a0f5760405162461bcd60e51b815260040161096390612bfb565b600755565b601154610100900460ff1681565b60006001600160e01b031982166380ac58cd60e01b1480611a5357506001600160e01b03198216635b5e139f60e01b145b806108a257506108a282611df6565b600254600090821080156108a2575060006001600160a01b031660028381548110611a9d57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0316141592915050565b3390565b600081815260036020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611af382610d2f565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b611b3d611b37611aba565b82611e0f565b611b595760405162461bcd60e51b815260040161096390612d75565b610a1b838383611e8c565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600081815b8551811015611c66576000868281518110611be657634e487b7160e01b600052603260045260246000fd5b60200260200101519050808311611c27578281604051602001611c0a929190612646565b604051602081830303815290604052805190602001209250611c53565b8083604051602001611c3a929190612646565b6040516020818303038152906040528051906020012092505b5080611c5e81612f07565b915050611bbb565b509092149392505050565b610bd4828260405180602001604052806000815250611f7d565b611c9c611c96611aba565b83611e0f565b611cb85760405162461bcd60e51b815260040161096390612d75565b61159184848484611fb0565b6060601280546108b990612ecc565b606081611cf857506040805180820190915260018152600360fc1b60208201526108a5565b8160005b8115611d225780611d0c81612f07565b9150611d1b9050600a83612e56565b9150611cfc565b60008167ffffffffffffffff811115611d4b57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611d75576020820181803683370190505b5090505b8415611dee57611d8a600183612e89565b9150611d97600a86612f22565b611da2906030612e3e565b60f81b818381518110611dc557634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350611de7600a86612e56565b9450611d79565b949350505050565b6001600160e01b031981166301ffc9a760e01b14919050565b6000611e1a82611a62565b611e365760405162461bcd60e51b815260040161096390612960565b6000611e4183610d2f565b9050806001600160a01b0316846001600160a01b03161480611e7c5750836001600160a01b0316611e718461093c565b6001600160a01b0316145b80611dee5750611dee81856118a9565b826001600160a01b0316611e9f82610d2f565b6001600160a01b031614611ec55760405162461bcd60e51b815260040161096390612c59565b6001600160a01b038216611eeb5760405162461bcd60e51b81526004016109639061285f565b611ef6838383610a1b565b611f01600082611abe565b8160028281548110611f2357634e487b7160e01b600052603260045260246000fd5b6000918252602082200180546001600160a01b0319166001600160a01b03938416179055604051839285811692908716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9190a4505050565b611f878383611fe3565b611f9460008484846120b7565b610a1b5760405162461bcd60e51b815260040161096390612790565b611fbb848484611e8c565b611fc7848484846120b7565b6115915760405162461bcd60e51b815260040161096390612790565b6001600160a01b0382166120095760405162461bcd60e51b815260040161096390612b7a565b61201281611a62565b1561202f5760405162461bcd60e51b815260040161096390612828565b61203b60008383610a1b565b6002805460018101825560009182527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319166001600160a01b0385169081179091556040518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006120cb846001600160a01b03166121d2565b156121c757836001600160a01b031663150b7a026120e7611aba565b8786866040518563ffffffff1660e01b815260040161210994939291906126a7565b602060405180830381600087803b15801561212357600080fd5b505af1925050508015612153575060408051601f3d908101601f1916820190925261215091810190612551565b60015b6121ad573d808015612181576040519150601f19603f3d011682016040523d82523d6000602084013e612186565b606091505b5080516121a55760405162461bcd60e51b815260040161096390612790565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611dee565b506001949350505050565b3b151590565b8280546121e490612ecc565b90600052602060002090601f016020900481019282612206576000855561224c565b82601f1061221f57805160ff191683800117855561224c565b8280016001018555821561224c579182015b8281111561224c578251825591602001919060010190612231565b50610c6b9291505b80821115610c6b5760008155600101612254565b600067ffffffffffffffff8084111561228357612283612f62565b604051601f8501601f1916810160200182811182821017156122a7576122a7612f62565b6040528481529150818385018610156122bf57600080fd5b8484602083013760006020868301015250509392505050565b80356001600160a01b03811681146108a557600080fd5b60008083601f840112612300578081fd5b50813567ffffffffffffffff811115612317578182fd5b602083019150836020808302850101111561233157600080fd5b9250929050565b803580151581146108a557600080fd5b600060208284031215612359578081fd5b611613826122d8565b60008060408385031215612374578081fd5b61237d836122d8565b915061238b602084016122d8565b90509250929050565b6000806000606084860312156123a8578081fd5b6123b1846122d8565b92506123bf602085016122d8565b9150604084013590509250925092565b600080600080608085870312156123e4578081fd5b6123ed856122d8565b93506123fb602086016122d8565b925060408501359150606085013567ffffffffffffffff81111561241d578182fd5b8501601f8101871361242d578182fd5b61243c87823560208401612268565b91505092959194509250565b6000806040838503121561245a578182fd5b612463836122d8565b915061238b60208401612338565b60008060408385031215612483578182fd5b61248c836122d8565b946020939093013593505050565b600080600080604085870312156124af578384fd5b843567ffffffffffffffff808211156124c6578586fd5b6124d2888389016122ef565b909650945060208701359150808211156124ea578384fd5b506124f7878288016122ef565b95989497509550505050565b600060208284031215612514578081fd5b61161382612338565b60006020828403121561252e578081fd5b5035919050565b600060208284031215612546578081fd5b813561161381612f78565b600060208284031215612562578081fd5b815161161381612f78565b60006020828403121561257e578081fd5b813567ffffffffffffffff811115612594578182fd5b8201601f810184136125a4578182fd5b611dee84823560208401612268565b6000806000604084860312156125c7578081fd5b83359250602084013567ffffffffffffffff8111156125e4578182fd5b6125f0868287016122ef565b9497909650939450505050565b60008151808452612615816020860160208601612ea0565b601f01601f19169290920160200192915050565b60609190911b6bffffffffffffffffffffffff1916815260140190565b918252602082015260400190565b60008351612666818460208801612ea0565b83519083019061267a818360208801612ea0565b64173539b7b760d91b9101908152600501949350505050565b6001600160a01b0391909116815260200190565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906126da908301846125fd565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561271c57835183529284019291840191600101612700565b50909695505050505050565b901515815260200190565b90815260200190565b60006020825261161360208301846125fd565b60208082526021908201527f4552433732314d657461646174613a204e6f6e6578697374656e7420746f6b656040820152603760f91b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601c908201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604082015260600190565b60208082526024908201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526019908201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604082015260600190565b6020808252601e908201527f45786365656473206d6178206d696e74206c696d6974207065722074786e0000604082015260600190565b60208082526009908201526813585e081b1a5b5a5d60ba1b604082015260600190565b60208082526012908201527153616c65206973206e6f7420656e61626c6560701b604082015260600190565b6020808252602c908201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b6020808252601690820152755072652d73616c65206973206e6f7420656e61626c6560501b604082015260600190565b60208082526021908201527f4d65726b6c654469737472696275746f723a20496e76616c69642070726f6f666040820152601760f91b606082015260800190565b60208082526038908201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760408201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606082015260800190565b6020808252602a908201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604082015269726f206164647265737360b01b606082015260800190565b60208082526029908201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460408201526832b73a103a37b5b2b760b91b606082015260800190565b602080825260119082015270115e18d959591cc81b585e081b1a5b5a5d607a1b604082015260600190565b60208082526022908201527f4d69736d61746368206265747765656e204164647265737320616e6420636f756040820152611b9d60f21b606082015260800190565b6020808252818101527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604082015260600190565b6020808252602c908201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b6020808252600f908201526e496e636f72726563742076616c756560881b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526029908201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960408201526839903737ba1037bbb760b91b606082015260800190565b60208082526011908201527056616c75652062656c6f7720707269636560781b604082015260600190565b60208082526016908201527522a9219b9918a2b73ab69d1037bbb732b91034b7b7b160511b604082015260600190565b60208082526017908201527f455243373231456e756d3a20676c6f62616c20696f6f62000000000000000000604082015260600190565b60208082526021908201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656040820152603960f91b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b60208082526021908201527f45786365656473206d6178206d696e74206c696d6974207065722077616c6c656040820152601d60fa1b606082015260800190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60008219821115612e5157612e51612f36565b500190565b600082612e6557612e65612f4c565b500490565b6000816000190483118215151615612e8457612e84612f36565b500290565b600082821015612e9b57612e9b612f36565b500390565b60005b83811015612ebb578181015183820152602001612ea3565b838111156115915750506000910152565b600281046001821680612ee057607f821691505b60208210811415612f0157634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612f1b57612f1b612f36565b5060010190565b600082612f3157612f31612f4c565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b0319811681146119ab57600080fdfea2646970667358221220edb42a3d1f38828dacea853edc50d397c7123b116b1868da1b9526435971aa4764736f6c63430008000033
Deployed Bytecode
0x6080604052600436106102c95760003560e01c80637ec0912e11610175578063ac0419fd116100dc578063d897833e11610095578063f176baaa1161006f578063f176baaa14610808578063f2fde38b14610828578063f439733514610848578063fe4ca84714610868576102c9565b8063d897833e146107a8578063e0d10618146107c8578063e985e9c5146107e8576102c9565b8063ac0419fd146106fe578063ae5cc1721461071e578063b88d4fde14610733578063c87b56dd14610753578063ccfb63a414610773578063ce22483c14610788576102c9565b8063945242c61161012e578063945242c61461066057806395d89b4114610673578063995b8ef614610688578063a22cb4651461069d578063a87430ba146106bd578063a9526862146106eb576102c9565b80637ec0912e146105b45780637ec18cf6146105d45780637f205a74146105e95780638462151c146105fe5780638da5cb5b1461062b578063941e79fc14610640576102c9565b80634783f0ef1161023457806362dc6e21116101ed57806370a08231116101c757806370a0823114610555578063711cc2ae14610575578063715018a61461058a5780637e95eac41461059f576102c9565b806362dc6e21146105005780636352211e1461051557806365fccb5214610535576102c9565b80634783f0ef14610456578063497865b3146104765780634d7cea161461048b5780634f6ccce7146104a057806355f804b3146104c05780635e326b92146104e0576102c9565b806323b872dd1161028657806323b872dd146103ac5780632eb4a7ab146103cc5780632f745c59146103e1578063379665bd146104015780633ccfd60b1461042157806342842e0e14610436576102c9565b806301ffc9a7146102ce57806306fdde0314610304578063081812fc14610326578063095ea7b3146103535780630990e5341461037557806318160ddd14610397575b600080fd5b3480156102da57600080fd5b506102ee6102e9366004612535565b61087d565b6040516102fb9190612728565b60405180910390f35b34801561031057600080fd5b506103196108aa565b6040516102fb919061273c565b34801561033257600080fd5b5061034661034136600461251d565b61093c565b6040516102fb9190612693565b34801561035f57600080fd5b5061037361036e366004612471565b610988565b005b34801561038157600080fd5b5061038a610a20565b6040516102fb9190612733565b3480156103a357600080fd5b5061038a610a26565b3480156103b857600080fd5b506103736103c7366004612394565b610a2c565b3480156103d857600080fd5b5061038a610a37565b3480156103ed57600080fd5b5061038a6103fc366004612471565b610a3d565b34801561040d57600080fd5b5061037361041c36600461251d565b610b00565b34801561042d57600080fd5b50610373610b66565b34801561044257600080fd5b50610373610451366004612394565b610bd8565b34801561046257600080fd5b5061037361047136600461251d565b610bf3565b34801561048257600080fd5b5061038a610c37565b34801561049757600080fd5b5061038a610c3d565b3480156104ac57600080fd5b5061038a6104bb36600461251d565b610c43565b3480156104cc57600080fd5b506103736104db36600461256d565b610c6f565b3480156104ec57600080fd5b506103736104fb366004612503565b610cc1565b34801561050c57600080fd5b5061038a610d29565b34801561052157600080fd5b5061034661053036600461251d565b610d2f565b34801561054157600080fd5b5061037361055036600461251d565b610d87565b34801561056157600080fd5b5061038a610570366004612348565b610dcb565b34801561058157600080fd5b5061038a610e68565b34801561059657600080fd5b50610373610e6e565b3480156105ab57600080fd5b5061038a610eb9565b3480156105c057600080fd5b506103736105cf36600461251d565b610ebf565b3480156105e057600080fd5b506102ee610f03565b3480156105f557600080fd5b5061038a610f0c565b34801561060a57600080fd5b5061061e610619366004612348565b610f12565b6040516102fb91906126e4565b34801561063757600080fd5b50610346610ff8565b34801561064c57600080fd5b5061037361065b36600461251d565b611007565b61037361066e3660046125b3565b61106d565b34801561067f57600080fd5b50610319611285565b34801561069457600080fd5b5061038a611294565b3480156106a957600080fd5b506103736106b8366004612448565b61129a565b3480156106c957600080fd5b506106dd6106d8366004612348565b611368565b6040516102fb929190612646565b6103736106f936600461251d565b611381565b34801561070a57600080fd5b5061037361071936600461251d565b611519565b34801561072a57600080fd5b5061038a61157f565b34801561073f57600080fd5b5061037361074e3660046123cf565b611585565b34801561075f57600080fd5b5061031961076e36600461251d565b611597565b34801561077f57600080fd5b5061038a61161a565b34801561079457600080fd5b506103736107a336600461251d565b611620565b3480156107b457600080fd5b506103736107c3366004612503565b611686565b3480156107d457600080fd5b506103736107e336600461249a565b6116fb565b3480156107f457600080fd5b506102ee610803366004612362565b6118a9565b34801561081457600080fd5b5061037361082336600461251d565b6118d7565b34801561083457600080fd5b50610373610843366004612348565b61193d565b34801561085457600080fd5b5061037361086336600461251d565b6119ae565b34801561087457600080fd5b506102ee611a14565b60006001600160e01b0319821663780e9d6360e01b14806108a257506108a282611a22565b90505b919050565b6060600080546108b990612ecc565b80601f01602080910402602001604051908101604052809291908181526020018280546108e590612ecc565b80156109325780601f1061090757610100808354040283529160200191610932565b820191906000526020600020905b81548152906001019060200180831161091557829003601f168201915b5050505050905090565b600061094782611a62565b61096c5760405162461bcd60e51b815260040161096390612baf565b60405180910390fd5b506000908152600360205260409020546001600160a01b031690565b600061099382610d2f565b9050806001600160a01b0316836001600160a01b031614156109c75760405162461bcd60e51b815260040161096390612d34565b806001600160a01b03166109d9611aba565b6001600160a01b031614806109f557506109f581610803611aba565b610a115760405162461bcd60e51b815260040161096390612a1d565b610a1b8383611abe565b505050565b600f5481565b60025490565b610a1b838383611b2c565b60135481565b6000610a4883610dcb565b8210610a665760405162461bcd60e51b815260040161096390612ccd565b6000805b600254811015610ae15760028181548110610a9557634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0386811691161415610ad15783821415610ac5579150610afa9050565b610ace82612f07565b91505b610ada81612f07565b9050610a6a565b5060405162461bcd60e51b815260040161096390612ccd565b92915050565b610b08611aba565b6001600160a01b0316610b19610ff8565b6001600160a01b031614610b3f5760405162461bcd60e51b815260040161096390612c24565b601054811015610b615760405162461bcd60e51b815260040161096390612bfb565b600855565b610b6e611aba565b6001600160a01b0316610b7f610ff8565b6001600160a01b031614610ba55760405162461bcd60e51b815260040161096390612c24565b6040514790339082156108fc029083906000818181858888f19350505050158015610bd4573d6000803e3d6000fd5b5050565b610a1b83838360405180602001604052806000815250611585565b610bfb611aba565b6001600160a01b0316610c0c610ff8565b6001600160a01b031614610c325760405162461bcd60e51b815260040161096390612c24565b601355565b60085481565b60105481565b6000610c4d610a26565b8210610c6b5760405162461bcd60e51b815260040161096390612cfd565b5090565b610c77611aba565b6001600160a01b0316610c88610ff8565b6001600160a01b031614610cae5760405162461bcd60e51b815260040161096390612c24565b8051610bd49060129060208401906121d8565b610cc9611aba565b6001600160a01b0316610cda610ff8565b6001600160a01b031614610d005760405162461bcd60e51b815260040161096390612c24565b60115460ff1615158115151415610d1657600080fd5b6011805460ff1916911515919091179055565b600d5481565b60008060028381548110610d5357634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03169050806108a25760405162461bcd60e51b815260040161096390612ac4565b610d8f611aba565b6001600160a01b0316610da0610ff8565b6001600160a01b031614610dc65760405162461bcd60e51b815260040161096390612c24565b600d55565b60006001600160a01b038216610df35760405162461bcd60e51b815260040161096390612a7a565b600254600090815b81811015610e5f5760028181548110610e2457634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0386811691161415610e4f57610e4c83612f07565b92505b610e5881612f07565b9050610dfb565b50909392505050565b600c5481565b610e76611aba565b6001600160a01b0316610e87610ff8565b6001600160a01b031614610ead5760405162461bcd60e51b815260040161096390612c24565b610eb76000611b64565b565b60095481565b610ec7611aba565b6001600160a01b0316610ed8610ff8565b6001600160a01b031614610efe5760405162461bcd60e51b815260040161096390612c24565b600e55565b60115460ff1681565b600e5481565b6060610f1d82610dcb565b600010610f3c5760405162461bcd60e51b815260040161096390612ccd565b6000610f4783610dcb565b905060008167ffffffffffffffff811115610f7257634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610f9b578160200160208202803683370190505b50905060005b82811015610ff057610fb38582610a3d565b828281518110610fd357634e487b7160e01b600052603260045260246000fd5b602090810291909101015280610fe881612f07565b915050610fa1565b509392505050565b6005546001600160a01b031690565b61100f611aba565b6001600160a01b0316611020610ff8565b6001600160a01b0316146110465760405162461bcd60e51b815260040161096390612c24565b8060075410156110685760405162461bcd60e51b815260040161096390612bfb565b600955565b600260065414156110905760405162461bcd60e51b815260040161096390612e07565b60026006556040516000906110a9903390602001612629565b60405160208183030381529060405280519060200120905060006110cb610a26565b60115490915060ff166110f05760405162461bcd60e51b8152600401610963906129ac565b60075485600f546111019190612e3e565b111561111f5760405162461bcd60e51b815260040161096390612b0d565b611160848480806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506013549150859050611bb6565b61117c5760405162461bcd60e51b8152600401610963906129dc565b6009543360009081526014602052604090205461119a908790612e3e565b11156111b85760405162461bcd60e51b815260040161096390612dc6565b600b548511156111da5760405162461bcd60e51b8152600401610963906128da565b84600d546111e89190612e6a565b3410156112075760405162461bcd60e51b815260040161096390612ca2565b60005b8581101561124d57611225336112208385612e3e565b611c71565b600f805490600061123583612f07565b9190505550808061124590612f07565b91505061120a565b5033600090815260146020526040902054611269908690612e3e565b3360009081526014602052604090205550506001600655505050565b6060600180546108b990612ecc565b60075481565b6112a2611aba565b6001600160a01b0316826001600160a01b031614156112d35760405162461bcd60e51b8152600401610963906128a3565b80600460006112e0611aba565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff191692151592909217909155611324611aba565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161135c9190612728565b60405180910390a35050565b6014602052600090815260409020805460019091015482565b600260065414156113a45760405162461bcd60e51b815260040161096390612e07565b600260065560006113b3610a26565b601154909150610100900460ff166113dd5760405162461bcd60e51b815260040161096390612934565b60075482600f546113ee9190612e3e565b111561140c5760405162461bcd60e51b815260040161096390612b0d565b600a543360009081526014602052604090206001015461142d908490612e3e565b111561144b5760405162461bcd60e51b815260040161096390612dc6565b600c5482111561146d5760405162461bcd60e51b8152600401610963906128da565b81600e5461147b9190612e6a565b34101561149a5760405162461bcd60e51b815260040161096390612ca2565b60005b828110156114db576114b3336112208385612e3e565b600f80549060006114c383612f07565b919050555080806114d390612f07565b91505061149d565b50336000908152601460205260409020600101546114fa908390612e3e565b3360009081526014602052604090206001908101919091556006555050565b611521611aba565b6001600160a01b0316611532610ff8565b6001600160a01b0316146115585760405162461bcd60e51b815260040161096390612c24565b80600754101561157a5760405162461bcd60e51b815260040161096390612bfb565b600b55565b600a5481565b61159184848484611c8b565b50505050565b60606115a282611a62565b6115be5760405162461bcd60e51b81526004016109639061274f565b60006115c8611cc4565b905060008151116115e85760405180602001604052806000815250611613565b806115f284611cd3565b604051602001611603929190612654565b6040516020818303038152906040525b9392505050565b600b5481565b611628611aba565b6001600160a01b0316611639610ff8565b6001600160a01b03161461165f5760405162461bcd60e51b815260040161096390612c24565b8060075410156116815760405162461bcd60e51b815260040161096390612bfb565b600c55565b61168e611aba565b6001600160a01b031661169f610ff8565b6001600160a01b0316146116c55760405162461bcd60e51b815260040161096390612c24565b60115460ff61010090910416151581151514156116e157600080fd5b601180549115156101000261ff0019909216919091179055565b611703611aba565b6001600160a01b0316611714610ff8565b6001600160a01b03161461173a5760405162461bcd60e51b815260040161096390612c24565b6002600654141561175d5760405162461bcd60e51b815260040161096390612e07565b60026006558281146117815760405162461bcd60e51b815260040161096390612b38565b60005b8381101561189d576000611796610a26565b90506008548484848181106117bb57634e487b7160e01b600052603260045260246000fd5b905060200201356010546117cf9190612e3e565b11156117ed5760405162461bcd60e51b815260040161096390612911565b60005b84848481811061181057634e487b7160e01b600052603260045260246000fd5b905060200201358110156118885761186087878581811061184157634e487b7160e01b600052603260045260246000fd5b90506020020160208101906118569190612348565b6112208385612e3e565b6010805490600061187083612f07565b9190505550808061188090612f07565b9150506117f0565b5050808061189590612f07565b915050611784565b50506001600655505050565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205460ff1690565b6118df611aba565b6001600160a01b03166118f0610ff8565b6001600160a01b0316146119165760405162461bcd60e51b815260040161096390612c24565b8060075410156119385760405162461bcd60e51b815260040161096390612bfb565b600a55565b611945611aba565b6001600160a01b0316611956610ff8565b6001600160a01b03161461197c5760405162461bcd60e51b815260040161096390612c24565b6001600160a01b0381166119a25760405162461bcd60e51b8152600401610963906127e2565b6119ab81611b64565b50565b6119b6611aba565b6001600160a01b03166119c7610ff8565b6001600160a01b0316146119ed5760405162461bcd60e51b815260040161096390612c24565b600f54811015611a0f5760405162461bcd60e51b815260040161096390612bfb565b600755565b601154610100900460ff1681565b60006001600160e01b031982166380ac58cd60e01b1480611a5357506001600160e01b03198216635b5e139f60e01b145b806108a257506108a282611df6565b600254600090821080156108a2575060006001600160a01b031660028381548110611a9d57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0316141592915050565b3390565b600081815260036020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611af382610d2f565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b611b3d611b37611aba565b82611e0f565b611b595760405162461bcd60e51b815260040161096390612d75565b610a1b838383611e8c565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600081815b8551811015611c66576000868281518110611be657634e487b7160e01b600052603260045260246000fd5b60200260200101519050808311611c27578281604051602001611c0a929190612646565b604051602081830303815290604052805190602001209250611c53565b8083604051602001611c3a929190612646565b6040516020818303038152906040528051906020012092505b5080611c5e81612f07565b915050611bbb565b509092149392505050565b610bd4828260405180602001604052806000815250611f7d565b611c9c611c96611aba565b83611e0f565b611cb85760405162461bcd60e51b815260040161096390612d75565b61159184848484611fb0565b6060601280546108b990612ecc565b606081611cf857506040805180820190915260018152600360fc1b60208201526108a5565b8160005b8115611d225780611d0c81612f07565b9150611d1b9050600a83612e56565b9150611cfc565b60008167ffffffffffffffff811115611d4b57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611d75576020820181803683370190505b5090505b8415611dee57611d8a600183612e89565b9150611d97600a86612f22565b611da2906030612e3e565b60f81b818381518110611dc557634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350611de7600a86612e56565b9450611d79565b949350505050565b6001600160e01b031981166301ffc9a760e01b14919050565b6000611e1a82611a62565b611e365760405162461bcd60e51b815260040161096390612960565b6000611e4183610d2f565b9050806001600160a01b0316846001600160a01b03161480611e7c5750836001600160a01b0316611e718461093c565b6001600160a01b0316145b80611dee5750611dee81856118a9565b826001600160a01b0316611e9f82610d2f565b6001600160a01b031614611ec55760405162461bcd60e51b815260040161096390612c59565b6001600160a01b038216611eeb5760405162461bcd60e51b81526004016109639061285f565b611ef6838383610a1b565b611f01600082611abe565b8160028281548110611f2357634e487b7160e01b600052603260045260246000fd5b6000918252602082200180546001600160a01b0319166001600160a01b03938416179055604051839285811692908716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9190a4505050565b611f878383611fe3565b611f9460008484846120b7565b610a1b5760405162461bcd60e51b815260040161096390612790565b611fbb848484611e8c565b611fc7848484846120b7565b6115915760405162461bcd60e51b815260040161096390612790565b6001600160a01b0382166120095760405162461bcd60e51b815260040161096390612b7a565b61201281611a62565b1561202f5760405162461bcd60e51b815260040161096390612828565b61203b60008383610a1b565b6002805460018101825560009182527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319166001600160a01b0385169081179091556040518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006120cb846001600160a01b03166121d2565b156121c757836001600160a01b031663150b7a026120e7611aba565b8786866040518563ffffffff1660e01b815260040161210994939291906126a7565b602060405180830381600087803b15801561212357600080fd5b505af1925050508015612153575060408051601f3d908101601f1916820190925261215091810190612551565b60015b6121ad573d808015612181576040519150601f19603f3d011682016040523d82523d6000602084013e612186565b606091505b5080516121a55760405162461bcd60e51b815260040161096390612790565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611dee565b506001949350505050565b3b151590565b8280546121e490612ecc565b90600052602060002090601f016020900481019282612206576000855561224c565b82601f1061221f57805160ff191683800117855561224c565b8280016001018555821561224c579182015b8281111561224c578251825591602001919060010190612231565b50610c6b9291505b80821115610c6b5760008155600101612254565b600067ffffffffffffffff8084111561228357612283612f62565b604051601f8501601f1916810160200182811182821017156122a7576122a7612f62565b6040528481529150818385018610156122bf57600080fd5b8484602083013760006020868301015250509392505050565b80356001600160a01b03811681146108a557600080fd5b60008083601f840112612300578081fd5b50813567ffffffffffffffff811115612317578182fd5b602083019150836020808302850101111561233157600080fd5b9250929050565b803580151581146108a557600080fd5b600060208284031215612359578081fd5b611613826122d8565b60008060408385031215612374578081fd5b61237d836122d8565b915061238b602084016122d8565b90509250929050565b6000806000606084860312156123a8578081fd5b6123b1846122d8565b92506123bf602085016122d8565b9150604084013590509250925092565b600080600080608085870312156123e4578081fd5b6123ed856122d8565b93506123fb602086016122d8565b925060408501359150606085013567ffffffffffffffff81111561241d578182fd5b8501601f8101871361242d578182fd5b61243c87823560208401612268565b91505092959194509250565b6000806040838503121561245a578182fd5b612463836122d8565b915061238b60208401612338565b60008060408385031215612483578182fd5b61248c836122d8565b946020939093013593505050565b600080600080604085870312156124af578384fd5b843567ffffffffffffffff808211156124c6578586fd5b6124d2888389016122ef565b909650945060208701359150808211156124ea578384fd5b506124f7878288016122ef565b95989497509550505050565b600060208284031215612514578081fd5b61161382612338565b60006020828403121561252e578081fd5b5035919050565b600060208284031215612546578081fd5b813561161381612f78565b600060208284031215612562578081fd5b815161161381612f78565b60006020828403121561257e578081fd5b813567ffffffffffffffff811115612594578182fd5b8201601f810184136125a4578182fd5b611dee84823560208401612268565b6000806000604084860312156125c7578081fd5b83359250602084013567ffffffffffffffff8111156125e4578182fd5b6125f0868287016122ef565b9497909650939450505050565b60008151808452612615816020860160208601612ea0565b601f01601f19169290920160200192915050565b60609190911b6bffffffffffffffffffffffff1916815260140190565b918252602082015260400190565b60008351612666818460208801612ea0565b83519083019061267a818360208801612ea0565b64173539b7b760d91b9101908152600501949350505050565b6001600160a01b0391909116815260200190565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906126da908301846125fd565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561271c57835183529284019291840191600101612700565b50909695505050505050565b901515815260200190565b90815260200190565b60006020825261161360208301846125fd565b60208082526021908201527f4552433732314d657461646174613a204e6f6e6578697374656e7420746f6b656040820152603760f91b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601c908201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604082015260600190565b60208082526024908201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526019908201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604082015260600190565b6020808252601e908201527f45786365656473206d6178206d696e74206c696d6974207065722074786e0000604082015260600190565b60208082526009908201526813585e081b1a5b5a5d60ba1b604082015260600190565b60208082526012908201527153616c65206973206e6f7420656e61626c6560701b604082015260600190565b6020808252602c908201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b6020808252601690820152755072652d73616c65206973206e6f7420656e61626c6560501b604082015260600190565b60208082526021908201527f4d65726b6c654469737472696275746f723a20496e76616c69642070726f6f666040820152601760f91b606082015260800190565b60208082526038908201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760408201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606082015260800190565b6020808252602a908201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604082015269726f206164647265737360b01b606082015260800190565b60208082526029908201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460408201526832b73a103a37b5b2b760b91b606082015260800190565b602080825260119082015270115e18d959591cc81b585e081b1a5b5a5d607a1b604082015260600190565b60208082526022908201527f4d69736d61746368206265747765656e204164647265737320616e6420636f756040820152611b9d60f21b606082015260800190565b6020808252818101527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604082015260600190565b6020808252602c908201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b6020808252600f908201526e496e636f72726563742076616c756560881b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526029908201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960408201526839903737ba1037bbb760b91b606082015260800190565b60208082526011908201527056616c75652062656c6f7720707269636560781b604082015260600190565b60208082526016908201527522a9219b9918a2b73ab69d1037bbb732b91034b7b7b160511b604082015260600190565b60208082526017908201527f455243373231456e756d3a20676c6f62616c20696f6f62000000000000000000604082015260600190565b60208082526021908201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656040820152603960f91b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b60208082526021908201527f45786365656473206d6178206d696e74206c696d6974207065722077616c6c656040820152601d60fa1b606082015260800190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60008219821115612e5157612e51612f36565b500190565b600082612e6557612e65612f4c565b500490565b6000816000190483118215151615612e8457612e84612f36565b500290565b600082821015612e9b57612e9b612f36565b500390565b60005b83811015612ebb578181015183820152602001612ea3565b838111156115915750506000910152565b600281046001821680612ee057607f821691505b60208210811415612f0157634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612f1b57612f1b612f36565b5060010190565b600082612f3157612f31612f4c565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b0319811681146119ab57600080fdfea2646970667358221220edb42a3d1f38828dacea853edc50d397c7123b116b1868da1b9526435971aa4764736f6c63430008000033
Deployed Bytecode Sourcemap
30984:5863:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28308:225;;;;;;;;;;-1:-1:-1;28308:225:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22427:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;23061:221::-;;;;;;;;;;-1:-1:-1;23061:221:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;22643:412::-;;;;;;;;;;-1:-1:-1;22643:412:0;;;;;:::i;:::-;;:::i;:::-;;31449:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;29469:110::-;;;;;;;;;;;;;:::i;34550:145::-;;;;;;;;;;-1:-1:-1;34550:145:0;;;;;:::i;:::-;;:::i;31622:25::-;;;;;;;;;;;;;:::i;28539:500::-;;;;;;;;;;-1:-1:-1;28539:500:0;;;;;:::i;:::-;;:::i;36157:175::-;;;;;;;;;;-1:-1:-1;36157:175:0;;;;;:::i;:::-;;:::i;34889:143::-;;;;;;;;;;;;;:::i;24104:185::-;;;;;;;;;;-1:-1:-1;24104:185:0;;;;;:::i;:::-;;:::i;36750:94::-;;;;;;;;;;-1:-1:-1;36750:94:0;;;;;:::i;:::-;;:::i;31121:33::-;;;;;;;;;;;;;:::i;31479:30::-;;;;;;;;;;;;;:::i;29585:194::-;;;;;;;;;;-1:-1:-1;29585:194:0;;;;;:::i;:::-;;:::i;35038:102::-;;;;;;;;;;-1:-1:-1;35038:102:0;;;;;:::i;:::-;;:::i;35499:135::-;;;;;;;;;;-1:-1:-1;35499:135:0;;;;;:::i;:::-;;:::i;31360:40::-;;;;;;;;;;;;;:::i;22182:239::-;;;;;;;;;;-1:-1:-1;22182:239:0;;;;;:::i;:::-;;:::i;35254:108::-;;;;;;;;;;-1:-1:-1;35254:108:0;;;;;:::i;:::-;;:::i;21754:422::-;;;;;;;;;;-1:-1:-1;21754:422:0;;;;;:::i;:::-;;:::i;31302:51::-;;;;;;;;;;;;;:::i;1363:94::-;;;;;;;;;;;;;:::i;31161:38::-;;;;;;;;;;;;;:::i;35146:102::-;;;;;;;;;;-1:-1:-1;35146:102:0;;;;;:::i;:::-;;:::i;31519:33::-;;;;;;;;;;;;;:::i;31404:38::-;;;;;;;;;;;;;:::i;29045:418::-;;;;;;;;;;-1:-1:-1;29045:418:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;712:87::-;;;;;;;;;;;;;:::i;35811:171::-;;;;;;;;;;-1:-1:-1;35811:171:0;;;;;:::i;:::-;;:::i;32438:984::-;;;;;;:::i;:::-;;:::i;22533:104::-;;;;;;;;;;;;;:::i;31087:30::-;;;;;;;;;;;;;:::i;23288:295::-;;;;;;;;;;-1:-1:-1;23288:295:0;;;;;:::i;:::-;;:::i;31722:38::-;;;;;;;;;;-1:-1:-1;31722:38:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;33428:751::-;;;;;;:::i;:::-;;:::i;36338:203::-;;;;;;;;;;-1:-1:-1;36338:203:0;;;;;:::i;:::-;;:::i;31203:35::-;;;;;;;;;;;;;:::i;34703:180::-;;;;;;;;;;-1:-1:-1;34703:180:0;;;;;:::i;:::-;;:::i;34188:353::-;;;;;;;;;;-1:-1:-1;34188:353:0;;;;;:::i;:::-;;:::i;31245:53::-;;;;;;;;;;;;;:::i;36547:197::-;;;;;;;;;;-1:-1:-1;36547:197:0;;;;;:::i;:::-;;:::i;35368:125::-;;;;;;;;;;-1:-1:-1;35368:125:0;;;;;:::i;:::-;;:::i;31937:495::-;;;;;;;;;;-1:-1:-1;31937:495:0;;;;;:::i;:::-;;:::i;23589:164::-;;;;;;;;;;-1:-1:-1;23589:164:0;;;;;:::i;:::-;;:::i;35640:165::-;;;;;;;;;;-1:-1:-1;35640:165:0;;;;;:::i;:::-;;:::i;1612:192::-;;;;;;;;;;-1:-1:-1;1612:192:0;;;;;:::i;:::-;;:::i;35988:163::-;;;;;;;;;;-1:-1:-1;35988:163:0;;;;;:::i;:::-;;:::i;31556:30::-;;;;;;;;;;;;;:::i;28308:225::-;28411:4;-1:-1:-1;;;;;;28435:50:0;;-1:-1:-1;;;28435:50:0;;:90;;;28489:36;28513:11;28489:23;:36::i;:::-;28428:97;;28308:225;;;;:::o;22427:100::-;22481:13;22514:5;22507:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22427:100;:::o;23061:221::-;23137:7;23165:16;23173:7;23165;:16::i;:::-;23157:73;;;;-1:-1:-1;;;23157:73:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;23250:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;23250:24:0;;23061:221::o;22643:412::-;22724:13;22740:24;22756:7;22740:15;:24::i;:::-;22724:40;;22789:5;-1:-1:-1;;;;;22783:11:0;:2;-1:-1:-1;;;;;22783:11:0;;;22775:57;;;;-1:-1:-1;;;22775:57:0;;;;;;;:::i;:::-;22883:5;-1:-1:-1;;;;;22867:21:0;:12;:10;:12::i;:::-;-1:-1:-1;;;;;22867:21:0;;:62;;;;22892:37;22909:5;22916:12;:10;:12::i;22892:37::-;22845:168;;;;-1:-1:-1;;;22845:168:0;;;;;;;:::i;:::-;23026:21;23035:2;23039:7;23026:8;:21::i;:::-;22643:412;;;:::o;31449:26::-;;;;:::o;29469:110::-;29557:7;:14;29469:110;:::o;34550:145::-;34645:42;34666:5;34673:3;34678:8;34645:20;:42::i;31622:25::-;;;;:::o;28539:500::-;28628:15;28672:24;28690:5;28672:17;:24::i;:::-;28664:5;:32;28656:67;;;;-1:-1:-1;;;28656:67:0;;;;;;;:::i;:::-;28734:10;28760:6;28755:226;28772:7;:14;28768:18;;28755:226;;;28821:7;28829:1;28821:10;;;;;;-1:-1:-1;;;28821:10:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28812:19:0;;;28821:10;;28812:19;28808:162;;;28865:5;28856;:14;28852:102;;;28901:1;-1:-1:-1;28894:8:0;;-1:-1:-1;28894:8:0;28852:102;28947:7;;;:::i;:::-;;;28852:102;28788:3;;;:::i;:::-;;;28755:226;;;-1:-1:-1;28991:40:0;;-1:-1:-1;;;28991:40:0;;;;;;;:::i;28539:500::-;;;;;:::o;36157:175::-;943:12;:10;:12::i;:::-;-1:-1:-1;;;;;932:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;932:23:0;;924:68;;;;-1:-1:-1;;;924:68:0;;;;;;;:::i;:::-;36254:15:::1;;36241:9;:28;;36233:56;;;;-1:-1:-1::0;;;36233:56:0::1;;;;;;;:::i;:::-;36300:12;:24:::0;36157:175::o;34889:143::-;943:12;:10;:12::i;:::-;-1:-1:-1;;;;;932:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;932:23:0;;924:68;;;;-1:-1:-1;;;924:68:0;;;;;;;:::i;:::-;34987:37:::1;::::0;34955:21:::1;::::0;34995:10:::1;::::0;34987:37;::::1;;;::::0;34955:21;;34937:15:::1;34987:37:::0;34937:15;34987:37;34955:21;34995:10;34987:37;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;1003:1;34889:143::o:0;24104:185::-;24242:39;24259:4;24265:2;24269:7;24242:39;;;;;;;;;;;;:16;:39::i;36750:94::-;943:12;:10;:12::i;:::-;-1:-1:-1;;;;;932:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;932:23:0;;924:68;;;;-1:-1:-1;;;924:68:0;;;;;;;:::i;:::-;36819:10:::1;:20:::0;36750:94::o;31121:33::-;;;;:::o;31479:30::-;;;;:::o;29585:194::-;29660:7;29696:24;:22;:24::i;:::-;29688:5;:32;29680:68;;;;-1:-1:-1;;;29680:68:0;;;;;;;:::i;:::-;-1:-1:-1;29766:5:0;29585:194::o;35038:102::-;943:12;:10;:12::i;:::-;-1:-1:-1;;;;;932:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;932:23:0;;924:68;;;;-1:-1:-1;;;924:68:0;;;;;;;:::i;:::-;35112:20;;::::1;::::0;:7:::1;::::0;:20:::1;::::0;::::1;::::0;::::1;:::i;35499:135::-:0;943:12;:10;:12::i;:::-;-1:-1:-1;;;;;932:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;932:23:0;;924:68;;;;-1:-1:-1;;;924:68:0;;;;;;;:::i;:::-;35570:13:::1;::::0;::::1;;:23;;::::0;::::1;;;;35562:32;;;::::0;::::1;;35604:13;:22:::0;;-1:-1:-1;;35604:22:0::1;::::0;::::1;;::::0;;;::::1;::::0;;35499:135::o;31360:40::-;;;;:::o;22182:239::-;22254:7;22274:13;22290:7;22298;22290:16;;;;;;-1:-1:-1;;;22290:16:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22290:16:0;;-1:-1:-1;22325:19:0;22317:73;;;;-1:-1:-1;;;22317:73:0;;;;;;;:::i;35254:108::-;943:12;:10;:12::i;:::-;-1:-1:-1;;;;;932:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;932:23:0;;924:68;;;;-1:-1:-1;;;924:68:0;;;;;;;:::i;:::-;35330:13:::1;:24:::0;35254:108::o;21754:422::-;21826:7;-1:-1:-1;;;;;21854:19:0;;21846:74;;;;-1:-1:-1;;;21846:74:0;;;;;;;:::i;:::-;21970:7;:14;21931:10;;;21995:127;22016:6;22012:1;:10;21995:127;;;22057:7;22065:1;22057:10;;;;;;-1:-1:-1;;;22057:10:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22048:19:0;;;22057:10;;22048:19;22044:67;;;22088:7;;;:::i;:::-;;;22044:67;22024:3;;;:::i;:::-;;;21995:127;;;-1:-1:-1;22163:5:0;;21754:422;-1:-1:-1;;;21754:422:0:o;31302:51::-;;;;:::o;1363:94::-;943:12;:10;:12::i;:::-;-1:-1:-1;;;;;932:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;932:23:0;;924:68;;;;-1:-1:-1;;;924:68:0;;;;;;;:::i;:::-;1428:21:::1;1446:1;1428:9;:21::i;:::-;1363:94::o:0;31161:38::-;;;;:::o;35146:102::-;943:12;:10;:12::i;:::-;-1:-1:-1;;;;;932:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;932:23:0;;924:68;;;;-1:-1:-1;;;924:68:0;;;;;;;:::i;:::-;35219:10:::1;:21:::0;35146:102::o;31519:33::-;;;;;;:::o;31404:38::-;;;;:::o;29045:418::-;29104:16;29145:24;29163:5;29145:17;:24::i;:::-;29141:1;:28;29133:63;;;;-1:-1:-1;;;29133:63:0;;;;;;;:::i;:::-;29207:18;29228:16;29238:5;29228:9;:16::i;:::-;29207:37;;29255:25;29297:10;29283:25;;;;;;-1:-1:-1;;;29283:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29283:25:0;;29255:53;;29324:9;29319:111;29343:10;29339:1;:14;29319:111;;;29389:29;29409:5;29416:1;29389:19;:29::i;:::-;29375:8;29384:1;29375:11;;;;;;-1:-1:-1;;;29375:11:0;;;;;;;;;;;;;;;;;;:43;29355:3;;;;:::i;:::-;;;;29319:111;;;-1:-1:-1;29447:8:0;29045:418;-1:-1:-1;;;29045:418:0:o;712:87::-;785:6;;-1:-1:-1;;;;;785:6:0;712:87;:::o;35811:171::-;943:12;:10;:12::i;:::-;-1:-1:-1;;;;;932:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;932:23:0;;924:68;;;;-1:-1:-1;;;924:68:0;;;;;;;:::i;:::-;35908:8:::1;35896;;:20;;35888:48;;;;-1:-1:-1::0;;;35888:48:0::1;;;;;;;:::i;:::-;35947:16;:27:::0;35811:171::o;32438:984::-;4823:1;5419:7;;:19;;5411:63;;;;-1:-1:-1;;;5411:63:0;;;;;;;:::i;:::-;4823:1;5552:7;:18;32567:28:::1;::::0;32542:12:::1;::::0;32567:28:::1;::::0;32584:10:::1;::::0;32567:28:::1;;;:::i;:::-;;;;;;;;;;;;;32557:39;;;;;;32542:54;;32601:19;32623:13;:11;:13::i;:::-;32654;::::0;32601:35;;-1:-1:-1;32654:13:0::1;;32641:62;;;;-1:-1:-1::0;;;32641:62:0::1;;;;;;;:::i;:::-;32751:8;;32741:6;32727:11;;:20;;;;:::i;:::-;:32;;32714:76;;;;-1:-1:-1::0;;;32714:76:0::1;;;;;;;:::i;:::-;32808:49;32827:11;;32808:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;;32840:10:0::1;::::0;;-1:-1:-1;32852:4:0;;-1:-1:-1;32808:18:0::1;:49::i;:::-;32795:109;;;;-1:-1:-1::0;;;32795:109:0::1;;;;;;;:::i;:::-;32964:16;::::0;32928:10:::1;32922:17;::::0;;;:5:::1;:17;::::0;;;;:29;:38:::1;::::0;32954:6;;32922:38:::1;:::i;:::-;:58;;32909:117;;;;-1:-1:-1::0;;;32909:117:0::1;;;;;;;:::i;:::-;33054:34;;33044:6;:44;;33031:100;;;;-1:-1:-1::0;;;33031:100:0::1;;;;;;;:::i;:::-;33178:6;33162:13;;:22;;;;:::i;:::-;33149:9;:35;;33136:78;;;;-1:-1:-1::0;;;33136:78:0::1;;;;;;;:::i;:::-;33224:9;33219:121;33243:6;33239:1;:10;33219:121;;;33271:38;33281:10;33293:15;33307:1:::0;33293:11;:15:::1;:::i;:::-;33271:9;:38::i;:::-;33315:11;:13:::0;;;:11:::1;:13;::::0;::::1;:::i;:::-;;;;;;33251:3;;;;;:::i;:::-;;;;33219:121;;;-1:-1:-1::0;33382:10:0::1;33376:17;::::0;;;:5:::1;:17;::::0;;;;:29;:38:::1;::::0;33408:6;;33376:38:::1;:::i;:::-;33350:10;33344:17;::::0;;;:5:::1;:17;::::0;;;;:70;-1:-1:-1;;4779:1:0;5731:7;:22;-1:-1:-1;;;32438:984:0:o;22533:104::-;22589:13;22622:7;22615:14;;;;;:::i;31087:30::-;;;;:::o;23288:295::-;23403:12;:10;:12::i;:::-;-1:-1:-1;;;;;23391:24:0;:8;-1:-1:-1;;;;;23391:24:0;;;23383:62;;;;-1:-1:-1;;;23383:62:0;;;;;;;:::i;:::-;23503:8;23458:18;:32;23477:12;:10;:12::i;:::-;-1:-1:-1;;;;;23458:32:0;;;;;;;;;;;;;;;;;-1:-1:-1;23458:32:0;;;:42;;;;;;;;;;;;:53;;-1:-1:-1;;23458:53:0;;;;;;;;;;;23542:12;:10;:12::i;:::-;-1:-1:-1;;;;;23527:48:0;;23566:8;23527:48;;;;;;:::i;:::-;;;;;;;;23288:295;;:::o;31722:38::-;;;;;;;;;;;;;;;;;;;:::o;33428:751::-;4823:1;5419:7;;:19;;5411:63;;;;-1:-1:-1;;;5411:63:0;;;;;;;:::i;:::-;4823:1;5552:7;:18;33497:19:::1;33519:13;:11;:13::i;:::-;33550:10;::::0;33497:35;;-1:-1:-1;33550:10:0::1;::::0;::::1;;;33537:55;;;;-1:-1:-1::0;;;33537:55:0::1;;;;;;;:::i;:::-;33640:8;;33630:6;33616:11;;:20;;;;:::i;:::-;:32;;33603:76;;;;-1:-1:-1::0;;;33603:76:0::1;;;;;;;:::i;:::-;33736:13;::::0;33703:10:::1;33697:17;::::0;;;:5:::1;:17;::::0;;;;:26:::1;;::::0;:35:::1;::::0;33726:6;;33697:35:::1;:::i;:::-;:52;;33684:111;;;;-1:-1:-1::0;;;33684:111:0::1;;;;;;;:::i;:::-;33823:31;;33813:6;:41;;33800:97;;;;-1:-1:-1::0;;;33800:97:0::1;;;;;;;:::i;:::-;33941:6;33928:10;;:19;;;;:::i;:::-;33915:9;:32;;33902:75;;;;-1:-1:-1::0;;;33902:75:0::1;;;;;;;:::i;:::-;33987:9;33982:121;34006:6;34002:1;:10;33982:121;;;34034:38;34044:10;34056:15;34070:1:::0;34056:11;:15:::1;:::i;34034:38::-;34078:11;:13:::0;;;:11:::1;:13;::::0;::::1;:::i;:::-;;;;;;34014:3;;;;;:::i;:::-;;;;33982:121;;;-1:-1:-1::0;34142:10:0::1;34136:17;::::0;;;:5:::1;:17;::::0;;;;:26:::1;;::::0;:35:::1;::::0;34165:6;;34136:35:::1;:::i;:::-;34113:10;34107:17;::::0;;;:5:::1;:17;::::0;;;;:26:::1;::::0;;::::1;:64:::0;;;;5731:7;:22;-1:-1:-1;;33428:751:0:o;36338:203::-;943:12;:10;:12::i;:::-;-1:-1:-1;;;;;932:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;932:23:0;;924:68;;;;-1:-1:-1;;;924:68:0;;;;;;;:::i;:::-;36449:8:::1;36437;;:20;;36429:48;;;;-1:-1:-1::0;;;36429:48:0::1;;;;;;;:::i;:::-;36488:34;:45:::0;36338:203::o;31203:35::-;;;;:::o;34703:180::-;34822:53;34847:5;34854:3;34859:8;34869:5;34822:24;:53::i;:::-;34703:180;;;;:::o;34188:353::-;34264:13;34298:17;34306:8;34298:7;:17::i;:::-;34290:63;;;;-1:-1:-1;;;34290:63:0;;;;;;;:::i;:::-;34364:28;34395:10;:8;:10::i;:::-;34364:41;;34454:1;34429:14;34423:28;:32;:110;;;;;;;;;;;;;;;;;34482:14;34498:19;:8;:17;:19::i;:::-;34465:62;;;;;;;;;:::i;:::-;;;;;;;;;;;;;34423:110;34416:117;34188:353;-1:-1:-1;;;34188:353:0:o;31245:53::-;;;;:::o;36547:197::-;943:12;:10;:12::i;:::-;-1:-1:-1;;;;;932:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;932:23:0;;924:68;;;;-1:-1:-1;;;924:68:0;;;;;;;:::i;:::-;36655:8:::1;36643;;:20;;36635:48;;;;-1:-1:-1::0;;;36635:48:0::1;;;;;;;:::i;:::-;36694:31;:42:::0;36547:197::o;35368:125::-;943:12;:10;:12::i;:::-;-1:-1:-1;;;;;932:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;932:23:0;;924:68;;;;-1:-1:-1;;;924:68:0;;;;;;;:::i;:::-;35440:10:::1;::::0;::::1;;::::0;;::::1;;:20;;::::0;::::1;;;;35432:29;;;::::0;::::1;;35466:10;:19:::0;;;::::1;;;;-1:-1:-1::0;;35466:19:0;;::::1;::::0;;;::::1;::::0;;35368:125::o;31937:495::-;943:12;:10;:12::i;:::-;-1:-1:-1;;;;;932:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;932:23:0;;924:68;;;;-1:-1:-1;;;924:68:0;;;;;;;:::i;:::-;4823:1:::1;5419:7;;:19;;5411:63;;;;-1:-1:-1::0;;;5411:63:0::1;;;;;;;:::i;:::-;4823:1;5552:7;:18:::0;32063:27;;::::2;32055:73;;;;-1:-1:-1::0;;;32055:73:0::2;;;;;;;:::i;:::-;32137:6;32133:292;32147:14:::0;;::::2;32133:292;;;32176:19;32198:13;:11;:13::i;:::-;32176:35;;32265:12;;32252:6;;32259:1;32252:9;;;;;-1:-1:-1::0;;;32252:9:0::2;;;;;;;;;;;;;;;32234:15;;:27;;;;:::i;:::-;:43;;32220:82;;;;-1:-1:-1::0;;;32220:82:0::2;;;;;;;:::i;:::-;32313:9;32308:112;32332:6;;32339:1;32332:9;;;;;-1:-1:-1::0;;;32332:9:0::2;;;;;;;;;;;;;;;32328:1;:13;32308:112;;;32355:34;32365:3;;32369:1;32365:6;;;;;-1:-1:-1::0;;;32365:6:0::2;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32373:15;32387:1:::0;32373:11;:15:::2;:::i;32355:34::-;32396:15;:17:::0;;;:15:::2;:17;::::0;::::2;:::i;:::-;;;;;;32343:3;;;;;:::i;:::-;;;;32308:112;;;;32133:292;32163:3;;;;;:::i;:::-;;;;32133:292;;;-1:-1:-1::0;;4779:1:0::1;5731:7;:22:::0;-1:-1:-1;;;31937:495:0:o;23589:164::-;-1:-1:-1;;;;;23710:25:0;;;23686:4;23710:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;23589:164::o;35640:165::-;943:12;:10;:12::i;:::-;-1:-1:-1;;;;;932:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;932:23:0;;924:68;;;;-1:-1:-1;;;924:68:0;;;;;;;:::i;:::-;35734:8:::1;35722;;:20;;35714:48;;;;-1:-1:-1::0;;;35714:48:0::1;;;;;;;:::i;:::-;35773:13;:24:::0;35640:165::o;1612:192::-;943:12;:10;:12::i;:::-;-1:-1:-1;;;;;932:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;932:23:0;;924:68;;;;-1:-1:-1;;;924:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;1701:22:0;::::1;1693:73;;;;-1:-1:-1::0;;;1693:73:0::1;;;;;;;:::i;:::-;1777:19;1787:8;1777:9;:19::i;:::-;1612:192:::0;:::o;35988:163::-;943:12;:10;:12::i;:::-;-1:-1:-1;;;;;932:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;932:23:0;;924:68;;;;-1:-1:-1;;;924:68:0;;;;;;;:::i;:::-;36081:11:::1;;36068:9;:24;;36060:52;;;;-1:-1:-1::0;;;36060:52:0::1;;;;;;;:::i;:::-;36123:8;:20:::0;35988:163::o;31556:30::-;;;;;;;;;:::o;21455:293::-;21557:4;-1:-1:-1;;;;;;21590:40:0;;-1:-1:-1;;;21590:40:0;;:101;;-1:-1:-1;;;;;;;21643:48:0;;-1:-1:-1;;;21643:48:0;21590:101;:150;;;;21704:36;21728:11;21704:23;:36::i;24950:155::-;25049:7;:14;25015:4;;25039:24;;:58;;;;;25095:1;-1:-1:-1;;;;;25067:30:0;:7;25075;25067:16;;;;;;-1:-1:-1;;;25067:16:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25067:16:0;:30;;;24950:155;-1:-1:-1;;24950:155:0:o;95:98::-;175:10;95:98;:::o;27123:175::-;27198:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;27198:29:0;-1:-1:-1;;;;;27198:29:0;;;;;;;;:24;;27252;27198;27252:15;:24::i;:::-;-1:-1:-1;;;;;27243:47:0;;;;;;;;;;;27123:175;;:::o;23759:339::-;23954:41;23973:12;:10;:12::i;:::-;23987:7;23954:18;:41::i;:::-;23946:103;;;;-1:-1:-1;;;23946:103:0;;;;;;;:::i;:::-;24062:28;24072:4;24078:2;24082:7;24062:9;:28::i;1812:173::-;1887:6;;;-1:-1:-1;;;;;1904:17:0;;;-1:-1:-1;;;;;;1904:17:0;;;;;;;1937:40;;1887:6;;;1904:17;1887:6;;1937:40;;1868:16;;1937:40;1812:173;;:::o;30147:830::-;30272:4;30312;30272;30329:525;30353:5;:12;30349:1;:16;30329:525;;;30387:20;30410:5;30416:1;30410:8;;;;;;-1:-1:-1;;;30410:8:0;;;;;;;;;;;;;;;30387:31;;30455:12;30439;:28;30435:408;;30609:12;30623;30592:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;30582:55;;;;;;30567:70;;30435:408;;;30799:12;30813;30782:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;30772:55;;;;;;30757:70;;30435:408;-1:-1:-1;30367:3:0;;;;:::i;:::-;;;;30329:525;;;-1:-1:-1;30949:20:0;;;;30147:830;-1:-1:-1;;;30147:830:0:o;25466:110::-;25542:26;25552:2;25556:7;25542:26;;;;;;;;;;;;:9;:26::i;24295:328::-;24470:41;24489:12;:10;:12::i;:::-;24503:7;24470:18;:41::i;:::-;24462:103;;;;-1:-1:-1;;;24462:103:0;;;;;;;:::i;:::-;24576:39;24590:4;24596:2;24600:7;24609:5;24576:13;:39::i;31832:99::-;31883:13;31916:7;31909:14;;;;;:::i;2180:723::-;2236:13;2457:10;2453:53;;-1:-1:-1;2484:10:0;;;;;;;;;;;;-1:-1:-1;;;2484:10:0;;;;;;2453:53;2531:5;2516:12;2572:78;2579:9;;2572:78;;2605:8;;;;:::i;:::-;;-1:-1:-1;2628:10:0;;-1:-1:-1;2636:2:0;2628:10;;:::i;:::-;;;2572:78;;;2660:19;2692:6;2682:17;;;;;;-1:-1:-1;;;2682:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2682:17:0;;2660:39;;2710:154;2717:10;;2710:154;;2744:11;2754:1;2744:11;;:::i;:::-;;-1:-1:-1;2813:10:0;2821:2;2813:5;:10;:::i;:::-;2800:24;;:2;:24;:::i;:::-;2787:39;;2770:6;2777;2770:14;;;;;;-1:-1:-1;;;2770:14:0;;;;;;;;;;;;:56;-1:-1:-1;;;;;2770:56:0;;;;;;;;-1:-1:-1;2841:11:0;2850:2;2841:11;;:::i;:::-;;;2710:154;;;2888:6;2180:723;-1:-1:-1;;;;2180:723:0:o;20834:157::-;-1:-1:-1;;;;;;20943:40:0;;-1:-1:-1;;;20943:40:0;20834:157;;;:::o;25111:349::-;25204:4;25229:16;25237:7;25229;:16::i;:::-;25221:73;;;;-1:-1:-1;;;25221:73:0;;;;;;;:::i;:::-;25305:13;25321:24;25337:7;25321:15;:24::i;:::-;25305:40;;25375:5;-1:-1:-1;;;;;25364:16:0;:7;-1:-1:-1;;;;;25364:16:0;;:51;;;;25408:7;-1:-1:-1;;;;;25384:31:0;:20;25396:7;25384:11;:20::i;:::-;-1:-1:-1;;;;;25384:31:0;;25364:51;:87;;;;25419:32;25436:5;25443:7;25419:16;:32::i;26600:517::-;26760:4;-1:-1:-1;;;;;26732:32:0;:24;26748:7;26732:15;:24::i;:::-;-1:-1:-1;;;;;26732:32:0;;26724:86;;;;-1:-1:-1;;;26724:86:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26829:16:0;;26821:65;;;;-1:-1:-1;;;26821:65:0;;;;;;;:::i;:::-;26899:39;26920:4;26926:2;26930:7;26899:20;:39::i;:::-;27003:29;27020:1;27024:7;27003:8;:29::i;:::-;27062:2;27043:7;27051;27043:16;;;;;;-1:-1:-1;;;27043:16:0;;;;;;;;;;;;;;;;;:21;;-1:-1:-1;;;;;;27043:21:0;-1:-1:-1;;;;;27043:21:0;;;;;;27082:27;;27101:7;;27082:27;;;;;;;;;;27043:16;27082:27;26600:517;;;:::o;25582:321::-;25712:18;25718:2;25722:7;25712:5;:18::i;:::-;25763:54;25794:1;25798:2;25802:7;25811:5;25763:22;:54::i;:::-;25741:154;;;;-1:-1:-1;;;25741:154:0;;;;;;;:::i;24629:315::-;24786:28;24796:4;24802:2;24806:7;24786:9;:28::i;:::-;24833:48;24856:4;24862:2;24866:7;24875:5;24833:22;:48::i;:::-;24825:111;;;;-1:-1:-1;;;24825:111:0;;;;;;;:::i;25909:346::-;-1:-1:-1;;;;;25989:16:0;;25981:61;;;;-1:-1:-1;;;25981:61:0;;;;;;;:::i;:::-;26062:16;26070:7;26062;:16::i;:::-;26061:17;26053:58;;;;-1:-1:-1;;;26053:58:0;;;;;;;:::i;:::-;26124:45;26153:1;26157:2;26161:7;26124:20;:45::i;:::-;26180:7;:16;;;;;;;-1:-1:-1;26180:16:0;;;;;;;-1:-1:-1;;;;;;26180:16:0;-1:-1:-1;;;;;26180:16:0;;;;;;;;26214:33;;26239:7;;-1:-1:-1;26214:33:0;;-1:-1:-1;;26214:33:0;25909:346;;:::o;27304:799::-;27459:4;27480:15;:2;-1:-1:-1;;;;;27480:13:0;;:15::i;:::-;27476:620;;;27532:2;-1:-1:-1;;;;;27516:36:0;;27553:12;:10;:12::i;:::-;27567:4;27573:7;27582:5;27516:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27516:72:0;;;;;;;;-1:-1:-1;;27516:72:0;;;;;;;;;;;;:::i;:::-;;;27512:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27758:13:0;;27754:272;;27801:60;;-1:-1:-1;;;27801:60:0;;;;;;;:::i;27754:272::-;27976:6;27970:13;27961:6;27957:2;27953:15;27946:38;27512:529;-1:-1:-1;;;;;;27639:51:0;-1:-1:-1;;;27639:51:0;;-1:-1:-1;27632:58:0;;27476:620;-1:-1:-1;28080:4:0;27304:799;;;;;;:::o;13396:387::-;13719:20;13767:8;;;13396:387::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:607:1;;110:18;151:2;143:6;140:14;137:2;;;157:18;;:::i;:::-;206:2;200:9;279:2;256:17;;-1:-1:-1;;252:31:1;240:44;;286:4;236:55;306:18;;;326:22;;;303:46;300:2;;;352:18;;:::i;:::-;388:2;381:22;436;;;421:6;-1:-1:-1;421:6:1;473:16;;;470:25;-1:-1:-1;467:2:1;;;508:1;505;498:12;467:2;558:6;553:3;546:4;538:6;534:17;521:44;613:1;606:4;597:6;589;585:19;581:30;574:41;;;90:531;;;;;:::o;626:175::-;696:20;;-1:-1:-1;;;;;745:31:1;;735:42;;725:2;;791:1;788;781:12;806:400;;;939:3;932:4;924:6;920:17;916:27;906:2;;962:6;954;947:22;906:2;-1:-1:-1;990:20:1;;1033:18;1022:30;;1019:2;;;1072:8;1062;1055:26;1019:2;1116:4;1108:6;1104:17;1092:29;;1179:3;1172:4;1164;1156:6;1152:17;1144:6;1140:30;1136:41;1133:50;1130:2;;;1196:1;1193;1186:12;1130:2;896:310;;;;;:::o;1211:162::-;1278:20;;1334:13;;1327:21;1317:32;;1307:2;;1363:1;1360;1353:12;1378:198;;1490:2;1478:9;1469:7;1465:23;1461:32;1458:2;;;1511:6;1503;1496:22;1458:2;1539:31;1560:9;1539:31;:::i;1581:274::-;;;1710:2;1698:9;1689:7;1685:23;1681:32;1678:2;;;1731:6;1723;1716:22;1678:2;1759:31;1780:9;1759:31;:::i;:::-;1749:41;;1809:40;1845:2;1834:9;1830:18;1809:40;:::i;:::-;1799:50;;1668:187;;;;;:::o;1860:342::-;;;;2006:2;1994:9;1985:7;1981:23;1977:32;1974:2;;;2027:6;2019;2012:22;1974:2;2055:31;2076:9;2055:31;:::i;:::-;2045:41;;2105:40;2141:2;2130:9;2126:18;2105:40;:::i;:::-;2095:50;;2192:2;2181:9;2177:18;2164:32;2154:42;;1964:238;;;;;:::o;2207:702::-;;;;;2379:3;2367:9;2358:7;2354:23;2350:33;2347:2;;;2401:6;2393;2386:22;2347:2;2429:31;2450:9;2429:31;:::i;:::-;2419:41;;2479:40;2515:2;2504:9;2500:18;2479:40;:::i;:::-;2469:50;;2566:2;2555:9;2551:18;2538:32;2528:42;;2621:2;2610:9;2606:18;2593:32;2648:18;2640:6;2637:30;2634:2;;;2685:6;2677;2670:22;2634:2;2713:22;;2766:4;2758:13;;2754:27;-1:-1:-1;2744:2:1;;2800:6;2792;2785:22;2744:2;2828:75;2895:7;2890:2;2877:16;2872:2;2868;2864:11;2828:75;:::i;:::-;2818:85;;;2337:572;;;;;;;:::o;2914:268::-;;;3040:2;3028:9;3019:7;3015:23;3011:32;3008:2;;;3061:6;3053;3046:22;3008:2;3089:31;3110:9;3089:31;:::i;:::-;3079:41;;3139:37;3172:2;3161:9;3157:18;3139:37;:::i;3187:266::-;;;3316:2;3304:9;3295:7;3291:23;3287:32;3284:2;;;3337:6;3329;3322:22;3284:2;3365:31;3386:9;3365:31;:::i;:::-;3355:41;3443:2;3428:18;;;;3415:32;;-1:-1:-1;;;3274:179:1:o;3458:815::-;;;;;3657:2;3645:9;3636:7;3632:23;3628:32;3625:2;;;3678:6;3670;3663:22;3625:2;3723:9;3710:23;3752:18;3793:2;3785:6;3782:14;3779:2;;;3814:6;3806;3799:22;3779:2;3858:76;3926:7;3917:6;3906:9;3902:22;3858:76;:::i;:::-;3953:8;;-1:-1:-1;3832:102:1;-1:-1:-1;4041:2:1;4026:18;;4013:32;;-1:-1:-1;4057:16:1;;;4054:2;;;4091:6;4083;4076:22;4054:2;;4135:78;4205:7;4194:8;4183:9;4179:24;4135:78;:::i;:::-;3615:658;;;;-1:-1:-1;4232:8:1;-1:-1:-1;;;;3615:658:1:o;4278:192::-;;4387:2;4375:9;4366:7;4362:23;4358:32;4355:2;;;4408:6;4400;4393:22;4355:2;4436:28;4454:9;4436:28;:::i;4475:190::-;;4587:2;4575:9;4566:7;4562:23;4558:32;4555:2;;;4608:6;4600;4593:22;4555:2;-1:-1:-1;4636:23:1;;4545:120;-1:-1:-1;4545:120:1:o;4670:257::-;;4781:2;4769:9;4760:7;4756:23;4752:32;4749:2;;;4802:6;4794;4787:22;4749:2;4846:9;4833:23;4865:32;4891:5;4865:32;:::i;4932:261::-;;5054:2;5042:9;5033:7;5029:23;5025:32;5022:2;;;5075:6;5067;5060:22;5022:2;5112:9;5106:16;5131:32;5157:5;5131:32;:::i;5198:482::-;;5320:2;5308:9;5299:7;5295:23;5291:32;5288:2;;;5341:6;5333;5326:22;5288:2;5386:9;5373:23;5419:18;5411:6;5408:30;5405:2;;;5456:6;5448;5441:22;5405:2;5484:22;;5537:4;5529:13;;5525:27;-1:-1:-1;5515:2:1;;5571:6;5563;5556:22;5515:2;5599:75;5666:7;5661:2;5648:16;5643:2;5639;5635:11;5599:75;:::i;5880:531::-;;;;6044:2;6032:9;6023:7;6019:23;6015:32;6012:2;;;6065:6;6057;6050:22;6012:2;6106:9;6093:23;6083:33;;6167:2;6156:9;6152:18;6139:32;6194:18;6186:6;6183:30;6180:2;;;6231:6;6223;6216:22;6180:2;6275:76;6343:7;6334:6;6323:9;6319:22;6275:76;:::i;:::-;6002:409;;6370:8;;-1:-1:-1;6249:102:1;;-1:-1:-1;;;;6002:409:1:o;6416:259::-;;6497:5;6491:12;6524:6;6519:3;6512:19;6540:63;6596:6;6589:4;6584:3;6580:14;6573:4;6566:5;6562:16;6540:63;:::i;:::-;6657:2;6636:15;-1:-1:-1;;6632:29:1;6623:39;;;;6664:4;6619:50;;6467:208;-1:-1:-1;;6467:208:1:o;6680:229::-;6829:2;6825:15;;;;-1:-1:-1;;6821:53:1;6809:66;;6900:2;6891:12;;6799:110::o;6914:247::-;7071:19;;;7115:2;7106:12;;7099:28;7152:2;7143:12;;7061:100::o;7166:637::-;;7484:6;7478:13;7500:53;7546:6;7541:3;7534:4;7526:6;7522:17;7500:53;:::i;:::-;7616:13;;7575:16;;;;7638:57;7616:13;7575:16;7672:4;7660:17;;7638:57;:::i;:::-;-1:-1:-1;;;7717:20:1;;7746:22;;;7795:1;7784:13;;7454:349;-1:-1:-1;;;;7454:349:1:o;7808:203::-;-1:-1:-1;;;;;7972:32:1;;;;7954:51;;7942:2;7927:18;;7909:102::o;8016:490::-;-1:-1:-1;;;;;8285:15:1;;;8267:34;;8337:15;;8332:2;8317:18;;8310:43;8384:2;8369:18;;8362:34;;;8432:3;8427:2;8412:18;;8405:31;;;8016:490;;8453:47;;8480:19;;8472:6;8453:47;:::i;:::-;8445:55;8219:287;-1:-1:-1;;;;;;8219:287:1:o;8511:635::-;8682:2;8734:21;;;8804:13;;8707:18;;;8826:22;;;8511:635;;8682:2;8905:15;;;;8879:2;8864:18;;;8511:635;8951:169;8965:6;8962:1;8959:13;8951:169;;;9026:13;;9014:26;;9095:15;;;;9060:12;;;;8987:1;8980:9;8951:169;;;-1:-1:-1;9137:3:1;;8662:484;-1:-1:-1;;;;;;8662:484:1:o;9151:187::-;9316:14;;9309:22;9291:41;;9279:2;9264:18;;9246:92::o;9343:177::-;9489:25;;;9477:2;9462:18;;9444:76::o;9525:221::-;;9674:2;9663:9;9656:21;9694:46;9736:2;9725:9;9721:18;9713:6;9694:46;:::i;9751:397::-;9953:2;9935:21;;;9992:2;9972:18;;;9965:30;10031:34;10026:2;10011:18;;10004:62;-1:-1:-1;;;10097:2:1;10082:18;;10075:31;10138:3;10123:19;;9925:223::o;10153:414::-;10355:2;10337:21;;;10394:2;10374:18;;;10367:30;10433:34;10428:2;10413:18;;10406:62;-1:-1:-1;;;10499:2:1;10484:18;;10477:48;10557:3;10542:19;;10327:240::o;10572:402::-;10774:2;10756:21;;;10813:2;10793:18;;;10786:30;10852:34;10847:2;10832:18;;10825:62;-1:-1:-1;;;10918:2:1;10903:18;;10896:36;10964:3;10949:19;;10746:228::o;10979:352::-;11181:2;11163:21;;;11220:2;11200:18;;;11193:30;11259;11254:2;11239:18;;11232:58;11322:2;11307:18;;11153:178::o;11336:400::-;11538:2;11520:21;;;11577:2;11557:18;;;11550:30;11616:34;11611:2;11596:18;;11589:62;-1:-1:-1;;;11682:2:1;11667:18;;11660:34;11726:3;11711:19;;11510:226::o;11741:349::-;11943:2;11925:21;;;11982:2;11962:18;;;11955:30;12021:27;12016:2;12001:18;;11994:55;12081:2;12066:18;;11915:175::o;12095:354::-;12297:2;12279:21;;;12336:2;12316:18;;;12309:30;12375:32;12370:2;12355:18;;12348:60;12440:2;12425:18;;12269:180::o;12454:332::-;12656:2;12638:21;;;12695:1;12675:18;;;12668:29;-1:-1:-1;;;12728:2:1;12713:18;;12706:39;12777:2;12762:18;;12628:158::o;12791:342::-;12993:2;12975:21;;;13032:2;13012:18;;;13005:30;-1:-1:-1;;;13066:2:1;13051:18;;13044:48;13124:2;13109:18;;12965:168::o;13138:408::-;13340:2;13322:21;;;13379:2;13359:18;;;13352:30;13418:34;13413:2;13398:18;;13391:62;-1:-1:-1;;;13484:2:1;13469:18;;13462:42;13536:3;13521:19;;13312:234::o;13551:346::-;13753:2;13735:21;;;13792:2;13772:18;;;13765:30;-1:-1:-1;;;13826:2:1;13811:18;;13804:52;13888:2;13873:18;;13725:172::o;13902:397::-;14104:2;14086:21;;;14143:2;14123:18;;;14116:30;14182:34;14177:2;14162:18;;14155:62;-1:-1:-1;;;14248:2:1;14233:18;;14226:31;14289:3;14274:19;;14076:223::o;14304:420::-;14506:2;14488:21;;;14545:2;14525:18;;;14518:30;14584:34;14579:2;14564:18;;14557:62;14655:26;14650:2;14635:18;;14628:54;14714:3;14699:19;;14478:246::o;14729:406::-;14931:2;14913:21;;;14970:2;14950:18;;;14943:30;15009:34;15004:2;14989:18;;14982:62;-1:-1:-1;;;15075:2:1;15060:18;;15053:40;15125:3;15110:19;;14903:232::o;15140:405::-;15342:2;15324:21;;;15381:2;15361:18;;;15354:30;15420:34;15415:2;15400:18;;15393:62;-1:-1:-1;;;15486:2:1;15471:18;;15464:39;15535:3;15520:19;;15314:231::o;15550:341::-;15752:2;15734:21;;;15791:2;15771:18;;;15764:30;-1:-1:-1;;;15825:2:1;15810:18;;15803:47;15882:2;15867:18;;15724:167::o;15896:398::-;16098:2;16080:21;;;16137:2;16117:18;;;16110:30;16176:34;16171:2;16156:18;;16149:62;-1:-1:-1;;;16242:2:1;16227:18;;16220:32;16284:3;16269:19;;16070:224::o;16299:356::-;16501:2;16483:21;;;16520:18;;;16513:30;16579:34;16574:2;16559:18;;16552:62;16646:2;16631:18;;16473:182::o;16660:408::-;16862:2;16844:21;;;16901:2;16881:18;;;16874:30;16940:34;16935:2;16920:18;;16913:62;-1:-1:-1;;;17006:2:1;16991:18;;16984:42;17058:3;17043:19;;16834:234::o;17073:339::-;17275:2;17257:21;;;17314:2;17294:18;;;17287:30;-1:-1:-1;;;17348:2:1;17333:18;;17326:45;17403:2;17388:18;;17247:165::o;17417:356::-;17619:2;17601:21;;;17638:18;;;17631:30;17697:34;17692:2;17677:18;;17670:62;17764:2;17749:18;;17591:182::o;17778:405::-;17980:2;17962:21;;;18019:2;17999:18;;;17992:30;18058:34;18053:2;18038:18;;18031:62;-1:-1:-1;;;18124:2:1;18109:18;;18102:39;18173:3;18158:19;;17952:231::o;18188:341::-;18390:2;18372:21;;;18429:2;18409:18;;;18402:30;-1:-1:-1;;;18463:2:1;18448:18;;18441:47;18520:2;18505:18;;18362:167::o;18534:346::-;18736:2;18718:21;;;18775:2;18755:18;;;18748:30;-1:-1:-1;;;18809:2:1;18794:18;;18787:52;18871:2;18856:18;;18708:172::o;18885:347::-;19087:2;19069:21;;;19126:2;19106:18;;;19099:30;19165:25;19160:2;19145:18;;19138:53;19223:2;19208:18;;19059:173::o;19237:397::-;19439:2;19421:21;;;19478:2;19458:18;;;19451:30;19517:34;19512:2;19497:18;;19490:62;-1:-1:-1;;;19583:2:1;19568:18;;19561:31;19624:3;19609:19;;19411:223::o;19639:413::-;19841:2;19823:21;;;19880:2;19860:18;;;19853:30;19919:34;19914:2;19899:18;;19892:62;-1:-1:-1;;;19985:2:1;19970:18;;19963:47;20042:3;20027:19;;19813:239::o;20057:397::-;20259:2;20241:21;;;20298:2;20278:18;;;20271:30;20337:34;20332:2;20317:18;;20310:62;-1:-1:-1;;;20403:2:1;20388:18;;20381:31;20444:3;20429:19;;20231:223::o;20459:355::-;20661:2;20643:21;;;20700:2;20680:18;;;20673:30;20739:33;20734:2;20719:18;;20712:61;20805:2;20790:18;;20633:181::o;21254:128::-;;21325:1;21321:6;21318:1;21315:13;21312:2;;;21331:18;;:::i;:::-;-1:-1:-1;21367:9:1;;21302:80::o;21387:120::-;;21453:1;21443:2;;21458:18;;:::i;:::-;-1:-1:-1;21492:9:1;;21433:74::o;21512:168::-;;21618:1;21614;21610:6;21606:14;21603:1;21600:21;21595:1;21588:9;21581:17;21577:45;21574:2;;;21625:18;;:::i;:::-;-1:-1:-1;21665:9:1;;21564:116::o;21685:125::-;;21753:1;21750;21747:8;21744:2;;;21758:18;;:::i;:::-;-1:-1:-1;21795:9:1;;21734:76::o;21815:258::-;21887:1;21897:113;21911:6;21908:1;21905:13;21897:113;;;21987:11;;;21981:18;21968:11;;;21961:39;21933:2;21926:10;21897:113;;;22028:6;22025:1;22022:13;22019:2;;;-1:-1:-1;;22063:1:1;22045:16;;22038:27;21868:205::o;22078:380::-;22163:1;22153:12;;22210:1;22200:12;;;22221:2;;22275:4;22267:6;22263:17;22253:27;;22221:2;22328;22320:6;22317:14;22297:18;22294:38;22291:2;;;22374:10;22369:3;22365:20;22362:1;22355:31;22409:4;22406:1;22399:15;22437:4;22434:1;22427:15;22291:2;;22133:325;;;:::o;22463:135::-;;-1:-1:-1;;22523:17:1;;22520:2;;;22543:18;;:::i;:::-;-1:-1:-1;22590:1:1;22579:13;;22510:88::o;22603:112::-;;22661:1;22651:2;;22666:18;;:::i;:::-;-1:-1:-1;22700:9:1;;22641:74::o;22720:127::-;22781:10;22776:3;22772:20;22769:1;22762:31;22812:4;22809:1;22802:15;22836:4;22833:1;22826:15;22852:127;22913:10;22908:3;22904:20;22901:1;22894:31;22944:4;22941:1;22934:15;22968:4;22965:1;22958:15;22984:127;23045:10;23040:3;23036:20;23033:1;23026:31;23076:4;23073:1;23066:15;23100:4;23097:1;23090:15;23116:133;-1:-1:-1;;;;;;23192:32:1;;23182:43;;23172:2;;23239:1;23236;23229:12
Swarm Source
ipfs://edb42a3d1f38828dacea853edc50d397c7123b116b1868da1b9526435971aa47
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.